gongchunyi
18 小时以前 5b334f63a33646b57a428c647bad9894cd3f3068
feat: 新增工艺路线、工艺路线绑定工序、工序新增参数
已添加7个文件
已修改8个文件
536 ■■■■■ 文件已修改
doc/宁夏-中盛建材.sql 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/controller/ProcessRouteItemController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/controller/ProcessRouteItemParamController.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/ProcessRouteItemParamDto.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/mapper/ProcessRouteItemParamMapper.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/ProcessRoute.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/ProcessRouteItemParam.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/ProcessRouteItemParamService.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/ProcessRouteItemService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProcessRouteItemParamServiceImpl.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProcessRouteItemServiceImpl.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/ProcessRouteItemParamMapper.xml 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/ProcessRouteMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
doc/ÄþÏÄ-ÖÐÊ¢½¨²Ä.sql
@@ -235,6 +235,32 @@
    ADD COLUMN `form_instance_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '宜搭表单实例ID' AFTER `customer_type`,
    ADD COLUMN `form_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '宜搭修改时间' AFTER `form_instance_id`;
ALTER TABLE `process_route`
    ADD COLUMN `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '状态:0-草稿,1-已批准' AFTER `bom_id`;
CREATE TABLE `process_route_item_param`
(
    `id`               bigint  NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `route_item_id`    bigint  NOT NULL COMMENT '关联工艺路线明细ID (process_route_item.id)',
    `param_id`         bigint  NOT NULL COMMENT '关联基础参数定义ID (base_param.id)',
    `process_param_id` bigint                                                        DEFAULT NULL COMMENT '来源工序参数ID',
    `standard_value`   varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '此路线节点设定的标准值',
    `min_value`        decimal(10, 2)                                                DEFAULT NULL COMMENT '此路线节点设定的标准最小值',
    `max_value`        decimal(10, 2)                                                DEFAULT NULL COMMENT '此路线节点设定的标准最大值',
    `is_required`      tinyint NOT NULL                                              DEFAULT '0' COMMENT '是否必填',
    `sort`             int     NOT NULL                                              DEFAULT '0' COMMENT '排序',
    `tenant_id`        bigint                                                        DEFAULT NULL COMMENT '租户ID',
    `create_time`      datetime                                                      DEFAULT CURRENT_TIMESTAMP,
    `update_time`      datetime                                                      DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`) USING BTREE,
    KEY `idx_route_item_id` (`route_item_id`) USING BTREE,
    KEY `idx_param_id` (`param_id`) USING BTREE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_0900_ai_ci COMMENT ='工艺路线工序参数表';
ALTER TABLE `product-inventory-management-zsjc`.`quality_inspect`
    ADD COLUMN `inspect_nature` varchar(255) NULL COMMENT '检测性质' AFTER `test_standard_id`,
