From 854d063b5bfcadffe819456e0d4790a0579fa079 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期三, 25 三月 2026 16:59:48 +0800
Subject: [PATCH] feat: 销售订单添加产品新增字段、产品加工参数选择

---
 src/main/java/com/ruoyi/sales/service/ISalesLedgerProductProcessBindService.java         |   16 +
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessServiceImpl.java     |   65 +++++++
 src/main/java/com/ruoyi/sales/controller/SalesLedgerProductProcessController.java        |   55 ++++++
 src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java                               |   51 +++++
 src/main/resources/mapper/sales/SalesLedgerProductProcessBindMapper.xml                  |   13 +
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessBindServiceImpl.java |   20 ++
 src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductProcessBindMapper.java            |   16 +
 src/main/java/com/ruoyi/sales/controller/SalesLedgerProductProcessBindController.java    |   26 ++
 doc/河南鹤壁天沐钢化玻璃厂.sql                                                                      |   41 ++++
 src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductProcessMapper.java                |   16 +
 src/main/java/com/ruoyi/sales/dto/SalesLedgerProductDto.java                             |    5 
 src/main/java/com/ruoyi/sales/pojo/SalesLedgerProductProcessBind.java                    |   44 ++++
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java                   |   49 +++++
 src/main/java/com/ruoyi/sales/service/ISalesLedgerProductProcessService.java             |   24 ++
 src/main/java/com/ruoyi/sales/pojo/SalesLedgerProductProcess.java                        |   53 +++++
 src/main/resources/mapper/sales/SalesLedgerProductProcessMapper.xml                      |   15 +
 16 files changed, 503 insertions(+), 6 deletions(-)

