From ca29295ad071862ffef46bbcced489a4b960233f Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期五, 06 三月 2026 15:01:34 +0800
Subject: [PATCH] 销售退货模块接口开发

---
 src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java                                    |    1 
 src/main/java/com/ruoyi/procurementrecord/controller/ReturnSaleProductController.java    |   18 +
 src/main/java/com/ruoyi/procurementrecord/service/ReturnManagementService.java           |   14 +
 src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml                   |   50 ++++
 src/main/java/com/ruoyi/procurementrecord/dto/ReturnManagementDto.java                   |   48 ++++
 src/main/java/com/ruoyi/procurementrecord/mapper/ReturnSaleProductMapper.java            |   23 ++
 src/main/java/com/ruoyi/sales/service/ShippingInfoService.java                           |    6 
 src/main/java/com/ruoyi/procurementrecord/mapper/ReturnManagementMapper.java             |    5 
 src/main/resources/mapper/sales/ShippingInfoMapper.xml                                   |   25 ++
 src/main/java/com/ruoyi/procurementrecord/dto/ReturnSaleProductDto.java                  |   19 +
 src/main/java/com/ruoyi/procurementrecord/pojo/ReturnSaleProduct.java                    |   44 ++++
 src/main/java/com/ruoyi/sales/dto/SalesLedgerProductDto.java                             |    8 
 src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java  |   93 +++++++++
 src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java                  |   13 +
 src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java                     |   57 ++---
 src/main/java/com/ruoyi/sales/mapper/ShippingInfoMapper.java                             |    8 
 src/main/java/com/ruoyi/procurementrecord/service/ReturnSaleProductService.java          |   20 ++
 src/main/java/com/ruoyi/procurementrecord/controller/ReturnManagementController.java     |   61 ++++-
 src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnSaleProductServiceImpl.java |   32 +++
 src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java                     |    6 
 src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml                  |   23 ++
 21 files changed, 517 insertions(+), 57 deletions(-)

diff --git a/src/main/java/com/ruoyi/procurementrecord/controller/ReturnManagementController.java b/src/main/java/com/ruoyi/procurementrecord/controller/ReturnManagementController.java
index 3cb1e59..ebafe40 100644
--- a/src/main/java/com/ruoyi/procurementrecord/controller/ReturnManagementController.java
+++ b/src/main/java/com/ruoyi/procurementrecord/controller/ReturnManagementController.java
@@ -1,14 +1,20 @@
 package com.ruoyi.procurementrecord.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.utils.OrderUtils;
 import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.procurementrecord.dto.ReturnManagementDto;
 import com.ruoyi.procurementrecord.mapper.ReturnManagementMapper;
 import com.ruoyi.procurementrecord.pojo.ReturnManagement;
+import com.ruoyi.procurementrecord.pojo.ReturnSaleProduct;
 import com.ruoyi.procurementrecord.service.ReturnManagementService;
+import com.ruoyi.procurementrecord.service.ReturnSaleProductService;
+import com.ruoyi.procurementrecord.service.impl.ReturnSaleProductServiceImpl;
+import com.ruoyi.sales.dto.SalesLedgerDto;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,48 +28,69 @@
  * @date : 2025/9/17 10:34
  */
 @RestController
