Explorar o código

面料损耗更新

fenghaifu %!s(int64=2) %!d(string=hai) anos
pai
achega
1d64fb6502

+ 1 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/entity/FabricMoOrderCK.java

@@ -56,7 +56,7 @@ public class FabricMoOrderCK {
     @ApiModelProperty(value = "是否异常")
     private Boolean abnormal;
     // 委外订单子表id
-    private Integer MODetailsID;
+    private String MODetailsID;
     // 入库物料编号+颜色
     private  String cInvCodeColorIn;
     @ApiModelProperty(value = "制造工艺")

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

@@ -37,4 +37,6 @@ public class FabricMoOrderRK {
     private  Double iSQuantityN;
     @ApiModelProperty(value = "成本")
     private  Double iPrice;
+    // 委外订单子表id
+    private String MODetailsID;
 }

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

@@ -22,6 +22,8 @@ public class FabricOMOrder {
     private String cVenName;
     @ApiModelProperty(value = "工厂缩写")
     private String cVenAbbName;
+    @ApiModelProperty(value = "工厂编码")
+    private String cVenCode;
     @ApiModelProperty(value = "材料出库数量")
     private  Double iQuantityOut;
     @ApiModelProperty(value = "采购入库数量")
@@ -46,6 +48,8 @@ public class FabricOMOrder {
     private  String cQuantityLoss;
     @ApiModelProperty(value = "染厂色号")
     private  String cColorNumber;
+    @ApiModelProperty(value = "委外订单子表id")
+    private  String MODetailsID;
     @ApiModelProperty(value = "子表id")
     private  String iOMoDID;
     @ApiModelProperty(value = "单位类型(入库)")
@@ -69,4 +73,12 @@ public class FabricOMOrder {
     List<FabricMoOrderRK> fabricMoOrderRKList;
     // 附件
     List<AccessorItem> accessorItemList;
+
+    /**
+     * 获取分组id
+     * @return
+     */
+    public String getGroupId(){
+        return cVCName+cVenName+cVenAbbName+cVenCode+cColorNumber+cInvCode+cInvName+cComUnitCode+cColor;
+    }
 }

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

@@ -21,6 +21,8 @@ import lombok.experimental.Accessors;
 @Accessors(chain = true)
 @ApiModel(value="面料损耗-采购订单-出库", description="面料损耗-采购订单-出库")
 public class FabricPoOrderOut {
+	// 出库单子表id
+	String autoid;
 	@ApiModelProperty(value = "计划号")
 	String cPlanCode;
 	@ApiModelProperty(value = "委外订单号")

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

@@ -187,9 +187,10 @@
 	</select>
 	<!-- 来源余纱,找委外订单的材料出库单,获取物料号+批号。如果物料号+批号在形态转换单中,取转换前物料+批号。判断物料+批号,是否在其他采购入库里 -->
 	<select id="getPurchaseListOtherPurInList" resultType="org.jeecg.modules.report.entity.FabricPoOrderOut">
+
 		(
 		SELECT
-			a.comcode as cCode,case when a.iSQuantity is null or a.iSQuantity=0 then a.iquantity else a.iSQuantity end as iQuantity,
+			a.autoid,a.comcode as cCode,case when a.iSQuantity is null or a.iSQuantity=0 then a.iquantity else a.iSQuantity end as iQuantity,
 			isnull(a.iUnitCost,0) as iPrice,isnull(a.cBatch,'') as cBatch,a.cInvCode,isnull(a.cFree1,'') as cColor,d.cInvName,
 			case when a.cBatch is not null and a.cBatch='期初' then '期初'
 			else
@@ -229,10 +230,10 @@
 			inner join PO_Podetails  c on b.iPOsID =c.ID
 			inner join PO_Pomain d on c.POID  =d.POID
 			where d.cPOID  like CONCAT(#{code},'%') and a.cbustype='普通采购'
-			)
+			) and a.iQuantity&lt;&gt;0
 		) union all (
 		SELECT
-			a.comcode as cCode,case when a.iSQuantity is null or a.iSQuantity=0 then a.iquantity else a.iSQuantity end as iQuantity,
+			a.autoid,a.comcode as cCode,case when a.iSQuantity is null or a.iSQuantity=0 then a.iquantity else a.iSQuantity end as iQuantity,
 			isnull(a.iUnitCost,0) as iPrice,isnull(a.cBatch,'') as cBatch,a.cInvCode,isnull(a.cFree1,'') as cColor,d.cInvName,
 			case when a.cBatch is not null and a.cBatch='期初' then '期初'
 			else
@@ -277,21 +278,17 @@
 					inner join PO_Podetails  c on b.iPOsID =c.ID
 					inner join PO_Pomain d on c.POID  =d.POID
 					where d.cPOID like CONCAT(#{code},'%') and a.cbustype='普通采购')
-			)
+			) and a.iQuantity&lt;&gt;0
 		)
 	</select>
 	<!--获取所有委外订单 cComUnitCode : 计量单位,02(PCS)根,04(M)米-->
 	<select id="getOmOrderListAll" resultType="org.jeecg.modules.report.entity.FabricOMOrder">
-		select cVCName,cVenName ,cVenAbbName ,cVenCode ,cColorNumber,cInvCode,cInvName,cComUnitCode,cColor,
-			isnull(sum(iQuantityOut),0) as iQuantityOut,
-			isnull(sum(iQuantity),0) as iQuantity,
-			isnull(sum(iQuantityIn),0) as iQuantityIn
-		from
-		(
-			SELECT e.cVCName,d.cVenName ,d.cVenAbbName ,a.cVenCode ,c.cInvCode,c.cInvName,c.cComUnitCode,b.cFree1 as cColor,
-				(select sum(iQuantity) from rdrecords11 x where x.iOMoDID=b.MODetailsID) as iQuantityOut,
-				(select sum(iQuantity) from RdRecords01 x where x.iOMoDID=b.MODetailsID) as iQuantityIn,
-				b.iQuantity,b.MODetailsID,isnull(b.cdefine30,'') as cColorNumber
+
+			SELECT b.MODetailsID,e.cVCName,d.cVenName ,d.cVenAbbName ,a.cVenCode ,c.cInvCode,c.cInvName,c.cComUnitCode,
+				isnull(b.cFree1,'') as cColor,
+				isnull((select sum(iQuantity) from rdrecords11 x where x.iOMoDID=b.MODetailsID),0) as iQuantityOut,
+				isnull((select sum(iQuantity) from RdRecords01 x where x.iOMoDID=b.MODetailsID),0) as iQuantityIn,
+				b.iQuantity,isnull(b.cdefine30,'') as cColorNumber
 			FROM
 				om_momain a
 				INNER JOIN OM_MODetails b ON a.moid = b.moid
@@ -301,9 +298,7 @@
 			WHERE
 				c.cInvCCode NOT LIKE '19%'
 				AND a.cCode LIKE CONCAT(#{code},'%')
-
-		) as t1 group by cVCName,cVenName,cVenAbbName,cVenCode,cColorNumber,cInvCode,cInvName,cComUnitCode,cColor
-		order by cVCName,cVenName,cColorNumber,cInvCode,cInvName,cComUnitCode,cColor
+			order by e.cVCName,d.cVenName,c.cInvCode,c.cInvName,c.cComUnitCode,b.cFree1,b.cdefine30
 
 	</select>
 	<!--获取销售出库委外订单:物料+颜色在销售出库表中,cComUnitCode : 计量单位,02(PCS)根,04(M)米-->
@@ -607,7 +602,7 @@
 	</select>-->
 	<!--委外订单-采购入库详情-->
 	<select id="getOmInDetailList" resultType="org.jeecg.modules.report.entity.FabricMoOrderRK">
-		select a.cCode,
+		select a.cCode,b.MODetailsID,
 			 x.cInvCode as cInvCode,y.cInvName as cInvName,x.cFree1 as cColor,x.cBatch as cBatch,
 			 isnull(x.iQuantity,0) as iQuantityIn,
 			 isnull(isnull((select  sum(n.iSum) from  PurBillVouchs  n where n.RdsId =x.autoid),x.iProcessFee),0) as iProcessFee,

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

@@ -270,48 +270,9 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			}
 
 			// 采购入库-来源余纱
-			/*
-			List<FabricPoOrderOut> fabricPoOrderTempList = fabricLossMapper.getPurchaseListOtherPurInList(code);
-			FabricPoOrder fabricPoOrderLyys = new FabricPoOrder();
-			fabricPoOrderLyys.setCInvName("来源余纱");
-			fabricPoOrderLyys.setIQuantityIn(0.0);
-			fabricPoOrderLyys.setFabricPoOrderOutList(fabricPoOrderTempList);
-			fabricPoOrderList.add(fabricPoOrderLyys);
-			if (fabricPoOrderTempList.size()>0){
-				for (FabricPoOrderOut item : fabricPoOrderTempList){
-					fabricPoOrderLyys.setIQuantityIn(item.getIQuantity()+fabricPoOrderLyys.getIQuantityIn());
-					String cCode = item.getCCode();
-					int index1 = cCode.indexOf("SY");
-					if (index1 == -1) {
-						continue;
-					}
-					int index2 = cCode.indexOf("-", index1);
-					if (index2 == -1) {
-						index2 = cCode.length();
-					}
-					item.setCPlanCode(cCode.substring(index1,index2-1));
-				}
-				BigDecimal bdVal = new BigDecimal(fabricPoOrderLyys.getIQuantityIn());
-				fabricPoOrderLyys.setIQuantityIn(bdVal.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
-			}
-			*/
 			List<FabricPoOrder> lyysList = getPoOrderLyys(code);
 			fabricPoOrderList.addAll(lyysList);
 			// 采购入库-其他入库的纱
-			/*
-			fabricPoOrderTempList = fabricLossMapper.getPurchaseListOtherInList(code);
-			FabricPoOrder fabricPoOrderQtrk = new FabricPoOrder();
-			fabricPoOrderQtrk.setCInvName("其他入库的纱");
-			fabricPoOrderQtrk.setIQuantityIn(0.0);
-			fabricPoOrderQtrk.setFabricPoOrderOutList(fabricPoOrderTempList);
-			fabricPoOrderList.add(fabricPoOrderQtrk);
-			if (fabricPoOrderTempList.size()>0){
-				for (FabricPoOrderOut item : fabricPoOrderTempList){
-					fabricPoOrderQtrk.setIQuantityIn(item.getIQuantity()+fabricPoOrderQtrk.getIQuantityIn());
-				}
-				BigDecimal bdVal = new BigDecimal(fabricPoOrderQtrk.getIQuantityIn());
-				fabricPoOrderQtrk.setIQuantityIn(bdVal.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
-			}*/
 			fabricPoOrderList.addAll(getPoOrderQtrk(code,lyysList));
 			ret.setFabricPoOrderList(fabricPoOrderList);
 			// 委外订单所有
@@ -321,6 +282,9 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				ret.setMessage("本计划没有面料委外,无面损表");
 				return ret;
 			}
+
+			// 委外订单分组
+			fabricOMOrderListAll = groupOmOrderList(fabricOMOrderListAll);
 			// 织、染、印,其他排序
 			List<FabricOMOrder> fabricOMOrderList1 = new ArrayList<>();
 			List<FabricOMOrder> fabricOMOrderListTmp = fabricOMOrderListAll.stream().filter(e->e.getCVCName().indexOf("织")==0).collect(Collectors.toList());
@@ -695,7 +659,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		for (FabricOMOrder fabricOMOrder : fabricOMOrderList){
 			// 根据入库物料过滤
 			List<FabricMoOrderCK> findOutList = fabricMoOrderCKList.stream().filter(e->
-					e.getCInvCodeColorIn().equals(fabricOMOrder.getCInvCode()+fabricOMOrder.getCColor())).collect(Collectors.toList());
+					fabricOMOrder.getMODetailsID().indexOf(e.getMODetailsID())>-1).collect(Collectors.toList());
 
 			fabricOMOrder.setFabricMoOrderCKList(findOutList);
 		}
