浏览代码

面料损耗第八版本

fenghaifu 2 年之前
父节点
当前提交
4585522141

+ 2 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/controller/FabricLossController.java

@@ -65,8 +65,9 @@ public class FabricLossController {
 			result.setSuccess(false);
 			result.setMessage("计划号有误,获取不到数据");
 		}else{
-			result.setSuccess(true);
+			result.setSuccess(fabricLoss.isSuccess());
 			result.setResult(fabricLoss);
+			result.setMessage(fabricLoss.getMessage());
 		}
 
 		return result;

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

@@ -60,4 +60,9 @@ public class FabricLoss {
     // 开票成本-面料
     List<FabricCostCloth> fabricCostClothList;
 
+    // 是否成功
+    boolean success;
+    // 提示信息
+    String message;
+
 }

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

@@ -9,24 +9,48 @@ import lombok.experimental.Accessors;
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
-@ApiModel(value="demo对象", description="面料损耗-委外订单-材料出库-超链接")
+@ApiModel(value="面料损耗-委外订单-材料出库-超链接", description="面料损耗-委外订单-材料出库-超链接")
 public class FabricMoOrderCK {
-    @ApiModelProperty(value = "入库单号")
-    private  String ccode;
-    @ApiModelProperty(value = "物料编码")
-    private  String cinvCode;
-    @ApiModelProperty(value = "物料名称")
-    private  String cinvName;
-    @ApiModelProperty(value = "批号")
-    private  String cbatch;
-    @ApiModelProperty(value = "数量")
-    private  String iquantity;
-    @ApiModelProperty(value = "单据")
-    private  String iunitcost;
-    @ApiModelProperty(value = "供应商")
-    private  String cvenAbbName;
+    @ApiModelProperty(value = "材料入库类型")
+    private  String cBusType;
+    @ApiModelProperty(value = "材料入库单号")
+    private  String cCode;
+    @ApiModelProperty(value = "材料入库供应商名称")
+    private  String cVenName;
+    @ApiModelProperty(value = "材料入库供应商简称")
+    private  String cVenAbbName;
+    @ApiModelProperty(value = "委外入库物料编码")
+    private  String cInvCodeIn;
+    @ApiModelProperty(value = "委外入库物料名称")
+    private  String cInvNameIn;
+    @ApiModelProperty(value = "委外入库名称颜色")
+    private  String cColorIn;
+    @ApiModelProperty(value = "委外入库批号")
+    private  String cBatchIn;
+    @ApiModelProperty(value = "材料出库物料编码")
+    private  String cInvCodeOut;
+    @ApiModelProperty(value = "材料出库物料名称")
+    private  String cInvNameOut;
+    @ApiModelProperty(value = "材料出库名称颜色")
+    private  String cColorOut;
+    @ApiModelProperty(value = "材料出库批号")
+    private  String cBatchOut;
+    @ApiModelProperty(value = "委外加工单价")
+    private  Double iProcessPrice;
+    @ApiModelProperty(value = "委外出/入数量比")
+    private  Double iRate;
+    @ApiModelProperty(value = "材料出库数量")
+    private  Double iQuantityOut;
+    @ApiModelProperty(value = "加工入库数量")
+    private  Double iQuantityIn;
+    @ApiModelProperty(value = "使用数量")
+    private  Double iQuantity;
+    @ApiModelProperty(value = "材料采购入库单价")
+    private  Double iPurchusePrice;
+    @ApiModelProperty(value = "单个成本")
+    private  Double iPrice;
     @ApiModelProperty(value = "金额")
-    private  String price;
-    @ApiModelProperty(value = "成本")
-    private  String iprice;
+    private  Double iMoney;
+    @ApiModelProperty(value = "是否异常")
+    private Boolean abnormal;
 }

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

