Browse Source

面料损耗更新

fenghaifu 2 years ago
parent
commit
10857d6b77

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

@@ -21,10 +21,12 @@ import lombok.experimental.Accessors;
 @Accessors(chain = true)
 @ApiModel(value="面料损耗-质量事故单", description="面料损耗-质量事故单")
 public class FabricAccident {
-	@ApiModelProperty(value = "事故单号")
+	@ApiModelProperty(value = "单号")
 	private  String cPBVCode;
 	@ApiModelProperty(value = "供应商简称")
 	private  String cVenAbbName;
 	@ApiModelProperty(value = "金额")
 	private  Double iOriSum;
+	@ApiModelProperty(value = "事故单号")
+	private  String cPBVMemo;
 }

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

@@ -64,6 +64,8 @@ public class FabricCommonIn {
 
 	// 计算过程临时用到的,累计使用数量
 	private Double iTempUseSum;
+	// 形态转换物料源头物料id
+	private String cSourceInvId;
 
 
 	public String getParentId(){

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

@@ -6,6 +6,8 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
+import java.util.List;
+
 /**
  * @author fenghaifu
  * @version V1.0
@@ -59,4 +61,6 @@ public class FabricCostInvoice {
 		return cInvCode+cColor+cBatch;
 	}
 
+	List<FabricCostInvoiceDetail> costInvoiceDetailList;
+
 }

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

@@ -0,0 +1,74 @@
+package org.jeecg.modules.report.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.modules.system.util.DoubleOperation;
+
+/**
+ * @author fenghaifu
+ * @version V1.0
+ * @Copyright: 上海萃颠信息科技有限公司. All rights reserved.
+ * @Title:FabricCostInvoiceDetail
+ * @projectName jeecg-boot-parent
+ * @Description:TODO
+ * @date: 2022-12-08 18:02
+ * @updatehistory: 2022-12-08 18:02 新增
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="面料损耗-成本发票-详情", description="面料损耗-成本发票-详情")
+public class FabricCostInvoiceDetail {
+	@ApiModelProperty(value = "成本发票id")
+	private  String cParentId;
+	@ApiModelProperty(value = "转入-来源订单号/转出-本款订单号")
+	private  String cCode;
+	@ApiModelProperty(value = "存货编码")
+	private  String cInvCode;
+	@ApiModelProperty(value = "存货名称")
+	private  String cInvName;
+	@ApiModelProperty(value = "颜色")
+	private  String cColor;
+	@ApiModelProperty(value = "材料出库批号")
+	private  String cBatch;
+	@ApiModelProperty(value = "单价")
+	private  Double iPrice;
+	@ApiModelProperty(value = "数量")
+	private  Double iQuantity;
+	@ApiModelProperty(value = "金额")
+	private  Double iMoney;
+
+
+	// 转入成本,根据出库获取
+	public static FabricCostInvoiceDetail get(FabricCostInvoice costInvoice, FabricMoOrderCK moOrderCK){
+		FabricCostInvoiceDetail ret = new FabricCostInvoiceDetail();
+		ret.setCParentId(costInvoice.getId());
+		ret.setCCode(moOrderCK.getCPlanCode());
+		ret.setCInvCode(moOrderCK.getCInvCodeOut());
+		ret.setCInvName(moOrderCK.getCInvNameOut()+" "+moOrderCK.getCColorOut());
+		ret.setCColor(moOrderCK.getCColorOut());
+		ret.setCBatch(moOrderCK.getCBatchOut());
+		ret.setIPrice(DoubleOperation.getScale(moOrderCK.getIPrice(),4));
+		ret.setIQuantity(moOrderCK.getIQuantity());
+		ret.setIMoney(DoubleOperation.mul(ret.getIPrice(),ret.getIQuantity(), 2));
+		return ret;
+	}
+
+	// 转出成本,根据入库获取
+	public static FabricCostInvoiceDetail get(FabricCostInvoice costInvoice, FabricPoOrderIn poOrderIn){
+		FabricCostInvoiceDetail ret = new FabricCostInvoiceDetail();
+		ret.setCParentId(costInvoice.getId());
+		ret.setCCode(poOrderIn.getCPlanCode());
+		ret.setCInvCode(poOrderIn.getCInvCode());
+		ret.setCInvName(poOrderIn.getCInvName());
+		ret.setCColor(poOrderIn.getCColor());
+		ret.setCBatch(poOrderIn.getCBatch());
+		ret.setIPrice(DoubleOperation.getScale(poOrderIn.getIPrice(),4));
+		ret.setIQuantity(poOrderIn.getIQuantity());
+		ret.setIMoney(DoubleOperation.mul(ret.getIPrice(),ret.getIQuantity(), 2));
+		return ret;
+	}
+}

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

@@ -70,6 +70,8 @@ public class FabricMoOrderCK {
     private Boolean bCurPlan;
     // 计算过程临时用到的,累计使用数量
     private Double iTempUseSum;
+    // 出库得源头物料
+    private String cSourceInvId;
 
     public String getInvOutId(){
         return cInvCodeOut+cColorOut+cBatchOut;
@@ -113,6 +115,7 @@ public class FabricMoOrderCK {
         retItem.setIMoney(DoubleOperation.mul(iPrice,curSum,2));
         retItem.setIPrice(DoubleOperation.getScale(iPrice,4));
         retItem.setICalPrice(retItem.getIPrice());
+        retItem.setCSourceInvId("");
         return retItem;
     }
 
@@ -154,6 +157,11 @@ public class FabricMoOrderCK {
         retItem.setIMoney(DoubleOperation.mul(iPrice,curSum,2));
         retItem.setIPrice(DoubleOperation.getScale(iPrice,4));
         retItem.setICalPrice(retItem.getIPrice());
+        if (oConvertUtils.isEmpty(commonIn.getCSourceInvId())){
+            retItem.setCSourceInvId("");
+        }else{
+            retItem.setCSourceInvId(commonIn.getCSourceInvId());
+        }
         return retItem;
     }
     /**
@@ -194,6 +202,7 @@ public class FabricMoOrderCK {
         retItem.setIMoney(DoubleOperation.mul(iPrice,curSum,2));
         retItem.setIPrice(DoubleOperation.getScale(iPrice,4));
         retItem.setICalPrice(retItem.getIPrice());
+        retItem.setCSourceInvId("");
         return retItem;
     }
 

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

@@ -19,6 +19,8 @@ import java.util.stream.Collectors;
 @Accessors(chain = true)
 @ApiModel(value="面料损耗-采购订单", description="面料损耗-采购订单")
 public class FabricPoOrder {
+    @ApiModelProperty(value = "制造工艺")
+    private String  cVCName;
     //采购订单号
     @ApiModelProperty(value = "采购订单号")
     private  String cPOID;

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

@@ -83,11 +83,11 @@ public interface FabricLossMapper extends BaseMapper<FabricLoss> {
 	@DS("multi-three")
 	List<FabricExpenses> getExpensesList(@Param("code")String code);
 	// 获取采购入库价格列表
-	@DS("multi-three")
-	List<FabricCostInvoice> getPurchuseInPriceList(@Param("code")String code);
+//	@DS("multi-three")
+//	List<FabricCostInvoice> getPurchuseInPriceList(@Param("code")String code);
 	// 获取委外订单发票金额
-	@DS("multi-three")
-	List<FabricCostInvoice> getOmInvoiceMoneyList(@Param("code")String code);
+//	@DS("multi-three")
+//	List<FabricCostInvoice> getOmInvoiceMoneyList(@Param("code")String code);
 	// 获取委外订单运费发票金额
 	@DS("multi-three")
 	List<FabricCostInvoice> getOmInvoiceMoneyYfList(@Param("code")String code);
@@ -188,4 +188,7 @@ public interface FabricLossMapper extends BaseMapper<FabricLoss> {
 	// 采购入库、委外入库、转换入库、其他入库
 	@DS("multi-three")
 	List<FabricCommonIn> getInListByInvId(@Param("invIdList")List<String> invIdList);
+	// 获取成衣委外出库
+	@DS("multi-three")
+	List<FabricMoOrderCK> getOmOutList19(@Param("code")String code);
 }

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

@@ -4,7 +4,7 @@
 
 	<!-- 获取 头信息 主要是成衣委外及源头订单信息 -->
 	<select id="getFabricLossData" resultType="org.jeecg.modules.report.entity.FabricLoss">
-		select distinct * from VIEW_FabricLoss_Head_Clothes where cCode like CONCAT(#{code},'%')
+		select distinct * from VIEW_FabricLoss_Head_Clothes where cCode like CONCAT('%',#{code},'%')
 	</select>
 	<!-- 获取计划员 103的面料委外制单人,供应商分类是染厂的 -->
 	<select id="getPlanner" resultType="java.lang.String">
@@ -66,22 +66,22 @@
 
 	<!--获取采购订单,物料名为物料名+颜色-->
 	<select id="getPurchaseList" resultType="org.jeecg.modules.report.entity.FabricPoOrder">
-		select cVenName,cVenAbbName,cPOID,cInvCode,cInvName,cColor,<!--isnull(cBatch,'') as cBatch,-->sum(iQuantity) as iQuantity,
+		select cVCName,cVenName,cVenAbbName,cPOID,cInvCode,cInvName,cColor,sum(iQuantity) as iQuantity,
 		isnull(sum(iQuantityIn),0) as iQuantityIn
 		 from (
 		select a.cPOID ,d.cVenName,d.cVenAbbName ,c.cInvCode,c.cInvName + ' ' + isnull(b.cFree1,'') as cInvName,isnull(b.cFree1,'') as cColor,b.iQuantity,
-		(select sum(iquantity) from RdRecords01 x where x.iposid=b.id) as iQuantityIn<!--,
-		stuff((SELECT ',' + cbatch FROM RdRecords01 x where x.iposid=b.id FOR XML path('') ), 1, 1, '') as cBatch-->
+		(select sum(iquantity) from RdRecords01 x where x.iposid=b.id) as iQuantityIn,e.cVCName
 		from PO_Pomain a
 		inner join PO_Podetails b on a.POID  =b.POID
 		inner join Inventory c on b.cInvCode=c.cInvCode
 		inner join Vendor  d on a.cVenCode=d.cVenCode
+		inner join VendorClass e on d.cVCCode =e.cVCCode
 		where a.cPOID like CONCAT(#{code},'%')
 		and (c.cInvCCode LIKE '01%'
 		or c.cInvCCode LIKE '02%'
 		or c.cInvCCode LIKE '03%'
 		or c.cInvCCode LIKE '04%') and c.cInvCCode not in ('0299','0399','0499')
-		) as t1 group by cVenName,cVenAbbName,cPOID,cInvCode,cInvName,cColor<!--,cBatch-->
+		) as t1 group by cVCName,cVenName,cVenAbbName,cPOID,cInvCode,cInvName,cColor
 	</select>
 	<!-- 其他入库纱,找委外订单的材料出库单,获取物料号+批号,物料号+批号再其他入库单 -->
 	<!--
@@ -289,6 +289,26 @@
 	</select>-->
 	<!--获取所有委外订单 cComUnitCode : 计量单位,02(PCS)根,04(M)米-->
 	<select id="getOmOrderListAll" resultType="org.jeecg.modules.report.entity.FabricOMOrder">
+		select * from (
+		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(x.iQuantity-x.iSQuantity+isnull(y.iQuantity,0)) from rdrecords11 x
+		left join VIEW_OM_OUT_SETTLEVOUCE y on x.autoid=y.iRdsID
+		where y.cmocode like CONCAT(#{code},'%') and 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
+		INNER JOIN Inventory c ON b.cinvcode = c.cinvcode
+		inner join Vendor  d on a.cVenCode=d.cVenCode
+		inner join VendorClass e on d.cVCCode =e.cVCCode
+		WHERE
+		c.cInvCCode NOT LIKE '19%'
+		AND a.cCode LIKE CONCAT(#{code},'%')
+		) as t1 where (iQuantityOut>0 or iQuantityIn>0)
+		order by cVCName,cVenName,cInvCode,cInvName,cComUnitCode,cColor,cColorNumber
+<!--
 		select * from (
 			SELECT b.MODetailsID,e.cVCName,d.cVenName ,d.cVenAbbName ,a.cVenCode ,c.cInvCode,c.cInvName,c.cComUnitCode,
 				isnull(b.cFree1,'') as cColor,
@@ -305,7 +325,7 @@
 				c.cInvCCode NOT LIKE '19%'
 				AND a.cCode LIKE CONCAT(#{code},'%')
 		) as t1 where (iQuantityOut>0 or iQuantityIn>0)
-		order by cVCName,cVenName,cInvCode,cInvName,cComUnitCode,cColor,cColorNumber
+		order by cVCName,cVenName,cInvCode,cInvName,cComUnitCode,cColor,cColorNumber-->
 
 	</select>
 	<!--获取销售出库委外订单行id-->
@@ -404,7 +424,7 @@
 		where cSOCode like CONCAT(#{code},'%')
 	</select>
 	<!--获取采购入库价格列表-->
-	<select id="getPurchuseInPriceList" resultType="org.jeecg.modules.report.entity.FabricCostInvoice">
+	<!--<select id="getPurchuseInPriceList" resultType="org.jeecg.modules.report.entity.FabricCostInvoice">
 		select distinct '普通采购' as cBusType,e.cVCName,d.cVenName ,d.cVenAbbName,c.cInvCode,isnull(c.cFree1,'') as cColor,
 			isnull(c.cBatch,'') as cBatch
 		from PO_Pomain a
@@ -415,9 +435,9 @@
 		inner join Inventory f on c.cinvcode=f.cinvcode
 		where a.cPOID like CONCAT(#{code},'%') and e.cVCName not like '成衣厂'
 			and (f.cInvCCode in ('0201','0301','0401') or f.cInvCCode like '01%')
-	</select>
+	</select>-->
 	<!--获取委外订单发票金额-->
-	<select id="getOmInvoiceMoneyList" resultType="org.jeecg.modules.report.entity.FabricCostInvoice">
+	<!--<select id="getOmInvoiceMoneyList" resultType="org.jeecg.modules.report.entity.FabricCostInvoice">
 
 		select a.cBusType,g.cVCName,f.cVenName ,f.cVenAbbName,isnull(sum(c.iSum),0) as iMoney
 			from RdRecord01 a
@@ -435,7 +455,7 @@
 			and b.cInvCode &lt;&gt; 'N3000002426'
 			group by a.cBusType,g.cVCName,f.cVenName ,f.cVenAbbName
 			order by a.cBusType,g.cVCName,f.cVenName ,f.cVenAbbName
-	</select>
+	</select>-->
 	<!--获取委外订单运费发票金额-->
 	<select id="getOmInvoiceMoneyYfList" resultType="org.jeecg.modules.report.entity.FabricCostInvoice">
 		select '运费发票' as cBusType,g.cVCName,f.cVenName ,f.cVenAbbName,isnull(sum(d.iSum),0) as iMoney
@@ -668,7 +688,7 @@
 		select b.MODetailsID,
 			 d.cInvCode as cInvCodeOut,z.cInvName as cInvNameOut,isnull(d.cFree1,'') as cColorOut,
 			 isnull(d.cBatch,'') as cBatchOut,
-			 isnull(sum(d.iQuantity),0) as iQuantityOut,
+			 isnull(sum(d.iQuantity-d.iSQuantity+isnull(y.iQuantity,0)),0) as iQuantityOut,
 			 c.cInvCCode as cInvCCodeOut,a.cCode as cOmCode,x.cVenAbbName as cOmVenAbbName
 		FROM
 		om_momain a
@@ -677,12 +697,13 @@
 		inner join rdrecords11 d on d.iOMoDID=b.MODetailsID
 		INNER JOIN Inventory z ON d.cinvcode = z.cinvcode
 		inner join Vendor x on x.cVenCode=a.cVenCode
+		left join VIEW_OM_OUT_SETTLEVOUCE y on d.autoid=y.iRdsID
 		WHERE
 		c.cInvCCode NOT LIKE '19%'
 		AND a.cCode LIKE CONCAT(#{code},'%')
+		AND y.cmocode LIKE CONCAT(#{code},'%')
 		group by b.MODetailsID,
 			 d.cInvCode,z.cInvName,d.cFree1,d.cBatch,c.cInvCCode,a.cCode,x.cVenAbbName
-			 having sum(d.iQuantity)>0
 	</select>
 	<!-- 获取委外订单出库物料的入库物料信息:包含采购入库、委外入库 -->
 	<!--
@@ -891,14 +912,14 @@
 	</select>
 	<!-- 获取事故单 -->
 	<select id="getAccidentList" resultType="org.jeecg.modules.report.entity.FabricAccident">
-		SELECT ah.cPBVCode,VEN.cVenAbbName,sum(A.iOriSum) as iOriSum
+		SELECT ah.cPBVMemo,ah.cPBVCode,VEN.cVenAbbName,sum(A.iOriSum) as iOriSum
 		from PurBillVouchs a
 		left join PurBillVouch ah on ah.pbvid=a.pbvid
 		left join Inventory inv on inv.cInvCode=a.cInvCode
 		left join Vendor ven on ven.cVenCode=ah.cvencode
 		where cPBVBillType='03'
 			and inv.cInvName='事故单' and ah.cDefine2 like CONCAT(#{code},'%')
-		group by ah.cPBVCode,VEN.cVenAbbName
+		group by ah.cPBVMemo,ah.cPBVCode,VEN.cVenAbbName
 
 	</select>
 	<!-- 获取形态转换入库的原始入库单,可能存在多次形态转换,需要多次调用 -->
@@ -1123,5 +1144,11 @@
 		)
 
 
+	</select>
+	<!-- 获取成衣委外出库 -->
+	<select id="getOmOutList19" resultType="org.jeecg.modules.report.entity.FabricMoOrderCK">
+
+		select * from VIEW_OM_OUT_19 where cOmCode like CONCAT(#{code},'%')
+
 	</select>
 </mapper>

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

@@ -89,85 +89,6 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			}
 			// 根据委外订单设置分配数量、余纱、采购损耗,来源余纱、其他入库的纱
 			setPoOrderListByOmOrderList(ret);
-
-/*
-			// 采购入库-来源余纱
-			List<FabricPoOrder> lyysList = getPoOrderLyys(code);
-			fabricPoOrderList.addAll(lyysList);
-			// 采购入库-其他入库的纱
-			fabricPoOrderList.addAll(getPoOrderQtrk(code,lyysList));
-			ret.setFabricPoOrderList(fabricPoOrderList);
-			// 委外订单所有
-			List<FabricOMOrder> fabricOMOrderListAll = fabricLossMapper.getOmOrderListAll(code);
-			if (fabricOMOrderListAll.size() == 0){
-				ret.setSuccess(false);
-				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());
-			if (fabricOMOrderListTmp.size()>0){
-				fabricOMOrderList1.addAll(fabricOMOrderListTmp);
-			}
-			fabricOMOrderListTmp = fabricOMOrderListAll.stream().filter(e->e.getCVCName().indexOf("染")==0).collect(Collectors.toList());
-			if (fabricOMOrderListTmp.size()>0){
-				fabricOMOrderList1.addAll(fabricOMOrderListTmp);
-			}
-			fabricOMOrderListTmp = fabricOMOrderListAll.stream().filter(e->e.getCVCName().indexOf("印")==0).collect(Collectors.toList());
-			if (fabricOMOrderListTmp.size()>0){
-				fabricOMOrderList1.addAll(fabricOMOrderListTmp);
-			}
-			fabricOMOrderListTmp = fabricOMOrderListAll.stream().filter(e->e.getCVCName().indexOf("织")!=0&&e.getCVCName().indexOf("染")!=0&&e.getCVCName().indexOf("印")!=0).collect(Collectors.toList());
-			if (fabricOMOrderListTmp.size()>0){
-				fabricOMOrderList1.addAll(fabricOMOrderListTmp);
-			}
-			// 设置详情及成本
-			fabricOMOrderList1 = setFabricOMOrderOutDetail(fabricOMOrderList1, code, editData);
-			fabricOMOrderList1 = setFabricOMOrderInDetail(fabricOMOrderList1, code);
-			// 设置余料去向
-			fabricOMOrderList1 = setFabricOMOrderLeftDetail(fabricOMOrderList1, code);
-
-			// 设置附件
-			fabricOMOrderList1.forEach(e->{
-				List<AccessorItem> accessorItemList1 = omAccList.stream().filter(a->a.getCInvId().equals(e.getCInvCode()+e.getCColor())).collect(Collectors.toList());
-				e.setAccessorItemList(accessorItemList1);
-			});
-			// 委外订单国内
-			for (FabricOMOrder fabricOMOrder : fabricOMOrderList1){
-				double dLoss = 0;
-				if (fabricOMOrder.getIQuantityOut()!=0) {
-					dLoss = (1 - fabricOMOrder.getIQuantityIn() / fabricOMOrder.getIQuantityOut()) * 100;
-				}
-
-				if ("02".equals(fabricOMOrder.getCComUnitCode())){  // 根
-					fabricOMOrder.setIQuantityPCS(fabricOMOrder.getIQuantityIn());
-				}else if ("04".equals(fabricOMOrder.getCComUnitCode())){    // 米
-					fabricOMOrder.setIQuantityM(fabricOMOrder.getIQuantityIn());
-				}
-				BigDecimal bDLoss = new BigDecimal(dLoss);
-				fabricOMOrder.setCQuantityLoss(bDLoss.setScale(2, BigDecimal.ROUND_HALF_UP).toString()+"%");
-				double dMoreLess = fabricOMOrder.getIQuantityIn()-fabricOMOrder.getIQuantity();
-				BigDecimal bDMoreLess = new BigDecimal(dMoreLess);
-				fabricOMOrder.setIQuantityMoreLess(bDMoreLess.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
-			}
-			// 委外订单国外
-			List<FabricOMOrder> fabricOMOrderList2 = fabricLossMapper.getOmOrderListGw(code);
-			List<FabricOMOrder> fabricOMOrderListGn = fabricOMOrderList1.stream().filter(all->{
-				return fabricOMOrderList2.stream().filter(gw->
-						all.getCInvCode().equals(gw.getCInvCode()) &&
-						all.getCColor().equals(gw.getCColor())).count() ==0;
-			}).collect(Collectors.toList());
-			List<FabricOMOrder> fabricOMOrderListGw = fabricOMOrderList1.stream().filter(all->{
-				return fabricOMOrderList2.stream().filter(gw->
-						all.getCInvCode().equals(gw.getCInvCode()) &&
-								all.getCColor().equals(gw.getCColor())).count() >0;
-			}).collect(Collectors.toList());
-			ret.setFabricOMOrderList1(fabricOMOrderListGn);
-			ret.setFabricOMOrderList2(fabricOMOrderListGw);*/
 			// 费用支出单
 			List<FabricExpenses> fabricExpensesList = fabricLossMapper.getExpensesList(code);
 			ret.setFabricExpensesList(fabricExpensesList);
@@ -1238,108 +1159,6 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			fabricPoOrder.setFabricPoOrderOutList(findPoOrderStockList);
 		}
 		ret.setFabricPoOrderList(fabricPoOrderList);
-
-/*
-		// 获取委外材料出库单,已核销的取核销数量
-		List<Map<String,Object>> fabricOmOutList = fabricLossMapper.getOmOutList(code);
-		// 获取本次采购入库的形态转换
-		List<Map<String,Object>> fabricAssemVouchList = fabricLossMapper.getAssemVouchList(code);
-
-
-		// 采购入库被其他委外订单使用的信息
-		List<FabricPoOrderOut> fabricPoOrderOutList = fabricLossMapper.getPoOrderInToOther(code);
-		// 采购入库仓库库存
-		List<FabricPoOrderOut> poOrderStockList = fabricLossMapper.getPurchaseStockList(code);
-		// 采购订单设置分配数量、委外供应商、余纱、采购损耗
-		for (FabricPoOrder fabricPoOrder : fabricPoOrderList){
-			// 获取采购形态转换物料
-			List<Map<String, Object>> tmpAssemVouchList = fabricAssemVouchList.stream().filter(e->
-					oConvertUtils.getString(e.get("cInvCode")).equals(fabricPoOrder.getCInvCode()) &&
-							oConvertUtils.getString(e.get("cColor")).equals(fabricPoOrder.getCColor())).collect(Collectors.toList());
-			//&&
-			//								fabricPoOrder.getCBatch().indexOf(oConvertUtils.getString(e.get("cAVBatch")))>-1
-			// 未形态转换物料
-			List<Map<String, Object>> tmpOmOutList1 = fabricOmOutList.stream().filter(e->
-					oConvertUtils.getString(e.get("cInvCode")).equals(fabricPoOrder.getCInvCode()) &&
-							oConvertUtils.getString(e.get("cColor")).equals(fabricPoOrder.getCColor())).collect(Collectors.toList());
-			// &&
-			//								fabricPoOrder.getCBatch().indexOf(oConvertUtils.getString(e.get("cBatch")))>-1
-
-			// 形态转换物料
-			List<Map<String, Object>> tmpOmOutList2 = fabricOmOutList.stream().filter(out->{
-				return tmpAssemVouchList.stream().filter(e ->
-						oConvertUtils.getString(e.get("cInvCode2")).equals(oConvertUtils.getString(out.get("cInvCode"))) &&
-								oConvertUtils.getString(e.get("cColor2")).equals(oConvertUtils.getString(out.get("cColor")))
-				).count() > 0;
-			}).collect(Collectors.toList());
-			// &&
-			//								oConvertUtils.getString(e.get("cAVBatch2")).equals(oConvertUtils.getString(out.get("cBatch")))
-
-			tmpOmOutList1.addAll(tmpOmOutList2);
-
-			List<String> omcVenAbbNameList = new ArrayList<>();
-			double outSum = 0;
-			for (Map<String, Object> out : tmpOmOutList1){
-				outSum += oConvertUtils.getDouble(out.get("iQuantity").toString(),0);
-				String omcVenAbbName = oConvertUtils.getString(out.get("cVenAbbName").toString());
-				if (!omcVenAbbNameList.contains(omcVenAbbName)){
-					omcVenAbbNameList.add(omcVenAbbName);
-				}
-			}
-			if (omcVenAbbNameList.size()>0){
-				fabricPoOrder.setOmcVenAbbName(String.join(",", omcVenAbbNameList));
-			}
-
-			BigDecimal bOutSum = new BigDecimal(outSum);
-			outSum = bOutSum.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
-			fabricPoOrder.setIQuantityOut(outSum);
-			double leftSum = fabricPoOrder.getIQuantityIn()-fabricPoOrder.getIQuantityOut();
-			BigDecimal bLeftSum = new BigDecimal(leftSum);
-			leftSum = bLeftSum.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
-			fabricPoOrder.setIQuantityLeft(leftSum);
-			double leftRate = 0;
-			if (fabricPoOrder.getIQuantityIn() != 0) {
-				leftRate = leftSum / fabricPoOrder.getIQuantityIn();
-			}
-			BigDecimal bLeftRate = new BigDecimal(leftRate);
-			leftRate = bLeftRate.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
-			fabricPoOrder.setIQuantityLeftRate(leftRate);
-
-			// 设置入库信息
-			List<FabricPoOrderIn> tmpFabricPoOrderInList = fabricPoOrderInList.stream().filter(e->
-					e.getCInvCode().equals(fabricPoOrder.getCInvCode()) &&
-							oConvertUtils.getString(e.getCColor()).equals(oConvertUtils.getString(fabricPoOrder.getCColor()))).collect(Collectors.toList());
-			fabricPoOrder.setFabricPoOrderInList(tmpFabricPoOrderInList);
-			// 设置被其他委外订单使用信息
-			List<FabricPoOrderOut> findFabricPoOrderOutList = fabricPoOrderOutList.stream().filter(e->
-					oConvertUtils.getString(e.getCInvCode()).equals(oConvertUtils.getString(fabricPoOrder.getCInvCode())) &&
-							oConvertUtils.getString(e.getCColor()).equals(oConvertUtils.getString(fabricPoOrder.getCColor()))).collect(Collectors.toList());
-			// 设置计划号,单价
-			for (FabricPoOrderOut item : findFabricPoOrderOutList){
-				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));
-				if (tmpFabricPoOrderInList.size()>0){
-					item.setIPrice(tmpFabricPoOrderInList.get(0).getIPrice());
-					item.setIMoney(item.getIPrice()*item.getIQuantity());
-				}
-
-			}
-			// 设置仓库库存
-			List<FabricPoOrderOut> findPoOrderStockList = poOrderStockList.stream().filter(e->
-					fabricPoOrder.getCInvCode().equals(e.getCInvCode()) &&
-							oConvertUtils.getString(fabricPoOrder.getCColor()).equals(e.getCColor())).collect(Collectors.toList());
-			findFabricPoOrderOutList.addAll(findPoOrderStockList);
-
-			fabricPoOrder.setFabricPoOrderOutList(findFabricPoOrderOutList);
-		}*/
 	}
 
 	private final String[] CVCOrderKeyList = {"织","染","印"};