src/main/java/com/ruoyi/production/controller/ProcessRouteItemController.java
@@ -32,13 +32,13 @@
        return R.ok(processRouteItemService.listProcessRouteItemDto(processRouteItemDto));
    }
    @PostMapping ()
    @ApiOperation("新增修改")
    @PostMapping()
    @ApiOperation("新增修改工序")
    public R addOrUpdate(@RequestBody ProcessRouteItem processRouteItem) {
        return R.ok(processRouteItemService.saveOrUpdate(processRouteItem));
        return R.ok(processRouteItemService.saveOrUpdateProcess(processRouteItem));
    }
    @PostMapping ("/sort")
    @PostMapping("/sort")
    @ApiOperation("排序")
    public R sort(@RequestBody ProcessRouteItem processRouteItem) {
        return R.ok(processRouteItemService.sort(processRouteItem));
src/main/java/com/ruoyi/production/controller/ProcessRouteItemParamController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
package com.ruoyi.production.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.production.dto.ProcessRouteItemParamDto;
import com.ruoyi.production.pojo.ProcessRouteItemParam;
import com.ruoyi.production.service.ProcessRouteItemParamService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
/**
 * <br>
 * å·¥è‰ºè·¯çº¿å·¥åºå‚数实例控制层
 * </br>
 *
 * @author deslrey
 * @version 1.0
 * @since 2026/03/16 11:15
 */
@RestController
@RequestMapping("/ProcessRouteItemParam")
@Api("工艺路线工序参数实例控制层")
public class ProcessRouteItemParamController {
    @Autowired
    private ProcessRouteItemParamService processRouteItemParamService;
    @GetMapping("/pageList")
    @ApiOperation("工艺绑定的工序参数分页查询")
    @Log(title = "工艺绑定的工序参数分页查询", businessType = BusinessType.OTHER)
    public AjaxResult listPage(Page<ProcessRouteItemParam> page, ProcessRouteItemParam param) {
        IPage<ProcessRouteItemParamDto> paramIPage = processRouteItemParamService.pageList(page, param);
        return AjaxResult.success(paramIPage);
    }
    @ApiOperation("修改参数实例值")
    @PutMapping("/edit")
    @Log(title = "修改参数", businessType = BusinessType.UPDATE)
    public AjaxResult edit(@RequestBody ProcessRouteItemParam param) {
        return AjaxResult.success(processRouteItemParamService.updateById(param));
    }
    @ApiOperation("删除参数")
    @DeleteMapping("/remove/{ids}")
    @Log(title = "删除参数", businessType = BusinessType.DELETE)
    public AjaxResult remove(@PathVariable Long[] ids) {
        return AjaxResult.success(processRouteItemParamService.removeByIds(Arrays.asList(ids)));
    }
    @ApiOperation("初始化工序参数")
    @PostMapping("/init")
    @Log(title = "初始化参数", businessType = BusinessType.INSERT)
    public AjaxResult init(Long routeItemId, Long processId) {
        return AjaxResult.success(processRouteItemParamService.initParams(routeItemId, processId));
    }
    @ApiOperation("新增单个参数实例")
    @PostMapping("/save")
    @Log(title = "新增参数", businessType = BusinessType.INSERT)
    public AjaxResult save(@RequestBody ProcessRouteItemParam param) {
        processRouteItemParamService.saveParam(param);
        return AjaxResult.success();
    }
}
src/main/java/com/ruoyi/production/dto/ProcessRouteItemParamDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.ruoyi.production.dto;
import com.ruoyi.production.pojo.ProcessRouteItemParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * <br>
 * å·¥è‰ºè·¯çº¿å·¥åºå‚数实例Dto
 * </br>
 *
 * @author deslrey
 * @version 1.0
 * @since 2026/03/16 11:23
 */
@Data
public class ProcessRouteItemParamDto extends ProcessRouteItemParam {
    @ApiModelProperty("参数名称")
    private String paramName;
    @ApiModelProperty("参数唯一标识")
    private String paramKey;
    @ApiModelProperty("单位")
    private String unit;
    @ApiModelProperty("参数类型(1数字 2文本 3下拉选择 4时间)")
    private Integer paramType;
    @ApiModelProperty("参数格式")
    private String paramFormat;
    @ApiModelProperty("值模式(1单值 2区间)")
    private Integer valueMode;
}
src/main/java/com/ruoyi/production/mapper/ProcessRouteItemParamMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.ruoyi.production.mapper;
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.production.dto.ProcessRouteItemParamDto;
import com.ruoyi.production.pojo.ProcessRouteItemParam;
import org.apache.ibatis.annotations.Param;
/**
 * <br>
 * å·¥è‰ºè·¯çº¿å·¥åºå‚数实例 Mapper
 * </br>
 *
 * @author deslrey
 * @version 1.0
 * @since 2026/03/16 11:11
 */
public interface ProcessRouteItemParamMapper extends BaseMapper<ProcessRouteItemParam> {
    IPage<ProcessRouteItemParamDto> selectParamPage(@Param("page") Page<ProcessRouteItemParam> page, @Param("p") ProcessRouteItemParam param);
    /**
     * æ ¹æ®å·¥åº ID åˆå§‹åŒ–参数到工艺路线明细实例
     *
     * @param routeItemId å·¥è‰ºè·¯çº¿æ˜Žç»†ID
     * @param processId   å·¥åºID
     * @param tenantId    ç§Ÿæˆ·ID
     */
    int insertFromProcessTemplate(@Param("routeItemId") Long routeItemId, @Param("processId") Long processId, @Param("tenantId") Long tenantId);
    Integer selectMaxSortByRouteItemId(Long routeItemId);
}
src/main/java/com/ruoyi/production/pojo/ProcessRoute.java
@@ -41,4 +41,7 @@
    @ApiModelProperty(value = "BOM的ID")
    private Integer bomId;
    @ApiModelProperty(value = "状态:0-草稿,1-已批准")
    private Boolean status;
}
src/main/java/com/ruoyi/production/pojo/ProcessRouteItemParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package com.ruoyi.production.pojo;
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 io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
 * <br>
 * å·¥è‰ºè·¯çº¿å·¥åºå‚数实例
 * </br>
 *
 * @author deslrey
 * @version 1.0
 * @since 2026/03/16 11:07
 */
