diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseOrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseOrderController.java index 919a4e0b..328ba45d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseOrderController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseOrderController.java @@ -178,10 +178,8 @@ public class PurchaseOrderController extends BaseController purchaseOrder.setAuditStatus("0"); purchaseOrder.setUseStatus("0"); purchaseOrder.setDelFlag("0"); - purchaseOrderService.submitApply(purchaseOrder); // purchaseOrderService.insertPurchaseOrder(purchaseOrder); - // purchaseOrderService.addPurchaseOrderPayable(purchaseOrder); // 数据校验,确保前端传入数据格式正确 // 执行主表插入操作 @@ -205,17 +203,47 @@ public class PurchaseOrderController extends BaseController supplierCodes.add(purchaseOrderChild.getSupplierCode()); purchasePlanCodes.add(purchaseOrderChild.getPurchasePlanCode()); } + purchaseOrder.setPurchaseOrderChildList(purchaseOrderChildList); mmap.put("supplierCodes", supplierCodes); mmap.put("purchasePlanCodes", purchasePlanCodes); mmap.put("purchaseOrder", purchaseOrder); return prefix + "/edit"; } - @GetMapping("/detail/{purchaseOrderChildId}") - public String detail(@PathVariable("purchaseOrderChildId") Long purchaseOrderChildId, ModelMap mmap) + + @GetMapping("/editPurchaserOrder/{purchaseOrderId}") + @ResponseBody + public AjaxResult editPurchaser(@PathVariable("purchaseOrderId") Long purchaseOrderId, ModelMap mmap) + { + PurchaseOrder purchaseOrder = purchaseOrderService.selectPurchaseOrderById(purchaseOrderId); + //获取子表信息 + List purchaseOrderChildList = purchaseOrderChildService.selectPurchaseOrderChildByOrderCode(purchaseOrder.getPurchaseOrderCode()); + //Set子表供应商的信息 供应商编号-供应商名称 + //Set子表采购计划单信息 + Set supplierCodes = new HashSet<>(); + Set purchasePlanCodes = new HashSet<>(); + for(PurchaseOrderChild purchaseOrderChild : purchaseOrderChildList){ + //获取区分的供应商物料信息 + if(!purchasePlanCodes.contains(purchaseOrderChild.getPurchasePlanCode())){ + purchasePlanCodes.add(purchaseOrderChild.getPurchasePlanCode()); + } + //获取区分的采购计划单信息 + if(!supplierCodes.contains(purchaseOrderChild.getSupplierCode())){ + supplierCodes.add(purchaseOrderChild.getSupplierCode()); + } + supplierCodes.add(purchaseOrderChild.getSupplierCode()); + } + mmap.put("supplierCodes", supplierCodes); + mmap.put("purchasePlanCodes", purchasePlanCodes); + mmap.put("purchaseOrder", purchaseOrder); + mmap.put("purchasePlanChildList",purchaseOrderChildList); + return AjaxResult.success(mmap); + } + @GetMapping("/detail/{purchaseOrderId}") + public String detail(@PathVariable("purchaseOrderId") Long purchaseOrderChildId, ModelMap mmap) { - PurchaseOrderChild purchaseOrderChild = purchaseOrderChildService.selectPurchaseOrderChildById(purchaseOrderChildId); - mmap.put("purchaseOrderChild", purchaseOrderChild); + PurchaseOrder purchaseOrder = purchaseOrderService.selectPurchaseOrderById(purchaseOrderChildId); + mmap.put("purchaseOrder", purchaseOrder); return prefix + "/detail"; } @@ -315,9 +343,8 @@ public class PurchaseOrderController extends BaseController if("submit".equals(instanceType)){ // 使用状态-是 purchaseOrderVo.setUseStatus("1"); -// if(purchaseOrderVo.getPurchaseOrderChildList().addAll(purchaseOrderVo.getPurchaseOrderChildList())){ -// purchaseOrderService.addPurchaseOrderPayable(purchaseOrderVo); -// } + purchaseOrderService.addPurchaseOrderPayable(purchaseOrderVo); + } // 作废 else if("cancel".equals(instanceType)){ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchasePlanController.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchasePlanController.java index 7c4589b5..4556a6ad 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchasePlanController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchasePlanController.java @@ -116,10 +116,10 @@ public class PurchasePlanController extends BaseController @GetMapping("/addPurchaseOrder/{purchasePlanCodes}") public String addPurchaseOrder(@PathVariable("purchasePlanCodes") String purchasePlanCodes,ModelMap mmap){ //purchasePlanCodes去除重复数据,purchasePlanCodeArray作为数组类型去除 - + Set uniquePurchasePlanCode = Arrays.stream(purchasePlanCodes.split(",")).collect(Collectors.toSet()); // 直接使用String的split方法分割字符串,然后转为Stream去重,最后再拼接回字符串 - String[] purchasePlanCodeArray = purchasePlanCodes.split(","); - String uniquePurchasePlanCodes = String.join(",", Arrays.stream(purchasePlanCodeArray).distinct().toArray(String[]::new)); + String uniquePurchasePlanCodes = String.join(",", uniquePurchasePlanCode); + //去除重复的计划单号 //查询相关采购计划数据 List purchasePlanList = purchasePlanService.selectPurchasePlanByPlanCode(uniquePurchasePlanCodes); //根据采购计划编号查询对应的采购报价数据 @@ -134,7 +134,7 @@ public class PurchasePlanController extends BaseController //用stream流处理相同供应商\物料\ //将供应商信息解析成List mmap.put("purchasePlanList", purchasePlanList); - mmap.put("purchasePlanCodes", purchasePlanCodeArray); + mmap.put("purchasePlanCodes", uniquePurchasePlanCodes); mmap.put("purchasePlanChildList", purchasePlanChildList); return prefix + "/addPurchaseOrder"; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchasePlanMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchasePlanMapper.java index 5f4e95e2..8796134b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchasePlanMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchasePlanMapper.java @@ -76,5 +76,7 @@ public interface PurchasePlanMapper */ public int restorePurchasePlanById(Long purchasePlanId); - public List selectPurchasePlanByPlanCode(String[] planCode); + public PurchasePlan selectPurchasePlanByPlanCode(String purchasePlanCode); + + public List selectPurchasePlanByPlanCodes(String[] planCode); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseOrderServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseOrderServiceImpl.java index 2e7e5e68..65259701 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseOrderServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseOrderServiceImpl.java @@ -222,9 +222,6 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService @Transactional(rollbackFor = Exception.class) public int insertPurchaseOrder(PurchaseOrder purchaseOrder) { - //根据上传的物料信息做采购订单子项 - purchaseOrder.setCreateTime(DateUtils.getNowDate()); - purchaseOrder.setCreateBy(ShiroUtils.getLoginName()); // 生成采购订单编号 purchaseOrder.setPurchaseOrderCode(redisCache.generateBillNo("CG")); // 初始化累加变量 @@ -234,18 +231,22 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService BigDecimal materialRmbSum = BigDecimal.ZERO; Long materialNum = 0L; int supplierNum = 0; + //根据上传的物料信息做采购订单子项 if (!CollectionUtils.isEmpty(purchaseOrder.getPurchaseOrderChildList())) { supplierNum = purchaseOrder.getPurchaseOrderChildList().size(); } if (purchaseOrder.getPurchaseOrderChildList() != null) { - for (PurchaseOrderChild child : purchaseOrder.getPurchaseOrderChildList()) { + List purchaseOrderChildList = purchaseOrder.getPurchaseOrderChildList(); + //订单子表去除实际物料数量位null或者0的物料信息 + purchaseOrderChildList = purchaseOrderChildList.stream().filter(child -> child.getMaterialNoRmb() != null && child.getMaterialNoRmb().compareTo(BigDecimal.ZERO) != 0).collect(Collectors.toList()); + for (PurchaseOrderChild child : purchaseOrderChildList) { if (child.getCorrelationCode().contains(",")) { String[] correlationCodes = child.getCorrelationCode().split(","); String[] planCodes = child.getPurchasePlanCode().split(","); String[] purchaseQuoteCodes = child.getPurchaseQuoteCode().split(","); for (int i = 0; i < planCodes.length - 1; i++) { String planCode = planCodes[i]; - String correlationCode = correlationCodes[i]; + PurchasePlan purchasePlan = purchasePlanService.selectPurchasePlanByPlanCode(planCode); if (planCode != null) { PurchaseOrderChild material = new PurchaseOrderChild(); child.setPurchaseOrderCode(purchaseOrder.getPurchaseOrderCode()); @@ -254,7 +255,7 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService // 获取物料供应商含税采购价格 BigDecimal suplierMaterialRmb = child.getMaterialRealRmb(); // 获取物料数量 - Long suplierMaterialNum = child.getMaterialNum(); + Long suplierMaterialNum = child.getMaterialRealNum(); if(suplierMaterialNoRmb == null){suplierMaterialNoRmb = BigDecimal.ZERO;} if(suplierMaterialRmb == null){suplierMaterialRmb = BigDecimal.ZERO;} if(suplierMaterialNum == null){suplierMaterialNum = 0L;} @@ -270,6 +271,7 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService materialRmbSum = materialRmbSum.add(suplierMaterialRmbSumLocal); // 设置采购报价单编号和供应商信息到QuoteChild material.setPurchaseOrderCode(purchaseOrder.getPurchaseOrderCode()); + material.setPurchasePlanCorrelationCode(purchasePlan.getCorrelationCode()); material.setSupplierCode(child.getSupplierCode()); material.setMaterialUnit(child.getMaterialUnit()); material.setWarehouseDept(child.getWarehouseDept()); @@ -311,6 +313,7 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService } else if ((!child.getCorrelationCode().contains(",")) && child.getPurchasePlanCode() != null) { + PurchasePlan purchasePlan = purchasePlanService.selectPurchasePlanByPlanCode(child.getPurchasePlanCode()); PurchaseOrderChild material = new PurchaseOrderChild(); child.setPurchaseOrderCode(purchaseOrder.getPurchaseOrderCode()); //获取物料供应商不含税采购价格 @@ -318,7 +321,7 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService // 获取物料供应商含税采购价格 BigDecimal suplierMaterialRmb = child.getMaterialRealRmb(); // 获取物料数量 - Long suplierMaterialNum = child.getMaterialNum(); + Long suplierMaterialNum = child.getMaterialRealNum(); if(suplierMaterialNoRmb == null){suplierMaterialNoRmb = BigDecimal.ZERO;} if(suplierMaterialRmb == null){suplierMaterialRmb = BigDecimal.ZERO;} if(suplierMaterialNum == null){suplierMaterialNum = 0L;} @@ -334,6 +337,8 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService materialRmbSum = materialRmbSum.add(suplierMaterialRmbSumLocal); // 设置采购报价单编号和供应商信息到QuoteChild material.setPurchaseOrderCode(purchaseOrder.getPurchaseOrderCode()); + material.setCorrelationCode(purchasePlan.getCorrelationCode()); + material.setPurchasePlanCorrelationCode(purchasePlan.getCorrelationCode()); material.setSupplierCode(child.getSupplierCode()); material.setMaterialUnit(child.getMaterialUnit()); material.setWarehouseDept(child.getWarehouseDept()); @@ -380,7 +385,7 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService // purchaseOrder.setNoRmbSum(purchaseOrder.getNoRmbSum()); // purchaseOrder.setRmbSum(purchaseOrder.getRmbSum()); // 设置主表的供应商数量 - purchaseOrder.setSupplierNum(purchaseOrder.getSupplierNum()); + purchaseOrder.setSupplierNum(supplierNum); purchaseOrder.setNoRmbSum(materialNoRmbSum); purchaseOrder.setRmbSum(materialRmbSum); purchaseOrder.setDelFlag("0"); @@ -470,7 +475,7 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService List warehouseStorageOrderList = warehouseStorageOrderMapper.selectWarehouseStorageOrderList(warehouseStorageOrder1); List list = warehouseStorageOrder.getWarehouseStorageOrderDetailList(); //子表中通知到货数位过滤掉物料数位空 - list = list.stream().filter(e -> (e.getNotifyArriveNum() != null)).collect(Collectors.toList()); + list = list.stream().filter(e -> (e.getNotifyArriveNum() != null && e.getNotifyArriveNum() != 0)).collect(Collectors.toList()); int result = 0; if(!CollectionUtils.isEmpty(list)) { //根据物料入库部门划分入库单,入库单类型:0 仓库,1 采购,生成入库单号 @@ -547,7 +552,7 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService public Integer addPurchaseOrderPayable(PurchaseOrder purchaseOrder){ //根据供应商划分物料信息,合计物料不含税单价 ,含税单价,含税总价,不含税总价,实际采购数量 // 获取采购订单的子项列表 - List children = purchaseOrder.getPurchaseOrderChildList(); + List children = purchaseOrderChildService.selectPurchaseOrderChildByOrderCode(purchaseOrder.getPurchaseOrderCode()); // 分组供应商的子订单,分组统计各供应商应付单供应商 List supplierGroup = (List) children.stream() // 分组依据为supplierCode @@ -840,14 +845,10 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService variables.put("authority",1); }else if(roleKeys.contains("cgjlRole")){ variables.put("authority",2); - }else if(roleKeys.contains("cgzgRole")){ + }else if(roleKeys.contains("cgzgRole")|| roleKeys.contains("admin")){ variables.put("authority",3); }else if(roleKeys.contains("fzjlRole")){ variables.put("authority",4); } } - - - - } 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 e5ac1252..7d474325 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 @@ -167,7 +167,7 @@ public class PurchasePlanServiceImpl implements IPurchasePlanService @Override public List selectPurchasePlanByPlanCode(String purchasePlanCodes) { - return purchasePlanMapper.selectPurchasePlanByPlanCode(Convert.toStrArray(purchasePlanCodes)); + return purchasePlanMapper.selectPurchasePlanByPlanCodes(Convert.toStrArray(purchasePlanCodes)); } diff --git a/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseOrderMapper.xml b/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseOrderMapper.xml index c4414271..9980e545 100644 --- a/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseOrderMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseOrderMapper.xml @@ -180,8 +180,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{customerFax}, #{deliveryAddress}, #{paymentTerms}, - #{deliveryMethod}, #{deliveryConditions}, + #{deliveryMethod}, #{purchaseName}, #{billingDate}, #{taxRate}, diff --git a/ruoyi-admin/src/main/resources/mapper/purchase/PurchasePlanMapper.xml b/ruoyi-admin/src/main/resources/mapper/purchase/PurchasePlanMapper.xml index 29472848..337437a4 100644 --- a/ruoyi-admin/src/main/resources/mapper/purchase/PurchasePlanMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/purchase/PurchasePlanMapper.xml @@ -47,14 +47,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where purchase_plan_id = #{purchasePlanId} - where purchase_plan_code in #{purchasePlanCode} - + insert into purchase_plan diff --git a/ruoyi-admin/src/main/resources/templates/erp/material/select.html b/ruoyi-admin/src/main/resources/templates/erp/material/select.html index 618abfa3..97cb8c85 100644 --- a/ruoyi-admin/src/main/resources/templates/erp/material/select.html +++ b/ruoyi-admin/src/main/resources/templates/erp/material/select.html @@ -54,6 +54,7 @@ singleSelect: false, // 单选 url: prefix + "/selectList", modalName: "物料信息", + rememberSelected: true, columns: [ {checkbox: true}, {title: '主键ID',field: 'id',visible: false}, @@ -76,10 +77,40 @@ return $.table.selectDictLabel(processMethodDatas, value); } } - ] + ], + onPageChange: function (number, size) { + // 当改变页码时,触发此函数 + saveSelections(); + } }; $.table.init(options); + $('#bootstrap-select-table').on('load-success.bootstrap.table', function () { + var savedSelections = JSON.parse(localStorage.getItem('selectedRows')) || []; + savedSelections.forEach(function (row) { + var rowIndex = $('#bootstrap-select-table').bootstrapTable('getRowIndex', row.id); + if (rowIndex !== undefined) { + $('#bootstrap-select-table').bootstrapTable('selectRow', rowIndex); + } + }); + }); }); + function saveSelections() { + var selections = $('#bootstrap-select-table').bootstrapTable('getSelections'); + var selectedIds = []; + for (var i = 0; i < selections.length; i++) { + selectedIds.push(selections[i].id); // 假设每行有一个唯一的 id 字段 + } + restoreSelections(selectedIds); + } + + function restoreSelections(selectedIds) { + $('#bootstrap-select-table').on('load-success.bootstrap.table', function () { + $('#bootstrap-select-table').bootstrapTable('uncheckAll'); // 首先取消所有选择 + $.each(selectedIds, function (index, id) { + $('#bootstrap-select-table').bootstrapTable('selectRow', id); + }); + }); + } \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/detail.html b/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/detail.html index 87b289e3..f9afb5a9 100644 --- a/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/detail.html +++ b/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/detail.html @@ -1,506 +1,424 @@ - + + - - - - + -
-
- -
- -
- -
+
+ +
+ +
+
-
- -
- - +
+
+ + +
+
+
+ +
-
-
- -
-
- +
+
+
- +
+ +
+