@@ -1373,9 +1192,6 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		List<FabricOMOrder> omOrderListOrderAllList = fabricOMOrderListAll.stream().sorted(Comparator.comparing(FabricOMOrder::getOrder)).collect(Collectors.toList());
 
 		// 设置详情及成本
-		/*
-		omOrderListOrderAllList = setFabricOMOrderOutDetail(omOrderListOrderAllList, code, editData);
-		omOrderListOrderAllList = setFabricOMOrderInDetail(omOrderListOrderAllList, code);*/
 		setOmOrderDetail(code, omOrderListOrderAllList, ret.getFabricPoOrderList(), editData);
 		// 设置余料去向
 		omOrderListOrderAllList = setFabricOMOrderLeftDetail(omOrderListOrderAllList, code);
@@ -1453,9 +1269,13 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		List<FabricOMOrder> omOrderList = new ArrayList<>();
 		omOrderList.addAll(ret.getFabricOMOrderList1());
 		omOrderList.addAll(ret.getFabricOMOrderList2());
+		// 采购订单所有
+		List<FabricPoOrder> poOrderList = ret.getFabricPoOrderList().stream().filter(e->!e.getCPOID().equals("来源余料") &&
+				!e.getCPOID().equals("其他入库")).collect(Collectors.toList());
+		/*
 		// 获取要计算成本的采购入库
 		List<FabricCostInvoice> fabricCostInvoiceList1 = fabricLossMapper.getPurchuseInPriceList(code);
-		// 根据类型、工厂、采购类型分组。根据委外出库,获取出库成本。
+		// 根据类型、工厂、采购类型分组。根据采购入库,计算成本
 		List<FabricCostInvoice> fabricCostInvoiceList = new ArrayList<>();
 		for (FabricCostInvoice fabricCostInvoice : fabricCostInvoiceList1){
 			Optional<FabricCostInvoice> findItem = fabricCostInvoiceList.stream().filter(e->
@@ -1473,17 +1293,20 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			}
 
 			Double money = newItem.getIMoney();
-			for (FabricOMOrder omOrder : omOrderList){
-				List<FabricMoOrderCK> ckList = omOrder.getFabricMoOrderCKList();
-				if (ckList != null) {
-					List<FabricMoOrderCK> findList1 = ckList.stream().filter(e->
-							e.getInvOutId().equalsIgnoreCase(fabricCostInvoice.getInvId())).collect(Collectors.toList());
-					for (FabricMoOrderCK ckItem : findList1) {
-						money+=ckItem.getIMoney();
-					}
-				}
 
-			}
+
+
+//			for (FabricOMOrder omOrder : omOrderList){
+//				List<FabricMoOrderCK> ckList = omOrder.getFabricMoOrderCKList();
+//				if (ckList != null) {
+//					List<FabricMoOrderCK> findList1 = ckList.stream().filter(e->
+//							e.getInvOutId().equalsIgnoreCase(fabricCostInvoice.getInvId())).collect(Collectors.toList());
+//					for (FabricMoOrderCK ckItem : findList1) {
+//						money+=ckItem.getIMoney();
+//					}
+//				}
+//
+//			}
 			BigDecimal bdValue = new BigDecimal(money);
 			newItem.setIMoney(bdValue.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 
@@ -1492,6 +1315,59 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		//获取委外订单发票金额
 		List<FabricCostInvoice> fabricCostInvoiceList2 = fabricLossMapper.getOmInvoiceMoneyList(code);
 		fabricCostInvoiceList.addAll(fabricCostInvoiceList2);
+		*/
+		// 根据采购入库和委外入库,计算成本发票
+		List<FabricCostInvoice> fabricCostInvoiceList = new ArrayList<>();
+		// 计算采购入库
+		for (FabricPoOrder poOrder : poOrderList){
+			Optional<FabricCostInvoice> findItem = fabricCostInvoiceList.stream().filter(e->
+					"普通采购".equalsIgnoreCase(e.getCBusType()) &&
+							poOrder.getCVCName().equalsIgnoreCase(e.getCVCName()) &&
+							poOrder.getCVenAbbName().equalsIgnoreCase(e.getCVenAbbName())).findFirst();
+			FabricCostInvoice newItem = new FabricCostInvoice();
+			Double dMoney = 0.0;
+			if (oConvertUtils.listIsNotEmpty(poOrder.getFabricPoOrderInList())){
+				for (FabricPoOrderIn orderIn : poOrder.getFabricPoOrderInList()){
+					dMoney = DoubleOperation.add(dMoney, DoubleOperation.mul(orderIn.getIPrice(),orderIn.getIQuantityInvoice(),2));
+				}
+			}
+			if (findItem.isPresent()) {
+				newItem = findItem.get();
+				newItem.setIMoney(DoubleOperation.add(newItem.getIMoney(), dMoney));
+			}else{
+				newItem.setCBusType("普通采购");
+				newItem.setIMoney(dMoney);
+				newItem.setCVCName(poOrder.getCVCName());
+				newItem.setCVenName(poOrder.getCVenName());
+				newItem.setCVenAbbName(poOrder.getCVenAbbName());
+				fabricCostInvoiceList.add(newItem);
+			}
+		}
+		// 计算委外入库的加工费
+		for (FabricOMOrder omOrder : omOrderList){
+			Optional<FabricCostInvoice> findItem = fabricCostInvoiceList.stream().filter(e->
+					"委外加工".equalsIgnoreCase(e.getCBusType()) &&
+							omOrder.getCVCName().equalsIgnoreCase(e.getCVCName()) &&
+							omOrder.getCVenAbbName().equalsIgnoreCase(e.getCVenAbbName())).findFirst();
+			FabricCostInvoice newItem = new FabricCostInvoice();
+			Double dMoney = 0.0;
+			if (oConvertUtils.listIsNotEmpty(omOrder.getFabricMoOrderRKList())){
+				for (FabricMoOrderRK orderIn : omOrder.getFabricMoOrderRKList()){
+					dMoney = DoubleOperation.add(dMoney, orderIn.getIProcessFee());
+				}
+			}
+			if (findItem.isPresent()) {
+				newItem = findItem.get();
+				newItem.setIMoney(DoubleOperation.add(newItem.getIMoney(), dMoney));
+			}else{
+				newItem.setCBusType("委外加工");
+				newItem.setIMoney(dMoney);
+				newItem.setCVCName(omOrder.getCVCName());
+				newItem.setCVenName(omOrder.getCVenName());
+				newItem.setCVenAbbName(omOrder.getCVenAbbName());
+				fabricCostInvoiceList.add(newItem);
+			}
+		}
 		//获取委外订单运费发票金额
 		List<FabricCostInvoice> fabricCostInvoiceList3 = fabricLossMapper.getOmInvoiceMoneyYfList(code);
 		fabricCostInvoiceList.addAll(fabricCostInvoiceList3);