-@Api(tags = "鍒拌揣绠$悊")
+@Api(tags = "閿�鍞��璐�")
 @RequestMapping("/returnManagement")
 public class ReturnManagementController extends BaseController {
 
     @Autowired
     private ReturnManagementService returnManagementService;
-
     @Autowired
-    private ReturnManagementMapper returnManagementMapper;
+    private ReturnSaleProductService returnSaleProductService;
 
     @GetMapping("/listPage")
-    @ApiOperation("鍒拌揣绠$悊-鏌ヨ")
-    public AjaxResult listPage(Page page, ReturnManagement returnManagement) {
-        IPage<ReturnManagement> result = returnManagementService.listPage(page, returnManagement);
+    @ApiOperation("閿�鍞��璐�-鏌ヨ")
+    public AjaxResult listPage(Page page, ReturnManagementDto returnManagement) {
+        IPage<ReturnManagementDto> result = returnManagementService.listPage(page, returnManagement);
         return AjaxResult.success(result);
     }
 
     @PostMapping("/add")
-    @ApiOperation("鍒拌揣绠$悊-娣诲姞")
+    @ApiOperation("閿�鍞��璐�-娣诲姞")
     @Transactional(rollbackFor = Exception.class)
-    public AjaxResult add(@RequestBody ReturnManagement returnManagement) {
-        String rt = OrderUtils.countTodayByCreateTime(returnManagementMapper, "RT");
-        returnManagement.setReturnNo(rt);
-        boolean result = returnManagementService.save(returnManagement);
-        return result ? success() : error();
+    public AjaxResult add(@RequestBody ReturnManagementDto returnManagementDto) {
+        return returnManagementService.addReturnManagementDto(returnManagementDto) ? success() : error();
     }
 
     @PostMapping("/update")
-    @ApiOperation("鍒拌揣绠$悊-淇敼")
+    @ApiOperation("閿�鍞��璐�-淇敼")
     @Transactional(rollbackFor = Exception.class)
-    public AjaxResult update(@RequestBody ReturnManagement returnManagement) {
-        boolean result = returnManagementService.updateById(returnManagement);
-        return result ? success() : error();
+    public AjaxResult update(@RequestBody ReturnManagementDto returnManagementDto) {
+        return returnManagementService.updateReturnManagementDto(returnManagementDto) ? success() : error();
     }
 
+
+    @ApiOperation("閿�鍞��璐�-澶勭悊閫�璐у崟")
+    @GetMapping("/handle")
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult handle(Long returnManagementId) {
+        return returnManagementService.handle(returnManagementId) ? success() : error();
+    }
+
+
     @DeleteMapping("/del")
-    @ApiOperation("鍒拌揣绠$悊-鍒犻櫎")
+    @ApiOperation("閿�鍞��璐�-鍒犻櫎")
     @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();
     }
 
+    @GetMapping("/getById")
+    @ApiOperation("閿�鍞��璐�-鏍规嵁id鏌ヨ")
+    public AjaxResult getById(Long returnManagementId) {
+        ReturnManagementDto returnManagementDto = returnManagementService.getReturnManagementDtoById(returnManagementId);
+        return success(returnManagementDto);
+    }
+
+    @GetMapping("/getByShippingId")
+    @ApiOperation("閿�鍞��璐�-鏍规嵁鍑哄簱鍗曟煡璇㈤攢鍞鍗曚互鍙婁骇鍝佷俊鎭�")
+    public AjaxResult getByShippingId(Long shippingId) {
+        SalesLedgerDto salesLedgerDto = returnManagementService.getReturnManagementDtoByShippingIdId(shippingId);
+        return success(salesLedgerDto);
+    }
+
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/controller/ReturnSaleProductController.java b/src/main/java/com/ruoyi/procurementrecord/controller/ReturnSaleProductController.java
new file mode 100644
index 0000000..e7826aa
--- /dev/null
+++ b/src/main/java/com/ruoyi/procurementrecord/controller/ReturnSaleProductController.java
@@ -0,0 +1,18 @@
+package com.ruoyi.procurementrecord.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 閫�璐т骇鍝佽〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-05 03:57:42
+ */
+@RestController
+@RequestMapping("/returnSaleProduct")
+public class ReturnSaleProductController {
+
+}
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ReturnManagementDto.java b/src/main/java/com/ruoyi/procurementrecord/dto/ReturnManagementDto.java
new file mode 100644
index 0000000..74b90c9
--- /dev/null
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ReturnManagementDto.java
@@ -0,0 +1,48 @@
+package com.ruoyi.procurementrecord.dto;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.procurementrecord.pojo.ReturnManagement;
+import com.ruoyi.procurementrecord.pojo.ReturnSaleProduct;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author :yys
+ * @date : 2025/9/17 10:28
+ */
+@Data
+public class ReturnManagementDto extends ReturnManagement {
+
+
+    @ApiModelProperty(value = "瀹㈡埛鍚嶇О")
+    private String customerName;
+
+    @ApiModelProperty(value = "閿�鍞崟鍙�")
+    private String salesContractNo;
+
+    @ApiModelProperty(value = "涓氬姟鍛�")
+    private String salesman;
+
+
+    @ApiModelProperty("鍏宠仈鍑哄簱鍗曞彿")
+    private String shippingNo;
+
+    @ApiModelProperty(value = "椤圭洰鍚嶇О")
+    private String projectName;
+
+    @ApiModelProperty(value = "閿�鍞彴璐d")
+    private Long salesLedgerId;
+
+    @ApiModelProperty(value = "閿�鍞骇鍝佸璞℃暟缁�")
+    private List<ReturnSaleProductDto> returnSaleProducts;
+
+}
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ReturnSaleProductDto.java b/src/main/java/com/ruoyi/procurementrecord/dto/ReturnSaleProductDto.java
new file mode 100644
index 0000000..3cdb7dc
--- /dev/null
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ReturnSaleProductDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.procurementrecord.dto;
+
+import com.ruoyi.procurementrecord.pojo.ReturnSaleProduct;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class ReturnSaleProductDto extends ReturnSaleProduct {
+
+    private String productName;
+
+    private String model;
+
+    private String unit;
+
+    //鏈��璐ф暟閲�
+    private BigDecimal unReturn;
+}
diff --git a/src/main/java/com/ruoyi/procurementrecord/mapper/ReturnManagementMapper.java b/src/main/java/com/ruoyi/procurementrecord/mapper/ReturnManagementMapper.java
index 14953ad..4392109 100644
--- a/src/main/java/com/ruoyi/procurementrecord/mapper/ReturnManagementMapper.java
+++ b/src/main/java/com/ruoyi/procurementrecord/mapper/ReturnManagementMapper.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.procurementrecord.dto.ReturnManagementDto;
 import com.ruoyi.procurementrecord.pojo.ReturnManagement;
 import org.apache.ibatis.annotations.Param;
 
@@ -18,5 +19,7 @@
      * @param page
      * @return
      */
-    IPage<ReturnManagement> listPage(Page page,@Param("req") ReturnManagement returnManagement);
+    IPage<ReturnManagementDto> listPage(Page page, @Param("req") ReturnManagementDto returnManagement);
+
+    ReturnManagementDto getReturnManagementDtoById(Long id);
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/mapper/ReturnSaleProductMapper.java b/src/main/java/com/ruoyi/procurementrecord/mapper/ReturnSaleProductMapper.java
new file mode 100644
index 0000000..776a3b2
--- /dev/null
+++ b/src/main/java/com/ruoyi/procurementrecord/mapper/ReturnSaleProductMapper.java
@@ -0,0 +1,23 @@
+package com.ruoyi.procurementrecord.mapper;
+
+import com.ruoyi.procurementrecord.dto.ReturnSaleProductDto;
+import com.ruoyi.procurementrecord.pojo.ReturnSaleProduct;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 閫�璐т骇鍝佽〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-05 03:57:42
+ */
+@Mapper
+public interface ReturnSaleProductMapper extends BaseMapper<ReturnSaleProduct> {
+
+    List<ReturnSaleProductDto> listReturnSaleProductDto(@Param("returnManagementId") Long returnManagementId);
+}
diff --git a/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java b/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java
index 54091ab..f061625 100644
--- a/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java
+++ b/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java
@@ -29,44 +29,39 @@
     @ApiModelProperty(value = "閫�璐у崟鍙�")
     private String returnNo;
 
-    @ApiModelProperty(value = "鍏宠仈鍗曞彿")
-    private String relatedNo;
+    @ApiModelProperty("瀹㈡埛id")
+    private Long customerId;
 
-    @ApiModelProperty(value = "閫�璐х被鍨�")
-    private String returnType;
+    @ApiModelProperty("鍏宠仈鍑哄簱鍗曞彿Id")
+    private Long shippingId;
 
-    @ApiModelProperty(value = "渚涘簲鍟嗗悕绉�")
-    private String supplierName;
+    @ApiModelProperty("椤圭洰id")
+    private Long projectId;
 
-    @ApiModelProperty(value = "閫�璐у師鍥�")
-    private String returnReason;
+    @ApiModelProperty("椤圭洰闃舵")
+    private String projectStage;
 
-    @ApiModelProperty(value = "閫�璐х姸鎬�")
-    private String status;
+    @ApiModelProperty("鍒跺崟浜�")
+    private String maker;
 
-    @ApiModelProperty(value = "澶囨敞")
-    private String remark;
-
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("鍒跺崟鏃堕棿")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime makeTime;
+
+    @ApiModelProperty("缁撶畻浜�")
+    private String settler;
+
+    @ApiModelProperty("鐘舵��")
+    private Integer status;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime createTime;
-
-    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
-    @TableField(fill = FieldFill.INSERT)
-    private Integer createUser;
-
-    @ApiModelProperty(value = "淇敼鏃堕棿")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime updateTime;
-
-    @ApiModelProperty(value = "淇敼鐢ㄦ埛")
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Integer updateUser;
-
-    @ApiModelProperty(value = "绉熸埛ID")
-    @TableField(fill = FieldFill.INSERT)
-    private Long tenantId;
 
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnSaleProduct.java b/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnSaleProduct.java
new file mode 100644
index 0000000..41ab99c
--- /dev/null
+++ b/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnSaleProduct.java
@@ -0,0 +1,44 @@
+package com.ruoyi.procurementrecord.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 閫�璐т骇鍝佽〃
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-05 03:57:42
+ */
+@Getter
+@Setter
+@TableName("return_sale_product")
+@ApiModel(value = "ReturnSaleProduct瀵硅薄", description = "閫�璐т骇鍝佽〃")
+public class ReturnSaleProduct implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("閫�璐у崟id")
+    private Long returnManagementId;
+
+    @ApiModelProperty("閫�璐т骇鍝乮d")
+    private Long returnSaleLedgerProductId;
+
+    @ApiModelProperty("閫�璐т骇鍝佹暟閲�")
+    private BigDecimal num;
+
+    @ApiModelProperty("閫�璐х姸鎬� 0 鏈��鍥� 1宸查��璐�")
+    private Integer status;
+}
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/ReturnManagementService.java b/src/main/java/com/ruoyi/procurementrecord/service/ReturnManagementService.java
index b35be31..1a2de96 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/ReturnManagementService.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/ReturnManagementService.java
@@ -3,7 +3,9 @@
 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.procurementrecord.dto.ReturnManagementDto;
 import com.ruoyi.procurementrecord.pojo.ReturnManagement;
+import com.ruoyi.sales.dto.SalesLedgerDto;
 
 /**
  * @author :yys
@@ -18,5 +20,15 @@
      * @param returnManagement
      * @return
      */
-    IPage<ReturnManagement> listPage(Page page, ReturnManagement returnManagement);
+    IPage<ReturnManagementDto> listPage(Page page, ReturnManagementDto returnManagement);
+
+    boolean addReturnManagementDto(ReturnManagementDto returnManagementDto);
+
+    boolean updateReturnManagementDto(ReturnManagementDto returnManagementDto);
+
+    SalesLedgerDto getReturnManagementDtoByShippingIdId(Long shippingId);
+
+    boolean handle(Long returnManagementId);
+
+    ReturnManagementDto getReturnManagementDtoById(Long returnManagementId);
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/ReturnSaleProductService.java b/src/main/java/com/ruoyi/procurementrecord/service/ReturnSaleProductService.java
new file mode 100644
index 0000000..64e6e16
--- /dev/null
+++ b/src/main/java/com/ruoyi/procurementrecord/service/ReturnSaleProductService.java
@@ -0,0 +1,20 @@
+package com.ruoyi.procurementrecord.service;
+
+import com.ruoyi.procurementrecord.dto.ReturnSaleProductDto;
+import com.ruoyi.procurementrecord.pojo.ReturnSaleProduct;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 閫�璐т骇鍝佽〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-05 03:57:42
+ */
+public interface ReturnSaleProductService extends IService<ReturnSaleProduct> {
+
+    List<ReturnSaleProductDto> listReturnSaleProductDto(Long returnManagementId);
+}
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 ef3f242..080150b 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java
@@ -1,14 +1,38 @@
 package com.ruoyi.procurementrecord.service.impl;
 
+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;
+import com.ruoyi.common.utils.OrderUtils;
+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;
+import com.ruoyi.procurementrecord.service.ReturnSaleProductService;
+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.SalesLedgerProduct;
+import com.ruoyi.sales.pojo.ShippingInfo;
+import com.ruoyi.sales.service.ISalesLedgerProductService;
+import com.ruoyi.sales.service.ShippingInfoService;
+import com.ruoyi.sales.service.impl.ShippingInfoServiceImpl;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author :yys
@@ -21,9 +45,74 @@
     @Autowired
     private ReturnManagementMapper returnManagementMapper;
 
+    @Autowired
+    private ReturnSaleProductService returnSaleProductService;
+    @Autowired
+    private ShippingInfoService shippingInfoService;
+    @Autowired
+    private SalesLedgerMapper salesLedgerMapper;
+
     @Override
-    public IPage<ReturnManagement> listPage(Page page, ReturnManagement returnManagement) {
-        IPage<ReturnManagement> returnManagementIPage =  returnManagementMapper.listPage(page, returnManagement);
+    public IPage<ReturnManagementDto> listPage(Page page, ReturnManagementDto returnManagement) {
+        IPage<ReturnManagementDto> returnManagementIPage = returnManagementMapper.listPage(page, returnManagement);
+        for (ReturnManagementDto returnManagementDto : returnManagementIPage.getRecords()) {
+            List<ReturnSaleProductDto> returnSaleProducts = returnSaleProductService.listReturnSaleProductDto(returnManagementDto.getId());
+            returnManagementDto.setReturnSaleProducts(returnSaleProducts);
+        }
         return returnManagementIPage;
     }
+
+    @Override
+    public boolean addReturnManagementDto(ReturnManagementDto returnManagementDto) {
+        String rt = OrderUtils.countTodayByCreateTime(returnManagementMapper, "RT");
+        returnManagementDto.setReturnNo(rt);
+        save(returnManagementDto);
+        for (ReturnSaleProduct returnSaleProduct : returnManagementDto.getReturnSaleProducts()) {
+            returnSaleProduct.setReturnManagementId(returnManagementDto.getId());
+            returnSaleProduct.setStatus(0);
+            returnSaleProductService.save(returnSaleProduct);
+        }
+        return true;
+    }
+
+    @Override
+    public boolean updateReturnManagementDto(ReturnManagementDto returnManagementDto) {
+        List<ReturnSaleProduct> returnSaleProducts = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(returnManagementDto.getReturnSaleProducts())) {
+            returnManagementDto.getReturnSaleProducts().stream().forEach(returnSaleProductDto -> {
+                ReturnSaleProduct returnSaleProduct = new ReturnSaleProduct();
+                BeanUtils.copyProperties(returnSaleProductDto, returnSaleProduct);
+                returnSaleProducts.add(returnSaleProduct);
+            });
+        }
+        returnSaleProductService.updateBatchById(returnSaleProducts);
+        return updateById(returnManagementDto);
+    }
+
+    @Override
+    public SalesLedgerDto getReturnManagementDtoByShippingIdId(Long shippingId) {
+        ShippingInfo byId = shippingInfoService.getById(shippingId);
+        SalesLedger salesLedger = salesLedgerMapper.selectById(byId.getSalesLedgerId());
+        SalesLedgerDto salesLedgerDto = new SalesLedgerDto();
+        BeanUtils.copyProperties(salesLedger, salesLedgerDto);
+
+        List<SalesLedgerProductDto> salesLedgerProductDtos = shippingInfoService.getReturnManagementDtoById(shippingId);
+        salesLedgerDto.setProductDtoData(salesLedgerProductDtos);
+         return salesLedgerDto;
+    }
+
+    @Override
+    public boolean handle(Long returnManagementId) {
+        ReturnManagement byId = this.getById(returnManagementId);
+        byId.setStatus(1);
+        return false;
+    }
+
+    @Override
+    public ReturnManagementDto getReturnManagementDtoById(Long returnManagementId) {
+        ReturnManagementDto returnManagementDtoById = returnManagementMapper.getReturnManagementDtoById(returnManagementId);
+        returnManagementDtoById.setReturnSaleProducts(returnSaleProductService.listReturnSaleProductDto(returnManagementId));
+        return returnManagementDtoById;
+    }
+
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnSaleProductServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnSaleProductServiceImpl.java
new file mode 100644
index 0000000..2e43729
--- /dev/null
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnSaleProductServiceImpl.java
@@ -0,0 +1,32 @@
+package com.ruoyi.procurementrecord.service.impl;
+
+import com.ruoyi.procurementrecord.dto.ReturnSaleProductDto;
+import com.ruoyi.procurementrecord.pojo.ReturnSaleProduct;
+import com.ruoyi.procurementrecord.mapper.ReturnSaleProductMapper;
+import com.ruoyi.procurementrecord.service.ReturnSaleProductService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * <p>
+ * 閫�璐т骇鍝佽〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-05 03:57:42
+ */
+@Service
+public class ReturnSaleProductServiceImpl extends ServiceImpl<ReturnSaleProductMapper, ReturnSaleProduct> implements ReturnSaleProductService {
+
+    @Autowired
+    private ReturnSaleProductMapper returnSaleProductMapper;
+    @Override
+    public List<ReturnSaleProductDto> listReturnSaleProductDto(Long returnManagementId) {
+
+        return returnSaleProductMapper.listReturnSaleProductDto(returnManagementId);
+    }
+}
diff --git a/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java b/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
index 0cf0797..db3c5b9 100644
--- a/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
+++ b/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
@@ -135,4 +135,10 @@
         util.exportExcel(response, list, "鍙戣揣淇℃伅");
     }
 
+
+    @GetMapping("/getByCustomerName")
+    @ApiOperation("閫氳繃瀹㈡埛鍚嶇О鏌ヨ")
+    public AjaxResult getByCustomerName(String customerName) {
+        return AjaxResult.success(shippingInfoService.getShippingInfoByCustomerName(customerName));
+    }
 }
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..666ccf4 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;
 
 
@@ -57,4 +58,11 @@
 
     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..8cc8b29 100644