公司地址:

+
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+
-
-
-

-

选择采购信息

-  选择材料 -  删除材料 -
-
+
+

订单合计:

+
+ +
+
- - - - - - + }); + } + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/edit.html b/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/edit.html index db333fe3..34d8af0c 100644 --- a/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/edit.html +++ b/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/edit.html @@ -1,770 +1,378 @@ - - - - - - + + + + -
-
- -
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- +
+
+
+ +
+ +
-
-
-

-

选择采购信息

-  选择材料 -  删除材料 -
-
-
-
- +
- - - - - - + }); + } + + $("input[name='deliveryTime']").datepicker({ + language: 'zh-CN', + todayHighlight: true, + format: "yyyy-mm-dd", + autoClose: true, + }); + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/purchaseOrder.html b/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/purchaseOrder.html index fdca8001..ccda143e 100644 --- a/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/purchaseOrder.html +++ b/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/purchaseOrder.html @@ -222,13 +222,13 @@ if(row.auditStatus=="1" && row.useStatus=="1" && !row.cancelInstanceId) { // 作废 actions.push(' 作废'); - // 编辑 - actions.push(' 编辑 '); // 入库通知 actions.push('入库通知 '); - }else{ - actions.push(' 编辑 '); + }else if(row.auditStatus=="2" && row.cancelInstanceId){ + // 编辑 + actions.push(' 编辑 '); } + //else{actions.push(' 编辑 ');} // 有流程实例id if(row.useStatus=="2" && !row.restoreInstanceId){ // 恢复 @@ -249,7 +249,8 @@ // 进度查看 actions.push(' 进度查看 '); } - + actions.push('详情 '); return actions.join(''); } diff --git a/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/taskCgjlVerify.html b/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/taskCgjlVerify.html index add5eb12..4fac5f43 100644 --- a/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/taskCgjlVerify.html +++ b/ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/taskCgjlVerify.html @@ -6,28 +6,27 @@
-
+ - -
+ -
+ -
+ -
+ +
+ +
+ +
+
+
+ +
+
+
+ +
+
+
+
+ +
+
+
+
@@ -59,25 +82,596 @@
+
+

公司地址:

+
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+
+

订单合计:

+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
\ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/addPurchaseOrder.html b/ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/addPurchaseOrder.html index 41c3bae3..9d39656d 100644 --- a/ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/addPurchaseOrder.html +++ b/ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/addPurchaseOrder.html @@ -5,6 +5,13 @@ +
@@ -12,7 +19,7 @@
- +
@@ -57,25 +64,25 @@
- +
- +
- +
- +
@@ -120,11 +127,12 @@ // 将整个物料信息容器添加到页面 $('#material').append($tableWrapper); // 添加关联销售订单号信息 + // 创建表格的容器 var $headerDiv = $('
' + '
' + '

' + - '物料 ' + index + ': ' + '关联订单号: ' + '' + material.correlationCodes + '' + + '物料 ' + (index + 1) + ': ' + '关联订单号: ' + '' + material.correlationCodes + '' + '

' + '
' + '' + '
' + @@ -132,6 +140,13 @@ '' + ''); $tableWrapper.append($headerDiv); + //创建物料库存容器 + var $stockWrapper = $('
' + + '
'+ + '可用库存数:'+'10 '+'注:含其他订单待领取的库存,仅供参考,请以实际为准.'+ + '
' + + '
'); + $tableWrapper.append($stockWrapper); var materialObj = { purchasePlanCode: material.purchasePlanCode, materialCode: material.materialCode, @@ -148,8 +163,8 @@ var materialData = [materialObj]; // Bootstrap Table需要一个数组作为数据源 materialList.push(material); tables(materialTable, materialData); - var $supplierInfo = $('
'); - // 创建表格的容器 + var $supplierInfo = $('
'); + //如果物料下的供应商为空,则不需要添加供应商信息,并在容器中添加一个提示信息:暂无供应商信息,请先添加供应商信息。 const uniqueSuppliers = []; if (material.purchaseSupplierList.length <= 0) { @@ -161,9 +176,6 @@ const key = `${supplier.supplierCode}_${supplier.materialCode}`; if (!uniqueSuppliers.map(s => `${s.supplierCode}_${s.materialCode}`).includes(key)) { uniqueSuppliers.push(supplier); - }else{ - var $noSupplierDiv = $('
暂无供应商信息,请先添加供应商信息。
'); - $supplierInfo.append($noSupplierDiv); } }); // 循环处理每个供应商的信息 @@ -172,10 +184,10 @@ // 卡片样式容器,用于包裹每个供应商的信息 // 构建供应商信息头部 var $headerContent = - $('
' + + $('
' + '
' + '
'+ - '

供应商 ' + supplierIndex + ':' + '

' + + '

供应商 ' + (supplierIndex + 1) + ':' + '

' + '' + supplier.supplierCode + '' + '-' + '' + supplier.supplierName + '' + '-最新不含税采购价: ' +'' + supplier.materialNoRmb +''+ @@ -186,15 +198,15 @@ '
' + '
' + '
' + - '
' + - '' + - '
' + - '' + + '
' + + '' + + '
' + + '' + '
' + '
' + - '
' + - '' + - '
' + + '
' + + '' + + '
' + '
' + '' + '' + @@ -220,73 +232,113 @@ tableSetup($supplierInfo, tableId); }); // 给实际采购数的输入框绑定事件处理器 - $('.supplierMaterialNum').off('keyup').on('keyup', function(event,element) { - //实际采购数不能超过计划采购数 - var tableId = $(element).closest('.table-materialCode').attr('id'); + $('.actualPurchaseNum').off('keyup').on('keyup', function(event) { if (event.keyCode === 13) { - // 获取当前供应商的采购数量 - var purchaseNum = parseFloat($(event).val()) || 0; - if (purchaseNum > parseFloat($(event).closest('.supplier-card').find('.supplierMaterialNum').text().trim())) { - $(event).val($(event).closest('.supplier-card').find('.supplierMaterialNum').text().trim()); - purchaseNum = parseFloat($(event).val()) || 0; + var $supplierInfo = $(this).closest('.supplier-card'); + var $supplierCard = $(this).closest('.supplier_card'); + var crad = $supplierInfo.attr('id'); + var tableId = crad.split('_')[1]; + var purchaseNum = parseFloat($(this).val()) || 0; + var noRmbPrice = parseFloat($(this).find('.supplierMaterialNoRmb').text().trim()) || 0; + var rmbPrice = parseFloat($(this).find('.supplierMaterialRmb').text().trim()) || 0; + var materialIndex = tableId.split('-')[1]; + // 确保实际采购数不超过计划采购数 + var maxPurchaseNum = parseFloat(materialList[materialIndex].materialNum); + // if (purchaseNum > maxPurchaseNum) { + // purchaseNum = maxPurchaseNum; + // $(this).val(maxPurchaseNum); + // } + //物料所有的供应商的采购数加起来超出了materialList[materialIndex].materialNum,就提示超出计划采购数 + let actualPurchaseNum = 0; + $supplierCard.find('.actualPurchaseNum').each(function () { + actualPurchaseNum += parseInt($(this).val()) || 0; + }); + if (actualPurchaseNum > maxPurchaseNum) { + actualPurchaseNum - maxPurchaseNum; } - // 获取当前供应商的采购价格 - var noRmbPrice = parseFloat($(event).closest('.supplier-card').find('.supplierMaterialNoRmb').text().trim()); - var rmbPrice = parseFloat($(event).closest('.supplier-card').find('.supplierMaterialRmb').text().trim()); // 更新供应商采购总价 - $(event).closest('.supplier-card').find('.supplierPurchaseTotal').text(purchaseNum * noRmbPrice); + $supplierInfo.find('.supplierPurchaseTotal').val(parseFloat(Number(purchaseNum * noRmbPrice).toFixed(2))); if (rmbPrice) { - $(event).closest('.supplier-card').find('.supplierPurchaseTotalRmb').text(purchaseNum * rmbPrice); + $supplierInfo.find('.supplierPurchaseTotalRmb').val(parseFloat(Number(purchaseNum * rmbPrice).toFixed(2))); } + + + // 如果采购数量大于0,则显示供应商采购总价 if (purchaseNum > 0) { - // 如果采购数量大于0,则显示供应商采购总价 - $(event).closest('.supplier-card').find('.supplierPurchaseTotal').removeClass('hidden'); - $(event).closest('.supplier-card').find('.supplierPurchaseTotalRmb').removeClass('hidden'); + $supplierInfo.find('.supplierPurchaseTotal').removeClass('hidden'); + $supplierInfo.find('.supplierPurchaseTotalRmb').removeClass('hidden'); } else { // 否则隐藏供应商采购总价 - $(event).closest('.supplier-card').find('.supplierPurchaseTotal').addClass('hidden'); - $(event).closest('.supplier-card').find('.supplierPurchaseTotalRmb').addClass('hidden');} + $supplierInfo.find('.supplierPurchaseTotal').addClass('hidden'); + $supplierInfo.find('.supplierPurchaseTotalRmb').addClass('hidden'); + } + + recalculateTotals(tableId); // 重新计算当前物料的合计 } - recalculateTotals(tableId); // 重新计算当前物料的合计 + }); + // 定义一个函数来重新计算当前物料的合计 + // 初始化总计 + purchasePlanChildList.forEach(function (material, index) { + recalculateTotals('materialCode-' + index); }); }); // 新增函数:重新计算某物料的采购数量合计、不含税采购总价和含税采购总价 function recalculateTotals(tableId) { - var actualPurchaseTotal = 0; - var materialNoRmbTotal = 0; - var materialRmbTotal = 0; - var totalMaterialSum = 0; - var totalPurchaseSum = 0; - var totalRmbSum = 0; - var totalNoRmbSum = 0; - tableIdList.forEach(function(tableId) { - $('#' + 'supplier-' + tableId).find('.supplier-card').each(function (supplierIndex, supplierCard) { - var purchaseNum = parseFloat($(supplierCard).find('.supplierMaterialNum').val()) || 0; - var noRmbPrice = parseFloat($(supplierCard).find('.supplierMaterialNoRmb').text().trim()); - var rmbPrice = parseFloat($(supplierCard).find('.supplierMaterialRmb').text().trim()); - //物料的供应商合计 - totalMaterialSum += purchaseNum; - if (rmbPrice) { - totalPurchaseSum += purchaseNum * rmbPrice; - } - if (noRmbPrice) { - totalNoRmbSum += purchaseNum * noRmbPrice; - } - if (noRmbPrice) { - totalNoRmbSum += purchaseNum * noRmbPrice; + var $tableWrapper = $('#material-' + tableId); + var totalNoRmb = 0; + var totalRmb = 0; + var totalActualPurchase = 0; + var $suplierInfo = $tableWrapper.find('.supplier-card'); + //获取所有物料表中供应商列表数据,实际采购数合计,不含税总价,含税采购总价 + $suplierInfo.find('.supplier_card').each(function() { + let purchaseNum = parseFloat($(this).find('.actualPurchaseNum').val()) || 0; + let noRmbPrice = parseFloat($(this).find('.supplierMaterialNoRmb').text().trim()) || 0; + let rmbPrice = parseFloat($(this).find('.supplierMaterialRmb').text().trim()) || 0; + totalNoRmb += purchaseNum * noRmbPrice; + totalRmb += purchaseNum * rmbPrice; + totalActualPurchase = totalActualPurchase + purchaseNum; + }); + //物料的实际采购数合计 + $('#materialAmountSum_' + tableId).val(totalActualPurchase); + //物料的实际不含税采购总价: + $('#materialNoRmbSum_' + tableId).val(parseFloat(totalNoRmb)); + //物料的实际含税总价: + $('#materialRmbSum_' + tableId).val(parseFloat(totalRmb)); + // 采购物料合计 + materialActualPurchaseSum(); + } + function materialActualPurchaseSum(){ + var totalNoRmb = 0; + var totalRmb = 0; + var totalActualPurchase = 0; + var materialAmount = 0; + tableIdList.forEach(function (material, index) { + var tableId = tableIdList[index]; + var $tableWrapper = $('#material-' + tableId); + //采购合计 = 所有物料的采购数量合计 + //采购不含税总价 = 所有物料的不含税总价合计 + //采购含税总价 = 所有物料的含税总价合计 + //查询物料表下吗整合的物料的实际采购数合计,物料的实际不含税采购总价,物料的实际含税总价 + var supplierInfo = $tableWrapper.find('#supplierInfo_' + tableId ); + let purchaseNum = parseInt(supplierInfo.find('.actualPurchaseTotalSum').val().trim()) || 0; + let noRmbPrice = parseFloat(supplierInfo.find('.actualPurchaseTotal').val().trim()) || 0; + let rmbPrice = parseFloat(supplierInfo.find('.actualPurchaseTotalTax').val().trim()) || 0; + if (purchaseNum > 0) { + materialAmount += 1; } - $('#purchaseMaterialSum').val(isNaN(totalMaterialSum) ? '' : totalMaterialSum.toFixed(2)); - $('#purchaseSum').val(isNaN(totalPurchaseSum) ? '' : totalPurchaseSum.toFixed(2)); - $('#purchaseNoRmbSum').val(isNaN(totalNoRmbSum) ? '' : totalNoRmbSum.toFixed(2)); - }) - }) - // 设置合计值,确保处理NaN - $('#purchaseMaterialSum').val(isNaN(totalMaterialSum) ? '' : totalMaterialSum.toFixed(2)); - $('#purchaseSum').val(isNaN(totalPurchaseSum) ? '' : totalPurchaseSum.toFixed(2)); - $('#purchaseNoRmbSum').val(isNaN(totalNoRmbSum) ? '' : totalNoRmbSum.toFixed(2)); - $('#purchaseRmbSum').val(isNaN(totalRmbSum) ? '' : totalRmbSum.toFixed(2)); + totalActualPurchase += purchaseNum; + totalNoRmb += noRmbPrice; + totalRmb += rmbPrice; + }); + //物料合计 = 物料实际采购数合计,不含税总价,含税采购总价不为null的情况可以合计物料,否则跳过 + $("#purchaseMaterialSum").val(materialAmount); + //采购数量合计 + $('#purchaseSum').val(totalActualPurchase); + //采购不含税总价 + $('#purchaseNoRmbSum').val(totalNoRmb); + //采购含税总价 + $('#purchaseRmbSum').val(totalRmb); } - function tableSetup(element, tableId) { var $totalSection = $( '
' + @@ -294,19 +346,19 @@ '
' + '' + '
' + - '' + + '' + '
' + '
' + '
' + '' + '
' + - '' + + '' + '
' + '
' + '' + '
' + - '' + + '' + '
' + '
' + '
'+ @@ -322,7 +374,7 @@ showColumns: false, showToggle: false, data: data, - height: 10, + height: 70, columns: [ {checkbox: false}, {title: '料号', field: 'materialCode'}, @@ -352,6 +404,7 @@ function submitHandler() { if ($.validate.form()) { var materialSum = 0; + var materialRealSum = 0; var materialNoRmbSum = 0; var materialRmbSum = 0; //添加去除供应商编号数组 @@ -369,28 +422,28 @@ $('.table-materialCode').each(function(index, tableElement) { var tableId = tableIdList[index]; let materialObj = materialList[index]; + var $tableWrapper = $('#material-' + tableId); if (typeof materialObj === 'undefined') return; - $('#' + 'material-' + tableId).find('.suppplier_card').each(function(supplierIndex, supplierCard) { - var supplierCode = $(supplierCard).find('.supplierCode').text().trim(); - var supplierName = $(supplierCard).find('.supplierName').text().trim(); - var materialRealNum = parseInt($(supplierCard).find('.supplierMaterialNum' ).val(), 10) || 0; - var materialRealRmb = parseFloat($(supplierCard).find('.supplierMaterialRmb').text(), 10) || 0; - var materialRealNoRmb = parseFloat($(supplierCard).find('.supplierMaterialNoRmb').text(), 10) || 0; - var deliveryTime = $(supplierCard).find('.supplierDeliveryTime' ).val(); - var purchasePlanCode = $(supplierCard).find('.supplierPurchasePlanCode').text().trim(); - var correlationCode = $(supplierCard).find('.supplierCorrelationCode' ).text().trim(); - var purchaseQuoteCode = $(supplierCard).find('.supplierPurchaseQuoteCode').text().trim(); - var materialRealRmbSum = parseFloat(materialRealRmb) * parseFloat(materialRealNum); - var materialRealNoRmbSum = parseFloat(materialRealNoRmb) * parseFloat(materialRealNum); - if (materialRealNum > 0) { - materialSum += materialRealNum; + var $suplierInfo = $tableWrapper.find('.supplier-card'); + $suplierInfo.find('.supplier_card').each(function(supplierIndex, supplierCard) { + var supplierCode = $(this).find('.supplierCode').text().trim(); + var supplierName = $(this).find('.supplierName').text().trim(); + var materialRealNum = parseInt($(this).find('.actualPurchaseNum' ).val()) || 0; + var materialRealRmb = parseFloat($(this).find('.supplierMaterialRmb').text()) || 0; + var materialRealNoRmb = parseFloat($(this).find('.supplierMaterialNoRmb').text()) || 0; + var deliveryTime = $(this).find('.supplierDeliveryTime' ).val(); + var purchasePlanCode = $(this).find('.supplierPurchasePlanCode').text().trim(); + var correlationCode = $(this).find('.supplierCorrelationCode' ).text().trim(); + var purchaseQuoteCode = $(this).find('.supplierPurchaseQuoteCode').text().trim(); + var materialRealRmbSum = parseFloat(materialRealRmb * materialRealNum); + var materialRealNoRmbSum = parseFloat(materialRealNoRmb * materialRealNum); + materialRealSum += materialRealNum; materialNoRmbSum += materialRealNoRmbSum; materialRmbSum += materialRealRmbSum; if (supplierNumList.indexOf(supplierCode) === -1) { supplierNumList.push(supplierCode); purchaseOrder.supplierNum += 1; } - } var materialData = { materialCode: materialObj.materialCode, materialName: materialObj.materialName, @@ -419,11 +472,16 @@ purchaseOrder.purchaseOrderChildList.push(materialData); }); }); - + // 获取采购物料合计,采购物料实际合计,采购物料实际非人民币合计,采购物料实际人民币合计 + var purchaseAmount = parseFloat($('#purchaseMaterialSum').val()); + var purchaseSum = parseFloat($('#purchaseSum').val()); + var purchaseNoRmbSum = parseFloat($('#purchaseNoRmbSum').val()); + var purchaseRmbSum = parseFloat($('#purchaseRmbSum').val()); // 将合计值附加到purchaseOrder对象 - purchaseOrder.materialSum = materialSum; - purchaseOrder.materialNoRmbSum = materialNoRmbSum; - purchaseOrder.materialRmbSum = materialRmbSum; + purchaseOrder.materialAmount = purchaseAmount; + purchaseOrder.materialSum = purchaseSum; + purchaseOrder.materialNoRmbSum = purchaseNoRmbSum; + purchaseOrder.materialRmbSum = purchaseRmbSum; purchaseOrder.supplierNum = supplierNumList.length; // 发送数据到后端API @@ -431,78 +489,6 @@ } } - //获取仓库相关信息Select2 - //根据仓库ID查询仓库名称 - $(function() { - // 初始化时默认加载仓库ID列表 - loadWarehouseCodes(); - // 监听仓库ID下拉框的变化 - }); - - $('#stockNo').on('change', function() { - var selectedWarehouseCode = $(this).val(); // 获取选中的仓库ID - if (selectedWarehouseCode) { - // 发起Ajax请求获取仓库名称 - $.ajax({ - type: 'GET', - url: ctx +'stock/stockInfo/getStockNameByWarehouseCode/' + selectedWarehouseCode, - dataType: 'json', // 假设返回的数据格式是JSON - success: function(data) { - console.log(data); - // 将获取到的仓库名称填充到输入框 - if(data.data == null){ - // 如果返回的数据有问题,可以给出提示或处理 - $.modal.alertWarning('未能获取到仓库名称!'); - } - $('input[name="stockName"]').val(data.data.stockName); - $('input[name="stockAddress"]').val(data.data.stockAddr); - $('input[name="stockContact"]').val(data.data.stockManager); - $('input[name="stockPhone"]').val(data.data.stockManagerPhone); - }, - error: function(jqXHR, textStatus, errorThrown) { - console.error('Error:', textStatus, errorThrown); - $.modal.alertWarning('查询仓库名称时发生错误!'); - } - }); - } else { - // 如果没有选择仓库ID,清空仓库名称输入框 - $('input[name="warehouseName"]').val(''); - } - }); - // 加载仓库Id列表函数 - function loadWarehouseCodes() { - var url = ctx + 'stock/stockInfo/getAllWarehouseCode'; - $.ajax({ - type: 'GET', // 请求类型 - url: url, // 后端接口URL - dataType: 'json', // 预期服务器返回的数据类型 - success: function(data) { - if (data && Array.isArray(data)) { - var selectElement = $('#stockNo'); // 获取仓库编号下拉框元素 - // 清空下拉框现有选项 - selectElement.empty(); - // 添加默认选项(如果需要)编辑时不需要添加默认选项 - // selectElement.append(''); - - // 遍历返回的数据,添加为下拉框的选项 - $.each(data, function(index, item) { - // 仓库ID - selectElement.append(''); - }); - // $('#warehouseCode').val(stockNO); - } else { - $.modal.errMsg("数据为空"); - } - } - }); - } - - $("input[name='deliveryTime']").datepicker({ - language: 'zh-CN', - todayHighlight: true, - format: "yyyy-mm-dd", - autoClose: true, - }); \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/purchasePlan.html b/ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/purchasePlan.html index d468efa3..e8b1be36 100644 --- a/ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/purchasePlan.html +++ b/ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/purchasePlan.html @@ -153,8 +153,8 @@ ] }); }; - var purchasePlanCodes = ""; function addPurchaseOrder(){ + var purchasePlanCodes = ""; var selections = $("#bootstrap-table").bootstrapTable("getSelections"); if(selections.length === 0){ $.modal.alertWarning("请选择采购计划单");