Commit 015eab6848a577dd04fcda60a56b9f9e7f1cdf1c

Authored by YunaiV
1 parent 17680cf6

feat(mes): 添加安灯呼叫配置和记录相关功能,包括请求和响应 VO、枚举及服务接口

Showing 19 changed files with 1157 additions and 0 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/andon/MesProAndonConfigController.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.pro.andon;
  2 +
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  5 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  6 +import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
  7 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  8 +import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.config.MesProAndonConfigPageReqVO;
  9 +import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.config.MesProAndonConfigRespVO;
  10 +import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.config.MesProAndonConfigSaveReqVO;
  11 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.andon.MesProAndonConfigDO;
  12 +import cn.iocoder.yudao.module.mes.service.pro.andon.MesProAndonConfigService;
  13 +import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
  14 +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
  15 +import io.swagger.v3.oas.annotations.Operation;
  16 +import io.swagger.v3.oas.annotations.Parameter;
  17 +import io.swagger.v3.oas.annotations.tags.Tag;
  18 +import jakarta.annotation.Resource;
  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.util.Collections;
  25 +import java.util.List;
  26 +import java.util.Map;
  27 +
  28 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  29 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
  30 +
  31 +@Tag(name = "管理后台 - MES 安灯呼叫配置")
  32 +@RestController
  33 +@RequestMapping("/mes/pro/andon-config")
  34 +@Validated
  35 +public class MesProAndonConfigController {
  36 +
  37 + @Resource
  38 + private MesProAndonConfigService andonConfigService;
  39 +
  40 + @Resource
  41 + private AdminUserApi adminUserApi;
  42 +
  43 + @PostMapping("/create")
  44 + @Operation(summary = "创建安灯呼叫配置")
  45 + @PreAuthorize("@ss.hasPermission('mes:pro-andon-config:create')")
  46 + public CommonResult<Long> createAndonConfig(@Valid @RequestBody MesProAndonConfigSaveReqVO createReqVO) {
  47 + return success(andonConfigService.createAndonConfig(createReqVO));
  48 + }
  49 +
  50 + @PutMapping("/update")
  51 + @Operation(summary = "更新安灯呼叫配置")
  52 + @PreAuthorize("@ss.hasPermission('mes:pro-andon-config:update')")
  53 + public CommonResult<Boolean> updateAndonConfig(@Valid @RequestBody MesProAndonConfigSaveReqVO updateReqVO) {
  54 + andonConfigService.updateAndonConfig(updateReqVO);
  55 + return success(true);
  56 + }
  57 +
  58 + @DeleteMapping("/delete")
  59 + @Operation(summary = "删除安灯呼叫配置")
  60 + @Parameter(name = "id", description = "编号", required = true)
  61 + @PreAuthorize("@ss.hasPermission('mes:pro-andon-config:delete')")
  62 + public CommonResult<Boolean> deleteAndonConfig(@RequestParam("id") Long id) {
  63 + andonConfigService.deleteAndonConfig(id);
  64 + return success(true);
  65 + }
  66 +
  67 + @GetMapping("/get")
  68 + @Operation(summary = "获得安灯呼叫配置")
  69 + @Parameter(name = "id", description = "编号", required = true, example = "1024")
  70 + @PreAuthorize("@ss.hasPermission('mes:pro-andon-config:query')")
  71 + public CommonResult<MesProAndonConfigRespVO> getAndonConfig(@RequestParam("id") Long id) {
  72 + MesProAndonConfigDO config = andonConfigService.getAndonConfig(id);
  73 + if (config == null) {
  74 + return success(null);
  75 + }
  76 + return success(buildConfigRespVOList(List.of(config)).get(0));
  77 + }
  78 +
  79 + @GetMapping("/page")
  80 + @Operation(summary = "获得安灯呼叫配置分页")
  81 + @PreAuthorize("@ss.hasPermission('mes:pro-andon-config:query')")
  82 + public CommonResult<PageResult<MesProAndonConfigRespVO>> getAndonConfigPage(@Valid MesProAndonConfigPageReqVO pageReqVO) {
  83 + PageResult<MesProAndonConfigDO> pageResult = andonConfigService.getAndonConfigPage(pageReqVO);
  84 + return success(new PageResult<>(buildConfigRespVOList(pageResult.getList()), pageResult.getTotal()));
  85 + }
  86 +
  87 + @GetMapping("/list")
  88 + @Operation(summary = "获得安灯呼叫配置列表")
  89 + @PreAuthorize("@ss.hasPermission('mes:pro-andon-config:query')")
  90 + public CommonResult<List<MesProAndonConfigRespVO>> getAndonConfigList() {
  91 + List<MesProAndonConfigDO> list = andonConfigService.getAndonConfigList();
  92 + return success(buildConfigRespVOList(list));
  93 + }
  94 +
  95 + // ==================== 拼接 VO ====================
  96 +
  97 + private List<MesProAndonConfigRespVO> buildConfigRespVOList(List<MesProAndonConfigDO> list) {
  98 + if (CollUtil.isEmpty(list)) {
  99 + return Collections.emptyList();
  100 + }
  101 + // 1. 批量获取关联数据
  102 + Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
  103 + convertSet(list, MesProAndonConfigDO::getHandlerUserId));
  104 + // 2. 拼接 VO
  105 + return BeanUtils.toBean(list, MesProAndonConfigRespVO.class, vo ->
  106 + MapUtils.findAndThen(userMap, vo.getHandlerUserId(),
  107 + user -> vo.setHandlerUserNickname(user.getNickname())));
  108 + }
  109 +
  110 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/andon/MesProAndonRecordController.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.pro.andon;
  2 +
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
  5 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  6 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  7 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  8 +import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
  9 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  10 +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
  11 +import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.record.MesProAndonRecordHandleReqVO;
  12 +import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.record.MesProAndonRecordPageReqVO;
  13 +import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.record.MesProAndonRecordRespVO;
  14 +import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.record.MesProAndonRecordSaveReqVO;
  15 +import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkstationDO;
  16 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.andon.MesProAndonRecordDO;
  17 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.process.MesProProcessDO;
  18 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO;
  19 +import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService;
  20 +import cn.iocoder.yudao.module.mes.service.pro.andon.MesProAndonRecordService;
  21 +import cn.iocoder.yudao.module.mes.service.pro.process.MesProProcessService;
  22 +import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService;
  23 +import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
  24 +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
  25 +import io.swagger.v3.oas.annotations.Operation;
  26 +import io.swagger.v3.oas.annotations.Parameter;
  27 +import io.swagger.v3.oas.annotations.tags.Tag;
  28 +import jakarta.annotation.Resource;
  29 +import jakarta.servlet.http.HttpServletResponse;
  30 +import jakarta.validation.Valid;
  31 +import org.springframework.security.access.prepost.PreAuthorize;
  32 +import org.springframework.validation.annotation.Validated;
  33 +import org.springframework.web.bind.annotation.*;
  34 +
  35 +import java.io.IOException;
  36 +import java.util.*;
  37 +
  38 +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
  39 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  40 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
  41 +
  42 +@Tag(name = "管理后台 - MES 安灯呼叫记录")
  43 +@RestController
  44 +@RequestMapping("/mes/pro/andon-record")
  45 +@Validated
  46 +public class MesProAndonRecordController {
  47 +
  48 + @Resource
  49 + private MesProAndonRecordService andonRecordService;
  50 +
  51 + @Resource
  52 + private MesMdWorkstationService workstationService;
  53 +
  54 + @Resource
  55 + private MesProWorkOrderService workOrderService;
  56 +
  57 + @Resource
  58 + private MesProProcessService processService;
  59 +
  60 + @Resource
  61 + private AdminUserApi adminUserApi;
  62 +
  63 + @PostMapping("/create")
  64 + @Operation(summary = "创建安灯呼叫记录")
  65 + @PreAuthorize("@ss.hasPermission('mes:pro-andon-record:create')")
  66 + public CommonResult<Long> createAndonRecord(@Valid @RequestBody MesProAndonRecordSaveReqVO createReqVO) {
  67 + return success(andonRecordService.createAndonRecord(createReqVO));
  68 + }
  69 +
  70 + @DeleteMapping("/delete")
  71 + @Operation(summary = "删除安灯呼叫记录")
  72 + @Parameter(name = "id", description = "编号", required = true)
  73 + @PreAuthorize("@ss.hasPermission('mes:pro-andon-record:delete')")
  74 + public CommonResult<Boolean> deleteAndonRecord(@RequestParam("id") Long id) {
  75 + andonRecordService.deleteAndonRecord(id);
  76 + return success(true);
  77 + }
  78 +
  79 + @PutMapping("/handle")
  80 + @Operation(summary = "处置安灯呼叫记录")
  81 + @PreAuthorize("@ss.hasPermission('mes:pro-andon-record:update')")
  82 + public CommonResult<Boolean> handleAndonRecord(@Valid @RequestBody MesProAndonRecordHandleReqVO handleReqVO) {
  83 + andonRecordService.handleAndonRecord(handleReqVO);
  84 + return success(true);
  85 + }
  86 +
  87 + @GetMapping("/get")
  88 + @Operation(summary = "获得安灯呼叫记录")
  89 + @Parameter(name = "id", description = "编号", required = true, example = "1024")
  90 + @PreAuthorize("@ss.hasPermission('mes:pro-andon-record:query')")
  91 + public CommonResult<MesProAndonRecordRespVO> getAndonRecord(@RequestParam("id") Long id) {
  92 + MesProAndonRecordDO record = andonRecordService.getAndonRecord(id);
  93 + if (record == null) {
  94 + return success(null);
  95 + }
  96 + return success(buildRecordRespVOList(List.of(record)).get(0));
  97 + }
  98 +
  99 + @GetMapping("/page")
  100 + @Operation(summary = "获得安灯呼叫记录分页")
  101 + @PreAuthorize("@ss.hasPermission('mes:pro-andon-record:query')")
  102 + public CommonResult<PageResult<MesProAndonRecordRespVO>> getAndonRecordPage(@Valid MesProAndonRecordPageReqVO pageReqVO) {
  103 + PageResult<MesProAndonRecordDO> pageResult = andonRecordService.getAndonRecordPage(pageReqVO);
  104 + return success(new PageResult<>(buildRecordRespVOList(pageResult.getList()), pageResult.getTotal()));
  105 + }
  106 +
  107 + @GetMapping("/export-excel")
  108 + @Operation(summary = "导出安灯呼叫记录 Excel")
  109 + @PreAuthorize("@ss.hasPermission('mes:pro-andon-record:export')")
  110 + @ApiAccessLog(operateType = EXPORT)
  111 + public void exportAndonRecordExcel(@Valid MesProAndonRecordPageReqVO pageReqVO,
  112 + HttpServletResponse response) throws IOException {
  113 + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
  114 + List<MesProAndonRecordDO> list = andonRecordService.getAndonRecordPage(pageReqVO).getList();
  115 + List<MesProAndonRecordRespVO> voList = buildRecordRespVOList(list);
  116 + ExcelUtils.write(response, "安灯呼叫记录.xls", "数据", MesProAndonRecordRespVO.class, voList);
  117 + }
  118 +
  119 + // ==================== 拼接 VO ====================
  120 +
  121 + private List<MesProAndonRecordRespVO> buildRecordRespVOList(List<MesProAndonRecordDO> list) {
  122 + if (CollUtil.isEmpty(list)) {
  123 + return Collections.emptyList();
  124 + }
  125 + // 1. 批量获取关联数据
  126 + Map<Long, MesMdWorkstationDO> workstationMap = workstationService.getWorkstationMap(
  127 + convertSet(list, MesProAndonRecordDO::getWorkstationId));
  128 + Map<Long, MesProWorkOrderDO> workOrderMap = workOrderService.getWorkOrderMap(
  129 + convertSet(list, MesProAndonRecordDO::getWorkOrderId));
  130 + Map<Long, MesProProcessDO> processMap = processService.getProcessMap(
  131 + new ArrayList<>(convertSet(list, MesProAndonRecordDO::getProcessId)));
  132 + // 收集所有用户 ID(发起人 + 处置人)
  133 + // TODO @AI:可以使用 collutils 里,convert 去收集多个字段的 id;
  134 + Set<Long> userIds = new HashSet<>();
  135 + userIds.addAll(convertSet(list, MesProAndonRecordDO::getUserId));
  136 + userIds.addAll(convertSet(list, MesProAndonRecordDO::getHandlerUserId));
  137 + userIds.remove(null);
  138 + Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds);
  139 + // 2. 拼接 VO
  140 + return BeanUtils.toBean(list, MesProAndonRecordRespVO.class, vo -> {
  141 + MapUtils.findAndThen(workstationMap, vo.getWorkstationId(), ws ->
  142 + vo.setWorkstationCode(ws.getCode()).setWorkstationName(ws.getName()));
  143 + MapUtils.findAndThen(workOrderMap, vo.getWorkOrderId(),
  144 + wo -> vo.setWorkOrderCode(wo.getCode()));
  145 + MapUtils.findAndThen(processMap, vo.getProcessId(),
  146 + process -> vo.setProcessName(process.getName()));
  147 + MapUtils.findAndThen(userMap, vo.getUserId(),
  148 + user -> vo.setUserNickname(user.getNickname()));
  149 + MapUtils.findAndThen(userMap, vo.getHandlerUserId(),
  150 + user -> vo.setHandlerUserNickname(user.getNickname()));
  151 + });
  152 + }
  153 +
  154 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/andon/vo/config/MesProAndonConfigPageReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.config;
  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 MesProAndonConfigPageReqVO extends PageParam {
  14 +
  15 + @Schema(description = "呼叫原因", example = "设备故障")
  16 + private String reason;
  17 +
  18 + @Schema(description = "级别", example = "1")
  19 + private Integer level;
  20 +
  21 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/andon/vo/config/MesProAndonConfigRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.config;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +
  6 +import java.time.LocalDateTime;
  7 +
  8 +@Schema(description = "管理后台 - MES 安灯呼叫配置 Response VO")
  9 +@Data
  10 +public class MesProAndonConfigRespVO {
  11 +
  12 + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  13 + private Long id;
  14 +
  15 + @Schema(description = "呼叫原因", example = "设备故障")
  16 + private String reason;
  17 +
  18 + @Schema(description = "级别", example = "1")
  19 + private Integer level;
  20 +
  21 + @Schema(description = "处置人角色编号", example = "10")
  22 + private Long handlerRoleId;
  23 +
  24 + @Schema(description = "处置人编号", example = "100")
  25 + private Long handlerUserId;
  26 +
  27 + @Schema(description = "处置人昵称", example = "张三")
  28 + private String handlerUserNickname;
  29 +
  30 + @Schema(description = "备注", example = "备注")
  31 + private String remark;
  32 +
  33 + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
  34 + private LocalDateTime createTime;
  35 +
  36 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/andon/vo/config/MesProAndonConfigSaveReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.config;
  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 MesProAndonConfigSaveReqVO {
  11 +
  12 + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  13 + private Long id;
  14 +
  15 + @Schema(description = "呼叫原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "设备故障")
  16 + @NotEmpty(message = "呼叫原因不能为空")
  17 + private String reason;
  18 +
  19 + @Schema(description = "级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  20 + @NotNull(message = "级别不能为空")
  21 + private Integer level;
  22 +
  23 + @Schema(description = "处置人角色编号", example = "10")
  24 + private Long handlerRoleId;
  25 +
  26 + @Schema(description = "处置人编号", example = "100")
  27 + private Long handlerUserId;
  28 +
  29 + @Schema(description = "备注", example = "备注")
  30 + private String remark;
  31 +
  32 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/andon/vo/record/MesProAndonRecordHandleReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.record;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import jakarta.validation.constraints.NotNull;
  5 +import lombok.Data;
  6 +
  7 +import java.time.LocalDateTime;
  8 +
  9 +@Schema(description = "管理后台 - MES 安灯呼叫记录处置 Request VO")
  10 +@Data
  11 +public class MesProAndonRecordHandleReqVO {
  12 +
  13 + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  14 + @NotNull(message = "编号不能为空")
  15 + private Long id;
  16 +
  17 + @Schema(description = "处置时间", requiredMode = Schema.RequiredMode.REQUIRED)
  18 + @NotNull(message = "处置时间不能为空")
  19 + private LocalDateTime handleTime;
  20 +
  21 + @Schema(description = "处置人编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
  22 + @NotNull(message = "处置人不能为空")
  23 + private Long handlerUserId;
  24 +
  25 + @Schema(description = "备注", example = "已修复")
  26 + private String remark;
  27 +
  28 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/andon/vo/record/MesProAndonRecordPageReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.record;
  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 +import org.springframework.format.annotation.DateTimeFormat;
  9 +
  10 +import java.time.LocalDateTime;
  11 +
  12 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
  13 +
  14 +@Schema(description = "管理后台 - MES 安灯呼叫记录分页 Request VO")
  15 +@Data
  16 +@EqualsAndHashCode(callSuper = true)
  17 +@ToString(callSuper = true)
  18 +public class MesProAndonRecordPageReqVO extends PageParam {
  19 +
  20 + @Schema(description = "工作站编号", example = "100")
  21 + private Long workstationId;
  22 +
  23 + @Schema(description = "级别", example = "1")
  24 + private Integer level;
  25 +
  26 + @Schema(description = "处置状态", example = "0")
  27 + private Integer status;
  28 +
  29 + @Schema(description = "创建时间")
  30 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  31 + private LocalDateTime[] createTime;
  32 +
  33 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/andon/vo/record/MesProAndonRecordRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.record;
  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 MesProAndonRecordRespVO {
  17 +
  18 + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  19 + @ExcelProperty("编号")
  20 + private Long id;
  21 +
  22 + @Schema(description = "工作站编号", example = "100")
  23 + private Long workstationId;
  24 +
  25 + @Schema(description = "工作站编码", example = "WS-001")
  26 + @ExcelProperty("工作站编码")
  27 + private String workstationCode;
  28 +
  29 + @Schema(description = "工作站名称", example = "工作站 A")
  30 + @ExcelProperty("工作站名称")
  31 + private String workstationName;
  32 +
  33 + @Schema(description = "发起用户编号", example = "1")
  34 + private Long userId;
  35 +
  36 + @Schema(description = "发起人昵称", example = "张三")
  37 + @ExcelProperty("发起人")
  38 + private String userNickname;
  39 +
  40 + @Schema(description = "生产工单编号", example = "200")
  41 + private Long workOrderId;
  42 +
  43 + @Schema(description = "工单编码", example = "WO-001")
  44 + @ExcelProperty("工单编码")
  45 + private String workOrderCode;
  46 +
  47 + @Schema(description = "工序编号", example = "300")
  48 + private Long processId;
  49 +
  50 + @Schema(description = "工序名称", example = "组装工序")
  51 + @ExcelProperty("工序名称")
  52 + private String processName;
  53 +
  54 + @Schema(description = "呼叫原因", example = "设备故障")
  55 + @ExcelProperty("呼叫原因")
  56 + private String reason;
  57 +
  58 + @Schema(description = "级别", example = "1")
  59 + @ExcelProperty(value = "级别", converter = DictConvert.class)
  60 + @DictFormat(DictTypeConstants.MES_PRO_ANDON_LEVEL)
  61 + private Integer level;
  62 +
  63 + @Schema(description = "处置状态", example = "0")
  64 + @ExcelProperty(value = "处置状态", converter = DictConvert.class)
  65 + @DictFormat(DictTypeConstants.MES_PRO_ANDON_STATUS)
  66 + private Integer status;
  67 +
  68 + @Schema(description = "处置时间")
  69 + @ExcelProperty("处置时间")
  70 + private LocalDateTime handleTime;
  71 +
  72 + @Schema(description = "处置人编号", example = "100")
  73 + private Long handlerUserId;
  74 +
  75 + @Schema(description = "处置人昵称", example = "李四")
  76 + @ExcelProperty("处置人")
  77 + private String handlerUserNickname;
  78 +
  79 + @Schema(description = "备注", example = "备注")
  80 + @ExcelProperty("备注")
  81 + private String remark;
  82 +
  83 + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
  84 + @ExcelProperty("发起时间")
  85 + private LocalDateTime createTime;
  86 +
  87 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/andon/vo/record/MesProAndonRecordSaveReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.record;
  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 MesProAndonRecordSaveReqVO {
  11 +
  12 + @Schema(description = "工作站编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
  13 + @NotNull(message = "工作站不能为空")
  14 + private Long workstationId;
  15 +
  16 + @Schema(description = "发起用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  17 + @NotNull(message = "发起用户不能为空")
  18 + private Long userId;
  19 +
  20 + @Schema(description = "生产工单编号", example = "200")
  21 + private Long workOrderId;
  22 +
  23 + @Schema(description = "工序编号", example = "300")
  24 + private Long processId;
  25 +
  26 + @Schema(description = "呼叫原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "设备故障")
  27 + @NotEmpty(message = "呼叫原因不能为空")
  28 + private String reason;
  29 +
  30 + @Schema(description = "级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  31 + @NotNull(message = "级别不能为空")
  32 + private Integer level;
  33 +
  34 + @Schema(description = "备注", example = "备注")
  35 + private String remark;
  36 +
  37 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/pro/andon/MesProAndonConfigDO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.dataobject.pro.andon;
  2 +
  3 +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  4 +import cn.iocoder.yudao.module.mes.enums.pro.MesProAndonLevelEnum;
  5 +import com.baomidou.mybatisplus.annotation.KeySequence;
  6 +import com.baomidou.mybatisplus.annotation.TableId;
  7 +import com.baomidou.mybatisplus.annotation.TableName;
  8 +import lombok.*;
  9 +
  10 +/**
  11 + * MES 安灯呼叫配置 DO
  12 + *
  13 + * @author 芋道源码
  14 + */
  15 +@TableName("mes_pro_andon_config")
  16 +@KeySequence("mes_pro_andon_config_seq")
  17 +@Data
  18 +@EqualsAndHashCode(callSuper = true)
  19 +@ToString(callSuper = true)
  20 +@Builder
  21 +@NoArgsConstructor
  22 +@AllArgsConstructor
  23 +public class MesProAndonConfigDO extends BaseDO {
  24 +
  25 + /**
  26 + * 编号
  27 + */
  28 + @TableId
  29 + private Long id;
  30 + /**
  31 + * 呼叫原因
  32 + */
  33 + private String reason;
  34 + /**
  35 + * 级别
  36 + *
  37 + * 枚举 {@link MesProAndonLevelEnum}
  38 + */
  39 + private Integer level;
  40 + /**
  41 + * 处置人角色编号
  42 + *
  43 + * 关联 system_role#id
  44 + */
  45 + private Long handlerRoleId;
  46 + /**
  47 + * 处置人编号
  48 + *
  49 + * 关联 system_users#id
  50 + */
  51 + private Long handlerUserId;
  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/dataobject/pro/andon/MesProAndonRecordDO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.dal.dataobject.pro.andon;
  2 +
  3 +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  4 +import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkstationDO;
  5 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.process.MesProProcessDO;
  6 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO;
  7 +import cn.iocoder.yudao.module.mes.enums.pro.MesProAndonLevelEnum;
  8 +import cn.iocoder.yudao.module.mes.enums.pro.MesProAndonStatusEnum;
  9 +import com.baomidou.mybatisplus.annotation.KeySequence;
  10 +import com.baomidou.mybatisplus.annotation.TableId;
  11 +import com.baomidou.mybatisplus.annotation.TableName;
  12 +import lombok.*;
  13 +
  14 +import java.time.LocalDateTime;
  15 +
  16 +/**
  17 + * MES 安灯呼叫记录 DO
  18 + *
  19 + * @author 芋道源码
  20 + */
  21 +@TableName("mes_pro_andon_record")
  22 +@KeySequence("mes_pro_andon_record_seq")
  23 +@Data
  24 +@EqualsAndHashCode(callSuper = true)
  25 +@ToString(callSuper = true)
  26 +@Builder
  27 +@NoArgsConstructor
  28 +@AllArgsConstructor
  29 +public class MesProAndonRecordDO extends BaseDO {
  30 +
  31 + /**
  32 + * 编号
  33 + */
  34 + @TableId
  35 + private Long id;
  36 + /**
  37 + * 工作站编号
  38 + *
  39 + * 关联 {@link MesMdWorkstationDO#getId()}
  40 + */
  41 + private Long workstationId;
  42 + /**
  43 + * 发起用户编号
  44 + *
  45 + * 关联 system_users#id
  46 + */
  47 + private Long userId;
  48 + /**
  49 + * 生产工单编号
  50 + *
  51 + * 关联 {@link MesProWorkOrderDO#getId()}
  52 + */
  53 + private Long workOrderId;
  54 + /**
  55 + * 工序编号
  56 + *
  57 + * 关联 {@link MesProProcessDO#getId()}
  58 + */
  59 + private Long processId;
  60 + /**
  61 + * 呼叫原因(快照值,不随配置变更)
  62 + */
  63 + private String reason;
  64 + /**
  65 + * 级别(快照值)
  66 + *
  67 + * 枚举 {@link MesProAndonLevelEnum}
  68 + */
  69 + private Integer level;
  70 + /**
  71 + * 处置状态
  72 + *
  73 + * 枚举 {@link MesProAndonStatusEnum}
  74 + */
  75 + private Integer status;
  76 + /**
  77 + * 处置时间
  78 + */
  79 + private LocalDateTime handleTime;
  80 + /**
  81 + * 处置人编号
  82 + *
  83 + * 关联 system_users#id
  84 + */
  85 + private Long handlerUserId;
  86 + /**
  87 + * 备注
  88 + */
  89 + private String remark;
  90 + /**
  91 + * 预留字段1
  92 + */
  93 + private String attribute1;
  94 + /**
  95 + * 预留字段2
  96 + */
  97 + private String attribute2;
  98 + /**
  99 + * 预留字段3
  100 + */
  101 + private Integer attribute3;
  102 + /**
  103 + * 预留字段4
  104 + */
  105 + private Integer attribute4;
  106 +
  107 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/pro/MesProAndonLevelEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.enums.pro;
  2 +
  3 +import cn.iocoder.yudao.framework.common.core.ArrayValuable;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Getter;
  6 +
  7 +import java.util.Arrays;
  8 +
  9 +/**
  10 + * MES 安灯级别枚举
  11 + *
  12 + * @author 芋道源码
  13 + */
  14 +@Getter
  15 +@AllArgsConstructor
  16 +public enum MesProAndonLevelEnum implements ArrayValuable<Integer> {
  17 +
  18 + LEVEL1(1, "一级"),
  19 + LEVEL2(2, "二级"),
  20 + LEVEL3(3, "三级");
  21 +
  22 + public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesProAndonLevelEnum::getLevel).toArray(Integer[]::new);
  23 +
  24 + /**
  25 + * 级别值
  26 + */
  27 + private final Integer level;
  28 + /**
  29 + * 级别名
  30 + */
  31 + private final String name;
  32 +
  33 + @Override
  34 + public Integer[] array() {
  35 + return ARRAYS;
  36 + }
  37 +
  38 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/pro/MesProAndonStatusEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.enums.pro;
  2 +
  3 +import cn.iocoder.yudao.framework.common.core.ArrayValuable;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Getter;
  6 +
  7 +import java.util.Arrays;
  8 +
  9 +/**
  10 + * MES 安灯处置状态枚举
  11 + *
  12 + * @author 芋道源码
  13 + */
  14 +@Getter
  15 +@AllArgsConstructor
  16 +public enum MesProAndonStatusEnum implements ArrayValuable<Integer> {
  17 +
  18 + ACTIVE(0, "未处置"),
  19 + HANDLED(1, "已处置");
  20 +
  21 + public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesProAndonStatusEnum::getStatus).toArray(Integer[]::new);
  22 +
  23 + /**
  24 + * 状态值
  25 + */
  26 + private final Integer status;
  27 + /**
  28 + * 状态名
  29 + */
  30 + private final String name;
  31 +
  32 + @Override
  33 + public Integer[] array() {
  34 + return ARRAYS;
  35 + }
  36 +
  37 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/pro/MesProFeedbackStatusEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.enums.pro;
  2 +
  3 +import cn.iocoder.yudao.framework.common.core.ArrayValuable;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Getter;
  6 +
  7 +import java.util.Arrays;
  8 +
  9 +/**
  10 + * MES 生产报工状态枚举
  11 + *
  12 + * @author 芋道源码
  13 + */
  14 +@Getter
  15 +@AllArgsConstructor
  16 +public enum MesProFeedbackStatusEnum implements ArrayValuable<Integer> {
  17 +
  18 + PREPARE(0, "草稿"),
  19 + APPROVING(1, "审批中"),
  20 + UNCHECK(2, "待检验"),
  21 + FINISHED(3, "已完成"),
  22 + CANCELED(4, "已取消");
  23 +
  24 + public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesProFeedbackStatusEnum::getStatus).toArray(Integer[]::new);
  25 +
  26 + /**
  27 + * 状态值
  28 + */
  29 + private final Integer status;
  30 + /**
  31 + * 状态名
  32 + */
  33 + private final String name;
  34 +
  35 + @Override
  36 + public Integer[] array() {
  37 + return ARRAYS;
  38 + }
  39 +
  40 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/pro/MesProFeedbackTypeEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.enums.pro;
  2 +
  3 +import cn.iocoder.yudao.framework.common.core.ArrayValuable;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Getter;
  6 +
  7 +import java.util.Arrays;
  8 +
  9 +/**
  10 + * MES 生产报工类型枚举
  11 + *
  12 + * @author 芋道源码
  13 + */
  14 +@Getter
  15 +@AllArgsConstructor
  16 +public enum MesProFeedbackTypeEnum implements ArrayValuable<Integer> {
  17 +
  18 + SELF(1, "自行报工"),
  19 + UNIFIED(2, "统一报工");
  20 +
  21 + public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesProFeedbackTypeEnum::getType).toArray(Integer[]::new);
  22 +
  23 + /**
  24 + * 类型值
  25 + */
  26 + private final Integer type;
  27 + /**
  28 + * 类型名
  29 + */
  30 + private final String name;
  31 +
  32 + @Override
  33 + public Integer[] array() {
  34 + return ARRAYS;
  35 + }
  36 +
  37 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/andon/MesProAndonConfigService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.pro.andon;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.config.MesProAndonConfigPageReqVO;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.config.MesProAndonConfigSaveReqVO;
  6 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.andon.MesProAndonConfigDO;
  7 +import jakarta.validation.Valid;
  8 +
  9 +import java.util.List;
  10 +
  11 +/**
  12 + * MES 安灯呼叫配置 Service 接口
  13 + *
  14 + * @author 芋道源码
  15 + */
  16 +public interface MesProAndonConfigService {
  17 +
  18 + /**
  19 + * 创建安灯呼叫配置
  20 + *
  21 + * @param createReqVO 创建信息
  22 + * @return 编号
  23 + */
  24 + Long createAndonConfig(@Valid MesProAndonConfigSaveReqVO createReqVO);
  25 +
  26 + /**
  27 + * 更新安灯呼叫配置
  28 + *
  29 + * @param updateReqVO 更新信息
  30 + */
  31 + void updateAndonConfig(@Valid MesProAndonConfigSaveReqVO updateReqVO);
  32 +
  33 + /**
  34 + * 删除安灯呼叫配置
  35 + *
  36 + * @param id 编号
  37 + */
  38 + void deleteAndonConfig(Long id);
  39 +
  40 + /**
  41 + * 获得安灯呼叫配置
  42 + *
  43 + * @param id 编号
  44 + * @return 安灯呼叫配置
  45 + */
  46 + MesProAndonConfigDO getAndonConfig(Long id);
  47 +
  48 + /**
  49 + * 获得安灯呼叫配置分页
  50 + *
  51 + * @param pageReqVO 分页查询
  52 + * @return 安灯呼叫配置分页
  53 + */
  54 + PageResult<MesProAndonConfigDO> getAndonConfigPage(MesProAndonConfigPageReqVO pageReqVO);
  55 +
  56 + /**
  57 + * 获得安灯呼叫配置列表
  58 + *
  59 + * @return 安灯呼叫配置列表
  60 + */
  61 + List<MesProAndonConfigDO> getAndonConfigList();
  62 +
  63 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/andon/MesProAndonConfigServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.pro.andon;
  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.pro.andon.vo.config.MesProAndonConfigPageReqVO;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.config.MesProAndonConfigSaveReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.andon.MesProAndonConfigDO;
  8 +import cn.iocoder.yudao.module.mes.dal.mysql.pro.andon.MesProAndonConfigMapper;
  9 +import jakarta.annotation.Resource;
  10 +import org.springframework.stereotype.Service;
  11 +import org.springframework.validation.annotation.Validated;
  12 +
  13 +import java.util.List;
  14 +
  15 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  16 +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_ANDON_CONFIG_NOT_EXISTS;
  17 +
  18 +/**
  19 + * MES 安灯呼叫配置 Service 实现类
  20 + *
  21 + * @author 芋道源码
  22 + */
  23 +@Service
  24 +@Validated
  25 +public class MesProAndonConfigServiceImpl implements MesProAndonConfigService {
  26 +
  27 + @Resource
  28 + private MesProAndonConfigMapper andonConfigMapper;
  29 +
  30 + @Override
  31 + public Long createAndonConfig(MesProAndonConfigSaveReqVO createReqVO) {
  32 + // TODO @AI:userid、roleid 存在;
  33 +
  34 + // 插入
  35 + MesProAndonConfigDO config = BeanUtils.toBean(createReqVO, MesProAndonConfigDO.class);
  36 + andonConfigMapper.insert(config);
  37 + return config.getId();
  38 + }
  39 +
  40 + @Override
  41 + public void updateAndonConfig(MesProAndonConfigSaveReqVO updateReqVO) {
  42 + // 校验存在
  43 + validateAndonConfigExists(updateReqVO.getId());
  44 + // TODO @AI:userid、roleid 存在;
  45 +
  46 + // 更新
  47 + MesProAndonConfigDO updateObj = BeanUtils.toBean(updateReqVO, MesProAndonConfigDO.class);
  48 + andonConfigMapper.updateById(updateObj);
  49 + }
  50 +
  51 + @Override
  52 + public void deleteAndonConfig(Long id) {
  53 + // 校验存在
  54 + validateAndonConfigExists(id);
  55 +
  56 + // 删除
  57 + andonConfigMapper.deleteById(id);
  58 + }
  59 +
  60 + private void validateAndonConfigExists(Long id) {
  61 + if (andonConfigMapper.selectById(id) == null) {
  62 + throw exception(PRO_ANDON_CONFIG_NOT_EXISTS);
  63 + }
  64 + }
  65 +
  66 + @Override
  67 + public MesProAndonConfigDO getAndonConfig(Long id) {
  68 + return andonConfigMapper.selectById(id);
  69 + }
  70 +
  71 + @Override
  72 + public PageResult<MesProAndonConfigDO> getAndonConfigPage(MesProAndonConfigPageReqVO pageReqVO) {
  73 + return andonConfigMapper.selectPage(pageReqVO);
  74 + }
  75 +
  76 + @Override
  77 + public List<MesProAndonConfigDO> getAndonConfigList() {
  78 + return andonConfigMapper.selectList();
  79 + }
  80 +
  81 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/andon/MesProAndonRecordService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.pro.andon;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.record.MesProAndonRecordHandleReqVO;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.record.MesProAndonRecordPageReqVO;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.record.MesProAndonRecordSaveReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.andon.MesProAndonRecordDO;
  8 +import jakarta.validation.Valid;
  9 +
  10 +/**
  11 + * MES 安灯呼叫记录 Service 接口
  12 + *
  13 + * @author 芋道源码
  14 + */
  15 +public interface MesProAndonRecordService {
  16 +
  17 + /**
  18 + * 创建安灯呼叫记录
  19 + *
  20 + * @param createReqVO 创建信息
  21 + * @return 编号
  22 + */
  23 + Long createAndonRecord(@Valid MesProAndonRecordSaveReqVO createReqVO);
  24 +
  25 + /**
  26 + * 删除安灯呼叫记录
  27 + *
  28 + * @param id 编号
  29 + */
  30 + void deleteAndonRecord(Long id);
  31 +
  32 + /**
  33 + * 处置安灯呼叫记录
  34 + *
  35 + * @param handleReqVO 处置信息
  36 + */
  37 + void handleAndonRecord(@Valid MesProAndonRecordHandleReqVO handleReqVO);
  38 +
  39 + /**
  40 + * 获得安灯呼叫记录
  41 + *
  42 + * @param id 编号
  43 + * @return 安灯呼叫记录
  44 + */
  45 + MesProAndonRecordDO getAndonRecord(Long id);
  46 +
  47 + /**
  48 + * 获得安灯呼叫记录分页
  49 + *
  50 + * @param pageReqVO 分页查询
  51 + * @return 安灯呼叫记录分页
  52 + */
  53 + PageResult<MesProAndonRecordDO> getAndonRecordPage(MesProAndonRecordPageReqVO pageReqVO);
  54 +
  55 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/andon/MesProAndonRecordServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.pro.andon;
  2 +
  3 +import cn.hutool.core.util.ObjUtil;
  4 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  5 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.record.MesProAndonRecordHandleReqVO;
  7 +import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.record.MesProAndonRecordPageReqVO;
  8 +import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.record.MesProAndonRecordSaveReqVO;
  9 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.andon.MesProAndonRecordDO;
  10 +import cn.iocoder.yudao.module.mes.dal.mysql.pro.andon.MesProAndonRecordMapper;
  11 +import cn.iocoder.yudao.module.mes.enums.pro.MesProAndonStatusEnum;
  12 +import jakarta.annotation.Resource;
  13 +import org.springframework.stereotype.Service;
  14 +import org.springframework.validation.annotation.Validated;
  15 +
  16 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  17 +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_ANDON_RECORD_ALREADY_HANDLED;
  18 +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_ANDON_RECORD_NOT_EXISTS;
  19 +
  20 +/**
  21 + * MES 安灯呼叫记录 Service 实现类
  22 + *
  23 + * @author 芋道源码
  24 + */
  25 +@Service
  26 +@Validated
  27 +public class MesProAndonRecordServiceImpl implements MesProAndonRecordService {
  28 +
  29 + @Resource
  30 + private MesProAndonRecordMapper andonRecordMapper;
  31 +
  32 + @Override
  33 + public Long createAndonRecord(MesProAndonRecordSaveReqVO createReqVO) {
  34 + // TODO @AI:关联数据存在
  35 +
  36 + // 插入
  37 + MesProAndonRecordDO record = BeanUtils.toBean(createReqVO, MesProAndonRecordDO.class);
  38 + record.setStatus(MesProAndonStatusEnum.ACTIVE.getStatus());
  39 + andonRecordMapper.insert(record);
  40 + return record.getId();
  41 + }
  42 +
  43 + @Override
  44 + public void deleteAndonRecord(Long id) {
  45 + // 校验存在
  46 + validateAndonRecordExists(id);
  47 + // TODO @AI:已处理,不能删除。可以抽个方法,这样下面的 1.2 也可以服用;
  48 +
  49 + // 删除
  50 + andonRecordMapper.deleteById(id);
  51 + }
  52 +
  53 + @Override
  54 + public void handleAndonRecord(MesProAndonRecordHandleReqVO handleReqVO) {
  55 + // 1.1 校验存在
  56 + MesProAndonRecordDO record = validateAndonRecordExists(handleReqVO.getId());
  57 + // 1.2 校验未处置
  58 + if (ObjUtil.equal(record.getStatus(), MesProAndonStatusEnum.HANDLED.getStatus())) {
  59 + throw exception(PRO_ANDON_RECORD_ALREADY_HANDLED);
  60 + }
  61 +
  62 + // 2. 更新为已处置
  63 + andonRecordMapper.updateById(new MesProAndonRecordDO().setId(handleReqVO.getId())
  64 + .setStatus(MesProAndonStatusEnum.HANDLED.getStatus())
  65 + .setHandleTime(handleReqVO.getHandleTime())
  66 + .setHandlerUserId(handleReqVO.getHandlerUserId())
  67 + .setRemark(handleReqVO.getRemark()));
  68 + }
  69 +
  70 + private MesProAndonRecordDO validateAndonRecordExists(Long id) {
  71 + MesProAndonRecordDO record = andonRecordMapper.selectById(id);
  72 + if (record == null) {
  73 + throw exception(PRO_ANDON_RECORD_NOT_EXISTS);
  74 + }
  75 + return record;
  76 + }
  77 +
  78 + @Override
  79 + public MesProAndonRecordDO getAndonRecord(Long id) {
  80 + return andonRecordMapper.selectById(id);
  81 + }
  82 +
  83 + @Override
  84 + public PageResult<MesProAndonRecordDO> getAndonRecordPage(MesProAndonRecordPageReqVO pageReqVO) {
  85 + return andonRecordMapper.selectPage(pageReqVO);
  86 + }
  87 +
  88 +}