@@ -9,35 +9,32 @@ import lombok.experimental.Accessors;
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
-@ApiModel(value="demo对象", description="面料损耗-委外订单-采购入库-超链接")
+@ApiModel(value="面料损耗-委外订单-采购入库-超链接", description="面料损耗-委外订单-采购入库-超链接")
 public class FabricMoOrderRK {
     @ApiModelProperty(value = "委外订单号")
-    private  String cordercode;
-
-    @ApiModelProperty(value = "下游委外订单号")
-    private  String comcode;
-
-    @ApiModelProperty(value = "下游供应商")
-    private  String cvenAbbName;
-
+    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  String iquantity;
-
+    private  String cBatch;
+    @ApiModelProperty(value = "入库数量")
+    private  Double iQuantityIn;
+    @ApiModelProperty(value = "材料出库数量")
+    private  Double iQuantityOut;
+    @ApiModelProperty(value = "加工费")
+    private  Double iProcessFee;
     @ApiModelProperty(value = "开票数量")
-    private  String ipbvquantity;
-
+    private  Double iSumBillQuantity;
     @ApiModelProperty(value = "未开票数量")
-    private  String ipbvquantitys;
-
+    private  Double iSumBillQuantityN;
     @ApiModelProperty(value = "结算数量")
-    private  String isvquantity;
-
+    private  Double iSQuantity;
     @ApiModelProperty(value = "未结算数量")
-    private  String isvquantitys;
-
+    private  Double iSQuantityN;
     @ApiModelProperty(value = "成本")
-    private  String sum;
+    private  Double iPrice;
 }

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

@@ -60,4 +60,9 @@ public class FabricOMOrder {
     private List<Map<String,Object>>childrens=new ArrayList<>();
     @ApiModelProperty(value = "委外类型")
     private  String motype;
+
+    // 委外订单出库详情
+    List<FabricMoOrderCK> fabricMoOrderCKList;
+    // 委外订单入库详情
+    List<FabricMoOrderRK> fabricMoOrderRKList;
 }

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

@@ -106,4 +106,10 @@ public interface FabricLossMapper extends BaseMapper<FabricLoss> {
 	// 获取采购入库物料被其他委外订单使用明细
 	@DS("multi-three")
 	List<FabricPoOrderOut> getPoOrderInToOther(@Param("code")String code);
+	// 委外订单-材料出库详情
+	@DS("multi-three")
+	List<FabricMoOrderCK> getOmOutDetailList(@Param("code")String code);
+	// 委外订单-入库详情
+	@DS("multi-three")
+	List<FabricMoOrderRK> getOmInDetailList(@Param("code")String code);
 }

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

@@ -88,15 +88,14 @@
 			a.comcode as cCode,isnull(a.iSQuantity,a.iquantity) as iQuantity,a.iUnitCost as iPrice
 		FROM
 			rdrecords11 a
-			INNER JOIN OM_MODetails b ON a.iOMoDID = b.MODetailsID
-			INNER JOIN om_momain c ON c.moid = b.moid
-			INNER JOIN Inventory d ON b.cinvcode = d.cinvcode
+			INNER JOIN Inventory d ON a.cinvcode = d.cinvcode
 		WHERE
