From 7b2233d1dab53574facc66b3bebffcd8ca5919de Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期六, 21 三月 2026 14:27:19 +0800
Subject: [PATCH] yys 1.已退货完毕的出库单号不要展示在关联出库单中 2.退货管理唯一处理 3.生产订单-库存数量回显 4.发货管理回显退货数量 5.发货增加详情接口 6.生产核算清理脏数据 7.生产报工-删除生产报工记录报错 8.筛选客户名称数据展示有误

---
 src/main/java/com/ruoyi/procurementrecord/service/ReturnManagementService.java          |    3 
 src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java            |    1 
 src/main/java/com/ruoyi/sales/service/ShippingInfoService.java                          |    2 
 src/main/java/com/ruoyi/sales/service/impl/ShippingInfoDetailServiceImpl.java           |    8 +
 src/main/resources/mapper/stock/StockInventoryMapper.xml                                |    2 
 src/main/java/com/ruoyi/account/pojo/AccountExpense.java                                |    2 
 src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java                                  |    5 +
 src/main/resources/mapper/sales/ShippingInfoMapper.xml                                  |   38 +++++++
 src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java                         |   15 +-
 src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java      |    2 
 src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java |   67 +++++++++++--
 src/main/java/com/ruoyi/sales/pojo/ShippingInfoDetail.java                              |    8 +
 src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java                 |   60 ++++++++---
 src/main/java/com/ruoyi/sales/mapper/ShippingInfoMapper.java                            |    2 
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java                  |   18 +++
 src/main/java/com/ruoyi/procurementrecord/controller/ReturnManagementController.java    |    7 -
 src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java                    |   14 +-
 src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml                 |    2 
 18 files changed, 200 insertions(+), 56 deletions(-)

diff --git a/src/main/java/com/ruoyi/account/pojo/AccountExpense.java b/src/main/java/com/ruoyi/account/pojo/AccountExpense.java
index c87f423..faa3350 100644
--- a/src/main/java/com/ruoyi/account/pojo/AccountExpense.java
+++ b/src/main/java/com/ruoyi/account/pojo/AccountExpense.java
@@ -35,7 +35,7 @@
     private Long businessId;
 
     /**
-     * 涓氬姟绫诲瀷 1-浠樻 2-杩樻
+     * 涓氬姟绫诲瀷 1-浠樻 2-杩樻 3-閿�鍞��娆�
      */
     private Integer businessType;
 