diff --git "a/doc/\346\262\263\345\215\227\351\271\244\345\243\201\345\244\251\346\262\220\351\222\242\345\214\226\347\216\273\347\222\203\345\216\202.sql" "b/doc/\346\262\263\345\215\227\351\271\244\345\243\201\345\244\251\346\262\220\351\222\242\345\214\226\347\216\273\347\222\203\345\216\202.sql"
new file mode 100644
index 0000000..de1e58b
--- /dev/null
+++ "b/doc/\346\262\263\345\215\227\351\271\244\345\243\201\345\244\251\346\262\220\351\222\242\345\214\226\347\216\273\347\222\203\345\216\202.sql"
@@ -0,0 +1,41 @@
+CREATE TABLE sales_ledger_product_process
+(
+    id               INT PRIMARY KEY AUTO_INCREMENT,
+    sales_product_id INT          NOT NULL COMMENT '閿�鍞骇鍝両D(鍏宠仈sales_ledger_product.id)',
+    process_name     VARCHAR(100) NOT NULL COMMENT '宸ヨ壓鍚嶇О',
+    quantity         DECIMAL(12, 3) DEFAULT NULL COMMENT '鏁伴噺',
+    unit_price       DECIMAL(10, 2) DEFAULT NULL COMMENT '鍗曚环',
+    remark           VARCHAR(255)   DEFAULT NULL,
+    create_time      DATETIME       DEFAULT CURRENT_TIMESTAMP
+) COMMENT ='閿�鍞骇鍝佸姞宸ユ槑缁�';
+
+
+DROP TABLE IF EXISTS `sales_ledger_product_process_bind`;
+CREATE TABLE `sales_ledger_product_process_bind`
+(
+    `id`                              int NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
+    `sales_ledger_product_id`         int NULL DEFAULT NULL COMMENT '閿�鍞彴璐︿骇鍝佷俊鎭疘D',
+    `sales_ledger_product_process_id` int NULL DEFAULT NULL COMMENT '閿�鍞骇鍝佸姞宸ユ槑缁咺D',
+    `quantity`                        int NULL DEFAULT NULL COMMENT '鍔犲伐鏁伴噺',
+    PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB
+  AUTO_INCREMENT = 2
+  CHARACTER SET = utf8mb3
+  COLLATE = utf8mb3_general_ci COMMENT = '閿�鍞骇鍝侀澶栧姞宸ユ暟閲�'
+  ROW_FORMAT = Dynamic;
+
+SET FOREIGN_KEY_CHECKS = 1;
+
+ALTER TABLE sales_ledger_product
+    ADD COLUMN actual_piece_area DECIMAL(18, 6) DEFAULT NULL COMMENT '瀹為檯鍗曠墖闈㈢Н(銕�)',
+    ADD COLUMN actual_total_area DECIMAL(18, 6) DEFAULT NULL COMMENT '瀹為檯鎬婚潰绉�(銕�)',
+    ADD COLUMN settle_piece_area DECIMAL(18, 6) DEFAULT NULL COMMENT '缁撶畻鍗曠墖闈㈢Н(銕�)',
+    ADD COLUMN settle_total_area DECIMAL(18, 6) DEFAULT NULL COMMENT '缁撶畻鎬婚潰绉�(銕�)';
+
+ALTER TABLE sales_ledger_product
+    ADD COLUMN process_requirement VARCHAR(500) DEFAULT NULL COMMENT '鍔犲伐瑕佹眰';
+ALTER TABLE sales_ledger_product
+    ADD COLUMN remark VARCHAR(500) DEFAULT NULL COMMENT '澶囨敞';
+
+ALTER TABLE sales_ledger_product_process
+    CHANGE COLUMN remark code VARCHAR(255) COMMENT '缂栫爜';
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductProcessBindController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductProcessBindController.java
new file mode 100644
index 0000000..a8aec60
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductProcessBindController.java
@@ -0,0 +1,26 @@
+package com.ruoyi.sales.controller;
+
+
+import com.ruoyi.sales.service.ISalesLedgerProductProcessBindService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 閿�鍞骇鍝侀澶栧姞宸ユ暟閲� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author deslrey
+ * @since 2026-03-25
+ */
+@RestController
+@RequestMapping("/salesLedgerProductProcessBind")
+public class SalesLedgerProductProcessBindController {
+
+    @Autowired
+    private ISalesLedgerProductProcessBindService salesLedgerProductProcessBindService;
+
+
+}
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductProcessController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductProcessController.java
new file mode 100644
index 0000000..2f53578
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductProcessController.java
@@ -0,0 +1,55 @@
+package com.ruoyi.sales.controller;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.sales.pojo.SalesLedgerProductProcess;
+import com.ruoyi.sales.service.ISalesLedgerProductProcessService;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ * 閿�鍞骇鍝佸姞宸ユ槑缁� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author deslrey
+ * @since 2026-03-25
+ */
+@RestController
+@RequestMapping("/salesLedgerProductProcess")
+@ApiModel(value = "SalesLedgerProductProcessController", description = "閿�鍞骇鍝佸姞宸ユ槑缁�")
+public class SalesLedgerProductProcessController {
+
+    @Autowired
+    private ISalesLedgerProductProcessService salesLedgerProductProcessService;
+
+    @ApiOperation("鍒嗛〉鏌ヨ鍔犲伐鏄庣粏")
+    @GetMapping("/list")
+    public AjaxResult list(Page<SalesLedgerProductProcess> page, String name) {
+        return AjaxResult.success(salesLedgerProductProcessService.salesLedgerProductProcessList(page, name));
+    }
+
+    @ApiOperation("鏂板鍔犲伐鏄庣粏")
+    @PostMapping("/add")
+    public AjaxResult add(@RequestBody SalesLedgerProductProcess process) {
+        salesLedgerProductProcessService.addProcess(process);
+        return AjaxResult.success();
+    }
+
+    @ApiOperation("淇敼鍔犲伐鏄庣粏")
+    @PutMapping("/update")
+    public AjaxResult update(@RequestBody SalesLedgerProductProcess process) {
+        salesLedgerProductProcessService.updateProcess(process);
+        return AjaxResult.success();
+    }
+
+    @ApiOperation("鍒犻櫎鍔犲伐鏄庣粏")
+    @DeleteMapping("/delete/{id}")
+    public AjaxResult delete(@PathVariable Integer id) {
+        salesLedgerProductProcessService.deleteProcess(id);
+        return AjaxResult.success();
+    }
+}
diff --git a/src/main/java/com/ruoyi/sales/dto/SalesLedgerProductDto.java b/src/main/java/com/ruoyi/sales/dto/SalesLedgerProductDto.java
index 666ccf4..b9f8d03 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 com.ruoyi.sales.pojo.SalesLedgerProductProcess;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -11,6 +12,7 @@
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.util.List;
 
 @Data
 public class SalesLedgerProductDto extends SalesLedgerProduct {
@@ -65,4 +67,7 @@
     @ApiModelProperty(value = "閫�璐ф�绘暟")
     private BigDecimal totalReturnNum;
 
+    @ApiModelProperty("閿�鍞骇鍝侀澶栧姞宸�")
+    private List<SalesLedgerProductProcess> salesProductProcessList;
+
 }
diff --git a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductProcessBindMapper.java b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductProcessBindMapper.java
new file mode 100644
index 0000000..3a00ffe
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductProcessBindMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.sales.mapper;
+
+import com.ruoyi.sales.pojo.SalesLedgerProductProcessBind;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 閿�鍞骇鍝侀澶栧姞宸ユ暟閲� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author deslrey
+ * @since 2026-03-25
+ */
+public interface SalesLedgerProductProcessBindMapper extends BaseMapper<SalesLedgerProductProcessBind> {
+
+}
diff --git a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductProcessMapper.java b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductProcessMapper.java
new file mode 100644
index 0000000..1b77eb9
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductProcessMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.sales.mapper;
+
+import com.ruoyi.sales.pojo.SalesLedgerProductProcess;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 閿�鍞骇鍝佸姞宸ユ槑缁� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author deslrey
+ * @since 2026-03-25
+ */
+public interface SalesLedgerProductProcessMapper extends BaseMapper<SalesLedgerProductProcess> {
+
+}
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
index 1bf9aa2..f984e38 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -13,6 +13,7 @@
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 浜у搧淇℃伅瀵硅薄 sales_ledger_product
@@ -111,22 +112,22 @@
     /**
      * 鏈鏉ョエ鏁�
      */
-    private BigDecimal ticketsNum=BigDecimal.ZERO;
+    private BigDecimal ticketsNum = BigDecimal.ZERO;
 
     /**
      * 鏈鏉ョエ閲戦(鍏�)
      */
-    private BigDecimal ticketsAmount=BigDecimal.ZERO;
+    private BigDecimal ticketsAmount = BigDecimal.ZERO;
 
     /**
      * 鏈潵绁ㄦ暟
      */
-    private BigDecimal futureTickets=BigDecimal.ZERO;
+    private BigDecimal futureTickets = BigDecimal.ZERO;
 
     /**
      * 鏈潵绁ㄩ噾棰�(鍏�)
      */
-    private BigDecimal futureTicketsAmount=BigDecimal.ZERO;
+    private BigDecimal futureTicketsAmount = BigDecimal.ZERO;
 
     @ApiModelProperty(value = "寮�绁ㄦ暟")
     private BigDecimal invoiceNum = BigDecimal.ZERO;
@@ -149,7 +150,7 @@
     private BigDecimal currentInvoiceAmount;
 
     /**
-     *  浜у搧id
+     * 浜у搧id
      */
     private Long productId;
 
@@ -233,6 +234,46 @@
     @ApiModelProperty(value = "鏄惁璐ㄦ")
     private Boolean isChecked;
 
+    @ApiModelProperty("瀹�")
+    private BigDecimal width;
+
+    @ApiModelProperty("楂�")
+    private BigDecimal height;
+
+    @ApiModelProperty("鍔犲伐瑕佹眰")
+    private String processRequirement;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    /**
+     * 瀹為檯鍗曠墖闈㈢Н(銕�)
+     */
+    @ApiModelProperty("瀹為檯鍗曠墖闈㈢Н(銕�)")
+    private BigDecimal actualPieceArea;
+
+    /**
+     * 瀹為檯鎬婚潰绉�(銕�)
+     */
+    @ApiModelProperty("瀹為檯鎬婚潰绉�(銕�)")
+    private BigDecimal actualTotalArea;
+
+    /**
+     * 缁撶畻鍗曠墖闈㈢Н(銕�)
+     */
+    @ApiModelProperty("缁撶畻鍗曠墖闈㈢Н(銕�)")
+    private BigDecimal settlePieceArea;
+
+    /**
+     * 缁撶畻鎬婚潰绉�(銕�)
+     */
+    @ApiModelProperty("缁撶畻鎬婚潰绉�(銕�)")
+    private BigDecimal settleTotalArea;
+
+    @TableField(exist = false)
+    @ApiModelProperty("閿�鍞骇鍝侀澶栧姞宸�")
+    private List<SalesLedgerProductProcess> salesProductProcessList;
+
     @TableField(exist = false)
     private Integer hasSufficientStock;
 
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProductProcess.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProductProcess.java
new file mode 100644
index 0000000..5c1ff36
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProductProcess.java
@@ -0,0 +1,53 @@
+package com.ruoyi.sales.pojo;
+
+import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.time.LocalDateTime;
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 閿�鍞骇鍝佸姞宸ユ槑缁�
+ * </p>
+ *
+ * @author deslrey
+ * @since 2026-03-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("sales_ledger_product_process")
+@ApiModel(value = "SalesLedgerProductProcess瀵硅薄", description = "閿�鍞骇鍝佸姞宸ユ槑缁�")
+public class SalesLedgerProductProcess implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "宸ヨ壓鍚嶇О")
+    private String processName;
+
+    @ApiModelProperty(value = "鏁伴噺")
+    private Integer quantity;
+
+    @ApiModelProperty(value = "鍗曚环")
+    private BigDecimal unitPrice;
+
+    @ApiModelProperty(value = "缂栫爜")
+    private String code;
+
+    private LocalDateTime createTime;
+
+
+}
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProductProcessBind.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProductProcessBind.java
new file mode 100644
index 0000000..67db3a4
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProductProcessBind.java
@@ -0,0 +1,44 @@
+package com.ruoyi.sales.pojo;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 閿�鍞骇鍝侀澶栧姞宸ユ暟閲�
+ * </p>
+ *
+ * @author deslrey
+ * @since 2026-03-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("sales_ledger_product_process_bind")
+@ApiModel(value="SalesLedgerProductProcessBind瀵硅薄", description="閿�鍞骇鍝侀澶栧姞宸ユ暟閲�")
+public class SalesLedgerProductProcessBind implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "涓婚敭")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "閿�鍞彴璐︿骇鍝佷俊鎭疘D")
+    private Integer salesLedgerProductId;
+
+    @ApiModelProperty(value = "閿�鍞骇鍝佸姞宸ユ槑缁咺D")
+    private Integer salesLedgerProductProcessId;
+
+    @ApiModelProperty(value = "鍔犲伐鏁伴噺")
+    private Integer quantity;
+
+
+}
diff --git a/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductProcessBindService.java b/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductProcessBindService.java
new file mode 100644
index 0000000..264f944
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductProcessBindService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.sales.service;
+
+import com.ruoyi.sales.pojo.SalesLedgerProductProcessBind;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 閿�鍞骇鍝侀澶栧姞宸ユ暟閲� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author deslrey
+ * @since 2026-03-25
+ */
+public interface ISalesLedgerProductProcessBindService extends IService<SalesLedgerProductProcessBind> {
+
+}
diff --git a/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductProcessService.java b/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductProcessService.java
new file mode 100644
index 0000000..78973f9
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductProcessService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.sales.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.sales.pojo.SalesLedgerProductProcess;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 閿�鍞骇鍝佸姞宸ユ槑缁� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author deslrey
+ * @since 2026-03-25
+ */
+public interface ISalesLedgerProductProcessService extends IService<SalesLedgerProductProcess> {
+
+    Page<SalesLedgerProductProcess> salesLedgerProductProcessList(Page<SalesLedgerProductProcess> page, String name);
+
+    void addProcess(SalesLedgerProductProcess process);
+
+    void updateProcess(SalesLedgerProductProcess process);
+
+    void deleteProcess(Integer id);
+}
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessBindServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessBindServiceImpl.java
new file mode 100644
index 0000000..9c4a8fe
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessBindServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.sales.service.impl;
+
+import com.ruoyi.sales.pojo.SalesLedgerProductProcessBind;
+import com.ruoyi.sales.mapper.SalesLedgerProductProcessBindMapper;
+import com.ruoyi.sales.service.ISalesLedgerProductProcessBindService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 閿�鍞骇鍝侀澶栧姞宸ユ暟閲� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author deslrey
+ * @since 2026-03-25
+ */
+@Service
+public class SalesLedgerProductProcessBindServiceImpl extends ServiceImpl<SalesLedgerProductProcessBindMapper, SalesLedgerProductProcessBind> implements ISalesLedgerProductProcessBindService {
+
+}
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessServiceImpl.java
new file mode 100644
index 0000000..556fcb4
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessServiceImpl.java
@@ -0,0 +1,65 @@
+package com.ruoyi.sales.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.sales.pojo.SalesLedgerProductProcess;
+import com.ruoyi.sales.mapper.SalesLedgerProductProcessMapper;
+import com.ruoyi.sales.service.ISalesLedgerProductProcessService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+/**
+ * <p>
+ * 閿�鍞骇鍝佸姞宸ユ槑缁� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author deslrey
+ * @since 2026-03-25
+ */
+@Service
+public class SalesLedgerProductProcessServiceImpl extends ServiceImpl<SalesLedgerProductProcessMapper, SalesLedgerProductProcess> implements ISalesLedgerProductProcessService {
+
+    @Override
+    public Page<SalesLedgerProductProcess> salesLedgerProductProcessList(Page<SalesLedgerProductProcess> page, String name) {
+        LambdaQueryWrapper<SalesLedgerProductProcess> wrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.hasText(name)) {
+            wrapper.like(SalesLedgerProductProcess::getProcessName, name);
+        }
+        return this.page(page, wrapper);
+    }
+
+    @Override
+    public void addProcess(SalesLedgerProductProcess process) {
+        checkDuplicate(process.getProcessName(), null, process.getProcessName());
+        this.save(process);
+    }
+
+    @Override
+    public void updateProcess(SalesLedgerProductProcess process) {
+        checkDuplicate(process.getProcessName(), process.getId(), process.getProcessName());
+        this.updateById(process);
+    }
+
+    @Override
+    public void deleteProcess(Integer id) {
+        this.removeById(id);
+    }
+
+    private void checkDuplicate(String processName, Integer excludeId, String code) {
+        LambdaQueryWrapper<SalesLedgerProductProcess> wrapper = new LambdaQueryWrapper<>();
+
+        wrapper.and(w -> w
+                .eq(SalesLedgerProductProcess::getProcessName, processName)
+                .or()
+                .eq(SalesLedgerProductProcess::getCode, code));
+
+        if (excludeId != null) {
+            wrapper.ne(SalesLedgerProductProcess::getId, excludeId);
+        }
+
+        if (this.count(wrapper) > 0) {
+            throw new RuntimeException("宸ュ簭鍚嶇О鎴栫紪鐮佸凡瀛樺湪");
+        }
+    }
+}
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 3b0cc55..5b57888 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -37,6 +37,8 @@
 import com.ruoyi.sales.dto.*;
 import com.ruoyi.sales.mapper.*;
 import com.ruoyi.sales.pojo.*;