--- a/src/main/java/com/ruoyi/sales/mapper/ShippingInfoMapper.java
+++ b/src/main/java/com/ruoyi/sales/mapper/ShippingInfoMapper.java
@@ -3,7 +3,10 @@
 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.procurementrecord.dto.ReturnSaleProductDto;
+import com.ruoyi.sales.dto.SalesLedgerProductDto;
 import com.ruoyi.sales.dto.ShippingInfoDto;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import com.ruoyi.sales.pojo.ShippingInfo;
 import org.apache.ibatis.annotations.Param;
 
@@ -17,4 +20,9 @@
     IPage<ShippingInfoDto> listPage(Page page, @Param("req") ShippingInfo req);
 
     List<ShippingInfo> listAll();
+
+    List<SalesLedgerProductDto> getReturnManagementDtoById(Long shippingId);
+
+    List<ShippingInfo> getShippingInfoByCustomerName(String customerName);
+
 }
diff --git a/src/main/java/com/ruoyi/sales/service/ShippingInfoService.java b/src/main/java/com/ruoyi/sales/service/ShippingInfoService.java
index d9a3a8c..3f2f1d3 100644
--- a/src/main/java/com/ruoyi/sales/service/ShippingInfoService.java
+++ b/src/main/java/com/ruoyi/sales/service/ShippingInfoService.java
@@ -3,6 +3,8 @@
 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.procurementrecord.dto.ReturnSaleProductDto;
