料单“是否考虑管线号”,忽略管线号的同时,同样忽略单元号;修复每个阶段的总数量(件)统计料单合并项的数量错误;

This commit is contained in:
suncz
2025-10-31 13:42:13 +08:00
parent a12e4cc6a9
commit 7c2f30520c
5 changed files with 38 additions and 18 deletions

View File

@@ -4,7 +4,7 @@ import org.apache.commons.lang3.BooleanUtils;
public class MaterialOrderItemConsts {
// 根据当前阶段的是否考虑管线号、隔热代号,返回之前阶段的管线号
// 根据当前阶段的是否考虑单元号、管线号、隔热代号,返回之前阶段的管线号
public static String getPrevStageLineAccount(Boolean ignoreLineAccount, String prevStageLineAccount) {
return BooleanUtils.isTrue(ignoreLineAccount) ? "-" : prevStageLineAccount;
}

View File

@@ -481,7 +481,7 @@ public class MaterialOrderController extends BaseController {
return RespData.error("阶段不能为空");
}
if (ignoreLineAccount == null) {
return RespData.error("是否考虑管线号隔热代号不能为空");
return RespData.error("是否考虑单元号、管线号隔热代号不能为空");
}
}
//获得文件名

View File

@@ -131,7 +131,7 @@ public class MaterialOrder extends OrderBase{
/** 是否创建订货单 */
private Boolean hasPurchaseOrder;
/** 匹配忽略管线号、隔热代号 */
/** 匹配忽略单元号、管线号、隔热代号 */
private Boolean ignoreLineAccount;
public String getName() {

View File

@@ -674,18 +674,25 @@ public class MaterialOrderService extends BaseOrderService<MaterialOrder, Long>
+"_"+materialOrderItem.getMemo()+"_"+materialOrderItem.getSize()
+"_"+materialOrderItem.getSpecialRequest()+"_"+ MaterialOrderItemConsts.getPrevStageLineAccount(ignoreLineAccount, materialOrderItem.getInsulationCode())
+"_"+ MaterialOrderItemConsts.getPrevStageLineAccount(ignoreLineAccount, materialOrderItem.getLineAccount()) +"_"+materialOrderItem.getAreaAccount()
+"_"+materialOrderItem.getSiteAccount()+"_"+materialOrderItem.getUnitAccount()
+"_"+materialOrderItem.getSiteAccount()+"_"+ MaterialOrderItemConsts.getPrevStageLineAccount(ignoreLineAccount, materialOrderItem.getUnitAccount())
+"_"+materialOrderItem.getProductCode()+"_"+materialOrderItem.getPurchaseCode()
+"_"+materialOrderItem.getMakeCode()+"_"+materialOrderItem.getMaterialType()
+"_"+materialOrderItem.getEndFace()+"_"+materialOrderItem.getPressureLevel();
if (!countMap.containsKey(str)){
countMap.put(str,materialOrderItem.getCount().compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : materialOrderItem.getCount());
countMap.put(str,materialOrderItem.getCount());
}else {
BigDecimal count = countMap.get(str);
count = count.add(materialOrderItem.getCount().compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : materialOrderItem.getCount());
count = count.add(materialOrderItem.getCount());
countMap.put(str,count);
}
}
// 每一个阶段遍历countMap并替换负数值为 0
for (Map.Entry<String, BigDecimal> entry : countMap.entrySet()) {
BigDecimal value = entry.getValue();
if (value.compareTo(BigDecimal.ZERO) < 0) { // 如果小于 0 , 替换为 0
entry.setValue(BigDecimal.ZERO);
}
}
}
}
materialOrder.setStage(stage.getId().intValue());
@@ -826,7 +833,7 @@ public class MaterialOrderService extends BaseOrderService<MaterialOrder, Long>
Integer ind = Integer.valueOf(ExcelUtil2.getCellValue(row.getCell(0)));
String name = ExcelUtil2.getCellValue(row.getCell(1));
String areaAccount = ExcelUtil2.getCellValue(row.getCell(2));
String unitAccount = ExcelUtil2.getCellValue(row.getCell(3));
String unitAccount = BooleanUtils.isTrue(ignoreLineAccount) ? "-" : ExcelUtil2.getCellValue(row.getCell(3));
String siteAccount = ExcelUtil2.getCellValue(row.getCell(4));
String lineAccount = BooleanUtils.isTrue(ignoreLineAccount) ? "-" : ExcelUtil2.getCellValue(row.getCell(5));
String codeType = ExcelUtil2.getCellValue(row.getCell(6));
@@ -1093,9 +1100,9 @@ public class MaterialOrderService extends BaseOrderService<MaterialOrder, Long>
// }
item.setTotalWeight(totalWeight == null ? (product.getgWeight()==null?BigDecimal.ZERO:product.getgWeight()).multiply(count) : totalWeight);
orderCount = orderCount.add(count);
// if(negativeCount.compareTo(BigDecimal.ZERO)<0){//后续阶段数量意外减少,采购数量为负数
// orderCount = orderCount.add(negativeCount);
// }
if(negativeCount.compareTo(BigDecimal.ZERO)<0){//后续阶段数量意外减少,采购数量为负数
orderCount = orderCount.add(negativeCount);
}
item.setSupplierIds(new ArrayList<>());
for (Integer key : valueMap.keySet()) {
@@ -1156,6 +1163,13 @@ public class MaterialOrderService extends BaseOrderService<MaterialOrder, Long>
}
}
}
// 料单项合并后,当采购数量为负数时,不计入总数量
for (Map.Entry<String, MaterialOrderItem> entry : ignoreLineAccountMergeItemMap.entrySet()) {
MaterialOrderItem item = entry.getValue();
if (item.getCount().compareTo(BigDecimal.ZERO) < 0) { // 如果小于 0
orderCount = orderCount.subtract(item.getCount());
}
}
materialOrder.setTotalCount(orderCount);
materialOrder.setTotalWeight(orderWeight);
update(materialOrder);
@@ -1244,20 +1258,26 @@ public class MaterialOrderService extends BaseOrderService<MaterialOrder, Long>
+"_"+prevItem.getMemo()+"_"+prevItem.getSize()
+"_"+prevItem.getSpecialRequest()+"_"+ MaterialOrderItemConsts.getPrevStageLineAccount(materialOrder.getIgnoreLineAccount(), prevItem.getInsulationCode())
+"_"+ MaterialOrderItemConsts.getPrevStageLineAccount(materialOrder.getIgnoreLineAccount(), prevItem.getLineAccount()) +"_"+prevItem.getAreaAccount()
+"_"+prevItem.getSiteAccount()+"_"+prevItem.getUnitAccount()
+"_"+prevItem.getSiteAccount()+"_"+ MaterialOrderItemConsts.getPrevStageLineAccount(materialOrder.getIgnoreLineAccount(), prevItem.getUnitAccount())
+"_"+prevItem.getProductCode()+"_"+prevItem.getPurchaseCode()
+"_"+prevItem.getMakeCode()+"_"+prevItem.getMaterialType()
+"_"+prevItem.getEndFace()+"_"+prevItem.getPressureLevel();
// 如果 prevItem.getCount()的值 小于0则返回 BigDecimal.ZERO, 大于或等于0返回 prevItem.getCount()本身。
if (!prevMap.containsKey(str)){
prevMap.put(str,prevItem.getCount().compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : prevItem.getCount());
prevMap.put(str,prevItem.getCount());
prevMapM.put(str,prevItem);
}else {
BigDecimal prevCount = prevMap.get(str).add(prevItem.getCount().compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : prevItem.getCount());
BigDecimal prevCount = prevMap.get(str).add(prevItem.getCount());
prevMap.put(str,prevCount);
prevMapM.put(str,prevItem);
}
}
// 每一个阶段遍历prevMap并替换负数值为 0
for (Map.Entry<String, BigDecimal> entry : prevMap.entrySet()) {
BigDecimal value = entry.getValue();
if (value.compareTo(BigDecimal.ZERO) < 0) { // 如果小于 0 , 替换为 0
entry.setValue(BigDecimal.ZERO);
}
}
}
//获取当前阶段
List<MaterialOrderItem> itemList = materialOrderItemService.findByVersionNum(materialOrder.getVersionNum(), materialOrder.getId());
@@ -1275,7 +1295,7 @@ public class MaterialOrderService extends BaseOrderService<MaterialOrder, Long>
+"_"+item.getMemo()+"_"+item.getSize()
+"_"+item.getSpecialRequest()+"_"+ MaterialOrderItemConsts.getPrevStageLineAccount(materialOrder.getIgnoreLineAccount(), item.getInsulationCode())
+"_"+ MaterialOrderItemConsts.getPrevStageLineAccount(materialOrder.getIgnoreLineAccount(), item.getLineAccount()) +"_"+item.getAreaAccount()
+"_"+item.getSiteAccount()+"_"+item.getUnitAccount()
+"_"+item.getSiteAccount()+"_"+ MaterialOrderItemConsts.getPrevStageLineAccount(materialOrder.getIgnoreLineAccount(), item.getUnitAccount())
+"_"+item.getProductCode()+"_"+item.getPurchaseCode()
+"_"+item.getMakeCode()+"_"+item.getMaterialType()
+"_"+item.getEndFace()+"_"+item.getPressureLevel();
@@ -1369,7 +1389,7 @@ public class MaterialOrderService extends BaseOrderService<MaterialOrder, Long>
materialOrderItem.setProductId(entry.getValue().getProductId());
materialOrderItem.setName(entry.getValue().getName());
materialOrderItem.setAreaAccount(entry.getValue().getAreaAccount());
materialOrderItem.setUnitAccount(entry.getValue().getUnitAccount());
materialOrderItem.setUnitAccount(MaterialOrderItemConsts.getPrevStageLineAccount(materialOrder.getIgnoreLineAccount(), entry.getValue().getUnitAccount()));
materialOrderItem.setSiteAccount(entry.getValue().getSiteAccount());
materialOrderItem.setLineAccount(MaterialOrderItemConsts.getPrevStageLineAccount(materialOrder.getIgnoreLineAccount(), entry.getValue().getLineAccount()));
materialOrderItem.setCodeType(entry.getValue().getCodeType());

View File

@@ -83,7 +83,7 @@
<div class="submitBody-row">
<div class="submitBody-row-position">
<div class="input-wrapper required">
<label>是否考虑管线号隔热代号</label>
<label>是否考虑单元号、管线号隔热代号</label>
<select id="ignoreLineAccount" name="ignoreLineAccount" data-init="false">
<option value="false"></option>
<option value="true"></option>
@@ -119,7 +119,7 @@
return;
}
if ($("#ignoreLineAccount").val() == null ||$("#ignoreLineAccount").val() == "null"){
Dialog.error("是否考虑管线号隔热代号不能为空");
Dialog.error("是否考虑单元号、管线号隔热代号不能为空");
return;
}
if (!check()) {