diff --git a/src/main/java/com/ruoyi/procurementrecord/controller/ReturnManagementController.java b/src/main/java/com/ruoyi/procurementrecord/controller/ReturnManagementController.java
index 1db28ca..4ddeb74 100644
--- a/src/main/java/com/ruoyi/procurementrecord/controller/ReturnManagementController.java
+++ b/src/main/java/com/ruoyi/procurementrecord/controller/ReturnManagementController.java
@@ -68,11 +68,8 @@
     @Transactional(rollbackFor = Exception.class)
     public AjaxResult del(@RequestBody List<Long> ids) {
         if (CollectionUtils.isEmpty(ids)) return error("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
-        returnSaleProductService.remove(new QueryWrapper<ReturnSaleProduct>()
-                .lambda()
-                .in(ReturnSaleProduct::getReturnManagementId, ids));
-        boolean result = returnManagementService.removeByIds(ids);
-        return result ? success() : error();
+        int result = returnManagementService.delete(ids);
+        return result > 0 ? success() : error();
     }
 
     @GetMapping("/getById")
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/ReturnManagementService.java b/src/main/java/com/ruoyi/procurementrecord/service/ReturnManagementService.java
index 0214d25..1904056 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/ReturnManagementService.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/ReturnManagementService.java
@@ -8,6 +8,7 @@
 import com.ruoyi.sales.dto.SalesLedgerDto;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * @author :yys
@@ -33,4 +34,6 @@
     boolean handle(Long returnManagementId);
 
     ReturnManagementDto getReturnManagementDtoById(Long returnManagementId);
+
+    int delete(List<Long> ids);
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java
index 74196ea..cfced60 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java
@@ -1,6 +1,7 @@
 package com.ruoyi.procurementrecord.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -13,6 +14,7 @@
 import com.ruoyi.procurementrecord.dto.ReturnManagementDto;
 import com.ruoyi.procurementrecord.dto.ReturnSaleProductDto;
 import com.ruoyi.procurementrecord.mapper.ReturnManagementMapper;
+import com.ruoyi.procurementrecord.mapper.ReturnSaleProductMapper;
 import com.ruoyi.procurementrecord.pojo.ReturnManagement;
 import com.ruoyi.procurementrecord.pojo.ReturnSaleProduct;
 import com.ruoyi.procurementrecord.service.ReturnManagementService;
@@ -36,6 +38,7 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author :yys
@@ -51,6 +54,8 @@
     @Autowired
     private ReturnSaleProductService returnSaleProductService;
     @Autowired
+    private ReturnSaleProductMapper returnSaleProductMapper;
+    @Autowired
     private ShippingInfoDetailService shippingInfoDetailService;
     @Autowired
     private ShippingInfoService shippingInfoService;
@@ -64,6 +69,20 @@
 
     @Autowired
     private AccountExpenseMapper accountExpenseMapper;
+
+//    閫氳繃鍙戣揣璁㈠崟璇︽儏ID鏌ヨ閫�璐ф暟閲�
+    public BigDecimal getReturnSaleProductCountByShippingId(List<Long> shippingInfoDetailId) {
+        List<ReturnManagement> returnManagements = returnManagementMapper.selectList(new LambdaQueryWrapper<ReturnManagement>()
+                .in(ReturnManagement::getShippingId, shippingInfoDetailId)
+                .eq(ReturnManagement::getStatus, 1));
+        if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(returnManagements)){
+            List<ReturnSaleProduct> returnSaleProducts = returnSaleProductMapper.selectList(new LambdaQueryWrapper<ReturnSaleProduct>()
+                    .in(ReturnSaleProduct::getReturnManagementId, returnManagements.stream().map(ReturnManagement::getId).collect(Collectors.toList()))
+                    .eq(ReturnSaleProduct::getStatus, 1));
+            return returnSaleProducts.stream().map(ReturnSaleProduct::getNum).reduce(BigDecimal.ZERO, BigDecimal::add);
+        }
+        return BigDecimal.ZERO;
+    }
 
     @Override
     public IPage<ReturnManagementDto> listPage(Page page, ReturnManagementDto returnManagement) {
@@ -116,15 +135,9 @@
         List<ReturnSaleProductDto> list = returnSaleProductService.listReturnSaleProduct(returnManagementId);
         byId.setStatus(1);
         updateById(byId);
-//        SalesRefundAmountOrderDto salesRefundAmountOrder = new SalesRefundAmountOrderDto();
-//        salesRefundAmountOrder.setReturnManagementId(returnManagementId);
-//        salesRefundAmountOrder.setStatus(0);
-//        salesRefundAmountOrder.setCreateTime(byId.getCreateTime());
-//        salesRefundAmountOrder.setCreateUserId(SecurityUtils.getUserId());
         BigDecimal bigDecimal = new BigDecimal(0);
         for (ReturnSaleProductDto returnSaleProduct : list) {
             bigDecimal = bigDecimal.add(returnSaleProduct.getPrice());
-//            salesRefundAmountOrder.setRefundedAmount(new BigDecimal(0));
             // 鏄惁鏈夎川閲忛棶棰�
             if (returnSaleProduct.getIsQuality() == 1) {
                 // 鏈夎川閲忛棶棰橈紝鍏ヤ笉鍚堟牸搴�
@@ -136,10 +149,17 @@
             returnSaleProduct.setStatus(1);
             returnSaleProductService.updateById(returnSaleProduct);
         }
-//        salesRefundAmountOrder.setRefundAmount(bigDecimal);
-//        salesRefundAmountOrder.setNotRefundedAmount(salesRefundAmountOrder.getRefundedAmount());
-        // 鍒嗘壒閫�娆�
-//        salesRefundAmountOrderService.addSalesRefundAmountOrderDto(salesRefundAmountOrder);
+        // 淇敼鍙戣揣璇︽儏涓洪��璐�
+        SalesLedgerDto returnManagementDtoByShippingIdId = getReturnManagementDtoByShippingIdId(byId.getShippingId());
+        for (SalesLedgerProductDto salesLedgerProductDto : returnManagementDtoByShippingIdId.getProductDtoData()) {
+            if(salesLedgerProductDto.getUnQuantity().compareTo(BigDecimal.ZERO) == 0){
+                ShippingInfoDetail shippingInfoDetail = shippingInfoDetailService.getById(byId.getShippingId());
+                if(shippingInfoDetail != null){
+                    shippingInfoDetail.setStatus("宸查��璐�");
+                    shippingInfoDetailService.updateById(shippingInfoDetail);
+                }
+            }
+        }
         // 鍜岃储鍔¤仈鍔紝鏂板鏀嚭
         AccountExpense accountExpense = new AccountExpense();
         accountExpense.setBusinessType(3);
@@ -163,5 +183,32 @@
         return returnManagementDtoById;
     }
 
+    @Override
+    public int delete(List<Long> ids) {
+        List<ReturnSaleProduct> returnSaleProducts = returnSaleProductMapper.selectList(new QueryWrapper<ReturnSaleProduct>()
+                .lambda()
+                .in(ReturnSaleProduct::getReturnManagementId, ids));
+        if(com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(returnSaleProducts)){
+            List<Long> collect = returnSaleProducts
+                    .stream()
+                    .map(ReturnSaleProduct::getId)
+                    .collect(Collectors.toList());
+            returnSaleProductMapper.deleteBatchIds(collect);
+            // 鍒犻櫎鍏ュ簱璁板綍
+            for (ReturnSaleProduct returnSaleProduct : returnSaleProducts) {
+                if(returnSaleProduct.getIsQuality() == 1){
+                    stockUtils.deleteStockInRecord(returnSaleProduct.getId(), StockInUnQualifiedRecordTypeEnum.RETURN_UNSTOCK_IN.getCode());
+                }else{
+                    stockUtils.deleteStockInRecord(returnSaleProduct.getId(), StockInQualifiedRecordTypeEnum.RETURN_HE_IN.getCode());
+                }
+            }
+        }
+        accountExpenseMapper.delete(new QueryWrapper<AccountExpense>()
+                .lambda()
+                .in(AccountExpense::getBusinessId, ids)
+                .eq(AccountExpense::getBusinessType, 3));
+        return returnManagementMapper.deleteBatchIds(ids);
+    }
+
 
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
index 819ce65..4e85270 100644
--- a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
+++ b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
@@ -1,6 +1,7 @@
 package com.ruoyi.procurementrecord.utils;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
 import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
@@ -21,7 +22,9 @@
 import java.math.BigDecimal;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @Component
 @RequiredArgsConstructor
@@ -99,19 +102,19 @@
 
     //涓嶅悎鏍煎簱瀛樺垹闄�
     public void deleteStockInRecord(Long recordId, String recordType) {
-        StockInRecord one = stockInRecordService.getOne(new QueryWrapper<StockInRecord>()
+        List<StockInRecord> one = stockInRecordService.getBaseMapper().selectList(new QueryWrapper<StockInRecord>()
                 .lambda().eq(StockInRecord::getRecordId, recordId)
                 .eq(StockInRecord::getRecordType, recordType));
-        if (ObjectUtils.isNotEmpty(one)) {
-            stockInRecordService.batchDelete(Collections.singletonList(one.getId()));
+        if (CollectionUtils.isNotEmpty(one)) {
+            stockInRecordService.batchDelete(one.stream().map(StockInRecord::getId).collect(Collectors.toList()));
         }
     }
     public void deleteStockOutRecord(Long recordId, String recordType) {
-        StockOutRecord one = stockOutRecordService.getOne(new QueryWrapper<StockOutRecord>()
+        List<StockOutRecord> one = stockOutRecordService.getBaseMapper().selectList(new QueryWrapper<StockOutRecord>()
                 .lambda().eq(StockOutRecord::getRecordId, recordId)
                 .eq(StockOutRecord::getRecordType, recordType));
-        if (ObjectUtils.isNotEmpty(one)) {
-            stockOutRecordService.batchDelete(Collections.singletonList(one.getId()));
+        if (CollectionUtils.isNotEmpty(one)) {
+            stockOutRecordService.batchDelete(one.stream().map(StockOutRecord::getId).collect(Collectors.toList()));
         }
     }
 }
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java b/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
index 1dd597b..111f227 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
@@ -17,7 +17,7 @@
 import java.util.Arrays;
 import java.util.List;
 
-@RequestMapping("productionProductMain")
+@RequestMapping("/productionProductMain")
 @RestController
 @Api(value = "鐢熶骇鎶ュ伐")
 public class ProductionProductMainController {
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
index 9e03eec..6d46f7c 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -76,6 +76,7 @@
             // 鑾峰彇浜у搧鍚堟牸搴撳瓨
             StockInventoryDto stockInventoryDto = new StockInventoryDto();
             stockInventoryDto.setProductModelId(productOrderDto.getProductModelId());
+            stockInventoryDto.setProductType(1);
             Page page1 = new Page<>(1,1);
             IPage<StockInventoryDto> stockInventoryDtoIPage = stockInventoryService.pagestockInventory(page1,stockInventoryDto);
             if(stockInventoryDtoIPage.getTotal() > 0){
diff --git a/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java b/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
index 2f77dc4..29dafda 100644
--- a/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
+++ b/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
@@ -66,6 +66,12 @@
         return AjaxResult.success(shippingInfoService.getShippingInfoByCustomerName(customerName));
     }
 
+    @ApiOperation("璇︽儏")
+    @GetMapping("/getById")
+    public AjaxResult getById(Long id) {
+        return AjaxResult.success(shippingInfoService.getDateil(id));
+    }
+
 
     @GetMapping("/listPage")
     @ApiOperation("鍙戣揣淇℃伅鍒楄〃")
@@ -95,14 +101,6 @@
         req.setStatus("寰呭鏍�");
         boolean save = shippingInfoService.save(req);
         return save ? AjaxResult.success() : AjaxResult.error();
-    }
-
-    @ApiOperation("鍙戣揣鎵e簱瀛�")
-    @PostMapping("/deductStock")
-    @Transactional(rollbackFor = Exception.class)
-    @Log(title = "鍙戣揣淇℃伅绠$悊", businessType = BusinessType.UPDATE)
-    public AjaxResult deductStock(@RequestBody ShippingInfoDto req) throws IOException {
-        return shippingInfoService.deductStock( req) ? AjaxResult.success() : AjaxResult.error();
     }
 
     @PostMapping("/update")
diff --git a/src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java b/src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java
index 54481ca..48db590 100644
--- a/src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java
@@ -40,4 +40,9 @@
      */
     private BigDecimal waitShippingTotal = BigDecimal.ZERO;
 
+    /**
+     * 閫�璐ф暟閲�
+     */
+    private BigDecimal returnTotal = BigDecimal.ZERO;
+
 }
diff --git a/src/main/java/com/ruoyi/sales/mapper/ShippingInfoMapper.java b/src/main/java/com/ruoyi/sales/mapper/ShippingInfoMapper.java
index 4b74ed9..5a206d0 100644
--- a/src/main/java/com/ruoyi/sales/mapper/ShippingInfoMapper.java
+++ b/src/main/java/com/ruoyi/sales/mapper/ShippingInfoMapper.java
@@ -22,4 +22,6 @@
     List<ShippingInfo> getShippingInfoByCustomerName(String customerName);
 
     List<SalesLedgerProductDto> getReturnManagementDtoById(@Param("shippingId")Long shippingId);
+
+    ShippingInfoDto getDateil(@Param("id") Long id);
 }
diff --git a/src/main/java/com/ruoyi/sales/pojo/ShippingInfoDetail.java b/src/main/java/com/ruoyi/sales/pojo/ShippingInfoDetail.java
index e5ee5cb..90e1d9e 100644
--- a/src/main/java/com/ruoyi/sales/pojo/ShippingInfoDetail.java
+++ b/src/main/java/com/ruoyi/sales/pojo/ShippingInfoDetail.java
@@ -33,6 +33,12 @@
 
     private static final long serialVersionUID = 1L;
 
+    /**
+     * 閫�璐ф暟閲�
+     */
+    @TableField(exist = false)
+    private BigDecimal returnTotal = BigDecimal.ZERO;
+
     @TableField(exist = false)
     private List<String> tempFileIds;
     @TableField(exist = false)
@@ -90,7 +96,7 @@
     @ApiModelProperty("鍙戣揣绫诲瀷")
     private String type;
 
-    @ApiModelProperty("鐘舵��")
+    @ApiModelProperty("鐘舵�� 宸查��璐�")
     private String status;
 
     @ApiModelProperty("鍙戣揣鏁伴噺")
diff --git a/src/main/java/com/ruoyi/sales/service/ShippingInfoService.java b/src/main/java/com/ruoyi/sales/service/ShippingInfoService.java
index fbd1d19..cbc414a 100644
--- a/src/main/java/com/ruoyi/sales/service/ShippingInfoService.java
+++ b/src/main/java/com/ruoyi/sales/service/ShippingInfoService.java
@@ -28,4 +28,6 @@
     List<SalesLedgerProductDto> getReturnManagementDtoById(Long id);
 
     Map<String ,BigDecimal> getNumberOfSalesLedgerProduct(Long id);
+
+    ShippingInfoDto getDateil(Long id);
 }
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 c5f649d..86e560c 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -23,6 +23,9 @@
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.other.mapper.TempFileMapper;
 import com.ruoyi.other.pojo.TempFile;
+import com.ruoyi.procurementrecord.mapper.ReturnManagementMapper;
+import com.ruoyi.procurementrecord.pojo.ReturnManagement;
+import com.ruoyi.procurementrecord.service.ReturnManagementService;
 import com.ruoyi.production.mapper.*;
 import com.ruoyi.production.pojo.*;
 import com.ruoyi.production.service.ProductionProductMainService;
@@ -98,6 +101,10 @@
     private final CommonFileServiceImpl commonFileService;
 
     private final ShippingInfoMapper shippingInfoMapper;
+
+    private final ReturnManagementMapper returnManagementMapper;
+
+    private final ReturnManagementService returnManagementService;
 
     private final InvoiceLedgerMapper invoiceLedgerMapper;
 
@@ -558,8 +565,17 @@
         List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()
                 .in(ShippingInfo::getSalesLedgerId, idList));
         if (CollectionUtils.isNotEmpty(shippingInfos)) {
-            shippingInfoServiceImpl.delete(shippingInfos.stream().map(ShippingInfo::getId).collect(Collectors.toList()));
+            List<Long> shippingIds = shippingInfos.stream().map(ShippingInfo::getId).collect(Collectors.toList());
+            shippingInfoServiceImpl.delete(shippingIds);
+            // 鍒犻櫎閫�璐у彴璐﹁褰�
+            List<ReturnManagement> returnManagements = returnManagementMapper.selectList(new LambdaQueryWrapper<ReturnManagement>()
+                    .in(ReturnManagement::getShippingId, shippingIds));
+            if (CollectionUtils.isNotEmpty(returnManagements)) {
+                List<Long> returnIds = returnManagements.stream().map(ReturnManagement::getId).collect(Collectors.toList());
+                returnManagementService.delete(returnIds);
+            }
         }
