From cf92233369a1ecdc22ae878e7cd75f63fc5f180d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=A2=A6=E8=BF=9C?= <1063331231@qq.com> Date: Sat, 7 Jun 2025 17:13:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0system=5Fconfig=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E5=92=8C=E6=9B=B4=E6=96=B0=20=E8=87=AA=E6=A3=80?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0type=E5=8F=82=E6=95=B0=20=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E5=92=8C=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sgs/app/cmd/selftest/MoveTestCommand.java | 17 +++++++++++------ .../iflytop/sgs/app/controller/SystemController.java | 18 ++++++++++++++++++ .../iflytop/sgs/app/core/SelfMoveTestGenerator.java | 3 ++- .../app/model/bo/status/device/HeatModuleState.java | 8 ++++++++ .../sgs/app/service/crafts/CraftsStepService.java | 20 ++++++++++++++++---- .../sgs/app/service/device/DeviceSensorService.java | 6 +++++- 6 files changed, 60 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/iflytop/sgs/app/cmd/selftest/MoveTestCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/selftest/MoveTestCommand.java index 168ecb5..0140cd0 100644 --- a/src/main/java/com/iflytop/sgs/app/cmd/selftest/MoveTestCommand.java +++ b/src/main/java/com/iflytop/sgs/app/cmd/selftest/MoveTestCommand.java @@ -12,6 +12,7 @@ import com.iflytop.sgs.app.service.device.module.SolutionModuleService; import com.iflytop.sgs.app.service.device.module.TransferModuleService; import com.iflytop.sgs.app.ws.server.WebSocketSender; import com.iflytop.sgs.common.annotation.CommandMapping; +import com.iflytop.sgs.common.enums.DevicePartId; import com.iflytop.sgs.common.enums.DeviceSensorCode; import com.iflytop.sgs.common.enums.HeatModuleCode; import com.iflytop.sgs.common.enums.data.DevicePositionCode; @@ -53,22 +54,26 @@ public class MoveTestCommand extends BaseCommandHandler { deviceStateService.getCommandMutexState().get().setMoveTest(true); return runAsync(() -> { try { + boolean clawTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.CLAW_TRAY_EXIST); + if (clawTrayExist) { + webSocketService.pushSelfMoveTest(SelfMoveTestGenerator.generateJson(cmdDTO.getCommandId(), cmdDTO.getCommand(), "机械臂夹爪存在试管架,请取出!", 0, "error")); + throw new AppException(ResultCode.TRANSFER_MODULE_YES_TRAY);//夹爪存在托盘 + } deviceSensorService.collectSensorState();//收集传感器转态 - webSocketService.pushSelfMoveTest(SelfMoveTestGenerator.generateJson(cmdDTO.getCommandId(), cmdDTO.getCommand(), "1、各项传感器正常", 25)); + webSocketService.pushSelfMoveTest(SelfMoveTestGenerator.generateJson(cmdDTO.getCommandId(), cmdDTO.getCommand(), "1、各项传感器正常", 25, "success")); solutionModuleService.solutionMotorMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//加液机械臂抬升至最高 transferModuleService.transferZMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//Z轴抬升至最高 - transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(),liquidAreaTrayPoint3D);//转移至加液区托盘点位 - boolean clawTrayExist=deviceSensorService.getSensorStatus(DeviceSensorCode.CLAW_TRAY_EXIST); + transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint3D);//转移至加液区托盘点位 transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), annealHeatModuleTrayClawPoint3D.getX());//将X轴移动至托盘夹取点 solutionModuleService.solutionMotorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), solutionModuleMotorDownInTubeExtPositon);//加液模块下降进入试管抽取位置 solutionModuleService.solutionMotorMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//加液机械臂抬升至最高 - webSocketService.pushSelfMoveTest(SelfMoveTestGenerator.generateJson(cmdDTO.getCommandId(), cmdDTO.getCommand(), "2、加液模块升降电机检测完毕", 50)); + webSocketService.pushSelfMoveTest(SelfMoveTestGenerator.generateJson(cmdDTO.getCommandId(), cmdDTO.getCommand(), "2、加液模块升降电机检测完毕", 50, "success")); transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint3D.getX());//将X轴移动至加液时托盘位置点 transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), feedAreaTrayPoint3D.getX());//将X轴移动至上料区位置点 - webSocketService.pushSelfMoveTest(SelfMoveTestGenerator.generateJson(cmdDTO.getCommandId(), cmdDTO.getCommand(), "3、x轴电机检测完毕", 75)); + webSocketService.pushSelfMoveTest(SelfMoveTestGenerator.generateJson(cmdDTO.getCommandId(), cmdDTO.getCommand(), "3、x轴电机检测完毕", 75, "success")); transferModuleService.transferZMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), feedAreaTrayPoint3D.getZ());//Z轴下降至夹取点,使托盘落入上料区 transferModuleService.transferZMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//Z轴抬升至最高 - webSocketService.pushSelfMoveTest(SelfMoveTestGenerator.generateJson(cmdDTO.getCommandId(), cmdDTO.getCommand(), "4、z轴电机检测完毕", 100)); + webSocketService.pushSelfMoveTest(SelfMoveTestGenerator.generateJson(cmdDTO.getCommandId(), cmdDTO.getCommand(), "4、z轴电机检测完毕", 100, "success")); } finally { deviceStateService.getCommandMutexState().get().setMoveTest(false); } diff --git a/src/main/java/com/iflytop/sgs/app/controller/SystemController.java b/src/main/java/com/iflytop/sgs/app/controller/SystemController.java index 74f040a..21c2e65 100644 --- a/src/main/java/com/iflytop/sgs/app/controller/SystemController.java +++ b/src/main/java/com/iflytop/sgs/app/controller/SystemController.java @@ -2,6 +2,7 @@ package com.iflytop.sgs.app.controller; import com.iflytop.sgs.app.model.bo.status.device.DeviceState; import com.iflytop.sgs.app.model.dto.SetSystemDatetimeDTO; +import com.iflytop.sgs.app.model.entity.SystemConfig; import com.iflytop.sgs.app.service.api.SystemConfigService; import com.iflytop.sgs.app.service.device.DeviceStateService; import com.iflytop.sgs.common.result.Result; @@ -13,6 +14,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import java.time.Instant; +import java.util.List; @Tag(name = "系统") @RestController @@ -35,10 +37,26 @@ public class SystemController { systemConfigService.setDatetime(setSystemDatetimeDTO.getDatetime()); return Result.success(); } + @Operation(summary = "获取系统时间") @GetMapping("/datetime") public Result getDatetime() { return Result.success(Instant.now().toEpochMilli()); } + + @Operation(summary = "获取系统配置") + @GetMapping("/config-list") + public Result getConfigList() { + List systemConfigList = systemConfigService.list(); + return Result.success(systemConfigList); + } + + @Operation(summary = "更新系统配置") + @PostMapping("/update-config") + public Result updateConfig(@Valid @RequestBody SystemConfig systemConfig) { + return Result.success(systemConfigService.saveOrUpdate(systemConfig)); + } + + } diff --git a/src/main/java/com/iflytop/sgs/app/core/SelfMoveTestGenerator.java b/src/main/java/com/iflytop/sgs/app/core/SelfMoveTestGenerator.java index fa6d9be..195cad0 100644 --- a/src/main/java/com/iflytop/sgs/app/core/SelfMoveTestGenerator.java +++ b/src/main/java/com/iflytop/sgs/app/core/SelfMoveTestGenerator.java @@ -4,12 +4,13 @@ import cn.hutool.json.JSONObject; public class SelfMoveTestGenerator { - public static JSONObject generateJson(String commandId, String command, String title, Object schedule) { + public static JSONObject generateJson(String commandId, String command, String title, Object schedule,String type) { JSONObject jsonObject = new JSONObject(); jsonObject.set("commandId", commandId); jsonObject.set("command", command); jsonObject.set("title", title); jsonObject.set("schedule", schedule); + jsonObject.set("type", type); return jsonObject; } diff --git a/src/main/java/com/iflytop/sgs/app/model/bo/status/device/HeatModuleState.java b/src/main/java/com/iflytop/sgs/app/model/bo/status/device/HeatModuleState.java index 90e4ecc..276c57d 100644 --- a/src/main/java/com/iflytop/sgs/app/model/bo/status/device/HeatModuleState.java +++ b/src/main/java/com/iflytop/sgs/app/model/bo/status/device/HeatModuleState.java @@ -9,6 +9,8 @@ import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; +import java.time.LocalDateTime; + @Schema(description = "加热模块") @Data @Component @@ -46,6 +48,12 @@ public class HeatModuleState { @Schema(description = "加热器当前温度") private Double temperature = null; + @Schema(description = "加热器目标加热时间,单位秒") + private Integer targetTime = null; + + @Schema(description = "开始加热时间") + private LocalDateTime startHeatTime = null; + public HeatModuleState(HeatModuleCode moduleCode) { this.moduleCode = moduleCode; } diff --git a/src/main/java/com/iflytop/sgs/app/service/crafts/CraftsStepService.java b/src/main/java/com/iflytop/sgs/app/service/crafts/CraftsStepService.java index 1189bc5..22a03e4 100644 --- a/src/main/java/com/iflytop/sgs/app/service/crafts/CraftsStepService.java +++ b/src/main/java/com/iflytop/sgs/app/service/crafts/CraftsStepService.java @@ -29,6 +29,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -388,6 +389,9 @@ public class CraftsStepService { } log.info("工艺{},温度达到", heatModuleCode); webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "温度达到", temperature)); + deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.constant); //恒温中 + deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setStartHeatTime(LocalDateTime.now());//开始加热时间 + deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTargetTime(time);//加热器目标加热时间 int clock = 0; int cycle = time / 60; int seconds = cycle % 60; @@ -404,6 +408,7 @@ public class CraftsStepService { /*保存到工艺监控*/ } delay(seconds); + deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.finish); //加热完成 log.info("工艺{},加热结束", heatModuleCode); craftMonitor.setCurrentStepResult(String.valueOf(result)); craftMonitor.setDeviceState(JSONUtil.toJsonStr(deviceStateService.getDeviceState())); @@ -586,7 +591,7 @@ public class CraftsStepService { //Assert.isTrue(temperature != null && time != null, () -> new AppException(ResultCode.CRAFT_PARAMS_MISTAKE));//参数错误 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "打开加热棒", temperature)); heatModuleService.heatRodOpen(heatModuleCode, temperature);//打开加热棒 - deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.drying); //设置加热区状态 加热中 + deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.heating); //设置加热区状态 烘干中 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTargetTemperature(temperature);//将加热温度设定为目标温度 log.info("工艺{},开始加热", heatModuleCode); heatModuleService.heatRodOpen(heatModuleCode, temperature); @@ -594,6 +599,9 @@ public class CraftsStepService { while (!heatIsSuitable(heatModuleCode, temperature)) { //判断当前温度是否在设置温度范围内 delay(1); } + deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.drying); //烘干中 + deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setStartHeatTime(LocalDateTime.now());//开始加热时间 + deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTargetTime(time);//加热器目标加热时间 int clock = 0; result.set("time", clock);//添加到结果 craftMonitor.setCurrentStepResult(String.valueOf(result)); @@ -615,7 +623,7 @@ public class CraftsStepService { log.info("工艺{},关闭加热棒", heatModuleCode); webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "关闭加热棒", "")); heatModuleService.heatRodClose(heatModuleCode);//关闭加热棒 - deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.stop); //设置加热区状态 加热中 + deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.stop); //设置加热区状态 return true; } @@ -672,15 +680,17 @@ public class CraftsStepService { deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setTrayStatus(true); webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(HeatModuleCode.heat_module_04.name(), "打开加热棒", temperature)); - deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setHeatingType(HeatingType.annealing); //设置加热区状态 加热中 + deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setHeatingType(HeatingType.heating); //设置加热区状态 加热中 deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setTargetTemperature(temperature);//将加热温度设定为目标温度 log.info("工艺{},开始加热", heatModuleCode); heatModuleService.heatRodOpen(HeatModuleCode.heat_module_04, temperature);//打开加热棒 - deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setHeatingType(HeatingType.annealing); //设置加热区状态 加热中 //判断当前温度是否在设置温度范围内 while (!heatIsSuitable(HeatModuleCode.heat_module_04, temperature)) { delay(1); } + deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setHeatingType(HeatingType.annealing); //设置加热区状态退火中 + deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setStartHeatTime(LocalDateTime.now());//开始加热时间 + deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setTargetTime(time);//加热器目标加热时间 int clock = 0; result.set("time", clock);//添加到结果 craftMonitor.setCurrentStepResult(String.valueOf(result)); @@ -699,6 +709,8 @@ public class CraftsStepService { } log.info("工艺{},恒温中", HeatModuleCode.heat_module_04); delay(seconds); + + log.info("工艺{},加热完毕", heatModuleCode); log.info("工艺{},获取转运模组锁", heatModuleCode); transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_heat);//获取转运模组锁 diff --git a/src/main/java/com/iflytop/sgs/app/service/device/DeviceSensorService.java b/src/main/java/com/iflytop/sgs/app/service/device/DeviceSensorService.java index 69879dd..8583381 100644 --- a/src/main/java/com/iflytop/sgs/app/service/device/DeviceSensorService.java +++ b/src/main/java/com/iflytop/sgs/app/service/device/DeviceSensorService.java @@ -117,16 +117,20 @@ public class DeviceSensorService { HeatModuleState heat_module_04 = deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04); heat_module_04.setTrayStatus(this.getSensorStatus(DeviceSensorCode.HEATER_TRAY_4_EXIST)); + + SolutionModuleState solutionModuleState = deviceStateService.getDeviceState().getSolutionModule(); - //todo 需要确认传感器个数以及这个传感器是否是加液传感器 solutionModuleState.setFeedAreaTrayStatus(this.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST)); SolutionContainerState container_01 = solutionModuleState.getContainerStateByCode(ContainerCode.container_01); container_01.setEmpty(this.getSensorStatus(DeviceSensorCode.THIN_LOW_LEVEL)); + SolutionContainerState container_02 = solutionModuleState.getContainerStateByCode(ContainerCode.container_02); container_02.setEmpty(this.getSensorStatus(DeviceSensorCode.THICK_LOW_LEVEL)); + SolutionContainerState container_03 = solutionModuleState.getContainerStateByCode(ContainerCode.container_03); container_03.setEmpty(this.getSensorStatus(DeviceSensorCode.WATER_LOW_LEVEL)); + SolutionContainerState container_04 = solutionModuleState.getContainerStateByCode(ContainerCode.container_04); container_04.setFull(this.getSensorStatus(DeviceSensorCode.WASTE_HIGH_LEVEL));