-			(d.cInvCCode LIKE '01%'
+		a.cbatch is not null and a.cbatch &lt;&gt;'期初' and
+		(d.cInvCCode LIKE '01%'
 			or d.cInvCCode LIKE '02%'
 			or d.cInvCCode LIKE '03%'
 			or d.cInvCCode LIKE '04%')
-			AND c.cCode LIKE CONCAT(#{code},'%')
+			and a.comcode LIKE CONCAT(#{code},'%')
 			AND (a.cInvCode + isnull( a.cFree1, '' ) + isnull( a.cBatch, '' ) IN (
 				SELECT
 					b.cInvCode + isnull( b.cFree1, '' ) + isnull( b.cBatch, '' )
@@ -135,6 +134,7 @@
 			or d.cInvCCode LIKE '03%'
 			or d.cInvCCode LIKE '04%')
 			and a.comcode LIKE CONCAT(#{code},'%')
+			and d.cInvName&lt;&gt;'杂纱'
 			and (
 				a.cInvCode+isnull(a.cFree1,'')+isnull(a.cbatch,'') in (
 				select b.cinvcode+isnull(b.cfree1,'')+isnull(b.cbatch,'') from RdRecords01 b
@@ -142,6 +142,12 @@
 				inner join PO_Podetails  c on b.iPOsID =c.ID
 				inner join PO_Pomain d on c.POID  =d.POID
 				where d.cPOID  not like CONCAT(#{code},'%') and a.cbustype='普通采购'
+				)  and a.cInvCode+isnull(a.cFree1,'')+isnull(a.cbatch,'') not in (
+				select b.cinvcode+isnull(b.cfree1,'')+isnull(b.cbatch,'') from RdRecords01 b
+				inner join RdRecord01 a on a.id=b.id
+				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='普通采购'
 				)
 				or a.cInvCode+isnull(a.cFree1,'')+isnull(a.cbatch,'') in (
 					select cInvCode2+isnull(cColor2,'')+isnull(cAVBatch2,'') from VIEW_FabricLoss_AssemVouchs where
@@ -151,6 +157,12 @@
 						inner join PO_Podetails  c on b.iPOsID =c.ID
 						inner join PO_Pomain d on c.POID  =d.POID
 						where d.cPOID not like CONCAT(#{code},'%') and a.cbustype='普通采购')
+						and cInvCode+isnull(cColor,'')+isnull(cAVBatch,'') not in (
+						select b.cinvcode+isnull(b.cfree1,'')+isnull(b.cbatch,'') from RdRecords01 b
+						inner join RdRecord01 a on a.id=b.id
+						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='普通采购')
 				)
 			)
 		) as t1 group by cCode
@@ -321,6 +333,7 @@
 	<select id="getCostAssistList" resultType="org.jeecg.modules.report.entity.FabricCostAssist">
 
 		select * from VIEW_FabricLoss_Cost_Assist where cPoid like CONCAT(#{code},'%')
+		and cVenAbbName not in ('宁波森语','马菲羊','森语集团')
 		order by cAccount,cPoid,cVenAbbName,cInvName,cComUnitName
 	</select>
 	<!--开票成本-面料-->
@@ -426,4 +439,47 @@
 		) as t1
 		group by cCode,cInvCode,cColor
 	</select>
+	<!--委外订单-材料出库详情-->
+	<select id="getOmOutDetailList" resultType="org.jeecg.modules.report.entity.FabricMoOrderCK">
+		select f.cBusType,f.cCode,g.cVenName,g.cVenAbbName,
+			 x.cInvCode as cInvCodeIn,y.cInvName as cInvNameIn,x.cFree1 as cColorIn,x.cBatch as cBatchIn,
+			 d.cInvCode as cInvCodeOut,z.cInvName as cInvNameOut,d.cFree1 as cColorOut,d.cBatch as cBatchOut,
+			 x.iProcessFee/x.iQuantity as iProcessPrice, d.iQuantity/x.iQuantity as iRate,
+			 d.iQuantity as iQuantityOut,x.iQuantity as iQuantityIn,
+			 isnull((select sum(iSum)/sum(iPBVQuantity ) from PurBillVouchs  x where x.RdsId =e.autoid and f.cbustype='普通采购'),0) as iPurchusePrice
+		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 RdRecords01 x on x.iOMoDID=b.MODetailsID
+		INNER JOIN Inventory y ON x.cinvcode = y.cinvcode
+		inner join rdrecords11 d on d.iOMoDID=b.MODetailsID
+		INNER JOIN Inventory z ON d.cinvcode = z.cinvcode
+		left join rdrecords01 e on d.cInvCode=e.cInvCode
+			and isnull(d.cFree1,'')=isnull(e.cFree1,'') and isnull(d.cBatch,'')=isnull(e.cBatch,'')
+		left join rdrecord01 f on e.id=f.id
+		left join Vendor g on g.cVenCode=f.cVenCode
+		WHERE
+		c.cInvCCode NOT LIKE '19%'
+		AND a.cCode LIKE CONCAT(#{code},'%')
+
+	</select>
+	<!--委外订单-采购入库详情-->
+	<select id="getOmInDetailList" resultType="org.jeecg.modules.report.entity.FabricMoOrderRK">
+		select a.cCode,
+			 x.cInvCode as cInvCode,y.cInvName as cInvName,x.cFree1 as cColor,x.cBatch as cBatch,
+			 isnull(x.iQuantity,0) as iQuantityIn,isnull(x.iProcessFee,0) as iProcessFee,
+			 isnull(x.iSumBillQuantity,0) as iSumBillQuantity,isnull(x.iSQuantity,0) as iSQuantity,
+			 (select sum(isnull(iquantity,0)) as iQuantityOut from rdrecords11 d where d.iOMoDID=b.MODetailsID) as iQuantityOut
+		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 RdRecords01 x on x.iOMoDID=b.MODetailsID
+		INNER JOIN Inventory y ON x.cinvcode = y.cinvcode
+		WHERE
+		c.cInvCCode NOT LIKE '19%'
+		AND a.cCode LIKE CONCAT(#{code},'%')
+
+	</select>
 </mapper>

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

@@ -31,7 +31,5 @@ public interface IFabricLossService extends IService<FabricLoss> {
 	//获取面料损耗数据
 	FabricLoss getFabricLossData(String code);
 
-	//面料损耗整体数据接口
-	Map<String,Object>getFabricLossDatas(String code);
 
 }

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

@@ -69,6 +69,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 	public FabricLoss getFabricLossData(String code) {
 		if (oConvertUtils.isNotEmpty(code)){
 			FabricLoss ret = new FabricLoss();
+			ret.setSuccess(true);
 			ret.setCCode(code);
 
 			List<String> lstContractNo = new ArrayList<>(); // 成衣合同号
@@ -259,6 +260,11 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			ret.setFabricPoOrderList(fabricPoOrderList);
 			// 委外订单所有
 			List<FabricOMOrder> fabricOMOrderListAll = fabricLossMapper.getOmOrderListAll(code);
+			if (fabricOMOrderListAll.size() == 0){
+				ret.setSuccess(false);
+				ret.setMessage("本计划没有面料委外,无面损表");
+				return ret;
+			}
 			// 织、染、印,其他排序
 			List<FabricOMOrder> fabricOMOrderList1 = new ArrayList<>();
 			List<FabricOMOrder> fabricOMOrderListTmp = fabricOMOrderListAll.stream().filter(e->e.getCVCName().indexOf("织")==0).collect(Collectors.toList());
@@ -277,6 +283,9 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			if (fabricOMOrderListTmp.size()>0){
 				fabricOMOrderList1.addAll(fabricOMOrderListTmp);
 			}
+			// 设置详情及成本
+			fabricOMOrderList1 = setFabricOMOrderOutDetail(fabricOMOrderList1, code);
+			fabricOMOrderList1 = setFabricOMOrderInDetail(fabricOMOrderList1, code);
 			// 委外订单国内
 			for (FabricOMOrder fabricOMOrder : fabricOMOrderList1){
 				double dLoss = 0;
@@ -454,15 +463,147 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		return null;
 	}
 
-	@Override
-	public Map<String, Object> getFabricLossDatas(String code) {
-		Map<String,Object>map=new HashMap<>();
-		if (oConvertUtils.isNotEmpty(code)){
-			List<FabricPoOrder> poOrderData = fabricPoOrderService.getPoOrderData(code);
-			List<FabricOMOrder> fabricOMOrderData = fabricOmOrderService.getFabricOMOrderData(code);
-			map.put("poOrder",poOrderData);
-			map.put("omOrder",fabricOMOrderData);
+	/**
+	 * 设置委外订单材料出库详情
+	 * @param fabricOMOrderList - 委外订单列表
+	 * @param code - 计划号
+	 * @return
+	 */
+	List<FabricOMOrder> setFabricOMOrderOutDetail(List<FabricOMOrder> fabricOMOrderList, String code){
+		List<FabricMoOrderCK> fabricMoOrderCKList = fabricLossMapper.getOmOutDetailList(code);
+
+		for (FabricOMOrder fabricOMOrder : fabricOMOrderList){
+			List<FabricMoOrderCK> findList = fabricMoOrderCKList.stream().filter(e->
+					e.getCInvCodeIn().equals(fabricOMOrder.getCInvCode()) &&
+					oConvertUtils.getString(e.getCColorIn()).equals(fabricOMOrder.getCColor())).collect(Collectors.toList());
+
+			// 设置成本,循环查找上一级
+			if (findList.size() == 0){
+				continue;
+			}
+			FabricMoOrderCK preItem = findList.get(0);
+			double preMoney = 0;
+			boolean abnormal = false;
+			while (true){
+				FabricMoOrderCK tempItem = preItem;
+				List<FabricMoOrderCK> preList = fabricMoOrderCKList.stream().filter(e->
+						e.getCInvCodeIn().equals(tempItem.getCInvCodeOut()) &&
+						oConvertUtils.getString(e.getCColorIn()).equals(tempItem.getCColorOut()) &&
+						oConvertUtils.getString(e.getCBatchIn()).equals(tempItem.getCBatchOut())).collect(Collectors.toList());
+				if (preList.size() == 0){
+					break;
+				}
+				// 有两行单价不一样的,报异常。委外取加工单价,采购取采购单价
+				double price = 0;
+				for (FabricMoOrderCK ckItem : preList){
+					double tmpPrice = 0;
+					if ("委外加工".equals(ckItem.getCBusType())){
+						tmpPrice = ckItem.getIProcessPrice();
+					}else if ("普通采购".equals(ckItem.getCBusType())){
+						tmpPrice = ckItem.getIPurchusePrice();
+					}
+					if (price == 0){
+						price = tmpPrice;
+					}else{
+						if (price != tmpPrice){
+							abnormal = true;
+							preMoney = 0;
+							break;
+						}
+					}
+				}
+				if (price == 0){
+					abnormal = true;
+				}
+				if (abnormal){
+					break;
+				}
+				preMoney += preItem.getIQuantityIn()*price;
+				preItem = preList.get(0);
+			}
+
+			// 设置出库数量
+			//double shouldOutSum = fabricOMOrder.getIQuantityOut();
+			for (FabricMoOrderCK ckItem : findList){
+				//double curInSum = ckItem.getIQuantityIn();
+				double curOut = ckItem.getIQuantityOut();
+//				if (shouldOutSum>curInSum){
+//					curOut = curInSum;
+//				}else{
+//					curOut = shouldOutSum;
+//				}
+				BigDecimal bdVal = new BigDecimal(curOut);
+				ckItem.setIQuantity(bdVal.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
+				double tmpPrice = 0;
+				double tmpMoney = preMoney;
+				if (!abnormal){
+
+
+					if ("委外加工".equals(ckItem.getCBusType())){
+						tmpPrice = ckItem.getIProcessPrice();
+					}else if ("普通采购".equals(ckItem.getCBusType())){
+						tmpPrice = ckItem.getIPurchusePrice();
+					}
+					tmpMoney += ckItem.getIQuantityIn()*tmpPrice;
+
+					if (ckItem.getIQuantity()>0) {
+						bdVal = new BigDecimal(tmpMoney);
+						ckItem.setIMoney(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+
+						bdVal = new BigDecimal(tmpMoney / ckItem.getIQuantity());
+						ckItem.setIPrice(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+					}
+				}
+
+//				shouldOutSum-=curOut;
+//				if (shouldOutSum<=0){
+//					break;
+//				}
+			}
+			fabricOMOrder.setFabricMoOrderCKList(findList);
 		}
-		return map;
+
+		return fabricOMOrderList;
+	}
+
+	/**
+	 * 设置委外订单入库详情
+	 * @param fabricOMOrderList - 委外订单列表
+	 * @param code - 计划号
+	 * @return
+	 */
+	List<FabricOMOrder> setFabricOMOrderInDetail(List<FabricOMOrder> fabricOMOrderList, String code){
+		List<FabricMoOrderRK> fabricMoOrderRKList = fabricLossMapper.getOmInDetailList(code);
+
+		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());
+
+
+			if (findList.size() == 0){
+				continue;
+			}
+			// 取材料出库成本+本次委外成本=成本
+			fabricOMOrder.setFabricMoOrderRKList(findList);
+			List<FabricMoOrderCK> ckList = fabricOMOrder.getFabricMoOrderCKList();
+			FabricMoOrderCK ckItem = null;
+			if (ckList != null && ckList.size() > 0){
+				ckItem = ckList.get(0);
+			}
+			for (FabricMoOrderRK fabricMoOrderRK : findList){
+				BigDecimal bdVal = new BigDecimal(fabricMoOrderRK.getIQuantityIn()-fabricMoOrderRK.getISumBillQuantity());
+				fabricMoOrderRK.setISumBillQuantityN(bdVal.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
+				bdVal = new BigDecimal(fabricMoOrderRK.getIQuantityIn()-fabricMoOrderRK.getISQuantity());
+				fabricMoOrderRK.setISQuantityN(bdVal.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
+				if (ckItem != null && ckItem.getIPrice() != null && ckItem.getIPrice()>0){
+					bdVal = new BigDecimal(fabricMoOrderRK.getIProcessFee()+ckItem.getIPrice()*fabricMoOrderRK.getIQuantityOut());
+					fabricMoOrderRK.setIPrice(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+
+				}
+			}
+		}
+
+		return fabricOMOrderList;
 	}
 }