fenghaifu 2 rokov pred
rodič
commit
1ed49249df

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

@@ -63,4 +63,13 @@ public class FabricCostInvoice {
 
 	List<FabricCostInvoiceDetail> costInvoiceDetailList;
 
+	public static FabricCostInvoice getByDetail(FabricCostInvoiceDetail detail){
+		FabricCostInvoice ret = new FabricCostInvoice();
+		ret.setCVCName(detail.getCVCName());
+		ret.setCVenAbbName(detail.getCVenAbbName());
+		ret.setCBusType(detail.getCBusType());
+		ret.setIMoney(detail.getIMoney());
+		return ret;
+	}
+
 }

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

@@ -23,8 +23,16 @@ import org.jeecg.modules.system.util.oConvertUtils;
 @Accessors(chain = true)
 @ApiModel(value="面料损耗-成本发票-详情", description="面料损耗-成本发票-详情")
 public class FabricCostInvoiceDetail {
-	@ApiModelProperty(value = "成本发票id")
-	private  String cParentId;
+	//供应商分类
+	@ApiModelProperty(value = "供应商分类")
+	private  String cVCName;
+	//供应商缩写
+	@ApiModelProperty(value = "供应商缩写")
+	private  String cVenAbbName;
+	//业务类型(采购/委外)
+	@ApiModelProperty(value = "业务类型(采购/委外)")
+	private  String cBusType;
+
 	@ApiModelProperty(value = "转入-来源订单号/转出-本款订单号")
 	private  String cCode;
 	@ApiModelProperty(value = "存货编码")
@@ -41,30 +49,48 @@ public class FabricCostInvoiceDetail {
 	private  Double iQuantity;
 	@ApiModelProperty(value = "金额")
 	private  Double iMoney;
+	@ApiModelProperty(value = "手动修改标识")
+	private  Boolean bManual;
 
-
+	public String getParentId(){
+		return cVCName+cBusType+cVenAbbName;
+	}
 	public String getId(){
 		return cCode+cInvCode+cColor+cBatch+ oConvertUtils.getString(iPrice);
 	}
+	// 用于改单价
+	public String getNPId(){
+		return cCode+cInvCode+cColor+cBatch;
+	}
 	// 转入成本,根据出库获取
-	public static FabricCostInvoiceDetail get(FabricCostInvoice costInvoice, FabricMoOrderCK moOrderCK){
+	public static FabricCostInvoiceDetail get(FabricMoOrderCK moOrderCK, String busType) {
 		FabricCostInvoiceDetail ret = new FabricCostInvoiceDetail();
-		ret.setCParentId(costInvoice.getId());
+		// 销售出库和成衣出库的类型取物料名+颜色
+		if (moOrderCK.getIPrice() == null){
+			ret.setCVCName(moOrderCK.getCInvNameOut()+" "+moOrderCK.getCColorOut());
+		}else {
+			ret.setCVCName(oConvertUtils.getString(moOrderCK.getCVCName()));
+		}
+		ret.setCVenAbbName(oConvertUtils.getString(moOrderCK.getCPlanCode())+" "+moOrderCK.getCVenAbbName());
+		ret.setCBusType(busType);
 		ret.setCCode(moOrderCK.getCPlanCode());
 		ret.setCInvCode(moOrderCK.getCInvCodeOut());
-		ret.setCInvName(moOrderCK.getCInvNameOut()+" "+moOrderCK.getCColorOut());
+		ret.setCInvName(moOrderCK.getCInvNameOut() + " " + moOrderCK.getCColorOut());
 		ret.setCColor(moOrderCK.getCColorOut());
 		ret.setCBatch(moOrderCK.getCBatchOut());
-		ret.setIPrice(DoubleOperation.getScale(moOrderCK.getIPrice(),4));
-		ret.setIQuantity(DoubleOperation.getScale(moOrderCK.getIQuantity(),4));
-		ret.setIMoney(DoubleOperation.mul(ret.getIPrice(),ret.getIQuantity(), 2));
+		ret.setIPrice(DoubleOperation.getScale(oConvertUtils.getDouble(oConvertUtils.getString(moOrderCK.getIPrice()), 0), 4));
+		ret.setIQuantity(DoubleOperation.getScale(moOrderCK.getIQuantityOut(), 4));
+		ret.setIMoney(DoubleOperation.mul(ret.getIPrice(), ret.getIQuantity(), 2));
+		ret.setBManual(moOrderCK.getIPrice() == null ? true:false);
 		return ret;
 	}
 
 	// 转出成本,根据入库获取
-	public static FabricCostInvoiceDetail get(FabricCostInvoice costInvoice, FabricPoOrderIn poOrderIn){
+	public static FabricCostInvoiceDetail get(FabricPoOrderIn poOrderIn, String busType){
 		FabricCostInvoiceDetail ret = new FabricCostInvoiceDetail();
-		ret.setCParentId(costInvoice.getId());
+		ret.setCVCName(oConvertUtils.getString(poOrderIn.getCInvName()));
+		ret.setCVenAbbName("");
+		ret.setCBusType(busType);
 		ret.setCCode(poOrderIn.getCPlanCode());
 		ret.setCInvCode(poOrderIn.getCInvCode());
 		ret.setCInvName(poOrderIn.getCInvName());
@@ -73,6 +99,7 @@ public class FabricCostInvoiceDetail {
 		ret.setIPrice(DoubleOperation.getScale(poOrderIn.getIPrice(),4));
 		ret.setIQuantity(DoubleOperation.getScale(poOrderIn.getIQuantity(),4));
 		ret.setIMoney(DoubleOperation.mul(ret.getIPrice(),ret.getIQuantity(), 2));
+		ret.setBManual(false);
 		return ret;
 	}
 }

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

@@ -1248,7 +1248,8 @@
 	<!-- 获取销售出库数量 -->
 	<select id="getSaleOutList" resultType="org.jeecg.modules.report.entity.FabricMoOrderCK">
 		select 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
+		isnull(c.cFree1,'') as cColorOut,isnull(c.cBatch,'') as cBatchOut,c.iQuantity as iQuantityOut,
+		isnull(c.cbatchproperty9,'') as cVenAbbName
 		from om_momain a
 		inner join OM_MODetails b on a.moid=b.moid
 		inner join rdrecords32 c on c.iorderdid  =b.isosid

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

@@ -683,20 +683,8 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		//fabricCostInvoiceList.addAll(getInCost(ret.getFabricPoOrderList(), omOrderList));
 		// 转出成本
 		//List<FabricCostInvoice> outCostList = getOutCost(ret.getCCode(), ret.getFabricPoOrderList(), ret.getFabricOMOrderList1(), ret.getFabricOMOrderList2());
-		List<FabricCostInvoice> inoutCostList = getInOutCost(ret.getCCode(), ret.getFabricPoOrderList(), ret.getFabricOMOrderList1(), ret.getFabricOMOrderList2());
-		// 设置修改的工厂
-		if (editData != null){
-			List<FabricCostInvoice> editCostList = editData.getFabricCostInvoiceList();
-			if (oConvertUtils.listIsNotEmpty(editCostList)){
-				for (FabricCostInvoice item : inoutCostList){
-					Optional<FabricCostInvoice> findOpt = editCostList.stream().filter(e->e.getCVCName().equalsIgnoreCase(item.getCVCName()) &&
-							"转出成本".equalsIgnoreCase(e.getCBusType())).findFirst();
-					if (findOpt.isPresent()){
-						item.setCVenAbbName(findOpt.get().getCVenAbbName());
-					}
-				}
-			}
-		}
+		List<FabricCostInvoice> inoutCostList = getInOutCost(ret.getCCode(), ret.getFabricPoOrderList(), ret.getFabricOMOrderList1(), ret.getFabricOMOrderList2(), editData);
+
 		fabricCostInvoiceList.addAll(inoutCostList);
 
 		ret.setFabricCostInvoiceList(fabricCostInvoiceList);
@@ -1475,9 +1463,11 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 	 * @param poOrderList - 订单列表
 	 * @param omOrderListGn - 国内委外订单
 	 * @param omOrderListGw - 国外委外订单
+	 * @param editData - 修改计划,用于取保存的转入成本
 	 * @return
 	 */
-	private List<FabricCostInvoice> getInOutCost(String code, List<FabricPoOrder> poOrderList, List<FabricOMOrder> omOrderListGn, List<FabricOMOrder> omOrderListGw){
+	private List<FabricCostInvoice> getInOutCost(String code, List<FabricPoOrder> poOrderList, List<FabricOMOrder> omOrderListGn,
+	                                             List<FabricOMOrder> omOrderListGw, FabricLoss editData){
 		// 采购出入库去掉末尾两行:来源余纱、其他入库纱
 		List<FabricPoOrder> poOrderListReal = poOrderList.stream().filter(e->!e.getCPOID().equals("来源余料") &&
 				!e.getCPOID().equals("其他入库")).collect(Collectors.toList());
@@ -1485,6 +1475,25 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		List<FabricOMOrder> allOmOrderList = new ArrayList<>();
 		allOmOrderList.addAll(omOrderListGn);
 		allOmOrderList.addAll(omOrderListGw);
+		// 保存的转入成本
+		List<FabricCostInvoiceDetail> saveCostInvoiceDetailList = new ArrayList<>();
+		// 保存的修改工厂
+		List<FabricCostInvoice> saveCostInvoiceList = new ArrayList<>();
+		if (editData != null){
+			List<FabricCostInvoice> costInvoiceList = editData.getFabricCostInvoiceList();
+			if (oConvertUtils.listIsNotEmpty(costInvoiceList)) {
+				for (FabricCostInvoice costInvoice : costInvoiceList) {
+					if ("转入成本".equalsIgnoreCase(costInvoice.getCBusType()) && oConvertUtils.listIsNotEmpty(costInvoice.getCostInvoiceDetailList())){
+						saveCostInvoiceDetailList.addAll(costInvoice.getCostInvoiceDetailList());
+					}
+					if ("转出成本".equalsIgnoreCase(costInvoice.getCBusType())){
+						saveCostInvoiceList.add(costInvoice);
+					}
+				}
+			}
+		}
+
+
 		// 合并所有采购入库的物料批次。借用FabricPoOrderIn类
 		List<FabricPoOrderIn> allInList = new ArrayList<>();
 		for (FabricPoOrder item : poOrderListReal){
@@ -1559,55 +1568,50 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		List<FabricCostInvoiceDetail> costInvoiceDetailList = new ArrayList<>();
 
 		for (FabricMoOrderCK itemOut : allOutList){
-			if (itemOut.getIQuantityOut()>0 && itemOut.getIPrice() != null &&
-					DoubleOperation.mul(itemOut.getIQuantityOut(),itemOut.getIPrice(), 2)!=0) {
-				FabricCostInvoice fabricCostInvoice = new FabricCostInvoice();
-				fabricCostInvoice.setCVCName(itemOut.getCVCName());
-				fabricCostInvoice.setCVenAbbName(itemOut.getCPlanCode() + " " + itemOut.getCVenAbbName());
-				fabricCostInvoice.setCBusType("转入成本");
-				fabricCostInvoice.setIMoney(DoubleOperation.mul(itemOut.getIQuantityOut(), itemOut.getIPrice(), 2));
-				costInvoiceList.add(fabricCostInvoice);
-				FabricCostInvoiceDetail costInvoiceDetail = FabricCostInvoiceDetail.get(fabricCostInvoice, itemOut);
-				Optional<FabricCostInvoiceDetail> findOpt = costInvoiceDetailList.stream().filter(e->e.getId().equalsIgnoreCase(costInvoiceDetail.getId())).findFirst();
-				if (findOpt.isPresent()){
+			if (itemOut.getIQuantityOut()>0 &&
+					itemOut.getIQuantityOut()!=0) {
+				FabricCostInvoiceDetail costInvoiceDetail = FabricCostInvoiceDetail.get(itemOut,"转入成本");
+				Optional<FabricCostInvoiceDetail> findOpt = costInvoiceDetailList.stream().filter(e -> e.getId().equalsIgnoreCase(costInvoiceDetail.getId())).findFirst();
+				if (findOpt.isPresent()) {
 					FabricCostInvoiceDetail findItem = findOpt.get();
-					findItem.setIMoney(DoubleOperation.add(findItem.getIMoney(),costInvoiceDetail.getIMoney()));
+					findItem.setIMoney(DoubleOperation.add(findItem.getIMoney(), costInvoiceDetail.getIMoney()));
 					findItem.setIQuantity(DoubleOperation.add(findItem.getIQuantity(), costInvoiceDetail.getIQuantity()));
-				}else{
+				} else {
 					costInvoiceDetailList.add(costInvoiceDetail);
 				}
-
 			}
 		}
-		// 分组
-		List<FabricCostInvoice> costInvoiceListGroup = new ArrayList<>();
-		for (FabricCostInvoice fabricCostInvoice : costInvoiceList){
-			Optional<FabricCostInvoice> findOpt = costInvoiceListGroup.stream().filter(e->
-					e.getId().equalsIgnoreCase(fabricCostInvoice.getId())).findFirst();
+		// 设置保存的单价
+		for (FabricCostInvoiceDetail invoiceDetail : costInvoiceDetailList){
+			if (invoiceDetail.getBManual()){
+				Optional<FabricCostInvoiceDetail> findOpt = saveCostInvoiceDetailList.stream().filter(e->e.getNPId().equalsIgnoreCase(invoiceDetail.getNPId())).findFirst();
+				if (findOpt.isPresent()){
+					FabricCostInvoiceDetail findItem = findOpt.get();
+					invoiceDetail.setIPrice(DoubleOperation.getScale(findItem.getIPrice(),4));
+					invoiceDetail.setIMoney(DoubleOperation.mul(invoiceDetail.getIPrice(), invoiceDetail.getIQuantity(), 2));
+				}
+			}
+		}
+		// 生成父类
+		for (FabricCostInvoiceDetail invoiceDetail : costInvoiceDetailList){
+			Optional<FabricCostInvoice> findOpt = costInvoiceList.stream().filter(e->e.getId().equalsIgnoreCase(invoiceDetail.getParentId())).findFirst();
 			if (findOpt.isPresent()){
-				FabricCostInvoice find = findOpt.get();
-				find.setIMoney(DoubleOperation.getScale(DoubleOperation.add(find.getIMoney(),fabricCostInvoice.getIMoney()),2));
+				FabricCostInvoice findItem = findOpt.get();
+				findItem.setIMoney(DoubleOperation.add(findItem.getIMoney(), invoiceDetail.getIMoney()));
 			}else{
-				costInvoiceListGroup.add(fabricCostInvoice);
-				List<FabricCostInvoiceDetail> findList = costInvoiceDetailList.stream().filter(e->e.getCParentId().equalsIgnoreCase(fabricCostInvoice.getId())).collect(Collectors.toList());
-				fabricCostInvoice.setCostInvoiceDetailList(findList);
+				FabricCostInvoice item = FabricCostInvoice.getByDetail(invoiceDetail);
+				costInvoiceList.add(item);
+				item.setCostInvoiceDetailList(costInvoiceDetailList.stream().filter(e->e.getParentId().equalsIgnoreCase(item.getId())).collect(Collectors.toList()));
+
 			}
 		}
 
-
 		// 转出成本,设置详情
-		costInvoiceList = new ArrayList<>();
 		costInvoiceDetailList = new ArrayList<>();
 		for (FabricPoOrderIn itemIn : allInList){
 			if (itemIn.getIQuantity()>0 &&
 					DoubleOperation.mul(itemIn.getIQuantity(),itemIn.getIPrice(), 2)!=0) {
-				FabricCostInvoice fabricCostInvoice = new FabricCostInvoice();
-				fabricCostInvoice.setCVCName(itemIn.getCInvName());
-				fabricCostInvoice.setCVenAbbName("");
-				fabricCostInvoice.setCBusType("转出成本");
-				fabricCostInvoice.setIMoney(DoubleOperation.getScale(itemIn.getIQuantity() * itemIn.getIPrice() * -1, 2));
-				costInvoiceList.add(fabricCostInvoice);
-				FabricCostInvoiceDetail costInvoiceDetail = FabricCostInvoiceDetail.get(fabricCostInvoice, itemIn);
+				FabricCostInvoiceDetail costInvoiceDetail = FabricCostInvoiceDetail.get(itemIn,"转出成本");
 				Optional<FabricCostInvoiceDetail> findOpt = costInvoiceDetailList.stream().filter(e->e.getId().equalsIgnoreCase(costInvoiceDetail.getId())).findFirst();
 				if (findOpt.isPresent()){
 					FabricCostInvoiceDetail findItem = findOpt.get();
@@ -1618,23 +1622,26 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				}
 			}
 		}
-		// 分组
-
-		for (FabricCostInvoice fabricCostInvoice : costInvoiceList){
-			Optional<FabricCostInvoice> findOpt = costInvoiceListGroup.stream().filter(e->
-					e.getId().equalsIgnoreCase(fabricCostInvoice.getId())).findFirst();
+		// 生成父类
+		for (FabricCostInvoiceDetail invoiceDetail : costInvoiceDetailList){
+			Optional<FabricCostInvoice> findOpt = costInvoiceList.stream().filter(e->e.getId().equalsIgnoreCase(invoiceDetail.getParentId())).findFirst();
 			if (findOpt.isPresent()){
-				FabricCostInvoice find = findOpt.get();
-				find.setIMoney(DoubleOperation.getScale(DoubleOperation.add(find.getIMoney(),fabricCostInvoice.getIMoney()),2));
+				FabricCostInvoice findItem = findOpt.get();
+				findItem.setIMoney(DoubleOperation.sub(findItem.getIMoney(), invoiceDetail.getIMoney()));
 			}else{
-				costInvoiceListGroup.add(fabricCostInvoice);
-				List<FabricCostInvoiceDetail> findList = costInvoiceDetailList.stream().filter(e->e.getCParentId().equalsIgnoreCase(fabricCostInvoice.getId())).collect(Collectors.toList());
-				fabricCostInvoice.setCostInvoiceDetailList(findList);
+				FabricCostInvoice item = FabricCostInvoice.getByDetail(invoiceDetail);
+				item.setIMoney(DoubleOperation.mul(item.getIMoney(),-1.0,2));
+				costInvoiceList.add(item);
+				item.setCostInvoiceDetailList(costInvoiceDetailList.stream().filter(e->e.getParentId().equalsIgnoreCase(item.getId())).collect(Collectors.toList()));
+				// 设置保存的工厂
+				Optional<FabricCostInvoice> findSaveOpt = saveCostInvoiceList.stream().filter(e->e.getCVCName().equalsIgnoreCase(item.getCVCName()) ).findFirst();
+				if (findSaveOpt.isPresent()){
+					item.setCVenAbbName(findSaveOpt.get().getCVenAbbName());
+				}
 			}
 		}
 
-
-		return costInvoiceListGroup;
+		return costInvoiceList;
 
 	}
 }