Browse Source

面料损耗更新

fenghaifu 2 years ago
parent
commit
f2801920b0

+ 38 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/entity/FabricPoOrder.java

@@ -10,6 +10,7 @@ import org.jeecg.modules.system.util.oConvertUtils;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.List;
 import java.util.Optional;
 import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -113,6 +114,7 @@ public class FabricPoOrder {
 
 
         List<FabricPoOrder> ret = new ArrayList<>();
         List<FabricPoOrder> ret = new ArrayList<>();
         // 分组出库数据,根据物料(编号+颜色)分组,多个供应商逗号分割
         // 分组出库数据,根据物料(编号+颜色)分组,多个供应商逗号分割
+        /*
         for (FabricPoOrderOut poOrderOut : poOrderOutGroupList) {
         for (FabricPoOrderOut poOrderOut : poOrderOutGroupList) {
             Optional<FabricPoOrder> findOpt = ret.stream().filter(e -> e.getId().equalsIgnoreCase(poOrderOut.getParentId())).findFirst();
             Optional<FabricPoOrder> findOpt = ret.stream().filter(e -> e.getId().equalsIgnoreCase(poOrderOut.getParentId())).findFirst();
             // 已存在,合并供应商,增加数量金额
             // 已存在,合并供应商,增加数量金额
@@ -144,7 +146,43 @@ public class FabricPoOrder {
                 poOrder.setFabricPoOrderOutList(findOutList);
                 poOrder.setFabricPoOrderOutList(findOutList);
                 ret.add(poOrder);
                 ret.add(poOrder);
             }
             }
+        }*/
+        // 分组出库数据,根据物料(编号+颜色+供应商)分组
+        for (FabricPoOrderOut poOrderOut : poOrderOutGroupList) {
+            Optional<FabricPoOrder> findOpt = ret.stream().filter(e ->
+                    e.getId().equalsIgnoreCase(poOrderOut.getParentId()) &&
+                    oConvertUtils.getString(e.getOmcVenAbbName()).equalsIgnoreCase(oConvertUtils.getString(poOrderOut.getCVenAbbName()))).findFirst();
+            // 已存在,合并供应商,增加数量金额
+            if (findOpt.isPresent()){
+                FabricPoOrder findItem = findOpt.get();
+                findItem.setIQuantityOut(DoubleOperation.add(findItem.getIQuantityOut(),poOrderOut.getIQuantity()));
+                findItem.setIQuantityIn(DoubleOperation.add(findItem.getIQuantityIn(),poOrderOut.getIQuantity()));
+
+                if ("来源余料".equalsIgnoreCase(cPOID)) {
+                    if (findItem.getCVenAbbName().indexOf(poOrderOut.getCPoVenAbbName()) == -1) {
+                        findItem.setCVenAbbName(findItem.getCVenAbbName() + "," + poOrderOut.getCPoVenAbbName());
+                    }
+                }
+            }else{
+                FabricPoOrder poOrder = new FabricPoOrder();
+                poOrder.setCInvName(poOrderOut.getCInvName()+" "+poOrderOut.getCColor());
+                poOrder.setCPOID(cPOID);
+                poOrder.setCColor(poOrderOut.getCColor());
+                poOrder.setCInvCode(poOrderOut.getCInvCode());
+                poOrder.setOmcVenAbbName(poOrderOut.getCVenAbbName());
+                if ("来源余料".equalsIgnoreCase(cPOID)){
+                    poOrder.setCVenAbbName(oConvertUtils.getString(poOrderOut.getCPoVenAbbName()));
+                }
+                poOrder.setIQuantityIn(poOrderOut.getIQuantity());
+                poOrder.setIQuantityOut(poOrderOut.getIQuantity());
+                List<FabricPoOrderOut> findOutList = poOrderOutGroupList.stream().filter(e->
+                        e.getParentId().equals(poOrder.getId())&&
+                                oConvertUtils.getString(e.getCVenAbbName()).equalsIgnoreCase(oConvertUtils.getString(poOrder.getOmcVenAbbName()))).collect(Collectors.toList());
+                poOrder.setFabricPoOrderOutList(findOutList);
+                ret.add(poOrder);
+            }
         }
         }
+        ret.sort(Comparator.comparing(FabricPoOrder::getCInvName));
         return ret;
         return ret;
     }
     }
 }
 }

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

@@ -633,7 +633,8 @@
 				inner join SO_SODetails e on e.iSOsID=c.isodid
 				inner join SO_SODetails e on e.iSOsID=c.isodid
 				where a.ccode like CONCAT(#{code},'%')  and a.ccode not like '%样%' and
 				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%')
 					(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},'%')
+		) 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,
                 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.cFree1,'') as cColorOut,isnull(c.cBatch,'') as cBatchOut,c.iQuantity as iQuantityOut,

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

