Kaynağa Gözat

面料损耗更新

fenghaifu 2 yıl önce
ebeveyn
işleme
b4ec68fecf

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

@@ -616,36 +616,26 @@
 	</select>
 	<!-- 获取销售出库数量 -->
 	<select id="getSaleOutList" resultType="org.jeecg.modules.report.entity.FabricMoOrderCK">
-
+		select * from (
 		select distinct c.autoid,'' as cOmCode,c.cInvCode as cInvCodeOut,b.cInvName as cInvNameOut,
 		isnull(c.cFree1,'') as cColorOut,isnull(c.cBatch,'') as cBatchOut,c.iQuantity as iQuantityOut,
-				isnull(c.cbatchproperty9,'') as cVenAbbName,b.cInvCCode as cInvCCodeOut,
+				isnull(c.cbatchproperty9,'') as cVenAbbName,b.cInvCCode as cInvCCodeOut,b.cInvCCode,
 		(select top 1 cInvCName from InventoryClass y where charindex(y.cinvccode,b.cInvCCode)>0 and len(y.cinvccode)=4 order by len(y.cinvccode),y.cinvccode) as cInvCNameOut
 		from rdrecords32 c inner join SO_SODetails d on c.iorderdid=d.iSOsID
 		inner join so_somain e on e.id=d.id
 		INNER JOIN Inventory b ON c.cinvcode = b.cinvcode
-		where d.id in (
-		select distinct e.id
-				from om_momain a
-				inner join OM_MODetails b on a.moid=b.moid
-				inner join rdrecords32 c on c.iorderdid  =b.isosid and b.cinvcode=c.cinvcode
-				INNER JOIN Inventory d ON c.cinvcode = d.cinvcode
-				inner join SO_SODetails e on e.iSOsID=c.isodid
-				where a.ccode like CONCAT(#{code},'%')  and a.ccode not like '%样%' and
-					(d.cInvCCode like '01%' or d.cInvCCode like '02%' or d.cInvCCode like '03%' or d.cInvCCode like '04%')
-		) or e.cSOCode like CONCAT(#{code},'%') and
-		(b.cInvCCode like '01%' or b.cInvCCode like '02%' or b.cInvCCode like '03%' or b.cInvCCode like '04%')
-		<!--
-                select distinct c.autoid,a.ccode as cOmCode,c.cInvCode as cInvCodeOut,d.cInvName as cInvNameOut,
-                isnull(c.cFree1,'') as cColorOut,isnull(c.cBatch,'') as cBatchOut,c.iQuantity as iQuantityOut,
-                isnull(c.cbatchproperty9,'') as cVenAbbName
-                from om_momain a
-                inner join OM_MODetails b on a.moid=b.moid
-                inner join rdrecords32 c on c.iorderdid  =b.isosid and b.cinvcode=c.cinvcode
-                INNER JOIN Inventory d ON c.cinvcode = d.cinvcode
-                where a.ccode like CONCAT(#{code},'%')  and a.ccode not like '%样%' and
-                    (d.cInvCCode like '01%' or d.cInvCCode like '02%' or d.cInvCCode like '03%' or d.cInvCCode like '04%')
-        -->
+		where
+			d.id in (
+			select distinct e.id
+					from om_momain a
+					inner join OM_MODetails b on a.moid=b.moid
+					inner join rdrecords32 c on c.iorderdid  =b.isosid and b.cinvcode=c.cinvcode
+					INNER JOIN Inventory d ON c.cinvcode = d.cinvcode
+					inner join SO_SODetails e on e.iSOsID=c.isodid
+					where a.ccode like CONCAT(#{code},'%')  and a.ccode not like '%样%' and
+						(d.cInvCCode like '01%' or d.cInvCCode like '02%' or d.cInvCCode like '03%' or d.cInvCCode like '04%')
+			) or e.cSOCode like CONCAT(#{code},'%')
+		) as t1 where cInvCCode like '01%' or cInvCCode like '02%' or cInvCCode like '03%' or cInvCCode like '04%'
 	</select>
 	<!--获取本次采购入库的形态转换-->
 	<select id="getPoAssemVouchList" resultType="map">

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

@@ -574,6 +574,15 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 							fabricPoOrder.getId().equalsIgnoreCase(e.getParentId())).collect(Collectors.toList());
 			fabricPoOrder.setFabricPoOrderInList(tmpFabricPoOrderInList);
 
+			// 设置仓库库存
+			List<FabricPoOrderOut> curOutList = new ArrayList<>();
+			fabricPoOrder.setFabricPoOrderOutList(curOutList);
+			List<FabricPoOrderOut> findPoOrderStockList = poOrderStockList.stream().filter(e->
+					fabricPoOrder.getId().equalsIgnoreCase(e.getParentId())).collect(Collectors.toList());
+			if (oConvertUtils.listIsNotEmpty(findPoOrderStockList)) {
+				curOutList.addAll(findPoOrderStockList);
+			}
+
 			// 设置被其他委外订单使用信息
 			List<FabricPoOrderOut> findFabricPoOrderOutList = fabricPoOrderOutList.stream().filter(e->
 					oConvertUtils.getString(e.getCInvCode()).equals(oConvertUtils.getString(fabricPoOrder.getCInvCode())) &&
@@ -596,13 +605,8 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				}
 
 			}
-			// 设置仓库库存
-			List<FabricPoOrderOut> findPoOrderStockList = poOrderStockList.stream().filter(e->
-							fabricPoOrder.getId().equalsIgnoreCase(e.getParentId())).collect(Collectors.toList());
-			if (oConvertUtils.listIsNotEmpty(findPoOrderStockList)) {
-				findFabricPoOrderOutList.addAll(findPoOrderStockList);
-			}
-			fabricPoOrder.setFabricPoOrderOutList(findFabricPoOrderOutList);
+			curOutList.addAll(findFabricPoOrderOutList);
+
 		}
 		ret.setFabricPoOrderList(fabricPoOrderList);
 	}
@@ -780,7 +784,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		}
 		//获取委外订单运费发票金额
 		List<FabricCostInvoice> fabricCostInvoiceList3 = fabricLossMapper.getOmInvoiceMoneyYfList(code);