@@ -1512,7 +1388,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		// 转入成本
 		fabricCostInvoiceList.addAll(getInCost(ret.getFabricPoOrderList(), omOrderList));
 		// 转出成本
-		List<FabricCostInvoice> outCostList = getOutCost(ret.getFabricPoOrderList(), ret.getFabricOMOrderList1(), ret.getFabricOMOrderList2());
+		List<FabricCostInvoice> outCostList = getOutCost(ret.getCCode(), ret.getFabricPoOrderList(), ret.getFabricOMOrderList1(), ret.getFabricOMOrderList2());
 		// 设置修改的工厂
 		if (editData != null){
 			List<FabricCostInvoice> editCostList = editData.getFabricCostInvoiceList();
@@ -1561,6 +1437,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 						formatItem.setCInvCode(itemIn.getCInvCode());
 						formatItem.setCColor(itemIn.getCColor());
 						formatItem.setCBatch(itemIn.getCBatch());
+						formatItem.setCInvName(itemIn.getCInvName());
 						formatItem.setIQuantity(itemIn.getIQuantity());
 						formatItem.setIPrice(itemIn.getIPrice());
 						allInList.add(formatItem);
@@ -1587,6 +1464,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 						formatItem.setCColor(item.getCColor());
 						formatItem.setCBatch(itemIn.getCBatch());
 						formatItem.setIQuantity(itemIn.getIQuantityIn());
+						formatItem.setCInvName(itemIn.getCInvName());
 						formatItem.setIPrice(itemIn.getIPrice());
 						allInList.add(formatItem);
 					}
