From 4659bb9a7aa4e66848e1b6ae4bbffc018931422f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=99=93=E8=BF=AA?= <2596750866@qq.com> Date: Fri, 20 Sep 2024 17:30:42 +0800 Subject: [PATCH] =?UTF-8?q?[fix]=20=E7=94=9F=E4=BA=A7=E7=AE=A1=E7=90=86=20?= =?UTF-8?q?=E7=94=9F=E4=BA=A7=E8=AE=A2=E5=8D=95=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=94=9F=E4=BA=A7=E8=AE=A2=E5=8D=95=E8=B7=B3=E8=BD=AC=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E5=A7=94=E5=A4=96=E8=AE=A1=E5=88=92=E3=80=81=E5=A7=94?= =?UTF-8?q?=E5=A4=96=E5=B7=A5=E5=BA=8F=E5=88=97=E8=A1=A8=E6=98=BE=E7=A4=BA?= =?UTF-8?q?controller=E6=8E=A5=E5=8F=A3=EF=BC=9B=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=94=9F=E4=BA=A7=E8=AE=A2=E5=8D=95=E4=BF=9D=E5=AD=98=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=A7=94=E5=A4=96=E8=AE=A1=E5=88=92controller?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=9B=20=E6=96=B0=E5=A2=9E=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E8=AE=A2=E5=8D=95=E4=BF=9D=E5=AD=98=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=A7=94=E5=A4=96=E8=AE=A1=E5=88=92service=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=9B=20=E6=96=B0=E5=A2=9E=E7=94=9F=E4=BA=A7=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=A0=B9=E6=8D=AE=E5=A7=94=E5=A4=96=E8=AE=A1=E5=88=92?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E6=9B=B4=E6=96=B0=E7=94=9F=E4=BA=A7=E8=AE=A2?= =?UTF-8?q?=E5=8D=95bom=E5=A7=94=E5=A4=96=E6=95=B0service=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=9B=20=E6=96=B0=E5=A2=9E=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=A7=94=E5=A4=96=E8=AE=A1=E5=88=92=E9=A1=B5=E9=9D=A2=EF=BC=9B?= =?UTF-8?q?=20=E6=96=B0=E5=A2=9E=E5=A7=94=E5=A4=96=E5=B7=A5=E5=BA=8F?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=98=BE=E7=A4=BA=E9=A1=B5=E9=9D=A2=EF=BC=9B?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=E6=B7=BB=E5=8A=A0=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E8=AE=A1=E5=88=92=E9=A1=B5=E9=9D=A2=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E9=87=87=E8=B4=AD=E7=B1=BB=E5=9E=8B=E7=89=A9?= =?UTF-8?q?=E6=96=99=E6=98=AF=E5=90=A6=E4=B8=BA=E7=A9=BA=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/PurchasePlanServiceImpl.java | 140 +++--- .../controller/SysMakeOrderController.java | 48 +- .../service/impl/SysMakeOrderServiceImpl.java | 81 +++- .../system/makeorder/addOutsourcePlan.html | 414 ++++++++++++++++++ .../system/makeorder/showProcesses.html | 52 +++ 5 files changed, 655 insertions(+), 80 deletions(-) create mode 100644 ruoyi-admin/src/main/resources/templates/system/makeorder/addOutsourcePlan.html create mode 100644 ruoyi-admin/src/main/resources/templates/system/makeorder/showProcesses.html diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchasePlanServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchasePlanServiceImpl.java index 9eee3eed..4e769091 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchasePlanServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchasePlanServiceImpl.java @@ -201,83 +201,83 @@ public class PurchasePlanServiceImpl implements IPurchasePlanService //保存所有加工方式为采购的物料 List filterSysMakeorderBoms = insertedSysMakeorderBoms.stream().filter(bom -> "0".equals(bom.getProcessMethod())).collect(Collectors.toList()); + if(StringUtils.isNotEmpty(filterUniqueBoms)){ + //所有数据的销售订单号相同,只需查一条的销售订单号 + String quoteId = filterSysMakeorderBoms.get(0).getSalesOrderCode(); + + // 第一步:收集所有不同的salesOrderMaterialNo 利用set key值不重复的特性 + Set uniqueSalesOrderMaterialNos = new HashSet<>(); + for (SysMakeorderBom filterSysMakeorderBom : filterSysMakeorderBoms) { + uniqueSalesOrderMaterialNos.add(filterSysMakeorderBom.getSalesOrderMaterialNo()); + } - //所有数据的销售订单号相同,只需查一条的销售订单号 - String quoteId = filterSysMakeorderBoms.get(0).getSalesOrderCode(); - - // 第一步:收集所有不同的salesOrderMaterialNo 利用set key值不重复的特性 - Set uniqueSalesOrderMaterialNos = new HashSet<>(); - for (SysMakeorderBom filterSysMakeorderBom : filterSysMakeorderBoms) { - uniqueSalesOrderMaterialNos.add(filterSysMakeorderBom.getSalesOrderMaterialNo()); - } - - // 第二步:查询每个salesOrderMaterialNo对应的SalesOrder数据 - Map salesOrderChildByMaterialNo = new HashMap<>(); - for (String salesOrderMaterialNo : uniqueSalesOrderMaterialNos) { - SysSalesOrderChild sysSalesOrderChild = new SysSalesOrderChild(); - sysSalesOrderChild.setMaterialCode(salesOrderMaterialNo); - sysSalesOrderChild.setQuoteId(quoteId); - SysSalesOrderChild salesOrderChild = salesOrderChildMapper.selectSalesOrderChildByCodeAndNo(sysSalesOrderChild); - salesOrderChildByMaterialNo.put(salesOrderMaterialNo, salesOrderChild); - } + // 第二步:查询每个salesOrderMaterialNo对应的SalesOrder数据 + Map salesOrderChildByMaterialNo = new HashMap<>(); + for (String salesOrderMaterialNo : uniqueSalesOrderMaterialNos) { + SysSalesOrderChild sysSalesOrderChild = new SysSalesOrderChild(); + sysSalesOrderChild.setMaterialCode(salesOrderMaterialNo); + sysSalesOrderChild.setQuoteId(quoteId); + SysSalesOrderChild salesOrderChild = salesOrderChildMapper.selectSalesOrderChildByCodeAndNo(sysSalesOrderChild); + salesOrderChildByMaterialNo.put(salesOrderMaterialNo, salesOrderChild); + } - double purchasePlanMaterialSum = 0L; - // 第三步:计算purchasePlanNum - for (SysMakeorderBom filterSysMakeorderBom : filterSysMakeorderBoms) { - String salesOrderMaterialNo = filterSysMakeorderBom.getSalesOrderMaterialNo(); - SysSalesOrderChild sysSalesOrderChild = salesOrderChildByMaterialNo.get(salesOrderMaterialNo); - if (sysSalesOrderChild != null) { - //物料数量 - long materialNum = sysSalesOrderChild.getMaterialNum(); - //用量 - Double useNum = filterSysMakeorderBom.getUseNum(); - - //采购计划数 - double purchasePlanNum = materialNum * useNum; - - // 立即创建PurchasePlanChild对象 - PurchasePlanChild purchasePlanChild = new PurchasePlanChild(); - purchasePlanChild.setPurchasePlanCode(purchasePlanCode); - purchasePlanChild.setMaterialCode(filterSysMakeorderBom.getMaterialNo()); - - PurchasePlanChild tempPurchasePlanChild = purchasePlanChildMapper.selectPurchasePlanChildByCodeAndNo(purchasePlanChild); - if (tempPurchasePlanChild != null){ - - purchasePlanChild.setPurchasePlanChildId(tempPurchasePlanChild.getPurchasePlanChildId()); - double addMaterialNum = tempPurchasePlanChild.getMaterialNum() + purchasePlanNum; - //设置计划采购数 - purchasePlanChild.setMaterialNum(addMaterialNum); - purchasePlanChildMapper.updatePurchasePlanChild(purchasePlanChild); - }else { - purchasePlanChild.setMaterialName(filterSysMakeorderBom.getMaterialName()); - purchasePlanChild.setMaterialType(filterSysMakeorderBom.getMaterialType()); - purchasePlanChild.setWarehouseDept(filterSysMakeorderBom.getWarehouseDept()); - purchasePlanChild.setProcessMethod("0"); - purchasePlanChild.setBrand(filterSysMakeorderBom.getBrand()); - purchasePlanChild.setDescribe(filterSysMakeorderBom.getDescribe()); - purchasePlanChild.setUnit(filterSysMakeorderBom.getUnit()); - purchasePlanChild.setWarehouseDept(filterSysMakeorderBom.getWarehouseDept()); - // 物料的计划采购数,使用计算出的purchasePlanNum - purchasePlanChild.setMaterialNum(purchasePlanNum); - purchasePlanChild.setCreateBy(ShiroUtils.getLoginName()); - purchasePlanChild.setCreateTime(new Date()); - purchasePlanChild.setUnit(filterSysMakeorderBom.getUnit()); - - // 直接保存PurchasePlanChild对象 - purchasePlanChildMapper.insertPurchasePlanChild(purchasePlanChild); + double purchasePlanMaterialSum = 0L; + // 第三步:计算purchasePlanNum + for (SysMakeorderBom filterSysMakeorderBom : filterSysMakeorderBoms) { + String salesOrderMaterialNo = filterSysMakeorderBom.getSalesOrderMaterialNo(); + SysSalesOrderChild sysSalesOrderChild = salesOrderChildByMaterialNo.get(salesOrderMaterialNo); + if (sysSalesOrderChild != null) { + //物料数量 + long materialNum = sysSalesOrderChild.getMaterialNum(); + //用量 + Double useNum = filterSysMakeorderBom.getUseNum(); + + //采购计划数 + double purchasePlanNum = materialNum * useNum; + + // 立即创建PurchasePlanChild对象 + PurchasePlanChild purchasePlanChild = new PurchasePlanChild(); + purchasePlanChild.setPurchasePlanCode(purchasePlanCode); + purchasePlanChild.setMaterialCode(filterSysMakeorderBom.getMaterialNo()); + + PurchasePlanChild tempPurchasePlanChild = purchasePlanChildMapper.selectPurchasePlanChildByCodeAndNo(purchasePlanChild); + if (tempPurchasePlanChild != null){ + + purchasePlanChild.setPurchasePlanChildId(tempPurchasePlanChild.getPurchasePlanChildId()); + double addMaterialNum = tempPurchasePlanChild.getMaterialNum() + purchasePlanNum; + //设置计划采购数 + purchasePlanChild.setMaterialNum(addMaterialNum); + purchasePlanChildMapper.updatePurchasePlanChild(purchasePlanChild); + }else { + purchasePlanChild.setMaterialName(filterSysMakeorderBom.getMaterialName()); + purchasePlanChild.setMaterialType(filterSysMakeorderBom.getMaterialType()); + purchasePlanChild.setWarehouseDept(filterSysMakeorderBom.getWarehouseDept()); + purchasePlanChild.setProcessMethod("0"); + purchasePlanChild.setBrand(filterSysMakeorderBom.getBrand()); + purchasePlanChild.setDescribe(filterSysMakeorderBom.getDescribe()); + purchasePlanChild.setUnit(filterSysMakeorderBom.getUnit()); + purchasePlanChild.setWarehouseDept(filterSysMakeorderBom.getWarehouseDept()); + // 物料的计划采购数,使用计算出的purchasePlanNum + purchasePlanChild.setMaterialNum(purchasePlanNum); + purchasePlanChild.setCreateBy(ShiroUtils.getLoginName()); + purchasePlanChild.setCreateTime(new Date()); + purchasePlanChild.setUnit(filterSysMakeorderBom.getUnit()); + + // 直接保存PurchasePlanChild对象 + purchasePlanChildMapper.insertPurchasePlanChild(purchasePlanChild); + } + + // 更新总和 + purchasePlanMaterialSum += purchasePlanNum; } - - // 更新总和 - purchasePlanMaterialSum += purchasePlanNum; } - } - // 创建采购计划主记录 - PurchasePlan purchasePlan = buildPurchasePlan(sysMakeOrder, purchasePlanCode,materialAmount,purchasePlanMaterialSum); - - purchasePlanMapper.insertPurchasePlan(purchasePlan); + // 创建采购计划主记录 + PurchasePlan purchasePlan = buildPurchasePlan(sysMakeOrder, purchasePlanCode,materialAmount,purchasePlanMaterialSum); + purchasePlanMapper.insertPurchasePlan(purchasePlan); + } } /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/controller/SysMakeOrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/SysMakeOrderController.java index 24c1f12d..682e12ee 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/controller/SysMakeOrderController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/SysMakeOrderController.java @@ -18,14 +18,12 @@ import com.ruoyi.erp.domain.ErpInboundOrder; import com.ruoyi.erp.service.IErpMaterialService; import com.ruoyi.financial.domain.FinancialReceivables; import com.ruoyi.financial.domain.FinancialReceivablesRecords; -import com.ruoyi.system.domain.SysMakeOrder; -import com.ruoyi.system.domain.SysMakeorderDept; -import com.ruoyi.system.domain.SysSalesOrder; -import com.ruoyi.system.domain.SysSalesOrderChild; +import com.ruoyi.system.domain.*; import com.ruoyi.system.dto.SysEquipDetailDto; import com.ruoyi.system.dto.SysEquipMaterialDto; import com.ruoyi.system.dto.SysMakeorderDeptDto; import com.ruoyi.system.dto.SysMakeorderMaterialDto; +import com.ruoyi.system.mapper.OutsourceMaterialMapper; import com.ruoyi.system.service.ISysMakeOrderService; import com.ruoyi.system.service.ISysMakeorderDeptService; import com.ruoyi.system.service.ISysSalesOrderChildService; @@ -67,6 +65,8 @@ public class SysMakeOrderController extends BaseController @Autowired private IAfterSalesShippingDeviceService salesShippingDeviceService; + @Autowired + private OutsourceMaterialMapper outsourceMaterialMapper; @GetMapping("/test") public AjaxResult test(){ @@ -160,6 +160,46 @@ public class SysMakeOrderController extends BaseController return prefix + "/addpick"; } + /** + * 跳转创建委外计划页面 + */ + @GetMapping("/addOutsourcePlan/{id}") + public String addOutsourcePlan(@PathVariable("id") Long id, ModelMap mmap) + { + mmap.put("currentUser", ShiroUtils.getSysUser()); + SysMakeOrder sysMakeOrder = sysMakeOrderService.selectSysMakeOrderById(id); + SysSalesOrder sysSalesOrder = salesOrderService.selectSysSalesOrderBySalesOrderCode(sysMakeOrder.getSaleNo()); + if(StringUtils.isNotNull(sysSalesOrder)){ + sysMakeOrder.setOrderType(sysSalesOrder.getSalesOrderType()); + sysMakeOrder.setSalesman(sysSalesOrder.getBusinessMembers()); + sysMakeOrder.setCustomerName(sysSalesOrder.getEnterpriseName()); + sysMakeOrder.setCustomerId(sysSalesOrder.getEnterpriseCode()); + sysMakeOrder.setCustomerOderCode(sysSalesOrder.getSalesOrderNumber()); + } + mmap.put("sysMakeOrder", sysMakeOrder); + return prefix + "/addOutsourcePlan"; + } + /** + * 跳转委外工序显示页面 + */ + @GetMapping("/showProcesses/{materialNo}") + public String showProcesses(@PathVariable("materialNo") String materialNo, ModelMap mmap) + { + List materials = outsourceMaterialMapper.selectProcessNoByNo(materialNo); + mmap.put("materials", materials); + return prefix + "/showProcesses"; + } + /** + * 保存添加委外计划 + */ +// @RequiresPermissions("system:makeorder:edit") +// @Log(title = "生产订单", businessType = BusinessType.UPDATE) + @PostMapping("/addOutsourcePlan") + @ResponseBody + public AjaxResult addOutsourcePlan(@RequestBody OutsourcePlan outsourcePlan) + { + return toAjax(sysMakeOrderService.addOutsourcePlan(outsourcePlan)); + } /** * 跳转创建委内加工入库单 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeOrderServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeOrderServiceImpl.java index 23267f5a..b2b519e6 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeOrderServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeOrderServiceImpl.java @@ -20,15 +20,11 @@ import com.ruoyi.quality.domain.QualityOrderReport; import com.ruoyi.quality.mapper.QualityOrderDetailMapper; import com.ruoyi.quality.mapper.QualityOrderMapper; import com.ruoyi.quality.mapper.QualityOrderReportMapper; -import com.ruoyi.system.domain.SysMakeOrder; -import com.ruoyi.system.domain.SysMakeorderBom; -import com.ruoyi.system.domain.SysSalesOrderChild; -import com.ruoyi.system.domain.SysSalesOrderVo; +import com.ruoyi.system.domain.*; import com.ruoyi.system.dto.SysEquipDetailDto; import com.ruoyi.system.dto.SysEquipMaterialDto; import com.ruoyi.system.dto.SysMakeorderMaterialDto; -import com.ruoyi.system.mapper.SysMakeOrderMapper; -import com.ruoyi.system.mapper.SysSalesOrderChildMapper; +import com.ruoyi.system.mapper.*; import com.ruoyi.system.service.*; import com.ruoyi.warehouse.domain.WarehouseStorageOrder; import com.ruoyi.warehouse.domain.WarehouseStorageOrderDetail; @@ -91,6 +87,17 @@ public class SysMakeOrderServiceImpl implements ISysMakeOrderService @Autowired private QualityOrderReportMapper orderReportMapper; + @Autowired + private OutsourceMaterialMapper outsourceMaterialMapper; + + @Autowired + private OutsourcePlanMapper outsourcePlanMapper; + + @Autowired + private IOutsourcePlanService outsourcePlanService; + + @Autowired + private SysMakeorderBomMapper makeorderBomMapper; /** * 查询生产订单 * @@ -525,4 +532,66 @@ public class SysMakeOrderServiceImpl implements ISysMakeOrderService return qualityOrderReport; } +// 生成委外计划 + @Override + public int addOutsourcePlan(OutsourcePlan outsourcePlan) { + String outsourcePlanCode = redisCache.generateBillNo("WWJH"); + outsourcePlan.setOutsourcePlanCode(outsourcePlanCode); + outsourcePlan.setCreateTime(DateUtils.getNowDate()); + outsourcePlan.setCreateBy(ShiroUtils.getLoginName()); + List planDetails = outsourcePlan.getOutsourcePlanDetailList(); + if(StringUtils.isEmpty(planDetails)){ + throw new BusinessException("委外计划物料集合为空!添加失败"); + } + int materialAmount = 0; + int processAmount = 0; + BigDecimal materialSum = BigDecimal.ZERO; + Set uniqueProcessNos = new HashSet<>(); // 用于存储唯一的 processNo + for (OutsourcePlanDetail detail:planDetails) { + materialAmount ++; + detail.setOutsourcePlanCode(outsourcePlanCode); + List materials = outsourceMaterialMapper.selectProcessNoByNo(detail.getMaterialNo()); + if(StringUtils.isEmpty(materials)){ + throw new BusinessException("委外物料工序数量为空!添加失败"); + } + for (OutsourceMaterial material : materials) { + uniqueProcessNos.add(material.getOutsourceProcessNo()); + } + materialSum = materialSum.add(detail.getPlannedOutsourceAmount()); + detail.setOutsourceProcessType(materials.size()); + detail.setOutsourceProcessAmount(materials.size()); + detail.setCreateBy(ShiroUtils.getLoginName()); + detail.setCreateTime(DateUtils.getNowDate()); + processAmount += detail.getOutsourceProcessAmount(); + } + int batchResult = outsourcePlanMapper.batchOutsourcePlanDetail(planDetails); + if(batchResult <= 0){ + throw new BusinessException("添加委外计划详情失败!"); + } +// 更新生产订单bom的已委外数信息 + changeOrderBomOutNum(planDetails,outsourcePlan.getAssociateOrderNo()); + + outsourcePlan.setMaterialAmount(materialAmount); + outsourcePlan.setTotalAmount(materialSum); + outsourcePlan.setOutsourceProcessType(uniqueProcessNos.size()); + outsourcePlan.setOutsourceProcessAmount(processAmount); + outsourcePlan.setStatus("0"); + outsourcePlan.setSource("1"); + int insertResult = outsourcePlanMapper.insertOutsourcePlan(outsourcePlan); + return insertResult; + } +// 根据委外计划详情更新生产订单bom委外数 + private int changeOrderBomOutNum(List planDetails, String makeNo){ + int updateResult = 0; + for (OutsourcePlanDetail detail: planDetails) { + SysMakeorderBom tempBom = new SysMakeorderBom(); + tempBom.setMakeNo(makeNo); + tempBom.setMaterialNo(detail.getMaterialNo()); + SysMakeorderBom makeorderBom = makeorderBomMapper.selectSysMakeorderBomByNo(tempBom); + makeorderBom.setHasOutNum(detail.getPlannedOutsourceAmount().intValue()); + updateResult += makeorderBomMapper.updateSysMakeorderBom(makeorderBom); + } + return updateResult; + } + } diff --git a/ruoyi-admin/src/main/resources/templates/system/makeorder/addOutsourcePlan.html b/ruoyi-admin/src/main/resources/templates/system/makeorder/addOutsourcePlan.html new file mode 100644 index 00000000..5d9cf8b2 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/system/makeorder/addOutsourcePlan.html @@ -0,0 +1,414 @@ + + + + + + + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+
+
+
+
+ +
+
+ + + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/system/makeorder/showProcesses.html b/ruoyi-admin/src/main/resources/templates/system/makeorder/showProcesses.html new file mode 100644 index 00000000..a4268440 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/system/makeorder/showProcesses.html @@ -0,0 +1,52 @@ + + + + + + +
+
+
+
+
+
+
+ + + + + \ No newline at end of file