Browse Source

面料损耗更新

fenghaifu 2 years ago
parent
commit
b4ec68fecf

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

@@ -616,36 +616,26 @@
 	</select>
 	</select>
 	<!-- 获取销售出库数量 -->
 	<!-- 获取销售出库数量 -->
 	<select id="getSaleOutList" resultType="org.jeecg.modules.report.entity.FabricMoOrderCK">
 	<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,
 		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.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
 		(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
 		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 so_somain e on e.id=d.id
 		INNER JOIN Inventory b ON c.cinvcode = b.cinvcode
 		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>
 	<!--获取本次采购入库的形态转换-->
 	<!--获取本次采购入库的形态转换-->
 	<select id="getPoAssemVouchList" resultType="map">
 	<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.getId().equalsIgnoreCase(e.getParentId())).collect(Collectors.toList());
 			fabricPoOrder.setFabricPoOrderInList(tmpFabricPoOrderInList);
 			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->
 			List<FabricPoOrderOut> findFabricPoOrderOutList = fabricPoOrderOutList.stream().filter(e->
 					oConvertUtils.getString(e.getCInvCode()).equals(oConvertUtils.getString(fabricPoOrder.getCInvCode())) &&
 					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);
 		ret.setFabricPoOrderList(fabricPoOrderList);
 	}
 	}
@@ -780,7 +784,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		}
 		}
 		//获取委外订单运费发票金额
 		//获取委外订单运费发票金额
 		List<FabricCostInvoice> fabricCostInvoiceList3 = fabricLossMapper.getOmInvoiceMoneyYfList(code);
 		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.addAll(fabricCostInvoiceList3);
 		// 织、染、印排序
 		// 织、染、印排序
 		fabricCostInvoiceList.forEach(e->{
 		fabricCostInvoiceList.forEach(e->{
@@ -801,11 +805,11 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		fabricCostInvoiceList.addAll(inoutCostList);
 		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){
 		if (editData != null){
 			List<FabricCostInvoice> costInvoiceList = editData.getFabricCostInvoiceList();
 			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> findOutList = rowOutList.stream().filter(e->e.getIQuantityOut()!=0).collect(Collectors.toList());
 		List<FabricMoOrderCK> calCkList = new ArrayList<>();
 		List<FabricMoOrderCK> calCkList = new ArrayList<>();
@@ -936,11 +946,12 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			bFind = false;
 			bFind = false;
 			for (FabricOMOrder omOrder : omOrderList){
 			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;
 					bFind = true;
 					// 设置订单出库明细
 					// 设置订单出库明细
 					List<FabricMoOrderCK> findCkList = calCkList.stream().filter(e -> omOrder.getMODetailsID().indexOf(e.getMODetailsID().toString()) > -1).collect(Collectors.toList());
 					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);
 		}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){
 		for (FabricOMOrder omOrder : omOrderList){
 			if (omOrder.getFabricMoOrderCKList() == null){
 			if (omOrder.getFabricMoOrderCKList() == null){
@@ -1160,7 +1181,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		}
 		}
 		int deep = 0;// 查询深度
 		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
 			// 获取转换入库物料id
 			List<String> invIdList = assemVouchsInvIdList.stream().filter(e->"转换入库".equalsIgnoreCase(e.getCBusType())).map(FabricAssemVouchsOrgIn::getCInvIdAfter).collect(Collectors.toList());
 			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);
 		moOrderCKList.addAll(moOrderCKList19);
 		// 根据采购订单轮询,设置分配数量、余纱、损耗
 		// 根据采购订单轮询,设置分配数量、余纱、损耗
 		List<FabricPoOrder> poOrderList = ret.getFabricPoOrderList();
 		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){
 		for (FabricPoOrder poOrder : poOrderList){
 			Double dOutSum = 0.0;
 			Double dOutSum = 0.0;
@@ -1645,8 +1714,14 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		}
 		}
 		// 销售出库和成衣出库
 		// 销售出库和成衣出库
 		List<FabricMoOrderCK> otherOutList = new ArrayList<>();
 		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.addAll(otherOutList);
 		allOutList.forEach(e->{
 		allOutList.forEach(e->{
 			if (oConvertUtils.isEmpty(e.getCSourceInvId())) {
 			if (oConvertUtils.isEmpty(e.getCSourceInvId())) {