@@ -1607,6 +1485,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 					outCopy.setCColorOut(omOut.getCColorOut());
 					outCopy.setIQuantity(omOut.getIQuantity());
 					outCopy.setIPrice(omOut.getIPrice());
+					outCopy.setCInvNameOut(omOut.getCInvNameOut());
 					outCopy.setCVCName(omOrder.getCVCName());
 					outCopy.setCVenAbbName(omOrder.getCVenAbbName());
 					outCopy.setCPlanCode(omOut.getCPlanCode());
@@ -1640,7 +1519,8 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		}
 		List<FabricCostInvoice> costInvoiceList = new ArrayList<>();
 
-		// 计算总转入成本
+		// 计算总转入成本、设置详情
+		List<FabricCostInvoiceDetail> invoiceDetailList = new ArrayList<>();
 		for (FabricMoOrderCK itemOut : omOutListAll){
 			if (itemOut.getIQuantity()>0){
 				FabricCostInvoice fabricCostInvoice = new FabricCostInvoice();
@@ -1650,6 +1530,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				fabricCostInvoice.setIMoney(DoubleOperation.mul(itemOut.getIQuantity(),itemOut.getIPrice(), 2));
 				if (fabricCostInvoice.getIMoney()!=0) {
 					costInvoiceList.add(fabricCostInvoice);
+					invoiceDetailList.add(FabricCostInvoiceDetail.get(fabricCostInvoice, itemOut));
 				}
 			}
 		}
