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.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -113,6 +114,7 @@ public class FabricPoOrder {
 
         List<FabricPoOrder> ret = new ArrayList<>();
         // 分组出库数据,根据物料(编号+颜色)分组,多个供应商逗号分割
+        /*
         for (FabricPoOrderOut poOrderOut : poOrderOutGroupList) {
             Optional<FabricPoOrder> findOpt = ret.stream().filter(e -> e.getId().equalsIgnoreCase(poOrderOut.getParentId())).findFirst();
             // 已存在,合并供应商,增加数量金额
@@ -144,7 +146,43 @@ public class FabricPoOrder {
                 poOrder.setFabricPoOrderOutList(findOutList);
                 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;
     }
 }

+ 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
 				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},'%')
+		) 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,

+ 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));
 		// 销售出库数量
 		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);
 		// 销售订单附件
 		List<AccessorItem> accessorItemList = fabricLossMapper.getSoAccList(ret.getContractNo());
@@ -655,8 +655,8 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		// 多发/少发,根/米,损耗设置
 		for (FabricOMOrder fabricOMOrder : omOrderListOrderAllList){
 			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())){  // 根
@@ -1393,6 +1393,8 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		moOrderCKList.addAll(moOrderCKList19);
 		// 根据采购订单轮询,设置分配数量、余纱、损耗
 		List<FabricPoOrder> poOrderList = ret.getFabricPoOrderList();
+
+		/*
 		for (FabricPoOrder poOrder : poOrderList){
 			Double dOutSum = 0.0;
 			List<String> omVenList = new ArrayList<>(); // 委外供应商
@@ -1426,7 +1428,88 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			poOrder.setIQuantityOut(dOutSum);
 			poOrder.setIQuantityLeft(DoubleOperation.sub(poOrder.getIQuantityIn(),dOutSum));
 			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> qtrkList = new ArrayList<>();    // 其他入库的纱