-		Double dMoneyYf = fabricCostInvoiceList3.stream().mapToDouble(FabricCostInvoice::getIMoney).sum();  // 运费总金额
+		//Double dMoneyYf = fabricCostInvoiceList3.stream().mapToDouble(FabricCostInvoice::getIMoney).sum();  // 运费总金额
 		fabricCostInvoiceList.addAll(fabricCostInvoiceList3);
 		// 织、染、印排序
 		fabricCostInvoiceList.forEach(e->{
@@ -801,11 +805,11 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		fabricCostInvoiceList.addAll(inoutCostList);
 
 		// 第一行转出成本减去运费发票
-		Optional<FabricCostInvoice> findOutInvoiceOpt = inoutCostList.stream().filter(e->"转出成本".equalsIgnoreCase(e.getCBusType())).findFirst();
-		if (findOutInvoiceOpt.isPresent()){
-			FabricCostInvoice findOutInvoice = findOutInvoiceOpt.get();
-			findOutInvoice.setIMoney(DoubleOperation.sub(findOutInvoice.getIMoney(),dMoneyYf));
-		}
+//		Optional<FabricCostInvoice> findOutInvoiceOpt = inoutCostList.stream().filter(e->"转出成本".equalsIgnoreCase(e.getCBusType())).findFirst();
+//		if (findOutInvoiceOpt.isPresent()){
+//			FabricCostInvoice findOutInvoice = findOutInvoiceOpt.get();
+//			findOutInvoice.setIMoney(DoubleOperation.sub(findOutInvoice.getIMoney(),dMoneyYf));
+//		}
 		// 设置保存的无税金额
 		if (editData != null){
 			List<FabricCostInvoice> costInvoiceList = editData.getFabricCostInvoiceList();
@@ -904,6 +908,12 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				}
 			}
 		}
+		// 其他入库的,匹配本计划号的排前面
+		List<FabricCommonIn> otherInList1 = new ArrayList<>();
+		otherInList1.addAll(otherInList.stream().filter(e->oConvertUtils.getString(e.getCPlanCode()).indexOf(code)>-1).collect(Collectors.toList()));
+		otherInList1.addAll(otherInList.stream().filter(e->oConvertUtils.getString(e.getCPlanCode()).indexOf(code)==-1).collect(Collectors.toList()));
+		otherInList = otherInList1;
+
 		// 设置非本次委外加工出入库成本
 		List<FabricMoOrderCK> findOutList = rowOutList.stream().filter(e->e.getIQuantityOut()!=0).collect(Collectors.toList());
 		List<FabricMoOrderCK> calCkList = new ArrayList<>();
