From 6e62e3a4d955a3e298a6dc598617cddb63854964 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 01 六月 2026 14:01:28 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_新疆马铃薯pro' into dev_新疆马铃薯pro

---
 src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java       |   23 ++++++++---
 src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java                      |    3 +
 src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java     |    7 ++-
 src/main/java/com/ruoyi/approve/bean/dto/ApprovalInstanceDto.java             |    5 ++
 src/main/resources/mapper/sales/ShippingInfoMapper.xml                        |    1 
 src/main/java/com/ruoyi/approve/service/impl/ApprovalInstanceServiceImpl.java |    3 -
 src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java               |   15 +++++++
 src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java                          |    4 ++
 src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java     |    1 
 9 files changed, 52 insertions(+), 10 deletions(-)

diff --git a/src/main/java/com/ruoyi/approve/bean/dto/ApprovalInstanceDto.java b/src/main/java/com/ruoyi/approve/bean/dto/ApprovalInstanceDto.java
index a2df482..b535e69 100644
--- a/src/main/java/com/ruoyi/approve/bean/dto/ApprovalInstanceDto.java
+++ b/src/main/java/com/ruoyi/approve/bean/dto/ApprovalInstanceDto.java
@@ -2,6 +2,8 @@
 
 import com.ruoyi.approve.pojo.ApprovalInstance;
 import com.ruoyi.basic.dto.StorageBlobDTO;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.util.List;
@@ -18,4 +20,7 @@
     private String createTimeStart;
 
     private List<StorageBlobDTO> storageBlobDTOs;
+
+    @Schema(description = "鍑哄簱鎵瑰彿")
+    private String outboundBatches;
 }
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApprovalInstanceServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApprovalInstanceServiceImpl.java
index 5da3984..e0c7eae 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApprovalInstanceServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApprovalInstanceServiceImpl.java
@@ -682,8 +682,7 @@
     private void handleShippingApprovalFinished(ApprovalInstance instance, String status) {
         ShippingInfo shippingInfo = shippingInfoMapper.selectOne(
                 new LambdaQueryWrapper<ShippingInfo>()
-                        .eq(ShippingInfo::getId, instance.getTitle())
-                        .orderByDesc(ShippingInfo::getCreateTime)
+                        .eq(ShippingInfo::getId, instance.getBusinessId())
                         .last("limit 1")
         );
         if (shippingInfo == null) {
diff --git a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
index 9b8735f..591c34c 100644
--- a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
+++ b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
@@ -143,12 +143,27 @@
      * @param recordId
      */
     public void substractStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo) {
+        substractStock(productModelId, quantity, recordType, recordId, batchNo, null);
+    }
+
+    /**
+     * 鍚堟牸鍑哄簱锛堝甫鍑哄簱鎵瑰彿锛�
+     *
+     * @param productModelId
+     * @param quantity
+     * @param recordType
+     * @param recordId
+     * @param batchNo
+     * @param outboundBatches 鍑哄簱鎵瑰彿锛屽鏋滀负绌哄垯鑷姩鐢熸垚
+     */
+    public void substractStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo, String outboundBatches) {
         StockInventoryDto stockInventoryDto = new StockInventoryDto();
         stockInventoryDto.setRecordId(recordId);
         stockInventoryDto.setRecordType(String.valueOf(recordType));
         stockInventoryDto.setQualitity(quantity);
         stockInventoryDto.setProductModelId(productModelId);
         stockInventoryDto.setBatchNo(batchNo);
+        stockInventoryDto.setOutboundBatches(outboundBatches);
         stockInventoryService.addStockOutRecordOnly(stockInventoryDto);
     }
 
diff --git a/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java b/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
index a5616d8..3e06782 100644
--- a/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
+++ b/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
@@ -71,6 +71,10 @@
     @Excel(name = "鍙戣揣杞︾墝鍙�")
     private String shippingCarNumber;
 
+    @Schema(description = "鍑哄簱鎵瑰彿")
+    @Excel(name = "鍑哄簱鎵瑰彿")
+    private String outboundBatches;
+
     @Schema(description = "鍒涘缓鏃堕棿")
     private LocalDateTime createTime;
 