+import com.ruoyi.sales.service.ISalesLedgerProductProcessBindService;
+import com.ruoyi.sales.service.ISalesLedgerProductProcessService;
 import com.ruoyi.sales.service.ISalesLedgerService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -110,6 +112,11 @@
     private final ProductionProductInputMapper productionProductInputMapper;
     private final QualityInspectMapper qualityInspectMapper;
     private final RedisTemplate<String, String> redisTemplate;
+
+    private final ISalesLedgerProductProcessService salesLedgerProductProcessService;
+
+    private final ISalesLedgerProductProcessBindService salesLedgerProductProcessBindService;
+
     @Autowired
     private SysDeptMapper sysDeptMapper;
     @Value("${file.upload-dir}")
@@ -154,7 +161,7 @@
             // 鏌ヨ閫�璐т俊鎭�
             List<Long> productIds = salesLedgerProducts.stream().map(SalesLedgerProduct::getId).collect(Collectors.toList());
             List<SimpleReturnOrderGroupDto> groupListByProductIds = new ArrayList<>();
-            if(CollectionUtils.isNotEmpty(productIds)){
+            if (CollectionUtils.isNotEmpty(productIds)) {
                 groupListByProductIds = purchaseReturnOrderProductsMapper.getReturnOrderGroupListByProductIds(productIds);
             }
             Map<Long, BigDecimal> returnOrderGroupDtoMap = groupListByProductIds.stream().collect(Collectors.toMap(SimpleReturnOrderGroupDto::getSalesLedgerProductId, SimpleReturnOrderGroupDto::getSumReturnQuantity));
@@ -194,6 +201,23 @@
                     .last("limit 1"));
             if (shippingInfo != null) {
                 product.setShippingStatus(shippingInfo.getStatus());
+            }
+            // 鍔犲伐鏄庣粏锛屽厛鏌ind琛ㄨ幏鍙栬浜у搧鍏宠仈鐨勫伐搴忓強鏁伴噺
+            List<SalesLedgerProductProcessBind> bindList = salesLedgerProductProcessBindService.list(
+                    new LambdaQueryWrapper<SalesLedgerProductProcessBind>()
+                            .eq(SalesLedgerProductProcessBind::getSalesLedgerProductId, product.getId()));
+            if (!bindList.isEmpty()) {
+                List<Integer> processIds = bindList.stream()
+                        .map(SalesLedgerProductProcessBind::getSalesLedgerProductProcessId)
+                        .collect(Collectors.toList());
+                Map<Integer, Integer> processQuantityMap = bindList.stream()
+                        .collect(Collectors.toMap(
+                                SalesLedgerProductProcessBind::getSalesLedgerProductProcessId,
+                                SalesLedgerProductProcessBind::getQuantity,
+                                (a, b) -> a));
+                List<SalesLedgerProductProcess> processList = salesLedgerProductProcessService.listByIds(processIds);
+                processList.forEach(p -> p.setQuantity(processQuantityMap.get(p.getId())));
+                product.setSalesProductProcessList(processList);
             }
         }
 
