From f8b097b4b7efc0ce0734b1967cc5292c5e31b110 Mon Sep 17 00:00:00 2001 From: HuangHuiKang Date: Fri, 3 Jul 2026 14:32:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0=E5=B7=A5=E8=89=BA?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=8F=8A=E5=B7=A5=E8=89=BA=E8=B7=AF=E7=BA=BF?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/mes/enums/ErrorCodeConstants.java | 6 + .../ProcessParameterController.java | 101 +++++++++++ .../vo/ProcessParameterPageReqVO.java | 36 ++++ .../vo/ProcessParameterRespVO.java | 43 +++++ .../vo/ProcessParameterSaveReqVO.java | 30 ++++ .../processroute/ProcessRouteController.java | 100 +++++++++++ .../vo/ProcessRouteItemRespVO.java | 31 ++++ .../vo/ProcessRouteItemSaveReqVO.java | 25 +++ .../vo/ProcessRoutePageReqVO.java | 36 ++++ .../processroute/vo/ProcessRouteRespVO.java | 47 +++++ .../vo/ProcessRouteSaveReqVO.java | 36 ++++ .../processparameter/ProcessParameterDO.java | 44 +++++ .../processroute/ProcessRouteDO.java | 44 +++++ .../processroute/ProcessRouteItemDO.java | 55 ++++++ .../ProcessParameterMapper.java | 38 ++++ .../processroute/ProcessRouteItemMapper.java | 25 +++ .../processroute/ProcessRouteMapper.java | 38 ++++ .../ProcessParameterService.java | 28 +++ .../ProcessParameterServiceImpl.java | 106 +++++++++++ .../processroute/ProcessRouteService.java | 26 +++ .../processroute/ProcessRouteServiceImpl.java | 165 ++++++++++++++++++ 21 files changed, 1060 insertions(+) create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processparameter/ProcessParameterController.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processparameter/vo/ProcessParameterPageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processparameter/vo/ProcessParameterRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processparameter/vo/ProcessParameterSaveReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/ProcessRouteController.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRouteItemRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRouteItemSaveReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRoutePageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRouteRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRouteSaveReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/processparameter/ProcessParameterDO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/processroute/ProcessRouteDO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/processroute/ProcessRouteItemDO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/processparameter/ProcessParameterMapper.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/processroute/ProcessRouteItemMapper.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/processroute/ProcessRouteMapper.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/processparameter/ProcessParameterService.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/processparameter/ProcessParameterServiceImpl.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/processroute/ProcessRouteService.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/processroute/ProcessRouteServiceImpl.java diff --git a/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java b/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java index 2c15dc6af..355d2beb9 100644 --- a/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java +++ b/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java @@ -226,6 +226,12 @@ public interface ErrorCodeConstants { ErrorCode DEVICE_LINE_CODE_NOT_EXISTS = new ErrorCode(100_501_0007, "设备产线编码不能为空"); ErrorCode DEVICE_CRITICAL_COMPONENT_NOT_EXISTS = new ErrorCode(100_501_0008, "设备关键件明细不存在"); + // ========== 工艺参数/工艺路线 相关 100_551_0000 ========== + ErrorCode PROCESS_PARAMETER_NOT_EXISTS = new ErrorCode(100_551_0001, "工艺参数不存在"); + ErrorCode PROCESS_PARAMETER_CODE_EXISTS = new ErrorCode(100_551_0002, "工艺参数编码已存在,请重新提交"); + ErrorCode PROCESS_ROUTE_NOT_EXISTS = new ErrorCode(100_551_0003, "工艺路线不存在"); + ErrorCode PROCESS_ROUTE_CODE_EXISTS = new ErrorCode(100_551_0004, "工艺路线编码已存在,请重新提交"); + // ========== 打印机配置 TODO 补充编号 ========== ErrorCode CONFIG_NOT_EXISTS = new ErrorCode(100_601_0001, "打印机配置不存在"); ErrorCode CONFIG_EXISTS = new ErrorCode(100_601_0001, "打印机配置已存在,请不要重复添加"); diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processparameter/ProcessParameterController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processparameter/ProcessParameterController.java new file mode 100644 index 000000000..8478063f9 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processparameter/ProcessParameterController.java @@ -0,0 +1,101 @@ +package cn.iocoder.yudao.module.mes.controller.admin.processparameter; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.mes.controller.admin.processparameter.vo.ProcessParameterPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.processparameter.vo.ProcessParameterRespVO; +import cn.iocoder.yudao.module.mes.controller.admin.processparameter.vo.ProcessParameterSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.processparameter.ProcessParameterDO; +import cn.iocoder.yudao.module.mes.service.processparameter.ProcessParameterService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +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; + +@Tag(name = "管理后台 - 工艺参数") +@RestController +@RequestMapping("/mes/process-parameter") +@Validated +public class ProcessParameterController { + + @Resource + private ProcessParameterService processParameterService; + + @PostMapping("/create") + @Operation(summary = "创建工艺参数") + @PreAuthorize("@ss.hasPermission('mes:process-parameter:create')") + public CommonResult createProcessParameter(@Valid @RequestBody ProcessParameterSaveReqVO createReqVO) { + return success(processParameterService.createProcessParameter(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新工艺参数") + @PreAuthorize("@ss.hasPermission('mes:process-parameter:update')") + public CommonResult updateProcessParameter(@Valid @RequestBody ProcessParameterSaveReqVO updateReqVO) { + processParameterService.updateProcessParameter(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除工艺参数") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:process-parameter:delete')") + public CommonResult deleteProcessParameter(@RequestParam("id") Long id) { + processParameterService.deleteProcessParameter(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得工艺参数") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:process-parameter:query')") + public CommonResult getProcessParameter(@RequestParam("id") Long id) { + ProcessParameterDO processParameter = processParameterService.getProcessParameter(id); + return success(BeanUtils.toBean(processParameter, ProcessParameterRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得工艺参数分页") + @PreAuthorize("@ss.hasPermission('mes:process-parameter:query')") + public CommonResult> getProcessParameterPage(@Valid ProcessParameterPageReqVO pageReqVO) { + PageResult pageResult = processParameterService.getProcessParameterPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProcessParameterRespVO.class)); + } + + @GetMapping("/list") + @Operation(summary = "获得工艺参数列表") + @PreAuthorize("@ss.hasPermission('mes:process-parameter:query')") + public CommonResult> getProcessParameterList( + @RequestParam(value = "isEnable", required = false) Boolean isEnable) { + List list = processParameterService.getProcessParameterList(isEnable); + return success(BeanUtils.toBean(list, ProcessParameterRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出工艺参数 Excel") + @PreAuthorize("@ss.hasPermission('mes:process-parameter:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportProcessParameterExcel(@Valid ProcessParameterPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = processParameterService.getProcessParameterPage(pageReqVO).getList(); + ExcelUtils.write(response, "工艺参数.xls", "数据", ProcessParameterRespVO.class, + BeanUtils.toBean(list, ProcessParameterRespVO.class)); + } + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processparameter/vo/ProcessParameterPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processparameter/vo/ProcessParameterPageReqVO.java new file mode 100644 index 000000000..c18af4d40 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processparameter/vo/ProcessParameterPageReqVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.mes.controller.admin.processparameter.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 工艺参数分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProcessParameterPageReqVO extends PageParam { + + @Schema(description = "工艺参数编码") + private String code; + + @Schema(description = "工艺参数名称", example = "碎浆") + private String name; + + @Schema(description = "是否启用") + private Boolean isEnable; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "id 集合,导出用") + private String ids; + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processparameter/vo/ProcessParameterRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processparameter/vo/ProcessParameterRespVO.java new file mode 100644 index 000000000..6b0a698a0 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processparameter/vo/ProcessParameterRespVO.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.mes.controller.admin.processparameter.vo; + +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 工艺参数 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProcessParameterRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "工艺参数编码", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("工艺参数编码") + private String code; + + @Schema(description = "工艺参数名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "碎浆") + @ExcelProperty("工艺参数名称") + private String name; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty(value = "是否启用", converter = DictConvert.class) + @DictFormat("infra_boolean_string") + private Boolean isEnable; + + @Schema(description = "备注") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + @ColumnWidth(20) + private LocalDateTime createTime; + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processparameter/vo/ProcessParameterSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processparameter/vo/ProcessParameterSaveReqVO.java new file mode 100644 index 000000000..68c6ef85a --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processparameter/vo/ProcessParameterSaveReqVO.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.mes.controller.admin.processparameter.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 工艺参数新增/修改 Request VO") +@Data +public class ProcessParameterSaveReqVO { + + @Schema(description = "编号", example = "1024") + private Long id; + + @Schema(description = "工艺参数编码,不填时自动生成") + private String code; + + @Schema(description = "工艺参数名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "碎浆") + @NotEmpty(message = "工艺参数名称不能为空") + private String name; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否启用不能为空") + private Boolean isEnable; + + @Schema(description = "备注") + private String remark; + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/ProcessRouteController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/ProcessRouteController.java new file mode 100644 index 000000000..f1d8a01c0 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/ProcessRouteController.java @@ -0,0 +1,100 @@ +package cn.iocoder.yudao.module.mes.controller.admin.processroute; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.mes.controller.admin.processroute.vo.ProcessRoutePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.processroute.vo.ProcessRouteRespVO; +import cn.iocoder.yudao.module.mes.controller.admin.processroute.vo.ProcessRouteSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.processroute.ProcessRouteDO; +import cn.iocoder.yudao.module.mes.service.processroute.ProcessRouteService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +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; + +@Tag(name = "管理后台 - 工艺路线") +@RestController +@RequestMapping("/mes/process-route") +@Validated +public class ProcessRouteController { + + @Resource + private ProcessRouteService processRouteService; + + @PostMapping("/create") + @Operation(summary = "创建工艺路线") + @PreAuthorize("@ss.hasPermission('mes:process-route:create')") + public CommonResult createProcessRoute(@Valid @RequestBody ProcessRouteSaveReqVO createReqVO) { + return success(processRouteService.createProcessRoute(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新工艺路线") + @PreAuthorize("@ss.hasPermission('mes:process-route:update')") + public CommonResult updateProcessRoute(@Valid @RequestBody ProcessRouteSaveReqVO updateReqVO) { + processRouteService.updateProcessRoute(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除工艺路线") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:process-route:delete')") + public CommonResult deleteProcessRoute(@RequestParam("id") Long id) { + processRouteService.deleteProcessRoute(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得工艺路线") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:process-route:query')") + public CommonResult getProcessRoute(@RequestParam("id") Long id) { + return success(processRouteService.getProcessRouteResp(id)); + } + + @GetMapping("/page") + @Operation(summary = "获得工艺路线分页") + @PreAuthorize("@ss.hasPermission('mes:process-route:query')") + public CommonResult> getProcessRoutePage(@Valid ProcessRoutePageReqVO pageReqVO) { + PageResult pageResult = processRouteService.getProcessRoutePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProcessRouteRespVO.class)); + } + + @GetMapping("/list") + @Operation(summary = "获得工艺路线列表") + @PreAuthorize("@ss.hasPermission('mes:process-route:query')") + public CommonResult> getProcessRouteList( + @RequestParam(value = "isEnable", required = false) Boolean isEnable) { + List list = processRouteService.getProcessRouteList(isEnable); + return success(BeanUtils.toBean(list, ProcessRouteRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出工艺路线 Excel") + @PreAuthorize("@ss.hasPermission('mes:process-route:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportProcessRouteExcel(@Valid ProcessRoutePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = processRouteService.getProcessRoutePage(pageReqVO).getList(); + ExcelUtils.write(response, "工艺路线.xls", "数据", ProcessRouteRespVO.class, + BeanUtils.toBean(list, ProcessRouteRespVO.class)); + } + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRouteItemRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRouteItemRespVO.java new file mode 100644 index 000000000..96a79f4a5 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRouteItemRespVO.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.mes.controller.admin.processroute.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 工艺路线明细 Response VO") +@Data +public class ProcessRouteItemRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "工艺路线编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long routeId; + + @Schema(description = "排序,从 1 开始", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer sort; + + @Schema(description = "工艺参数编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Long processParameterId; + + @Schema(description = "工艺参数编码", requiredMode = Schema.RequiredMode.REQUIRED) + private String processParameterCode; + + @Schema(description = "工艺参数名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String processParameterName; + + @Schema(description = "备注") + private String remark; + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRouteItemSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRouteItemSaveReqVO.java new file mode 100644 index 000000000..b8c3c77d1 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRouteItemSaveReqVO.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.mes.controller.admin.processroute.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 工艺路线明细新增/修改 Request VO") +@Data +public class ProcessRouteItemSaveReqVO { + + @Schema(description = "编号", example = "1024") + private Long id; + + @Schema(description = "排序,从 1 开始。不传时按数组顺序自动填充", example = "1") + private Integer sort; + + @Schema(description = "工艺参数编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + @NotNull(message = "工艺参数编号不能为空") + private Long processParameterId; + + @Schema(description = "备注") + private String remark; + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRoutePageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRoutePageReqVO.java new file mode 100644 index 000000000..703982a60 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRoutePageReqVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.mes.controller.admin.processroute.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 工艺路线分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProcessRoutePageReqVO extends PageParam { + + @Schema(description = "工艺路线编码") + private String code; + + @Schema(description = "工艺路线名称", example = "标准生产路线") + private String name; + + @Schema(description = "是否启用") + private Boolean isEnable; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "id 集合,导出用") + private String ids; + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRouteRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRouteRespVO.java new file mode 100644 index 000000000..1ff204eca --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRouteRespVO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.mes.controller.admin.processroute.vo; + +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "管理后台 - 工艺路线 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProcessRouteRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "工艺路线编码", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("工艺路线编码") + private String code; + + @Schema(description = "工艺路线名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "标准生产路线") + @ExcelProperty("工艺路线名称") + private String name; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty(value = "是否启用", converter = DictConvert.class) + @DictFormat("infra_boolean_string") + private Boolean isEnable; + + @Schema(description = "备注") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + @ColumnWidth(20) + private LocalDateTime createTime; + + @Schema(description = "工艺参数明细") + private List items; + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRouteSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRouteSaveReqVO.java new file mode 100644 index 000000000..0292d76da --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/processroute/vo/ProcessRouteSaveReqVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.mes.controller.admin.processroute.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Schema(description = "管理后台 - 工艺路线新增/修改 Request VO") +@Data +public class ProcessRouteSaveReqVO { + + @Schema(description = "编号", example = "1024") + private Long id; + + @Schema(description = "工艺路线编码,不填时自动生成") + private String code; + + @Schema(description = "工艺路线名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "标准生产路线") + @NotEmpty(message = "工艺路线名称不能为空") + private String name; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否启用不能为空") + private Boolean isEnable; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "工艺参数明细,可重复选择相同工艺参数", implementation = ProcessRouteItemSaveReqVO.class) + @Valid + private List items; + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/processparameter/ProcessParameterDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/processparameter/ProcessParameterDO.java new file mode 100644 index 000000000..6fb7ed579 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/processparameter/ProcessParameterDO.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.processparameter; + +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.*; + +/** + * 工艺参数 DO + */ +@TableName("mes_process_parameter") +@KeySequence("mes_process_parameter_seq") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProcessParameterDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 工艺参数编码 + */ + private String code; + /** + * 工艺参数名称 + */ + private String name; + /** + * 是否启用 + */ + private Boolean isEnable; + /** + * 备注 + */ + private String remark; + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/processroute/ProcessRouteDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/processroute/ProcessRouteDO.java new file mode 100644 index 000000000..417d9d56c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/processroute/ProcessRouteDO.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.processroute; + +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.*; + +/** + * 工艺路线 DO + */ +@TableName("mes_process_route") +@KeySequence("mes_process_route_seq") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProcessRouteDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 工艺路线编码 + */ + private String code; + /** + * 工艺路线名称 + */ + private String name; + /** + * 是否启用 + */ + private Boolean isEnable; + /** + * 备注 + */ + private String remark; + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/processroute/ProcessRouteItemDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/processroute/ProcessRouteItemDO.java new file mode 100644 index 000000000..3bce67593 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/processroute/ProcessRouteItemDO.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.processroute; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.processparameter.ProcessParameterDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * 工艺路线明细 DO + */ +@TableName("mes_process_route_item") +@KeySequence("mes_process_route_item_seq") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProcessRouteItemDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 工艺路线编号 + */ + private Long routeId; + /** + * 排序,从 1 开始 + */ + private Integer sort; + /** + * 工艺参数编号 + * + * 关联 {@link ProcessParameterDO#getId()} + */ + private Long processParameterId; + /** + * 工艺参数编码 + */ + private String processParameterCode; + /** + * 工艺参数名称 + */ + private String processParameterName; + /** + * 备注 + */ + private String remark; + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/processparameter/ProcessParameterMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/processparameter/ProcessParameterMapper.java new file mode 100644 index 000000000..07f54dd30 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/processparameter/ProcessParameterMapper.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.processparameter; + +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.processparameter.vo.ProcessParameterPageReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.processparameter.ProcessParameterDO; +import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@Mapper +public interface ProcessParameterMapper extends BaseMapperX { + + default PageResult selectPage(ProcessParameterPageReqVO reqVO) { + LambdaQueryWrapperX wrapper = new LambdaQueryWrapperX() + .eqIfPresent(ProcessParameterDO::getCode, reqVO.getCode()) + .likeIfPresent(ProcessParameterDO::getName, reqVO.getName()) + .eqIfPresent(ProcessParameterDO::getIsEnable, reqVO.getIsEnable()) + .betweenIfPresent(ProcessParameterDO::getCreateTime, reqVO.getCreateTime()); + + if (StringUtils.isNotBlank(reqVO.getIds())) { + List idList = Arrays.stream(reqVO.getIds().split(",")) + .map(String::trim) + .filter(StringUtils::isNotBlank) + .map(Long::valueOf) + .collect(Collectors.toList()); + if (!idList.isEmpty()) { + wrapper.in(ProcessParameterDO::getId, idList); + } + } + return selectPage(reqVO, wrapper.orderByDesc(ProcessParameterDO::getId)); + } + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/processroute/ProcessRouteItemMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/processroute/ProcessRouteItemMapper.java new file mode 100644 index 000000000..47904b615 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/processroute/ProcessRouteItemMapper.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.processroute; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.mes.dal.dataobject.processroute.ProcessRouteItemDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface ProcessRouteItemMapper extends BaseMapperX { + + default List selectListByRouteId(Long routeId) { + return selectList(new LambdaQueryWrapperX() + .eq(ProcessRouteItemDO::getRouteId, routeId) + .orderByAsc(ProcessRouteItemDO::getSort) + .orderByAsc(ProcessRouteItemDO::getId)); + } + + default void deleteByRouteId(Long routeId) { + delete(new LambdaQueryWrapperX() + .eq(ProcessRouteItemDO::getRouteId, routeId)); + } + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/processroute/ProcessRouteMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/processroute/ProcessRouteMapper.java new file mode 100644 index 000000000..5f60690f5 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/processroute/ProcessRouteMapper.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.processroute; + +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.processroute.vo.ProcessRoutePageReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.processroute.ProcessRouteDO; +import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@Mapper +public interface ProcessRouteMapper extends BaseMapperX { + + default PageResult selectPage(ProcessRoutePageReqVO reqVO) { + LambdaQueryWrapperX wrapper = new LambdaQueryWrapperX() + .eqIfPresent(ProcessRouteDO::getCode, reqVO.getCode()) + .likeIfPresent(ProcessRouteDO::getName, reqVO.getName()) + .eqIfPresent(ProcessRouteDO::getIsEnable, reqVO.getIsEnable()) + .betweenIfPresent(ProcessRouteDO::getCreateTime, reqVO.getCreateTime()); + + if (StringUtils.isNotBlank(reqVO.getIds())) { + List idList = Arrays.stream(reqVO.getIds().split(",")) + .map(String::trim) + .filter(StringUtils::isNotBlank) + .map(Long::valueOf) + .collect(Collectors.toList()); + if (!idList.isEmpty()) { + wrapper.in(ProcessRouteDO::getId, idList); + } + } + return selectPage(reqVO, wrapper.orderByDesc(ProcessRouteDO::getId)); + } + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/processparameter/ProcessParameterService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/processparameter/ProcessParameterService.java new file mode 100644 index 000000000..b31a99d8d --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/processparameter/ProcessParameterService.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.mes.service.processparameter; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mes.controller.admin.processparameter.vo.ProcessParameterPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.processparameter.vo.ProcessParameterSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.processparameter.ProcessParameterDO; + +import javax.validation.Valid; +import java.util.Collection; +import java.util.List; + +public interface ProcessParameterService { + + Long createProcessParameter(@Valid ProcessParameterSaveReqVO createReqVO); + + void updateProcessParameter(@Valid ProcessParameterSaveReqVO updateReqVO); + + void deleteProcessParameter(Long id); + + ProcessParameterDO getProcessParameter(Long id); + + List getProcessParameterList(Collection ids); + + List getProcessParameterList(Boolean isEnable); + + PageResult getProcessParameterPage(ProcessParameterPageReqVO pageReqVO); + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/processparameter/ProcessParameterServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/processparameter/ProcessParameterServiceImpl.java new file mode 100644 index 000000000..3e67b2e9b --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/processparameter/ProcessParameterServiceImpl.java @@ -0,0 +1,106 @@ +package cn.iocoder.yudao.module.mes.service.processparameter; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.erp.controller.admin.autocode.util.AutoCodeUtil; +import cn.iocoder.yudao.module.mes.controller.admin.processparameter.vo.ProcessParameterPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.processparameter.vo.ProcessParameterSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.processparameter.ProcessParameterDO; +import cn.iocoder.yudao.module.mes.dal.mysql.processparameter.ProcessParameterMapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +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.PROCESS_PARAMETER_CODE_EXISTS; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PROCESS_PARAMETER_NOT_EXISTS; + +@Service +@Validated +public class ProcessParameterServiceImpl implements ProcessParameterService { + + private static final String PROCESS_PARAMETER_CODE_RULE = "PROCESS_PARAMETER_CODE"; + + @Resource + private ProcessParameterMapper processParameterMapper; + @Resource + private AutoCodeUtil autoCodeUtil; + + @Override + public Long createProcessParameter(ProcessParameterSaveReqVO createReqVO) { + ProcessParameterDO processParameter = BeanUtils.toBean(createReqVO, ProcessParameterDO.class); + if (StringUtils.isBlank(processParameter.getCode())) { + processParameter.setCode(autoCodeUtil.genSerialCode(PROCESS_PARAMETER_CODE_RULE, null)); + } else { + validateCodeUnique(processParameter.getCode(), null); + } + processParameterMapper.insert(processParameter); + return processParameter.getId(); + } + + @Override + public void updateProcessParameter(ProcessParameterSaveReqVO updateReqVO) { + validateProcessParameterExists(updateReqVO.getId()); + ProcessParameterDO updateObj = BeanUtils.toBean(updateReqVO, ProcessParameterDO.class); + if (StringUtils.isBlank(updateObj.getCode())) { + updateObj.setCode(null); + } else { + validateCodeUnique(updateObj.getCode(), updateObj.getId()); + } + processParameterMapper.updateById(updateObj); + } + + @Override + public void deleteProcessParameter(Long id) { + validateProcessParameterExists(id); + processParameterMapper.deleteById(id); + } + + @Override + public ProcessParameterDO getProcessParameter(Long id) { + return processParameterMapper.selectById(id); + } + + @Override + public List getProcessParameterList(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return Collections.emptyList(); + } + return processParameterMapper.selectBatchIds(ids); + } + + @Override + public List getProcessParameterList(Boolean isEnable) { + return processParameterMapper.selectList(Wrappers.lambdaQuery() + .eq(isEnable != null, ProcessParameterDO::getIsEnable, isEnable) + .orderByDesc(ProcessParameterDO::getId)); + } + + @Override + public PageResult getProcessParameterPage(ProcessParameterPageReqVO pageReqVO) { + return processParameterMapper.selectPage(pageReqVO); + } + + private void validateProcessParameterExists(Long id) { + if (id == null || processParameterMapper.selectById(id) == null) { + throw exception(PROCESS_PARAMETER_NOT_EXISTS); + } + } + + private void validateCodeUnique(String code, Long id) { + Long count = processParameterMapper.selectCount(Wrappers.lambdaQuery() + .eq(ProcessParameterDO::getCode, code) + .ne(id != null, ProcessParameterDO::getId, id)); + if (count != null && count > 0) { + throw exception(PROCESS_PARAMETER_CODE_EXISTS); + } + } + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/processroute/ProcessRouteService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/processroute/ProcessRouteService.java new file mode 100644 index 000000000..f8a44cf7c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/processroute/ProcessRouteService.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.mes.service.processroute; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mes.controller.admin.processroute.vo.ProcessRoutePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.processroute.vo.ProcessRouteRespVO; +import cn.iocoder.yudao.module.mes.controller.admin.processroute.vo.ProcessRouteSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.processroute.ProcessRouteDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.processroute.ProcessRouteItemDO; + +import javax.validation.Valid; +import java.util.List; + +public interface ProcessRouteService { + + Long createProcessRoute(@Valid ProcessRouteSaveReqVO createReqVO); + + void updateProcessRoute(@Valid ProcessRouteSaveReqVO updateReqVO); + + void deleteProcessRoute(Long id); + ProcessRouteDO getProcessRoute(Long id); + ProcessRouteRespVO getProcessRouteResp(Long id); + List getProcessRouteList(Boolean isEnable); + PageResult getProcessRoutePage(ProcessRoutePageReqVO pageReqVO); + List getProcessRouteItemListByRouteId(Long routeId); + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/processroute/ProcessRouteServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/processroute/ProcessRouteServiceImpl.java new file mode 100644 index 000000000..d3298a4ac --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/processroute/ProcessRouteServiceImpl.java @@ -0,0 +1,165 @@ +package cn.iocoder.yudao.module.mes.service.processroute; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.erp.controller.admin.autocode.util.AutoCodeUtil; +import cn.iocoder.yudao.module.mes.controller.admin.processroute.vo.ProcessRouteItemSaveReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.processroute.vo.ProcessRoutePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.processroute.vo.ProcessRouteRespVO; +import cn.iocoder.yudao.module.mes.controller.admin.processroute.vo.ProcessRouteSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.processparameter.ProcessParameterDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.processroute.ProcessRouteDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.processroute.ProcessRouteItemDO; +import cn.iocoder.yudao.module.mes.dal.mysql.processparameter.ProcessParameterMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.processroute.ProcessRouteItemMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.processroute.ProcessRouteMapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +@Service +@Validated +public class ProcessRouteServiceImpl implements ProcessRouteService { + + private static final String PROCESS_ROUTE_CODE_RULE = "PROCESS_ROUTE_CODE"; + + @Resource + private ProcessRouteMapper processRouteMapper; + @Resource + private ProcessRouteItemMapper processRouteItemMapper; + @Resource + private ProcessParameterMapper processParameterMapper; + @Resource + private AutoCodeUtil autoCodeUtil; + + @Override + @Transactional(rollbackFor = Exception.class) + public Long createProcessRoute(ProcessRouteSaveReqVO createReqVO) { + ProcessRouteDO processRoute = BeanUtils.toBean(createReqVO, ProcessRouteDO.class); + if (StringUtils.isBlank(processRoute.getCode())) { + processRoute.setCode(autoCodeUtil.genSerialCode(PROCESS_ROUTE_CODE_RULE, null)); + } else { + validateCodeUnique(processRoute.getCode(), null); + } + processRouteMapper.insert(processRoute); + createProcessRouteItemList(processRoute.getId(), createReqVO.getItems()); + return processRoute.getId(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateProcessRoute(ProcessRouteSaveReqVO updateReqVO) { + validateProcessRouteExists(updateReqVO.getId()); + ProcessRouteDO updateObj = BeanUtils.toBean(updateReqVO, ProcessRouteDO.class); + if (StringUtils.isBlank(updateObj.getCode())) { + updateObj.setCode(null); + } else { + validateCodeUnique(updateObj.getCode(), updateObj.getId()); + } + processRouteMapper.updateById(updateObj); + if (updateReqVO.getItems() != null) { + processRouteItemMapper.deleteByRouteId(updateReqVO.getId()); + createProcessRouteItemList(updateReqVO.getId(), updateReqVO.getItems()); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteProcessRoute(Long id) { + validateProcessRouteExists(id); + processRouteMapper.deleteById(id); + processRouteItemMapper.deleteByRouteId(id); + } + + @Override + public ProcessRouteDO getProcessRoute(Long id) { + return processRouteMapper.selectById(id); + } + + @Override + public ProcessRouteRespVO getProcessRouteResp(Long id) { + ProcessRouteDO processRoute = processRouteMapper.selectById(id); + ProcessRouteRespVO respVO = BeanUtils.toBean(processRoute, ProcessRouteRespVO.class); + if (respVO != null) { + respVO.setItems(BeanUtils.toBean(processRouteItemMapper.selectListByRouteId(id), + cn.iocoder.yudao.module.mes.controller.admin.processroute.vo.ProcessRouteItemRespVO.class)); + } + return respVO; + } + + @Override + public PageResult getProcessRoutePage(ProcessRoutePageReqVO pageReqVO) { + return processRouteMapper.selectPage(pageReqVO); + } + + @Override + public List getProcessRouteList(Boolean isEnable) { + return processRouteMapper.selectList(Wrappers.lambdaQuery() + .eq(isEnable != null, ProcessRouteDO::getIsEnable, isEnable) + .orderByDesc(ProcessRouteDO::getId)); + } + + @Override + public List getProcessRouteItemListByRouteId(Long routeId) { + return processRouteItemMapper.selectListByRouteId(routeId); + } + + private void createProcessRouteItemList(Long routeId, List items) { + if (CollUtil.isEmpty(items)) { + return; + } + Map parameterMap = getProcessParameterMap(convertSet(items, + ProcessRouteItemSaveReqVO::getProcessParameterId)); + for (int i = 0; i < items.size(); i++) { + ProcessRouteItemSaveReqVO item = items.get(i); + ProcessParameterDO processParameter = parameterMap.get(item.getProcessParameterId()); + if (processParameter == null) { + throw exception(PROCESS_PARAMETER_NOT_EXISTS); + } + ProcessRouteItemDO itemDO = BeanUtils.toBean(item, ProcessRouteItemDO.class); + itemDO.setRouteId(routeId); + itemDO.setSort(item.getSort() != null ? item.getSort() : i + 1); + itemDO.setProcessParameterCode(processParameter.getCode()); + itemDO.setProcessParameterName(processParameter.getName()); + processRouteItemMapper.insert(itemDO); + } + } + + private Map getProcessParameterMap(Collection ids) { + List filteredIds = ids.stream().filter(Objects::nonNull).collect(java.util.stream.Collectors.toList()); + if (CollUtil.isEmpty(filteredIds)) { + return java.util.Collections.emptyMap(); + } + return CollectionUtils.convertMap(processParameterMapper.selectBatchIds(filteredIds), ProcessParameterDO::getId); + } + + private void validateProcessRouteExists(Long id) { + if (id == null || processRouteMapper.selectById(id) == null) { + throw exception(PROCESS_ROUTE_NOT_EXISTS); + } + } + + private void validateCodeUnique(String code, Long id) { + Long count = processRouteMapper.selectCount(Wrappers.lambdaQuery() + .eq(ProcessRouteDO::getCode, code) + .ne(id != null, ProcessRouteDO::getId, id)); + if (count != null && count > 0) { + throw exception(PROCESS_ROUTE_CODE_EXISTS); + } + } + +}