From bee57301e2868fb64c998504794d17bb26bd71d2 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期二, 17 三月 2026 16:58:18 +0800
Subject: [PATCH] yys 1.需要加上库位,库位暂时分为外购、自制、委外三种类型 2.生产订单加上库存数量,方便实时查看 3.发货订单增加撤销功能

---
 src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java                                   |    1 
 src/main/java/com/ruoyi/stock/dto/StockOutRecordDto.java                                |    6 +
 src/main/java/com/ruoyi/production/dto/ProductOrderDto.java                             |    4 
 src/main/java/com/ruoyi/sales/service/ShippingInfoService.java                          |    9 +
 src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java                              |    8 +
 src/main/java/com/ruoyi/procurementrecord/pojo/ReturnSaleProduct.java                   |    2 
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java           |   46 +++++++
 src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java                 |   62 +++++++++
 src/main/java/com/ruoyi/sales/service/ISalesLedgerProductService.java                   |    1 
 src/main/java/com/ruoyi/basic/dto/ProductAndModelDto.java                               |    2 
 src/main/resources/application-dev.yml                                                  |    2 
 src/main/resources/mapper/stock/StockUninventoryMapper.xml                              |    2 
 src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java              |   54 ++++++--
 src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java                    |    6 +
 src/main/java/com/ruoyi/procurementrecord/service/ReturnManagementService.java          |    2 
 src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java            |   18 ++
 src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java                                |    5 
 src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml                  |    6 
 src/main/resources/mapper/stock/StockOutRecordMapper.xml                                |    1 
 src/main/resources/mapper/stock/StockInventoryMapper.xml                                |    5 
 src/main/java/com/ruoyi/stock/dto/StockUninventoryDto.java                              |    4 
 src/main/resources/mapper/sales/ShippingInfoMapper.xml                                  |   34 +++++
 src/main/resources/mapper/stock/StockInRecordMapper.xml                                 |    1 
 src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java                                    |    2 
 src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java                                 |    5 
 src/main/java/com/ruoyi/sales/dto/SalesLedgerProductDto.java                            |   16 ++
 src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java |   15 ++
 src/main/java/com/ruoyi/production/controller/ProductOrderController.java               |    4 
 src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java                    |    2 
 src/main/java/com/ruoyi/sales/mapper/ShippingInfoMapper.java                            |    5 
 30 files changed, 291 insertions(+), 39 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/dto/ProductAndModelDto.java b/src/main/java/com/ruoyi/basic/dto/ProductAndModelDto.java
index 18d15aa..8c1865f 100644
--- a/src/main/java/com/ruoyi/basic/dto/ProductAndModelDto.java
+++ b/src/main/java/com/ruoyi/basic/dto/ProductAndModelDto.java
@@ -44,7 +44,7 @@
 
 
     /**
-     * 浜у搧绫诲瀷(1-鐗╂枡,2-浜у搧)
+     * 浜у搧绫诲瀷(1=鑷埗,2=澶栬喘,3=濮斿)
      */
     @ApiModelProperty(value = "1=鑷埗,2=澶栬喘,3=濮斿")
     private Integer productType;
diff --git a/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java b/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java
index ab08a34..25071a0 100644
--- a/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java
+++ b/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java
@@ -60,7 +60,7 @@
     @ApiModelProperty("缁撶畻浜�")
     private String settler;
 
-    @ApiModelProperty("鐘舵��")
+    @ApiModelProperty("鐘舵�� 0-寰呭鐞�  1-宸插鐞�  2-宸叉挙閿�")
     private Integer status;
 
     @ApiModelProperty("鍒涘缓鏃堕棿")
diff --git a/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnSaleProduct.java b/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnSaleProduct.java
index 89eeab9..205f388 100644
--- a/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnSaleProduct.java
+++ b/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnSaleProduct.java
@@ -49,7 +49,7 @@
     @ApiModelProperty("閫�璐т骇鍝侀噾棰�")
     private BigDecimal amount;
 
-    @ApiModelProperty("閫�璐х姸鎬� 0 鏈��鍥� 1宸查��璐�")
+    @ApiModelProperty("閫�璐х姸鎬� 0 鏈��鍥� 1宸查��璐� 2-宸叉挙閿�")
     private Integer status;
 
     @ApiModelProperty("澶囨敞")
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/ReturnManagementService.java b/src/main/java/com/ruoyi/procurementrecord/service/ReturnManagementService.java
index 1a2de96..0214d25 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/ReturnManagementService.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/ReturnManagementService.java
@@ -7,6 +7,8 @@
 import com.ruoyi.procurementrecord.pojo.ReturnManagement;
 import com.ruoyi.sales.dto.SalesLedgerDto;
 
