From 1b247edcc3a3d0b15e7d130ba88e1937185dd9c0 Mon Sep 17 00:00:00 2001 From: Tom Li Date: Thu, 20 Nov 2025 10:12:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A7=BD=E6=B6=B2=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E7=9B=B8=E5=85=B3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InspectionTaskTimeoutProcessor.java | 2 + .../LquidTankTaskGenerateProcessor.java | 4 +- .../LquidTankTaskTimeoutProcessor.java | 4 +- .../src/main/resources/application-dev.yml | 1 + .../desk/quality/constant/JobInfoConst.java | 77 ++++ .../quality/constant/LiquidTankTaskConst.java | 54 +-- .../desk/quality/constant/QARoleConst.java | 6 + .../controller/LiquidTankTaskController.java | 186 ++++---- .../quality/controller/TestController.java | 6 + .../quality/feign/LiquidTankTaskClient.java | 2 +- .../desk/quality/pojo/entity/LiquidTank.java | 19 +- .../quality/pojo/entity/LiquidTankTask.java | 435 +++++++++--------- .../pojo/request/LiquidTankTaskAccept.java | 12 + .../pojo/request/LiquidTankTaskFillData.java | 12 + .../request/LiquidTankTaskFinishForce.java | 16 + .../pojo/request/LiquidTankTaskGenManual.java | 27 ++ .../pojo/request/LiquidTankTaskIssue.java | 26 ++ .../service/LiquidTankTaskService.java | 315 ++++++++++++- .../desk/quality/service/MsgService.java | 16 + .../desk/quality/service/QAStartService.java | 26 ++ .../desk/quality/service/TestService.java | 23 + .../desk/quality/service/UserExService.java | 25 + .../gen/LiquidTankTaskGenServiceImpl.java | 28 +- .../springblade/desk/quality/util/IdUtil.java | 53 +++ .../desk/quality/util/RoleUtil.java | 21 + 25 files changed, 1014 insertions(+), 382 deletions(-) create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/quality/constant/JobInfoConst.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/quality/constant/QARoleConst.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskAccept.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskFillData.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskFinishForce.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskGenManual.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskIssue.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/MsgService.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/QAStartService.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/UserExService.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/quality/util/IdUtil.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/quality/util/RoleUtil.java diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/InspectionTaskTimeoutProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/InspectionTaskTimeoutProcessor.java index 3febf06..cb13a75 100644 --- a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/InspectionTaskTimeoutProcessor.java +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/InspectionTaskTimeoutProcessor.java @@ -7,6 +7,7 @@ import org.springframework.stereotype.Component; import tech.powerjob.worker.core.processor.ProcessResult; import tech.powerjob.worker.core.processor.TaskContext; import tech.powerjob.worker.core.processor.sdk.BasicProcessor; +import tech.powerjob.worker.log.OmsLogger; @Component @Data @@ -17,6 +18,7 @@ public class InspectionTaskTimeoutProcessor implements BasicProcessor { @Override public ProcessResult process(TaskContext context) throws Exception { + OmsLogger log = context.getOmsLogger(); String idString = context.getJobParams(); Long id = Long.parseLong(idString); client.timeout(id); diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/LquidTankTaskGenerateProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/LquidTankTaskGenerateProcessor.java index 8dbbdcb..ea82dd4 100644 --- a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/LquidTankTaskGenerateProcessor.java +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/LquidTankTaskGenerateProcessor.java @@ -21,10 +21,8 @@ public class LquidTankTaskGenerateProcessor implements BasicProcessor { @Override public ProcessResult process(TaskContext context) throws Exception { - OmsLogger omsLogger = context.getOmsLogger(); - omsLogger.info("LquidTankTaskGenerateProcessor start"); + OmsLogger log = context.getOmsLogger(); List list = lquidTankTaskClient.generate(); - omsLogger.info("LquidTankTaskGenerateProcessor end"); return new ProcessResult(true); } } diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/LquidTankTaskTimeoutProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/LquidTankTaskTimeoutProcessor.java index d38560b..ec5838b 100644 --- a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/LquidTankTaskTimeoutProcessor.java +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/LquidTankTaskTimeoutProcessor.java @@ -23,10 +23,8 @@ public class LquidTankTaskTimeoutProcessor implements BasicProcessor { @Override public ProcessResult process(TaskContext context) throws Exception { - OmsLogger omsLogger = context.getOmsLogger(); - omsLogger.info("LquidTankTaskTimeoutProcessor start"); + OmsLogger log = context.getOmsLogger(); List list = lquidTankTaskClient.timeout(); - omsLogger.info("LquidTankTaskGenerateProcessor end"); return new ProcessResult(true); } } diff --git a/blade-ops/blade-job/src/main/resources/application-dev.yml b/blade-ops/blade-job/src/main/resources/application-dev.yml index bed5d7c..adb3420 100644 --- a/blade-ops/blade-job/src/main/resources/application-dev.yml +++ b/blade-ops/blade-job/src/main/resources/application-dev.yml @@ -9,6 +9,7 @@ powerjob: port: 27777 server-address: 127.0.0.1:7700 + #数据源配置 spring: datasource: diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/constant/JobInfoConst.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/constant/JobInfoConst.java new file mode 100644 index 0000000..930edab --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/constant/JobInfoConst.java @@ -0,0 +1,77 @@ +package org.springblade.desk.quality.constant; + +public interface JobInfoConst { + + /** + * API + */ + Integer TIME_EXPRESSION_TYPE_API = 1; + /** + * CRON + */ + Integer TIME_EXPRESSION_TYPE_CRON = 2; + /** + * 固定频率(毫秒) + */ + Integer TIME_EXPRESSION_TYPE_3 = 3; + /** + * 固定延迟(毫秒) + */ + Integer TIME_EXPRESSION_TYPE_4 = 4; + /** + * 工作流 + */ + Integer TIME_EXPRESSION_TYPE_5 = 5; + /** + * 单机执行 + */ + Integer EXECUTE_TYPE_1 = 1; + /** + * 广播执行 + */ + Integer EXECUTE_TYPE_2 = 2; + /** + * MapReduce执行 + */ + Integer EXECUTE_MAP_REDUCE = 3; + /** + * Map执行 + */ + Integer EXECUTE_TYPE_4 = 4; + /** + * 内建 + */ + Integer PROCESSOR_TYPE_1 = 1; + /** + * 外置(动态加载) + */ + Integer PROCESSOR_TYPE_4 = 4; + /** + * HEALTH_FIRST 健康第一 + */ + Integer DISPATCH_STRATEGY_1 = 1; + /** + * RANDOM 随机 + */ + Integer DISPATCH_STRATEGY_RANDOM = 2; + /** + * SPECIFY + */ + Integer DISPATCH_STRATEGY_SPECIFY = 11; + /** + * ENABLE + */ + Integer STATUS_ENABLE = 1; + /** + * DISABLE + */ + Integer STATUS_DISABLE = 2; + /** + * + */ + Integer LOG_TYPE_1 = 1; + /** + * + */ + Integer LOG_TYPE_2 = 2; +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/constant/LiquidTankTaskConst.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/constant/LiquidTankTaskConst.java index ad0370e..f222c34 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/constant/LiquidTankTaskConst.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/constant/LiquidTankTaskConst.java @@ -1,19 +1,17 @@ package org.springblade.desk.quality.constant; public interface LiquidTankTaskConst { - /** - * 来源类型-手动 + * 来源类型-[1]:[1]:手动; */ Integer FROM_TYPE_MANUAL = 1; - /** - * 来源类型-定时任务周期性 + * 来源类型-[2]:周期自动生成; */ Integer FROM_TYPE_PERIODIC = 2; /** - * 来源类型-生产计算 + * 来源类型-[3]:计算自动生成; */ Integer FROM_TYPE_CAL = 3; @@ -21,59 +19,49 @@ public interface LiquidTankTaskConst { * 状态-初始化 */ Integer STATE_INIT = 0; - /** - * 状态-程序生成 或 试验化验班长手动:待接收 + * 状态-已经生成,待接收-程序生成 或 试验化验班长手动 + * 班组已处理 todo: */ - Integer STATE_PENDING_OPEN = 1; - + Integer STATE_PENDING_ACCEPT = 1; /** - * 状态-待检测 + * 状态-已经接收,待检测 */ Integer STATE_PENDING_TEST = 2; - /** - * 状态-检测员:已填报 + * 状态-已填报,待自动计算加药量-检测员填报 */ - Integer STATE_REC = 3; - + Integer STATE_FILL_DATA_FIRST = 3; /** - * 状态-已自动计算加药量 + * 状态-已自动计算加药量,待人工编辑加药量-程序计算加药量 */ - Integer STATE_AFTER_CAL = 4; - + Integer STATE_PENDING_EDIT_DRUG = 4; /** - * 状态-检测员:加药量待审核 + * 状态-提交审核加药量,待审核加药量-检测员提交 */ Integer STATE_PENDING_REVIEW = 5; - /** - * 状态-工艺员:待发放药,已经通过加药量审核 + * 状态-:已经通过加药量审核,待发药-工艺员同意 */ - Integer STATE_PENDING_SEND = 6; - + Integer STATE_PENDING_SEND_DRUG = 6; /** - * 状态- + * 状态-已经发药,待收药-药房人员 */ - Integer STATE_7 = 7; - + Integer STATE_PENDING_RECEIVE_DRUG = 7; + /** + * 状态-已经收药,待复检-检测员 + */ + Integer STATE_PENDING_FILL_DATA_SECOND = 9; /** * 状态-待下发,没有分派至检测员 */ - Integer STATE_NO_TESTER = 11; - + Integer STATE_NOT_READY = 11; /** * 状态-已完成,异常结束 */ Integer STATE_FINISH_FAILED = 21; - /** * 状态-已完成,正常结束 */ Integer STATE_FINISH_OK = 22; - - /** - * 班组已处理 todo: - */ - Integer STATUS_HANDLED = 10; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/constant/QARoleConst.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/constant/QARoleConst.java new file mode 100644 index 0000000..1979008 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/constant/QARoleConst.java @@ -0,0 +1,6 @@ +package org.springblade.desk.quality.constant; + +public interface QARoleConst { + + String QA_ROLE_ADMIN = "admin"; +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskController.java index 4ed7139..121a789 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskController.java @@ -9,9 +9,12 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.mp.support.Condition; @@ -23,7 +26,9 @@ import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.desk.quality.excel.gen.LiquidTankTaskGenExcel; import org.springblade.desk.quality.pojo.entity.LiquidTankTask; +import org.springblade.desk.quality.pojo.request.LiquidTankTaskGenManual; import org.springblade.desk.quality.pojo.vo.gen.LiquidTankTaskGenVO; +import org.springblade.desk.quality.service.LiquidTankTaskService; import org.springblade.desk.quality.service.gen.ILiquidTankTaskGenService; import org.springblade.desk.quality.wrapper.gen.LiquidTankTaskGenWrapper; import org.springframework.web.bind.annotation.*; @@ -38,102 +43,115 @@ import java.util.Map; * @since 2025-11-14 */ @RestController +@Data @AllArgsConstructor -@RequestMapping("/qa/liquidTankTask") +@EqualsAndHashCode(callSuper = true) +@RequestMapping("/QA/LiquidTankTask") @Tag(name = "[槽液检测任务]", description = "[槽液检测任务]接口") public class LiquidTankTaskController extends BladeController { - private final ILiquidTankTaskGenService liquidTankTaskGenService; + @Resource + private ILiquidTankTaskGenService liquidTankTaskGenService; + @Resource + private LiquidTankTaskService service; - /** - * [槽液检测任务] 详情 - */ - @GetMapping("/detail") - @ApiOperationSupport(order = 1) - @Operation(summary = "详情", description = "传入liquidTankTask") - public R detail(LiquidTankTask liquidTankTask) { - LiquidTankTask detail = liquidTankTaskGenService.getOne(Condition.getQueryWrapper(liquidTankTask)); - return R.data(LiquidTankTaskGenWrapper.build().entityVO(detail)); - } + /** + * [槽液检测任务] 详情 + */ + @GetMapping("/detail") + @ApiOperationSupport(order = 1) + @Operation(summary = "详情", description = "传入liquidTankTask") + public R detail(LiquidTankTask liquidTankTask) { + LiquidTankTask detail = liquidTankTaskGenService.getOne(Condition.getQueryWrapper(liquidTankTask)); + return R.data(LiquidTankTaskGenWrapper.build().entityVO(detail)); + } - /** - * [槽液检测任务] 分页 - */ - @GetMapping("/list") - @ApiOperationSupport(order = 2) - @Operation(summary = "分页", description = "传入liquidTankTask") - public R> list(@Parameter(hidden = true) @RequestParam Map liquidTankTask, Query query) { - IPage pages = liquidTankTaskGenService.page(Condition.getPage(query), Condition.getQueryWrapper(liquidTankTask, LiquidTankTask.class)); - return R.data(LiquidTankTaskGenWrapper.build().pageVO(pages)); - } + /** + * [槽液检测任务] 分页 + */ + @GetMapping("/list") + @ApiOperationSupport(order = 2) + @Operation(summary = "分页", description = "传入liquidTankTask") + public R> list(@Parameter(hidden = true) @RequestParam Map liquidTankTask, Query query) { + IPage pages = liquidTankTaskGenService.page(Condition.getPage(query), Condition.getQueryWrapper(liquidTankTask, LiquidTankTask.class)); + return R.data(LiquidTankTaskGenWrapper.build().pageVO(pages)); + } - /** - * [槽液检测任务] 自定义分页 - */ - @GetMapping("/page") - @ApiOperationSupport(order = 3) - @Operation(summary = "分页", description = "传入liquidTankTask") - public R> page(LiquidTankTaskGenVO liquidTankTask, Query query) { - IPage pages = liquidTankTaskGenService.selectLiquidTankTaskPage(Condition.getPage(query), liquidTankTask); - return R.data(pages); - } + /** + * [槽液检测任务] 自定义分页 + */ + @GetMapping("/page") + @ApiOperationSupport(order = 3) + @Operation(summary = "分页", description = "传入liquidTankTask") + public R> page(LiquidTankTaskGenVO liquidTankTask, Query query) { + IPage pages = liquidTankTaskGenService.selectLiquidTankTaskPage(Condition.getPage(query), liquidTankTask); + return R.data(pages); + } - /** - * [槽液检测任务] 新增 - */ - @PostMapping("/save") - @ApiOperationSupport(order = 4) - @Operation(summary = "新增", description = "传入liquidTankTask") - public R save(@Valid @RequestBody LiquidTankTask liquidTankTask) { - return R.status(liquidTankTaskGenService.save(liquidTankTask)); - } + /** + * [槽液检测任务] 新增 + */ + @PostMapping("/save") + @ApiOperationSupport(order = 4) + @Operation(summary = "新增", description = "传入liquidTankTask") + public R save(@Valid @RequestBody LiquidTankTask liquidTankTask) { + return R.status(liquidTankTaskGenService.save(liquidTankTask)); + } - /** - * [槽液检测任务] 修改 - */ - @PostMapping("/update") - @ApiOperationSupport(order = 5) - @Operation(summary = "修改", description = "传入liquidTankTask") - public R update(@Valid @RequestBody LiquidTankTask liquidTankTask) { - return R.status(liquidTankTaskGenService.updateById(liquidTankTask)); - } + /** + * [槽液检测任务] 修改 + */ + @PostMapping("/update") + @ApiOperationSupport(order = 5) + @Operation(summary = "修改", description = "传入liquidTankTask") + public R update(@Valid @RequestBody LiquidTankTask liquidTankTask) { + return R.status(liquidTankTaskGenService.updateById(liquidTankTask)); + } - /** - * [槽液检测任务] 新增或修改 - */ - @PostMapping("/submit") - @ApiOperationSupport(order = 6) - @Operation(summary = "新增或修改", description = "传入liquidTankTask") - public R submit(@Valid @RequestBody LiquidTankTask liquidTankTask) { - return R.status(liquidTankTaskGenService.saveOrUpdate(liquidTankTask)); - } + /** + * [槽液检测任务] 新增或修改 + */ + @PostMapping("/submit") + @ApiOperationSupport(order = 6) + @Operation(summary = "新增或修改", description = "传入liquidTankTask") + public R submit(@Valid @RequestBody LiquidTankTask liquidTankTask) { + return R.status(liquidTankTaskGenService.saveOrUpdate(liquidTankTask)); + } - /** - * [槽液检测任务] 删除 - */ - @PostMapping("/remove") - @ApiOperationSupport(order = 7) - @Operation(summary = "逻辑删除", description = "传入ids") - public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { - return R.status(liquidTankTaskGenService.deleteLogic(Func.toLongList(ids))); - } + /** + * [槽液检测任务] 删除 + */ + @PostMapping("/remove") + @ApiOperationSupport(order = 7) + @Operation(summary = "逻辑删除", description = "传入ids") + public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { + return R.status(liquidTankTaskGenService.deleteLogic(Func.toLongList(ids))); + } - /** - * 导出数据 - */ - @IsAdmin - @GetMapping("/export-liquidTankTask") - @ApiOperationSupport(order = 8) - @Operation(summary = "导出数据", description = "传入liquidTankTask") - public void exportLiquidTankTask(@Parameter(hidden = true) @RequestParam Map liquidTankTask, BladeUser bladeUser, HttpServletResponse response) { - QueryWrapper queryWrapper = Condition.getQueryWrapper(liquidTankTask, LiquidTankTask.class); - //if (!AuthUtil.isAdministrator()) { - // queryWrapper.lambda().eq(LiquidTankTask::getTenantId, bladeUser.getTenantId()); - //} - //queryWrapper.lambda().eq(LiquidTankTaskEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED); - List list = liquidTankTaskGenService.exportLiquidTankTask(queryWrapper); - ExcelUtil.export(response, "[槽液检测任务]数据" + DateUtil.time(), "[槽液检测任务]数据表", list, LiquidTankTaskGenExcel.class); - } + /** + * 导出数据 + */ + @GetMapping("/export-excel") + @ApiOperationSupport(order = 8) + @Operation(summary = "导出数据", description = "传入liquidTankTask") + public void exportLiquidTankTask(@Parameter(hidden = true) @RequestParam Map liquidTankTask, BladeUser bladeUser, HttpServletResponse response) { + QueryWrapper queryWrapper = Condition.getQueryWrapper(liquidTankTask, LiquidTankTask.class); + //if (!AuthUtil.isAdministrator()) { + // queryWrapper.lambda().eq(LiquidTankTask::getTenantId, bladeUser.getTenantId()); + //} + //queryWrapper.lambda().eq(LiquidTankTaskEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED); + List list = liquidTankTaskGenService.exportLiquidTankTask(queryWrapper); + ExcelUtil.export(response, "[槽液检测任务]数据" + DateUtil.time(), "[槽液检测任务]数据表", list, LiquidTankTaskGenExcel.class); + } + /** + * [槽液检测任务] 手动生成新增 + */ + @PostMapping("/generateManual") + @ApiOperationSupport(order = 4) + @Operation(summary = "手动生成新增", description = "") + public R generateManual(@Valid @RequestBody LiquidTankTaskGenManual req) { + return service.generateManual(req); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/TestController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/TestController.java index 187cb82..ad04760 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/TestController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/TestController.java @@ -32,4 +32,10 @@ public class TestController extends BladeController { public R detail(@RequestParam Long userId) { return service.getOneUser(userId); } + + @GetMapping("/test1") + @ApiOperationSupport(order = 2) + public R test1() { + return service.test1(); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/LiquidTankTaskClient.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/LiquidTankTaskClient.java index 48bedcb..6ba880d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/LiquidTankTaskClient.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/LiquidTankTaskClient.java @@ -17,7 +17,7 @@ public class LiquidTankTaskClient implements ILquidTankTaskClient { @Override public List generate() { - return service.generate(); + return service.generateAuto(); } @Override diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTank.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTank.java index 6d4f294..d195baa 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTank.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTank.java @@ -160,7 +160,7 @@ public class LiquidTank extends BaseEntity { */ @ExcelProperty(value = "[作业中心]id", index = 1) @Schema(description = "[作业中心]id") - private BigDecimal workCenterId; + private Long workCenterId; /** * 槽液编码/槽号 */ @@ -181,7 +181,7 @@ public class LiquidTank extends BaseEntity { * 药品[物料]id */ @Schema(description = "药品[物料]id") - private BigDecimal drugMaterialId; + private Long drugMaterialId; /** * 药品[物料]编码 */ @@ -201,7 +201,7 @@ public class LiquidTank extends BaseEntity { * 目标值 */ @Schema(description = "目标值") - private BigDecimal targetValue; + private Long targetValue; /** * 目标上下限 */ @@ -211,12 +211,12 @@ public class LiquidTank extends BaseEntity { * 添加点 */ @Schema(description = "添加点") - private BigDecimal fillingLocation; + private Long fillingLocation; /** * 体积 */ @Schema(description = "体积") - private BigDecimal volume; + private Long volume; /** * 单位 */ @@ -248,10 +248,10 @@ public class LiquidTank extends BaseEntity { @Schema(description = "化验人[用户]id") private Long testUserId; /** - * 工艺主管[用户]id + * 工艺主管工艺员[用户]id */ - @Schema(description = "工艺主管[用户]id") - private BigDecimal processUserId; + @Schema(description = "工艺主管工艺员[用户]id") + private Long processUserId; /** * 温度范围 */ @@ -301,6 +301,5 @@ public class LiquidTank extends BaseEntity { * [计量单位]id */ @Schema(description = "[计量单位]id") - private BigDecimal unitId; - + private Long unitId; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankTask.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankTask.java index 8cf5ec5..df9a143 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankTask.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankTask.java @@ -25,223 +25,222 @@ import java.time.LocalDateTime; @EqualsAndHashCode(callSuper = true) public class LiquidTankTask extends BaseEntity { - @Serial - private static final long serialVersionUID = 1L; - - /** - * [槽液检测任务]编码 - */ - @Schema(description = "[槽液检测任务]编码") - private String code; - /** - * 类型 - */ - @Schema(description = "类型") - private Long liquidTankTaskType; - /** - * 名称 - */ - @Schema(description = "名称") - private String name; - /** - * [槽液]id - */ - @Schema(description = "[槽液]id") - private Long liquidTankId; - /** - * [作业中心]id - */ - @Schema(description = "[作业中心]id") - private Long workCenterId; - /** - * 药品[物料]id - */ - @Schema(description = "药品[物料]id") - private Long drugMaterialId; - /** - * [槽液]编号 - */ - @Schema(description = "[槽液]编号") - private String liquidTankCode; - /** - * 待测成分 - */ - @Schema(description = "待测成分") - private String testElement; - /** - * 药品名称 - */ - @Schema(description = "药品名称") - private String drugName; - /** - * 药品[物料]编码 - */ - @Schema(description = "药品[物料]编码") - private String drugMaterialCode; - /** - * 药品物料名称 - */ - @Schema(description = "药品物料名称") - private String drugMaterialName; - /** - * 工艺含量 - */ - @Schema(description = "工艺含量") - private String processContent; - /** - * 目标值 - */ - @Schema(description = "目标值") - private Long targetValue; - /** - * 目标上下限 - */ - @Schema(description = "目标上下限") - private String bound; - /** - * 排序 - */ - @Schema(description = "排序") - private Long sort; - /** - * 备注 - */ - @Schema(description = "备注") - private String remark; - /** - * 添加点 - */ - @Schema(description = "添加点") - private BigDecimal fillingLocation; - /** - * 电导率测量值 - */ - @Schema(description = "电导率测量值") - private BigDecimal conductivityTestValue; - /** - * 体积 - */ - @Schema(description = "体积") - private BigDecimal volume; - /** - * 单位 - */ - @Schema(description = "单位") - private BigDecimal unit; - /** - * [计量单位]id - */ - @Schema(description = "[计量单位]id") - private BigDecimal unitId; - /** - * 加药量单位 - */ - @Schema(description = "加药量单位") - private String addUnit; - /** - * 加药量[计量单位]id - */ - @Schema(description = "加药量[计量单位]id") - private BigDecimal addUnitId; - /** - * 分析周期 - */ - @Schema(description = "分析周期") - private Integer analysisCycle; - /** - * 有效期 - */ - @Schema(description = "有效期") - private LocalDateTime validDate; - /** - * 上次化验日期 - */ - @Schema(description = "上次化验日期") - private LocalDateTime lastTest; - /** - * 槽液到期日期 - */ - @Schema(description = "槽液到期日期") - private LocalDateTime expiryDate; - /** - * 化验人[用户]id - */ - @Schema(description = "化验人[用户]id") - private BigDecimal testUserId; - /** - * 工艺主管[用户]id - */ - @Schema(description = "工艺主管[用户]id") - private BigDecimal processUserId; - /** - * 测量值 - */ - @Schema(description = "测量值") - private BigDecimal testValue; - /** - * 需添加量 - */ - @Schema(description = "需添加量") - private BigDecimal needAddValue; - /** - * 实际添加量 - */ - @Schema(description = "实际添加量") - private BigDecimal actualAddValue; - /** - * 加药后含量 - */ - @Schema(description = "加药后含量") - private BigDecimal afterAddValue; - /** - * [班组]id - */ - @Schema(description = "[班组]id") - private Long teamId; - /** - * 参数录入时间 - */ - @Schema(description = "参数录入时间") - private LocalDateTime entryDate; - /** - * 确认时间 - */ - @Schema(description = "确认时间") - private LocalDateTime confirmDate; - /** - * 送出[用户]id - */ - @Schema(description = "送出[用户]id") - private Long sendUserId; - /** - * 送出时间 - */ - @Schema(description = "送出时间") - private LocalDateTime sendDate; - /** - * 接收[用户]id - */ - @Schema(description = "接收[用户]id") - private Long receiveUserId; - /** - * 接收时间 - */ - @Schema(description = "接收时间") - private LocalDateTime receiveDate; - /** - * 处理[用户]id - */ - @Schema(description = "处理[用户]id") - private BigDecimal handleUserId; - /** - * 处理时间 - */ - @Schema(description = "处理时间") - private LocalDateTime handleDate; - /** - * 来源类型 - */ - @Schema(description = "来源类型") - private Long fromType; + @Serial + private static final long serialVersionUID = 1L; + /** + * [槽液检测任务]编码 + */ + @Schema(description = "[槽液检测任务]编码") + private String code; + /** + * 类型 + */ + @Schema(description = "类型") + private Long liquidTankTaskType; + /** + * 名称 + */ + @Schema(description = "名称") + private String name; + /** + * [槽液]id + */ + @Schema(description = "[槽液]id") + private Long liquidTankId; + /** + * [作业中心]id + */ + @Schema(description = "[作业中心]id") + private Long workCenterId; + /** + * 药品[物料]id + */ + @Schema(description = "药品[物料]id") + private Long drugMaterialId; + /** + * [槽液]编号 + */ + @Schema(description = "[槽液]编号") + private String liquidTankCode; + /** + * 待测成分 + */ + @Schema(description = "待测成分") + private String testElement; + /** + * 药品名称 + */ + @Schema(description = "药品名称") + private String drugName; + /** + * 药品[物料]编码 + */ + @Schema(description = "药品[物料]编码") + private String drugMaterialCode; + /** + * 药品物料名称 + */ + @Schema(description = "药品物料名称") + private String drugMaterialName; + /** + * 工艺含量 + */ + @Schema(description = "工艺含量") + private String processContent; + /** + * 目标值 + */ + @Schema(description = "目标值") + private Long targetValue; + /** + * 目标上下限 + */ + @Schema(description = "目标上下限") + private String bound; + /** + * 排序 + */ + @Schema(description = "排序") + private Long sort; + /** + * 备注 + */ + @Schema(description = "备注") + private String remark; + /** + * 添加点 + */ + @Schema(description = "添加点") + private BigDecimal fillingLocation; + /** + * 电导率测量值 + */ + @Schema(description = "电导率测量值") + private BigDecimal conductivityTestValue; + /** + * 体积 + */ + @Schema(description = "体积") + private BigDecimal volume; + /** + * 单位 + */ + @Schema(description = "单位") + private BigDecimal unit; + /** + * [计量单位]id + */ + @Schema(description = "[计量单位]id") + private BigDecimal unitId; + /** + * 加药量单位 + */ + @Schema(description = "加药量单位") + private String addUnit; + /** + * 加药量[计量单位]id + */ + @Schema(description = "加药量[计量单位]id") + private BigDecimal addUnitId; + /** + * 分析周期 + */ + @Schema(description = "分析周期") + private Integer analysisCycle; + /** + * 有效期 + */ + @Schema(description = "有效期") + private LocalDateTime validDate; + /** + * 上次化验日期 + */ + @Schema(description = "上次化验日期") + private LocalDateTime lastTest; + /** + * 槽液到期日期 + */ + @Schema(description = "槽液到期日期") + private LocalDateTime expiryDate; + /** + * 化验人[用户]id + */ + @Schema(description = "化验人[用户]id") + private Long testUserId; + /** + * 工艺主管工艺员[用户]id + */ + @Schema(description = "工艺主管工艺员[用户]id") + private Long processUserId; + /** + * 测量值 + */ + @Schema(description = "测量值") + private BigDecimal testValue; + /** + * 需添加量 + */ + @Schema(description = "需添加量") + private BigDecimal needAddValue; + /** + * 实际添加量 + */ + @Schema(description = "实际添加量") + private BigDecimal actualAddValue; + /** + * 加药后含量 + */ + @Schema(description = "加药后含量") + private BigDecimal afterAddValue; + /** + * [班组]id + */ + @Schema(description = "[班组]id") + private Long teamId; + /** + * 参数录入时间 + */ + @Schema(description = "参数录入时间") + private LocalDateTime entryDate; + /** + * 确认时间 + */ + @Schema(description = "确认时间") + private LocalDateTime confirmDate; + /** + * 送出[用户]id + */ + @Schema(description = "送出[用户]id") + private Long sendUserId; + /** + * 送出时间 + */ + @Schema(description = "送出时间") + private LocalDateTime sendDate; + /** + * 接收[用户]id + */ + @Schema(description = "接收[用户]id") + private Long receiveUserId; + /** + * 接收时间 + */ + @Schema(description = "接收时间") + private LocalDateTime receiveDate; + /** + * 处理[用户]id + */ + @Schema(description = "处理[用户]id") + private Long handleUserId; + /** + * 处理时间 + */ + @Schema(description = "处理时间") + private LocalDateTime handleDate; + /** + * 来源类型:[1]:手动;[2]:周期自动生成;[3]:计算自动生成; + */ + @Schema(description = "来源类型:[1]:手动;[2]:周期自动生成;[3]:计算自动生成;") + private Integer fromType; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskAccept.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskAccept.java new file mode 100644 index 0000000..d552f3e --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskAccept.java @@ -0,0 +1,12 @@ +package org.springblade.desk.quality.pojo.request; + +import lombok.Data; + +@Data +public class LiquidTankTaskAccept { + + /** + * [槽液检测任务]id + */ + Long id; +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskFillData.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskFillData.java new file mode 100644 index 0000000..fc32056 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskFillData.java @@ -0,0 +1,12 @@ +package org.springblade.desk.quality.pojo.request; + +import lombok.Data; + +@Data +public class LiquidTankTaskFillData { + + /** + * [槽液检测任务]id + */ + Long id; +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskFinishForce.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskFinishForce.java new file mode 100644 index 0000000..6e47657 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskFinishForce.java @@ -0,0 +1,16 @@ +package org.springblade.desk.quality.pojo.request; + +import lombok.Data; + +@Data +public class LiquidTankTaskFinishForce { + + /** + * [槽液检测任务]id + */ + Long id; + /** + * 结束原因 + */ + String finishReason; +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskGenManual.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskGenManual.java new file mode 100644 index 0000000..1727737 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskGenManual.java @@ -0,0 +1,27 @@ +package org.springblade.desk.quality.pojo.request; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.Date; + +@Data +public class LiquidTankTaskGenManual { + + /** + * [槽液]id + */ + Long liquidTankId; + /** + * 检测员id + */ + Long testUserId; + /** + * 工艺员 + */ + Long processUserId; + /** + * 检测日期 + */ + Date testDate; +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskIssue.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskIssue.java new file mode 100644 index 0000000..5423f24 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/request/LiquidTankTaskIssue.java @@ -0,0 +1,26 @@ +package org.springblade.desk.quality.pojo.request; + +import lombok.Data; + +import java.util.Date; + +@Data +public class LiquidTankTaskIssue { + + /** + * [槽液检测任务]id + */ + Long id; + /** + * 检测员[用户]id + */ + Long testUserId; + /** + * 工艺员[用户]id + */ + Long processUserId; + /** + * 检测日期 + */ + Date testDate; +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/LiquidTankTaskService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/LiquidTankTaskService.java index e863d6d..a2a3a1d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/LiquidTankTaskService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/LiquidTankTaskService.java @@ -4,7 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import jakarta.annotation.Resource; import lombok.Data; import lombok.extern.slf4j.Slf4j; -import org.flowable.task.service.delegate.TaskListener; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tool.api.R; import org.springblade.desk.quality.constant.ColBase; import org.springblade.desk.quality.constant.ColValue; import org.springblade.desk.quality.constant.LiquidTankTaskConst; @@ -12,13 +13,23 @@ import org.springblade.desk.quality.mapper.gen.LiquidTankGenMapper; import org.springblade.desk.quality.mapper.gen.LiquidTankTaskGenMapper; import org.springblade.desk.quality.pojo.entity.LiquidTank; import org.springblade.desk.quality.pojo.entity.LiquidTankTask; +import org.springblade.desk.quality.pojo.request.LiquidTankTaskAccept; +import org.springblade.desk.quality.pojo.request.LiquidTankTaskFinishForce; +import org.springblade.desk.quality.pojo.request.LiquidTankTaskGenManual; +import org.springblade.desk.quality.pojo.request.LiquidTankTaskIssue; +import org.springblade.desk.quality.util.IdUtil; import org.springblade.system.feign.IUserClient; +import org.springblade.system.pojo.entity.UserInfo; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Objects; +/** + * [槽液检测任务] + */ @Service @Slf4j @Data @@ -29,13 +40,20 @@ public class LiquidTankTaskService { @Resource private LiquidTankTaskGenMapper genMapper; + @Resource + private MsgService msgService; + + @Resource + private IUserClient userClient; + + /** * 定时运行:每天00:00 - * 生成槽液任务。 + * 周期性自动生成槽液任务。 * - * @return + * @return 所有生成的任务 */ - public List generate() { + public List generateAuto() { log.info("========generate========start"); // 如果是节假日,则跳过生成。 if (false) { @@ -49,26 +67,39 @@ public class LiquidTankTaskService { ); // 遍历插入槽液任务。 List rList = new ArrayList<>(); - for (LiquidTank tank : tankList) { + for (LiquidTank lt : tankList) { // 如果有未处理任务,则跳过不生成新任务。 Long count = genMapper.selectCount( new QueryWrapper() - .eq("LIQUID_TANK_ID", tank.getId()) - .eq(ColBase.STATUS, LiquidTankTaskConst.STATUS_HANDLED) + .eq("LIQUID_TANK_ID", lt.getId()) + .eq(ColBase.STATUS, LiquidTankTaskConst.STATE_PENDING_ACCEPT) ); if (count >= 1) { - log.info("槽液{}存在未处理的槽液任务", tank.getId()); + log.info("槽液{}存在未处理的槽液任务", lt.getId()); continue; } LiquidTankTask task = new LiquidTankTask(); - task.setLiquidTankId(tank.getId()); + task.setLiquidTankId(lt.getId()); task.setName("name"); - task.setCode("code"); - task.setSort(0L); - task.setCreateTime(new Date()); - task.setRemark("remark"); + task.setCode(""); + task.setRemark(""); task.setTeamId(0L); - task.setReceiveUserId(0L); + // 设置人员相关 + // 设置检测员 + task.setTestUserId(lt.getTestUserId()); + // 设置工艺员 + task.setProcessUserId(lt.getProcessUserId()); + // + task.setSendUserId(IdUtil.DEFAULT_ID); + task.setReceiveUserId(IdUtil.DEFAULT_ID); + // from type + task.setFromType(LiquidTankTaskConst.FROM_TYPE_PERIODIC); + // status + task.setStatus(LiquidTankTaskConst.STATE_PENDING_ACCEPT); + // 通用字段 + task.setCreateUser(AuthUtil.getUserId()); + task.setCreateTime(new Date()); + task.setCreateDept(Long.parseLong(AuthUtil.getDeptId())); genMapper.insert(task); rList.add(task); } @@ -80,13 +111,13 @@ public class LiquidTankTaskService { * 定时运行:每天09:30 * 槽液任务超时提醒。 * - * @return + * @return 被提醒的任务列表 */ public List timeout() { log.info("========timeout========start"); // 查询出所有未处理的槽液任务 List list = genMapper.selectList(new QueryWrapper() - .eq(ColBase.STATUS, LiquidTankTaskConst.STATUS_HANDLED) + .eq(ColBase.STATUS, LiquidTankTaskConst.STATE_PENDING_ACCEPT) .orderByAsc(ColBase.ID) ); for (LiquidTankTask task : list) { @@ -94,9 +125,259 @@ public class LiquidTankTaskService { // todo:对监测员进行提醒。 // 按天运行,可以一直重复提醒。 String msg = "槽液 " + tank.getCode() + ",未及时检验!请及时处理。"; - Long userId = tank.getTestUserId(); + Long testUserId = tank.getTestUserId(); + msgService.sendMsg(testUserId, msg); } log.info("========timeout========end"); return list; } + + /** + * [槽液检测任务] 手动生成新增 + * + * @param req + * @return + */ + public R generateManual(LiquidTankTaskGenManual req) { + LiquidTank lt = liquidTankGenMapper.selectById(req.getLiquidTankId()); + if (Objects.isNull(lt)) { + R.fail("对应槽液信息为空。"); + } + // todo:检查当前角色 + UserInfo userInfo = userClient.userInfo(req.getTestUserId()).getData(); + // todo:检查角色 + + // todo:日期检查 + LiquidTankTask task = new LiquidTankTask(); + // 指定槽液 + task.setLiquidTankId(req.getLiquidTankId()); + // 指定人员 + if (IdUtil.isValid(req.getTestUserId())) { + task.setTestUserId(req.getTestUserId()); + } else { + task.setTestUserId(lt.getTestUserId()); + } + if (IdUtil.isValid(req.getProcessUserId())) { + task.setProcessUserId(req.getProcessUserId()); + } else { + task.setProcessUserId(lt.getProcessUserId()); + } + // from type + task.setFromType(LiquidTankTaskConst.FROM_TYPE_MANUAL); + // status + task.setStatus(LiquidTankTaskConst.STATE_PENDING_ACCEPT); + // 通用字段 + task.setCreateUser(AuthUtil.getUserId()); + task.setCreateTime(new Date()); + task.setCreateDept(Long.parseLong(AuthUtil.getDeptId())); + // 插入 + genMapper.insert(task); + // final R + R r = new R<>(); + r.setData(task); + r.setSuccess(true); + r.setMsg("手动生成槽液任务成功"); + return r; + } + + /** + * [槽液检测任务] 手动下发 + * + * @param req + * @return + */ + public R issue(LiquidTankTaskIssue req) { + // todo:检查当前角色 + if (IdUtil.isAnyInvalid(new Long[]{req.getId(), req.getTestUserId(), req.getProcessUserId()})) { + return R.fail("id错误"); + } + LiquidTankTask task = genMapper.selectById(req.getId()); + if (!LiquidTankTaskConst.STATE_NOT_READY.equals(task.getStatus())) { + return R.fail("任务状态不对应"); + } + // status + task.setStatus(LiquidTankTaskConst.STATE_PENDING_ACCEPT); + // 通用字段 + task.setUpdateUser(AuthUtil.getUserId()); + task.setUpdateTime(new Date()); + R r = new R<>(); + r.setData(task); + r.setSuccess(true); + r.setMsg("手动下发槽液任务成功"); + return r; + } + + /** + * [槽液检测任务] 接收任务 + * + * @param req + * @return + */ + public R accept(LiquidTankTaskAccept req) { + if (IdUtil.isInvalid(req.getId())) { + return R.fail("id错误"); + } + LiquidTankTask task = genMapper.selectById(req.getId()); + if (!LiquidTankTaskConst.STATE_PENDING_ACCEPT.equals(task.getStatus())) { + return R.fail("任务状态不对应"); + } + // check status + // status + task.setStatus(LiquidTankTaskConst.STATE_PENDING_TEST); + R r = new R<>(); + r.setData(task); + r.setSuccess(true); + r.setMsg("接收任务成功"); + return r; + } + + /** + * [槽液检测任务] 首次填报数据 + * + * @param req + * @return + */ + public R fillDataFirst(LiquidTankTaskAccept req) { + LiquidTankTask task = genMapper.selectById(req.getId()); + if (!LiquidTankTaskConst.STATE_FILL_DATA_FIRST.equals(task.getStatus())) { + return R.fail("任务状态不对应"); + } + R r = new R<>(); + // todo: 自动计算加药量 + r.setData(task); + r.setSuccess(true); + r.setMsg("填报数据成功"); + return r; + } + + /** + * [槽液检测任务] 编辑加药量 + * + * @param req + * @return + */ + public R editDrugQuantity(LiquidTankTaskAccept req) { + LiquidTankTask task = genMapper.selectById(req.getId()); + if (!LiquidTankTaskConst.STATE_FILL_DATA_FIRST.equals(task.getStatus())) { + return R.fail("任务状态不对应"); + } + R r = new R<>(); + // todo: 自动计算加药量 + r.setData(task); + r.setSuccess(true); + r.setMsg("编辑加药量成功"); + return r; + } + + /** + * [槽液检测任务] 提交加药量审核 + * + * @param req + * @return + */ + public R submitDrugQuantity(LiquidTankTaskAccept req) { + LiquidTankTask task = genMapper.selectById(req.getId()); + if (!LiquidTankTaskConst.STATE_PENDING_EDIT_DRUG.equals(task.getStatus())) { + return R.fail("任务状态不对应"); + } + R r = new R<>(); + + // todo: 自动计算加药量 + r.setData(null); + r.setSuccess(true); + r.setMsg("提交加药量审核成功"); + return r; + } + + /** + * [槽液检测任务] 同意提交加药量 + * + * @param req + * @return + */ + public R agreeDrugQuantity(LiquidTankTaskAccept req) { + LiquidTankTask task = genMapper.selectById(req.getId()); + if (!LiquidTankTaskConst.STATE_PENDING_REVIEW.equals(task.getStatus())) { + return R.fail("任务状态不对应"); + } + R r = new R<>(); + + // todo: 自动计算加药量 + r.setData(null); + r.setSuccess(true); + r.setMsg("同意提交加药量成功"); + return r; + } + + /** + * [槽液检测任务] 驳回提交加药量 + * + * @param req + * @return + */ + public R disagreeDrugQuantity(LiquidTankTaskAccept req) { + R r = new R<>(); + + // todo: 自动计算加药量 + r.setData(null); + r.setSuccess(true); + r.setMsg("驳回提交加药量成功"); + return r; + } + + /** + * [槽液检测任务] 药品发放确认 + * + * @param req + * @return + */ + public R sendDrug(LiquidTankTaskAccept req) { + R r = new R<>(); + + // todo: 自动计算加药量 + r.setData(null); + r.setSuccess(true); + r.setMsg("药品发放确认成功"); + return r; + } + + /** + * [槽液检测任务] 药品接收确认 + * + * @param req + * @return + */ + public R receiveDrug(LiquidTankTaskAccept req) { + R r = new R<>(); + + // todo: 自动计算加药量 + r.setData(null); + r.setSuccess(true); + r.setMsg("药品接收确认成功"); + return r; + } + + public R finishForce(LiquidTankTaskFinishForce req) { + LiquidTankTask task = genMapper.selectById(req.getId()); + R r = new R<>(); + r.setData(task); + r.setSuccess(true); + r.setMsg("强制结束槽液任务成功"); + return r; + } + + /** + * 计算加药量 + * 根据历史填报 or 药品规格自动修正加药量 + */ + public void calDrug() { + + } + + /** + * 生产需求计算 + */ + public void calProductNeed() { + + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/MsgService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/MsgService.java new file mode 100644 index 0000000..cad0200 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/MsgService.java @@ -0,0 +1,16 @@ +package org.springblade.desk.quality.service; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +@Data +public class MsgService { + + public void sendMsg(Long userId, String msg) { + // + log.info("userId = {},sendMsg = {}", userId, msg); + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/QAStartService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/QAStartService.java new file mode 100644 index 0000000..25ea99a --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/QAStartService.java @@ -0,0 +1,26 @@ +package org.springblade.desk.quality.service; + +import jakarta.annotation.Resource; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springblade.job.feign.IJobExtClient; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Service; + +@Service +@Data +@Slf4j +public class QAStartService { + + @Resource + private IJobExtClient jobExtClient; + + /** + * 应用启动后执行。 + */ + @EventListener(ApplicationReadyEvent.class) + public void start() { + log.info("====QA模块启动成功!===="); + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/TestService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/TestService.java index fe0017a..9edb65e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/TestService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/TestService.java @@ -4,6 +4,9 @@ import jakarta.annotation.Resource; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springblade.core.tool.api.R; +import org.springblade.desk.quality.constant.JobInfoConst; +import org.springblade.job.feign.IJobExtClient; +import org.springblade.job.pojo.entity.JobInfo; import org.springblade.system.feign.IUserClient; import org.springblade.system.pojo.entity.User; import org.springframework.stereotype.Service; @@ -16,7 +19,27 @@ public class TestService { @Resource private IUserClient userClient; + @Resource + private IJobExtClient jobExtClient; + public R getOneUser(Long userId) { return userClient.userInfoById(userId); } + + public R test1() { +// Boolean b = jobExtClient.sync(); +// JobInfo j = new JobInfo(); +// j.setJobId(null); +// j.setJobName("job-test-" + System.currentTimeMillis()); +// j.setTimeExpressionType(JobInfoConst.TIME_EXPRESSION_TYPE_CRON); +// j.setTimeExpression("*/5 * * * * ?"); +// j.setExecuteType(JobInfoConst.EXECUTE_TYPE_1); +// j.setProcessorType(JobInfoConst.PROCESSOR_TYPE_1); +// j.setDispatchStrategy(JobInfoConst.DISPATCH_STRATEGY_1); +// j.setProcessorInfo("org.springblade.job.processor.ProcessorDemo"); +// jobExtClient.submitAndSync(j); + // 最后同步。 + jobExtClient.sync(); + return R.data(Boolean.TRUE); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/UserExService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/UserExService.java new file mode 100644 index 0000000..0f38353 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/UserExService.java @@ -0,0 +1,25 @@ +package org.springblade.desk.quality.service; + +import jakarta.annotation.Resource; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springblade.core.tool.api.R; +import org.springblade.system.feign.IUserClient; +import org.springblade.system.pojo.entity.User; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +@Data +public class UserExService { + + @Resource + private IUserClient userClient; + + public R test(Long userId) { + R rUser = userClient.userInfoById(userId); + if (rUser.isSuccess() && rUser.getData() != null) { + return R.data(rUser.getData()); + } + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/gen/LiquidTankTaskGenServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/gen/LiquidTankTaskGenServiceImpl.java index ae40b1b..b8c963a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/gen/LiquidTankTaskGenServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/gen/LiquidTankTaskGenServiceImpl.java @@ -22,20 +22,22 @@ import java.util.List; * @since 2025-11-14 */ @Service -public class LiquidTankTaskGenServiceImpl extends BaseServiceImpl implements ILiquidTankTaskGenService { +public class LiquidTankTaskGenServiceImpl extends BaseServiceImpl + implements ILiquidTankTaskGenService { - @Override - public IPage selectLiquidTankTaskPage(IPage page, LiquidTankTaskGenVO liquidTankTask) { - return page.setRecords(baseMapper.selectLiquidTankTaskPage(page, liquidTankTask)); - } + @Override + public IPage selectLiquidTankTaskPage(IPage page, + LiquidTankTaskGenVO liquidTankTask) { + return page.setRecords(baseMapper.selectLiquidTankTaskPage(page, liquidTankTask)); + } - @Override - public List exportLiquidTankTask(Wrapper queryWrapper) { - List liquidTankTaskList = baseMapper.exportLiquidTankTask(queryWrapper); - //liquidTankTaskList.forEach(liquidTankTask -> { - // liquidTankTask.setTypeName(DictCache.getValue(DictEnum.YES_NO, LiquidTankTask.getType())); - //}); - return liquidTankTaskList; - } + @Override + public List exportLiquidTankTask(Wrapper queryWrapper) { + List liquidTankTaskList = baseMapper.exportLiquidTankTask(queryWrapper); + //liquidTankTaskList.forEach(liquidTankTask -> { + // liquidTankTask.setTypeName(DictCache.getValue(DictEnum.YES_NO, LiquidTankTask.getType())); + //}); + return liquidTankTaskList; + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/util/IdUtil.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/util/IdUtil.java new file mode 100644 index 0000000..9a48973 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/util/IdUtil.java @@ -0,0 +1,53 @@ +package org.springblade.desk.quality.util; + +import org.apache.commons.lang3.StringUtils; + +/** + * 雪花 long id工具类。 + */ +public class IdUtil { + + /** + * eg: 1123598821738675203 + */ + public static final int ID_LENGTH = 19; + public static final Long DEFAULT_ID = 0L; + + /** + * id有效 + * + * @param id + * @return + */ + public static Boolean isValid(Long id) { + return !isInvalid(id); + } + + /** + * id无效 + * + * @param id + * @return + */ + public static Boolean isInvalid(Long id) { + // + if (id == null || id == 0L || id < 0L || String.valueOf(id).length() != ID_LENGTH) { + return Boolean.TRUE; + } else { + return Boolean.FALSE; + } + } + + public static Boolean isAllValid(Long[] ids) { + for (Long id : ids) { + if (isInvalid(id)) { + return Boolean.FALSE; + } + } + return Boolean.TRUE; + } + + public static Boolean isAnyInvalid(Long[] ids) { + return isAllValid(ids); + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/util/RoleUtil.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/util/RoleUtil.java new file mode 100644 index 0000000..e56d367 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/util/RoleUtil.java @@ -0,0 +1,21 @@ +package org.springblade.desk.quality.util; + +import org.apache.commons.lang3.StringUtils; +import org.springblade.core.secure.utils.AuthUtil; + +public class RoleUtil { + + + /** + * API权限 + * todo: + * @param roleAlias + * @return + */ + public static Boolean hasRole(String roleAlias) { + if (StringUtils.isBlank(roleAlias)) { + throw new IllegalArgumentException("roleAlias参数错误"); + } + return false; + } +}