feat(mes): 重构质检方案 Controller/Service/Mapper

- MesQcTemplateController 拆分为三个独立 Controller:
  MesQcTemplateIndicatorController(/mes/qc/template/indicator)
  MesQcTemplateItemController(/mes/qc/template/item)
- Service 层 get 方法统一返回 DO,JOIN 逻辑移至各 Controller 的 convertXxxRespVO()
- MesQcTemplatePageReqVO:types(List) 改为 type(Integer),支持单个检测种类筛选
- MesQcTemplateMapper:FIND_IN_SET 改用 MyBatisUtils.findInSet()
- MesQcTemplateItemSaveReqVO:清理 @Schema 描述中冗余括号说明
- 清理所有 TODO @AI 注释
This commit is contained in:
YunaiV
2026-02-19 12:41:50 +08:00
parent ba43933138
commit 0a70bb5cef
10 changed files with 328 additions and 239 deletions

View File

@ -9,12 +9,6 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplatePageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateRespVO;
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.MesQcTemplateIndicatorRespVO;
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.MesQcTemplateItemRespVO;
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.service.qc.MesQcTemplateService;
import io.swagger.v3.oas.annotations.Operation;
@ -33,7 +27,6 @@ import java.util.List;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
// TODO @AI拆分为多个 controller和别的模块
@Tag(name = "管理后台 - MES 质检方案")
@RestController
@RequestMapping("/mes/qc/template")
@ -43,8 +36,6 @@ public class MesQcTemplateController {
@Resource
private MesQcTemplateService templateService;
// ========== 质检方案主表 ==========
@PostMapping("/create")
@Operation(summary = "创建质检方案")
@PreAuthorize("@ss.hasPermission('mes:qc-template:create')")
@ -74,16 +65,16 @@ public class MesQcTemplateController {
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
public CommonResult<MesQcTemplateRespVO> getTemplate(@RequestParam("id") Long id) {
// TODO @AIservice 只返回 do数据拼接放在 controller 里;
return success(templateService.getTemplate(id));
MesQcTemplateDO template = templateService.getTemplate(id);
return success(BeanUtils.toBean(template, MesQcTemplateRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得质检方案分页")
@PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
public CommonResult<PageResult<MesQcTemplateRespVO>> getTemplatePage(@Valid MesQcTemplatePageReqVO pageReqVO) {
// TODO @AIservice 只返回 do数据拼接放在 controller 里;
return success(templateService.getTemplatePage(pageReqVO));
PageResult<MesQcTemplateDO> pageResult = templateService.getTemplatePage(pageReqVO);
return success(BeanUtils.toBean(pageResult, MesQcTemplateRespVO.class));
}
@GetMapping("/simple-list")
@ -100,101 +91,9 @@ public class MesQcTemplateController {
public void exportTemplateExcel(@Valid MesQcTemplatePageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<MesQcTemplateRespVO> list = templateService.getTemplatePage(pageReqVO).getList();
// TODO @AIservice 只返回 do数据拼接放在 controller 里;
ExcelUtils.write(response, "质检方案.xls", "数据", MesQcTemplateRespVO.class, list);
}
// ========== 质检方案-检测指标项 ==========
// TODO @AI是不是拆分成独立的 controller类似别的模块
@PostMapping("/indicator/create")
@Operation(summary = "创建质检方案-检测指标项")
@PreAuthorize("@ss.hasPermission('mes:qc-template:create')")
public CommonResult<Long> createTemplateIndicator(@Valid @RequestBody MesQcTemplateIndicatorSaveReqVO createReqVO) {
return success(templateService.createTemplateIndicator(createReqVO));
}
@PutMapping("/indicator/update")
@Operation(summary = "更新质检方案-检测指标项")
@PreAuthorize("@ss.hasPermission('mes:qc-template:update')")
public CommonResult<Boolean> updateTemplateIndicator(@Valid @RequestBody MesQcTemplateIndicatorSaveReqVO updateReqVO) {
templateService.updateTemplateIndicator(updateReqVO);
return success(true);
}
@DeleteMapping("/indicator/delete")
@Operation(summary = "删除质检方案-检测指标项")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('mes:qc-template:update')")
public CommonResult<Boolean> deleteTemplateIndicator(@RequestParam("id") Long id) {
templateService.deleteTemplateIndicator(id);
return success(true);
}
@GetMapping("/indicator/get")
@Operation(summary = "获得质检方案-检测指标项")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
public CommonResult<MesQcTemplateIndicatorRespVO> getTemplateIndicator(@RequestParam("id") Long id) {
// TODO @AIservice 只返回 do数据拼接放在 controller 里;
return success(templateService.getTemplateIndicator(id));
}
@GetMapping("/indicator/page")
@Operation(summary = "获得质检方案-检测指标项分页")
@PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
public CommonResult<PageResult<MesQcTemplateIndicatorRespVO>> getTemplateIndicatorPage(
@Valid MesQcTemplateIndicatorPageReqVO pageReqVO) {
// TODO @AIservice 只返回 do数据拼接放在 controller 里;
return success(templateService.getTemplateIndicatorPage(pageReqVO));
}
// ========== 质检方案-产品关联 ==========
// TODO @AI是不是拆分成独立的 controller类似别的模块
@PostMapping("/item/create")
@Operation(summary = "创建质检方案-产品关联")
@PreAuthorize("@ss.hasPermission('mes:qc-template:create')")
public CommonResult<Long> createTemplateItem(@Valid @RequestBody MesQcTemplateItemSaveReqVO createReqVO) {
return success(templateService.createTemplateItem(createReqVO));
}
@PutMapping("/item/update")
@Operation(summary = "更新质检方案-产品关联")
@PreAuthorize("@ss.hasPermission('mes:qc-template:update')")
public CommonResult<Boolean> updateTemplateItem(@Valid @RequestBody MesQcTemplateItemSaveReqVO updateReqVO) {
templateService.updateTemplateItem(updateReqVO);
return success(true);
}
@DeleteMapping("/item/delete")
@Operation(summary = "删除质检方案-产品关联")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('mes:qc-template:update')")
public CommonResult<Boolean> deleteTemplateItem(@RequestParam("id") Long id) {
templateService.deleteTemplateItem(id);
return success(true);
}
@GetMapping("/item/get")
@Operation(summary = "获得质检方案-产品关联")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
public CommonResult<MesQcTemplateItemRespVO> getTemplateItem(@RequestParam("id") Long id) {
// TODO @AIservice 只返回 do数据拼接放在 controller 里;
return success(templateService.getTemplateItem(id));
}
@GetMapping("/item/page")
@Operation(summary = "获得质检方案-产品关联分页")
@PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
public CommonResult<PageResult<MesQcTemplateItemRespVO>> getTemplateItemPage(
@Valid MesQcTemplateItemPageReqVO pageReqVO) {
// TODO @AIservice 只返回 do数据拼接放在 controller 里;
return success(templateService.getTemplateItemPage(pageReqVO));
List<MesQcTemplateDO> list = templateService.getTemplatePage(pageReqVO).getList();
ExcelUtils.write(response, "质检方案.xls", "数据", MesQcTemplateRespVO.class,
BeanUtils.toBean(list, MesQcTemplateRespVO.class));
}
}

View File

@ -0,0 +1,117 @@
package cn.iocoder.yudao.module.mes.controller.admin.qc.template;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
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.indicator.MesQcTemplateIndicatorPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcIndicatorDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateIndicatorDO;
import cn.iocoder.yudao.module.mes.dal.mysql.md.unitmeasure.MesMdUnitMeasureMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcIndicatorMapper;
import cn.iocoder.yudao.module.mes.service.qc.MesQcTemplateService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - MES 质检方案-检测指标项")
@RestController
@RequestMapping("/mes/qc/template/indicator")
@Validated
public class MesQcTemplateIndicatorController {
@Resource
private MesQcTemplateService templateService;
@Resource
private MesQcIndicatorMapper indicatorMapper;
@Resource
private MesMdUnitMeasureMapper unitMeasureMapper;
@PostMapping("/create")
@Operation(summary = "创建质检方案-检测指标项")
@PreAuthorize("@ss.hasPermission('mes:qc-template:create')")
public CommonResult<Long> createTemplateIndicator(@Valid @RequestBody MesQcTemplateIndicatorSaveReqVO createReqVO) {
return success(templateService.createTemplateIndicator(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新质检方案-检测指标项")
@PreAuthorize("@ss.hasPermission('mes:qc-template:update')")
public CommonResult<Boolean> updateTemplateIndicator(@Valid @RequestBody MesQcTemplateIndicatorSaveReqVO updateReqVO) {
templateService.updateTemplateIndicator(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除质检方案-检测指标项")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('mes:qc-template:update')")
public CommonResult<Boolean> deleteTemplateIndicator(@RequestParam("id") Long id) {
templateService.deleteTemplateIndicator(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得质检方案-检测指标项")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
public CommonResult<MesQcTemplateIndicatorRespVO> getTemplateIndicator(@RequestParam("id") Long id) {
MesQcTemplateIndicatorDO do0 = templateService.getTemplateIndicator(id);
return success(convertIndicatorRespVO(do0));
}
@GetMapping("/page")
@Operation(summary = "获得质检方案-检测指标项分页")
@PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
public CommonResult<PageResult<MesQcTemplateIndicatorRespVO>> getTemplateIndicatorPage(
@Valid MesQcTemplateIndicatorPageReqVO pageReqVO) {
PageResult<MesQcTemplateIndicatorDO> pageResult = templateService.getTemplateIndicatorPage(pageReqVO);
List<MesQcTemplateIndicatorRespVO> voList = pageResult.getList().stream()
.map(this::convertIndicatorRespVO)
.collect(Collectors.toList());
return success(new PageResult<>(voList, pageResult.getTotal()));
}
// TODO @AI参考别的模块buildVO包括注释
/**
* DO → RespVOJOIN mes_qc_indicator 补充检测项信息JOIN mes_md_unit_measure 补充单位名称
*/
private MesQcTemplateIndicatorRespVO convertIndicatorRespVO(MesQcTemplateIndicatorDO do0) {
// TODO @AI应该是批量的操作
if (do0 == null) {
return null;
}
MesQcTemplateIndicatorRespVO vo = BeanUtils.toBean(do0, MesQcTemplateIndicatorRespVO.class);
// JOIN 质检指标
if (do0.getIndicatorId() != null) {
MesQcIndicatorDO indicator = indicatorMapper.selectById(do0.getIndicatorId());
if (indicator != null) {
vo.setIndicatorCode(indicator.getCode());
vo.setIndicatorName(indicator.getName());
vo.setIndicatorType(indicator.getType());
vo.setIndicatorTool(indicator.getTool());
}
}
// JOIN 计量单位
if (do0.getUnitMeasureId() != null) {
MesMdUnitMeasureDO unit = unitMeasureMapper.selectById(do0.getUnitMeasureId());
if (unit != null) {
vo.setUnitMeasureName(unit.getName());
}
}
return vo;
}
}

View File

@ -0,0 +1,115 @@
package cn.iocoder.yudao.module.mes.controller.admin.qc.template;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
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.item.MesQcTemplateItemPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateItemDO;
import cn.iocoder.yudao.module.mes.dal.mysql.md.item.MesMdItemMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.md.unitmeasure.MesMdUnitMeasureMapper;
import cn.iocoder.yudao.module.mes.service.qc.MesQcTemplateService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - MES 质检方案-产品关联")
@RestController
@RequestMapping("/mes/qc/template/item")
@Validated
public class MesQcTemplateItemController {
@Resource
private MesQcTemplateService templateService;
@Resource
private MesMdItemMapper mdItemMapper;
@Resource
private MesMdUnitMeasureMapper unitMeasureMapper;
@PostMapping("/create")
@Operation(summary = "创建质检方案-产品关联")
@PreAuthorize("@ss.hasPermission('mes:qc-template:create')")
public CommonResult<Long> createTemplateItem(@Valid @RequestBody MesQcTemplateItemSaveReqVO createReqVO) {
return success(templateService.createTemplateItem(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新质检方案-产品关联")
@PreAuthorize("@ss.hasPermission('mes:qc-template:update')")
public CommonResult<Boolean> updateTemplateItem(@Valid @RequestBody MesQcTemplateItemSaveReqVO updateReqVO) {
templateService.updateTemplateItem(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除质检方案-产品关联")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('mes:qc-template:update')")
public CommonResult<Boolean> deleteTemplateItem(@RequestParam("id") Long id) {
templateService.deleteTemplateItem(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得质检方案-产品关联")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
public CommonResult<MesQcTemplateItemRespVO> getTemplateItem(@RequestParam("id") Long id) {
MesQcTemplateItemDO do0 = templateService.getTemplateItem(id);
return success(convertItemRespVO(do0));
}
@GetMapping("/page")
@Operation(summary = "获得质检方案-产品关联分页")
@PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
public CommonResult<PageResult<MesQcTemplateItemRespVO>> getTemplateItemPage(
@Valid MesQcTemplateItemPageReqVO pageReqVO) {
PageResult<MesQcTemplateItemDO> pageResult = templateService.getTemplateItemPage(pageReqVO);
List<MesQcTemplateItemRespVO> voList = pageResult.getList().stream()
.map(this::convertItemRespVO)
.collect(Collectors.toList());
return success(new PageResult<>(voList, pageResult.getTotal()));
}
// TODO @AI参考别的模块buildVO包括注释
// 质检方案-产品关联的 VO 构建方法
/**
* DO → RespVOJOIN mes_md_item 补充物料信息JOIN mes_md_unit_measure 补充单位名称
*/
private MesQcTemplateItemRespVO convertItemRespVO(MesQcTemplateItemDO do0) {
if (do0 == null) {
return null;
}
MesQcTemplateItemRespVO vo = BeanUtils.toBean(do0, MesQcTemplateItemRespVO.class);
if (do0.getItemId() != null) {
MesMdItemDO item = mdItemMapper.selectById(do0.getItemId());
if (item != null) {
vo.setItemCode(item.getCode());
vo.setItemName(item.getName());
vo.setSpecification(item.getSpecification());
// 查询计量单位名称
if (item.getUnitMeasureId() != null) {
MesMdUnitMeasureDO unit = unitMeasureMapper.selectById(item.getUnitMeasureId());
if (unit != null) {
vo.setUnitMeasureName(unit.getName());
}
}
}
}
return vo;
}
}

View File

@ -6,8 +6,6 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.util.List;
@Schema(description = "管理后台 - MES 质检方案分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ -20,8 +18,8 @@ public class MesQcTemplatePageReqVO extends PageParam {
@Schema(description = "方案名称", example = "出货检验")
private String name;
@Schema(description = "检测种类", example = "[1, 3]")
private List<Integer> types;
@Schema(description = "检测种类", example = "1")
private Integer type;
@Schema(description = "是否启用", example = "true")
private Boolean enableFlag;

View File

@ -24,16 +24,13 @@ public class MesQcTemplateItemSaveReqVO {
@Schema(description = "最低检测数", example = "5")
private Integer quantityCheck;
// TODO @AIVO 里0=不启用) 去掉
@Schema(description = "最大不合格数0=不启用)", example = "0")
@Schema(description = "最大不合格数", example = "0")
private Integer quantityUnqualified;
// TODO @AIVO 里0=不允许) 去掉
@Schema(description = "最大致命缺陷率(%0=不允许)", example = "0")
@Schema(description = "最大致命缺陷率(%", example = "0")
private BigDecimal criticalRate;
// TODO @AIVO 里0=不允许) 去掉
@Schema(description = "最大严重缺陷率(%0=不允许)", example = "0")
@Schema(description = "最大严重缺陷率(%", example = "0")
private BigDecimal majorRate;
@Schema(description = "最大轻微缺陷率(%", example = "100")

View File

@ -3,6 +3,7 @@ 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.framework.mybatis.core.util.MyBatisUtils;
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;
@ -22,10 +23,8 @@ public interface MesQcTemplateMapper extends BaseMapperX<MesQcTemplateDO> {
.likeIfPresent(MesQcTemplateDO::getCode, reqVO.getCode())
.likeIfPresent(MesQcTemplateDO::getName, reqVO.getName())
.orderByDesc(MesQcTemplateDO::getId);
// types: 用 FIND_IN_SET 精确匹配逗号分隔字段(取第一个值过滤)
// TODO @AIMyBatisUtilsfindInSet
if (reqVO.getTypes() != null && !reqVO.getTypes().isEmpty()) {
query.apply("FIND_IN_SET({0}, types) > 0", reqVO.getTypes().get(0));
if (reqVO.getType() != null) {
query.apply(MyBatisUtils.findInSet("types", reqVO.getType()));
}
query.eqIfPresent(MesQcTemplateDO::getEnableFlag, reqVO.getEnableFlag());
return selectPage(reqVO, query);

View File

@ -146,6 +146,21 @@ public interface ErrorCodeConstants {
// ========== MES 生产管理-工艺路线1-040-501-000 ==========
ErrorCode PRO_ROUTE_NOT_EXISTS = new ErrorCode(1_040_501_000, "工艺路线不存在");
ErrorCode PRO_ROUTE_CODE_DUPLICATE = new ErrorCode(1_040_501_001, "工艺路线编码已存在");
ErrorCode PRO_ROUTE_ENABLE_NO_PROCESS = new ErrorCode(1_040_501_002, "请先添加组成工序");
ErrorCode PRO_ROUTE_ENABLE_NO_KEY_PROCESS = new ErrorCode(1_040_501_003, "工艺路线必须要有关键工序");
ErrorCode PRO_ROUTE_ENABLE_PRODUCT_NO_BOM = new ErrorCode(1_040_501_004, "产品 {} 未配置工序的 BOM 消耗");
// ========== MES 生产管理-工艺路线工序1-040-501-100 ==========
ErrorCode PRO_ROUTE_PROCESS_NOT_EXISTS = new ErrorCode(1_040_501_100, "工艺路线工序不存在");
ErrorCode PRO_ROUTE_PROCESS_SORT_DUPLICATE = new ErrorCode(1_040_501_101, "序号已存在");
ErrorCode PRO_ROUTE_PROCESS_DUPLICATE = new ErrorCode(1_040_501_102, "不能重复添加工序");
ErrorCode PRO_ROUTE_PROCESS_KEY_DUPLICATE = new ErrorCode(1_040_501_103, "当前工艺路线已经指定过关键工序");
// ========== MES 生产管理-工艺路线产品1-040-501-200 ==========
ErrorCode PRO_ROUTE_PRODUCT_NOT_EXISTS = new ErrorCode(1_040_501_200, "工艺路线产品不存在");
ErrorCode PRO_ROUTE_PRODUCT_ITEM_DUPLICATE = new ErrorCode(1_040_501_201, "此产品已配置了工艺路线");
// ========== MES 生产管理-工艺路线产品BOM1-040-501-300 ==========
ErrorCode PRO_ROUTE_PRODUCT_BOM_NOT_EXISTS = new ErrorCode(1_040_501_300, "工艺路线产品 BOM 不存在");
ErrorCode PRO_ROUTE_PRODUCT_BOM_DUPLICATE = new ErrorCode(1_040_501_301, "当前 BOM 物料在此工序已经配置过");
// ========== MES 生产管理-生产工单1-040-502-000 ==========
ErrorCode PRO_WORK_ORDER_NOT_EXISTS = new ErrorCode(1_040_502_000, "生产工单不存在");

View File

@ -0,0 +1,40 @@
package cn.iocoder.yudao.module.mes.enums.pro;
import cn.iocoder.yudao.framework.common.core.ArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* MES 工序关系类型枚举
*
* @author 芋道源码
*/
@Getter
@AllArgsConstructor
public enum MesProLinkTypeEnum implements ArrayValuable<Integer> {
// TODO @AISTART_START类似这样的缩写
SS(0, "开始-开始"),
FF(1, "结束-结束"),
SF(2, "开始-结束"),
FS(3, "结束-开始");
public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesProLinkTypeEnum::getType).toArray(Integer[]::new);
/**
* 类型值
*/
private final Integer type;
/**
* 类型名
*/
private final String name;
@Override
public Integer[] array() {
return ARRAYS;
}
}

View File

@ -2,15 +2,14 @@ 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.MesQcTemplateRespVO;
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.MesQcTemplateIndicatorRespVO;
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.MesQcTemplateItemRespVO;
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;
@ -54,9 +53,9 @@ public interface MesQcTemplateService {
* 获得质检方案
*
* @param id 编号
* @return 质检方案 RespVO含 types List、enableFlag Boolean
* @return 质检方案
*/
MesQcTemplateRespVO getTemplate(Long id);
MesQcTemplateDO getTemplate(Long id);
/**
* 获得质检方案分页
@ -64,12 +63,12 @@ public interface MesQcTemplateService {
* @param pageReqVO 分页查询
* @return 质检方案分页
*/
PageResult<MesQcTemplateRespVO> getTemplatePage(MesQcTemplatePageReqVO pageReqVO);
PageResult<MesQcTemplateDO> getTemplatePage(MesQcTemplatePageReqVO pageReqVO);
/**
* 获得质检方案列表(用于下拉选择)
*
* @return 质检方案列表DO简单列表场景
* @return 质检方案列表
*/
List<MesQcTemplateDO> getTemplateList();
@ -119,17 +118,17 @@ public interface MesQcTemplateService {
* 获得检测指标项
*
* @param id 编号
* @return 检测指标项(含 JOIN 的指标信息)
* @return 检测指标项
*/
MesQcTemplateIndicatorRespVO getTemplateIndicator(Long id);
MesQcTemplateIndicatorDO getTemplateIndicator(Long id);
/**
* 获得检测指标项分页
*
* @param pageReqVO 分页查询
* @return 检测指标项分页(含 JOIN 的指标信息)
* @return 检测指标项分页
*/
PageResult<MesQcTemplateIndicatorRespVO> getTemplateIndicatorPage(MesQcTemplateIndicatorPageReqVO pageReqVO);
PageResult<MesQcTemplateIndicatorDO> getTemplateIndicatorPage(MesQcTemplateIndicatorPageReqVO pageReqVO);
// ========== 质检方案-产品关联 ==========
@ -159,16 +158,16 @@ public interface MesQcTemplateService {
* 获得产品关联
*
* @param id 编号
* @return 产品关联(含 JOIN 的物料信息)
* @return 产品关联
*/
MesQcTemplateItemRespVO getTemplateItem(Long id);
MesQcTemplateItemDO getTemplateItem(Long id);
/**
* 获得产品关联分页
*
* @param pageReqVO 分页查询
* @return 产品关联分页(含 JOIN 的物料信息)
* @return 产品关联分页
*/
PageResult<MesQcTemplateItemRespVO> getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO);
PageResult<MesQcTemplateItemDO> getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO);
}

View File

@ -5,22 +5,14 @@ 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.MesQcTemplateRespVO;
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.MesQcTemplateIndicatorRespVO;
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.MesQcTemplateItemRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcIndicatorDO;
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.md.item.MesMdItemMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.md.unitmeasure.MesMdUnitMeasureMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcIndicatorMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcTemplateIndicatorMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcTemplateItemMapper;
@ -33,7 +25,6 @@ import org.springframework.validation.annotation.Validated;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
@ -55,10 +46,6 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService {
private MesQcTemplateItemMapper templateItemMapper;
@Resource
private MesQcIndicatorMapper indicatorMapper;
@Resource
private MesMdItemMapper mdItemMapper;
@Resource
private MesMdUnitMeasureMapper unitMeasureMapper;
// ========== 质检方案主表 ==========
@ -112,27 +99,14 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService {
}
}
// TODO @AI返回 DO交给 controller 拼接
@Override
public MesQcTemplateRespVO getTemplate(Long id) {
MesQcTemplateDO do0 = templateMapper.selectById(id);
if (do0 == null) {
return null;
}
// types/enableFlag 由 TypeHandler/MyBatis-Plus 自动映射,直接 toBean 即可
return BeanUtils.toBean(do0, MesQcTemplateRespVO.class);
public MesQcTemplateDO getTemplate(Long id) {
return templateMapper.selectById(id);
}
// TODO @AI返回 DO交给 controller 拼接
@Override
public PageResult<MesQcTemplateRespVO> getTemplatePage(MesQcTemplatePageReqVO pageReqVO) {
PageResult<MesQcTemplateDO> pageResult = templateMapper.selectPage(pageReqVO);
return new PageResult<>(
pageResult.getList().stream()
.map(do0 -> BeanUtils.toBean(do0, MesQcTemplateRespVO.class))
.collect(Collectors.toList()),
pageResult.getTotal()
);
public PageResult<MesQcTemplateDO> getTemplatePage(MesQcTemplatePageReqVO pageReqVO) {
return templateMapper.selectPage(pageReqVO);
}
@Override
@ -184,46 +158,13 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService {
}
@Override
public MesQcTemplateIndicatorRespVO getTemplateIndicator(Long id) {
MesQcTemplateIndicatorDO do0 = templateIndicatorMapper.selectById(id);
if (do0 == null) {
return null;
}
return convertIndicatorRespVO(do0);
public MesQcTemplateIndicatorDO getTemplateIndicator(Long id) {
return templateIndicatorMapper.selectById(id);
}
@Override
public PageResult<MesQcTemplateIndicatorRespVO> getTemplateIndicatorPage(MesQcTemplateIndicatorPageReqVO pageReqVO) {
PageResult<MesQcTemplateIndicatorDO> pageResult = templateIndicatorMapper.selectPage(pageReqVO);
return new PageResult<>(
pageResult.getList().stream().map(this::convertIndicatorRespVO).collect(Collectors.toList()),
pageResult.getTotal()
);
}
/**
* DO → RespVOJOIN mes_qc_indicator 补充检测项信息JOIN mes_md_unit_measure 补充单位名称
*/
private MesQcTemplateIndicatorRespVO convertIndicatorRespVO(MesQcTemplateIndicatorDO do0) {
MesQcTemplateIndicatorRespVO vo = BeanUtils.toBean(do0, MesQcTemplateIndicatorRespVO.class);
// JOIN 质检指标
if (do0.getIndicatorId() != null) {
MesQcIndicatorDO indicator = indicatorMapper.selectById(do0.getIndicatorId());
if (indicator != null) {
vo.setIndicatorCode(indicator.getCode());
vo.setIndicatorName(indicator.getName());
vo.setIndicatorType(indicator.getType());
vo.setIndicatorTool(indicator.getTool());
}
}
// JOIN 计量单位
if (do0.getUnitMeasureId() != null) {
MesMdUnitMeasureDO unit = unitMeasureMapper.selectById(do0.getUnitMeasureId());
if (unit != null) {
vo.setUnitMeasureName(unit.getName());
}
}
return vo;
public PageResult<MesQcTemplateIndicatorDO> getTemplateIndicatorPage(MesQcTemplateIndicatorPageReqVO pageReqVO) {
return templateIndicatorMapper.selectPage(pageReqVO);
}
// ========== 质检方案-产品关联 ==========
@ -276,44 +217,13 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService {
}
@Override
public MesQcTemplateItemRespVO getTemplateItem(Long id) {
MesQcTemplateItemDO do0 = templateItemMapper.selectById(id);
if (do0 == null) {
return null;
}
return convertItemRespVO(do0);
public MesQcTemplateItemDO getTemplateItem(Long id) {
return templateItemMapper.selectById(id);
}
@Override
public PageResult<MesQcTemplateItemRespVO> getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO) {
PageResult<MesQcTemplateItemDO> pageResult = templateItemMapper.selectPage(pageReqVO);
return new PageResult<>(
pageResult.getList().stream().map(this::convertItemRespVO).collect(Collectors.toList()),
pageResult.getTotal()
);
}
/**
* DO → RespVOJOIN mes_md_item 补充物料信息JOIN mes_md_unit_measure 补充单位名称
*/
private MesQcTemplateItemRespVO convertItemRespVO(MesQcTemplateItemDO do0) {
MesQcTemplateItemRespVO vo = BeanUtils.toBean(do0, MesQcTemplateItemRespVO.class);
if (do0.getItemId() != null) {
MesMdItemDO item = mdItemMapper.selectById(do0.getItemId());
if (item != null) {
vo.setItemCode(item.getCode());
vo.setItemName(item.getName());
vo.setSpecification(item.getSpecification());
// 查询计量单位名称
if (item.getUnitMeasureId() != null) {
MesMdUnitMeasureDO unit = unitMeasureMapper.selectById(item.getUnitMeasureId());
if (unit != null) {
vo.setUnitMeasureName(unit.getName());
}
}
}
}
return vo;
public PageResult<MesQcTemplateItemDO> getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO) {
return templateItemMapper.selectPage(pageReqVO);
}
}