+
         // 鍒犻櫎闄勪欢琛�
         commonFileService.deleteByBusinessIds(idList, FileNameType.SALE.getValue());
 
diff --git a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoDetailServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoDetailServiceImpl.java
index 53d28ae..f3e9e4d 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoDetailServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoDetailServiceImpl.java
@@ -6,6 +6,7 @@
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.other.service.impl.TempFileServiceImpl;
+import com.ruoyi.procurementrecord.service.impl.ReturnManagementServiceImpl;
 import com.ruoyi.sales.dto.ShippingInfoDto;
 import com.ruoyi.sales.pojo.ShippingInfo;
 import com.ruoyi.sales.pojo.ShippingInfoDetail;
@@ -48,11 +49,16 @@
     @Autowired
     private CommonFileServiceImpl commonFileService;
 
+    @Autowired
+    private ReturnManagementServiceImpl returnManagementService;
+
     @Override
     public IPage<ShippingInfoDetail> listPage(Page page, ShippingInfoDetail shippingInfoDetail) {
         IPage<ShippingInfoDetail> shippingInfoDetailIPage = shippingInfoDetailMapper.listPage(page, shippingInfoDetail);
         shippingInfoDetailIPage.getRecords().forEach(item ->{
             item.setCommonFileList(commonFileService.getFileListByBusinessId(item.getId(), FileNameType.SHIP.getValue()));
+            BigDecimal returnSaleProductCountByShippingId = returnManagementService.getReturnSaleProductCountByShippingId(Collections.singletonList(item.getId()));
+            item.setReturnTotal(returnSaleProductCountByShippingId);
         });
         return shippingInfoDetailIPage;
     }