@@ -476,9 +476,9 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		ret.setNumber(oConvertUtils.getDouble(fabricLossMapper.getNumber(code),0));
 		ret.setNumber(oConvertUtils.getDouble(fabricLossMapper.getNumber(code),0));
 		// 销售出库数量
 		// 销售出库数量
 		Double dOutSum = oConvertUtils.getDouble(fabricLossMapper.getSaleOutSum(code),0);
 		Double dOutSum = oConvertUtils.getDouble(fabricLossMapper.getSaleOutSum(code),0);
-		if (dOutSum>ret.getNumber()) {
-			dOutSum = ret.getNumber();
-		}
+//		if (dOutSum>ret.getNumber()) {
+//			dOutSum = ret.getNumber();
+//		}
 		ret.setOutboundNumber(dOutSum);
 		ret.setOutboundNumber(dOutSum);
 		// 销售订单附件
 		// 销售订单附件
 		List<AccessorItem> accessorItemList = fabricLossMapper.getSoAccList(ret.getContractNo());
 		List<AccessorItem> accessorItemList = fabricLossMapper.getSoAccList(ret.getContractNo());
@@ -655,8 +655,8 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		// 多发/少发,根/米,损耗设置
 		// 多发/少发,根/米,损耗设置
 		for (FabricOMOrder fabricOMOrder : omOrderListOrderAllList){
 		for (FabricOMOrder fabricOMOrder : omOrderListOrderAllList){
 			double dLoss = 0;
 			double dLoss = 0;
-			if (fabricOMOrder.getIQuantityOut()!=0) {
-				dLoss = (1 - fabricOMOrder.getIQuantityIn() / fabricOMOrder.getIQuantityOut()) * 100;
+			if (fabricOMOrder.getIQuantityIn()!=0) {
+				dLoss = (fabricOMOrder.getIQuantityOut() / fabricOMOrder.getIQuantityIn() -1) * 100;
 			}
 			}
 
 
 			if ("02".equals(fabricOMOrder.getCComUnitCode())){  // 根
 			if ("02".equals(fabricOMOrder.getCComUnitCode())){  // 根
@@ -1393,6 +1393,8 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		moOrderCKList.addAll(moOrderCKList19);
 		moOrderCKList.addAll(moOrderCKList19);
 		// 根据采购订单轮询,设置分配数量、余纱、损耗
 		// 根据采购订单轮询,设置分配数量、余纱、损耗
 		List<FabricPoOrder> poOrderList = ret.getFabricPoOrderList();
 		List<FabricPoOrder> poOrderList = ret.getFabricPoOrderList();
+
+		/*
 		for (FabricPoOrder poOrder : poOrderList){
 		for (FabricPoOrder poOrder : poOrderList){
 			Double dOutSum = 0.0;
 			Double dOutSum = 0.0;
 			List<String> omVenList = new ArrayList<>(); // 委外供应商
 			List<String> omVenList = new ArrayList<>(); // 委外供应商
@@ -1426,7 +1428,88 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			poOrder.setIQuantityOut(dOutSum);
 			poOrder.setIQuantityOut(dOutSum);
 			poOrder.setIQuantityLeft(DoubleOperation.sub(poOrder.getIQuantityIn(),dOutSum));
 			poOrder.setIQuantityLeft(DoubleOperation.sub(poOrder.getIQuantityIn(),dOutSum));
 			poOrder.setIQuantityLeftRate(DoubleOperation.div(poOrder.getIQuantityLeft(),poOrder.getIQuantityIn(), 4));
 			poOrder.setIQuantityLeftRate(DoubleOperation.div(poOrder.getIQuantityLeft(),poOrder.getIQuantityIn(), 4));
+		}*/
+		// ---- 采购订单分行修改 begin ---------------
+		List<FabricPoOrder> toAddpoOrderList = new ArrayList<>();   // 委外供应商有多个情况,待添加的记录
+		for (FabricPoOrder poOrder : poOrderList){
+			if (oConvertUtils.listIsEmpty(poOrder.getFabricPoOrderOutList())){
+				poOrder.setFabricPoOrderOutList(new ArrayList<>());
+			}
+			poOrder.setIQuantityOut(0.0);
+			List<String> omVenList = new ArrayList<>(); // 委外供应商
+			if (oConvertUtils.listIsNotEmpty(poOrder.getFabricPoOrderInList())) {
+				for (FabricPoOrderIn orderIn : poOrder.getFabricPoOrderInList()) {
+					Double dInLeft = orderIn.getIQuantity();    // 入库剩余数量
+					for (FabricMoOrderCK ck : moOrderCKList){
+						if (!ck.getInvOutId().equalsIgnoreCase(orderIn.getInvId()) &&
+								!ck.getCSourceInvId().equalsIgnoreCase(orderIn.getInvId())){
+							continue;
+						}
+						Double dCurOutSum = DoubleOperation.sub(ck.getIQuantityOut(),ck.getITempUseSum());   // 出库单出库数量
+						if (dCurOutSum<=0){
+							continue;
+						}
+						String omVenAbbName = oConvertUtils.getString(ck.getCOmVenAbbName());
+						if (oConvertUtils.isEmpty(poOrder.getOmcVenAbbName())){
+							poOrder.setOmcVenAbbName(omVenAbbName);
+						}
+						Double dRealOut = Math.min(dInLeft,dCurOutSum);// 对比入库单,本条出库数量
+						ck.setITempUseSum(DoubleOperation.add(ck.getITempUseSum(),dRealOut));// 出库累计数量
+						dInLeft = DoubleOperation.sub(dInLeft,dRealOut);    // 入库剩余数量
+						FabricPoOrder curOrder = poOrder;
+						// 设置其他新加采购订单出库记录
+						if (!omVenAbbName.equalsIgnoreCase(poOrder.getOmcVenAbbName())){
+
+							Optional<FabricPoOrder> findOpt = toAddpoOrderList.stream().filter(e->
+									e.getCInvCode().equalsIgnoreCase(poOrder.getCInvCode())&&
+											e.getCColor().equalsIgnoreCase(poOrder.getCColor())&&
+											omVenAbbName.equalsIgnoreCase(e.getOmcVenAbbName())).findFirst();
+							if (findOpt.isPresent()){
+								curOrder = findOpt.get();
+							}else{
+								FabricPoOrder copyPoOrder = JSON.parseObject(JSON.toJSONString(poOrder), FabricPoOrder.class);
+								copyPoOrder.setOmcVenAbbName(omVenAbbName);
+								copyPoOrder.setIQuantity(0.0);
+								copyPoOrder.setIQuantityOut(0.0);
+								copyPoOrder.setFabricPoOrderInList(new ArrayList<>());
+								List<FabricPoOrderOut> findList = poOrder.getFabricPoOrderOutList().stream().filter(e->
+										oConvertUtils.getString(e.getCWhName()).indexOf(omVenAbbName)>-1 ||
+										oConvertUtils.getString(e.getCCode()).indexOf(omVenAbbName)>-1).collect(Collectors.toList());
+								copyPoOrder.setFabricPoOrderOutList(findList);
+								copyPoOrder.setIQuantityLeft(findList.stream().mapToDouble(FabricPoOrderOut::getIQuantity).sum());
+								findList = poOrder.getFabricPoOrderOutList().stream().filter(e->
+										oConvertUtils.getString(e.getCWhName()).indexOf(omVenAbbName)==-1 &&
+												oConvertUtils.getString(e.getCCode()).indexOf(omVenAbbName)==-1).collect(Collectors.toList());
+								poOrder.setFabricPoOrderOutList(findList);
+								toAddpoOrderList.add(copyPoOrder);
+								curOrder = copyPoOrder;
+							}
+
+						}
+						curOrder.setIQuantityOut(DoubleOperation.add(curOrder.getIQuantityOut(), dRealOut));
+						if (dInLeft<=0){
+							break;
+						}
+					}
+				}
+			}
+			// 设置余纱、损耗
+			poOrder.setIQuantityLeft(poOrder.getFabricPoOrderOutList().stream().mapToDouble(FabricPoOrderOut::getIQuantity).sum());
+			poOrder.setIQuantityLeftRate(DoubleOperation.div(poOrder.getIQuantityLeft(),poOrder.getIQuantityIn(), 4));
+		}
+		if (toAddpoOrderList.size()>0){
+
+			// 设置损耗,清除采购数量
+			for (FabricPoOrder poOrder:toAddpoOrderList){
+				poOrder.setIQuantityLeftRate(DoubleOperation.div(poOrder.getIQuantityLeft(),poOrder.getIQuantityIn(), 4));
+				poOrder.setIQuantityIn(0.0);
+			}
+			poOrderList.addAll(toAddpoOrderList);
+			poOrderList.sort(Comparator.comparing(FabricPoOrder::getCInvName).thenComparing(FabricPoOrder::getCPOID));
+
 		}
 		}
+
+		// ---- 采购订单分行修改 end ---------------
 		// 设置来源余纱和其他入库的纱:批号是期初的,算来源余纱;物料名称是杂纱的,算其他入库的纱
 		// 设置来源余纱和其他入库的纱:批号是期初的,算来源余纱;物料名称是杂纱的,算其他入库的纱
 		List<FabricPoOrderOut> lyysList = new ArrayList<>();    // 来源余纱
 		List<FabricPoOrderOut> lyysList = new ArrayList<>();    // 来源余纱
 		List<FabricPoOrderOut> qtrkList = new ArrayList<>();    // 其他入库的纱
 		List<FabricPoOrderOut> qtrkList = new ArrayList<>();    // 其他入库的纱