From 33d93225f790ff72f8ba5e86f8cf2c3e2db94d0d Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 26 三月 2026 10:43:55 +0800
Subject: [PATCH] feat: 新增宽、高、面积,产品加工绑定

---
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java            |   43 +++++++++++----------
 src/main/java/com/ruoyi/sales/service/ISalesLedgerProductProcessBindService.java         |    5 ++
 src/main/java/com/ruoyi/sales/pojo/SalesLedgerProductProcessBind.java                    |    2 
 src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java                               |   12 ++++++
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java                   |   23 ++---------
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessBindServiceImpl.java |   19 +++++++++
 doc/河南鹤壁天沐钢化玻璃厂.sql                                                                      |   12 +++++
 7 files changed, 75 insertions(+), 41 deletions(-)

diff --git "a/doc/\346\262\263\345\215\227\351\271\244\345\243\201\345\244\251\346\262\220\351\222\242\345\214\226\347\216\273\347\222\203\345\216\202.sql" "b/doc/\346\262\263\345\215\227\351\271\244\345\243\201\345\244\251\346\262\220\351\222\242\345\214\226\347\216\273\347\222\203\345\216\202.sql"
index de1e58b..0646d58 100644
--- "a/doc/\346\262\263\345\215\227\351\271\244\345\243\201\345\244\251\346\262\220\351\222\242\345\214\226\347\216\273\347\222\203\345\216\202.sql"
+++ "b/doc/\346\262\263\345\215\227\351\271\244\345\243\201\345\244\251\346\262\220\351\222\242\345\214\226\347\216\273\347\222\203\345\216\202.sql"
@@ -38,4 +38,14 @@
     ADD COLUMN remark VARCHAR(500) DEFAULT NULL COMMENT '澶囨敞';
 
 ALTER TABLE sales_ledger_product_process
-    CHANGE COLUMN remark code VARCHAR(255) COMMENT '缂栫爜';
\ No newline at end of file
+    CHANGE COLUMN remark code VARCHAR(255) COMMENT '缂栫爜';
+
+ALTER TABLE `product-inventory-management-hbtmblc`.`sales_ledger_product`
+    MODIFY COLUMN `width` decimal(20, 15) NULL DEFAULT NULL COMMENT '瀹�(mm)' AFTER `is_checked`,
+    MODIFY COLUMN `height` decimal(20, 15) NULL DEFAULT NULL COMMENT '楂�(mm)' AFTER `width`,
+    MODIFY COLUMN `actual_piece_area` decimal(20, 15) NULL DEFAULT NULL COMMENT '瀹為檯鍗曠墖闈㈢Н(銕�)' AFTER `height`,
+    MODIFY COLUMN `actual_total_area` decimal(20, 15) NULL DEFAULT NULL COMMENT '瀹為檯鎬婚潰绉�(銕�)' AFTER `actual_piece_area`,
+    MODIFY COLUMN `settle_piece_area` decimal(20, 15) NULL DEFAULT NULL COMMENT '缁撶畻鍗曠墖闈㈢Н(銕�)' AFTER `actual_total_area`,
+    MODIFY COLUMN `settle_total_area` decimal(20, 15) NULL DEFAULT NULL COMMENT '缁撶畻鎬婚潰绉�(銕�)' AFTER `settle_piece_area`,
+    ADD COLUMN `perimeter` decimal(20, 15) NULL COMMENT '鍛ㄩ暱' AFTER `settle_total_area`,
+    ADD COLUMN `heavy_box` decimal(20, 15) NULL COMMENT '閲嶇' AFTER `perimeter`;
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
index f984e38..5af2457 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -270,6 +270,18 @@
     @ApiModelProperty("缁撶畻鎬婚潰绉�(銕�)")
     private BigDecimal settleTotalArea;
 
+    /**
+     * 鍛ㄩ暱
+     */
+    @ApiModelProperty("鍛ㄩ暱(cm)")
+    private BigDecimal perimeter;
+
+    /**
+     * 鍛ㄩ暱
+     */
+    @ApiModelProperty("閲嶇")
+    private BigDecimal heavyBox;
+
     @TableField(exist = false)
     @ApiModelProperty("閿�鍞骇鍝侀澶栧姞宸�")
     private List<SalesLedgerProductProcess> salesProductProcessList;
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProductProcessBind.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProductProcessBind.java
index 67db3a4..5690b94 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProductProcessBind.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProductProcessBind.java
@@ -32,7 +32,7 @@
     private Integer id;
 
     @ApiModelProperty(value = "閿�鍞彴璐︿骇鍝佷俊鎭疘D")
