瀏覽代碼

面料损耗更新

fenghaifu 2 年之前
父節點
當前提交
6c64a3a0c9

+ 1 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/mapper/xml/FabricLossMapper.xml

@@ -161,7 +161,7 @@
 	<select id="getCostAssistList" resultType="org.jeecg.modules.report.entity.FabricCostAssist">
 
 		select * from VIEW_FabricLoss_Cost_Assist where cPoid like CONCAT(#{code},'%') and cPoid not like '%样%'
-		and cVenAbbName not in ('宁波森语','马菲羊','森语集团')
+		and cVenAbbName not in ('宁波森语','马菲羊','森语集团') and iquantityinvoice>0
 		order by cAccount,cPoid,cVenAbbName,cInvName,cComUnitName
 	</select>
 	<!--开票成本-面料-->

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

@@ -279,8 +279,10 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			}
 		}
 		// 销售出库的物料
-		List<FabricPoOrderOut> poSaleOutList = fabricLossMapper.getOmInSaleOutList(invIdList);
-		fabricPoOrderOutList.addAll(poSaleOutList);
+		if (invIdList.size()>0) {
+			List<FabricPoOrderOut> poSaleOutList = fabricLossMapper.getOmInSaleOutList(invIdList);
+			fabricPoOrderOutList.addAll(poSaleOutList);
+		}
 		fabricPoOrderOutList.addAll(poOrderStockList);
 		// 形态转换物料替换成形态转换前的,并吧转换前物料,数量设置
 		List<FabricPoOrderOut> tmpOutList = new ArrayList<>();
@@ -583,6 +585,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		if (fabricOMOrderListAll.size() == 0){
 			ret.setSuccess(false);
 			ret.setMessage("本计划没有面料委外,无面损表");
+			return;
 		}
 
 		// 委外订单分组,MODetailsID会包含多个号,逗号分割
@@ -789,7 +792,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		// 获取材料出库
 		// 获取委外订单行id,出库物料信息,出库数量
 		List<FabricMoOrderCK> rowOutList = fabricLossMapper.getOmRowOutList(code);
-		rowOutList = rowOutList.stream().filter(e->e.getIQuantityOut()>0).collect(Collectors.toList());
+		rowOutList = rowOutList.stream().filter(e->e.getIQuantityOut()!=0).collect(Collectors.toList());
 		rowOutList.forEach(e->e.setBCurPlan(false));
 		// 委外入库
 		List<FabricMoOrderRK> rowInList = fabricLossMapper.getOmInDetailList(code);
@@ -816,7 +819,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			setAssemVouchInPriceList(otherInList);
 		}
 		// 设置非本次委外加工出入库成本
-		List<FabricMoOrderCK> findOutList = rowOutList.stream().filter(e->e.getIQuantityOut()>0).collect(Collectors.toList());
+		List<FabricMoOrderCK> findOutList = rowOutList.stream().filter(e->e.getIQuantityOut()!=0).collect(Collectors.toList());
 		List<FabricMoOrderCK> calCkList = new ArrayList<>();
 		for (FabricMoOrderCK outItem : findOutList){
 			// 先设置本次采购入库的
@@ -828,7 +831,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 					break;
 				}
 			}
-			if (outItem.getIQuantityOut()<=0){
+			if (outItem.getIQuantityOut()==0){
 				continue;
 			}
 			// 设置非本次委外和其他入库的
@@ -836,7 +839,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			for (FabricCommonIn inItem : findOtherInList){
 				FabricMoOrderCK calItem = outItem.getByCommonIn(editOmList, inItem);
 				calCkList.add(calItem);
-				if (outItem.getIQuantityOut()<=0){
+				if (outItem.getIQuantityOut()==0){
 					break;
 				}
 			}
@@ -1175,6 +1178,16 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				for (FabricCommonIn commonIn : commonInList){
 					if ("转换入库".equalsIgnoreCase(commonIn.getCBusType()) && commonIn.getInvId().equalsIgnoreCase(orgIn.getCInvIdFinal())) {
 						commonIn.setIPrice(iPrice);
+						if (finRkOpt.isPresent()){
+							FabricMoOrderRK rk = finRkOpt.get();
+							commonIn.setCBusType("委外加工");
+							commonIn.setCCode(rk.getCCode());
+							commonIn.setCPlanCode(rk.getCPlanCode());
+							commonIn.setCVCName(rk.getCVCName());
+							commonIn.setCVenName(rk.getCVenName());
+							commonIn.setCVenAbbName(rk.getCVenAbbName());
+
+						}
 					}
 				}
 
@@ -1261,7 +1274,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			}
 		}
 		// 去掉出库为0的数据