@@ -76,6 +82,8 @@
         }else{
             shippingInfo.setStatus("鍙戣揣涓�");
         }
+        // 鎵e簱瀛�
+        shippingInfo.setShippingTotal(shippingInfoDetail.getShippingNum());
         shippingInfoService.deductStock(shippingInfo);
         // 杩佺Щ鏂囦欢
         if(CollectionUtils.isNotEmpty(shippingInfoDetail.getTempFileIds())){
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 d0587a9..21049c7 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
@@ -13,6 +13,7 @@
 import com.ruoyi.procurementrecord.mapper.ReturnSaleProductMapper;
 import com.ruoyi.procurementrecord.pojo.ReturnManagement;
 import com.ruoyi.procurementrecord.pojo.ReturnSaleProduct;
+import com.ruoyi.procurementrecord.service.impl.ReturnManagementServiceImpl;
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.sales.dto.SalesLedgerProductDto;
 import com.ruoyi.sales.dto.ShippingInfoDto;
@@ -67,6 +68,9 @@
     @Autowired
     private ReturnSaleProductMapper returnSaleProductMapper;
 
+    @Autowired
+    private ReturnManagementServiceImpl returnManagementService;
+
     @Override
     public List<SalesLedgerProductDto> getReturnManagementDtoById(Long shippingId) {
         return shippingInfoMapper.getReturnManagementDtoById(shippingId );
@@ -75,8 +79,6 @@
 
     /**
      * 鑾峰彇閿�鍞骇鍝佸崟鐨勫凡鍙戣揣鏁伴噺
-     * @param id
-     * @return
      */
     @Override
     public Map<String, BigDecimal> getNumberOfSalesLedgerProduct(Long salesLedgerProductId) {
@@ -109,6 +111,15 @@
     }
 
     @Override
+    public ShippingInfoDto getDateil(Long id) {
+        ShippingInfoDto shippingInfoDto =  shippingInfoMapper.getDateil(id);
+        if(shippingInfoDto != null){
+            assembleDetails(shippingInfoDto);
+        }
+        return shippingInfoDto;
+    }
+
+    @Override
     public List<ShippingInfo> getShippingInfoByCustomerName(String customerName) {
         return shippingInfoMapper.getShippingInfoByCustomerName(customerName);
     }
@@ -116,22 +127,35 @@
     @Override
     public IPage<ShippingInfoDto> listPage(Page page, ShippingInfo req) {
         IPage<ShippingInfoDto> listPage = shippingInfoMapper.listPage(page, req);
-        listPage.getRecords().forEach(item ->{
-            item.setCommonFileList(commonFileService.getFileListByBusinessId(item.getId(), FileNameType.SHIP.getValue()));
-            List<ShippingInfoDetail> shippingInfoDetails = shippingInfoDetailMapper.selectList(new LambdaQueryWrapper<ShippingInfoDetail>()
-                    .eq(ShippingInfoDetail::getShippingInfoId, item.getId()));
-            // 鏍稿績浼樺寲锛氬眰灞傞槻鎶ょ┖鎸囬拡 + 澶勭悊绌洪泦鍚堝満鏅�
-            item.setShippingSuccessTotal(Optional.ofNullable(shippingInfoDetails)
-                    .orElse(Collections.emptyList())
-                    .stream()
-                    .filter(Objects::nonNull)
-                    .map(ShippingInfoDetail::getShippingNum)
-                    .filter(Objects::nonNull)
-                    .reduce(BigDecimal.ZERO, BigDecimal::add)); // 鐢↙ambda鏇夸唬鏂规硶寮曠敤
-            item.setWaitShippingTotal(item.getShippingTotal().subtract(item.getShippingSuccessTotal()));
-
-        });
+        listPage.getRecords().forEach(this::assembleDetails);
         return listPage;
+    }
+
+
+    /**
+     * 灏佽璇︽儏
+     * @param item
+     */
+    public void assembleDetails(ShippingInfoDto item) {
+        item.setCommonFileList(commonFileService.getFileListByBusinessId(item.getId(), FileNameType.SHIP.getValue()));
+        List<ShippingInfoDetail> shippingInfoDetails = shippingInfoDetailMapper.selectList(new LambdaQueryWrapper<ShippingInfoDetail>()
+                .eq(ShippingInfoDetail::getShippingInfoId, item.getId()));
+        // 鏍稿績浼樺寲锛氬眰灞傞槻鎶ょ┖鎸囬拡 + 澶勭悊绌洪泦鍚堝満鏅�
+        item.setShippingSuccessTotal(Optional.ofNullable(shippingInfoDetails)
+                .orElse(Collections.emptyList())
+                .stream()
+                .filter(Objects::nonNull)
+                .map(ShippingInfoDetail::getShippingNum)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add)); // 鐢↙ambda鏇夸唬鏂规硶寮曠敤
+        item.setWaitShippingTotal(item.getShippingTotal().subtract(item.getShippingSuccessTotal()));
+        // 鏌ヨ閫�璐ф暟閲�
+        if(CollectionUtils.isNotEmpty(shippingInfoDetails)){
+            item.setReturnTotal(returnManagementService.getReturnSaleProductCountByShippingId(shippingInfoDetails
+                    .stream()
+                    .map(ShippingInfoDetail::getId)
+                    .collect(Collectors.toList())));
+        }
     }
 
     @Override
@@ -142,7 +166,7 @@
         }
         //鎵e噺搴撳瓨
         SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(byId.getSalesLedgerProductId());