@@ -1664,6 +1545,8 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				find.setIMoney(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 			}else{
 				costInvoiceListGroup.add(fabricCostInvoice);
+				List<FabricCostInvoiceDetail> findList = invoiceDetailList.stream().filter(e->e.getCParentId().equalsIgnoreCase(fabricCostInvoice.getId())).collect(Collectors.toList());
+				fabricCostInvoice.setCostInvoiceDetailList(findList);
 			}
 		}
 		return costInvoiceListGroup;
@@ -1671,12 +1554,13 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 
 	/**
 	 * 根据采购入库详情,委外订单详情,获取转出成本。(入库数量-出库数量) * 单价
+	 * @param code - 计划号
 	 * @param poOrderList - 采购入库详情
 	 * @param omOrderListGn - 委外订单国内
 	 * @param omOrderListGw - 委外订单国外
 	 * @return
 	 */
-	private List<FabricCostInvoice> getOutCost(List<FabricPoOrder> poOrderList, List<FabricOMOrder> omOrderListGn, List<FabricOMOrder> omOrderListGw){
+	private List<FabricCostInvoice> getOutCost(String code, List<FabricPoOrder> poOrderList, List<FabricOMOrder> omOrderListGn, List<FabricOMOrder> omOrderListGw){
 		// 采购出入库去掉末尾两行:来源余纱、其他入库纱
 		List<FabricPoOrder> poOrderListReal = poOrderList.stream().filter(e->!e.getCPOID().equals("来源余料") &&
 				!e.getCPOID().equals("其他入库")).collect(Collectors.toList());
@@ -1691,7 +1575,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 					if (findItemOpt.isPresent()){
 						FabricPoOrderIn formatItem = findItemOpt.get();
 						Double dMoney = formatItem.getIPrice()*formatItem.getIQuantity()+itemIn.getIPrice()*itemIn.getIQuantity();
-						Double dQuantity = formatItem.getIQuantity()+itemIn.getIQuantity();
+						Double dQuantity = formatItem.getIQuantity()+itemIn.getIQuantityInvoice();
 						formatItem.setIPrice(dMoney/dQuantity);
 						formatItem.setIQuantity(dQuantity);
 
@@ -1700,9 +1584,10 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 						formatItem.setCInvCode(itemIn.getCInvCode());
 						formatItem.setCColor(itemIn.getCColor());
 						formatItem.setCBatch(itemIn.getCBatch());
-						formatItem.setIQuantity(itemIn.getIQuantity());
+						formatItem.setIQuantity(itemIn.getIQuantityInvoice());
 						formatItem.setIPrice(itemIn.getIPrice());
 						formatItem.setCInvName(itemIn.getCInvName()+" "+itemIn.getCColor());
+						formatItem.setCPlanCode(itemIn.getCPlanCode());
 						allInList.add(formatItem);
 					}
 				}
@@ -1721,6 +1606,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 					formatItem.setIPrice(itemIn.getIPrice());
 					formatItem.setCBusType("1");        // 国内
 					formatItem.setCInvName(itemIn.getCInvName()+" "+itemIn.getCColor());
+					formatItem.setCPlanCode(itemIn.getCPlanCode());
 					allInList.add(formatItem);
 				}
 			}
