From 0beb4e197c13ccce94a943e158993c503700f4da Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 20 八月 2026 17:57:23 +0800
Subject: [PATCH] feat(sales): 实现发货模块部分发货与批量发货功能

---
 src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java |   72 +++++++++++++++++++++++------------
 1 files changed, 47 insertions(+), 25 deletions(-)

diff --git a/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java b/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
index 2b14921..6041f3d 100644
--- a/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
+++ b/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
@@ -2,20 +2,18 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.approve.bean.vo.ApproveProcessVO;
-import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl;
-import com.ruoyi.common.utils.OrderUtils;
-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.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.sales.dto.ShippingInfoDto;
 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.service.ISalesLedgerProductService;
+import com.ruoyi.sales.service.ISalesLedgerService;
 import com.ruoyi.sales.service.ShippingInfoService;
 import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
 import io.swagger.annotations.Api;
@@ -26,8 +24,9 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.time.LocalDate;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * @author :yys
@@ -45,9 +44,10 @@
     private CommonFileServiceImpl commonFileService;
 
     @Autowired
-    private ApproveProcessServiceImpl approveProcessService;
+    private ISalesLedgerService salesLedgerService;
+
     @Autowired
-    private StockUtils stockUtils;
+    private ISalesLedgerProductService salesLedgerProductService;
 
 
     @GetMapping("/listPage")
@@ -62,22 +62,44 @@
     @Transactional(rollbackFor = Exception.class)
     @Log(title = "鍙戣揣淇℃伅绠$悊", businessType = BusinessType.INSERT)
     public AjaxResult add(@RequestBody ShippingInfoDto req) throws Exception {
-        LoginUser loginUser = SecurityUtils.getLoginUser();
-        String sh = OrderUtils.countTodayByCreateTime(shippingInfoMapper, "SH");
-        // 鍙戣揣瀹℃壒
-        ApproveProcessVO approveProcessVO = new ApproveProcessVO();
-        approveProcessVO.setApproveType(7);
-        approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId());
-        approveProcessVO.setApproveReason(req.getType() + ":" +sh);
-        approveProcessVO.setApproveUserIds(req.getApproveUserIds());
-        approveProcessVO.setApproveUser(loginUser.getUserId());
-        approveProcessVO.setApproveTime(LocalDate.now().toString());
-        approveProcessService.addApprove(approveProcessVO);
-        // 娣诲姞鍙戣揣娑堟伅
-        req.setShippingNo(sh);
-        req.setStatus("寰呭鏍�");
-        boolean save = shippingInfoService.save(req);
-        return save ? AjaxResult.success() : AjaxResult.error();
+        return shippingInfoService.addShipping(req) ? AjaxResult.success() : AjaxResult.error();
+    }
+
+    @PostMapping("/batchAdd")
+    @ApiOperation("鎵归噺鍙戣揣锛氬悓涓�瀹㈡埛澶氭潯璁㈠崟锛岄�愭潯鍒涘缓鍙戣揣鍗曞苟鍙戣捣瀹℃壒")
+    @Transactional(rollbackFor = Exception.class)
+    @Log(title = "鍙戣揣淇℃伅绠$悊", businessType = BusinessType.INSERT)
+    public AjaxResult batchAdd(@RequestBody List<ShippingInfoDto> reqs) throws Exception {
+        if (reqs == null || reqs.isEmpty()) {
+            return AjaxResult.error("璇烽�夋嫨瑕佸彂璐х殑浜у搧");
+        }
+        // 鏍¢獙鎵�鏈変骇鍝佽鎵�灞為攢鍞彴璐︿负鍚屼竴瀹㈡埛
+        List<Long> productIds = reqs.stream()
+                .map(ShippingInfoDto::getSalesLedgerProductId)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+        List<SalesLedgerProduct> products = salesLedgerProductService.listByIds(productIds);
+        List<Long> ledgerIds = products.stream()
+                .map(SalesLedgerProduct::getSalesLedgerId)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+        List<SalesLedger> ledgers = salesLedgerService.listByIds(ledgerIds);
+        long customerCount = ledgers.stream()
+                .map(SalesLedger::getCustomerName)
+                .filter(cn -> cn != null && !cn.trim().isEmpty())
+                .distinct()
+                .count();
+        if (customerCount > 1) {
+            return AjaxResult.error("鎵归噺鍙戣揣浠呮敮鎸佸悓涓�瀹㈡埛鐨勫鏉¤鍗�");
+        }
+        for (ShippingInfoDto req : reqs) {
+            if (!shippingInfoService.addShipping(req)) {
+                throw new RuntimeException("鎵归噺鍙戣揣澶辫触");
+            }
+        }
+        return AjaxResult.success();
     }
 
     @ApiOperation("鍙戣揣鎵e簱瀛�")

--
Gitblit v1.9.3