From a99500344d54cb83dd17af373d9ff70f07d8ca11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=A2=A6=E8=BF=9C?= <1063331231@qq.com> Date: Tue, 27 May 2025 19:12:37 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=A2=9E=E5=8A=A0=E9=A2=84=E5=85=85?= =?UTF-8?q?=E5=BC=80=E5=A7=8B=20=E7=BB=93=E6=9D=9F=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sgs/app/cmd/control/AnnealStopCommand.java | 1 - .../sgs/app/cmd/control/LiquidAddCommand.java | 2 +- .../app/cmd/control/LiquidPreFillStartCommand.java | 62 ++++++++++++++++++++++ .../app/cmd/control/LiquidPreFillStopCommand.java | 52 ++++++++++++++++++ .../iflytop/sgs/app/model/entity/Solutions.java | 4 ++ .../device/module/SolutionModuleService.java | 9 ++++ .../sgs/common/enums/data/DevicePositionCode.java | 18 +++++++ .../com/iflytop/sgs/common/result/ResultCode.java | 1 + src/main/resources/sql/init.sql | 13 ++--- 9 files changed, 154 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/iflytop/sgs/app/cmd/control/LiquidPreFillStartCommand.java create mode 100644 src/main/java/com/iflytop/sgs/app/cmd/control/LiquidPreFillStopCommand.java diff --git a/src/main/java/com/iflytop/sgs/app/cmd/control/AnnealStopCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/control/AnnealStopCommand.java index d2ad72e..169fa42 100644 --- a/src/main/java/com/iflytop/sgs/app/cmd/control/AnnealStopCommand.java +++ b/src/main/java/com/iflytop/sgs/app/cmd/control/AnnealStopCommand.java @@ -39,7 +39,6 @@ public class AnnealStopCommand extends BaseCommandHandler { for (int i = 0; i < heatModuleCodeJsonArray.size(); i++) { String targetHeatModuleCodeStr = heatModuleCodeJsonArray.getStr(i); HeatModuleCode targetHeatModuleCode = HeatModuleCode.valueOf(targetHeatModuleCodeStr);//目标退火模块 - Assert.isTrue(targetHeatModuleCode != null, () -> new AppException(ResultCode.PARAMETER_TYPE_MISMATCH));//参数检验 HeatModuleState heatModuleState = deviceStateService.getDeviceState().getHeatModuleByCode(targetHeatModuleCode);//获取退火区的状态 Assert.isTrue(heatModuleState.getHeatingType().equals(HeatingType.annealing), () -> new AppException(ResultCode.TARGET_HEAT_MODULE_NOT_ANNEAL));//判断退火区状态 heatModuleService.heatRodClose(cmdDTO.getCommandId(), cmdDTO.getCommand(), targetHeatModuleCode);//关闭加热棒 diff --git a/src/main/java/com/iflytop/sgs/app/cmd/control/LiquidAddCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/control/LiquidAddCommand.java index b6a492a..c403068 100644 --- a/src/main/java/com/iflytop/sgs/app/cmd/control/LiquidAddCommand.java +++ b/src/main/java/com/iflytop/sgs/app/cmd/control/LiquidAddCommand.java @@ -42,7 +42,7 @@ public class LiquidAddCommand extends BaseCommandHandler { @Override public CompletableFuture handle(CmdDTO cmdDTO) { - + //todo 更新阀的状态 return runAsync(() -> { diff --git a/src/main/java/com/iflytop/sgs/app/cmd/control/LiquidPreFillStartCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/control/LiquidPreFillStartCommand.java new file mode 100644 index 0000000..e050e2d --- /dev/null +++ b/src/main/java/com/iflytop/sgs/app/cmd/control/LiquidPreFillStartCommand.java @@ -0,0 +1,62 @@ +package com.iflytop.sgs.app.cmd.control; + +import cn.hutool.core.lang.Assert; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import com.iflytop.sgs.app.core.BaseCommandHandler; +import com.iflytop.sgs.app.model.bo.Point3D; +import com.iflytop.sgs.app.model.bo.status.device.TransferModuleState; +import com.iflytop.sgs.app.model.dto.CmdDTO; +import com.iflytop.sgs.app.model.entity.Solutions; +import com.iflytop.sgs.app.service.api.DevicePositionService; +import com.iflytop.sgs.app.service.api.SolutionsService; +import com.iflytop.sgs.app.service.api.SystemConfigService; +import com.iflytop.sgs.app.service.device.DeviceStateService; +import com.iflytop.sgs.app.service.device.module.SolutionModuleService; +import com.iflytop.sgs.app.service.device.module.TransferModuleService; +import com.iflytop.sgs.common.annotation.CommandMapping; +import com.iflytop.sgs.common.enums.ValveStateCode; +import com.iflytop.sgs.common.enums.data.DevicePositionCode; +import com.iflytop.sgs.common.exception.AppException; +import com.iflytop.sgs.common.result.ResultCode; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.concurrent.CompletableFuture; + +/** + * 添加溶液 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@CommandMapping("liquid_pre_fill_start")//业务指令注解 +public class LiquidPreFillStartCommand extends BaseCommandHandler { + private final SolutionModuleService solutionModuleService; + private final DeviceStateService deviceStateService; + private final DevicePositionService devicePositionService; + private final TransferModuleService transferModuleService; + private final SystemConfigService systemConfigService; + private final SolutionsService solutionsService; + + @Override + public CompletableFuture handle(CmdDTO cmdDTO) { + Assert.isTrue(deviceStateService.getDeviceState().getSolutionModule().isIdle(), () -> new AppException(ResultCode.SOLUTION_MODULE_IS_BUSY));//判断当前加液区状态 + Integer solutionId = cmdDTO.getIntegerParam("solutionId");//解析参数酸液Id + Solutions solutions = solutionsService.getById(solutionId);//数据库获取酸液信息 + Assert.notNull(solutions, () -> new AppException(ResultCode.OPERATION_NOT_ALLOWED));//检验参数 + ValveStateCode valveStateCode = ValveStateCode.valueOf(solutions.getCode());//获取对应的电磁阀通道 + Point3D liquidAreaTrayPoint = devicePositionService.getPosition(DevicePositionCode.liquidAreaTrayPoint).getPoint3D(); //获取加液区上方点位 + double position=devicePositionService.getPosition(DevicePositionCode.solutionPreFillDistance).getDistance();//预充开始 + return runAsync(() -> { + deviceStateService.getDeviceState().getSolutionModule().setIdle(true);//设置占用 + deviceStateService.getDeviceState().getSolutionModule().setPumping(true);//设置正在加液 + solutionModuleService.liquidValveSwitch(cmdDTO.getCommandId(), cmdDTO.getCommand(), valveStateCode);//电磁阀对应的酸液通道打开 + solutionModuleService.solutionMotorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), 0);//加液机械臂上升 + transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint);//移动至加液位置 + solutionModuleService.liquidPumpMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), position);//预充开始 + }); + } +} + diff --git a/src/main/java/com/iflytop/sgs/app/cmd/control/LiquidPreFillStopCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/control/LiquidPreFillStopCommand.java new file mode 100644 index 0000000..f74ce49 --- /dev/null +++ b/src/main/java/com/iflytop/sgs/app/cmd/control/LiquidPreFillStopCommand.java @@ -0,0 +1,52 @@ +package com.iflytop.sgs.app.cmd.control; + +import cn.hutool.core.lang.Assert; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import com.iflytop.sgs.app.core.BaseCommandHandler; +import com.iflytop.sgs.app.model.bo.Point3D; +import com.iflytop.sgs.app.model.bo.status.device.TransferModuleState; +import com.iflytop.sgs.app.model.dto.CmdDTO; +import com.iflytop.sgs.app.model.entity.Solutions; +import com.iflytop.sgs.app.service.api.DevicePositionService; +import com.iflytop.sgs.app.service.api.SolutionsService; +import com.iflytop.sgs.app.service.api.SystemConfigService; +import com.iflytop.sgs.app.service.device.DeviceStateService; +import com.iflytop.sgs.app.service.device.module.SolutionModuleService; +import com.iflytop.sgs.app.service.device.module.TransferModuleService; +import com.iflytop.sgs.common.annotation.CommandMapping; +import com.iflytop.sgs.common.enums.ValveStateCode; +import com.iflytop.sgs.common.enums.data.DevicePositionCode; +import com.iflytop.sgs.common.exception.AppException; +import com.iflytop.sgs.common.result.ResultCode; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.concurrent.CompletableFuture; + +/** + * 添加溶液 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@CommandMapping("liquid_add")//业务指令注解 +public class LiquidPreFillStopCommand extends BaseCommandHandler { + private final SolutionModuleService solutionModuleService; + private final DeviceStateService deviceStateService; + private final DevicePositionService devicePositionService; + private final TransferModuleService transferModuleService; + private final SystemConfigService systemConfigService; + private final SolutionsService solutionsService; + + @Override + public CompletableFuture handle(CmdDTO cmdDTO) { + return runAsync(() -> { + solutionModuleService.liquidPumpStop(cmdDTO.getCommandId(), cmdDTO.getCommand());//停止预充 + deviceStateService.getDeviceState().getSolutionModule().setIdle(false);//设置占用解除 + deviceStateService.getDeviceState().getSolutionModule().setPumping(false);//设置加液结束 + }); + } +} + diff --git a/src/main/java/com/iflytop/sgs/app/model/entity/Solutions.java b/src/main/java/com/iflytop/sgs/app/model/entity/Solutions.java index 4f85106..8e15129 100644 --- a/src/main/java/com/iflytop/sgs/app/model/entity/Solutions.java +++ b/src/main/java/com/iflytop/sgs/app/model/entity/Solutions.java @@ -17,4 +17,8 @@ public class Solutions extends BaseEntity { @Schema(description = "溶液名称") private String name; + @NotNull + @Schema(description = "溶液code") + private String code; + } diff --git a/src/main/java/com/iflytop/sgs/app/service/device/module/SolutionModuleService.java b/src/main/java/com/iflytop/sgs/app/service/device/module/SolutionModuleService.java index 07ab1f2..6faa6c1 100644 --- a/src/main/java/com/iflytop/sgs/app/service/device/module/SolutionModuleService.java +++ b/src/main/java/com/iflytop/sgs/app/service/device/module/SolutionModuleService.java @@ -112,6 +112,15 @@ public class SolutionModuleService { CommandUtil.wait(deviceCommandFuture); } + /** + * 加液泵停止 + */ + public void liquidPumpStop(String cmdId, String cmdCode) throws Exception { + DeviceCommandBundle deviceCommandBundle = DeviceCommandGenerator.liquidPumpStop(); + CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommandBundle); + CommandUtil.wait(deviceCommandFuture); + + } /** * 加液泵排空 diff --git a/src/main/java/com/iflytop/sgs/common/enums/data/DevicePositionCode.java b/src/main/java/com/iflytop/sgs/common/enums/data/DevicePositionCode.java index 63aebd5..2e76ad1 100644 --- a/src/main/java/com/iflytop/sgs/common/enums/data/DevicePositionCode.java +++ b/src/main/java/com/iflytop/sgs/common/enums/data/DevicePositionCode.java @@ -12,6 +12,24 @@ public enum DevicePositionCode { * 预充防滴落距离 */ antiDripDistance(DevicePositionType.DISTANCE, "预充防滴落距离"), + + /** + * 溶液首次预充距离 + * */ + solutionPreFillDistance(DevicePositionType.DISTANCE, "溶液首次预充距离"), + /* + * 稀硝酸预充距离 + * */ + thinPreFillDistance(DevicePositionType.DISTANCE,"稀硝酸预充距离"), + /* + * 浓硝酸预充距离 + * */ + thickPreFillDistance(DevicePositionType.DISTANCE,"浓硝酸预充距离"), + /** + * + * 蒸馏水预充距离 + * */ + waterPreFillDistance(DevicePositionType.DISTANCE,"蒸馏水预充距离"), /** * 托盘试管水平间距 */ diff --git a/src/main/java/com/iflytop/sgs/common/result/ResultCode.java b/src/main/java/com/iflytop/sgs/common/result/ResultCode.java index 747c29d..d20531f 100644 --- a/src/main/java/com/iflytop/sgs/common/result/ResultCode.java +++ b/src/main/java/com/iflytop/sgs/common/result/ResultCode.java @@ -59,6 +59,7 @@ public enum ResultCode implements IResultCode, Serializable { TRANSFER_MODULE_NO_TRAY("6026", "转运模块无托盘"), SOLUTION_MODULE_NO_TRAY("6027", "加液模块无托盘"), FEED_AREA_NO_TRAY("6028", "上料区无托盘"), + SOLUTION_MODULE_IS_BUSY("6029", "加液模块正忙"), ; /** 状态码 */ private final String code; diff --git a/src/main/resources/sql/init.sql b/src/main/resources/sql/init.sql index 02bd5fa..72bc28d 100644 --- a/src/main/resources/sql/init.sql +++ b/src/main/resources/sql/init.sql @@ -46,7 +46,7 @@ CREATE TABLE IF NOT EXISTS system_config create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -INSERT OR IGNORE INTO system_config (id ,name ,code ,value) +INSERT OR IGNORE INTO system_config (id, name, code, value) VALUES ('1', '稀硝酸容量与泵行程比率', 'scale_thin', '100'), ('2', '浓硝酸容量与泵行程比率', 'scale_thick', '100'), ('3', '蒸馏水容量与泵行程比率', 'scale_water', '100'), @@ -135,12 +135,13 @@ CREATE TABLE IF NOT EXISTS solutions ( id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR NOT NULL, + code VARCHAR NOT NULL, create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -INSERT OR IGNORE INTO solutions (id, name, create_time, update_time) -VALUES (1, '稀硝酸', '2025-02-18 02:44:07', '2025-02-18 02:44:07'), - (2, '浓硝酸', '2025-02-18 02:44:07', '2025-02-18 02:44:07'), - (3, '蒸馏水', '2025-02-18 02:44:07', '2025-02-18 02:44:07'), - (4, '废液', '2025-02-18 02:46:23', '2025-02-18 02:46:23'); \ No newline at end of file +INSERT OR IGNORE INTO solutions (id, name, code, create_time, update_time) +VALUES (1, '稀硝酸', 'thin', '2025-02-18 02:44:07', '2025-02-18 02:44:07'), + (2, '浓硝酸', 'thick', '2025-02-18 02:44:07', '2025-02-18 02:44:07'), + (3, '蒸馏水', 'water', '2025-02-18 02:44:07', '2025-02-18 02:44:07'), + (4, '废液', 'waste', '2025-02-18 02:46:23', '2025-02-18 02:46:23'); \ No newline at end of file