-        stockUtils.substractStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId());
+        stockUtils.substractStock(salesLedgerProduct.getProductModelId(), req.getShippingTotal(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId());
         byId.setExpressNumber(req.getExpressNumber());
         byId.setExpressCompany(req.getExpressCompany());
         byId.setStatus(req.getStatus());
diff --git a/src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml b/src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml
index 71d38ea..8c66b7f 100644
--- a/src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml
@@ -19,7 +19,7 @@
                COALESCE(rs.total_return_num, 0)                             AS total_return_num
         FROM return_sale_product rsp
                  LEFT JOIN return_management rm ON rm.id = rsp.return_management_id
-                 LEFT JOIN shipping_info si ON si.id = rm.shipping_id
+                 LEFT JOIN shipping_info_detail si ON si.id = rm.shipping_id
                  LEFT JOIN sales_ledger_product slp ON si.sales_ledger_product_id = slp.id and slp.type = 1
                  LEFT JOIN (SELECT return_sale_ledger_product_id,
 
diff --git a/src/main/resources/mapper/sales/ShippingInfoMapper.xml b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
index 54c2608..9e28542 100644
--- a/src/main/resources/mapper/sales/ShippingInfoMapper.xml
+++ b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
@@ -32,6 +32,9 @@
         <if test="req.shippingCarNumber != null and req.shippingCarNumber != ''">
             AND s.shipping_car_number LIKE CONCAT('%',#{req.shippingCarNumber},'%')
         </if>
+        <if test="req.customerName != null and req.customerName != ''">
+            AND sl.customer_name LIKE CONCAT('%',#{req.customerName},'%')
+        </if>
         <if test="req.shippingNo != null and req.shippingNo != ''">
             AND s.shipping_no LIKE CONCAT('%',#{req.shippingNo},'%')
         </if>
@@ -60,7 +63,7 @@
         select *,sid.id as id from shipping_info_detail sid
             left join shipping_info si on si.id = sid.shipping_info_id
                           left join sales_ledger sl on si.sales_ledger_id = sl.id
-        where (si.status = '宸插彂璐�' or si.status = '鍙戣揣涓�') and sl.customer_name = #{customerName}
+        where (si.status = '宸插彂璐�' or si.status = '鍙戣揣涓�')  and (sid.status is null or sid.status != '宸查��璐�') and sl.customer_name = #{customerName}
     </select>
     <select id="getReturnManagementDtoById" resultType="com.ruoyi.sales.dto.SalesLedgerProductDto">
         SELECT
@@ -77,8 +80,12 @@
         FROM return_sale_product rsp
         left join return_management rm on rm.id = rsp.return_management_id
         left join shipping_info_detail si on si.id = rm.shipping_id
-        WHERE 1=1
-        GROUP BY return_sale_ledger_product_id
+        <where>
+            <if test="shippingId != null">
+                si.id = #{shippingId}
+            </if>
+        </where>
+        GROUP BY si.id
         ) rs ON rs.return_sale_ledger_product_id = slp.id
         <where>
             <if test="shippingId != null">
@@ -86,4 +93,29 @@
             </if>
         </where>
     </select>
+    <select id="getDateil" resultType="com.ruoyi.sales.dto.ShippingInfoDto" parameterType="java.lang.Long">
+        SELECT
+            s.id,
+            s.sales_ledger_id,
+            s.shipping_date,
+            s.shipping_car_number,
+            s.express_number,
+            s.express_company,
+            s.shipping_no,
+            s.type,
+            s.status,
+            s.create_time,
+            s.update_time,
+            s.create_user,
+            s.update_user,
+            s.tenant_id,
+            sl.sales_contract_no,
+            sl.customer_name,
+            s.shipping_total AS shipping_total,
+            slp.id as salesLedgerProductId
+        FROM shipping_info s
+                 LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
+                 LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id and slp.type = 1
+        WHERE s.id = #{id}
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/stock/StockInventoryMapper.xml b/src/main/resources/mapper/stock/StockInventoryMapper.xml
index 9baadb9..a1f65b0 100644
--- a/src/main/resources/mapper/stock/StockInventoryMapper.xml
+++ b/src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -72,7 +72,7 @@
         <if test="ew.productName != null and ew.productName !=''">
             and p.product_name like concat('%',#{ew.productName},'%')
         </if>
-        <if test="ew.productModelId != null and ew.productModelId !=''">
+        <if test="ew.productModelId != null">
             and pm.id = #{ew.productModelId}
         </if>
     </select>

--
Gitblit v1.9.3