@@ -1738,13 +1624,15 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 					formatItem.setIPrice(itemIn.getIPrice());
 					formatItem.setCBusType("2");        // 国外
 					formatItem.setCInvName(itemIn.getCInvName()+" "+itemIn.getCColor());
+					formatItem.setCPlanCode(itemIn.getCPlanCode());
 					allInList.add(formatItem);
 				}
 			}
 		}
 
-		List<String> invIdGnList = new ArrayList<>();// 国内入库物料编码
+		//List<String> invIdGnList = new ArrayList<>();// 国内入库物料编码
 		List<String> invIdGwList = new ArrayList<>();// 国外入库物料编码
+		/*
 		for (FabricOMOrder omOrder : omOrderListGn){
 			List<FabricMoOrderRK> omRkList = omOrder.getFabricMoOrderRKList();
 			if (oConvertUtils.listIsNotEmpty(omRkList)) {
@@ -1752,7 +1640,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 					invIdGnList.add(omOrder.getCInvCode() + omOrder.getCColor() + rkItem.getCBatch());
 				}
 			}
-		}
+		}*/
 		for (FabricOMOrder omOrder : omOrderListGw){
 			List<FabricMoOrderRK> omRkList = omOrder.getFabricMoOrderRKList();
 			if (oConvertUtils.listIsNotEmpty(omRkList)) {
@@ -1762,9 +1650,16 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			}
 		}
 		List<FabricPoOrderOut> invOutGnList = new ArrayList<>();