diff --git a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
index 4e6ff58..dfa4a3a 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
@@ -142,11 +142,19 @@
 
     @Override
     public boolean add(ShippingInfoDto req) {
+        // 鏍¢獙outboundBatches鍞竴鎬�
+        if (req.getOutboundBatches() != null && !req.getOutboundBatches().isEmpty()) {
+            long count = this.count(new LambdaQueryWrapper<ShippingInfo>()
+                    .eq(ShippingInfo::getOutboundBatches, req.getOutboundBatches()));
+            if (count > 0) {
+                throw new RuntimeException("鍑哄簱鎵瑰彿宸插瓨鍦紝璇烽噸鏂拌緭鍏�");
+            }
+        }
         this.save(req);
         req.getBatchNoDetailList().forEach(item -> item.setShippingInfoId(req.getId()));
         shippingProductDetailMapper.insert(req.getBatchNoDetailList());
         for (ShippingProductDetail shippingProductDetail : req.getBatchNoDetailList()) {
-            stockUtils.substractStock(shippingProductDetail.getProductModelId(), shippingProductDetail.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId(), shippingProductDetail.getBatchNo());
+            stockUtils.substractStock(shippingProductDetail.getProductModelId(), shippingProductDetail.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId(), shippingProductDetail.getBatchNo(), req.getOutboundBatches());
         }
         // 淇濆瓨鏂囦欢
         fileUtil.saveStorageAttachment(ApplicationTypeEnum.IMAGE, RecordTypeEnum.SHIPPING_INFO, req.getId(), req.getStorageBlobDTOs());
@@ -172,20 +180,23 @@
     @Override
     public boolean addReq(ShippingInfoDto req) {
 
-                LoginUser loginUser = SecurityUtils.getLoginUser();
-        String sh = OrderUtils.countTodayByCreateTime(shippingInfoMapper, "SH","shipping_no",req.getCreateTime());
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        // 璁剧疆鍒涘缓鏃堕棿涓哄綋鍓嶆椂闂达紝纭繚缂栧彿鏌ヨ姝g‘
+        LocalDateTime now = LocalDateTime.now();
+        req.setCreateTime(now);
+        String sh = OrderUtils.countTodayByCreateTime(shippingInfoMapper, "SH", "shipping_no", now);
         // 鍏堜繚瀛樺彂璐у崟锛屽啀鍙戣捣瀹℃壒锛涙棤瀹℃牳浜鸿嚜鍔ㄩ�氳繃鏃堕渶瑕佹寜鍙戣揣缂栧彿鍥炲啓鍙戣揣鐘舵�併��
         req.setShippingNo(sh);
         req.setStatus("寰呭鏍�");
         boolean save = this.add(req);
         // 鍙戣揣瀹℃壒
         ApprovalInstanceDto approvalInstance = new ApprovalInstanceDto();
-        approvalInstance.setTemplateId(approvalTemplateMapper.selectOne(new LambdaQueryWrapper<ApprovalTemplate>().eq(ApprovalTemplate::getBusinessType,7L).orderByDesc(ApprovalTemplate::getId).last("LIMIT 1")).getId());
-        approvalInstance.setTemplateName(approvalTemplateMapper.selectOne(new LambdaQueryWrapper<ApprovalTemplate>().eq(ApprovalTemplate::getBusinessType,7L).orderByDesc(ApprovalTemplate::getId).last("LIMIT 1")).getTemplateName());
+        approvalInstance.setTemplateId(approvalTemplateMapper.selectOne(new LambdaQueryWrapper<ApprovalTemplate>().eq(ApprovalTemplate::getBusinessType, 7L).orderByDesc(ApprovalTemplate::getId).last("LIMIT 1")).getId());
+        approvalInstance.setTemplateName(approvalTemplateMapper.selectOne(new LambdaQueryWrapper<ApprovalTemplate>().eq(ApprovalTemplate::getBusinessType, 7L).orderByDesc(ApprovalTemplate::getId).last("LIMIT 1")).getTemplateName());
         approvalInstance.setBusinessId(req.getId());
         approvalInstance.setBusinessType(7L);
         approvalInstance.setCurrentLevel(1);
-        approvalInstance.setTitle(sh+"瀹℃壒");
+        approvalInstance.setTitle(sh + "瀹℃壒");
         approvalInstance.setApplicantId(loginUser.getUserId());
         approvalInstance.setApplicantName(loginUser.getNickName());
         approvalInstance.setApplyTime(LocalDateTime.now());
diff --git a/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java b/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
index 33b7599..756d28e 100644
--- a/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
+++ b/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
@@ -80,4 +80,7 @@
 
     @Schema(description = "浜у搧id")
     private Long productId;
+
+    @Schema(description = "鍑哄簱鎵瑰彿")
+    private String outboundBatches;
 }
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
index fa76bc7..5dc8d4a 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -292,6 +292,7 @@
         stockOutRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
         stockOutRecordDto.setType("0");
         stockOutRecordDto.setRemark(stockInventoryDto.getRemark());
+        stockOutRecordDto.setOutboundBatches(stockInventoryDto.getOutboundBatches());
         stockOutRecordService.add(stockOutRecordDto);
         return true;
     }
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
index 26f0c2d..c5d1109 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
@@ -60,8 +60,11 @@
 
     @Override
     public int add(StockOutRecordDto stockOutRecordDto) {
-        String no = OrderUtils.countTodayByCreateTime(stockOutRecordMapper, "CK","outbound_batches", stockOutRecordDto.getCreateTime() != null ? stockOutRecordDto.getCreateTime() : LocalDateTime.now());
-        stockOutRecordDto.setOutboundBatches(no);
+        // 濡傛灉浼犲叆浜唎utboundBatches鍒欎娇鐢紝鍚﹀垯鑷姩鐢熸垚
+        if (stockOutRecordDto.getOutboundBatches() == null || stockOutRecordDto.getOutboundBatches().isEmpty()) {
+            String no = OrderUtils.countTodayByCreateTime(stockOutRecordMapper, "CK","outbound_batches", stockOutRecordDto.getCreateTime() != null ? stockOutRecordDto.getCreateTime() : LocalDateTime.now());
+            stockOutRecordDto.setOutboundBatches(no);
+        }
         if (StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode().equals(stockOutRecordDto.getRecordType())){
             stockOutRecordDto.setApprovalStatus(3);
         }
diff --git a/src/main/resources/mapper/sales/ShippingInfoMapper.xml b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
index 9021eb4..161b384 100644
--- a/src/main/resources/mapper/sales/ShippingInfoMapper.xml
+++ b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
@@ -19,6 +19,7 @@
         s.update_user,
         s.tenant_id,
         sl.sales_contract_no,
+        s.outbound_batches,
         pm.model as specification_model,
         pm.unit,
         p.product_name,

--
Gitblit v1.9.3