Commit 588845ab6122c3da91778cb47071854bb08a4bc1

Authored by YunaiV
1 parent 3e260b9f

feat(mes): 新增工具管理(TM)模块,包含工具类型和工具台账

新增工具类型(mes_tm_tool_type)和工具台账(mes_tm_tool)的完整 CRUD,
包括 DO、Mapper、Service、Controller、VO,以及 ErrorCodeConstants
和 DictTypeConstants 的相关枚举补充。
Showing 16 changed files with 1189 additions and 0 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/tm/tool/MesTmToolController.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.tm.tool;
  2 +
  3 +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
  4 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  5 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  6 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  7 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  8 +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
  9 +import cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.MesTmToolPageReqVO;
  10 +import cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.MesTmToolRespVO;
  11 +import cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.MesTmToolSaveReqVO;
  12 +import cn.iocoder.yudao.module.mes.dal.dataobject.tm.tool.MesTmToolDO;
  13 +import cn.iocoder.yudao.module.mes.dal.dataobject.tm.tool.MesTmToolTypeDO;
  14 +import cn.iocoder.yudao.module.mes.service.tm.tool.MesTmToolService;
  15 +import cn.iocoder.yudao.module.mes.service.tm.tool.MesTmToolTypeService;
  16 +import io.swagger.v3.oas.annotations.Operation;
  17 +import io.swagger.v3.oas.annotations.Parameter;
  18 +import io.swagger.v3.oas.annotations.tags.Tag;
  19 +import jakarta.annotation.Resource;
  20 +import jakarta.servlet.http.HttpServletResponse;
  21 +import jakarta.validation.Valid;
  22 +import org.springframework.security.access.prepost.PreAuthorize;
  23 +import org.springframework.validation.annotation.Validated;
  24 +import org.springframework.web.bind.annotation.*;
  25 +
  26 +import java.io.IOException;
  27 +import java.util.List;
  28 +import java.util.Map;
  29 +
  30 +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
  31 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  32 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
  33 +
  34 +@Tag(name = "管理后台 - MES 工具台账")
  35 +@RestController
  36 +@RequestMapping("/mes/tm/tool")
  37 +@Validated
  38 +public class MesTmToolController {
  39 +
  40 + @Resource
  41 + private MesTmToolService toolService;
  42 +
  43 + @Resource
  44 + private MesTmToolTypeService toolTypeService;
  45 +
  46 + @PostMapping("/create")
  47 + @Operation(summary = "创建工具")
  48 + @PreAuthorize("@ss.hasPermission('mes:tm-tool:create')")
  49 + public CommonResult<Long> createTool(@Valid @RequestBody MesTmToolSaveReqVO createReqVO) {
  50 + return success(toolService.createTool(createReqVO));
  51 + }
  52 +
  53 + @PutMapping("/update")
  54 + @Operation(summary = "更新工具")
  55 + @PreAuthorize("@ss.hasPermission('mes:tm-tool:update')")
  56 + public CommonResult<Boolean> updateTool(@Valid @RequestBody MesTmToolSaveReqVO updateReqVO) {
  57 + toolService.updateTool(updateReqVO);
  58 + return success(true);
  59 + }
  60 +
  61 + @DeleteMapping("/delete")
  62 + @Operation(summary = "删除工具")
  63 + @Parameter(name = "id", description = "编号", required = true)
  64 + @PreAuthorize("@ss.hasPermission('mes:tm-tool:delete')")
  65 + public CommonResult<Boolean> deleteTool(@RequestParam("id") Long id) {
  66 + toolService.deleteTool(id);
  67 + return success(true);
  68 + }
  69 +
  70 + @GetMapping("/get")
  71 + @Operation(summary = "获得工具")
  72 + @Parameter(name = "id", description = "编号", required = true, example = "1024")
  73 + @PreAuthorize("@ss.hasPermission('mes:tm-tool:query')")
  74 + public CommonResult<MesTmToolRespVO> getTool(@RequestParam("id") Long id) {
  75 + MesTmToolDO tool = toolService.getTool(id);
  76 + MesTmToolRespVO respVO = BeanUtils.toBean(tool, MesTmToolRespVO.class);
  77 + // 拼接工具类型名称
  78 + if (respVO != null && respVO.getToolTypeId() != null) {
  79 + MesTmToolTypeDO toolType = toolTypeService.getToolType(respVO.getToolTypeId());
  80 + if (toolType != null) {
  81 + respVO.setToolTypeName(toolType.getName());
  82 + }
  83 + }
  84 + return success(respVO);
  85 + }
  86 +
  87 + @GetMapping("/page")
  88 + @Operation(summary = "获得工具分页")
  89 + @PreAuthorize("@ss.hasPermission('mes:tm-tool:query')")
  90 + public CommonResult<PageResult<MesTmToolRespVO>> getToolPage(@Valid MesTmToolPageReqVO pageReqVO) {
  91 + PageResult<MesTmToolDO> pageResult = toolService.getToolPage(pageReqVO);
  92 + PageResult<MesTmToolRespVO> voPageResult = BeanUtils.toBean(pageResult, MesTmToolRespVO.class);
  93 + // 拼接工具类型名称
  94 + Map<Long, MesTmToolTypeDO> toolTypeMap = toolTypeService.getToolTypeMap(
  95 + convertSet(voPageResult.getList(), MesTmToolRespVO::getToolTypeId));
  96 + voPageResult.getList().forEach(vo -> {
  97 + MesTmToolTypeDO toolType = toolTypeMap.get(vo.getToolTypeId());
  98 + if (toolType != null) {
  99 + vo.setToolTypeName(toolType.getName());
  100 + }
  101 + });
  102 + return success(voPageResult);
  103 + }
  104 +
  105 + @GetMapping("/export-excel")
  106 + @Operation(summary = "导出工具 Excel")
  107 + @PreAuthorize("@ss.hasPermission('mes:tm-tool:export')")
  108 + @ApiAccessLog(operateType = EXPORT)
  109 + public void exportToolExcel(@Valid MesTmToolPageReqVO pageReqVO,
  110 + HttpServletResponse response) throws IOException {
  111 + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
  112 + List<MesTmToolDO> list = toolService.getToolPage(pageReqVO).getList();
  113 + List<MesTmToolRespVO> voList = BeanUtils.toBean(list, MesTmToolRespVO.class);
  114 + // 拼接工具类型名称
  115 + Map<Long, MesTmToolTypeDO> toolTypeMap = toolTypeService.getToolTypeMap(
  116 + convertSet(voList, MesTmToolRespVO::getToolTypeId));
  117 + voList.forEach(vo -> {
  118 + MesTmToolTypeDO toolType = toolTypeMap.get(vo.getToolTypeId());
  119 + if (toolType != null) {
  120 + vo.setToolTypeName(toolType.getName());
  121 + }
  122 + });
  123 + // 导出 Excel
  124 + ExcelUtils.write(response, "工具台账.xls", "数据", MesTmToolRespVO.class, voList);
  125 + }
  126 +
  127 + // TODO @AI:page、export 都有拼接;可以参考别的模块的出列方式, 抽 build 公用方法;
  128 +
  129 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/tm/tool/MesTmToolTypeController.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.tm.tool;
  2 +
  3 +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
  4 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  5 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  6 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  7 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  8 +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
  9 +import cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.type.MesTmToolTypePageReqVO;
  10 +import cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.type.MesTmToolTypeRespVO;
  11 +import cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.type.MesTmToolTypeSaveReqVO;
  12 +import cn.iocoder.yudao.module.mes.dal.dataobject.tm.tool.MesTmToolTypeDO;
  13 +import cn.iocoder.yudao.module.mes.service.tm.tool.MesTmToolTypeService;
  14 +import io.swagger.v3.oas.annotations.Operation;
  15 +import io.swagger.v3.oas.annotations.Parameter;
  16 +import io.swagger.v3.oas.annotations.tags.Tag;
  17 +import jakarta.annotation.Resource;
  18 +import jakarta.servlet.http.HttpServletResponse;
  19 +import jakarta.validation.Valid;
  20 +import org.springframework.security.access.prepost.PreAuthorize;
  21 +import org.springframework.validation.annotation.Validated;
  22 +import org.springframework.web.bind.annotation.*;
  23 +
  24 +import java.io.IOException;
  25 +import java.util.List;
  26 +
  27 +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
  28 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  29 +
  30 +@Tag(name = "管理后台 - MES 工具类型")
  31 +@RestController
  32 +@RequestMapping("/mes/tm/tool-type")
  33 +@Validated
  34 +public class MesTmToolTypeController {
  35 +
  36 + @Resource
  37 + private MesTmToolTypeService toolTypeService;
  38 +
  39 + @PostMapping("/create")
  40 + @Operation(summary = "创建工具类型")
  41 + @PreAuthorize("@ss.hasPermission('mes:tm-tool-type:create')")
  42 + public CommonResult<Long> createToolType(@Valid @RequestBody MesTmToolTypeSaveReqVO createReqVO) {
  43 + return success(toolTypeService.createToolType(createReqVO));
  44 + }
  45 +
  46 + @PutMapping("/update")
  47 + @Operation(summary = "更新工具类型")
  48 + @PreAuthorize("@ss.hasPermission('mes:tm-tool-type:update')")
  49 + public CommonResult<Boolean> updateToolType(@Valid @RequestBody MesTmToolTypeSaveReqVO updateReqVO) {
  50 + toolTypeService.updateToolType(updateReqVO);
  51 + return success(true);
  52 + }
  53 +
  54 + @DeleteMapping("/delete")
  55 + @Operation(summary = "删除工具类型")
  56 + @Parameter(name = "id", description = "编号", required = true)
  57 + @PreAuthorize("@ss.hasPermission('mes:tm-tool-type:delete')")
  58 + public CommonResult<Boolean> deleteToolType(@RequestParam("id") Long id) {
  59 + toolTypeService.deleteToolType(id);
  60 + return success(true);
  61 + }
  62 +
  63 + @GetMapping("/get")
  64 + @Operation(summary = "获得工具类型")
  65 + @Parameter(name = "id", description = "编号", required = true, example = "1024")
  66 + @PreAuthorize("@ss.hasPermission('mes:tm-tool-type:query')")
  67 + public CommonResult<MesTmToolTypeRespVO> getToolType(@RequestParam("id") Long id) {
  68 + MesTmToolTypeDO toolType = toolTypeService.getToolType(id);
  69 + return success(BeanUtils.toBean(toolType, MesTmToolTypeRespVO.class));
  70 + }
  71 +
  72 + @GetMapping("/page")
  73 + @Operation(summary = "获得工具类型分页")
  74 + @PreAuthorize("@ss.hasPermission('mes:tm-tool-type:query')")
  75 + public CommonResult<PageResult<MesTmToolTypeRespVO>> getToolTypePage(@Valid MesTmToolTypePageReqVO pageReqVO) {
  76 + PageResult<MesTmToolTypeDO> pageResult = toolTypeService.getToolTypePage(pageReqVO);
  77 + return success(BeanUtils.toBean(pageResult, MesTmToolTypeRespVO.class));
  78 + }
  79 +
  80 + @GetMapping("/simple-list")
  81 + @Operation(summary = "获得工具类型精简列表", description = "主要用于前端的下拉选项")
  82 + public CommonResult<List<MesTmToolTypeRespVO>> getToolTypeSimpleList() {
  83 + List<MesTmToolTypeDO> list = toolTypeService.getToolTypeList();
  84 + return success(BeanUtils.toBean(list, MesTmToolTypeRespVO.class));
  85 + }
  86 +
  87 + @GetMapping("/export-excel")
  88 + @Operation(summary = "导出工具类型 Excel")
  89 + @PreAuthorize("@ss.hasPermission('mes:tm-tool-type:export')")
  90 + @ApiAccessLog(operateType = EXPORT)
  91 + public void exportToolTypeExcel(@Valid MesTmToolTypePageReqVO pageReqVO,
  92 + HttpServletResponse response) throws IOException {
  93 + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
  94 + List<MesTmToolTypeDO> list = toolTypeService.getToolTypePage(pageReqVO).getList();
  95 + // 导出 Excel
  96 + ExcelUtils.write(response, "工具类型.xls", "数据", MesTmToolTypeRespVO.class,
  97 + BeanUtils.toBean(list, MesTmToolTypeRespVO.class));
  98 + }
  99 +
  100 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/tm/tool/vo/MesTmToolPageReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  4 +import io.swagger.v3.oas.annotations.media.Schema;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import lombok.ToString;
  8 +
  9 +@Schema(description = "管理后台 - MES 工具台账分页 Request VO")
  10 +@Data
  11 +@EqualsAndHashCode(callSuper = true)
  12 +@ToString(callSuper = true)
  13 +public class MesTmToolPageReqVO extends PageParam {
  14 +
  15 + @Schema(description = "工具编码", example = "T-001")
  16 + private String code;
  17 +
  18 + @Schema(description = "工具名称", example = "铣刀")
  19 + private String name;
  20 +
  21 + @Schema(description = "工具类型编号", example = "100")
  22 + private Long toolTypeId;
  23 +
  24 + @Schema(description = "品牌", example = "三菱")
  25 + private String brand;
  26 +
  27 + @Schema(description = "型号规格", example = "M5-100")
  28 + private String spec;
  29 +
  30 + @Schema(description = "状态", example = "1")
  31 + private Integer status;
  32 +
  33 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/tm/tool/vo/MesTmToolRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo;
  2 +
  3 +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
  4 +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
  5 +import cn.iocoder.yudao.module.mes.enums.DictTypeConstants;
  6 +import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
  7 +import cn.idev.excel.annotation.ExcelProperty;
  8 +import io.swagger.v3.oas.annotations.media.Schema;
  9 +import lombok.Data;
  10 +
  11 +import java.time.LocalDateTime;
  12 +
  13 +@Schema(description = "管理后台 - MES 工具台账 Response VO")
  14 +@Data
  15 +@ExcelIgnoreUnannotated
  16 +public class MesTmToolRespVO {
  17 +
  18 + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  19 + @ExcelProperty("编号")
  20 + private Long id;
  21 +
  22 + @Schema(description = "工具编码", example = "T-001")
  23 + @ExcelProperty("工具编码")
  24 + private String code;
  25 +
  26 + @Schema(description = "工具名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "5mm 铣刀")
  27 + @ExcelProperty("工具名称")
  28 + private String name;
  29 +
  30 + @Schema(description = "品牌", example = "三菱")
  31 + @ExcelProperty("品牌")
  32 + private String brand;
  33 +
  34 + @Schema(description = "型号规格", example = "M5-100")
  35 + @ExcelProperty("型号规格")
  36 + private String spec;
  37 +
  38 + @Schema(description = "工具类型编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
  39 + private Long toolTypeId;
  40 +
  41 + @Schema(description = "工具类型名称", example = "铣刀")
  42 + @ExcelProperty("工具类型")
  43 + private String toolTypeName;
  44 +
  45 + @Schema(description = "数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  46 + @ExcelProperty("数量")
  47 + private Integer quantity;
  48 +
  49 + @Schema(description = "可用数量", example = "1")
  50 + @ExcelProperty("可用数量")
  51 + private Integer quantityAvailable;
  52 +
  53 + @Schema(description = "保养维护类型", example = "1")
  54 + @ExcelProperty(value = "保养维护类型", converter = DictConvert.class)
  55 + @DictFormat(DictTypeConstants.MES_TM_MAINTEN_TYPE)
  56 + private Integer maintenType;
  57 +
  58 + @Schema(description = "下次保养周期(次数)", example = "100")
  59 + @ExcelProperty("下次保养周期")
  60 + private Integer nextMaintenPeriod;
  61 +
  62 + @Schema(description = "下次保养日期", example = "2024-06-01 00:00:00")
  63 + @ExcelProperty("下次保养日期")
  64 + private LocalDateTime nextMaintenDate;
  65 +
  66 + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  67 + @ExcelProperty(value = "状态", converter = DictConvert.class)
  68 + @DictFormat(DictTypeConstants.MES_TM_TOOL_STATUS)
  69 + private Integer status;
  70 +
  71 + @Schema(description = "备注", example = "备注")
  72 + @ExcelProperty("备注")
  73 + private String remark;
  74 +
  75 + @Schema(description = "预留字段1")
  76 + private String attribute1;
  77 +
  78 + @Schema(description = "预留字段2")
  79 + private String attribute2;
  80 +
  81 + @Schema(description = "预留字段3")
  82 + private Integer attribute3;
  83 +
  84 + @Schema(description = "预留字段4")
  85 + private Integer attribute4;
  86 +
  87 + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
  88 + @ExcelProperty("创建时间")
  89 + private LocalDateTime createTime;
  90 +
  91 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/tm/tool/vo/MesTmToolSaveReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import jakarta.validation.constraints.NotEmpty;
  5 +import jakarta.validation.constraints.NotNull;
  6 +import lombok.Data;
  7 +
  8 +import java.time.LocalDateTime;
  9 +
  10 +@Schema(description = "管理后台 - MES 工具台账新增/修改 Request VO")
  11 +@Data
  12 +public class MesTmToolSaveReqVO {
  13 +
  14 + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  15 + private Long id;
  16 +
  17 + @Schema(description = "工具编码", example = "T-001")
  18 + private String code;
  19 +
  20 + @Schema(description = "工具名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "5mm 铣刀")
  21 + @NotEmpty(message = "工具名称不能为空")
  22 + private String name;
  23 +
  24 + @Schema(description = "品牌", example = "三菱")
  25 + private String brand;
  26 +
  27 + @Schema(description = "型号规格", example = "M5-100")
  28 + private String spec;
  29 +
  30 + @Schema(description = "工具类型编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
  31 + @NotNull(message = "工具类型不能为空")
  32 + private Long toolTypeId;
  33 +
  34 + @Schema(description = "数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  35 + @NotNull(message = "数量不能为空")
  36 + private Integer quantity;
  37 +
  38 + @Schema(description = "可用数量", example = "1")
  39 + private Integer quantityAvailable;
  40 +
  41 + @Schema(description = "保养维护类型", example = "1")
  42 + private Integer maintenType;
  43 +
  44 + @Schema(description = "下次保养周期(次数)", example = "100")
  45 + private Integer nextMaintenPeriod;
  46 +
  47 + @Schema(description = "下次保养日期", example = "2024-06-01 00:00:00")
  48 + private LocalDateTime nextMaintenDate;
  49 +
  50 + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  51 + @NotNull(message = "状态不能为空")
  52 + private Integer status;
  53 +
  54 + @Schema(description = "备注", example = "备注")
  55 + private String remark;
  56 +
  57 + @Schema(description = "预留字段1")
  58 + private String attribute1;
  59 +
  60 + @Schema(description = "预留字段2")
  61 + private String attribute2;
  62 +
  63 + @Schema(description = "预留字段3")
  64 + private Integer attribute3;
  65 +
  66 + @Schema(description = "预留字段4")
  67 + private Integer attribute4;
  68 +
  69 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/tm/tool/vo/type/MesTmToolTypePageReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.type;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  4 +import io.swagger.v3.oas.annotations.media.Schema;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import lombok.ToString;
  8 +
  9 +@Schema(description = "管理后台 - MES 工具类型分页 Request VO")
  10 +@Data
  11 +@EqualsAndHashCode(callSuper = true)
  12 +@ToString(callSuper = true)
  13 +public class MesTmToolTypePageReqVO extends PageParam {
  14 +
  15 + @Schema(description = "类型编码", example = "TT-001")
  16 + private String code;
  17 +
  18 + @Schema(description = "类型名称", example = "铣刀")
  19 + private String name;
  20 +
  21 + @Schema(description = "保养维护类型", example = "1")
  22 + private Integer maintenType;
  23 +
  24 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/tm/tool/vo/type/MesTmToolTypeRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.type;
  2 +
  3 +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
  4 +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
  5 +import cn.iocoder.yudao.module.mes.enums.DictTypeConstants;
  6 +import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
  7 +import cn.idev.excel.annotation.ExcelProperty;
  8 +import io.swagger.v3.oas.annotations.media.Schema;
  9 +import lombok.Data;
  10 +
  11 +import java.time.LocalDateTime;
  12 +
  13 +@Schema(description = "管理后台 - MES 工具类型 Response VO")
  14 +@Data
  15 +@ExcelIgnoreUnannotated
  16 +public class MesTmToolTypeRespVO {
  17 +
  18 + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  19 + @ExcelProperty("编号")
  20 + private Long id;
  21 +
  22 + @Schema(description = "类型编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "TT-001")
  23 + @ExcelProperty("类型编码")
  24 + private String code;
  25 +
  26 + @Schema(description = "类型名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "铣刀")
  27 + @ExcelProperty("类型名称")
  28 + private String name;
  29 +
  30 + @Schema(description = "是否编码管理", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
  31 + @ExcelProperty("是否编码管理")
  32 + private Boolean codeFlag;
  33 +
  34 + @Schema(description = "保养维护类型", example = "1")
  35 + @ExcelProperty(value = "保养维护类型", converter = DictConvert.class)
  36 + @DictFormat(DictTypeConstants.MES_TM_MAINTEN_TYPE)
  37 + private Integer maintenType;
  38 +
  39 + @Schema(description = "保养周期", example = "30")
  40 + @ExcelProperty("保养周期")
  41 + private Integer maintenPeriod;
  42 +
  43 + @Schema(description = "备注", example = "备注")
  44 + @ExcelProperty("备注")
  45 + private String remark;
  46 +
  47 + @Schema(description = "预留字段1")
  48 + private String attribute1;
  49 +
  50 + @Schema(description = "预留字段2")
  51 + private String attribute2;
  52 +
  53 + @Schema(description = "预留字段3")
  54 + private Integer attribute3;
  55 +
  56 + @Schema(description = "预留字段4")
  57 + private Integer attribute4;
  58 +
  59 + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
  60 + @ExcelProperty("创建时间")
  61 + private LocalDateTime createTime;
  62 +
  63 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/tm/tool/vo/type/MesTmToolTypeSaveReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.type;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import jakarta.validation.constraints.NotEmpty;
  5 +import jakarta.validation.constraints.NotNull;
  6 +import lombok.Data;
  7 +
  8 +@Schema(description = "管理后台 - MES 工具类型新增/修改 Request VO")
  9 +@Data
  10 +public class MesTmToolTypeSaveReqVO {
  11 +
  12 + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  13 + private Long id;
  14 +
  15 + @Schema(description = "类型编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "TT-001")
  16 + @NotEmpty(message = "类型编码不能为空")
  17 + private String code;
  18 +
  19 + @Schema(description = "类型名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "铣刀")
  20 + @NotEmpty(message = "类型名称不能为空")
  21 + private String name;
  22 +
  23 + @Schema(description = "是否编码管理", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
  24 + @NotNull(message = "是否编码管理不能为空")
  25 + private Boolean codeFlag;
  26 +
  27 + @Schema(description = "保养维护类型", example = "1")
  28 + private Integer maintenType;
  29 +
  30 + @Schema(description = "保养周期", example = "30")
  31 + private Integer maintenPeriod;
  32 +
  33 + @Schema(description = "备注", example = "备注")
  34 + private String remark;
  35 +
  36 + @Schema(description = "预留字段1")
  37 + private String attribute1;
  38 +
  39 + @Schema(description = "预留字段2")
  40 + private String attribute2;
  41 +
  42 + @Schema(description = "预留字段3")
  43 + private Integer attribute3;
  44 +
  45 + @Schema(description = "预留字段4")
  46 + private Integer attribute4;
  47 +
  48 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/tm/tool/MesTmToolDO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.dataobject.tm.tool;
  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.time.LocalDateTime;
  10 +
  11 +/**
  12 + * MES 工具台账 DO
  13 + *
  14 + * @author 芋道源码
  15 + */
  16 +@TableName("mes_tm_tool")
  17 +@KeySequence("mes_tm_tool_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 MesTmToolDO extends BaseDO {
  25 +
  26 + /**
  27 + * 编号
  28 + */
  29 + @TableId
  30 + private Long id;
  31 + /**
  32 + * 工具编码
  33 + */
  34 + private String code;
  35 + /**
  36 + * 工具名称
  37 + */
  38 + private String name;
  39 + /**
  40 + * 品牌
  41 + */
  42 + private String brand;
  43 + /**
  44 + * 型号规格
  45 + */
  46 + private String spec;
  47 + /**
  48 + * 工具类型编号
  49 + *
  50 + * 关联 {@link MesTmToolTypeDO#getId()}
  51 + */
  52 + private Long toolTypeId;
  53 + /**
  54 + * 数量
  55 + */
  56 + private Integer quantity;
  57 + /**
  58 + * 可用数量
  59 + */
  60 + private Integer quantityAvailable;
  61 + // TODO @AI:枚举类
  62 + /**
  63 + * 保养维护类型
  64 + *
  65 + * 字典 {@link cn.iocoder.yudao.module.mes.enums.DictTypeConstants#MES_TM_MAINTEN_TYPE}
  66 + */
  67 + private Integer maintenType;
  68 + /**
  69 + * 下次保养周期(次数)
  70 + */
  71 + private Integer nextMaintenPeriod;
  72 + /**
  73 + * 下次保养日期
  74 + */
  75 + private LocalDateTime nextMaintenDate;
  76 + /**
  77 + * 状态
  78 + *
  79 + * 字典 {@link cn.iocoder.yudao.module.mes.enums.DictTypeConstants#MES_TM_TOOL_STATUS}
  80 + */
  81 + private Integer status;
  82 + /**
  83 + * 备注
  84 + */
  85 + private String remark;
  86 + /**
  87 + * 预留字段1
  88 + */
  89 + private String attribute1;
  90 + /**
  91 + * 预留字段2
  92 + */
  93 + private String attribute2;
  94 + /**
  95 + * 预留字段3
  96 + */
  97 + private Integer attribute3;
  98 + /**
  99 + * 预留字段4
  100 + */
  101 + private Integer attribute4;
  102 +
  103 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/tm/tool/MesTmToolTypeDO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.dataobject.tm.tool;
  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_tm_tool_type")
  15 +@KeySequence("mes_tm_tool_type_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 MesTmToolTypeDO 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 + /**
  38 + * 是否编码管理
  39 + */
  40 + private Boolean codeFlag;
  41 + // TODO @AI:枚举类;
  42 + /**
  43 + * 保养维护类型
  44 + *
  45 + * 字典 {@link cn.iocoder.yudao.module.mes.enums.DictTypeConstants#MES_TM_MAINTEN_TYPE}
  46 + */
  47 + private Integer maintenType;
  48 + /**
  49 + * 保养周期
  50 + */
  51 + private Integer maintenPeriod;
  52 + /**
  53 + * 备注
  54 + */
  55 + private String remark;
  56 + /**
  57 + * 预留字段1
  58 + */
  59 + private String attribute1;
  60 + /**
  61 + * 预留字段2
  62 + */
  63 + private String attribute2;
  64 + /**
  65 + * 预留字段3
  66 + */
  67 + private Integer attribute3;
  68 + /**
  69 + * 预留字段4
  70 + */
  71 + private Integer attribute4;
  72 +
  73 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/tm/tool/MesTmToolMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.mysql.tm.tool;
  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.tm.tool.vo.MesTmToolPageReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.tm.tool.MesTmToolDO;
  8 +import org.apache.ibatis.annotations.Mapper;
  9 +
  10 +/**
  11 + * MES 工具台账 Mapper
  12 + *
  13 + * @author 芋道源码
  14 + */
  15 +@Mapper
  16 +public interface MesTmToolMapper extends BaseMapperX<MesTmToolDO> {
  17 +
  18 + default PageResult<MesTmToolDO> selectPage(MesTmToolPageReqVO reqVO) {
  19 + return selectPage(reqVO, new LambdaQueryWrapperX<MesTmToolDO>()
  20 + .likeIfPresent(MesTmToolDO::getCode, reqVO.getCode())
  21 + .likeIfPresent(MesTmToolDO::getName, reqVO.getName())
  22 + .eqIfPresent(MesTmToolDO::getToolTypeId, reqVO.getToolTypeId())
  23 + .likeIfPresent(MesTmToolDO::getBrand, reqVO.getBrand())
  24 + .likeIfPresent(MesTmToolDO::getSpec, reqVO.getSpec())
  25 + .eqIfPresent(MesTmToolDO::getStatus, reqVO.getStatus())
  26 + .orderByDesc(MesTmToolDO::getId));
  27 + }
  28 +
  29 + default MesTmToolDO selectByCode(String code) {
  30 + return selectOne(MesTmToolDO::getCode, code);
  31 + }
  32 +
  33 + default Long selectCountByToolTypeId(Long toolTypeId) {
  34 + return selectCount(MesTmToolDO::getToolTypeId, toolTypeId);
  35 + }
  36 +
  37 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/tm/tool/MesTmToolTypeMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.mysql.tm.tool;
  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.tm.tool.vo.type.MesTmToolTypePageReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.tm.tool.MesTmToolTypeDO;
  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 MesTmToolTypeMapper extends BaseMapperX<MesTmToolTypeDO> {
  19 +
  20 + default PageResult<MesTmToolTypeDO> selectPage(MesTmToolTypePageReqVO reqVO) {
  21 + return selectPage(reqVO, new LambdaQueryWrapperX<MesTmToolTypeDO>()
  22 + .likeIfPresent(MesTmToolTypeDO::getCode, reqVO.getCode())
  23 + .likeIfPresent(MesTmToolTypeDO::getName, reqVO.getName())
  24 + .eqIfPresent(MesTmToolTypeDO::getMaintenType, reqVO.getMaintenType())
  25 + .orderByDesc(MesTmToolTypeDO::getId));
  26 + }
  27 +
  28 + default MesTmToolTypeDO selectByCode(String code) {
  29 + return selectOne(MesTmToolTypeDO::getCode, code);
  30 + }
  31 +
  32 + default MesTmToolTypeDO selectByName(String name) {
  33 + return selectOne(MesTmToolTypeDO::getName, name);
  34 + }
  35 +
  36 + default List<MesTmToolTypeDO> selectList() {
  37 + return selectList(new LambdaQueryWrapperX<MesTmToolTypeDO>()
  38 + .orderByDesc(MesTmToolTypeDO::getId));
  39 + }
  40 +
  41 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/tm/tool/MesTmToolService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.tm.tool;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.MesTmToolPageReqVO;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.MesTmToolSaveReqVO;
  6 +import cn.iocoder.yudao.module.mes.dal.dataobject.tm.tool.MesTmToolDO;
  7 +import jakarta.validation.Valid;
  8 +
  9 +/**
  10 + * MES 工具台账 Service 接口
  11 + *
  12 + * @author 芋道源码
  13 + */
  14 +public interface MesTmToolService {
  15 +
  16 + /**
  17 + * 创建工具
  18 + *
  19 + * @param createReqVO 创建信息
  20 + * @return 编号
  21 + */
  22 + Long createTool(@Valid MesTmToolSaveReqVO createReqVO);
  23 +
  24 + /**
  25 + * 更新工具
  26 + *
  27 + * @param updateReqVO 更新信息
  28 + */
  29 + void updateTool(@Valid MesTmToolSaveReqVO updateReqVO);
  30 +
  31 + /**
  32 + * 删除工具
  33 + *
  34 + * @param id 编号
  35 + */
  36 + void deleteTool(Long id);
  37 +
  38 + /**
  39 + * 获得工具
  40 + *
  41 + * @param id 编号
  42 + * @return 工具
  43 + */
  44 + MesTmToolDO getTool(Long id);
  45 +
  46 + /**
  47 + * 获得工具分页
  48 + *
  49 + * @param pageReqVO 分页查询
  50 + * @return 工具分页
  51 + */
  52 + PageResult<MesTmToolDO> getToolPage(MesTmToolPageReqVO pageReqVO);
  53 +
  54 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/tm/tool/MesTmToolServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.tm.tool;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.MesTmToolPageReqVO;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.MesTmToolSaveReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.tm.tool.MesTmToolDO;
  8 +import cn.iocoder.yudao.module.mes.dal.mysql.tm.tool.MesTmToolMapper;
  9 +import jakarta.annotation.Resource;
  10 +import org.springframework.context.annotation.Lazy;
  11 +import org.springframework.stereotype.Service;
  12 +import org.springframework.validation.annotation.Validated;
  13 +
  14 +import java.util.Objects;
  15 +
  16 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  17 +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
  18 +
  19 +/**
  20 + * MES 工具台账 Service 实现类
  21 + *
  22 + * @author 芋道源码
  23 + */
  24 +@Service
  25 +@Validated
  26 +public class MesTmToolServiceImpl implements MesTmToolService {
  27 +
  28 + @Resource
  29 + private MesTmToolMapper toolMapper;
  30 +
  31 + @Resource
  32 + @Lazy // 延迟加载,避免循环依赖
  33 + private MesTmToolTypeService toolTypeService;
  34 +
  35 + @Override
  36 + public Long createTool(MesTmToolSaveReqVO createReqVO) {
  37 + // 校验工具类型存在
  38 + toolTypeService.getToolType(createReqVO.getToolTypeId());
  39 + // 校验编码唯一
  40 + validateToolCodeUnique(null, createReqVO.getCode());
  41 +
  42 + // 插入
  43 + MesTmToolDO tool = BeanUtils.toBean(createReqVO, MesTmToolDO.class);
  44 + toolMapper.insert(tool);
  45 + return tool.getId();
  46 + }
  47 +
  48 + @Override
  49 + public void updateTool(MesTmToolSaveReqVO updateReqVO) {
  50 + // 校验存在
  51 + validateToolExists(updateReqVO.getId());
  52 + // 校验工具类型存在
  53 + toolTypeService.getToolType(updateReqVO.getToolTypeId());
  54 + // 校验编码唯一
  55 + validateToolCodeUnique(updateReqVO.getId(), updateReqVO.getCode());
  56 +
  57 + // 更新
  58 + // TODO @AI:枚举类维护类型,避免使用魔法值
  59 + if (Objects.equals(updateReqVO.getMaintenType(), 1)) { // 定期维护
  60 + updateReqVO.setNextMaintenPeriod(null);
  61 + } else if (Objects.equals(updateReqVO.getMaintenType(), 2)) { // 按使用次数维护
  62 + updateReqVO.setNextMaintenDate(null);
  63 + }
  64 + MesTmToolDO updateObj = BeanUtils.toBean(updateReqVO, MesTmToolDO.class);
  65 + toolMapper.updateById(updateObj);
  66 + }
  67 +
  68 + @Override
  69 + public void deleteTool(Long id) {
  70 + // 校验存在
  71 + validateToolExists(id);
  72 + // 删除
  73 + toolMapper.deleteById(id);
  74 + }
  75 +
  76 + private void validateToolExists(Long id) {
  77 + if (toolMapper.selectById(id) == null) {
  78 + throw exception(TM_TOOL_NOT_EXISTS);
  79 + }
  80 + }
  81 +
  82 + private void validateToolCodeUnique(Long id, String code) {
  83 + if (code == null) {
  84 + return;
  85 + }
  86 + MesTmToolDO tool = toolMapper.selectByCode(code);
  87 + if (tool == null) {
  88 + return;
  89 + }
  90 + // TODO @AI:ObjUtil notEquals
  91 + if (id == null) {
  92 + throw exception(TM_TOOL_CODE_DUPLICATE);
  93 + }
  94 + if (!Objects.equals(tool.getId(), id)) {
  95 + throw exception(TM_TOOL_CODE_DUPLICATE);
  96 + }
  97 + }
  98 +
  99 + @Override
  100 + public MesTmToolDO getTool(Long id) {
  101 + return toolMapper.selectById(id);
  102 + }
  103 +
  104 + @Override
  105 + public PageResult<MesTmToolDO> getToolPage(MesTmToolPageReqVO pageReqVO) {
  106 + return toolMapper.selectPage(pageReqVO);
  107 + }
  108 +
  109 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/tm/tool/MesTmToolTypeService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.tm.tool;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.type.MesTmToolTypePageReqVO;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.type.MesTmToolTypeSaveReqVO;
  6 +import cn.iocoder.yudao.module.mes.dal.dataobject.tm.tool.MesTmToolTypeDO;
  7 +import jakarta.validation.Valid;
  8 +
  9 +import java.util.Collection;
  10 +import java.util.List;
  11 +import java.util.Map;
  12 +
  13 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
  14 +
  15 +/**
  16 + * MES 工具类型 Service 接口
  17 + *
  18 + * @author 芋道源码
  19 + */
  20 +public interface MesTmToolTypeService {
  21 +
  22 + /**
  23 + * 创建工具类型
  24 + *
  25 + * @param createReqVO 创建信息
  26 + * @return 编号
  27 + */
  28 + Long createToolType(@Valid MesTmToolTypeSaveReqVO createReqVO);
  29 +
  30 + /**
  31 + * 更新工具类型
  32 + *
  33 + * @param updateReqVO 更新信息
  34 + */
  35 + void updateToolType(@Valid MesTmToolTypeSaveReqVO updateReqVO);
  36 +
  37 + /**
  38 + * 删除工具类型
  39 + *
  40 + * @param id 编号
  41 + */
  42 + void deleteToolType(Long id);
  43 +
  44 + /**
  45 + * 获得工具类型
  46 + *
  47 + * @param id 编号
  48 + * @return 工具类型
  49 + */
  50 + MesTmToolTypeDO getToolType(Long id);
  51 +
  52 + /**
  53 + * 获得工具类型分页
  54 + *
  55 + * @param pageReqVO 分页查询
  56 + * @return 工具类型分页
  57 + */
  58 + PageResult<MesTmToolTypeDO> getToolTypePage(MesTmToolTypePageReqVO pageReqVO);
  59 +
  60 + /**
  61 + * 获得工具类型列表
  62 + *
  63 + * @return 工具类型列表
  64 + */
  65 + List<MesTmToolTypeDO> getToolTypeList();
  66 +
  67 + /**
  68 + * 获得工具类型列表
  69 + *
  70 + * @param ids 编号数组
  71 + * @return 工具类型列表
  72 + */
  73 + List<MesTmToolTypeDO> getToolTypeList(Collection<Long> ids);
  74 +
  75 + /**
  76 + * 获得工具类型 Map
  77 + *
  78 + * @param ids 编号数组
  79 + * @return 工具类型 Map
  80 + */
  81 + default Map<Long, MesTmToolTypeDO> getToolTypeMap(Collection<Long> ids) {
  82 + return convertMap(getToolTypeList(ids), MesTmToolTypeDO::getId);
  83 + }
  84 +
  85 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/tm/tool/MesTmToolTypeServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.tm.tool;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.type.MesTmToolTypePageReqVO;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.type.MesTmToolTypeSaveReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.tm.tool.MesTmToolTypeDO;
  8 +import cn.iocoder.yudao.module.mes.dal.mysql.tm.tool.MesTmToolMapper;
  9 +import cn.iocoder.yudao.module.mes.dal.mysql.tm.tool.MesTmToolTypeMapper;
  10 +import jakarta.annotation.Resource;
  11 +import org.springframework.stereotype.Service;
  12 +import org.springframework.validation.annotation.Validated;
  13 +
  14 +import java.util.Collection;
  15 +import java.util.List;
  16 +import java.util.Objects;
  17 +
  18 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  19 +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
  20 +
  21 +/**
  22 + * MES 工具类型 Service 实现类
  23 + *
  24 + * @author 芋道源码
  25 + */
  26 +@Service
  27 +@Validated
  28 +public class MesTmToolTypeServiceImpl implements MesTmToolTypeService {
  29 +
  30 + @Resource
  31 + private MesTmToolTypeMapper toolTypeMapper;
  32 +
  33 + @Resource
  34 + private MesTmToolMapper toolMapper;
  35 +
  36 + @Override
  37 + public Long createToolType(MesTmToolTypeSaveReqVO createReqVO) {
  38 + // 校验编码唯一
  39 + validateToolTypeCodeUnique(null, createReqVO.getCode());
  40 + // 校验名称唯一
  41 + validateToolTypeNameUnique(null, createReqVO.getName());
  42 +
  43 + // 插入
  44 + MesTmToolTypeDO toolType = BeanUtils.toBean(createReqVO, MesTmToolTypeDO.class);
  45 + toolTypeMapper.insert(toolType);
  46 + return toolType.getId();
  47 + }
  48 +
  49 + @Override
  50 + public void updateToolType(MesTmToolTypeSaveReqVO updateReqVO) {
  51 + // 校验存在
  52 + validateToolTypeExists(updateReqVO.getId());
  53 + // 校验编码唯一
  54 + validateToolTypeCodeUnique(updateReqVO.getId(), updateReqVO.getCode());
  55 + // 校验名称唯一
  56 + validateToolTypeNameUnique(updateReqVO.getId(), updateReqVO.getName());
  57 +
  58 + // 更新
  59 + MesTmToolTypeDO updateObj = BeanUtils.toBean(updateReqVO, MesTmToolTypeDO.class);
  60 + toolTypeMapper.updateById(updateObj);
  61 + }
  62 +
  63 + @Override
  64 + public void deleteToolType(Long id) {
  65 + // 校验存在
  66 + validateToolTypeExists(id);
  67 + // 校验是否被工具引用
  68 + if (toolMapper.selectCountByToolTypeId(id) > 0) {
  69 + throw exception(TM_TOOL_TYPE_HAS_TOOL);
  70 + }
  71 +
  72 + // 删除
  73 + toolTypeMapper.deleteById(id);
  74 + }
  75 +
  76 + private void validateToolTypeExists(Long id) {
  77 + if (toolTypeMapper.selectById(id) == null) {
  78 + throw exception(TM_TOOL_TYPE_NOT_EXISTS);
  79 + }
  80 + }
  81 +
  82 + private void validateToolTypeCodeUnique(Long id, String code) {
  83 + MesTmToolTypeDO toolType = toolTypeMapper.selectByCode(code);
  84 + if (toolType == null) {
  85 + return;
  86 + }
  87 + // TODO @AI:ObjUtil notEquals
  88 + if (id == null) {
  89 + throw exception(TM_TOOL_TYPE_CODE_DUPLICATE);
  90 + }
  91 + if (!Objects.equals(toolType.getId(), id)) {
  92 + throw exception(TM_TOOL_TYPE_CODE_DUPLICATE);
  93 + }
  94 + }
  95 +
  96 + private void validateToolTypeNameUnique(Long id, String name) {
  97 + MesTmToolTypeDO toolType = toolTypeMapper.selectByName(name);
  98 + if (toolType == null) {
  99 + return;
  100 + }
  101 + // TODO @AI:ObjUtil notEquals
  102 + if (id == null) {
  103 + throw exception(TM_TOOL_TYPE_NAME_DUPLICATE);
  104 + }
  105 + if (!Objects.equals(toolType.getId(), id)) {
  106 + throw exception(TM_TOOL_TYPE_NAME_DUPLICATE);
  107 + }
  108 + }
  109 +
  110 + @Override
  111 + public MesTmToolTypeDO getToolType(Long id) {
  112 + return toolTypeMapper.selectById(id);
  113 + }
  114 +
  115 + @Override
  116 + public PageResult<MesTmToolTypeDO> getToolTypePage(MesTmToolTypePageReqVO pageReqVO) {
  117 + return toolTypeMapper.selectPage(pageReqVO);
  118 + }
  119 +
  120 + @Override
  121 + public List<MesTmToolTypeDO> getToolTypeList() {
  122 + return toolTypeMapper.selectList();
  123 + }
  124 +
  125 + @Override
  126 + public List<MesTmToolTypeDO> getToolTypeList(Collection<Long> ids) {
  127 + return toolTypeMapper.selectByIds(ids);
  128 + }
  129 +
  130 +}