-    private Integer salesLedgerProductId;
+    private Long salesLedgerProductId;
 
     @ApiModelProperty(value = "閿�鍞骇鍝佸姞宸ユ槑缁咺D")
     private Integer salesLedgerProductProcessId;
diff --git a/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductProcessBindService.java b/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductProcessBindService.java
index 264f944..159294e 100644
--- a/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductProcessBindService.java
+++ b/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductProcessBindService.java
@@ -1,7 +1,10 @@
 package com.ruoyi.sales.service;
 
+import com.ruoyi.sales.pojo.SalesLedgerProductProcess;
 import com.ruoyi.sales.pojo.SalesLedgerProductProcessBind;
 import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +16,6 @@
  */
 public interface ISalesLedgerProductProcessBindService extends IService<SalesLedgerProductProcessBind> {
 
+    void updateProductProcessBind(List<SalesLedgerProductProcess> list, Long salesLedgerProductId);
+
 }
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessBindServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessBindServiceImpl.java
index 9c4a8fe..7181ca6 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessBindServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessBindServiceImpl.java
@@ -1,10 +1,14 @@
 package com.ruoyi.sales.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.sales.pojo.SalesLedgerProductProcess;
 import com.ruoyi.sales.pojo.SalesLedgerProductProcessBind;
 import com.ruoyi.sales.mapper.SalesLedgerProductProcessBindMapper;
 import com.ruoyi.sales.service.ISalesLedgerProductProcessBindService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * <p>
@@ -17,4 +21,19 @@
 @Service
 public class SalesLedgerProductProcessBindServiceImpl extends ServiceImpl<SalesLedgerProductProcessBindMapper, SalesLedgerProductProcessBind> implements ISalesLedgerProductProcessBindService {
 
+    @Override
+    public void updateProductProcessBind(List<SalesLedgerProductProcess> list, Long salesLedgerProductId) {
+        if (list == null || list.isEmpty()) {
+            return;
+        }
+        //  鍏堟竻绌哄啀鎻掑叆
+        baseMapper.delete(new LambdaQueryWrapper<SalesLedgerProductProcessBind>().in(SalesLedgerProductProcessBind::getSalesLedgerProductId, salesLedgerProductId));
+        list.forEach(s -> {
+            SalesLedgerProductProcessBind salesLedgerProductProcessBind = new SalesLedgerProductProcessBind();
+            salesLedgerProductProcessBind.setSalesLedgerProductId(salesLedgerProductId);
+            salesLedgerProductProcessBind.setSalesLedgerProductProcessId(s.getId());
+            salesLedgerProductProcessBind.setQuantity(s.getQuantity());
+            baseMapper.insert(salesLedgerProductProcessBind);
+        });
+    }
 }
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index 68b52cb..ba32270 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -24,9 +24,8 @@
 import com.ruoyi.sales.mapper.SalesLedgerMapper;
 import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
 import com.ruoyi.sales.mapper.ShippingInfoMapper;
-import com.ruoyi.sales.pojo.SalesLedger;
-import com.ruoyi.sales.pojo.SalesLedgerProduct;
-import com.ruoyi.sales.pojo.ShippingInfo;
+import com.ruoyi.sales.pojo.*;
+import com.ruoyi.sales.service.ISalesLedgerProductProcessBindService;
 import com.ruoyi.sales.service.ISalesLedgerProductService;
 import com.ruoyi.stock.mapper.StockInventoryMapper;
 import com.ruoyi.stock.pojo.StockInventory;
@@ -84,7 +83,7 @@
 
     private StockUtils stockUtils;
 
-
+    private final ISalesLedgerProductProcessBindService salesLedgerProductProcessBindService;
 
     @Autowired
     private ProductStructureMapper productStructureMapper;
@@ -104,14 +103,14 @@
 //        queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId())
 //                .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType());
         List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectSalesLedgerProductList(salesLedgerProduct);