+import com.ruoyi.sales.dto.SalesLedgerProductDto;
 import com.ruoyi.sales.dto.ShippingInfoDto;
 import com.ruoyi.sales.pojo.ShippingInfo;
 
@@ -19,4 +21,8 @@
     boolean deductStock(ShippingInfoDto req) throws IOException;
 
     boolean delete(List<Long> ids);
+
+    List<SalesLedgerProductDto> getReturnManagementDtoById(Long shippingId);
+
+    List<ShippingInfo> getShippingInfoByCustomerName(String customerName);
 }
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 df94a16..1cdbebb 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,9 @@
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
 import com.ruoyi.other.service.impl.TempFileServiceImpl;
+import com.ruoyi.procurementrecord.dto.ReturnSaleProductDto;
 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.ShippingInfoMapper;
@@ -107,4 +109,15 @@
 
         return this.removeBatchByIds(ids);
     }
+
+    @Override
+    public List<SalesLedgerProductDto> getReturnManagementDtoById(Long shippingId) {
+        return shippingInfoMapper.getReturnManagementDtoById(shippingId);
+
+    }
+
+    @Override
+    public List<ShippingInfo> getShippingInfoByCustomerName(String customerName) {
+        return shippingInfoMapper.getShippingInfoByCustomerName(customerName);
+    }
 }