-		moOrderCKList = moOrderCKList.stream().filter(e->DoubleOperation.sub(e.getIQuantityOut(), e.getITempUseSum()) > 0).collect(Collectors.toList());
+		moOrderCKList = moOrderCKList.stream().filter(e->DoubleOperation.sub(e.getIQuantityOut(), e.getITempUseSum()) != 0).collect(Collectors.toList());
 		// 获取成衣委外出库内容
 		List<FabricMoOrderCK> moOrderCKList19 = fabricLossMapper.getOmOutList19(code);
 		moOrderCKList19.forEach(e->{e.setITempUseSum(0.0);e.setCSourceInvId("");e.setCInvCCodeOut("19");});
@@ -1306,13 +1319,13 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				continue;
 			}
 			// 已经扣减的去掉
-			if (DoubleOperation.sub(moOrderCK.getIQuantityOut(),moOrderCK.getITempUseSum())<=0){
+			if (DoubleOperation.sub(moOrderCK.getIQuantityOut(),moOrderCK.getITempUseSum())==0){
 				continue;
 			}
 			FabricPoOrderOut poOrderOut = FabricPoOrderOut.getByMoOut(moOrderCK);
 			// 批号是期初的,或者普通采购入库的非杂纱,算来源余纱
 			if ("期初".equalsIgnoreCase(moOrderCK.getCBatchOut()) ||
-					"普通采购".equalsIgnoreCase(moOrderCK.getCBusType()) && !"杂纱".equalsIgnoreCase(moOrderCK.getCInvNameOut())){
+					"普通采购".equalsIgnoreCase(moOrderCK.getCBusType())  && !"杂纱".equalsIgnoreCase(moOrderCK.getCInvNameOut())){
 				lyysList.add(poOrderOut);
 			}else if ("其他入库".equalsIgnoreCase(moOrderCK.getCBusType()) ||
 					"转换入库".equalsIgnoreCase(moOrderCK.getCBusType()) ||
@@ -1407,11 +1420,24 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				}
 			}
 		}