-        if(!CollectionUtils.isEmpty(salesLedgerProducts)){
+        if (!CollectionUtils.isEmpty(salesLedgerProducts)) {
             salesLedgerProducts.forEach(item -> {
                 // 鍙戣揣淇℃伅
                 ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>()
                         .eq(ShippingInfo::getSalesLedgerProductId, item.getId())
                         .orderByDesc(ShippingInfo::getCreateTime)
                         .last("limit 1"));
-                if(shippingInfo != null){
+                if (shippingInfo != null) {
                     item.setShippingDate(shippingInfo.getShippingDate());
                     item.setShippingCarNumber(shippingInfo.getShippingCarNumber());
                     item.setShippingStatus(shippingInfo.getStatus());
@@ -131,8 +130,8 @@
                     BigDecimal noInvoiceNum = BigDecimal.ZERO;
                     BigDecimal noInvoiceAmount = BigDecimal.ZERO;
                     for (InvoiceRegistrationProductDto registrationProductDto : invoiceRegistrationProductDtoList) {
-                        if(ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()){
-                            invoiceNum =  invoiceNum.add(registrationProductDto.getInvoiceNum());
+                        if (ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()) {
+                            invoiceNum = invoiceNum.add(registrationProductDto.getInvoiceNum());
                             invoiceAmount = invoiceAmount.add(registrationProductDto.getInvoiceAmount());
                         }
                     }
@@ -166,7 +165,7 @@
         //鍒犻櫎鍙戣揣淇℃伅
         List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()
                 .in(ShippingInfo::getSalesLedgerProductId, Arrays.asList(ids)));
-        if(!CollectionUtils.isEmpty(shippingInfos)){
+        if (!CollectionUtils.isEmpty(shippingInfos)) {
             shippingInfoService.delete(shippingInfos.stream().map(ShippingInfo::getId).collect(Collectors.toList()));
         }
 
@@ -203,12 +202,12 @@
     @Transactional(rollbackFor = Exception.class)
     public int addOrUpdateSalesLedgerProduct(SalesLedgerProduct salesLedgerProduct) {
         // 寰呭洖娆撅紝浠樻
-        if(salesLedgerProduct.getType().equals(1)){
+        if (salesLedgerProduct.getType().equals(1)) {
             salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProduct.getTaxInclusiveTotalPrice().subtract(salesLedgerProduct.getInvoiceTotal()));
             //鏈紑绁ㄦ暟閲�+閲戦
             salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity());
             salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
-        }else{
+        } else {
             salesLedgerProduct.setPendingTicketsTotal(salesLedgerProduct.getTaxInclusiveTotalPrice().subtract(salesLedgerProduct.getTicketsTotal()));
             // 鏈潵绁ㄦ暟閲�+閲戦
             salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity());
@@ -258,6 +257,9 @@
                         PurchaseLedger.class
                 );
             }
+
+            //  娓呯┖閿�鍞骇鍝佺粦瀹氱殑鍔犲伐
+            salesLedgerProductProcessBindService.updateProductProcessBind(salesLedgerProduct.getSalesProductProcessList(), salesLedgerProduct.getId());
         }
         return result;
     }
@@ -279,7 +281,7 @@
         List<ProcessRoute> processRoutes = processRouteMapper.selectList(new QueryWrapper<ProcessRoute>().lambda()
                 .eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId())
                 .orderByDesc(ProcessRoute::getCreateTime));
-        if (processRoutes.size()>0){
+        if (processRoutes.size() > 0) {
             ProcessRoute processRoute = processRoutes.get(0);
             //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎涓昏〃
             ProductProcessRoute productProcessRoute = new ProductProcessRoute();
@@ -316,7 +318,7 @@
                         }
                     }
                     // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
-                    String workOrderNoStr ="GD"+ String.format("%s%03d", datePrefix, sequenceNumber);
+                    String workOrderNoStr = "GD" + String.format("%s%03d", datePrefix, sequenceNumber);
                     ProductWorkOrder productWorkOrder = new ProductWorkOrder();
                     productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
                     productWorkOrder.setProductOrderId(productOrder.getId());
@@ -431,9 +433,9 @@
         IPage<SalesLedgerProductDto> salesLedgerProductDtoIPage = salesLedgerProductMapper.listPage(page, salesLedgerProduct);
         salesLedgerProductDtoIPage.getRecords().forEach(item -> {
             // 鍒ゆ柇鐘舵��
-            if(item.getTaxInclusiveTotalPrice().compareTo(item.getInvoiceTotal()) == 0){
+            if (item.getTaxInclusiveTotalPrice().compareTo(item.getInvoiceTotal()) == 0) {
                 item.setStatusName("宸插畬鎴愪粯娆�");
-            }else{
+            } else {
                 item.setStatusName("鏈畬鎴愪粯娆�");
             }
         });
@@ -445,9 +447,9 @@
         IPage<SalesLedgerProductDto> salesLedgerProductDtoIPage = salesLedgerProductMapper.listPagePurchaseLedger(page, salesLedgerProduct);
         salesLedgerProductDtoIPage.getRecords().forEach(item -> {
             // 鍒ゆ柇鐘舵��
-            if(item.getTaxInclusiveTotalPrice().compareTo(item.getTicketsTotal()) == 0){
+            if (item.getTaxInclusiveTotalPrice().compareTo(item.getTicketsTotal()) == 0) {
                 item.setStatusName("宸插畬鎴愪粯娆�");
-            }else{
+            } else {
                 item.setStatusName("鏈畬鎴愪粯娆�");
             }
         });
@@ -488,6 +490,7 @@
             throw new RuntimeException("鍔ㄦ�佹洿鏂颁富琛ㄩ噾棰濆け璐�", e);
         }
     }
+
     @Override
     public R judgmentInventory(SalesLedgerProduct salesLedgerProduct) {
         //鑾峰彇浜у搧鏈�鏂扮殑宸ヨ壓璺嚎
@@ -506,7 +509,7 @@
 
             //鎵�闇�鏁伴噺
             BigDecimal multiply = salesLedgerProduct.getQuantity().multiply(productStructureDto.getUnitQuantity());
-            BigDecimal subtract =stockInventory.getQualitity().subtract(stockInventory.getLockedQuantity()).subtract(multiply).divide(BigDecimal.ONE, 2, RoundingMode.CEILING);
+            BigDecimal subtract = stockInventory.getQualitity().subtract(stockInventory.getLockedQuantity()).subtract(multiply).divide(BigDecimal.ONE, 2, RoundingMode.CEILING);
             if (subtract.compareTo(BigDecimal.ZERO) <= 0) {
                 count++;
                 stringBuffer.append(productStructureDto.getProductName())
@@ -517,9 +520,9 @@
                         .append(System.lineSeparator());
             }
         }
-        if (count>0) {
+        if (count > 0) {
             return R.fail(stringBuffer.toString());
-        }else {
+        } else {
             return R.ok();
         }
     }
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index 5b57888..c73e1ea 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -754,17 +754,8 @@
             for (SalesLedgerProduct product : updateList) {
                 product.setType(type.getCode());
                 salesLedgerProductMapper.updateById(product);
-                //  瀹炵幇鍒犻櫎缁戝畾鐨勫叏閮ㄥ姞宸�
-                salesLedgerProductProcessBindService.remove(new LambdaQueryWrapper<SalesLedgerProductProcessBind>().eq(SalesLedgerProductProcessBind::getSalesLedgerProductId, product.getId()));
-                //  缁戝畾浜у搧棰濆鍔犲伐
-                List<SalesLedgerProductProcess> salesProductProcessList = product.getSalesProductProcessList();
-                salesProductProcessList.forEach(s -> {
-                    SalesLedgerProductProcessBind processBind = new SalesLedgerProductProcessBind();
-                    processBind.setSalesLedgerProductId(Math.toIntExact(product.getId()));
-                    processBind.setSalesLedgerProductProcessId(s.getId());
-                    processBind.setQuantity(s.getQuantity());
-                    salesLedgerProductProcessBindService.save(processBind);
-                });
+                //  娓呯┖閿�鍞骇鍝佺粦瀹氱殑鍔犲伐
+                salesLedgerProductProcessBindService.updateProductProcessBind(product.getSalesProductProcessList(), product.getId());
             }
         }
         // 鎵ц鎻掑叆鎿嶄綔
@@ -776,14 +767,8 @@
                 salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProduct.getTaxInclusiveTotalPrice());
                 salesLedgerProductMapper.insert(salesLedgerProduct);
                 //  缁戝畾浜у搧棰濆鍔犲伐
-                List<SalesLedgerProductProcess> salesProductProcessList = salesLedgerProduct.getSalesProductProcessList();
-                salesProductProcessList.forEach(s -> {
-                    SalesLedgerProductProcessBind processBind = new SalesLedgerProductProcessBind();
-                    processBind.setSalesLedgerProductId(Math.toIntExact(salesLedgerProduct.getId()));
-                    processBind.setSalesLedgerProductProcessId(s.getId());
-                    processBind.setQuantity(s.getQuantity());
-                    salesLedgerProductProcessBindService.save(processBind);
-                });
+                //  娓呯┖閿�鍞骇鍝佺粦瀹氱殑鍔犲伐
+                salesLedgerProductProcessBindService.updateProductProcessBind(salesLedgerProduct.getSalesProductProcessList(), salesLedgerProduct.getId());
                 // 娣诲姞鐢熶骇鏁版嵁
                 salesLedgerProductServiceImpl.addProductionData(salesLedgerProduct);
             }

--
Gitblit v1.9.3