From 6d8e9ef3653639275d262a975ad477fa0bf5e366 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期一, 30 三月 2026 10:51:53 +0800
Subject: [PATCH] fix: 加工编号缺失,发货修改为整个订单发货

---
 src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java                                |    3 +
 src/main/resources/mapper/sales/SalesLedgerMapper.xml                                |   25 +++-----
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessServiceImpl.java |    4 +
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java               |    8 ++
 src/main/java/com/ruoyi/sales/pojo/SalesLedger.java                                  |    6 ++
 src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java                 |   87 +++++++++++++++++++++++------
 doc/河南鹤壁天沐钢化玻璃厂.sql                                                                  |    5 +
 7 files changed, 103 insertions(+), 35 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 4971c0a..68b67e0 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"
@@ -84,4 +84,7 @@
 ALTER TABLE `product-inventory-management-hbtmblc`.`customer_regions` COMMENT = '瀹㈡埛鍦板尯琛�';
 
 ALTER TABLE `product-inventory-management-hbtmblc`.`customer`
-    ADD COLUMN `regions_id` bigint NULL COMMENT '鍦板尯ID' AFTER `regions`;
\ No newline at end of file
+    ADD COLUMN `regions_id` bigint NULL COMMENT '鍦板尯ID' AFTER `regions`;
+
+ALTER TABLE `sales_ledger`
+    ADD COLUMN `delivery_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '鍙戣揣鐘舵�侊細0-鏈彂璐э紝1-宸插彂璐�' AFTER `delivery_date`;
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java b/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
index db3c5b9..1be6dce 100644
--- a/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
+++ b/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
@@ -1,33 +1,33 @@
 package com.ruoyi.sales.controller;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+// import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.approve.mapper.ApproveProcessMapper;
-import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl;
-import com.ruoyi.approve.vo.ApproveProcessVO;
-import com.ruoyi.common.enums.FileNameType;
+// import com.ruoyi.approve.mapper.ApproveProcessMapper;
+// import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl;
+// import com.ruoyi.approve.vo.ApproveProcessVO;
+// import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.utils.OrderUtils;
-import com.ruoyi.common.utils.SecurityUtils;
+// import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.security.LoginUser;
+// import com.ruoyi.framework.security.LoginUser;
 import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.other.service.impl.TempFileServiceImpl;
-import com.ruoyi.procurementrecord.utils.StockUtils;
+// import com.ruoyi.other.service.impl.TempFileServiceImpl;
+// import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.sales.dto.ShippingInfoDto;
-import com.ruoyi.sales.mapper.ShipmentApprovalMapper;
+// import com.ruoyi.sales.mapper.ShipmentApprovalMapper;
 import com.ruoyi.sales.mapper.ShippingInfoMapper;
 import com.ruoyi.sales.pojo.SalesLedger;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
-import com.ruoyi.sales.pojo.ShipmentApproval;
+// import com.ruoyi.sales.pojo.ShipmentApproval;
 import com.ruoyi.sales.pojo.ShippingInfo;
 import com.ruoyi.sales.service.ISalesLedgerProductService;
 import com.ruoyi.sales.service.ISalesLedgerService;
 import com.ruoyi.sales.service.ShippingInfoService;
-import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
+// import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.collections4.CollectionUtils;
@@ -37,7 +37,8 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.time.LocalDate;
+// import java.time.LocalDate;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -52,13 +53,20 @@
     @Autowired
     private ShippingInfoService shippingInfoService;
 
-    @Autowired
-    private CommonFileServiceImpl commonFileService;
+    // @Autowired
+    // private CommonFileServiceImpl commonFileService;
+
+    // @Autowired
+    // private ApproveProcessServiceImpl approveProcessService;
+
+    // @Autowired
+    // private StockUtils stockUtils;
 
     @Autowired
-    private ApproveProcessServiceImpl approveProcessService;
+    private ISalesLedgerProductService salesLedgerProductService;
+
     @Autowired
-    private StockUtils stockUtils;
+    private ISalesLedgerService salesLedgerService;
 
 
     @GetMapping("/listPage")
@@ -73,8 +81,10 @@
     @Transactional(rollbackFor = Exception.class)
     @Log(title = "鍙戣揣淇℃伅绠$悊", businessType = BusinessType.INSERT)
     public AjaxResult add(@RequestBody ShippingInfoDto req) throws Exception {
-        LoginUser loginUser = SecurityUtils.getLoginUser();
+        // LoginUser loginUser = SecurityUtils.getLoginUser();
         String sh = OrderUtils.countTodayByCreateTime(shippingInfoMapper, "SH");
+
+        /* // 鍘熸湁鐨勫崟浜у搧鍙戣揣鍙婂鎵归�昏緫
         // 鍙戣揣瀹℃壒
         ApproveProcessVO approveProcessVO = new ApproveProcessVO();
         approveProcessVO.setApproveType(7);
@@ -89,6 +99,47 @@
         req.setStatus("寰呭鏍�");
         boolean save = shippingInfoService.save(req);
         return save ? AjaxResult.success() : AjaxResult.error();
+        */
+
+        //  鎸夋暣涓鍗曞彂璐э紝涓嶉渶瀹℃壒
+        if (req.getSalesLedgerId() == null) {
+            return AjaxResult.error("璇烽�夋嫨鍙戣揣璁㈠崟");
+        }
+
+        // 鑾峰彇璇ヨ鍗曚笅鐨勬墍鏈変骇鍝�
+        SalesLedgerProduct query = new SalesLedgerProduct();
+        query.setSalesLedgerId(req.getSalesLedgerId());
+        List<SalesLedgerProduct> productList = salesLedgerProductService.selectSalesLedgerProductList(query);
+
+        if (CollectionUtils.isEmpty(productList)) {
+            return AjaxResult.error("璇ヨ鍗曚笅鏃犲緟鍙戣揣浜у搧");
+        }
+
+        // 涓烘瘡涓骇鍝佸垱寤哄彂璐т俊鎭�
+        List<ShippingInfo> shippingInfoList = new ArrayList<>();
+        for (SalesLedgerProduct product : productList) {
+            ShippingInfo shippingInfo = new ShippingInfo();
+            shippingInfo.setSalesLedgerId(req.getSalesLedgerId());
+            shippingInfo.setSalesLedgerProductId(product.getId());
+            shippingInfo.setShippingNo(sh);
+            shippingInfo.setStatus("瀹℃牳閫氳繃"); // 鐩存帴璁句负瀹℃牳閫氳繃锛岃烦杩囧鎵�
+            shippingInfo.setType(req.getType());
+            shippingInfo.setExpressCompany(req.getExpressCompany());
+            shippingInfo.setExpressNumber(req.getExpressNumber());
+            shippingInfo.setShippingDate(req.getShippingDate());
+            shippingInfo.setShippingCarNumber(req.getShippingCarNumber());
+            shippingInfoList.add(shippingInfo);
+        }
+
+        boolean save = shippingInfoService.saveBatch(shippingInfoList);
+        if (save) {
+            // 鏇存柊閿�鍞彴璐︾殑鍙戣揣鐘舵�佷负宸插彂璐�
+            SalesLedger salesLedger = new SalesLedger();
+            salesLedger.setId(req.getSalesLedgerId());
+            salesLedger.setDeliveryStatus(1);
+            salesLedgerService.updateById(salesLedger);
+        }
+        return save ? AjaxResult.success() : AjaxResult.error();
     }
 
     @ApiOperation("鍙戣揣鎵e簱瀛�")
diff --git a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
index ca01dab..06c0a40 100644
--- a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
@@ -59,4 +59,7 @@
 
     @ApiModelProperty(value = "浜よ揣鏃ユ湡")
     private LocalDate deliveryDate;
+
+    @ApiModelProperty(value = "鏄惁鍙戣揣")
+    private Integer deliveryStatus;
 }
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
index bcd1620..93766d9 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
@@ -142,6 +142,12 @@
     @TableField(value = "delivery_date")
     private LocalDate deliveryDate;
 
+    /**
+     * 鍙戣揣鐘舵�侊細0-鏈彂璐э紝1-宸插彂璐�
+     */
+    @ApiModelProperty("鍙戣揣鐘舵�侊細0-鏈彂璐э紝1-宸插彂璐�")
+    private Integer deliveryStatus;
+
     @TableField(exist = false)
     @ApiModelProperty(value = "浜よ揣澶╂暟宸�")
     private Integer deliveryDaysDiff;
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessServiceImpl.java
index 556fcb4..62cc2ba 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessServiceImpl.java
@@ -33,6 +33,10 @@
     public void addProcess(SalesLedgerProductProcess process) {
         checkDuplicate(process.getProcessName(), null, process.getProcessName());
         this.save(process);
+        if (!StringUtils.hasText(process.getCode())) {
+            process.setCode("P" + process.getId());
+            this.updateById(process);
+        }
     }
 
     @Override
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 871597a..dd15ac8 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -460,6 +460,8 @@
                 salesLedger.setContractAmount(salesLedgerProductImportDtos.stream()
                         .map(SalesLedgerProductImportDto::getTaxInclusiveTotalPrice)
                         .reduce(BigDecimal.ZERO, BigDecimal::add));
+                //  鍙戣揣鐘舵��
+                salesLedger.setDeliveryStatus(0);
                 salesLedgerMapper.insert(salesLedger);
 
                 for (SalesLedgerProductImportDto salesLedgerProductImportDto : salesLedgerProductImportDtos) {
@@ -729,8 +731,12 @@
             if (salesLedger.getId() == null) {
                 String contractNo = generateSalesContractNo();
                 salesLedger.setSalesContractNo(contractNo);
+                salesLedger.setDeliveryStatus(0);
                 salesLedgerMapper.insert(salesLedger);
             } else {
+                if (salesLedger.getDeliveryStatus() == 1) {
+                    throw new ServiceException("璁㈠崟宸插彂璐�,绂佹缂栬緫");
+                }
                 salesLedgerMapper.updateById(salesLedger);
             }
 
@@ -865,7 +871,7 @@
                 //  娓呯┖閿�鍞骇鍝佺粦瀹氱殑鍔犲伐
                 salesLedgerProductProcessBindService.updateProductProcessBind(salesLedgerProduct.getSalesProductProcessList(), salesLedgerProduct.getId());
                 // 娣诲姞鐢熶骇鏁版嵁
-                salesLedgerProductServiceImpl.addProductionData(salesLedgerProduct);
+//                salesLedgerProductServiceImpl.addProductionData(salesLedgerProduct);
             }
         }
     }
diff --git a/src/main/resources/mapper/sales/SalesLedgerMapper.xml b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
index 01e269c..7612cda 100644
--- a/src/main/resources/mapper/sales/SalesLedgerMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -31,7 +31,8 @@
         T1.execution_date,
         T2.nick_name AS entry_person_name,
         T1.payment_method,
-        DATEDIFF(T1.delivery_date, CURDATE()) AS delivery_days_diff
+        DATEDIFF(T1.delivery_date, CURDATE()) AS delivery_days_diff,
+        T1.delivery_status AS deliveryStatus
         FROM
         sales_ledger T1
         LEFT JOIN sys_user T2 ON T1.entry_person = T2.user_id
@@ -43,7 +44,8 @@
     </select>
 
     <select id="selectSalesLedgerListPage" resultType="com.ruoyi.sales.pojo.SalesLedger">
-        SELECT T1.id,
+        SELECT
+        T1.id,
         T1.sales_contract_no,
         T1.customer_contract_no,
         T1.project_name,
@@ -62,20 +64,9 @@
         T1.payment_method,
         T1.delivery_date,
         DATEDIFF(T1.delivery_date, CURDATE()) AS delivery_days_diff,
-        CASE
-        WHEN shipping_status_counts.total_count = 0 THEN false
-        WHEN shipping_status_counts.unshipped_count = 0 THEN true
-        ELSE false
-        END AS is_fh
+        T1.delivery_status AS deliveryStatus
         FROM sales_ledger T1
         LEFT JOIN sys_user T2 ON T1.entry_person = T2.user_id
-        LEFT JOIN (
-        SELECT sales_ledger_id,
-        COUNT(*) as total_count,
-        SUM(CASE WHEN status != '宸插彂璐�' THEN 1 ELSE 0 END) as unshipped_count
-        FROM shipping_info
-        GROUP BY sales_ledger_id
-        ) shipping_status_counts ON T1.id = shipping_status_counts.sales_ledger_id
         <where>
             <if test="salesLedgerDto.customerName != null and salesLedgerDto.customerName != '' ">
                 AND T1.customer_name LIKE CONCAT('%',#{salesLedgerDto.customerName},'%')
@@ -95,8 +86,12 @@
             <if test="salesLedgerDto.entryDateEnd != null and salesLedgerDto.entryDateEnd != '' ">
                 AND T1.entry_date &lt;= DATE_FORMAT(#{salesLedgerDto.entryDateEnd},'%Y-%m-%d')
             </if>
+
+            <if test="salesLedgerDto.deliveryStatus != null">
+                AND T1.delivery_status = #{salesLedgerDto.deliveryStatus}
+            </if>
         </where>
-        order by T1.entry_date desc
+        ORDER BY T1.entry_date DESC
     </select>
 
     <select id="selectIncomeStats" resultType="com.ruoyi.home.dto.IncomeExpenseAnalysisDto">

--
Gitblit v1.9.3