Browse Source

面料损耗更新

fenghaifu 2 years ago
parent
commit
a3ec02f76e

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

@@ -144,4 +144,7 @@ public interface FabricLossMapper extends BaseMapper<FabricLoss> {
 	// 获取本次采购入库的形态转换
 	@DS("multi-three")
 	List<Map<String,Object>> getPoAssemVouchList(@Param("code")String code);
+	@DS("multi-three")
+	@InterceptorIgnore(tenantLine = "1")
+	List<FabricPoOrderOut> getOmInSaleOutList(@Param("invIdList")List<String> invIdList);
 }

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

@@ -593,4 +593,20 @@
 			)
 		)
 	</select>
+	<!-- 获取委外入库销售出库的数量 -->
+	<select id="getOmInSaleOutList" resultType="org.jeecg.modules.report.entity.FabricPoOrderOut">
+
+		select cCode,cInvCode,cColor,cBatch,sum(iQuantity) as iQuantity from
+		(
+			select cInvCode,isnull(cFree1,'') as cColor,isnull(cbatch,'') as cBatch,'销售出库' as cCode,iQuantity,0 as iPrice
+			from rdrecords32 where
+			(cInvCode+isnull(cFree1,'')+isnull(cbatch,'') in
+			<foreach  item="item" collection="invIdList" index="index"  open="(" separator="," close=")">
+				#{item}
+			</foreach>
+
+			)
+		) as t1
+		group by cCode,cInvCode,cBatch,cColor
+	</select>
 </mapper>

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

@@ -266,50 +266,106 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		List<FabricPoOrderOut> fabricPoOrderOutList = fabricLossMapper.getMoOrderInToOther(code);
 		// 委外入库仓库库存
 		List<FabricPoOrderOut> poOrderStockList = fabricLossMapper.getMoStockList(code);