@@ -936,11 +946,12 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			bFind = false;
 			for (FabricOMOrder omOrder : omOrderList){
 				// 已经设置过的忽略
-				if (omOrder.getFabricMoOrderCKList() != null){
-					break;
+				if (omOrder.getFabricMoOrderRKList() != null){
+					continue;
 				}
 				// 不存在未算成本的出库单
-				if (rowOutList.stream().filter(e->e.getIQuantityOut()>0&&omOrder.getMODetailsID().indexOf(e.getMODetailsID().toString())>-1).count() == 0) {
+				if (rowOutList.stream().filter(e->DoubleOperation.mul(e.getIQuantityOut(),1.0,4)>0&&
+						omOrder.getMODetailsID().indexOf(e.getMODetailsID().toString())>-1).count() == 0) {
 					bFind = true;
 					// 设置订单出库明细
 					List<FabricMoOrderCK> findCkList = calCkList.stream().filter(e -> omOrder.getMODetailsID().indexOf(e.getMODetailsID().toString()) > -1).collect(Collectors.toList());
@@ -981,6 +992,16 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			}
 
 		}while(bFind);
+
+		// 没计算成本的设置为0
+		for (FabricMoOrderCK item : calCkList){
+			if (item.getIMoney() == null){
+				item.setIMoney(0.0);
+			}
+			if (item.getIPrice() == null){
+				item.setIPrice(0.0);
+			}
+		}
 		// 设置没计算成本的内容
 		for (FabricOMOrder omOrder : omOrderList){
 			if (omOrder.getFabricMoOrderCKList() == null){
@@ -1160,7 +1181,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		}
 		int deep = 0;// 查询深度
 		// 获取物业原始入库单信息
-		while (assemVouchsInvIdList.stream().filter(e->"转换入库".equalsIgnoreCase(e.getCBusType())).count()>0 && deep < 10){
+		while (assemVouchsInvIdList.stream().filter(e->"转换入库".equalsIgnoreCase(e.getCBusType())).count()>0 && deep < 5){
 			// 获取转换入库物料id
 			List<String> invIdList = assemVouchsInvIdList.stream().filter(e->"转换入库".equalsIgnoreCase(e.getCBusType())).map(FabricAssemVouchsOrgIn::getCInvIdAfter).collect(Collectors.toList());
 			// 获取转换前入入库内容
@@ -1393,7 +1414,55 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		moOrderCKList.addAll(moOrderCKList19);
 		// 根据采购订单轮询,设置分配数量、余纱、损耗
 		List<FabricPoOrder> poOrderList = ret.getFabricPoOrderList();
+		// 计算每行入库被委外使用的数量,余纱数量为入库-使用,去掉余纱链接多余数量
+		List<FabricMoOrderCK> cpCkList = JSON.parseArray(JSON.toJSONString(moOrderCKList), FabricMoOrderCK.class);
+		for (FabricPoOrder poOrder : poOrderList){
+			Double dOutSum = 0.0;
+			if (oConvertUtils.listIsNotEmpty(poOrder.getFabricPoOrderInList())) {
+				for (FabricPoOrderIn orderIn : poOrder.getFabricPoOrderInList()) {
+					Double dInLeft = orderIn.getIQuantity();    // 入库剩余数量
+					for (FabricMoOrderCK ck : cpCkList){
+						if (!ck.getInvOutId().equalsIgnoreCase(orderIn.getInvId()) &&
+								!ck.getCSourceInvId().equalsIgnoreCase(orderIn.getInvId())){
+							continue;
+						}
+						Double dCurOutSum = DoubleOperation.sub(ck.getIQuantityOut(),ck.getITempUseSum());   // 出库单出库数量
+						if (dCurOutSum<=0){
+							continue;
+						}
+						Double dRealOut = Math.min(dInLeft,dCurOutSum);// 对比入库单,本条出库数量
+						ck.setITempUseSum(DoubleOperation.add(ck.getITempUseSum(),dRealOut));// 出库累计数量
+						dInLeft = DoubleOperation.sub(dInLeft,dRealOut);    // 入库剩余数量
+						dOutSum = DoubleOperation.add(dOutSum, dRealOut);
+						if (dInLeft<=0){
+							break;
+						}
+					}
+				}
+			}
+			Double dLeft = DoubleOperation.sub(poOrder.getIQuantityIn(), dOutSum);
 
+			if (oConvertUtils.listIsNotEmpty(poOrder.getFabricPoOrderOutList() )){
+				int index = 0;
+				Double dCalLeft = 0.0;
+				for (;index<poOrder.getFabricPoOrderOutList().size();index++){
+					FabricPoOrderOut orderOut = poOrder.getFabricPoOrderOutList().get(index);
+					dCalLeft = DoubleOperation.add(dCalLeft, orderOut.getIQuantity());
+					if (dCalLeft>dLeft){
+						Double diff = DoubleOperation.sub(dCalLeft, dLeft);
+						orderOut.setIQuantity(DoubleOperation.sub(orderOut.getIQuantity(),diff));
+						if (orderOut.getIQuantity() == 0){
+							index--;
+						}
+						break;
+					}
+				}
+				while (poOrder.getFabricPoOrderOutList().size()>index+1){
+					poOrder.getFabricPoOrderOutList().remove(poOrder.getFabricPoOrderOutList().size()-1);
+				}
+
+			}
+		}
 		/*
 		for (FabricPoOrder poOrder : poOrderList){
 			Double dOutSum = 0.0;
@@ -1645,8 +1714,14 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		}
 		// 销售出库和成衣出库
 		List<FabricMoOrderCK> otherOutList = new ArrayList<>();
-		otherOutList.addAll(fabricLossMapper.getOmOutList19(code));// 成衣材料出库
-		otherOutList.addAll(fabricLossMapper.getSaleOutList(code));// 销售出库
+		List<FabricMoOrderCK> outList1 = fabricLossMapper.getOmOutList19(code);// 成衣材料出库
+		if (oConvertUtils.listIsNotEmpty(outList1)){
+			otherOutList.addAll(outList1);
+		}
+		outList1 = fabricLossMapper.getSaleOutList(code);// 销售出库
+		if (oConvertUtils.listIsNotEmpty(outList1)){
+			otherOutList.addAll(outList1);
+		}
 		allOutList.addAll(otherOutList);
 		allOutList.forEach(e->{
 			if (oConvertUtils.isEmpty(e.getCSourceInvId())) {