-		if (invIdGnList.size()>0){
-			invOutGnList = fabricLossMapper.getOmInGnOutList(invIdGnList);   //国内出库数量
+		List<FabricMoOrderCK> moOrderCKList = fabricLossMapper.getOmOutList19(code);
+		for (FabricMoOrderCK moOrderCK : moOrderCKList){
+			moOrderCK.setIPrice(0.0);
+			invOutGnList.add(FabricPoOrderOut.getByMoOut(moOrderCK));
 		}
+		/*
+		if (invIdGnList.size()>0){
+			invOutGnList = fabricLossMapper.getOmOutList19(code).stream().filter(e->invIdGnList.contains(e.getInvOutId())).collect(Collectors.toList());
+
+		}*/
 		List<FabricPoOrderOut> invOutGwList = new ArrayList<>();
 		if (invIdGwList.size()>0){
 			invOutGwList = fabricLossMapper.getOmInGwOutList(invIdGwList);   //国外出库数量
@@ -1785,6 +1680,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 					outCopy.setCInvCodeOut(omOut.getCInvCodeOut());
 					outCopy.setCColorOut(omOut.getCColorOut());
 					outCopy.setIQuantity(omOut.getIQuantity());
+					outCopy.setCSourceInvId(omOut.getCSourceInvId());
 					omOutListAll.add(outCopy);
 				}
 			}