@@ -714,8 +678,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 
 		for (FabricOMOrder fabricOMOrder : fabricOMOrderList){
 			List<FabricMoOrderRK> findList = fabricMoOrderRKList.stream().filter(e->
-					e.getCInvCode().equals(fabricOMOrder.getCInvCode()) &&
-					oConvertUtils.getString(e.getCColor()).equals(fabricOMOrder.getCColor())).collect(Collectors.toList());
+					fabricOMOrder.getMODetailsID().indexOf(e.getMODetailsID())>-1).collect(Collectors.toList());
 
 
 			if (findList.size() == 0){
@@ -841,7 +804,15 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 	 * @return
 	 */
 	private List<FabricPoOrder> getPoOrderLyys(String code){
-		List<FabricPoOrderOut> fabricPoOrderTempList = fabricLossMapper.getPurchaseListOtherPurInList(code);
+		List<FabricPoOrderOut> fabricPoOrderTempList1 = fabricLossMapper.getPurchaseListOtherPurInList(code);
+		List<FabricPoOrderOut> fabricPoOrderTempList = new ArrayList<>();
+		// 根据autoid去重
+		for (FabricPoOrderOut item : fabricPoOrderTempList1){
+			if (fabricPoOrderTempList.stream().filter(e->e.getAutoid().equals(item.getAutoid())).count()==0){
+				fabricPoOrderTempList.add(item);
+			}
+		}
+
 		List<FabricPoOrderOut> fabricPoOrderOutListGroup = new ArrayList<>();   // 根据委外订单号和批号分组
 //		FabricPoOrder fabricPoOrderLyys = new FabricPoOrder();
 //		fabricPoOrderLyys.setCInvName("来源余纱");
@@ -880,6 +851,8 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		rowInList.addAll(rowInListWithAV);
 		List<Map<String,Object>> purchuseInList = rowInList.stream().filter(e->"普通采购".equals(e.get("cBusType").toString())).collect(Collectors.toList());
 
+		// 去掉数量0的数据
+		fabricPoOrderOutListGroup = fabricPoOrderOutListGroup.stream().filter(e->e.getIQuantity()>0).collect(Collectors.toList());
 		// 单价数量保留位数、计划号处理,根据委外处理的出库物料重新设置价格
 		for (FabricPoOrderOut item : fabricPoOrderOutListGroup){
 
@@ -892,7 +865,6 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				item.setIPrice(oConvertUtils.getDouble(findIn.get("iPurchuseMoney").toString(), 0)/oConvertUtils.getDouble(findIn.get("iQuantity").toString(),0));
 				item.setIMoney(item.getIPrice()*item.getIQuantity());
 			}
-
 			BigDecimal bdVal = new BigDecimal(item.getIPrice());
 			item.setIPrice(bdVal.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
 			bdVal = new BigDecimal(item.getIQuantity());
@@ -966,7 +938,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			// 根据委外订单子表id,找到入库物料
 			findInCanSetList = findInCanSetList.stream().filter(in->{
 				return findOutCanSetList.stream().filter(out->
-						out.getMODetailsID() == oConvertUtils.getInt(in.get("MODetailsID"),0)).count()>0;
+						out.getMODetailsID().equals(oConvertUtils.getString(in.get("MODetailsID")))).count()>0;
 			}).collect(Collectors.toList());
 			// 设置入库单金额
 			for (Map<String,Object> item : findInCanSetList){
@@ -1083,7 +1055,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			Double outSum = itemOut.getIQuantityOut();
 			// 委外订单行
 			Optional<Map<String,Object>> findRowInfoOpt = rowInfoList.stream().filter(info->
-					oConvertUtils.getInt(info.get("MODetailsID")).equals(itemOut.getMODetailsID())
+					oConvertUtils.getString(info.get("MODetailsID")).equals(itemOut.getMODetailsID())
 			).findFirst();
 			if (!findRowInfoOpt.isPresent()){
 				continue;
@@ -1110,6 +1082,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				retItem.setCInvNameOut(itemOut.getCInvNameOut());
 				retItem.setCColorOut(itemOut.getCColorOut());
 				retItem.setCBatchOut(itemOut.getCBatchOut());
+				retItem.setMODetailsID(itemOut.getMODetailsID());
 				if ("普通采购".equals(itemIn.get("cBusType"))){
 					retItem.setCPlanCode(itemIn.get("poCode").toString());
 				}else{
@@ -1150,6 +1123,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 					retItem.setCInvNameOut(itemOut.getCInvNameOut());
 					retItem.setCColorOut(itemOut.getCColorOut());
 					retItem.setCBatchOut(itemOut.getCBatchOut());
+					retItem.setMODetailsID(itemOut.getMODetailsID());
 					if ("普通采购".equals(itemIn.get("cBusType"))){
 						retItem.setCPlanCode(itemIn.get("poCode").toString());
 					}else{
@@ -1595,4 +1569,29 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 
 	}
 
+	/**
+	 * 委外订单分组,根据供应商分类,供应商名称,供应商简称,供应商编码,物料编号,物料名称,颜色,计量单位,染厂色号,
+	 *  计算委外订单数量,材料出库数量,委外入库数量
+	 *  同时把委外订单子表id逗号分割,放到MODetailsID字段
+	 * @param omOrderList
+	 * @return
+	 */
+	private List<FabricOMOrder> groupOmOrderList(List<FabricOMOrder> omOrderList){
+		List<FabricOMOrder> ret = new ArrayList<>();
+		for (FabricOMOrder omOrder : omOrderList){
+			Optional<FabricOMOrder> findOpt = ret.stream().filter(e->e.getGroupId().equals(omOrder.getGroupId())).findFirst();
+			if (findOpt.isPresent()){
+				FabricOMOrder find = findOpt.get();
+				find.setIQuantityOut(DoubleOperation.add(find.getIQuantityOut(), omOrder.getIQuantityOut()));
+				find.setIQuantity(DoubleOperation.add(find.getIQuantity(), omOrder.getIQuantity()));
+				find.setIQuantityIn(DoubleOperation.add(find.getIQuantityIn(), omOrder.getIQuantityIn()));
+				find.setMODetailsID(find.getMODetailsID()+","+omOrder.getMODetailsID());
+			}else{
+				ret.add(omOrder);
+			}
+		}
+		return ret;
+
+	}
+
 }