diff --git a/src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml b/src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml
index ce8eb39..2e2d112 100644
--- a/src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml
@@ -2,15 +2,55 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.procurementrecord.mapper.ReturnManagementMapper">
 
-    <select id="listPage" resultType="com.ruoyi.procurementrecord.pojo.ReturnManagement">
-        select * from return_management
+    <select id="listPage" resultType="com.ruoyi.procurementrecord.dto.ReturnManagementDto">
+        select rm.*,
+               c.customer_name,
+               si.shipping_no,
+               sl.project_name,
+               sl.sales_contract_no,
+               sl.salesman
+        from return_management rm
+                 left join shipping_info si on rm.shipping_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>
             <if test="req.returnNo != null and req.returnNo != ''">
-                and return_no like concat('%',#{req.returnNo},'%')
+                and rm.return_no like concat('%',#{req.returnNo},'%')
             </if>
-            <if test="req.returnType != null and req.returnType != ''">
-                and return_type = #{req.returnType}
+            <if test="req.customerName != null and req.customerName != ''">
+                and c.customer_name like concat('%',#{req.customerName},'%')
+            </if>
+            <if test="req.projectName != null and req.projectName != ''">
+                and sl.project_name like concat('%',#{req.projectName},'%')
+            </if>
+            <if test="req.salesman != null and req.salesman != ''">
+                and sl.salesman like concat('%',#{req.salesman},'%')
+            </if>
+            <if test="req.shippingNo != null and req.shippingNo != ''">
+                and rm.shipping_no like concat('%',#{req.shippingNo},'%')
+            </if>
+            <if test="req.projectStage != null and req.projectStage != ''">
+                and rm.project_stage like concat('%',#{req.projectStage},'%')
+            </if>
+            <if test="req.maker != null and req.maker != ''">
+                and rm.maker like concat('%',#{req.maker},'%')
+            </if>
+            <if test="req.salesContractNo != null and req.salesContractNo != ''">
+                and sl.sales_contract_no like concat('%',#{req.salesContractNo},'%')
             </if>
         </where>
     </select>
+    <select id="getReturnManagementDtoById" resultType="com.ruoyi.procurementrecord.dto.ReturnManagementDto">
+     select rm.*,
+               c.customer_name,
+               si.shipping_no,
+               sl.project_name,
+               sl.sales_contract_no,
+               sl.salesman
+        from return_management rm
+                 left join shipping_info si on rm.shipping_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}
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml b/src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml
new file mode 100644
index 0000000..39fd27f
--- /dev/null
+++ b/src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.procurementrecord.mapper.ReturnSaleProductMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.procurementrecord.pojo.ReturnSaleProduct">
+        <id column="id" property="id" />
+        <result column="return_management_id" property="returnManagementId" />
+        <result column="return_sale_ledger_product_id" property="returnSaleLedgerProductId" />
+        <result column="num" property="num" />
+        <result column="status" property="status" />
+    </resultMap>
+    <select id="listReturnSaleProductDto" resultType="com.ruoyi.procurementrecord.dto.ReturnSaleProductDto">
+        select rsp.*,
+               slp.product_category as product_name,
+               slp.specification_model as model
+        from return_sale_product rsp
+                 left join sales_ledger_product slp on rsp.return_sale_ledger_product_id = slp.id
+        where rsp.return_management_id = #{returnManagementId}
+
+    </select>
+
+</mapper>
diff --git a/src/main/resources/mapper/sales/ShippingInfoMapper.xml b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
index 89134d5..c5b3ae7 100644
--- a/src/main/resources/mapper/sales/ShippingInfoMapper.xml
+++ b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
@@ -58,4 +58,29 @@
         FROM shipping_info s
                  LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
     </select>
+    <select id="getReturnManagementDtoById" resultType="com.ruoyi.sales.dto.SalesLedgerProductDto">
+        SELECT
+        slp.*,
+        slp.quantity - COALESCE(rs.total_return_num, 0) AS un_quantity,
+        COALESCE(rs.total_return_num, 0) AS total_return_num
+        FROM shipping_info si
+        LEFT JOIN sales_ledger_product slp ON si.sales_ledger_product_id = slp.id
+        LEFT JOIN (
+        SELECT
+        return_sale_ledger_product_id,
+        SUM(num) AS total_return_num
+        FROM return_sale_product
+        <where>
+            <if test="productId != null">
+                AND return_sale_ledger_product_id = #{productId}
+            </if>
+        </where>
+        GROUP BY return_sale_ledger_product_id
+        ) rs ON rs.return_sale_ledger_product_id = slp.id
+    </select>
+    <select id="getShippingInfoByCustomerName" resultType="com.ruoyi.sales.pojo.ShippingInfo">
+        select * from shipping_info si
+        left join sales_ledger sl on si.sales_ledger_id = sl.id
+        where sl.customer_name = #{customerName}
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.3