@Data
@TableName("process_route_item_param")
@ApiModel("工艺路线工序参数实例表")
public class ProcessRouteItemParam {
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty("主键ID")
    private Long id;
    @ApiModelProperty("关联工艺路线明细ID (process_route_item.id)")
    private Long routeItemId;
    @ApiModelProperty("关联基础参数定义ID (base_param.id)")
    private Long paramId;
    @ApiModelProperty("来源工序参数ID")
    private Long processParamId;
    @ApiModelProperty("此路线节点设定的标准值")
    private String standardValue;
    @ApiModelProperty("此路线节点设定的标准最小值")
    private BigDecimal minValue;
    @ApiModelProperty("此路线节点设定的标准最大值")
    private BigDecimal maxValue;
    @ApiModelProperty("是否必填")
    private Integer isRequired;
    @ApiModelProperty("排序")
    private Integer sort;
    @ApiModelProperty("租户ID")
    private Long tenantId;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty("创建时间")
    private LocalDateTime createTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty("更新时间")
    private LocalDateTime updateTime;
}
src/main/java/com/ruoyi/production/service/ProcessRouteItemParamService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.ruoyi.production.service;
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.production.dto.ProcessRouteItemParamDto;
import com.ruoyi.production.pojo.ProcessRouteItemParam;
/**
 * <br>
 * å·¥è‰ºè·¯çº¿å·¥åºå‚数实例 Service
 * </br>
 *
 * @author deslrey
 * @version 1.0
 * @since 2026/03/16 11:11
 */
public interface ProcessRouteItemParamService extends IService<ProcessRouteItemParam> {
    IPage<ProcessRouteItemParamDto> pageList(Page<ProcessRouteItemParam> page, ProcessRouteItemParam param);
    boolean initParams(Long routeItemId, Long processId);
    void saveParam(ProcessRouteItemParam param);
}
src/main/java/com/ruoyi/production/service/ProcessRouteItemService.java
@@ -15,4 +15,6 @@
    int sort(ProcessRouteItem processRouteItem);
    String batchDelete(Long id);
    boolean saveOrUpdateProcess(ProcessRouteItem processRouteItem);
}
src/main/java/com/ruoyi/production/service/impl/ProcessRouteItemParamServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,87 @@
package com.ruoyi.production.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.pojo.BaseParam;
import com.ruoyi.basic.service.BaseParamService;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.production.dto.ProcessRouteItemParamDto;
import com.ruoyi.production.mapper.ProcessRouteItemParamMapper;
import com.ruoyi.production.pojo.ProcessRouteItemParam;
import com.ruoyi.production.service.ProcessRouteItemParamService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
/**
 * <br>
 * å·¥è‰ºè·¯çº¿å·¥åºå‚数实例 ServiceImpl
 * </br>
 *
 * @author deslrey
 * @version 1.0
 * @since 2026/03/16 11:11
 */