+import java.math.BigDecimal;
+
 /**
  * @author :yys
  * @date : 2025/9/17 10:33
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 c3e2b8f..74196ea 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java
@@ -1,5 +1,6 @@
 package com.ruoyi.procurementrecord.service.impl;
 
+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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -18,9 +19,12 @@
 import com.ruoyi.procurementrecord.service.ReturnSaleProductService;
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.sales.dto.SalesLedgerDto;
+import com.ruoyi.sales.dto.SalesLedgerProductDto;
 import com.ruoyi.sales.mapper.SalesLedgerMapper;
 import com.ruoyi.sales.pojo.SalesLedger;
 import com.ruoyi.sales.pojo.ShippingInfo;
+import com.ruoyi.sales.pojo.ShippingInfoDetail;
+import com.ruoyi.sales.service.ShippingInfoDetailService;
 import com.ruoyi.sales.service.ShippingInfoService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
@@ -46,6 +50,8 @@
 
     @Autowired
     private ReturnSaleProductService returnSaleProductService;
+    @Autowired
+    private ShippingInfoDetailService shippingInfoDetailService;
     @Autowired
     private ShippingInfoService shippingInfoService;
     @Autowired
@@ -94,13 +100,13 @@
 
     @Override
     public SalesLedgerDto getReturnManagementDtoByShippingIdId(Long shippingId) {
-        ShippingInfo byId = shippingInfoService.getById(shippingId);
+        ShippingInfoDetail byId = shippingInfoDetailService.getById(shippingId);
         SalesLedger salesLedger = salesLedgerMapper.selectById(byId.getSalesLedgerId());
         SalesLedgerDto salesLedgerDto = new SalesLedgerDto();
         BeanUtils.copyProperties(salesLedger, salesLedgerDto);
 
-//        List<SalesLedgerProductDto> salesLedgerProductDtos = shippingInfoService.getReturnManagementDtoById(byId.getId());
-//        salesLedgerDto.setProductDtoData(salesLedgerProductDtos);
+        List<SalesLedgerProductDto> salesLedgerProductDtos = shippingInfoService.getReturnManagementDtoById(byId.getId());
+        salesLedgerDto.setProductDtoData(salesLedgerProductDtos);
          return salesLedgerDto;
     }
 
@@ -127,6 +133,8 @@
                 // 鏃犺川閲忛棶棰橈紝鍏ュ悎鏍煎簱
                 stockUtils.addStock(returnSaleProduct.getProductModelId(),returnSaleProduct.getNum(), StockInQualifiedRecordTypeEnum.RETURN_HE_IN.getCode(),returnSaleProduct.getId());
             }
+            returnSaleProduct.setStatus(1);
+            returnSaleProductService.updateById(returnSaleProduct);
         }
 //        salesRefundAmountOrder.setRefundAmount(bigDecimal);
 //        salesRefundAmountOrder.setNotRefundedAmount(salesRefundAmountOrder.getRefundedAmount());
@@ -155,4 +163,5 @@
         return returnManagementDtoById;
     }
 
+
 }
diff --git a/src/main/java/com/ruoyi/production/controller/ProductOrderController.java b/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
index 4cb0c68..9acc6b1 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
@@ -19,7 +19,7 @@
 import java.math.BigDecimal;
 import java.util.List;
 
-@RequestMapping("productOrder")
+@RequestMapping("/productOrder")
 @RestController
 @Api(tags = "鐢熶骇璁㈠崟")
 public class ProductOrderController {
@@ -88,7 +88,7 @@
 
 
     @ApiOperation("鏂板鐢熶骇璁㈠崟")
-    @PostMapping("addProductOrder")
+    @PostMapping("/addProductOrder")
     public R addProductOrder(@RequestBody ProductOrder productOrder) {
         return R.ok(productOrderService.addProductOrder(productOrder));
     }
diff --git a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
index f4aa238..068f344 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
@@ -60,4 +60,8 @@
 
     //鏄惁鍙戣揣(鍙拌处椤甸潰棰滆壊鎺у埗)
     private Boolean isFh;
+
+    @ApiModelProperty(value = "搴撳瓨鏁伴噺")
+    @Excel(name = "搴撳瓨鏁伴噺")
+    private BigDecimal inventoryQuantity;
 }
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 2ef08c1..9e03eec 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -16,6 +16,8 @@
 import com.ruoyi.production.service.ProductOrderService;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
 import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.stock.dto.StockInventoryDto;
+import com.ruoyi.stock.service.impl.StockInventoryServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -64,9 +66,23 @@
     @Autowired
     private StockUtils stockUtils;
 
+    @Autowired
+    private StockInventoryServiceImpl stockInventoryService;
+
     @Override
     public IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder) {
-        return productOrderMapper.pageProductOrder(page, productOrder);
+        IPage<ProductOrderDto> productOrderDtoIPage = productOrderMapper.pageProductOrder(page, productOrder);
+        productOrderDtoIPage.getRecords().forEach(productOrderDto -> {
+            // 鑾峰彇浜у搧鍚堟牸搴撳瓨
+            StockInventoryDto stockInventoryDto = new StockInventoryDto();
+            stockInventoryDto.setProductModelId(productOrderDto.getProductModelId());
+            Page page1 = new Page<>(1,1);
+            IPage<StockInventoryDto> stockInventoryDtoIPage = stockInventoryService.pagestockInventory(page1,stockInventoryDto);
+            if(stockInventoryDtoIPage.getTotal() > 0){
+                productOrderDto.setInventoryQuantity(stockInventoryDtoIPage.getRecords().get(0).getQualitity());
+            }
+        });
+        return productOrderDtoIPage;
     }
 
     @Override
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
index 8632313..bb63617 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
@@ -2,18 +2,28 @@
 
 import javax.servlet.http.HttpServletResponse;
 
+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.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.domain.R;
 import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
 import com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy;
+import com.ruoyi.procurementrecord.mapper.ReturnManagementMapper;
+import com.ruoyi.procurementrecord.mapper.ReturnSaleProductMapper;
 import com.ruoyi.procurementrecord.service.ProcurementRecordService;
+import com.ruoyi.procurementrecord.service.ReturnManagementService;
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.sales.dto.SalesLedgerProductDto;
+import com.ruoyi.sales.mapper.ShippingInfoDetailMapper;
+import com.ruoyi.sales.mapper.ShippingInfoMapper;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import com.ruoyi.sales.pojo.ShippingInfoDetail;
 import com.ruoyi.sales.service.ISalesLedgerProductService;
+import com.ruoyi.sales.service.ShippingInfoService;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.DeleteMapping;
@@ -29,6 +39,7 @@
 
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 浜у搧淇℃伅Controller
@@ -46,6 +57,12 @@
     private ProcurementRecordService procurementRecordService;
     @Autowired
     private StockUtils stockUtils;
+
+    @Autowired
+    private ShippingInfoService shippingInfoService;
+
+    @Autowired
+    private ReturnManagementService returnManagementService;
 
 
     /**
@@ -67,6 +84,14 @@
         return AjaxResult.success(list);
     }
 
+    @ApiOperation("鍙戣揣閫�璐ф挙閿�")
+    @PostMapping("/cancelDelivery")
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult cancelDelivery(@RequestBody SalesLedgerProduct salesLedgerProduct) {
+        return AjaxResult.success(salesLedgerProductService.cancelDelivery(salesLedgerProduct));
+    }
+
+
 
     /**
      * 鏌ヨ浜у搧淇℃伅鍒楄〃
@@ -76,26 +101,23 @@
     {
         List<SalesLedgerProduct> list = salesLedgerProductService.selectSalesLedgerProductList(salesLedgerProduct);
         list.forEach(item -> {
-                if (item.getFutureTickets().compareTo(BigDecimal.ZERO) == 0) {
-                    item.setFutureTickets(item.getQuantity());
-                }
+           // 鑾峰彇鍙戣揣鏁伴噺,閫�璐ф暟閲�
+           Map<String, BigDecimal> map = shippingInfoService.getNumberOfSalesLedgerProduct(item.getId());
+           item.setShippingNum(map.get("shippingNum"));
+           item.setReturnNum(map.get("returnNum"));
+            if (item.getFutureTickets().compareTo(BigDecimal.ZERO) == 0) {
+                item.setFutureTickets(item.getQuantity());
+            }
             if (item.getFutureTicketsAmount().compareTo(BigDecimal.ZERO) == 0) {
                 item.setFutureTicketsAmount(item.getTaxInclusiveTotalPrice());
             }
-//            ProcurementPageDto procurementDto = new ProcurementPageDto();
-//            procurementDto.setSalesLedgerProductId(item.getId());
-//            procurementDto.setProductCategory(item.getProductCategory());
-//            IPage<ProcurementPageDtoCopy> result = procurementRecordService.listPageCopyByProduction(new Page<>(1,-1), procurementDto);
-//            BigDecimal stockQuantity = stockUtils.getStockQuantity(item.getProductModelId()).get("stockQuantity");
-
-//                ProcurementPageDtoCopy procurementDtoCopy = result.getRecords().get(0);
-                if (item.getApproveStatus() != 2) {
-                    if (item.getHasSufficientStock() == 0) {
-                        item.setApproveStatus(0);
-                    }else {
-                        item.setApproveStatus(1);
-                    }
+            if (item.getApproveStatus() != 2) {
+                if (item.getHasSufficientStock() == 0) {
+                    item.setApproveStatus(0);
+                }else {
+                    item.setApproveStatus(1);
                 }
+            }
         });
         return AjaxResult.success(list);
     }
diff --git a/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java b/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
index 0cf0797..2f77dc4 100644
--- a/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
+++ b/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
@@ -60,6 +60,12 @@
     @Autowired
     private StockUtils stockUtils;
 
+    @GetMapping("/getByCustomerName")
+    @ApiOperation("閫氳繃瀹㈡埛鍚嶇О鏌ヨ")
+    public AjaxResult getByCustomerName(String customerName) {
+        return AjaxResult.success(shippingInfoService.getShippingInfoByCustomerName(customerName));
+    }
+
 
     @GetMapping("/listPage")
     @ApiOperation("鍙戣揣淇℃伅鍒楄〃")
diff --git a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
index 78169a0..05bd888 100644
--- a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
@@ -43,6 +43,7 @@
 
     private Boolean hasChildren = false;
     private List<SalesLedgerProduct> productData;
+    private List<SalesLedgerProductDto> productDtoData;
     private List<String> tempFileIds;
     private List<CommonFile> SalesLedgerFiles;
 
diff --git a/src/main/java/com/ruoyi/sales/dto/SalesLedgerProductDto.java b/src/main/java/com/ruoyi/sales/dto/SalesLedgerProductDto.java
index 41b380a..e76030d 100644
--- a/src/main/java/com/ruoyi/sales/dto/SalesLedgerProductDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/SalesLedgerProductDto.java
@@ -3,6 +3,7 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 
@@ -13,6 +14,15 @@
 
 @Data
 public class SalesLedgerProductDto extends SalesLedgerProduct {
+
+    /**
+     * 涓氬姟鍛�
+     */
+    private String salesman;
+    /**
+     * 鍙戣揣鏁伴噺
+     */
+    private BigDecimal shippingNum;
 
     /**
      * 閲囪喘鍚堝悓鍙�
@@ -57,4 +67,10 @@
 
     private Integer approvalStatus;
 
+    @ApiModelProperty(value = "鏈��璐ф暟")
+    private BigDecimal unQuantity;
+
+    @ApiModelProperty(value = "閫�璐ф�绘暟")
+    private BigDecimal totalReturnNum;
+
 }
diff --git a/src/main/java/com/ruoyi/sales/mapper/ShippingInfoMapper.java b/src/main/java/com/ruoyi/sales/mapper/ShippingInfoMapper.java
index 9ab16d5..4b74ed9 100644
--- a/src/main/java/com/ruoyi/sales/mapper/ShippingInfoMapper.java
+++ b/src/main/java/com/ruoyi/sales/mapper/ShippingInfoMapper.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.sales.dto.SalesLedgerProductDto;
 import com.ruoyi.sales.dto.ShippingInfoDto;
 import com.ruoyi.sales.pojo.ShippingInfo;
 import org.apache.ibatis.annotations.Param;
@@ -17,4 +18,8 @@
     IPage<ShippingInfoDto> listPage(Page page, @Param("req") ShippingInfo req);
 
     List<ShippingInfo> listAll();
+
+    List<ShippingInfo> getShippingInfoByCustomerName(String customerName);
+
+    List<SalesLedgerProductDto> getReturnManagementDtoById(@Param("shippingId")Long shippingId);
 }
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
index 1df16bd..0947aa4 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -235,4 +235,12 @@
 
     @TableField(exist = false)
     private Integer hasSufficientStock;
+
+    @ApiModelProperty(value = "鍙戣揣鏁伴噺")
+    @TableField(exist = false)
+    private BigDecimal shippingNum;
+
+    @ApiModelProperty(value = "閫�璐ф暟閲�")
+    @TableField(exist = false)
+    private BigDecimal returnNum;
 }
diff --git a/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java b/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
index 4bd72bc..86fab48 100644
--- a/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
+++ b/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
@@ -38,7 +38,7 @@
     @ApiModelProperty(value = "閿�鍞姤浠蜂骇鍝佽〃id")
     private Long salesLedgerProductId;
 
-    @ApiModelProperty(value = "鐘舵�� 寰呭鏍� 瀹℃牳涓� 锛屽鏍告嫆缁� 瀹℃牳閫氳繃 宸插彂璐�")
+    @ApiModelProperty(value = "鐘舵�� 寰呭鏍� 瀹℃牳涓� 锛屽鏍告嫆缁� 瀹℃牳閫氳繃 鍙戣揣涓� 宸插彂璐� 宸叉挙閿�")
     @Excel(name = "鐘舵��")
     private String status;
 
diff --git a/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductService.java b/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductService.java
index 47e0616..bd02e21 100644
--- a/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductService.java
+++ b/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductService.java
@@ -31,4 +31,5 @@
 
     R judgmentInventory(SalesLedgerProduct salesLedgerProduct);
 
+    String cancelDelivery(SalesLedgerProduct salesLedgerProduct);
 }
diff --git a/src/main/java/com/ruoyi/sales/service/ShippingInfoService.java b/src/main/java/com/ruoyi/sales/service/ShippingInfoService.java
index d9a3a8c..fbd1d19 100644
--- a/src/main/java/com/ruoyi/sales/service/ShippingInfoService.java
+++ b/src/main/java/com/ruoyi/sales/service/ShippingInfoService.java
@@ -3,11 +3,14 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.sales.dto.SalesLedgerProductDto;
 import com.ruoyi.sales.dto.ShippingInfoDto;
 import com.ruoyi.sales.pojo.ShippingInfo;
 
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author :yys
@@ -19,4 +22,10 @@
     boolean deductStock(ShippingInfoDto req) throws IOException;
 
     boolean delete(List<Long> ids);
+
+    List<ShippingInfo> getShippingInfoByCustomerName(String customerName);
+
+    List<SalesLedgerProductDto> getReturnManagementDtoById(Long id);
+
+    Map<String ,BigDecimal> getNumberOfSalesLedgerProduct(Long id);
 }
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..ade3d09 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -9,6 +9,10 @@
 import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
 import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
 import com.ruoyi.framework.web.domain.R;
+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.utils.StockUtils;
 import com.ruoyi.production.dto.ProductStructureDto;
 import com.ruoyi.production.mapper.*;
@@ -81,6 +85,9 @@
     private QualityInspectMapper qualityInspectMapper;
     private ShippingInfoMapper shippingInfoMapper;
     private ShippingInfoServiceImpl shippingInfoService;
+    private ReturnSaleProductMapper returnSaleProductMapper;
+    private ReturnManagementMapper returnManagementMapper;
+
 
     private StockUtils stockUtils;
 
@@ -100,9 +107,6 @@
 
     @Override
     public List<SalesLedgerProduct> selectSalesLedgerProductList(SalesLedgerProduct salesLedgerProduct) {
-//        LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
-//        queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId())
-//                .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType());
         List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectSalesLedgerProductList(salesLedgerProduct);
         if(!CollectionUtils.isEmpty(salesLedgerProducts)){
             salesLedgerProducts.forEach(item -> {
@@ -523,4 +527,40 @@
             return R.ok();
         }
     }
+
+    @Override
+    public String cancelDelivery(SalesLedgerProduct salesLedgerProduct) {
+        List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new QueryWrapper<ShippingInfo>()
+                .lambda()
+                .eq(ShippingInfo::getSalesLedgerProductId, salesLedgerProduct.getId())
+                .in(ShippingInfo::getStatus, "宸插彂璐�", "鍙戣揣涓�"));
+        if(CollectionUtils.isEmpty(shippingInfos)){
+            throw new RuntimeException("娌℃湁鍙彇娑堢殑鍙戣揣淇℃伅");
+        }
+        shippingInfos.forEach(item -> {
+            item.setStatus("宸叉挙閿�");
+            shippingInfoMapper.updateById(item);
+        });
+        List<ReturnSaleProduct> returnSaleProducts = returnSaleProductMapper.selectList(new LambdaQueryWrapper<ReturnSaleProduct>()
+                .eq(ReturnSaleProduct::getReturnSaleLedgerProductId, salesLedgerProduct.getId())
+                .eq(ReturnSaleProduct::getStatus, 1));
+        if(CollectionUtils.isEmpty(returnSaleProducts)){
+            throw new RuntimeException("娌℃湁鍙彇娑堢殑閫�璐т俊鎭�");
+        }
+        returnSaleProducts.forEach(item -> {
+            item.setStatus(2);
+            returnSaleProductMapper.updateById(item);
+        });
+        List<ReturnManagement> returnManagements = returnManagementMapper.selectList(new QueryWrapper<ReturnManagement>()
+                .lambda()
+                .in(ReturnManagement::getId, returnSaleProducts.stream().map(ReturnSaleProduct::getReturnManagementId).collect(Collectors.toSet())));
+        if(CollectionUtils.isEmpty(returnManagements)){
+            throw new RuntimeException("娌℃湁鍙彇娑堢殑閫�璐т俊鎭�");
+        }
+        returnManagements.forEach(item -> {
+            item.setStatus(2);
+            returnManagementMapper.updateById(item);
+        });
+        return "鎾ら攢鎴愬姛";
+    }
 }
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 c33bb62..d0587a9 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
@@ -9,7 +9,12 @@
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
 import com.ruoyi.other.service.impl.TempFileServiceImpl;
+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.utils.StockUtils;
+import com.ruoyi.sales.dto.SalesLedgerProductDto;
 import com.ruoyi.sales.dto.ShippingInfoDto;
 import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
 import com.ruoyi.sales.mapper.ShippingInfoDetailMapper;
@@ -26,10 +31,7 @@
 
 import java.io.IOException;
 import java.math.BigDecimal;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -59,6 +61,58 @@
     @Autowired
     private ShippingInfoDetailService shippingInfoDetailService;
 
+    @Autowired
+    private ReturnManagementMapper returnManagementMapper;
+
+    @Autowired
+    private ReturnSaleProductMapper returnSaleProductMapper;
+
+    @Override
+    public List<SalesLedgerProductDto> getReturnManagementDtoById(Long shippingId) {
+        return shippingInfoMapper.getReturnManagementDtoById(shippingId );
+
+    }
+
+    /**
+     * 鑾峰彇閿�鍞骇鍝佸崟鐨勫凡鍙戣揣鏁伴噺
+     * @param id
+     * @return
+     */
+    @Override
+    public Map<String, BigDecimal> getNumberOfSalesLedgerProduct(Long salesLedgerProductId) {
+        Map<String, BigDecimal> map = new HashMap<>();
+        map.put("shippingNum",BigDecimal.ZERO); // 鍙戣揣鏁伴噺
+        map.put("returnNum",BigDecimal.ZERO); // 閫�璐ф暟閲�
+        List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()
+                .eq(ShippingInfo::getSalesLedgerProductId, salesLedgerProductId)
+                // 鍙瓫閫夆�滃彂璐т腑鈥濆拰鈥滃凡鍙戣揣鈥濅袱绉嶇姸鎬�
+                .in(ShippingInfo::getStatus, "鍙戣揣涓�", "宸插彂璐�"));
+        if(CollectionUtils.isEmpty(shippingInfos)){
+            return map;
+        }
+        List<ShippingInfoDetail> shippingInfoDetails = shippingInfoDetailMapper.selectList(new LambdaQueryWrapper<ShippingInfoDetail>()
+                .in(ShippingInfoDetail::getShippingInfoId, shippingInfos.stream().map(ShippingInfo::getId).collect(Collectors.toList())));
+        if(CollectionUtils.isEmpty(shippingInfoDetails)){
+            return map;
+        }
+        // 鑾峰彇鍙戣揣鏁伴噺
+        map.put("shippingNum",shippingInfoDetails.stream().map(ShippingInfoDetail::getShippingNum).reduce(BigDecimal.ZERO, BigDecimal::add));
+        // 鑾峰彇閫�璐ф暟閲�
+        List<ReturnSaleProduct> returnSaleProducts = returnSaleProductMapper.selectList(new LambdaQueryWrapper<ReturnSaleProduct>()
+                .eq(ReturnSaleProduct::getReturnSaleLedgerProductId, salesLedgerProductId)
+                .eq(ReturnSaleProduct::getStatus,1));
+        if(CollectionUtils.isEmpty(returnSaleProducts)){
+            return map;
+        }
+        map.put("returnNum",returnSaleProducts.stream().map(ReturnSaleProduct::getNum).reduce(BigDecimal.ZERO, BigDecimal::add));
+        return map;
+    }
+
+    @Override
+    public List<ShippingInfo> getShippingInfoByCustomerName(String customerName) {
+        return shippingInfoMapper.getShippingInfoByCustomerName(customerName);
+    }
+
     @Override
     public IPage<ShippingInfoDto> listPage(Page page, ShippingInfo req) {
         IPage<ShippingInfoDto> listPage = shippingInfoMapper.listPage(page, req);
diff --git a/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java b/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java
index 9f47fd6..cabba21 100644
--- a/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java
+++ b/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java
@@ -7,6 +7,11 @@
 @Data
 public class StockInRecordDto extends StockInRecord {
     /**
+     * 浜у搧灞炴�� 1=鑷埗,2=澶栬喘,3=濮斿
+     */
+    private Integer productType;
+
+    /**
      * 浜у搧鍚嶇О
      */
     private String productName;
diff --git a/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java b/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
index 125b52b..461c0a3 100644
--- a/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
+++ b/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
@@ -11,6 +11,11 @@
 @Data
 public class StockInventoryDto extends StockInventory {
 
+    /**
+     * 浜у搧灞炴�� 1=鑷埗,2=澶栬喘,3=濮斿
+     */
+    private Integer productType;
+
     private String productName;
     private String model;
     private String unit;
diff --git a/src/main/java/com/ruoyi/stock/dto/StockOutRecordDto.java b/src/main/java/com/ruoyi/stock/dto/StockOutRecordDto.java
index 3e3abf9..a4a9bd9 100644
--- a/src/main/java/com/ruoyi/stock/dto/StockOutRecordDto.java
+++ b/src/main/java/com/ruoyi/stock/dto/StockOutRecordDto.java
@@ -9,6 +9,12 @@
 @AllArgsConstructor
 @NoArgsConstructor
 public class StockOutRecordDto extends StockOutRecord {
+
+    /**
+     * 浜у搧灞炴�� 1=鑷埗,2=澶栬喘,3=濮斿
+     */
+    private Integer productType;
+
     /**
      * 浜у搧鍚嶇О
      */
diff --git a/src/main/java/com/ruoyi/stock/dto/StockUninventoryDto.java b/src/main/java/com/ruoyi/stock/dto/StockUninventoryDto.java
index 404c58a..9dc756f 100644
--- a/src/main/java/com/ruoyi/stock/dto/StockUninventoryDto.java
+++ b/src/main/java/com/ruoyi/stock/dto/StockUninventoryDto.java
@@ -7,6 +7,10 @@
 
 @Data
 public class StockUninventoryDto  extends StockUninventory {
+    /**
+     * 浜у搧灞炴�� 1=鑷埗,2=澶栬喘,3=濮斿
+     */
+    private Integer productType;
     private String productName;
     private String model;
     private String unit;
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 40dc00c..76a1144 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -64,7 +64,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://localhost:3306/product-inventory-management-new?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://localhost:3306/product-inventory-management-jtwy?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: 123456
       # 浠庡簱鏁版嵁婧�
diff --git a/src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml b/src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml
index 1b84282..93a70be 100644
--- a/src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml
@@ -10,7 +10,8 @@
                sl.sales_contract_no,
                sl.salesman
         from return_management rm
-                 left join shipping_info si on rm.shipping_id = si.id
+                 left join shipping_info_detail sii on rm.shipping_id = sii.id
+                 left join shipping_info si on sii.shipping_info_id = si.id
                  left join customer c on rm.customer_id = c.id
                  left join sales_ledger sl on si.sales_ledger_id = sl.id
         <where>
@@ -48,7 +49,8 @@
                sl.sales_contract_no,
                sl.salesman
         from return_management rm
-                 left join shipping_info si on rm.shipping_id = si.id
+                 left join shipping_info_detail sii on rm.shipping_id = sii.id
+                 left join shipping_info si on sii.shipping_info_id = si.id
                  left join customer c on rm.customer_id = c.id
                  left join sales_ledger sl on si.sales_ledger_id = sl.id
         where rm.id = #{id}
diff --git a/src/main/resources/mapper/sales/ShippingInfoMapper.xml b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
index 828178d..54c2608 100644
--- a/src/main/resources/mapper/sales/ShippingInfoMapper.xml
+++ b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
@@ -20,9 +20,11 @@
         s.tenant_id,
         sl.sales_contract_no,
         sl.customer_name,
-        s.shipping_total AS shipping_total
+        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 1=1
         <if test="req.salesContractNo != null and req.salesContractNo != ''">
             AND sl.sales_contract_no LIKE CONCAT('%',#{req.salesContractNo},'%')
@@ -54,4 +56,34 @@
         FROM shipping_info s
                  LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
     </select>
+    <select id="getShippingInfoByCustomerName" resultType="com.ruoyi.sales.pojo.ShippingInfo">
+        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}
+    </select>
+    <select id="getReturnManagementDtoById" resultType="com.ruoyi.sales.dto.SalesLedgerProductDto">
+        SELECT
+        slp.*,
+        si.shipping_num,
+        GREATEST(si.shipping_num - COALESCE(rs.total_return_num, 0), 0) AS un_quantity,
+        COALESCE(rs.total_return_num, 0) AS total_return_num
+        FROM shipping_info_detail si
+        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,
+        SUM(num) 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_detail si on si.id = rm.shipping_id
+        WHERE 1=1
+        GROUP BY return_sale_ledger_product_id
+        ) rs ON rs.return_sale_ledger_product_id = slp.id
+        <where>
+            <if test="shippingId != null">
+                si.id = #{shippingId}
+            </if>
+        </where>
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/stock/StockInRecordMapper.xml b/src/main/resources/mapper/stock/StockInRecordMapper.xml
index d5c3f38..fc2b81d 100644
--- a/src/main/resources/mapper/stock/StockInRecordMapper.xml
+++ b/src/main/resources/mapper/stock/StockInRecordMapper.xml
@@ -14,6 +14,7 @@
         LEFT JOIN product as p on pm.product_id = p.id
         LEFT JOIN sys_user as u on sir.create_user = u.user_id
         <where>
+            pm.product_type = #{params.productType}
             <if test="params.timeStr != null and params.timeStr != ''">
                 and sir.create_time like concat('%',#{params.timeStr},'%')
             </if>
diff --git a/src/main/resources/mapper/stock/StockInventoryMapper.xml b/src/main/resources/mapper/stock/StockInventoryMapper.xml
index 7fe1f4f..9baadb9 100644
--- a/src/main/resources/mapper/stock/StockInventoryMapper.xml
+++ b/src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -68,10 +68,13 @@
         from stock_inventory si
         left join product_model pm on si.product_model_id = pm.id
         left join product p on pm.product_id = p.id
-        where 1 = 1
+        where pm.product_type = #{ew.productType}
         <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 !=''">
+            and pm.id = #{ew.productModelId}
+        </if>
     </select>
     <select id="listStockInventoryExportData" resultType="com.ruoyi.stock.execl.StockInventoryExportData">
         select si.qualitity,
diff --git a/src/main/resources/mapper/stock/StockOutRecordMapper.xml b/src/main/resources/mapper/stock/StockOutRecordMapper.xml
index a441de9..122bb4c 100644
--- a/src/main/resources/mapper/stock/StockOutRecordMapper.xml
+++ b/src/main/resources/mapper/stock/StockOutRecordMapper.xml
@@ -29,6 +29,7 @@
         LEFT JOIN product as p on pm.product_id = p.id
         LEFT JOIN sys_user as u on sor.create_user = u.user_id
         <where>
+            pm.product_type = #{params.productType}
             <if test="params.timeStr != null and params.timeStr != ''">
                 and sor.create_time like concat('%',#{params.timeStr},'%')
             </if>
diff --git a/src/main/resources/mapper/stock/StockUninventoryMapper.xml b/src/main/resources/mapper/stock/StockUninventoryMapper.xml
index b171ae2..d72b6cb 100644
--- a/src/main/resources/mapper/stock/StockUninventoryMapper.xml
+++ b/src/main/resources/mapper/stock/StockUninventoryMapper.xml
@@ -59,7 +59,7 @@
         from stock_uninventory su
         left join product_model pm on su.product_model_id = pm.id
         left join product p on pm.product_id = p.id
-        where 1 = 1
+        where pm.product_type = #{ew.productType}
         <if test="ew.productName != null and ew.productName !=''">
             and p.product_name like concat('%',#{ew.productName},'%')
         </if>

--
Gitblit v1.9.3