From 933c7ada1b74eafc0fc221ace6f49466b74e16e2 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 17 Feb 2026 18:57:14 +0800 Subject: [PATCH] feat(mes):qc-template 初始化 --- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/MesQcTemplateDO.java | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/MesQcTemplateIndicatorDO.java | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/MesQcTemplateItemDO.java | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateIndicatorMapper.java | 35 +++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateItemMapper.java | 41 +++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateMapper.java | 38 ++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/MesQcTemplateService.java | 173 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/MesQcTemplateServiceImpl.java | 234 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 716 insertions(+), 0 deletions(-) create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/MesQcTemplateDO.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/MesQcTemplateIndicatorDO.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/MesQcTemplateItemDO.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateIndicatorMapper.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateItemMapper.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateMapper.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/MesQcTemplateService.java create mode 100644 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/MesQcTemplateServiceImpl.java diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/MesQcTemplateDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/MesQcTemplateDO.java new file mode 100644 index 0000000..8a901f3 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/MesQcTemplateDO.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.qc; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * MES 质检方案 DO + * + * @author 芋道源码 + */ +@TableName("mes_qc_template") +@KeySequence("mes_qc_template_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MesQcTemplateDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 方案编号 + */ + private String code; + /** + * 方案名称 + */ + private String name; + // TODO @AI:List types;以这个为主;然后 type int 1 - IQC、2 - IPQC、3 - OQC、4 - RQC;前端传过来逗号分隔的字符串,后端转换成 List 存储到数据库中;查询时也是一样,数据库存储逗号分隔的字符串,后端转换成 List 返回给前端。 + /** + * 检测种类(逗号分隔:IQC,IPQC,OQC,RQC) + * + * 字典类型 mes_qc_type + */ + private String types; + // TODO @AI:Boolean + /** + * 是否启用(Y/N) + * + * 字典类型 sys_yes_no + */ + private String enableFlag; + /** + * 备注 + */ + private String remark; + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/MesQcTemplateIndicatorDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/MesQcTemplateIndicatorDO.java new file mode 100644 index 0000000..1e29801 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/MesQcTemplateIndicatorDO.java @@ -0,0 +1,73 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.qc; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.math.BigDecimal; + +/** + * MES 质检方案-检测指标项 DO + * + * @author 芋道源码 + */ +@TableName("mes_qc_template_indicator") +@KeySequence("mes_qc_template_indicator_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MesQcTemplateIndicatorDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + // TODO @AI:关联字段 + /** + * 质检方案ID + */ + private Long templateId; + // TODO @AI:关联字段 + /** + * 质检指标ID(关联 mes_qc_indicator,通过 JOIN 查询指标信息) + * + * TODO @芋艿:等 qc_indicator 完成后,完善关联查询和前端选择器 + */ + private Long indicatorId; + /** + * 检测方法/检测要求 + */ + private String checkMethod; + /** + * 标准值 + */ + private BigDecimal standardValue; + // TODO @AI:应该关联单位那个表; + /** + * 单位 + */ + private String unit; + /** + * 误差上限 + */ + private BigDecimal thresholdMax; + /** + * 误差下限 + */ + private BigDecimal thresholdMin; + /** + * 说明图 URL + */ + private String docUrl; + /** + * 备注 + */ + private String remark; + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/MesQcTemplateItemDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/MesQcTemplateItemDO.java new file mode 100644 index 0000000..e2bbae0 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/MesQcTemplateItemDO.java @@ -0,0 +1,66 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.qc; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.math.BigDecimal; + +/** + * MES 质检方案-产品关联 DO + * + * @author 芋道源码 + */ +@TableName("mes_qc_template_item") +@KeySequence("mes_qc_template_item_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MesQcTemplateItemDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + // TODO @AI:关联字段 + /** + * 质检方案ID + */ + private Long templateId; + // TODO @AI:关联字段 + /** + * 产品物料ID(关联 mes_md_item,通过 ID 查询物料信息) + */ + private Long itemId; + /** + * 最低检测数 + */ + private Integer quantityCheck; + /** + * 最大不合格数(0=不启用) + */ + private Integer quantityUnqualified; + /** + * 最大致命缺陷率(%,0=不允许) + */ + private BigDecimal criticalRate; + /** + * 最大严重缺陷率(%,0=不允许) + */ + private BigDecimal majorRate; + /** + * 最大轻微缺陷率(%) + */ + private BigDecimal minorRate; + /** + * 备注 + */ + private String remark; + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateIndicatorMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateIndicatorMapper.java new file mode 100644 index 0000000..2c7240f --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateIndicatorMapper.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.qc; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorPageReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateIndicatorDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * MES 质检方案-检测指标项 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface MesQcTemplateIndicatorMapper extends BaseMapperX { + + default PageResult selectPage(MesQcTemplateIndicatorPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(MesQcTemplateIndicatorDO::getTemplateId, reqVO.getTemplateId()) + .orderByAsc(MesQcTemplateIndicatorDO::getId)); + } + + default List selectListByTemplateId(Long templateId) { + return selectList(MesQcTemplateIndicatorDO::getTemplateId, templateId); + } + + default void deleteByTemplateId(Long templateId) { + delete(new LambdaQueryWrapperX() + .eq(MesQcTemplateIndicatorDO::getTemplateId, templateId)); + } + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateItemMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateItemMapper.java new file mode 100644 index 0000000..b423767 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateItemMapper.java @@ -0,0 +1,41 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.qc; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemPageReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateItemDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * MES 质检方案-产品关联 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface MesQcTemplateItemMapper extends BaseMapperX { + + default PageResult selectPage(MesQcTemplateItemPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(MesQcTemplateItemDO::getTemplateId, reqVO.getTemplateId()) + .orderByAsc(MesQcTemplateItemDO::getId)); + } + + default List selectListByTemplateId(Long templateId) { + return selectList(MesQcTemplateItemDO::getTemplateId, templateId); + } + + default MesQcTemplateItemDO selectByTemplateIdAndItemId(Long templateId, Long itemId) { + return selectOne(new LambdaQueryWrapperX() + .eq(MesQcTemplateItemDO::getTemplateId, templateId) + .eq(MesQcTemplateItemDO::getItemId, itemId)); + } + + default void deleteByTemplateId(Long templateId) { + delete(new LambdaQueryWrapperX() + .eq(MesQcTemplateItemDO::getTemplateId, templateId)); + } + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateMapper.java new file mode 100644 index 0000000..4acd5fb --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateMapper.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.qc; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplatePageReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * MES 质检方案 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface MesQcTemplateMapper extends BaseMapperX { + + default PageResult selectPage(MesQcTemplatePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(MesQcTemplateDO::getCode, reqVO.getCode()) + .likeIfPresent(MesQcTemplateDO::getName, reqVO.getName()) + .likeIfPresent(MesQcTemplateDO::getTypes, reqVO.getTypes()) + .eqIfPresent(MesQcTemplateDO::getEnableFlag, reqVO.getEnableFlag()) + .orderByDesc(MesQcTemplateDO::getId)); + } + + default MesQcTemplateDO selectByCode(String code) { + return selectOne(MesQcTemplateDO::getCode, code); + } + + default List selectList() { + return selectList(new LambdaQueryWrapperX() + .orderByDesc(MesQcTemplateDO::getId)); + } + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/MesQcTemplateService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/MesQcTemplateService.java new file mode 100644 index 0000000..ca971b7 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/MesQcTemplateService.java @@ -0,0 +1,173 @@ +package cn.iocoder.yudao.module.mes.service.qc; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplatePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateSaveReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorSaveReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateIndicatorDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateItemDO; +import jakarta.validation.Valid; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; + +/** + * MES 质检方案 Service 接口 + * + * @author 芋道源码 + */ +public interface MesQcTemplateService { + + // ========== 质检方案主表 ========== + + /** + * 创建质检方案 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createTemplate(@Valid MesQcTemplateSaveReqVO createReqVO); + + /** + * 更新质检方案 + * + * @param updateReqVO 更新信息 + */ + void updateTemplate(@Valid MesQcTemplateSaveReqVO updateReqVO); + + /** + * 删除质检方案(级联删除检测指标项和产品关联) + * + * @param id 编号 + */ + void deleteTemplate(Long id); + + /** + * 获得质检方案 + * + * @param id 编号 + * @return 质检方案 + */ + MesQcTemplateDO getTemplate(Long id); + + /** + * 获得质检方案分页 + * + * @param pageReqVO 分页查询 + * @return 质检方案分页 + */ + PageResult getTemplatePage(MesQcTemplatePageReqVO pageReqVO); + + /** + * 获得质检方案列表(用于下拉选择) + * + * @return 质检方案列表 + */ + List getTemplateList(); + + /** + * 获得质检方案列表 + * + * @param ids 编号数组 + * @return 质检方案列表 + */ + List getTemplateList(Collection ids); + + /** + * 获得质检方案 Map + * + * @param ids 编号数组 + * @return 质检方案 Map + */ + default Map getTemplateMap(Collection ids) { + return convertMap(getTemplateList(ids), MesQcTemplateDO::getId); + } + + // ========== 质检方案-检测指标项 ========== + + /** + * 创建检测指标项 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createTemplateIndicator(@Valid MesQcTemplateIndicatorSaveReqVO createReqVO); + + /** + * 更新检测指标项 + * + * @param updateReqVO 更新信息 + */ + void updateTemplateIndicator(@Valid MesQcTemplateIndicatorSaveReqVO updateReqVO); + + /** + * 删除检测指标项 + * + * @param id 编号 + */ + void deleteTemplateIndicator(Long id); + + /** + * 获得检测指标项 + * + * @param id 编号 + * @return 检测指标项 + */ + MesQcTemplateIndicatorDO getTemplateIndicator(Long id); + + /** + * 获得检测指标项分页 + * + * @param pageReqVO 分页查询 + * @return 检测指标项分页 + */ + PageResult getTemplateIndicatorPage(MesQcTemplateIndicatorPageReqVO pageReqVO); + + // ========== 质检方案-产品关联 ========== + + /** + * 创建产品关联 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createTemplateItem(@Valid MesQcTemplateItemSaveReqVO createReqVO); + + /** + * 更新产品关联 + * + * @param updateReqVO 更新信息 + */ + void updateTemplateItem(@Valid MesQcTemplateItemSaveReqVO updateReqVO); + + /** + * 删除产品关联 + * + * @param id 编号 + */ + void deleteTemplateItem(Long id); + + /** + * 获得产品关联 + * + * @param id 编号 + * @return 产品关联 + */ + MesQcTemplateItemDO getTemplateItem(Long id); + + /** + * 获得产品关联分页 + * + * @param pageReqVO 分页查询 + * @return 产品关联分页 + */ + PageResult getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO); + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/MesQcTemplateServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/MesQcTemplateServiceImpl.java new file mode 100644 index 0000000..6404fb9 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/MesQcTemplateServiceImpl.java @@ -0,0 +1,234 @@ +package cn.iocoder.yudao.module.mes.service.qc; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjUtil; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplatePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateSaveReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorSaveReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateIndicatorDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateItemDO; +import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcTemplateIndicatorMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcTemplateItemMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcTemplateMapper; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +// TODO @AI:类似别的模块,service 拆分为多个; +/** + * MES 质检方案 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class MesQcTemplateServiceImpl implements MesQcTemplateService { + + @Resource + private MesQcTemplateMapper templateMapper; + @Resource + private MesQcTemplateIndicatorMapper templateIndicatorMapper; + @Resource + private MesQcTemplateItemMapper templateItemMapper; + + // ========== 质检方案主表 ========== + + @Override + public Long createTemplate(MesQcTemplateSaveReqVO createReqVO) { + // 校验编码唯一 + validateTemplateCodeUnique(null, createReqVO.getCode()); + + // 插入 + MesQcTemplateDO template = BeanUtils.toBean(createReqVO, MesQcTemplateDO.class); + templateMapper.insert(template); + return template.getId(); + } + + @Override + public void updateTemplate(MesQcTemplateSaveReqVO updateReqVO) { + // 校验存在 + validateTemplateExists(updateReqVO.getId()); + // 校验编码唯一 + validateTemplateCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); + + // 更新 + MesQcTemplateDO updateObj = BeanUtils.toBean(updateReqVO, MesQcTemplateDO.class); + templateMapper.updateById(updateObj); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteTemplate(Long id) { + // 校验存在 + validateTemplateExists(id); + + // 删除主表 + templateMapper.deleteById(id); + // 级联删除检测指标项 + templateIndicatorMapper.deleteByTemplateId(id); + // 级联删除产品关联 + templateItemMapper.deleteByTemplateId(id); + } + + private void validateTemplateExists(Long id) { + if (templateMapper.selectById(id) == null) { + throw exception(QC_TEMPLATE_NOT_EXISTS); + } + } + + private void validateTemplateCodeUnique(Long id, String code) { + MesQcTemplateDO template = templateMapper.selectByCode(code); + if (template == null) { + return; + } + if (ObjUtil.notEqual(template.getId(), id)) { + throw exception(QC_TEMPLATE_CODE_DUPLICATE); + } + } + + @Override + public MesQcTemplateDO getTemplate(Long id) { + return templateMapper.selectById(id); + } + + @Override + public PageResult getTemplatePage(MesQcTemplatePageReqVO pageReqVO) { + return templateMapper.selectPage(pageReqVO); + } + + @Override + public List getTemplateList() { + return templateMapper.selectList(); + } + + @Override + public List getTemplateList(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return Collections.emptyList(); + } + return templateMapper.selectByIds(ids); + } + + // ========== 质检方案-检测指标项 ========== + + @Override + public Long createTemplateIndicator(MesQcTemplateIndicatorSaveReqVO createReqVO) { + // 校验方案存在 + validateTemplateExists(createReqVO.getTemplateId()); + + // 插入 + MesQcTemplateIndicatorDO indicator = BeanUtils.toBean(createReqVO, MesQcTemplateIndicatorDO.class); + templateIndicatorMapper.insert(indicator); + return indicator.getId(); + } + + @Override + public void updateTemplateIndicator(MesQcTemplateIndicatorSaveReqVO updateReqVO) { + // 校验存在 + validateTemplateIndicatorExists(updateReqVO.getId()); + + // 更新 + MesQcTemplateIndicatorDO updateObj = BeanUtils.toBean(updateReqVO, MesQcTemplateIndicatorDO.class); + templateIndicatorMapper.updateById(updateObj); + } + + @Override + public void deleteTemplateIndicator(Long id) { + // 校验存在 + validateTemplateIndicatorExists(id); + // 删除 + templateIndicatorMapper.deleteById(id); + } + + private void validateTemplateIndicatorExists(Long id) { + if (templateIndicatorMapper.selectById(id) == null) { + throw exception(QC_TEMPLATE_INDICATOR_NOT_EXISTS); + } + } + + @Override + public MesQcTemplateIndicatorDO getTemplateIndicator(Long id) { + return templateIndicatorMapper.selectById(id); + } + + @Override + public PageResult getTemplateIndicatorPage(MesQcTemplateIndicatorPageReqVO pageReqVO) { + return templateIndicatorMapper.selectPage(pageReqVO); + } + + // ========== 质检方案-产品关联 ========== + + @Override + public Long createTemplateItem(MesQcTemplateItemSaveReqVO createReqVO) { + // 校验方案存在 + validateTemplateExists(createReqVO.getTemplateId()); + // 校验产品在此方案中唯一 + validateTemplateItemNotDuplicate(null, createReqVO.getTemplateId(), createReqVO.getItemId()); + + // 插入 + MesQcTemplateItemDO item = BeanUtils.toBean(createReqVO, MesQcTemplateItemDO.class); + templateItemMapper.insert(item); + return item.getId(); + } + + @Override + public void updateTemplateItem(MesQcTemplateItemSaveReqVO updateReqVO) { + // 校验存在 + validateTemplateItemExists(updateReqVO.getId()); + // 校验产品在此方案中唯一 + validateTemplateItemNotDuplicate(updateReqVO.getId(), updateReqVO.getTemplateId(), updateReqVO.getItemId()); + + // 更新 + MesQcTemplateItemDO updateObj = BeanUtils.toBean(updateReqVO, MesQcTemplateItemDO.class); + templateItemMapper.updateById(updateObj); + } + + @Override + public void deleteTemplateItem(Long id) { + // 校验存在 + validateTemplateItemExists(id); + // 删除 + templateItemMapper.deleteById(id); + } + + private void validateTemplateItemExists(Long id) { + if (templateItemMapper.selectById(id) == null) { + throw exception(QC_TEMPLATE_ITEM_NOT_EXISTS); + } + } + + private void validateTemplateItemNotDuplicate(Long id, Long templateId, Long itemId) { + MesQcTemplateItemDO existing = templateItemMapper.selectByTemplateIdAndItemId(templateId, itemId); + if (existing == null) { + return; + } + if (ObjUtil.notEqual(existing.getId(), id)) { + throw exception(QC_TEMPLATE_ITEM_DUPLICATE); + } + } + + @Override + public MesQcTemplateItemDO getTemplateItem(Long id) { + return templateItemMapper.selectById(id); + } + + @Override + public PageResult getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO) { + return templateItemMapper.selectPage(pageReqVO); + } + +} -- libgit2 0.21.4