gongchunyi
7 天以前 854d063b5bfcadffe819456e0d4790a0579fa079
feat: 销售订单添加产品新增字段、产品加工参数选择
已添加13个文件
已修改3个文件
509 ■■■■■ 文件已修改
doc/河南鹤壁天沐钢化玻璃厂.sql 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/SalesLedgerProductProcessBindController.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/SalesLedgerProductProcessController.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/dto/SalesLedgerProductDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductProcessBindMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductProcessMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProductProcess.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProductProcessBind.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/ISalesLedgerProductProcessBindService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/ISalesLedgerProductProcessService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessBindServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessServiceImpl.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sales/SalesLedgerProductProcessBindMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sales/SalesLedgerProductProcessMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
doc/ºÓÄϺױÚÌìãå¸Ö»¯²£Á§³§.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
CREATE TABLE sales_ledger_product_process
(
    id               INT PRIMARY KEY AUTO_INCREMENT,
    sales_product_id INT          NOT NULL COMMENT '销售产品ID(关联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 '销售台账产品信息ID',
    `sales_ledger_product_process_id` int NULL DEFAULT NULL COMMENT '销售产品加工明细ID',
    `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 '编码';
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;
}
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();
    }
}
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;
}
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> {
}
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> {
}
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;
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;
}
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 = "销售台账产品信息ID")
    private Integer salesLedgerProductId;
    @ApiModelProperty(value = "销售产品加工明细ID")
    private Integer salesLedgerProductProcessId;
    @ApiModelProperty(value = "加工数量")
    private Integer quantity;
}
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> {
}
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);
}
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 {
}
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("工序名称或编码已存在");
        }
    }
}
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());
            }
            // åŠ å·¥æ˜Žç»†ï¼Œå…ˆæŸ¥bind表获取该产品关联的工序及数量
            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);
            }
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>
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>