@@ -1795,7 +1691,8 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 
 			double inLeft = itemIn.getIQuantity();
 			for (FabricMoOrderCK outItem : omOutListAll){
-				if (outItem.getInvOutId().equalsIgnoreCase(itemIn.getInvId())){
+				if (outItem.getInvOutId().equalsIgnoreCase(itemIn.getInvId()) ||
+				outItem.getCSourceInvId().equalsIgnoreCase(itemIn.getInvId())){
 					double outLeft = outItem.getIQuantity();
 					bOmFind = true;
 					inLeft -= outLeft;
@@ -1845,7 +1742,8 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			}
 		}
 		List<FabricCostInvoice> costInvoiceList = new ArrayList<>();
-		// 计算总转入成本
+		List<FabricCostInvoiceDetail> costInvoiceDetailList = new ArrayList<>();
+		// 计算总转入成本,设置详情
 		for (FabricPoOrderIn itemIn : allInList){
 			if (itemIn.getIQuantity()>0){
 				FabricCostInvoice fabricCostInvoice = new FabricCostInvoice();
@@ -1856,6 +1754,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				fabricCostInvoice.setIMoney(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 				if (fabricCostInvoice.getIMoney()!=0) {
 					costInvoiceList.add(fabricCostInvoice);
+					costInvoiceDetailList.add(FabricCostInvoiceDetail.get(fabricCostInvoice, itemIn));
 				}
 			}
 		}
@@ -1871,6 +1770,8 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				find.setIMoney(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 			}else{
 				costInvoiceListGroup.add(fabricCostInvoice);
+				List<FabricCostInvoiceDetail> findList = costInvoiceDetailList.stream().filter(e->e.getCParentId().equalsIgnoreCase(fabricCostInvoice.getId())).collect(Collectors.toList());
+				fabricCostInvoice.setCostInvoiceDetailList(findList);
 			}
 		}
 
@@ -1908,6 +1809,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		// 获取材料出库
 		// 获取委外订单行id,出库物料信息,出库数量
 		List<FabricMoOrderCK> rowOutList = fabricLossMapper.getOmRowOutList(code);
+		rowOutList = rowOutList.stream().filter(e->e.getIQuantityOut()>0).collect(Collectors.toList());
 		rowOutList.forEach(e->e.setBCurPlan(false));
 		// 委外入库
 		List<FabricMoOrderRK> rowInList = fabricLossMapper.getOmInDetailList(code);
@@ -1930,7 +1832,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			otherInList.forEach(e -> e.setITempUseSum(0.0));
 			// 设置其他委外订单入库的材料成本,只计算一层
 			setOtherOmInPriceList(code, otherInList);
-			// 设置形态转换入库成本
+			// 设置形态转换入库成本,及源头物料
 			setAssemVouchInPriceList(otherInList);
 		}
 		// 设置非本次委外加工出入库成本
@@ -2047,7 +1949,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			List<String> invIdList = new ArrayList<>();
 			outList.forEach(e->invIdList.add(e.getInvOutId()));
 			List<FabricCommonIn> inList = fabricLossMapper.getInListByInvId(invIdList);
-			// 设置形态转换的源头单价
+			// 设置形态转换的源头单价,及源头物料
 			setAssemVouchInPriceList(inList);
 
 			// 每行设置金额
@@ -2144,15 +2046,27 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 	 */
 	private void setAssemVouchsInPrice(List<FabricCommonIn> commonInList, List<FabricAssemVouchsOrgIn> assemVouchsOrgInList,
 	                                    List<FabricInPrice> priceList){
-		priceList.forEach(e->{
-			commonInList.forEach(i->{
-				if (assemVouchsOrgInList.stream().filter(v->
-						v.getAutoId().equals(e.getAutoId())&&
-								i.getInvId().equalsIgnoreCase(v.getCInvIdFinal())).count()>0){
-					i.setIPrice(DoubleOperation.getScale(e.getIPrice(),4));
-				}
-			});
-		});
+		for (FabricInPrice inPrice : priceList){
+			for (FabricCommonIn commonIn : commonInList){
+				Optional<FabricAssemVouchsOrgIn> findOpt = assemVouchsOrgInList.stream().filter(e->
+								e.getAutoId().equals(inPrice.getAutoId()) &&
+										commonIn.getInvId().equalsIgnoreCase(e.getCInvIdFinal())).findFirst();
+				if (findOpt.isPresent()){
+					commonIn.setIPrice(DoubleOperation.getScale(inPrice.getIPrice(),4));
+					commonIn.setCSourceInvId(findOpt.get().getCInvIdAfter());
+				}
+			}
+		}
+//		priceList.forEach(e->{
+//			commonInList.forEach(i->{
+//				if (assemVouchsOrgInList.stream().filter(v->
+//						v.getAutoId().equals(e.getAutoId())&&
+//								i.getInvId().equalsIgnoreCase(v.getCInvIdFinal())).count()>0){
+//					i.setIPrice(DoubleOperation.getScale(e.getIPrice(),4));
+//					i.setCSourceInvId();
+//				}
+//			});
+//		});
 	}
 
 	/**
@@ -2211,7 +2125,8 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				for (FabricPoOrderIn orderIn : poOrder.getFabricPoOrderInList()) {
 					Double dInLeft = orderIn.getIQuantity();    // 入库剩余数量
 					for (FabricMoOrderCK ck : moOrderCKList){
-						if (!ck.getInvOutId().equalsIgnoreCase(orderIn.getInvId())){
+						if (!ck.getInvOutId().equalsIgnoreCase(orderIn.getInvId()) &&
+						!ck.getCSourceInvId().equalsIgnoreCase(orderIn.getInvId())){
 							continue;
 						}
 						Double dCurOutSum = ck.getIQuantityOut();   // 出库单出库数量