+		// 获取入库的物料id列表
+		List<String> invIdList = new ArrayList<>();
+		for (FabricOMOrder omOrder : fabricOMOrderList){
+			List<FabricMoOrderRK> rkList = omOrder.getFabricMoOrderRKList();
+			if (oConvertUtils.listIsEmpty(rkList)){
+				continue;
+			}
+			for (FabricMoOrderRK rkItem : rkList){
+				invIdList.add(rkItem.getInvId());
+			}
+		}
+		// 销售出库的物料
+		List<FabricPoOrderOut> poSaleOutList = fabricLossMapper.getOmInSaleOutList(invIdList);
+		fabricPoOrderOutList.addAll(poSaleOutList);
+		fabricPoOrderOutList.addAll(poOrderStockList);
+		// 形态转换物料替换成形态转换前的,并吧转换前物料,数量设置
+		List<FabricPoOrderOut> tmpOutList = new ArrayList<>();
+		for (FabricPoOrderOut outItem : fabricPoOrderOutList){
+			List<Map<String, Object>> assemVouchList = fabricAssemVouchList.stream().filter(e->
+					oConvertUtils.getString(e.get("cInvCode2")).equals(outItem.getCInvCode()) &&
+							oConvertUtils.getString(e.get("cColor2")).equals(outItem.getCColor()) &&
+							outItem.getCBatch().equalsIgnoreCase(oConvertUtils.getString(e.get("cAVBatch2")))).collect(Collectors.toList());
+			if (assemVouchList.size() == 0){
+				tmpOutList.add(outItem);
+				continue;
+			}
+			Double outSum = outItem.getIQuantity();
+			for (int i=0; i<assemVouchList.size(); i++){
+				Map<String, Object> assemVouchItem = assemVouchList.get(i);
+				String invCode = oConvertUtils.getString(assemVouchItem.get("cInvCode"));
+				String cColor = oConvertUtils.getString(assemVouchItem.get("cColor"));
+				String cAVBatch = oConvertUtils.getString(assemVouchItem.get("cAVBatch"));
+				Double iQuantity = oConvertUtils.getDouble(assemVouchItem.get("iAVQuantity").toString(), 0);
+				Double curOutSum = Math.min(outSum, iQuantity);
+				if (i == assemVouchList.size() -1){
+					curOutSum = outSum;
+				}
+				outSum-=curOutSum;
+				FabricPoOrderOut curItem = JSON.parseObject(JSON.toJSONString(outItem),FabricPoOrderOut.class);
+				curItem.setIQuantity(curOutSum);
+				curItem.setCInvCode(invCode);
+				curItem.setCColor(cColor);
+				curItem.setCBatch(cAVBatch);
+				tmpOutList.add(curItem);
+			}
+		}
+		fabricPoOrderOutList = tmpOutList;
 		// 采购订单设置分配数量、委外供应商、余纱、采购损耗
 		for (FabricOMOrder omOrder : fabricOMOrderList){
 			// 委外入库的批次,及单价(单价=(单价*数量)加/数量
-
-			if (omOrder.getFabricMoOrderRKList() == null){
+			List<FabricMoOrderRK> rkList = omOrder.getFabricMoOrderRKList();
+			if (oConvertUtils.listIsEmpty(rkList)){
 				continue;
 			}
 			List<String> inBatchList = new ArrayList<>();
 			Double dSum=0.0,dMoney=0.0,dPrice=0.0;
-			for (FabricMoOrderRK rkItem : omOrder.getFabricMoOrderRKList()){
-				inBatchList.add(rkItem.getCBatch().toLowerCase());
+			for (FabricMoOrderRK rkItem : rkList){
+				if (!inBatchList.contains(rkItem.getCBatch().toLowerCase())) {
+					inBatchList.add(rkItem.getCBatch().toLowerCase());
+				}
 				dSum = DoubleOperation.add(dSum,omOrder.getIQuantityIn());
 				dMoney = DoubleOperation.add(dMoney, DoubleOperation.mul(rkItem.getIQuantityIn(),rkItem.getIPrice()));
 			}
 			if (dSum>0){
 				dPrice = DoubleOperation.div(dMoney,dSum,4);
 			}
-			// 获取委外形态转换物料
-			List<Map<String, Object>> tmpAssemVouchList = fabricAssemVouchList.stream().filter(e->
-					oConvertUtils.getString(e.get("cInvCode")).equals(omOrder.getCInvCode()) &&
-							oConvertUtils.getString(e.get("cColor")).equals(omOrder.getCColor()) &&
-							inBatchList.contains(oConvertUtils.getString(e.get("cBatch")).toLowerCase())).collect(Collectors.toList());
 
-			// 未形态转换物料
-			List<FabricPoOrderOut> tmpOmOutList1 = fabricPoOrderOutList.stream().filter(e->
+			List<FabricPoOrderOut> tmpOmOutList = fabricPoOrderOutList.stream().filter(e->
 					e.getCInvCode().equals(omOrder.getCInvCode()) &&
 							e.getCColor().equals(omOrder.getCColor()) &&
-							inBatchList.contains(oConvertUtils.getString(e.getCBatch()).toLowerCase())).collect(Collectors.toList());
-
+							inBatchList.contains(oConvertUtils.getString(e.getCBatch()).toLowerCase()) &&
+					e.getIQuantity()!=0).collect(Collectors.toList());
+
+			List<FabricPoOrderOut> tmpOmOutList1 = new ArrayList<>();
+			// 出库数量大于入库数量,设置成入库数量
+			for (String cBatch : inBatchList){
+				Double inSum = rkList.stream().filter(e->e.getCBatch().equalsIgnoreCase(cBatch)).mapToDouble(FabricMoOrderRK::getIQuantityIn).sum();
+				for (FabricPoOrderOut item : tmpOmOutList){
+					if (item.getCInvCode().equalsIgnoreCase(omOrder.getCInvCode()) &&
+					item.getCColor().equalsIgnoreCase(omOrder.getCColor()) &&
+					item.getCBatch().equalsIgnoreCase(cBatch)){
+						Double curSum = Math.min(inSum,item.getIQuantity());
+						inSum-= curSum;
+						item.setIQuantity(DoubleOperation.getScale(curSum,4));
+						tmpOmOutList1.add(item);
+						if (inSum<=0){
+							break;
+						}
+					}
 
-			// 形态转换物料
-			List<FabricPoOrderOut> tmpOmOutList2 = fabricPoOrderOutList.stream().filter(out->{
-				return tmpAssemVouchList.stream().filter(e ->
-						oConvertUtils.getString(e.get("cInvCode2")).equals(omOrder.getCInvCode()) &&
-								oConvertUtils.getString(e.get("cColor2")).equals(omOrder.getCColor()) &&
-								inBatchList.contains(oConvertUtils.getString(e.get("cAVBatch2")).toLowerCase())
-				).count() > 0;
-			}).collect(Collectors.toList());
+				}
+			}
 
-			tmpOmOutList1.addAll(tmpOmOutList2);
 
 
 			for (FabricPoOrderOut item : tmpOmOutList1){
 				String cCode = item.getCCode();
+				if (oConvertUtils.isEmpty(cCode)){
+					continue;
+				}
 				int index1 = cCode.indexOf("SY");
 				if (index1 == -1) {
 					continue;
@@ -322,6 +378,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				item.setIMoney(DoubleOperation.mul(dPrice, item.getIQuantity()));
 
 			}
+			/*
 			// 设置仓库库存
 			List<FabricPoOrderOut> findPoOrderStockList = poOrderStockList.stream().filter(e->
 					omOrder.getCInvCode().equals(e.getCInvCode()) &&
@@ -332,7 +389,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				item.setIMoney(DoubleOperation.mul(dPrice, item.getIQuantity()));
 
 			}
-			tmpOmOutList1.addAll(findPoOrderStockList);
+			tmpOmOutList1.addAll(findPoOrderStockList);*/
 
 			omOrder.setFabricPoOrderOutList(tmpOmOutList1);
 		}
@@ -876,7 +933,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 					groupCkList.add(ckItem);
 				}
 			}
-			omOrder.setFabricMoOrderCKList(groupCkList.stream().filter(e->e.getIQuantityOut()>0).collect(Collectors.toList()));
+			omOrder.setFabricMoOrderCKList(groupCkList.stream().filter(e->e.getIQuantityOut()!=0).collect(Collectors.toList()));
 
 			List<FabricMoOrderRK> rkList = omOrder.getFabricMoOrderRKList();
 			List<FabricMoOrderRK> groupRkList = new ArrayList<>();
@@ -896,7 +953,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 					groupRkList.add(rkItem);
 				}
 			}
