Browse Source

面料损耗更新

fenghaifu 2 years ago
parent
commit
b22d56178c

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

@@ -49,6 +49,8 @@ public class FabricMoOrderCK {
 //    private  Double iPurchusePrice;
     @ApiModelProperty(value = "单个成本")
     private  Double iPrice;
+    @ApiModelProperty(value = "计算单个成本")
+    private  Double iCalPrice;
     @ApiModelProperty(value = "金额")
     private  Double iMoney;
     @ApiModelProperty(value = "是否异常")

+ 4 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/mapper/FabricLossMapper.java

@@ -155,4 +155,8 @@ public interface FabricLossMapper extends BaseMapper<FabricLoss> {
 	// 获取事故单
 	@DS("multi-three")
 	List<FabricAccident> getAccidentList(@Param("code")String code);
+
+	// 获取形态转换入库的原始入库单,可能存在多次形态转换,需要多次调用
+	@DS("multi-three")
+	List<Map<String,Object>> getOrgInList(@Param("invIdList")List<String> invIdList);
 }

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

@@ -35,7 +35,7 @@
 	</select>
 	<!-- 销售出库数量 -->
 	<select id="getSaleOutSum" resultType="java.lang.String">
-		select isnull(iQuantity,0) as 'iQuantity' from VIEW_FabricLoss_Head_Clothes_SaleOut_Sum where
+		select isnull(sum(iQuantity),0) as 'iQuantity' from VIEW_FabricLoss_Head_Clothes_SaleOut_Sum where
 		cCode like CONCAT(#{code},'%')
 	</select>
 	<select id="getPrice" resultType="java.lang.String">
@@ -145,7 +145,7 @@
 						RdRecords08 b
 						INNER JOIN rdrecord08 a ON a.id = b.ID
 					WHERE
-					a.cbustype in ('其他入库')/*,'转换入库'*/
+					a.cbustype in ('其他入库','转换入库')
 					)
 				) and
 				a.cInvCode + isnull( a.cFree1, '' ) + isnull( a.cBatch, '' ) not IN (
@@ -892,5 +892,39 @@
 			and inv.cInvName='事故单' and ah.cDefine2 like CONCAT(#{code},'%')
 		group by ah.cPBVCode,VEN.cVenAbbName
 
+	</select>
+	<!-- 获取形态转换入库的原始入库单,可能存在多次形态转换,需要多次调用 -->
+	<select id="getOrgInList" resultType="map">
+
+		(
+		select  b.autoid,a.cBusType,b.cInvCode+isnull(b.cFree1,'')+isnull(b.cBatch,'') as cInvIdBefore,b.iQuantity,
+		case when a.cbustype='委外加工' then 0 else
+		isnull(isnull((select sum(iSum) from PurBillVouchs  x where x.RdsId =b.autoid),iSum ),0)
+		end as iPurchuseMoney,
+		c.cInvCode2+c.cColor2+c.cAVBatch2 as cInvIdAfter
+
+		from VIEW_FabricLoss_AssemVouchs c,rdrecords01 b,rdrecord01 a
+		where a.id=b.id
+		and c.cinvcode+ccolor+cavbatch=b.cinvcode +isnull(b.cFree1,'')+isnull(b.cBatch,'') and b.iQuantity &lt;&gt; 0
+		and c.cInvCode2+c.cColor2+c.cAVBatch2 in
+		<foreach  item="item" collection="invIdList" index="index"  open="(" separator="," close=")">
+			#{item}
+		</foreach>
+		) union all (
+		select  b.autoid,a.cBusType,b.cInvCode+isnull(b.cFree1,'')+isnull(b.cBatch,'') as cInvIdBefore,b.iQuantity,
+		isnull(case when a.cMaker='王行乔' then b.iPrice else b.iPrice*1.13 end,0) as iPurchuseMoney,
+		c.cInvCode2+c.cColor2+c.cAVBatch2 as cInvIdAfter
+
+		from VIEW_FabricLoss_AssemVouchs c,rdrecords08 b,rdrecord08 a
+		where a.id=b.id
+		and c.cinvcode+ccolor+cavbatch=b.cinvcode +isnull(b.cFree1,'')+isnull(b.cBatch,'') and a.cbustype &lt;&gt; '调拨入库'
+		and b.iQuantity &lt;&gt; 0
+		and c.cInvCode2+c.cColor2+c.cAVBatch2 in
+		<foreach  item="item" collection="invIdList" index="index"  open="(" separator="," close=")">
+			#{item}
+		</foreach>
+		)
+
+
 	</select>
 </mapper>

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

@@ -295,7 +295,8 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				fabricPoOrderLyys.setIQuantityIn(bdVal.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
 			}
 			*/
-			fabricPoOrderList.addAll(getPoOrderLyys(code));
+			List<FabricPoOrder> lyysList = getPoOrderLyys(code);
+			fabricPoOrderList.addAll(lyysList);
 			// 采购入库-其他入库的纱
 			/*
 			fabricPoOrderTempList = fabricLossMapper.getPurchaseListOtherInList(code);
@@ -311,7 +312,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				BigDecimal bdVal = new BigDecimal(fabricPoOrderQtrk.getIQuantityIn());
 				fabricPoOrderQtrk.setIQuantityIn(bdVal.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
 			}*/
-			fabricPoOrderList.addAll(getPoOrderQtrk(code));
+			fabricPoOrderList.addAll(getPoOrderQtrk(code,lyysList));
 			ret.setFabricPoOrderList(fabricPoOrderList);
 			// 委外订单所有
 			List<FabricOMOrder> fabricOMOrderListAll = fabricLossMapper.getOmOrderListAll(code);
@@ -573,6 +574,39 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		List<Map<String,Object>> rowInListWithAV = fabricLossMapper.getOmRowInListWithAV(code);
 		List<Map<String,Object>> rowInListWithAV2 = fabricLossMapper.getOmRowInListWithAV2(code);
 		rowInListWithAV.addAll(rowInListWithAV2);
+		// 如果形态转换物料,转换前入库是转换入库,获取源头入库单
+		do{
+			List<Map<String,Object>> findList = rowInListWithAV.stream().filter(e->"转换入库".equals(e.get("cBusType").toString())).collect(Collectors.toList());
+			if (findList.size()==0){
+				break;
+			}
+			List<String> cInvIdList = new ArrayList<>();
+			// 获取物理id列表 编码+颜色+批号
+			for (Map<String,Object> item : findList){
+				cInvIdList.add(item.get("cInvCode").toString()+item.get("cColor").toString()+item.get("cBatch").toString());
+			}
+			// 获取转换前入库金额
+			List<Map<String,Object>> orgInList = fabricLossMapper.getOrgInList(cInvIdList);
+			// 设置入库类型,入库单价
+			int replaceSum = 0; // 替换的数量,为了防止死循环,替换数量小于查找数量,退出
+			for (Map<String,Object> item : findList){
+				Optional<Map<String,Object>> findOrgInOpt = orgInList.stream().filter(e->e.get("cInvIdAfter").toString().equals(item.get("cInvCode").toString()+item.get("cColor").toString()+item.get("cBatch").toString())).findFirst();
+				if (findOrgInOpt.isPresent()){
+					replaceSum++;
+					Map<String,Object> findOrgIn = findOrgInOpt.get();
+					item.put("cBusType", findOrgIn.get("cBusType").toString());
+					Double d = DoubleOperation.div(oConvertUtils.getDouble(findOrgIn.get("iPurchuseMoney").toString(), 0),oConvertUtils.getDouble(findOrgIn.get("iQuantity").toString(),0),4);
+					d = DoubleOperation.mul(oConvertUtils.getDouble(item.get("iQuantity").toString(), 0),d);
+					item.put("iPurchuseMoney", d);
+				}
+			}
+			if (replaceSum<findList.size()){
+				break;
+			}
+
+		}while(true);
+
+
 
 		List<FabricMoOrderCK> fabricMoOrderCKList = getFabricMoOrderCKList(rowInfoList, rowOutList, rowInList, rowInListWithAV);
 
@@ -634,11 +668,20 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 	/**
 	 * 获取采购订单-其他入库的纱
 	 * @param code
+	 * @param lyysList - 来源余纱,去掉这部分物料
 	 * @return
 	 */
-	private List<FabricPoOrder> getPoOrderQtrk(String code){
+	private List<FabricPoOrder> getPoOrderQtrk(String code,List<FabricPoOrder> lyysList){
+		// 来源余纱所有物料批次
+		List<FabricPoOrderOut> lyysOutList = new ArrayList<>();
+		for (FabricPoOrder lyys : lyysList){
+			lyysOutList.addAll(lyys.getFabricPoOrderOutList());
+		}
 		// 采购入库-其他入库的纱
 		List<FabricPoOrderOut> fabricPoOrderTempList = fabricLossMapper.getPurchaseListOtherInList(code);
+		fabricPoOrderTempList = fabricPoOrderTempList.stream().filter(e->{
+			return lyysOutList.stream().filter(l->(l.getCInvCode()+l.getCColor()+l.getCBatch()).equals(e.getCInvCode()+e.getCColor()+e.getCBatch())).count()==0;
+		}).collect(Collectors.toList());
 		List<FabricPoOrderOut> fabricPoOrderOutListGroup = new ArrayList<>();   // 根据委外订单号和批号分组
 //		FabricPoOrder fabricPoOrderQtrk = new FabricPoOrder();
 //		fabricPoOrderQtrk.setCInvName("其他入库的纱");
@@ -999,7 +1042,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				retItem.setIMoney(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 				bdVal = new BigDecimal(iPurchuseMoney/inSum);
 				retItem.setIPrice(bdVal.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
-
+				retItem.setICalPrice(retItem.getIPrice());
 				if (outSum<=0){
 					break;
 				}
@@ -1039,7 +1082,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 					retItem.setIMoney(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 					bdVal = new BigDecimal(iPurchuseMoney/inSum);
 					retItem.setIPrice(bdVal.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
-
+					retItem.setICalPrice(retItem.getIPrice());
 					if (outSum<=0){
 						break;
 					}
@@ -1469,4 +1512,5 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		return costInvoiceListGroup;
 
 	}
+
 }