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