Commit 933c7ada1b74eafc0fc221ace6f49466b74e16e2

Authored by YunaiV
1 parent 95b09b98

feat(mes):qc-template 初始化

yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/MesQcTemplateDO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.dataobject.qc;
  2 +
  3 +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  4 +import com.baomidou.mybatisplus.annotation.KeySequence;
  5 +import com.baomidou.mybatisplus.annotation.TableId;
  6 +import com.baomidou.mybatisplus.annotation.TableName;
  7 +import lombok.*;
  8 +
  9 +/**
  10 + * MES 质检方案 DO
  11 + *
  12 + * @author 芋道源码
  13 + */
  14 +@TableName("mes_qc_template")
  15 +@KeySequence("mes_qc_template_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
  16 +@Data
  17 +@EqualsAndHashCode(callSuper = true)
  18 +@ToString(callSuper = true)
  19 +@Builder
  20 +@NoArgsConstructor
  21 +@AllArgsConstructor
  22 +public class MesQcTemplateDO extends BaseDO {
  23 +
  24 + /**
  25 + * 编号
  26 + */
  27 + @TableId
  28 + private Long id;
  29 + /**
  30 + * 方案编号
  31 + */
  32 + private String code;
  33 + /**
  34 + * 方案名称
  35 + */
  36 + private String name;
  37 + // TODO @AI:List<Integer> types;以这个为主;然后 type int 1 - IQC、2 - IPQC、3 - OQC、4 - RQC;前端传过来逗号分隔的字符串,后端转换成 List<Integer> 存储到数据库中;查询时也是一样,数据库存储逗号分隔的字符串,后端转换成 List<Integer> 返回给前端。
  38 + /**
  39 + * 检测种类(逗号分隔:IQC,IPQC,OQC,RQC)
  40 + *
  41 + * 字典类型 mes_qc_type
  42 + */
  43 + private String types;
  44 + // TODO @AI:Boolean
  45 + /**
  46 + * 是否启用(Y/N)
  47 + *
  48 + * 字典类型 sys_yes_no
  49 + */
  50 + private String enableFlag;
  51 + /**
  52 + * 备注
  53 + */
  54 + private String remark;
  55 +
  56 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/MesQcTemplateIndicatorDO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.dataobject.qc;
  2 +
  3 +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  4 +import com.baomidou.mybatisplus.annotation.KeySequence;
  5 +import com.baomidou.mybatisplus.annotation.TableId;
  6 +import com.baomidou.mybatisplus.annotation.TableName;
  7 +import lombok.*;
  8 +
  9 +import java.math.BigDecimal;
  10 +
  11 +/**
  12 + * MES 质检方案-检测指标项 DO
  13 + *
  14 + * @author 芋道源码
  15 + */
  16 +@TableName("mes_qc_template_indicator")
  17 +@KeySequence("mes_qc_template_indicator_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
  18 +@Data
  19 +@EqualsAndHashCode(callSuper = true)
  20 +@ToString(callSuper = true)
  21 +@Builder
  22 +@NoArgsConstructor
  23 +@AllArgsConstructor
  24 +public class MesQcTemplateIndicatorDO extends BaseDO {
  25 +
  26 + /**
  27 + * 编号
  28 + */
  29 + @TableId
  30 + private Long id;
  31 + // TODO @AI:关联字段
  32 + /**
  33 + * 质检方案ID
  34 + */
  35 + private Long templateId;
  36 + // TODO @AI:关联字段
  37 + /**
  38 + * 质检指标ID(关联 mes_qc_indicator,通过 JOIN 查询指标信息)
  39 + *
  40 + * TODO @芋艿:等 qc_indicator 完成后,完善关联查询和前端选择器
  41 + */
  42 + private Long indicatorId;
  43 + /**
  44 + * 检测方法/检测要求
  45 + */
  46 + private String checkMethod;
  47 + /**
  48 + * 标准值
  49 + */
  50 + private BigDecimal standardValue;
  51 + // TODO @AI:应该关联单位那个表;
  52 + /**
  53 + * 单位
  54 + */
  55 + private String unit;
  56 + /**
  57 + * 误差上限
  58 + */
  59 + private BigDecimal thresholdMax;
  60 + /**
  61 + * 误差下限
  62 + */
  63 + private BigDecimal thresholdMin;
  64 + /**
  65 + * 说明图 URL
  66 + */
  67 + private String docUrl;
  68 + /**
  69 + * 备注
  70 + */
  71 + private String remark;
  72 +
  73 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/MesQcTemplateItemDO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.dataobject.qc;
  2 +
  3 +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  4 +import com.baomidou.mybatisplus.annotation.KeySequence;
  5 +import com.baomidou.mybatisplus.annotation.TableId;
  6 +import com.baomidou.mybatisplus.annotation.TableName;
  7 +import lombok.*;
  8 +
  9 +import java.math.BigDecimal;
  10 +
  11 +/**
  12 + * MES 质检方案-产品关联 DO
  13 + *
  14 + * @author 芋道源码
  15 + */
  16 +@TableName("mes_qc_template_item")
  17 +@KeySequence("mes_qc_template_item_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
  18 +@Data
  19 +@EqualsAndHashCode(callSuper = true)
  20 +@ToString(callSuper = true)
  21 +@Builder
  22 +@NoArgsConstructor
  23 +@AllArgsConstructor
  24 +public class MesQcTemplateItemDO extends BaseDO {
  25 +
  26 + /**
  27 + * 编号
  28 + */
  29 + @TableId
  30 + private Long id;
  31 + // TODO @AI:关联字段
  32 + /**
  33 + * 质检方案ID
  34 + */
  35 + private Long templateId;
  36 + // TODO @AI:关联字段
  37 + /**
  38 + * 产品物料ID(关联 mes_md_item,通过 ID 查询物料信息)
  39 + */
  40 + private Long itemId;
  41 + /**
  42 + * 最低检测数
  43 + */
  44 + private Integer quantityCheck;
  45 + /**
  46 + * 最大不合格数(0=不启用)
  47 + */
  48 + private Integer quantityUnqualified;
  49 + /**
  50 + * 最大致命缺陷率(%,0=不允许)
  51 + */
  52 + private BigDecimal criticalRate;
  53 + /**
  54 + * 最大严重缺陷率(%,0=不允许)
  55 + */
  56 + private BigDecimal majorRate;
  57 + /**
  58 + * 最大轻微缺陷率(%)
  59 + */
  60 + private BigDecimal minorRate;
  61 + /**
  62 + * 备注
  63 + */
  64 + private String remark;
  65 +
  66 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateIndicatorMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.mysql.qc;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  5 +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorPageReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateIndicatorDO;
  8 +import org.apache.ibatis.annotations.Mapper;
  9 +
  10 +import java.util.List;
  11 +
  12 +/**
  13 + * MES 质检方案-检测指标项 Mapper
  14 + *
  15 + * @author 芋道源码
  16 + */
  17 +@Mapper
  18 +public interface MesQcTemplateIndicatorMapper extends BaseMapperX<MesQcTemplateIndicatorDO> {
  19 +
  20 + default PageResult<MesQcTemplateIndicatorDO> selectPage(MesQcTemplateIndicatorPageReqVO reqVO) {
  21 + return selectPage(reqVO, new LambdaQueryWrapperX<MesQcTemplateIndicatorDO>()
  22 + .eqIfPresent(MesQcTemplateIndicatorDO::getTemplateId, reqVO.getTemplateId())
  23 + .orderByAsc(MesQcTemplateIndicatorDO::getId));
  24 + }
  25 +
  26 + default List<MesQcTemplateIndicatorDO> selectListByTemplateId(Long templateId) {
  27 + return selectList(MesQcTemplateIndicatorDO::getTemplateId, templateId);
  28 + }
  29 +
  30 + default void deleteByTemplateId(Long templateId) {
  31 + delete(new LambdaQueryWrapperX<MesQcTemplateIndicatorDO>()
  32 + .eq(MesQcTemplateIndicatorDO::getTemplateId, templateId));
  33 + }
  34 +
  35 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateItemMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.mysql.qc;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  5 +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemPageReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateItemDO;
  8 +import org.apache.ibatis.annotations.Mapper;
  9 +
  10 +import java.util.List;
  11 +
  12 +/**
  13 + * MES 质检方案-产品关联 Mapper
  14 + *
  15 + * @author 芋道源码
  16 + */
  17 +@Mapper
  18 +public interface MesQcTemplateItemMapper extends BaseMapperX<MesQcTemplateItemDO> {
  19 +
  20 + default PageResult<MesQcTemplateItemDO> selectPage(MesQcTemplateItemPageReqVO reqVO) {
  21 + return selectPage(reqVO, new LambdaQueryWrapperX<MesQcTemplateItemDO>()
  22 + .eqIfPresent(MesQcTemplateItemDO::getTemplateId, reqVO.getTemplateId())
  23 + .orderByAsc(MesQcTemplateItemDO::getId));
  24 + }
  25 +
  26 + default List<MesQcTemplateItemDO> selectListByTemplateId(Long templateId) {
  27 + return selectList(MesQcTemplateItemDO::getTemplateId, templateId);
  28 + }
  29 +
  30 + default MesQcTemplateItemDO selectByTemplateIdAndItemId(Long templateId, Long itemId) {
  31 + return selectOne(new LambdaQueryWrapperX<MesQcTemplateItemDO>()
  32 + .eq(MesQcTemplateItemDO::getTemplateId, templateId)
  33 + .eq(MesQcTemplateItemDO::getItemId, itemId));
  34 + }
  35 +
  36 + default void deleteByTemplateId(Long templateId) {
  37 + delete(new LambdaQueryWrapperX<MesQcTemplateItemDO>()
  38 + .eq(MesQcTemplateItemDO::getTemplateId, templateId));
  39 + }
  40 +
  41 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.mysql.qc;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  5 +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplatePageReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateDO;
  8 +import org.apache.ibatis.annotations.Mapper;
  9 +
  10 +import java.util.List;
  11 +
  12 +/**
  13 + * MES 质检方案 Mapper
  14 + *
  15 + * @author 芋道源码
  16 + */
  17 +@Mapper
  18 +public interface MesQcTemplateMapper extends BaseMapperX<MesQcTemplateDO> {
  19 +
  20 + default PageResult<MesQcTemplateDO> selectPage(MesQcTemplatePageReqVO reqVO) {
  21 + return selectPage(reqVO, new LambdaQueryWrapperX<MesQcTemplateDO>()
  22 + .likeIfPresent(MesQcTemplateDO::getCode, reqVO.getCode())
  23 + .likeIfPresent(MesQcTemplateDO::getName, reqVO.getName())
  24 + .likeIfPresent(MesQcTemplateDO::getTypes, reqVO.getTypes())
  25 + .eqIfPresent(MesQcTemplateDO::getEnableFlag, reqVO.getEnableFlag())
  26 + .orderByDesc(MesQcTemplateDO::getId));
  27 + }
  28 +
  29 + default MesQcTemplateDO selectByCode(String code) {
  30 + return selectOne(MesQcTemplateDO::getCode, code);
  31 + }
  32 +
  33 + default List<MesQcTemplateDO> selectList() {
  34 + return selectList(new LambdaQueryWrapperX<MesQcTemplateDO>()
  35 + .orderByDesc(MesQcTemplateDO::getId));
  36 + }
  37 +
  38 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/MesQcTemplateService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.qc;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplatePageReqVO;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateSaveReqVO;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorPageReqVO;
  7 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorSaveReqVO;
  8 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemPageReqVO;
  9 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO;
  10 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateDO;
  11 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateIndicatorDO;
  12 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateItemDO;
  13 +import jakarta.validation.Valid;
  14 +
  15 +import java.util.Collection;
  16 +import java.util.List;
  17 +import java.util.Map;
  18 +
  19 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
  20 +
  21 +/**
  22 + * MES 质检方案 Service 接口
  23 + *
  24 + * @author 芋道源码
  25 + */
  26 +public interface MesQcTemplateService {
  27 +
  28 + // ========== 质检方案主表 ==========
  29 +
  30 + /**
  31 + * 创建质检方案
  32 + *
  33 + * @param createReqVO 创建信息
  34 + * @return 编号
  35 + */
  36 + Long createTemplate(@Valid MesQcTemplateSaveReqVO createReqVO);
  37 +
  38 + /**
  39 + * 更新质检方案
  40 + *
  41 + * @param updateReqVO 更新信息
  42 + */
  43 + void updateTemplate(@Valid MesQcTemplateSaveReqVO updateReqVO);
  44 +
  45 + /**
  46 + * 删除质检方案(级联删除检测指标项和产品关联)
  47 + *
  48 + * @param id 编号
  49 + */
  50 + void deleteTemplate(Long id);
  51 +
  52 + /**
  53 + * 获得质检方案
  54 + *
  55 + * @param id 编号
  56 + * @return 质检方案
  57 + */
  58 + MesQcTemplateDO getTemplate(Long id);
  59 +
  60 + /**
  61 + * 获得质检方案分页
  62 + *
  63 + * @param pageReqVO 分页查询
  64 + * @return 质检方案分页
  65 + */
  66 + PageResult<MesQcTemplateDO> getTemplatePage(MesQcTemplatePageReqVO pageReqVO);
  67 +
  68 + /**
  69 + * 获得质检方案列表(用于下拉选择)
  70 + *
  71 + * @return 质检方案列表
  72 + */
  73 + List<MesQcTemplateDO> getTemplateList();
  74 +
  75 + /**
  76 + * 获得质检方案列表
  77 + *
  78 + * @param ids 编号数组
  79 + * @return 质检方案列表
  80 + */
  81 + List<MesQcTemplateDO> getTemplateList(Collection<Long> ids);
  82 +
  83 + /**
  84 + * 获得质检方案 Map
  85 + *
  86 + * @param ids 编号数组
  87 + * @return 质检方案 Map
  88 + */
  89 + default Map<Long, MesQcTemplateDO> getTemplateMap(Collection<Long> ids) {
  90 + return convertMap(getTemplateList(ids), MesQcTemplateDO::getId);
  91 + }
  92 +
  93 + // ========== 质检方案-检测指标项 ==========
  94 +
  95 + /**
  96 + * 创建检测指标项
  97 + *
  98 + * @param createReqVO 创建信息
  99 + * @return 编号
  100 + */
  101 + Long createTemplateIndicator(@Valid MesQcTemplateIndicatorSaveReqVO createReqVO);
  102 +
  103 + /**
  104 + * 更新检测指标项
  105 + *
  106 + * @param updateReqVO 更新信息
  107 + */
  108 + void updateTemplateIndicator(@Valid MesQcTemplateIndicatorSaveReqVO updateReqVO);
  109 +
  110 + /**
  111 + * 删除检测指标项
  112 + *
  113 + * @param id 编号
  114 + */
  115 + void deleteTemplateIndicator(Long id);
  116 +
  117 + /**
  118 + * 获得检测指标项
  119 + *
  120 + * @param id 编号
  121 + * @return 检测指标项
  122 + */
  123 + MesQcTemplateIndicatorDO getTemplateIndicator(Long id);
  124 +
  125 + /**
  126 + * 获得检测指标项分页
  127 + *
  128 + * @param pageReqVO 分页查询
  129 + * @return 检测指标项分页
  130 + */
  131 + PageResult<MesQcTemplateIndicatorDO> getTemplateIndicatorPage(MesQcTemplateIndicatorPageReqVO pageReqVO);
  132 +
  133 + // ========== 质检方案-产品关联 ==========
  134 +
  135 + /**
  136 + * 创建产品关联
  137 + *
  138 + * @param createReqVO 创建信息
  139 + * @return 编号
  140 + */
  141 + Long createTemplateItem(@Valid MesQcTemplateItemSaveReqVO createReqVO);
  142 +
  143 + /**
  144 + * 更新产品关联
  145 + *
  146 + * @param updateReqVO 更新信息
  147 + */
  148 + void updateTemplateItem(@Valid MesQcTemplateItemSaveReqVO updateReqVO);
  149 +
  150 + /**
  151 + * 删除产品关联
  152 + *
  153 + * @param id 编号
  154 + */
  155 + void deleteTemplateItem(Long id);
  156 +
  157 + /**
  158 + * 获得产品关联
  159 + *
  160 + * @param id 编号
  161 + * @return 产品关联
  162 + */
  163 + MesQcTemplateItemDO getTemplateItem(Long id);
  164 +
  165 + /**
  166 + * 获得产品关联分页
  167 + *
  168 + * @param pageReqVO 分页查询
  169 + * @return 产品关联分页
  170 + */
  171 + PageResult<MesQcTemplateItemDO> getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO);
  172 +
  173 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/MesQcTemplateServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.qc;
  2 +
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.hutool.core.util.ObjUtil;
  5 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  6 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  7 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplatePageReqVO;
  8 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateSaveReqVO;
  9 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorPageReqVO;
  10 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorSaveReqVO;
  11 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemPageReqVO;
  12 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO;
  13 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateDO;
  14 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateIndicatorDO;
  15 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateItemDO;
  16 +import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcTemplateIndicatorMapper;
  17 +import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcTemplateItemMapper;
  18 +import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcTemplateMapper;
  19 +import jakarta.annotation.Resource;
  20 +import org.springframework.stereotype.Service;
  21 +import org.springframework.transaction.annotation.Transactional;
  22 +import org.springframework.validation.annotation.Validated;
  23 +
  24 +import java.util.Collection;
  25 +import java.util.Collections;
  26 +import java.util.List;
  27 +
  28 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  29 +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
  30 +
  31 +// TODO @AI:类似别的模块,service 拆分为多个;
  32 +/**
  33 + * MES 质检方案 Service 实现类
  34 + *
  35 + * @author 芋道源码
  36 + */
  37 +@Service
  38 +@Validated
  39 +public class MesQcTemplateServiceImpl implements MesQcTemplateService {
  40 +
  41 + @Resource
  42 + private MesQcTemplateMapper templateMapper;
  43 + @Resource
  44 + private MesQcTemplateIndicatorMapper templateIndicatorMapper;
  45 + @Resource
  46 + private MesQcTemplateItemMapper templateItemMapper;
  47 +
  48 + // ========== 质检方案主表 ==========
  49 +
  50 + @Override
  51 + public Long createTemplate(MesQcTemplateSaveReqVO createReqVO) {
  52 + // 校验编码唯一
  53 + validateTemplateCodeUnique(null, createReqVO.getCode());
  54 +
  55 + // 插入
  56 + MesQcTemplateDO template = BeanUtils.toBean(createReqVO, MesQcTemplateDO.class);
  57 + templateMapper.insert(template);
  58 + return template.getId();
  59 + }
  60 +
  61 + @Override
  62 + public void updateTemplate(MesQcTemplateSaveReqVO updateReqVO) {
  63 + // 校验存在
  64 + validateTemplateExists(updateReqVO.getId());
  65 + // 校验编码唯一
  66 + validateTemplateCodeUnique(updateReqVO.getId(), updateReqVO.getCode());
  67 +
  68 + // 更新
  69 + MesQcTemplateDO updateObj = BeanUtils.toBean(updateReqVO, MesQcTemplateDO.class);
  70 + templateMapper.updateById(updateObj);
  71 + }
  72 +
  73 + @Override
  74 + @Transactional(rollbackFor = Exception.class)
  75 + public void deleteTemplate(Long id) {
  76 + // 校验存在
  77 + validateTemplateExists(id);
  78 +
  79 + // 删除主表
  80 + templateMapper.deleteById(id);
  81 + // 级联删除检测指标项
  82 + templateIndicatorMapper.deleteByTemplateId(id);
  83 + // 级联删除产品关联
  84 + templateItemMapper.deleteByTemplateId(id);
  85 + }
  86 +
  87 + private void validateTemplateExists(Long id) {
  88 + if (templateMapper.selectById(id) == null) {
  89 + throw exception(QC_TEMPLATE_NOT_EXISTS);
  90 + }
  91 + }
  92 +
  93 + private void validateTemplateCodeUnique(Long id, String code) {
  94 + MesQcTemplateDO template = templateMapper.selectByCode(code);
  95 + if (template == null) {
  96 + return;
  97 + }
  98 + if (ObjUtil.notEqual(template.getId(), id)) {
  99 + throw exception(QC_TEMPLATE_CODE_DUPLICATE);
  100 + }
  101 + }
  102 +
  103 + @Override
  104 + public MesQcTemplateDO getTemplate(Long id) {
  105 + return templateMapper.selectById(id);
  106 + }
  107 +
  108 + @Override
  109 + public PageResult<MesQcTemplateDO> getTemplatePage(MesQcTemplatePageReqVO pageReqVO) {
  110 + return templateMapper.selectPage(pageReqVO);
  111 + }
  112 +
  113 + @Override
  114 + public List<MesQcTemplateDO> getTemplateList() {
  115 + return templateMapper.selectList();
  116 + }
  117 +
  118 + @Override
  119 + public List<MesQcTemplateDO> getTemplateList(Collection<Long> ids) {
  120 + if (CollUtil.isEmpty(ids)) {
  121 + return Collections.emptyList();
  122 + }
  123 + return templateMapper.selectByIds(ids);
  124 + }
  125 +
  126 + // ========== 质检方案-检测指标项 ==========
  127 +
  128 + @Override
  129 + public Long createTemplateIndicator(MesQcTemplateIndicatorSaveReqVO createReqVO) {
  130 + // 校验方案存在
  131 + validateTemplateExists(createReqVO.getTemplateId());
  132 +
  133 + // 插入
  134 + MesQcTemplateIndicatorDO indicator = BeanUtils.toBean(createReqVO, MesQcTemplateIndicatorDO.class);
  135 + templateIndicatorMapper.insert(indicator);
  136 + return indicator.getId();
  137 + }
  138 +
  139 + @Override
  140 + public void updateTemplateIndicator(MesQcTemplateIndicatorSaveReqVO updateReqVO) {
  141 + // 校验存在
  142 + validateTemplateIndicatorExists(updateReqVO.getId());
  143 +
  144 + // 更新
  145 + MesQcTemplateIndicatorDO updateObj = BeanUtils.toBean(updateReqVO, MesQcTemplateIndicatorDO.class);
  146 + templateIndicatorMapper.updateById(updateObj);
  147 + }
  148 +
  149 + @Override
  150 + public void deleteTemplateIndicator(Long id) {
  151 + // 校验存在
  152 + validateTemplateIndicatorExists(id);
  153 + // 删除
  154 + templateIndicatorMapper.deleteById(id);
  155 + }
  156 +
  157 + private void validateTemplateIndicatorExists(Long id) {
  158 + if (templateIndicatorMapper.selectById(id) == null) {
  159 + throw exception(QC_TEMPLATE_INDICATOR_NOT_EXISTS);
  160 + }
  161 + }
  162 +
  163 + @Override
  164 + public MesQcTemplateIndicatorDO getTemplateIndicator(Long id) {
  165 + return templateIndicatorMapper.selectById(id);
  166 + }
  167 +
  168 + @Override
  169 + public PageResult<MesQcTemplateIndicatorDO> getTemplateIndicatorPage(MesQcTemplateIndicatorPageReqVO pageReqVO) {
  170 + return templateIndicatorMapper.selectPage(pageReqVO);
  171 + }
  172 +
  173 + // ========== 质检方案-产品关联 ==========
  174 +
  175 + @Override
  176 + public Long createTemplateItem(MesQcTemplateItemSaveReqVO createReqVO) {
  177 + // 校验方案存在
  178 + validateTemplateExists(createReqVO.getTemplateId());
  179 + // 校验产品在此方案中唯一
  180 + validateTemplateItemNotDuplicate(null, createReqVO.getTemplateId(), createReqVO.getItemId());
  181 +
  182 + // 插入
  183 + MesQcTemplateItemDO item = BeanUtils.toBean(createReqVO, MesQcTemplateItemDO.class);
  184 + templateItemMapper.insert(item);
  185 + return item.getId();
  186 + }
  187 +
  188 + @Override
  189 + public void updateTemplateItem(MesQcTemplateItemSaveReqVO updateReqVO) {
  190 + // 校验存在
  191 + validateTemplateItemExists(updateReqVO.getId());
  192 + // 校验产品在此方案中唯一
  193 + validateTemplateItemNotDuplicate(updateReqVO.getId(), updateReqVO.getTemplateId(), updateReqVO.getItemId());
  194 +
  195 + // 更新
  196 + MesQcTemplateItemDO updateObj = BeanUtils.toBean(updateReqVO, MesQcTemplateItemDO.class);
  197 + templateItemMapper.updateById(updateObj);
  198 + }
  199 +
  200 + @Override
  201 + public void deleteTemplateItem(Long id) {
  202 + // 校验存在
  203 + validateTemplateItemExists(id);
  204 + // 删除
  205 + templateItemMapper.deleteById(id);
  206 + }
  207 +
  208 + private void validateTemplateItemExists(Long id) {
  209 + if (templateItemMapper.selectById(id) == null) {
  210 + throw exception(QC_TEMPLATE_ITEM_NOT_EXISTS);
  211 + }
  212 + }
  213 +
  214 + private void validateTemplateItemNotDuplicate(Long id, Long templateId, Long itemId) {
  215 + MesQcTemplateItemDO existing = templateItemMapper.selectByTemplateIdAndItemId(templateId, itemId);
  216 + if (existing == null) {
  217 + return;
  218 + }
  219 + if (ObjUtil.notEqual(existing.getId(), id)) {
  220 + throw exception(QC_TEMPLATE_ITEM_DUPLICATE);
  221 + }
  222 + }
  223 +
  224 + @Override
  225 + public MesQcTemplateItemDO getTemplateItem(Long id) {
  226 + return templateItemMapper.selectById(id);
  227 + }
  228 +
  229 + @Override
  230 + public PageResult<MesQcTemplateItemDO> getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO) {
  231 + return templateItemMapper.selectPage(pageReqVO);
  232 + }
  233 +
  234 +}
... ...