@Slf4j
@Service
public class ProcessRouteItemParamServiceImpl extends ServiceImpl<ProcessRouteItemParamMapper, ProcessRouteItemParam> implements ProcessRouteItemParamService {
    @Autowired
    private BaseParamService baseParamService;
    @Override
    public IPage<ProcessRouteItemParamDto> pageList(Page<ProcessRouteItemParam> page, ProcessRouteItemParam param) {
        return baseMapper.selectParamPage(page, param);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean initParams(Long routeItemId, Long processId) {
        Long tenantId = SecurityUtils.getLoginUser().getTenantId();
        if (tenantId == null) {
            tenantId = 208L;
        }
        return baseMapper.insertFromProcessTemplate(routeItemId, processId, tenantId) > 0;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveParam(ProcessRouteItemParam param) {
        if (param == null) {
            throw new ServiceException("新增失败,参数不能为空");
        }
        if (param.getRouteItemId() == null || param.getParamId() == null) {
            throw new ServiceException("关联工序ID和参数项ID不能为空");
        }
        Long tenantId = SecurityUtils.getLoginUser().getTenantId();
        Long count = baseMapper.selectCount(Wrappers.<ProcessRouteItemParam>lambdaQuery()
                .eq(ProcessRouteItemParam::getRouteItemId, param.getRouteItemId())
                .eq(ProcessRouteItemParam::getParamId, param.getParamId())
                .eq(ProcessRouteItemParam::getTenantId, tenantId));
        if (count > 0) {
            throw new ServiceException("该工序已存在此参数项,请勿重复添加");
        }
        BaseParam baseParam = baseParamService.getById(param.getParamId());
        if (baseParam == null) {
            throw new ServiceException("新增失败,改基础参数不存在");
        }
        Integer maxSort = baseMapper.selectMaxSortByRouteItemId(param.getRouteItemId());
        param.setId(null);
        param.setProcessParamId(null);
        param.setSort(maxSort);
        param.setCreateTime(LocalDateTime.now());
        param.setTenantId(tenantId);
        this.save(param);
    }
}
src/main/java/com/ruoyi/production/service/impl/ProcessRouteItemServiceImpl.java
@@ -1,13 +1,17 @@
package com.ruoyi.production.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.production.dto.ProcessRouteItemDto;
import com.ruoyi.production.mapper.ProcessRouteItemMapper;
import com.ruoyi.production.mapper.ProcessRouteItemParamMapper;
import com.ruoyi.production.pojo.ProcessRouteItem;
import com.ruoyi.production.pojo.ProcessRouteItemParam;
import com.ruoyi.production.service.ProcessRouteItemService;
import com.ruoyi.production.service.ProductMaterialSkuService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -22,6 +26,12 @@
    @Autowired
    private  ProcessRouteItemMapper processRouteItemMapper;
    @Autowired
    private ProcessRouteItemParamMapper processRouteItemParamMapper;
    @Autowired
    private ProductMaterialSkuService productMaterialSkuService;
    @Override
    public List<ProcessRouteItemDto> listProcessRouteItemDto(ProcessRouteItemDto processRouteItemDto) {
@@ -73,6 +83,9 @@
        Long routeId = deleteProcessRouteItem.getRouteId();
        // åˆ é™¤æŒ‡å®šæ•°æ®
        processRouteItemMapper.deleteById(id);
        //  åˆ é™¤å¯¹åº”的参数列表
        processRouteItemParamMapper.delete(new LambdaQueryWrapper<ProcessRouteItemParam>().eq(ProcessRouteItemParam::getRouteItemId,id));
        // æŸ¥è¯¢è¯¥å·¥è‰ºè·¯çº¿çš„æ‰€æœ‰å·¥åºå¹¶æŒ‰ç…§é¡ºåºæŽ’序
        List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(Wrappers.<ProcessRouteItem>lambdaQuery()
                .eq(ProcessRouteItem::getRouteId, routeId)
@@ -87,4 +100,35 @@
        }
        return "删除成功";
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean saveOrUpdateProcess(ProcessRouteItem processRouteItem) {
        if (processRouteItem == null) {
            throw new ServiceException("数据不能为空");
        }
        if (processRouteItem.getProductModelId() != null) {
            Object product = productMaterialSkuService.getById(processRouteItem.getProductModelId());
            if (product == null) {
                throw new ServiceException("操作失败:关联的产品(ID:" + processRouteItem.getProductModelId() + ")不存在");
            }
        } else {
            throw new ServiceException("产品ID不能为空");
        }
        Long tenantId = SecurityUtils.getLoginUser().getTenantId();
        processRouteItem.setTenantId(tenantId);
        boolean result;
        if (processRouteItem.getId() == null) {
            Long maxSort = processRouteItemMapper.selectCount(Wrappers.<ProcessRouteItem>lambdaQuery().eq(ProcessRouteItem::getRouteId, processRouteItem.getRouteId()));
            processRouteItem.setDragSort((int) (maxSort + 1));
            result = this.save(processRouteItem);
            processRouteItemParamMapper.insertFromProcessTemplate(processRouteItem.getId(), processRouteItem.getProcessId(), tenantId);
        } else {
            result = this.updateById(processRouteItem);
        }
        return result;
    }
}
src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
@@ -46,21 +46,24 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Integer saveProcessRoute(ProcessRoute processRoute) {
        this.save(processRoute);
        String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        String idStr = String.format("%06d", processRoute.getId());
        String newProductCode = "GYLX" + dateStr + idStr;
        // æ›´æ–°æ•°æ®åº“中的productCode
        processRoute.setProcessRouteCode(newProductCode);
        return processRouteMapper.updateById(processRoute);
        save(processRoute);
        if (processRoute.getProcessRouteCode() == null || processRoute.getProcessRouteCode().trim().isEmpty()) {
            String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
            String idStr = String.format("%06d", processRoute.getId());
            String newProductCode = "GYLX" + dateStr + idStr;
            processRoute.setProcessRouteCode(newProductCode);
            return processRouteMapper.updateById(processRoute);
        }
        return 1;
    }
    @Override
    public int batchDelete(List<Long> ids) {
        //先判断是否已经引用了
        List<ProductOrder> productOrders = productOrderMapper.selectList(Wrappers.<ProductOrder>lambdaQuery().in(ProductOrder::getRouteId, ids));
        if (productOrders.size()>0){
        if (productOrders.size() > 0) {
            throw new RuntimeException("该工艺路线生产已引用,不能删除");
        }
        //删除工艺路线详情
src/main/resources/mapper/production/ProcessRouteItemParamMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
<?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.production.mapper.ProcessRouteItemParamMapper">
    <resultMap id="ProcessRouteItemParamResultMap" type="com.ruoyi.production.pojo.ProcessRouteItemParam">
        <id property="id" column="id"/>
        <result property="routeItemId" column="route_item_id"/>
        <result property="paramId" column="param_id"/>
        <result property="processParamId" column="process_param_id"/>
        <result property="standardValue" column="standard_value"/>
        <result property="minValue" column="min_value"/>
        <result property="maxValue" column="max_value"/>
        <result property="isRequired" column="is_required"/>
        <result property="sort" column="sort"/>
        <result property="tenantId" column="tenant_id"/>
        <result property="createTime" column="create_time"/>
        <result property="updateTime" column="update_time"/>
    </resultMap>
    <insert id="insertFromProcessTemplate">
        INSERT INTO process_route_item_param (route_item_id, param_id, process_param_id,
                                              standard_value, min_value, max_value,
                                              is_required, sort, tenant_id, create_time)
        SELECT #{routeItemId},
               param_id,
               id,
               standard_value,
               min_value,
               max_value,
               is_required,
               sort,
               #{tenantId},
               NOW()
        FROM product_process_param
        WHERE process_id = #{processId}
    </insert>
    <select id="selectParamPage" resultType="com.ruoyi.production.dto.ProcessRouteItemParamDto">
        select
        prip.*,
        bp.param_name,
        bp.param_key,
        bp.unit,
        bp.param_type,
        bp.param_format,
        bp.value_mode
        from process_route_item_param prip
        left join base_param bp on prip.param_id = bp.id
        <where>
            <if test="p.routeItemId != null">
                and prip.route_item_id = #{p.routeItemId}
            </if>
            <if test="p.tenantId != null">
                and prip.tenant_id = #{p.tenantId}
            </if>
        </where>
        order by prip.sort asc, prip.id asc
    </select>
    <select id="selectMaxSortByRouteItemId" resultType="java.lang.Integer">
        SELECT MAX(sort)
        FROM process_route_item_param
        WHERE route_item_id = #{routeItemId}
    </select>
</mapper>
src/main/resources/mapper/production/ProcessRouteMapper.xml
@@ -4,25 +4,30 @@
    <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProcessRoute">
            <id property="id" column="id"/>
            <result property="productModelId" column="product_model_id"/>
            <result property="description" column="description"/>
            <result property="tenantId" column="tenant_id"/>
            <result property="createTime" column="create_time"/>
            <result property="updateTime" column="update_time"/>
        <id property="id" column="id"/>
        <result property="productModelId" column="product_model_id"/>
        <result property="description" column="description"/>
        <result property="tenantId" column="tenant_id"/>
        <result property="createTime" column="create_time"/>
        <result property="updateTime" column="update_time"/>
        <result property="status" column="status"/>
    </resultMap>
    <select id="pageProcessRouteDto" resultType="com.ruoyi.production.dto.ProcessRouteDto">
        select ps.*, p.product_name,pm.product_id,pm.model,pb.bom_no
        select
        ps.*,
        pm.product_name, pms.product_id, pms.model, pb.bom_no
        from process_route ps
        left join product_bom pb on ps.bom_id = pb.id
        left join product_model pm on ps.product_model_id = pm.id
        left join product p on pm.product_id = p.id
        left join product_material_sku pms on ps.product_model_id = pms.id
        left join product_material pm on pms.product_id = pm.id
        <where>
            <if test="c.model != null and c.model != ''">
                and pm.model like concat('%',#{c.model},'%')
                and pms.model like concat('%', #{c.model}, '%')
            </if>
        </where>
        order by ps.id asc
        order by ps.id
    </select>
</mapper>
src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml
@@ -10,16 +10,17 @@
        <result property="createTime" column="create_time"/>
        <result property="updateTime" column="update_time"/>
    </resultMap>
    <select id="listItem" resultType="com.ruoyi.production.dto.ProductProcessRouteItemDto">
        select ppri.*,
               pp.name as process_name,
               pm.model,
               pp.name                                                      as process_name,
               pms.model,
               pm.unit,
               p.product_name,
               case when pwo.complete_quantity>0 then true else false end as is_complete
               pm.product_name,
               case when pwo.complete_quantity > 0 then true else false end as is_complete
        from product_process_route_item ppri
                 left join product_model pm on ppri.product_model_id = pm.id
                 left join product p on pm.product_id = p.id
                 left join product_material_sku pms on ppri.product_model_id = pms.id
                 left join product_material pm on pms.product_id = pm.id
                 left join product_process pp on pp.id = ppri.process_id
                 left join product_work_order pwo on pwo.product_process_route_item_id = ppri.id
        where ppri.product_order_id = #{orderId}