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 35b7012521..9c86caad8e 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 @@ -112,6 +112,8 @@ public interface ErrorCodeConstants { ErrorCode ZJ_SCHEMA_NOT_EXISTS = new ErrorCode(5_0092, "检验方案不存在"); ErrorCode ZJ_PRODUCT_NOT_EXISTS = new ErrorCode(5_0093, "检验参数不存在"); ErrorCode ZJ_PRODUCT_RECORD_NOT_EXISTS = new ErrorCode(5_0093, "检验参数不存在"); + ErrorCode ZJ_TASK_NOT_EXISTS = new ErrorCode(5_0094, "检验任务不存在"); + ErrorCode ZJ_TASK_RESULTS_NOT_EXISTS = new ErrorCode(5_0095, "检验任务-检验结果不存在"); diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjschema/ZjSchemaController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjschema/ZjSchemaController.java index 2d80b914aa..1ba1fda568 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjschema/ZjSchemaController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjschema/ZjSchemaController.java @@ -85,6 +85,14 @@ public class ZjSchemaController { return success(BeanUtils.toBean(pageResult, ZjSchemaRespVO.class)); } + @GetMapping("/list") + @Operation(summary = "获得检验方案列表") + @PreAuthorize("@ss.hasPermission('mes:zj-schema:query')") + public CommonResult> getZjSchemaList() { + List zjSchemaDOList = zjSchemaService.getZjSchemaList(); + return success(zjSchemaDOList); + } + @GetMapping("/export-excel") @Operation(summary = "导出检验方案 Excel") @PreAuthorize("@ss.hasPermission('mes:zj-schema:export')") diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtask/ZjTaskController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtask/ZjTaskController.java new file mode 100644 index 0000000000..e8cd2bfd7c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtask/ZjTaskController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.mes.controller.admin.zjtask; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.mes.controller.admin.zjtask.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.zjtask.ZjTaskDO; +import cn.iocoder.yudao.module.mes.service.zjtask.ZjTaskService; + +@Tag(name = "管理后台 - 质量管理-检验任务") +@RestController +@RequestMapping("/mes/zj-task") +@Validated +public class ZjTaskController { + + @Resource + private ZjTaskService zjTaskService; + + @PostMapping("/create") + @Operation(summary = "创建质量管理-检验任务") + @PreAuthorize("@ss.hasPermission('mes:zj-task:create')") + public CommonResult createZjTask(@Valid @RequestBody ZjTaskSaveReqVO createReqVO) { + return success(zjTaskService.createZjTask(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新质量管理-检验任务") + @PreAuthorize("@ss.hasPermission('mes:zj-task:update')") + public CommonResult updateZjTask(@Valid @RequestBody ZjTaskSaveReqVO updateReqVO) { + zjTaskService.updateZjTask(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除质量管理-检验任务") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:zj-task:delete')") + public CommonResult deleteZjTask(@RequestParam("id") Long id) { + zjTaskService.deleteZjTask(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得质量管理-检验任务") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:zj-task:query')") + public CommonResult getZjTask(@RequestParam("id") Long id) { + ZjTaskDO zjTask = zjTaskService.getZjTask(id); + return success(BeanUtils.toBean(zjTask, ZjTaskRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得质量管理-检验任务分页") + @PreAuthorize("@ss.hasPermission('mes:zj-task:query')") + public CommonResult> getZjTaskPage(@Valid ZjTaskPageReqVO pageReqVO) { + PageResult pageResult = zjTaskService.getZjTaskPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ZjTaskRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出质量管理-检验任务 Excel") + @PreAuthorize("@ss.hasPermission('mes:zj-task:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportZjTaskExcel(@Valid ZjTaskPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = zjTaskService.getZjTaskPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "质量管理-检验任务.xls", "数据", ZjTaskRespVO.class, + BeanUtils.toBean(list, ZjTaskRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtask/vo/ZjTaskPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtask/vo/ZjTaskPageReqVO.java new file mode 100644 index 0000000000..34dc3432f2 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtask/vo/ZjTaskPageReqVO.java @@ -0,0 +1,68 @@ +package cn.iocoder.yudao.module.mes.controller.admin.zjtask.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +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 ZjTaskPageReqVO extends PageParam { + + @Schema(description = "单号") + private String code; + + @Schema(description = "名称", example = "王五") + private String name; + + @Schema(description = "质检分类", example = "2") + private String type; + + @Schema(description = "检验方案id", example = "3630") + private Long schemaId; + + @Schema(description = "检验方案名称", example = "赵六") + private String schemaName; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "工单") + private String ticket; + + @Schema(description = "工序", example = "1") + private String orgType; + + @Schema(description = "负责人id", example = "6442") + private Long managerId; + + @Schema(description = "负责人名称", example = "张三") + private String managerName; + + @Schema(description = "执行人id", example = "10505") + private Long executorId; + + @Schema(description = "执行人名称", example = "王五") + private String executorName; + + @Schema(description = "状态", example = "1") + private Integer status; + + @Schema(description = "结果") + private String result; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "执行时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] executeTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtask/vo/ZjTaskRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtask/vo/ZjTaskRespVO.java new file mode 100644 index 0000000000..f672482951 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtask/vo/ZjTaskRespVO.java @@ -0,0 +1,86 @@ +package cn.iocoder.yudao.module.mes.controller.admin.zjtask.vo; + +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 质量管理-检验任务 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ZjTaskRespVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31746") + @ExcelProperty("ID") + private Long id; + + @Schema(description = "单号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("单号") + private String code; + + @Schema(description = "名称", example = "王五") +// @ExcelProperty("名称") + private String name; + + @Schema(description = "质检分类", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("质检分类") + private String type; + + @Schema(description = "检验方案id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3630") + @ExcelProperty("检验方案id") + private Long schemaId; + + @Schema(description = "检验方案名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @ExcelProperty("检验方案名称") + private String schemaName; + + @Schema(description = "备注", example = "你说的对") +// @ExcelProperty("备注") + private String remark; + + @Schema(description = "工单", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("工单") + private String ticket; + + @Schema(description = "工序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("工序") + private String orgType; + + @Schema(description = "负责人id", example = "6442") + @ExcelProperty("负责人id") + private Long managerId; + + @Schema(description = "负责人名称", example = "张三") + @ExcelProperty("负责人名称") + private String managerName; + + @Schema(description = "执行人id", example = "10505") + @ExcelProperty("执行人id") + private Long executorId; + + @Schema(description = "执行人名称", example = "王五") + @ExcelProperty("执行人名称") + private String executorName; + + @Schema(description = "状态", example = "1") + @ExcelProperty("状态(0=未作业,1=已作业") + private Integer status; + + @Schema(description = "结果") + @ExcelProperty("结果(0=待完成,1=通过,2=不通过)") + private String result; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + @ColumnWidth(20) + private LocalDateTime createTime; + + @Schema(description = "执行时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("执行时间") + @ColumnWidth(20) + private LocalDateTime executeTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtask/vo/ZjTaskSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtask/vo/ZjTaskSaveReqVO.java new file mode 100644 index 0000000000..c30d49b9b9 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtask/vo/ZjTaskSaveReqVO.java @@ -0,0 +1,68 @@ +package cn.iocoder.yudao.module.mes.controller.admin.zjtask.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import java.time.LocalDateTime; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 质量管理-检验任务新增/修改 Request VO") +@Data +public class ZjTaskSaveReqVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31746") + private Long id; + + @Schema(description = "单号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "单号不能为空") + private String code; + + @Schema(description = "名称", example = "王五") + private String name; + + @Schema(description = "质检分类", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotEmpty(message = "质检分类不能为空") + private String type; + + @Schema(description = "检验方案id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3630") + @NotNull(message = "检验方案id不能为空") + private Long schemaId; + + @Schema(description = "检验方案名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @NotEmpty(message = "检验方案名称不能为空") + private String schemaName; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "工单", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "工单不能为空") + private String ticket; + + @Schema(description = "工序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotEmpty(message = "工序不能为空") + private String orgType; + + @Schema(description = "负责人id", example = "6442") + private Long managerId; + + @Schema(description = "负责人名称", example = "张三") + private String managerName; + + @Schema(description = "执行人id", example = "10505") + private Long executorId; + + @Schema(description = "执行人名称", example = "王五") + private String executorName; + + @Schema(description = "状态", example = "1") + private Integer status; + + @Schema(description = "结果") + private String result; + + @Schema(description = "执行时间") + private LocalDateTime executeTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/ZjTaskResultsController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/ZjTaskResultsController.java new file mode 100644 index 0000000000..c9148e8664 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/ZjTaskResultsController.java @@ -0,0 +1,139 @@ +package cn.iocoder.yudao.module.mes.controller.admin.zjtaskresults; + +import cn.iocoder.yudao.module.mes.controller.admin.zjtask.vo.ZjTaskSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.zjtask.ZjTaskDO; +import cn.iocoder.yudao.module.mes.service.zjtask.ZjTaskService; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; +import java.util.stream.Collectors; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.mes.controller.admin.zjtaskresults.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.zjtaskresults.ZjTaskResultsDO; +import cn.iocoder.yudao.module.mes.service.zjtaskresults.ZjTaskResultsService; + +@Tag(name = "管理后台 - 检验任务-检验结果") +@RestController +@RequestMapping("/mes/zj-task-results") +@Validated +public class ZjTaskResultsController { + + @Resource + private ZjTaskResultsService zjTaskResultsService; + @Resource + private ZjTaskService zjTaskService; + + @PostMapping("/create") + @Operation(summary = "创建检验任务-检验结果") + @PreAuthorize("@ss.hasPermission('mes:zj-task-results:create')") + public CommonResult createZjTaskResults(@Valid @RequestBody ZjTaskResultsSaveReqVO createReqVO) { + return success(zjTaskResultsService.createZjTaskResults(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新检验任务-检验结果") + @PreAuthorize("@ss.hasPermission('mes:zj-task-results:update')") + public CommonResult updateZjTaskResults(@Valid @RequestBody ZjTaskResultsSaveReqVO updateReqVO) { + zjTaskResultsService.updateZjTaskResults(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除检验任务-检验结果") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:zj-task-results:delete')") + public CommonResult deleteZjTaskResults(@RequestParam("id") Long id) { + zjTaskResultsService.deleteZjTaskResults(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得检验任务-检验结果") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:zj-task-results:query')") + public CommonResult getZjTaskResults(@RequestParam("id") Long id) { + ZjTaskResultsDO zjTaskResults = zjTaskResultsService.getZjTaskResults(id); + return success(BeanUtils.toBean(zjTaskResults, ZjTaskResultsRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得检验任务-检验结果分页") + @PreAuthorize("@ss.hasPermission('mes:zj-task-results:query')") + public CommonResult> getZjTaskResultsPage(@Valid ZjTaskResultsPageReqVO pageReqVO) { + PageResult pageResult = zjTaskResultsService.getZjTaskResultsPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ZjTaskResultsRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出检验任务-检验结果 Excel") + @PreAuthorize("@ss.hasPermission('mes:zj-task-results:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportZjTaskResultsExcel(@Valid ZjTaskResultsPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = zjTaskResultsService.getZjTaskResultsPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "检验任务-检验结果.xls", "数据", ZjTaskResultsRespVO.class, + BeanUtils.toBean(list, ZjTaskResultsRespVO.class)); + } + + + @PostMapping("/batch-update") + @Operation(summary = "批量更新检验结果,并联动更新检验任务结果") + public CommonResult batchUpdateZjTaskResults(@Valid @RequestBody ZjTaskResultsBatchUpdateReqVO reqVO) { + // 1. 批量更新检验结果(核心逻辑) + zjTaskResultsService.batchUpdateZjTaskResults(reqVO.getResults()); + + // 2. 联动更新检验任务的result字段 + // 2.1 提取taskId(所有元素taskId相同,取第一个即可) + Long taskId = reqVO.getResults().get(0).getTaskId(); + // 2.2 统计当前批次的zjResult状态,计算任务result + String taskResult = calculateTaskResult(reqVO.getResults()); + // 2.3 调用专用方法仅更新result字段(关键修复) + zjTaskService.updateZjTaskResultOnly(taskId, taskResult); + + return success(true); + } + + /** + * 根据检验结果列表计算检验任务的result值 + * 规则:存在zjResult=0 → result=0;所有zjResult=1 → result=1;其余→result=2 + */ + private String calculateTaskResult(List resultItems) { + // 提取所有zjResult + List zjResults = resultItems.stream() + .map(ZjTaskResultsBatchUpdateReqVO.ResultItem::getZjResult) + .filter(Objects::nonNull) // 空值过滤 + .collect(Collectors.toList()); + + // 规则判断 + if (zjResults.contains(0)) { + return "0"; // 存在待检测,任务结果为0 + } else if (zjResults.stream().allMatch(r -> r == 1)) { + return "1"; // 全部通过,任务结果为1 + } else { + return "2"; // 其余情况(存在不通过),任务结果为2 + } + } +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/vo/ZjTaskResultsBatchUpdateReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/vo/ZjTaskResultsBatchUpdateReqVO.java new file mode 100644 index 0000000000..425d1dc44e --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/vo/ZjTaskResultsBatchUpdateReqVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.mes.controller.admin.zjtaskresults.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; +import java.util.List; + +@Schema(description = "管理后台 - 检验任务-检验结果批量更新 Request VO") +@Data +public class ZjTaskResultsBatchUpdateReqVO { + + @Schema(description = "批量更新的检验结果列表", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "更新列表不能为空") + @Valid + private List results; + + /** + * 批量更新子项 + */ + @Data + public static class ResultItem { + @Schema(description = "检验结果ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "8755") + private Long id; + + @Schema(description = "检验结果 0-待检测 1-检测通过 2-检测不通过", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer zjResult; + + @Schema(description = "图片路径", example = "/upload/123.jpg") + private String images; + + @Schema(description = "任务ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "5389") + private Long taskId; + } +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/vo/ZjTaskResultsPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/vo/ZjTaskResultsPageReqVO.java new file mode 100644 index 0000000000..03c7ca8b3c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/vo/ZjTaskResultsPageReqVO.java @@ -0,0 +1,62 @@ +package cn.iocoder.yudao.module.mes.controller.admin.zjtaskresults.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +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 ZjTaskResultsPageReqVO extends PageParam { + + @Schema(description = "检验类型", example = "2") + private Long zjType; + + @Schema(description = "名称", example = "张三") + private String name; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "作业方式") + private String tool; + + @Schema(description = "标准值") + private Double standardVal; + + @Schema(description = "单位") + private String unit; + + @Schema(description = "上限值") + private Double upperVal; + + @Schema(description = "下限值") + private Double lowerVal; + + @Schema(description = "检验结果 0-待检测 1-检测通过 2-检测不通过") + private Integer zjResult; + + @Schema(description = "图片路径") + private String images; + + @Schema(description = "检验时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] zjTime; + + @Schema(description = "任务id", example = "5389") + private Long taskId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "设备id", example = "23960") + private Long deviceId; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/vo/ZjTaskResultsRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/vo/ZjTaskResultsRespVO.java new file mode 100644 index 0000000000..b36dfd23fc --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/vo/ZjTaskResultsRespVO.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.mes.controller.admin.zjtaskresults.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 检验任务-检验结果 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ZjTaskResultsRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "8755") + @ExcelProperty("id") + private Long id; + + @Schema(description = "检验类型", example = "2") + @ExcelProperty("检验类型") + private Long zjType; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @ExcelProperty("名称") + private String name; + + @Schema(description = "备注", example = "你说的对") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "作业方式") + @ExcelProperty("作业方式") + private String tool; + + @Schema(description = "标准值") + @ExcelProperty("标准值") + private Double standardVal; + + @Schema(description = "单位") + @ExcelProperty("单位") + private String unit; + + @Schema(description = "上限值") + @ExcelProperty("上限值") + private Double upperVal; + + @Schema(description = "下限值") + @ExcelProperty("下限值") + private Double lowerVal; + + @Schema(description = "检验结果 0-待检测 1-检测通过 2-检测不通过") + @ExcelProperty("检验结果 0-待检测 1-检测通过 2-检测不通过") + private Integer zjResult; + + @Schema(description = "图片路径") + @ExcelProperty("图片路径") + private String images; + + @Schema(description = "检验时间") + @ExcelProperty("检验时间") + private LocalDateTime zjTime; + + @Schema(description = "任务id", example = "5389") + @ExcelProperty("任务id") + private Long taskId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "设备id", example = "23960") + @ExcelProperty("设备id") + private Long deviceId; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/vo/ZjTaskResultsSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/vo/ZjTaskResultsSaveReqVO.java new file mode 100644 index 0000000000..89a480544f --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/vo/ZjTaskResultsSaveReqVO.java @@ -0,0 +1,57 @@ +package cn.iocoder.yudao.module.mes.controller.admin.zjtaskresults.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 检验任务-检验结果新增/修改 Request VO") +@Data +public class ZjTaskResultsSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "8755") + private Long id; + + @Schema(description = "检验类型", example = "2") + private Long zjType; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @NotEmpty(message = "名称不能为空") + private String name; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "作业方式") + private String tool; + + @Schema(description = "标准值") + private Double standardVal; + + @Schema(description = "单位") + private String unit; + + @Schema(description = "上限值") + private Double upperVal; + + @Schema(description = "下限值") + private Double lowerVal; + + @Schema(description = "检验结果 0-待检测 1-检测通过 2-检测不通过") + private Integer zjResult; + + @Schema(description = "图片路径") + private String images; + + @Schema(description = "检验时间") + private LocalDateTime zjTime; + + @Schema(description = "任务id", example = "5389") + private Long taskId; + + @Schema(description = "设备id", example = "23960") + private Long deviceId; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/zjtask/ZjTaskDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/zjtask/ZjTaskDO.java new file mode 100644 index 0000000000..48f8f29598 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/zjtask/ZjTaskDO.java @@ -0,0 +1,91 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.zjtask; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 质量管理-检验任务 DO + * + * @author 必硕科技 + */ +@TableName("mes_zj_task") +@KeySequence("mes_zj_task_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ZjTaskDO extends BaseDO { + + /** + * ID + */ + @TableId + private Long id; + /** + * 单号 + */ + private String code; + /** + * 名称 + */ + private String name; + /** + * 质检分类 + */ + private String type; + /** + * 检验方案id + */ + private Long schemaId; + /** + * 检验方案名称 + */ + private String schemaName; + /** + * 备注 + */ + private String remark; + /** + * 工单 + */ + private String ticket; + /** + * 工序 + */ + private String orgType; + /** + * 负责人id + */ + private Long managerId; + /** + * 负责人名称 + */ + private String managerName; + /** + * 执行人id + */ + private Long executorId; + /** + * 执行人名称 + */ + private String executorName; + /** + * 状态 + */ + private Integer status; + /** + * 结果 + */ + private String result; + /** + * 执行时间 + */ + private LocalDateTime executeTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/zjtaskresults/ZjTaskResultsDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/zjtaskresults/ZjTaskResultsDO.java new file mode 100644 index 0000000000..4972dab249 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/zjtaskresults/ZjTaskResultsDO.java @@ -0,0 +1,84 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.zjtaskresults; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 检验任务-检验结果 DO + * + * @author 必硕科技 + */ +@TableName("mes_zj_task_results") +@KeySequence("mes_zj_task_results_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ZjTaskResultsDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 检验类型 + */ + private Long zjType; + /** + * 名称 + */ + private String name; + /** + * 备注 + */ + private String remark; + /** + * 作业方式 + */ + private String tool; + /** + * 标准值 + */ + private Double standardVal; + /** + * 单位 + */ + private String unit; + /** + * 上限值 + */ + private Double upperVal; + /** + * 下限值 + */ + private Double lowerVal; + /** + * 检验结果 0-待检测 1-检测通过 2-检测不通过 + */ + private Integer zjResult; + /** + * 图片路径 + */ + private String images; + /** + * 检验时间 + */ + private LocalDateTime zjTime; + /** + * 任务id + */ + private Long taskId; + /** + * 设备id + */ + private Long deviceId; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/zjschema/ZjSchemaMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/zjschema/ZjSchemaMapper.java index 7d2c37398d..60695e8877 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/zjschema/ZjSchemaMapper.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/zjschema/ZjSchemaMapper.java @@ -29,4 +29,15 @@ public interface ZjSchemaMapper extends BaseMapperX { .orderByDesc(ZjSchemaDO::getId)); } + default ZjSchemaDO selectByName(String name) { + return selectOne(new LambdaQueryWrapperX() + .eq(ZjSchemaDO::getName, name)); + } + + default List selectByType(String type) { + return selectList(new LambdaQueryWrapperX() + .eq(ZjSchemaDO::getType, type) + .orderByAsc(ZjSchemaDO::getId)); + } + } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/zjtask/ZjTaskMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/zjtask/ZjTaskMapper.java new file mode 100644 index 0000000000..b5221f840e --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/zjtask/ZjTaskMapper.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.zjtask; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.mes.dal.dataobject.zjtask.ZjTaskDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.zjtask.vo.*; + +/** + * 质量管理-检验任务 Mapper + * + * @author 必硕科技 + */ +@Mapper +public interface ZjTaskMapper extends BaseMapperX { + + default PageResult selectPage(ZjTaskPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(ZjTaskDO::getCode, reqVO.getCode()) + .likeIfPresent(ZjTaskDO::getName, reqVO.getName()) + .eqIfPresent(ZjTaskDO::getType, reqVO.getType()) + .eqIfPresent(ZjTaskDO::getSchemaId, reqVO.getSchemaId()) + .likeIfPresent(ZjTaskDO::getSchemaName, reqVO.getSchemaName()) + .eqIfPresent(ZjTaskDO::getRemark, reqVO.getRemark()) + .eqIfPresent(ZjTaskDO::getTicket, reqVO.getTicket()) + .eqIfPresent(ZjTaskDO::getOrgType, reqVO.getOrgType()) + .eqIfPresent(ZjTaskDO::getManagerId, reqVO.getManagerId()) + .likeIfPresent(ZjTaskDO::getManagerName, reqVO.getManagerName()) + .eqIfPresent(ZjTaskDO::getExecutorId, reqVO.getExecutorId()) + .likeIfPresent(ZjTaskDO::getExecutorName, reqVO.getExecutorName()) + .eqIfPresent(ZjTaskDO::getStatus, reqVO.getStatus()) + .eqIfPresent(ZjTaskDO::getResult, reqVO.getResult()) + .betweenIfPresent(ZjTaskDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(ZjTaskDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/zjtaskresults/ZjTaskResultsMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/zjtaskresults/ZjTaskResultsMapper.java new file mode 100644 index 0000000000..50d237caee --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/zjtaskresults/ZjTaskResultsMapper.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.zjtaskresults; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.mes.dal.dataobject.zjtaskresults.ZjTaskResultsDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.zjtaskresults.vo.*; + +/** + * 检验任务-检验结果 Mapper + * + * @author 必硕科技 + */ +@Mapper +public interface ZjTaskResultsMapper extends BaseMapperX { + + default PageResult selectPage(ZjTaskResultsPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(ZjTaskResultsDO::getZjType, reqVO.getZjType()) + .likeIfPresent(ZjTaskResultsDO::getName, reqVO.getName()) + .eqIfPresent(ZjTaskResultsDO::getRemark, reqVO.getRemark()) + .eqIfPresent(ZjTaskResultsDO::getTool, reqVO.getTool()) + .eqIfPresent(ZjTaskResultsDO::getStandardVal, reqVO.getStandardVal()) + .eqIfPresent(ZjTaskResultsDO::getUnit, reqVO.getUnit()) + .eqIfPresent(ZjTaskResultsDO::getUpperVal, reqVO.getUpperVal()) + .eqIfPresent(ZjTaskResultsDO::getLowerVal, reqVO.getLowerVal()) + .eqIfPresent(ZjTaskResultsDO::getZjResult, reqVO.getZjResult()) + .eqIfPresent(ZjTaskResultsDO::getImages, reqVO.getImages()) + .betweenIfPresent(ZjTaskResultsDO::getZjTime, reqVO.getZjTime()) + .eqIfPresent(ZjTaskResultsDO::getTaskId, reqVO.getTaskId()) + .betweenIfPresent(ZjTaskResultsDO::getCreateTime, reqVO.getCreateTime()) + .eqIfPresent(ZjTaskResultsDO::getDeviceId, reqVO.getDeviceId()) + .orderByDesc(ZjTaskResultsDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjschema/ZjSchemaService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjschema/ZjSchemaService.java index 753e7b06ac..161625c511 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjschema/ZjSchemaService.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjschema/ZjSchemaService.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.mes.service.zjschema; import java.util.*; import javax.validation.*; import cn.iocoder.yudao.module.mes.controller.admin.zjschema.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.zjitem.ZjItemDO; import cn.iocoder.yudao.module.mes.dal.dataobject.zjschema.ZjSchemaDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; @@ -52,4 +53,6 @@ public interface ZjSchemaService { */ PageResult getZjSchemaPage(ZjSchemaPageReqVO pageReqVO); + List getZjSchemaList(); + } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjschema/ZjSchemaServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjschema/ZjSchemaServiceImpl.java index 768620a050..9910c8165b 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjschema/ZjSchemaServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjschema/ZjSchemaServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.mes.service.zjschema; +import cn.iocoder.yudao.module.mes.dal.dataobject.zjitem.ZjItemDO; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -71,4 +72,9 @@ public class ZjSchemaServiceImpl implements ZjSchemaService { return zjSchemaMapper.selectPage(pageReqVO); } + @Override + public List getZjSchemaList() { + return zjSchemaMapper.selectList(); + } + } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtask/ZjTaskService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtask/ZjTaskService.java new file mode 100644 index 0000000000..67ff3c116a --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtask/ZjTaskService.java @@ -0,0 +1,62 @@ +package cn.iocoder.yudao.module.mes.service.zjtask; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.mes.controller.admin.zjtask.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.zjtask.ZjTaskDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 质量管理-检验任务 Service 接口 + * + * @author 必硕科技 + */ +public interface ZjTaskService { + + /** + * 创建质量管理-检验任务 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createZjTask(@Valid ZjTaskSaveReqVO createReqVO); + + /** + * 更新质量管理-检验任务 + * + * @param updateReqVO 更新信息 + */ + void updateZjTask(@Valid ZjTaskSaveReqVO updateReqVO); + + /** + * 删除质量管理-检验任务 + * + * @param id 编号 + */ + void deleteZjTask(Long id); + + /** + * 获得质量管理-检验任务 + * + * @param id 编号 + * @return 质量管理-检验任务 + */ + ZjTaskDO getZjTask(Long id); + + /** + * 获得质量管理-检验任务分页 + * + * @param pageReqVO 分页查询 + * @return 质量管理-检验任务分页 + */ + PageResult getZjTaskPage(ZjTaskPageReqVO pageReqVO); + + /** + * 仅更新检验任务的result字段(批量更新结果时专用) + * @param id 任务ID + * @param result 任务结果(0/1/2) + */ + void updateZjTaskResultOnly(Long id, String result); + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtask/ZjTaskServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtask/ZjTaskServiceImpl.java new file mode 100644 index 0000000000..0d5c058e92 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtask/ZjTaskServiceImpl.java @@ -0,0 +1,164 @@ +package cn.iocoder.yudao.module.mes.service.zjtask; + +import cn.iocoder.yudao.framework.common.exception.ServiceException; +import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; +import cn.iocoder.yudao.module.mes.dal.dataobject.zjitem.ZjItemDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.zjschema.ZjSchemaDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.zjtaskresults.ZjTaskResultsDO; +import cn.iocoder.yudao.module.mes.dal.mysql.zjitem.ZjItemMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.zjschema.ZjSchemaMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.zjtaskresults.ZjTaskResultsMapper; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; + +import org.springframework.util.StringUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.*; +import cn.iocoder.yudao.module.mes.controller.admin.zjtask.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.zjtask.ZjTaskDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.mes.dal.mysql.zjtask.ZjTaskMapper; + +import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.UNAUTHORIZED; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +/** + * 质量管理-检验任务 Service 实现类 + * + * @author 必硕科技 + */ +@Service +@Validated +public class ZjTaskServiceImpl implements ZjTaskService { + + @Resource + private ZjTaskMapper zjTaskMapper; + + @Resource + private ZjSchemaMapper zjSchemaMapper; + + @Resource + private ZjTaskResultsMapper zjTaskResultsMapper; // 检验结果Mapper + + @Resource + private ZjItemMapper zjItemMapper; // 检验项目Mapper(用于关联查询方案下的项目) + + @Override + public Long createZjTask(ZjTaskSaveReqVO createReqVO) { + // 插入 + ZjTaskDO zjTask = BeanUtils.toBean(createReqVO, ZjTaskDO.class); + zjTaskMapper.insert(zjTask); + + + // 2. 新增逻辑:根据检验方案关联的项目,创建对应的ZjTaskResult记录 + // 2.1 查询检验方案(获取关联的检验项目) + ZjSchemaDO schemaDO = zjSchemaMapper.selectById(createReqVO.getSchemaId()); + if (schemaDO != null && StringUtils.hasText(schemaDO.getItem())) { + // 2.2 拆分方案关联的项目ID(假设item字段存储的是逗号分隔的项目ID,如"1,2,3") + String[] itemIds = schemaDO.getItem().split(","); + for (String itemIdStr : itemIds) { + if (!StringUtils.hasText(itemIdStr)) { + continue; + } + Long itemId = Long.valueOf(itemIdStr); + // 2.3 查询检验项目详情 + ZjItemDO itemDO = zjItemMapper.selectById(itemId); + if (itemDO == null) { + continue; // 项目不存在则跳过 + } + + // 2.4 构建检验结果DO(关联当前新建的任务ID) + ZjTaskResultsDO resultDO = ZjTaskResultsDO.builder() + .zjType(itemDO.getZjType()) // 复用检验项目的类型 + .name(itemDO.getName()) // 复用检验项目的名称 + .remark(itemDO.getRemark()) // 复用检验项目的备注 + .tool(itemDO.getTool()) // 复用检验项目的作业方式 + .standardVal(itemDO.getStandardVal()) // 复用检验项目的标准值 + .unit(itemDO.getUnit()) // 复用检验项目的单位 + .upperVal(itemDO.getUpperVal()) // 复用检验项目的上限值 + .lowerVal(itemDO.getLowerVal()) // 复用检验项目的下限值 + .zjResult(0) // 初始状态:待检测(0-待检测 1-通过 2-不通过) + .taskId(zjTask.getId()) // 关联当前新建的检验任务ID + // 设备ID等无默认值的字段可留空,后续更新 + .build(); + // 2.5 插入检验结果记录 + zjTaskResultsMapper.insert(resultDO); + } + } + // 返回 + return zjTask.getId(); + } + + @Override + public void updateZjTask(ZjTaskSaveReqVO updateReqVO) { + // 校验存在 + validateZjTaskExists(updateReqVO.getId()); + // 更新 + ZjTaskDO updateObj = BeanUtils.toBean(updateReqVO, ZjTaskDO.class); + zjTaskMapper.updateById(updateObj); + } + + @Override + public void deleteZjTask(Long id) { + // 校验存在 + validateZjTaskExists(id); + // 删除 + zjTaskMapper.deleteById(id); + } + + private void validateZjTaskExists(Long id) { + if (zjTaskMapper.selectById(id) == null) { + throw exception(ZJ_TASK_NOT_EXISTS); + } + } + + @Override + public ZjTaskDO getZjTask(Long id) { + return zjTaskMapper.selectById(id); + } + + @Override + public PageResult getZjTaskPage(ZjTaskPageReqVO pageReqVO) { + return zjTaskMapper.selectPage(pageReqVO); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateZjTaskResultOnly(Long id, String result) { + // 1. 校验任务存在 + ZjTaskDO zjTask = zjTaskMapper.selectById(id); + if (zjTask == null) { + throw exception(ZJ_TASK_NOT_EXISTS); + } + + // 2. 获取当前登录用户信息(适配实际的LoginUser类结构) + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + if (loginUser == null) { + throw exception(UNAUTHORIZED); // 抛出未登录异常,根据业务调整 + } + Long currentUserId = loginUser.getId(); // 当前用户ID(直接从id字段获取) + // 从info集合中获取用户名(nickname键),兼容空值 + String currentUserName = loginUser.getInfo() != null ? loginUser.getInfo().get(LoginUser.INFO_KEY_NICKNAME) : null; + + // 3. 构建更新对象,仅更新指定字段 + ZjTaskDO updateDO = new ZjTaskDO(); + updateDO.setId(id); + updateDO.setResult(result); // 检验结果 + updateDO.setStatus(1); // 状态置为1(int型) + updateDO.setExecuteTime(LocalDateTime.now()); // 执行时间为当前时间(推荐用LocalDateTime,适配框架时间类型) + updateDO.setExecutorId(currentUserId); // 执行人ID(当前用户) + updateDO.setExecutorName(currentUserName); // 执行人名称(当前用户昵称) + + // 4. 执行更新 + zjTaskMapper.updateById(updateDO); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtaskresults/ZjTaskResultsService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtaskresults/ZjTaskResultsService.java new file mode 100644 index 0000000000..21b8d724e6 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtaskresults/ZjTaskResultsService.java @@ -0,0 +1,60 @@ +package cn.iocoder.yudao.module.mes.service.zjtaskresults; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.mes.controller.admin.zjtaskresults.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.zjtaskresults.ZjTaskResultsDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 检验任务-检验结果 Service 接口 + * + * @author 必硕科技 + */ +public interface ZjTaskResultsService { + + /** + * 创建检验任务-检验结果 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createZjTaskResults(@Valid ZjTaskResultsSaveReqVO createReqVO); + + /** + * 更新检验任务-检验结果 + * + * @param updateReqVO 更新信息 + */ + void updateZjTaskResults(@Valid ZjTaskResultsSaveReqVO updateReqVO); + + /** + * 删除检验任务-检验结果 + * + * @param id 编号 + */ + void deleteZjTaskResults(Long id); + + /** + * 获得检验任务-检验结果 + * + * @param id 编号 + * @return 检验任务-检验结果 + */ + ZjTaskResultsDO getZjTaskResults(Long id); + + /** + * 获得检验任务-检验结果分页 + * + * @param pageReqVO 分页查询 + * @return 检验任务-检验结果分页 + */ + PageResult getZjTaskResultsPage(ZjTaskResultsPageReqVO pageReqVO); + + /** + * 批量更新检验结果(仅更新zjResult和images字段) + */ + void batchUpdateZjTaskResults(List resultItems); + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtaskresults/ZjTaskResultsServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtaskresults/ZjTaskResultsServiceImpl.java new file mode 100644 index 0000000000..d54cafcc5d --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtaskresults/ZjTaskResultsServiceImpl.java @@ -0,0 +1,88 @@ +package cn.iocoder.yudao.module.mes.service.zjtaskresults; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.mes.controller.admin.zjtaskresults.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.zjtaskresults.ZjTaskResultsDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.mes.dal.mysql.zjtaskresults.ZjTaskResultsMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +/** + * 检验任务-检验结果 Service 实现类 + * + * @author 必硕科技 + */ +@Service +@Validated +public class ZjTaskResultsServiceImpl implements ZjTaskResultsService { + + @Resource + private ZjTaskResultsMapper zjTaskResultsMapper; + + @Override + public Long createZjTaskResults(ZjTaskResultsSaveReqVO createReqVO) { + // 插入 + ZjTaskResultsDO zjTaskResults = BeanUtils.toBean(createReqVO, ZjTaskResultsDO.class); + zjTaskResultsMapper.insert(zjTaskResults); + // 返回 + return zjTaskResults.getId(); + } + + @Override + public void updateZjTaskResults(ZjTaskResultsSaveReqVO updateReqVO) { + // 校验存在 + validateZjTaskResultsExists(updateReqVO.getId()); + // 更新 + ZjTaskResultsDO updateObj = BeanUtils.toBean(updateReqVO, ZjTaskResultsDO.class); + zjTaskResultsMapper.updateById(updateObj); + } + + @Override + public void deleteZjTaskResults(Long id) { + // 校验存在 + validateZjTaskResultsExists(id); + // 删除 + zjTaskResultsMapper.deleteById(id); + } + + private void validateZjTaskResultsExists(Long id) { + if (zjTaskResultsMapper.selectById(id) == null) { + throw exception(ZJ_TASK_RESULTS_NOT_EXISTS); + } + } + + @Override + public ZjTaskResultsDO getZjTaskResults(Long id) { + return zjTaskResultsMapper.selectById(id); + } + + @Override + public PageResult getZjTaskResultsPage(ZjTaskResultsPageReqVO pageReqVO) { + return zjTaskResultsMapper.selectPage(pageReqVO); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void batchUpdateZjTaskResults(List resultItems) { + // 遍历批量更新每个检验结果(仅更新zjResult和images) + for (ZjTaskResultsBatchUpdateReqVO.ResultItem item : resultItems) { + ZjTaskResultsDO updateDO = new ZjTaskResultsDO(); + updateDO.setId(item.getId()); + updateDO.setZjResult(item.getZjResult()); + updateDO.setImages(item.getImages()); + // 使用mybatis-plus的updateById更新指定字段 + zjTaskResultsMapper.updateById(updateDO); + } + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/zjtask/ZjTaskMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/zjtask/ZjTaskMapper.xml new file mode 100644 index 0000000000..61303a7cf6 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/zjtask/ZjTaskMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/zjtaskresults/ZjTaskResultsMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/zjtaskresults/ZjTaskResultsMapper.xml new file mode 100644 index 0000000000..0ac3126071 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/zjtaskresults/ZjTaskResultsMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file