Browse Source

面料损耗bug调整

fenghaifu 2 years ago
parent
commit
2b77cc9bcf

+ 29 - 4
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/service/impl/FabricLossServiceImpl.java

@@ -98,7 +98,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			// 成本发票
 			setCostInvoiceList(ret, editData);
 			// 计算单件成本
-			Double costInTotal = ret.getFabricCostInvoiceList().stream().mapToDouble(FabricCostInvoice::getIMoney).sum();
+			Double costInTotal = ret.getFabricCostInvoiceList().stream().filter(e->e.getIMoney() != null).mapToDouble(FabricCostInvoice::getIMoney).sum();
 			BigDecimal dVal = new BigDecimal(costInTotal);
 			ret.setActualMoney(dVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 			BigDecimal bdPriceReal = new BigDecimal(0);
@@ -1158,8 +1158,9 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				assemVouchsInvIdList.add(orgIn);
 			}
 		}
+		int deep = 0;// 查询深度
 		// 获取物业原始入库单信息
-		while (assemVouchsInvIdList.stream().filter(e->"转换入库".equalsIgnoreCase(e.getCBusType())).count()>0){
+		while (assemVouchsInvIdList.stream().filter(e->"转换入库".equalsIgnoreCase(e.getCBusType())).count()>0 && deep < 10){
 			// 获取转换入库物料id
 			List<String> invIdList = assemVouchsInvIdList.stream().filter(e->"转换入库".equalsIgnoreCase(e.getCBusType())).map(FabricAssemVouchsOrgIn::getCInvIdAfter).collect(Collectors.toList());
 			// 获取转换前入入库内容
@@ -1181,6 +1182,8 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 					}
 				}
 			}
+
+			deep++;
 		}
 		// 设置采购入库单价
 		List<Integer> autoIdList = assemVouchsInvIdList.stream().filter(e->
@@ -1522,6 +1525,28 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				}
 			}
 		}
+		// 转入数量有负数的,从正数扣除
+		List<FabricPoOrderIn> nList = allInList.stream().filter(e->e.getIQuantity()<0).collect(Collectors.toList());// 负数
+		allInList = allInList.stream().filter(e->e.getIQuantity()>=0).collect(Collectors.toList());// 正数
+		if (nList.size()>0){
+			for (FabricPoOrderIn nItem : nList){
+				Double nQuantity = DoubleOperation.mul(nItem.getIQuantity(),-1.0, 4);
+				for (FabricPoOrderIn item : allInList){
+					if (item.getInvId().equalsIgnoreCase(nItem.getInvId())){
+						Double quantity = item.getIQuantity();
+						Double subQuantity = Math.min(nQuantity, quantity);
+						nQuantity = DoubleOperation.sub(nQuantity, subQuantity);
+						item.setIQuantity(DoubleOperation.sub(quantity, subQuantity));
+						if (nQuantity <= 0){
+							break;
+						}
+					}
+				}
+				nItem.setIQuantity(DoubleOperation.mul(nItem.getIQuantity(),-1.0, 4));
+			}
+		}
+		nList = nList.stream().filter(e->e.getIQuantity()<0).collect(Collectors.toList());
+		allInList.addAll(nList);
 		// 所有出库-委外出库
 		List<FabricMoOrderCK> allOutList = new ArrayList<>();
 		for (FabricOMOrder omOrder : allOmOrderList){
@@ -1561,11 +1586,11 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				List<FabricMoOrderCK> findList = otherOutList.stream().filter(e -> e.getInvOutId().equalsIgnoreCase(item.getInvId())).collect(Collectors.toList());
 				findList.forEach(e -> {
 					e.setCSourceInvId(item.getCSourceInvId());
-					e.setIQuantityOut(DoubleOperation.mul(e.getIQuantityOut(), item.getIRate(), 2));
+					e.setIQuantityOut(DoubleOperation.mul(e.getIQuantityOut(), item.getIRate(), 4));
 				});
 			}
 		}
-		// 转入成本有负数的,从正数扣除
+
 		// 入 - 出 : 出大于0 的,是转入;入大于0 的是转出
 		for (FabricPoOrderIn itemIn : allInList){
 			Double inLeft = itemIn.getIQuantity();