-		// 所有出库-销售出库
-		allOutList.addAll(fabricLossMapper.getOmOutList19(code));
-		// 所有出库-成衣材料出库
-		allOutList.addAll(fabricLossMapper.getSaleOutList(code));
-
+		// 销售出库和成衣出库
+		List<FabricMoOrderCK> otherOutList = new ArrayList<>();
+		otherOutList.addAll(fabricLossMapper.getOmOutList19(code));// 销售出库
+		otherOutList.addAll(fabricLossMapper.getSaleOutList(code));// 成衣材料出库
+		allOutList.addAll(otherOutList);
+		allOutList.forEach(e->e.setCSourceInvId(""));
+
+		// 获取委外订单出库物料入库详情
+		if (otherOutList.size()>0) {
+			List<String> invIdList = new ArrayList<>();
+			otherOutList.forEach(e -> invIdList.add(e.getInvOutId()));
+			List<FabricCommonIn> inList = fabricLossMapper.getInListByInvId(invIdList);
+			inList = getAssemVouchSourceInvId(inList);
+			for (FabricCommonIn item : inList) {
+				List<FabricMoOrderCK> findList = otherOutList.stream().filter(e -> e.getInvOutId().equalsIgnoreCase(item.getInvId())).collect(Collectors.toList());
+				findList.forEach(e -> e.setCSourceInvId(item.getCSourceInvId()));
+			}
+		}
 		// 入 - 出 : 出大于0 的,是转入;入大于0 的是转出
 		for (FabricPoOrderIn itemIn : allInList){
 			Double inLeft = itemIn.getIQuantity();
@@ -1435,8 +1461,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		List<FabricCostInvoiceDetail> costInvoiceDetailList = new ArrayList<>();
 
 		for (FabricMoOrderCK itemOut : allOutList){
-			if (itemOut.getIQuantityOut()>0 &&
-					itemOut.getIQuantityOut()!=0) {
+			if (DoubleOperation.getScale(itemOut.getIQuantityOut(),4)!=0) {
 				FabricCostInvoiceDetail costInvoiceDetail = FabricCostInvoiceDetail.get(itemOut,"转入成本");
 				Optional<FabricCostInvoiceDetail> findOpt = costInvoiceDetailList.stream().filter(e -> e.getId().equalsIgnoreCase(costInvoiceDetail.getId())).findFirst();
 				if (findOpt.isPresent()) {
@@ -1476,8 +1501,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		// 转出成本,设置详情
 		costInvoiceDetailList = new ArrayList<>();
 		for (FabricPoOrderIn itemIn : allInList){
-			if (itemIn.getIQuantity()>0 &&
-					DoubleOperation.mul(itemIn.getIQuantity(),itemIn.getIPrice(), 2)!=0) {
+			if (DoubleOperation.mul(itemIn.getIQuantity(),itemIn.getIPrice(), 2)!=0) {
 				FabricCostInvoiceDetail costInvoiceDetail = FabricCostInvoiceDetail.get(itemIn,"转出成本");
 				Optional<FabricCostInvoiceDetail> findOpt = costInvoiceDetailList.stream().filter(e->e.getId().equalsIgnoreCase(costInvoiceDetail.getId())).findFirst();
 				if (findOpt.isPresent()){
@@ -1511,4 +1535,56 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		return costInvoiceList;
 
 	}
+
+	/**
+	 * 设置物料形态转换入库的原始物料编号
+	 * findOtherInList - 其他入库数量及单价
+	 * @return
+	 */
+	private List<FabricCommonIn> getAssemVouchSourceInvId(List<FabricCommonIn> commonInList){
+
+		commonInList = commonInList.stream().filter(e->"转换入库".equalsIgnoreCase(e.getCBusType())).collect(Collectors.toList());
+		// 如果形态转换物料,转换前入库是转换入库,获取源头入库单
+		List<FabricAssemVouchsOrgIn> assemVouchsInvIdList = new ArrayList<>();// 形态转换物料id
+		for (FabricCommonIn commonIn : commonInList) {
+			FabricAssemVouchsOrgIn orgIn = new FabricAssemVouchsOrgIn();
+			orgIn.setCInvIdFinal(commonIn.getInvId());
+			orgIn.setCInvIdAfter(commonIn.getInvId());
+			orgIn.setCBusType(commonIn.getCBusType());
+			assemVouchsInvIdList.add(orgIn);
+		}
+		// 获取物业原始入库单信息
+		while (assemVouchsInvIdList.stream().filter(e->"转换入库".equalsIgnoreCase(e.getCBusType())).count()>0){
+			// 获取转换入库物料id
+			List<String> invIdList = assemVouchsInvIdList.stream().filter(e->"转换入库".equalsIgnoreCase(e.getCBusType())).map(FabricAssemVouchsOrgIn::getCInvIdAfter).collect(Collectors.toList());
+			// 获取转换前入入库内容
+			List<FabricAssemVouchsOrgIn> orgInList = fabricLossMapper.getAssemVouchsOrgInList(invIdList);
+			if (orgInList.size() == 0){
+				break;
+			}
+
+			for (FabricAssemVouchsOrgIn item : assemVouchsInvIdList){
+				if ("转换入库".equalsIgnoreCase(item.getCBusType())){
+					Optional<FabricAssemVouchsOrgIn> findOpt = orgInList.stream().filter(e->e.getCInvIdAfter().equals(item.getCInvIdAfter())).findFirst();
+
+					if (findOpt.isPresent()){
+						FabricAssemVouchsOrgIn findItem = findOpt.get();
+						item.setCBusType(findItem.getCBusType());
+						item.setCTableName(findItem.getCTableName());
+						item.setCInvIdAfter(findItem.getCInvIdBefore());
+						item.setAutoId(findItem.getAutoId());
+					}
+				}
+			}
+		}
+		for (FabricCommonIn commonIn : commonInList){
+			Optional<FabricAssemVouchsOrgIn> findOpt = assemVouchsInvIdList.stream().filter(e->e.getCInvIdFinal().equals(commonIn.getInvId())).findFirst();
+			if (findOpt.isPresent()){
+				commonIn.setCSourceInvId(findOpt.get().getCInvIdAfter());
+			}
+		}
+
+		return commonInList;
+
+	}
 }