-			omOrder.setFabricMoOrderRKList(groupRkList.stream().filter(e->e.getIQuantityIn()>0).collect(Collectors.toList()));
+			omOrder.setFabricMoOrderRKList(groupRkList.stream().filter(e->e.getIQuantityIn()!=0).collect(Collectors.toList()));
 		}
 
 	}
@@ -940,13 +997,13 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				if (findInOutList.size() == 0){
 					continue;
 				}*/
-				List<FabricMoOrderRK> findInList = moInList.stream().filter(e->e.getMODetailsID().equals(detailId)&&e.getInvId().equalsIgnoreCase(item.getInvId())).collect(Collectors.toList());
+				List<FabricMoOrderRK> findInList = moInList.stream().filter(e->e.getMODetailsID().equals(detailId.toString())&&e.getInvId().equalsIgnoreCase(item.getInvId())).collect(Collectors.toList());
 				if (findInList.size() == 0){
 					continue;
 				}
 				Double iProcessFee = findInList.get(0).getIProcessFee();
 				Double iQuantityIn = findInList.get(0).getIQuantityIn();
-				Double iTotalIn = moInList.stream().filter(e->e.getMODetailsID().equals(detailId)).mapToDouble(FabricMoOrderRK::getIQuantityIn).sum();
+				Double iTotalIn = moInList.stream().filter(e->e.getMODetailsID().equals(detailId.toString())).mapToDouble(FabricMoOrderRK::getIQuantityIn).sum();
 				Double iOutTotalMoney = 0.0;// 出库材料费用
 
 				for (FabricMoOrderCK ckItem : outList){