@@ -545,6 +569,9 @@
             salesLedgerProductMapper.deleteBatchIds(productIds);
         }
 
+        //  娓呴櫎浜у搧鐨勫姞宸�
+        salesLedgerProductProcessBindService.remove(new LambdaQueryWrapper<SalesLedgerProductProcessBind>().in(SalesLedgerProductProcessBind::getSalesLedgerProductId, productIds));
+
         LambdaQueryWrapper<InvoiceRegistrationProduct> wrapper = new LambdaQueryWrapper<>();
         wrapper.in(InvoiceRegistrationProduct::getSalesLedgerId, idList);
         List<InvoiceRegistrationProduct> invoiceRegistrationProducts = invoiceRegistrationProductMapper.selectList(wrapper);
@@ -727,6 +754,17 @@
             for (SalesLedgerProduct product : updateList) {
                 product.setType(type.getCode());
                 salesLedgerProductMapper.updateById(product);
+                //  瀹炵幇鍒犻櫎缁戝畾鐨勫叏閮ㄥ姞宸�
+                salesLedgerProductProcessBindService.remove(new LambdaQueryWrapper<SalesLedgerProductProcessBind>().eq(SalesLedgerProductProcessBind::getSalesLedgerProductId, product.getId()));
+                //  缁戝畾浜у搧棰濆鍔犲伐
+                List<SalesLedgerProductProcess> salesProductProcessList = product.getSalesProductProcessList();
+                salesProductProcessList.forEach(s -> {
+                    SalesLedgerProductProcessBind processBind = new SalesLedgerProductProcessBind();
+                    processBind.setSalesLedgerProductId(Math.toIntExact(product.getId()));
+                    processBind.setSalesLedgerProductProcessId(s.getId());
+                    processBind.setQuantity(s.getQuantity());
+                    salesLedgerProductProcessBindService.save(processBind);
+                });
             }
         }
         // 鎵ц鎻掑叆鎿嶄綔
@@ -737,6 +775,15 @@
                 salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
                 salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProduct.getTaxInclusiveTotalPrice());
                 salesLedgerProductMapper.insert(salesLedgerProduct);
+                //  缁戝畾浜у搧棰濆鍔犲伐
+                List<SalesLedgerProductProcess> salesProductProcessList = salesLedgerProduct.getSalesProductProcessList();
+                salesProductProcessList.forEach(s -> {
+                    SalesLedgerProductProcessBind processBind = new SalesLedgerProductProcessBind();
+                    processBind.setSalesLedgerProductId(Math.toIntExact(salesLedgerProduct.getId()));
+                    processBind.setSalesLedgerProductProcessId(s.getId());
+                    processBind.setQuantity(s.getQuantity());
+                    salesLedgerProductProcessBindService.save(processBind);
+                });
                 // 娣诲姞鐢熶骇鏁版嵁
                 salesLedgerProductServiceImpl.addProductionData(salesLedgerProduct);
             }
diff --git a/src/main/resources/mapper/sales/SalesLedgerProductProcessBindMapper.xml b/src/main/resources/mapper/sales/SalesLedgerProductProcessBindMapper.xml
new file mode 100644
index 0000000..fc3b992
--- /dev/null
+++ b/src/main/resources/mapper/sales/SalesLedgerProductProcessBindMapper.xml
@@ -0,0 +1,13 @@
+<?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.sales.mapper.SalesLedgerProductProcessBindMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.sales.pojo.SalesLedgerProductProcessBind">
+        <id column="id" property="id" />
+        <result column="sales_ledger_product_id" property="salesLedgerProductId" />
+        <result column="sales_ledger_product_process_id" property="salesLedgerProductProcessId" />
+        <result column="quantity" property="quantity" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/sales/SalesLedgerProductProcessMapper.xml b/src/main/resources/mapper/sales/SalesLedgerProductProcessMapper.xml
new file mode 100644
index 0000000..30c2349
--- /dev/null
+++ b/src/main/resources/mapper/sales/SalesLedgerProductProcessMapper.xml
@@ -0,0 +1,15 @@
+<?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.sales.mapper.SalesLedgerProductProcessMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.sales.pojo.SalesLedgerProductProcess">
+        <id column="id" property="id"/>
+        <result column="process_name" property="processName"/>
+        <result column="quantity" property="quantity"/>
+        <result column="unit_price" property="unitPrice"/>
+        <result column="code" property="code"/>
+        <result column="create_time" property="createTime"/>
+    </resultMap>
+
+</mapper>

--
Gitblit v1.9.3