diff --git a/src/main/java/com/iflytop/gd/app/mapper/SystemConfigMapper.java b/src/main/java/com/iflytop/gd/app/mapper/SystemConfigMapper.java new file mode 100644 index 0000000..a219714 --- /dev/null +++ b/src/main/java/com/iflytop/gd/app/mapper/SystemConfigMapper.java @@ -0,0 +1,14 @@ +package com.iflytop.gd.app.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.iflytop.gd.app.model.entity.Ores; +import com.iflytop.gd.app.model.entity.SystemConfig; +import org.apache.ibatis.annotations.Mapper; + +/** + * 系统配置持久层接口 + */ +@Mapper +public interface SystemConfigMapper extends BaseMapper { + +} diff --git a/src/main/java/com/iflytop/gd/app/model/entity/SystemConfig.java b/src/main/java/com/iflytop/gd/app/model/entity/SystemConfig.java new file mode 100644 index 0000000..50ea070 --- /dev/null +++ b/src/main/java/com/iflytop/gd/app/model/entity/SystemConfig.java @@ -0,0 +1,22 @@ +package com.iflytop.gd.app.model.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.iflytop.gd.infrastructure.repository.base.BaseEntity; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Schema(description = "系统配置") +@TableName("system_config") +@Data +public class SystemConfig extends BaseEntity { + + @NotBlank + @Schema(description = "配置键") + private String key; + + @Schema(description = "配置值") + private String value; +} diff --git a/src/main/java/com/iflytop/gd/app/service/CraftsStepService.java b/src/main/java/com/iflytop/gd/app/service/CraftsStepService.java index 2f05262..8363c02 100644 --- a/src/main/java/com/iflytop/gd/app/service/CraftsStepService.java +++ b/src/main/java/com/iflytop/gd/app/service/CraftsStepService.java @@ -18,7 +18,6 @@ public class CraftsStepService { * @param heatId 加热区 ID * @param step 工艺步骤,包括 method 和 params * @return true 表示执行成功,false 表示失败 - * @throws InterruptedException 如果延时被中断 */ public boolean executeStep(String heatId, CraftsStep step){ String method = step.getMethod(); @@ -26,7 +25,8 @@ public class CraftsStepService { delay(3); return switch (method) { case "ADD_LIQUID" -> addLiquid(heatId, params); - case "SHAKING" -> shaking(heatId, params); + case "SHAKING" -> shaking(params); + case "HEATING" -> heating(heatId, params); case "TAKE_PHOTO" -> takePhoto(heatId); default -> true; }; @@ -36,15 +36,38 @@ public class CraftsStepService { * 添加溶液 */ private boolean addLiquid(String heatId, JSONObject params) { - // TODO: 从 params 中获取溶液类型、体积等参数并调用设备服务 + //if 判断加液区是否空闲 + //等待空闲 + //if 判断托盘电机是否升起 + //升起托盘 + //if 判断托盘是否有拍子 + //将机械臂移动至托盘上方 + //下降机械臂使夹爪可以夹住拍子 + //夹住拍子 + //机械臂提升至安全高度 + //下降拍子存放区1个位置 + //将机械臂移动至拍子存放区上方 + //下降机械臂 + //松开夹爪 + //将机械臂移动至托盘上方 + //下降机械臂使夹爪可以夹住托盘 + //机械臂提升至安全位置 + //移动机械臂至加液区 + //下降机械臂将托盘与试管落入加液区 + //松开夹爪 + //提升机械臂至安全高度 + //for 根据工艺配置添加溶液 + //加液机械臂移动至第N个试管 + //启动x加液泵添加m毫升溶液 return true; } /** * 摇匀操作 */ - private boolean shaking(String heatId, JSONObject params) { - // TODO: 从 params 中获取速度、时长等参数并调用设备服务 + private boolean shaking(JSONObject params) { + //判断加液区是否有托盘 + //进行摇匀 return true; } @@ -52,7 +75,26 @@ public class CraftsStepService { * 加热 */ private boolean heating(String heatId, JSONObject params) { - // TODO: 从 params 中获取温度、时长等参数并调用设备服务 + //if 判断加液区是否有托盘 + //将机械臂移动至加液区托盘上方 + //下降机械臂使夹爪可以夹住托盘 + //夹住托盘 + //将托盘提升至安全高度 + //将机械臂移动至加热区上方 + //下降机械臂使托盘与试管落入加热区 + //将机械臂提升至安全高度 + //移动机械臂至拍子存放区上方 + //下降机械臂使夹爪可以夹住拍子 + //提升机械臂携带拍子至安全高度 + //将机械臂移动至加热区托盘上方 + //降下机械臂使拍子盖住托盘试管 + //松开夹爪 + //提升机械臂至安全高度 + //降下托盘 + //根据配置开始加热 + //else + //根据配置开始加热 + //加热结束,提升托盘 return true; } @@ -60,7 +102,28 @@ public class CraftsStepService { * 拍照操作· */ private boolean takePhoto(String heatId) { - // TODO: 调用相机或设备服务执行拍照 + //if 判断加液位是否有托盘 + //进行拍照 + //else + //if 判断托盘电机是否升起 + //升起托盘 + //if 判断托盘是否有拍子 + //将机械臂移动至托盘上方 + //下降机械臂使夹爪可以夹住拍子 + //夹住拍子 + //机械臂提升至安全高度 + //下降拍子存放区1个位置 + //将机械臂移动至拍子存放区上方 + //下降机械臂 + //松开夹爪 + //将机械臂移动至托盘上方 + //下降机械臂使夹爪可以夹住托盘 + //机械臂提升至安全位置 + //移动机械臂至加液区 + //下降机械臂将托盘与试管落入加液区 + //松开夹爪 + //提升机械臂至安全高度 + //进行拍照 return true; } diff --git a/src/main/java/com/iflytop/gd/app/service/SystemConfigService.java b/src/main/java/com/iflytop/gd/app/service/SystemConfigService.java new file mode 100644 index 0000000..a2989e4 --- /dev/null +++ b/src/main/java/com/iflytop/gd/app/service/SystemConfigService.java @@ -0,0 +1,19 @@ +package com.iflytop.gd.app.service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.iflytop.gd.app.mapper.SystemConfigMapper; +import com.iflytop.gd.app.model.entity.SystemConfig; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +/** + * 系统配置业务实现类 + */ +@Service +@RequiredArgsConstructor +public class SystemConfigService extends ServiceImpl { + + private final SystemConfigMapper systemConfigMapper; + + +} diff --git a/src/main/java/com/iflytop/gd/common/enums/HeatModuleId.java b/src/main/java/com/iflytop/gd/common/enums/HeatModuleId.java new file mode 100644 index 0000000..21399a6 --- /dev/null +++ b/src/main/java/com/iflytop/gd/common/enums/HeatModuleId.java @@ -0,0 +1,34 @@ +package com.iflytop.gd.common.enums; + +/** + * 加热模块id枚举 + * 格式为 "heat_module_01" ~ "heat_module_06" + */ +public enum HeatModuleId { + MODULE_01("heat_module_01"), + MODULE_02("heat_module_02"), + MODULE_03("heat_module_03"), + MODULE_04("heat_module_04"), + MODULE_05("heat_module_05"), + MODULE_06("heat_module_06"); + + private final String id; + + HeatModuleId(String id) { + this.id = id; + } + + /** + * 获取对应的加热模块 ID + * + * @return 模块唯一标识 + */ + public String getId() { + return id; + } + + @Override + public String toString() { + return id; + } +} diff --git a/src/main/java/com/iflytop/gd/common/enums/TrayLiftStatus.java b/src/main/java/com/iflytop/gd/common/enums/TrayLiftStatus.java new file mode 100644 index 0000000..a6a9571 --- /dev/null +++ b/src/main/java/com/iflytop/gd/common/enums/TrayLiftStatus.java @@ -0,0 +1,9 @@ +package com.iflytop.gd.common.enums; + +/** + * 托盘升降状态 + */ +public enum TrayLiftStatus { + UP, + DOWN +} diff --git a/src/main/java/com/iflytop/gd/infrastructure/modules/CapArea.java b/src/main/java/com/iflytop/gd/infrastructure/modules/CapArea.java deleted file mode 100644 index 6db0b25..0000000 --- a/src/main/java/com/iflytop/gd/infrastructure/modules/CapArea.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.iflytop.gd.infrastructure.modules; - -/** - * 拍子存放区 - */ -public class CapArea { -} diff --git a/src/main/java/com/iflytop/gd/infrastructure/modules/Device.java b/src/main/java/com/iflytop/gd/infrastructure/modules/Device.java new file mode 100644 index 0000000..a83d0d1 --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/modules/Device.java @@ -0,0 +1,36 @@ +package com.iflytop.gd.infrastructure.modules; + +import com.iflytop.gd.infrastructure.modules.area.*; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class Device { + /** + * 加热区 + */ + private final HeatArea heatArea; + /** + * 加液区 + */ + private final LiquidArea liquidArea; + /** + * 导轨机械臂 + */ + private final RailArmArea railArmArea; + /** + * 拍子存放区 + */ + private final CapArea capArea; + /** + * 冷阱 + */ + private final ColdTrapArea coldTrapArea; + /** + * 门 + */ + private final DoorArea doorArea; + + +} diff --git a/src/main/java/com/iflytop/gd/infrastructure/modules/HeatArea.java b/src/main/java/com/iflytop/gd/infrastructure/modules/HeatArea.java deleted file mode 100644 index 42ee1f8..0000000 --- a/src/main/java/com/iflytop/gd/infrastructure/modules/HeatArea.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.iflytop.gd.infrastructure.modules; - -/** - * 加热区 - */ -public class HeatArea { -} diff --git a/src/main/java/com/iflytop/gd/infrastructure/modules/LiquidArea.java b/src/main/java/com/iflytop/gd/infrastructure/modules/LiquidArea.java deleted file mode 100644 index f318627..0000000 --- a/src/main/java/com/iflytop/gd/infrastructure/modules/LiquidArea.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.iflytop.gd.infrastructure.modules; - -/** - * 加液区 - */ -public class LiquidArea { -} diff --git a/src/main/java/com/iflytop/gd/infrastructure/modules/RailArm.java b/src/main/java/com/iflytop/gd/infrastructure/modules/RailArm.java deleted file mode 100644 index d5d53e2..0000000 --- a/src/main/java/com/iflytop/gd/infrastructure/modules/RailArm.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.iflytop.gd.infrastructure.modules; - -/** - * 导轨机械臂 - */ -public class RailArm { -} diff --git a/src/main/java/com/iflytop/gd/infrastructure/modules/area/CapArea.java b/src/main/java/com/iflytop/gd/infrastructure/modules/area/CapArea.java new file mode 100644 index 0000000..e8062c8 --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/modules/area/CapArea.java @@ -0,0 +1,10 @@ +package com.iflytop.gd.infrastructure.modules.area; + +import org.springframework.stereotype.Component; + +/** + * 拍子存放区 + */ +@Component +public class CapArea { +} diff --git a/src/main/java/com/iflytop/gd/infrastructure/modules/area/ColdTrapArea.java b/src/main/java/com/iflytop/gd/infrastructure/modules/area/ColdTrapArea.java new file mode 100644 index 0000000..b0b23ca --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/modules/area/ColdTrapArea.java @@ -0,0 +1,10 @@ +package com.iflytop.gd.infrastructure.modules.area; + +import org.springframework.stereotype.Component; + +/** + * 冷阱 + */ +@Component +public class ColdTrapArea { +} diff --git a/src/main/java/com/iflytop/gd/infrastructure/modules/area/DoorArea.java b/src/main/java/com/iflytop/gd/infrastructure/modules/area/DoorArea.java new file mode 100644 index 0000000..0d0c12c --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/modules/area/DoorArea.java @@ -0,0 +1,10 @@ +package com.iflytop.gd.infrastructure.modules.area; + +import org.springframework.stereotype.Component; + +/** + * 门 + */ +@Component +public class DoorArea { +} diff --git a/src/main/java/com/iflytop/gd/infrastructure/modules/area/HeatArea.java b/src/main/java/com/iflytop/gd/infrastructure/modules/area/HeatArea.java new file mode 100644 index 0000000..030a2af --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/modules/area/HeatArea.java @@ -0,0 +1,36 @@ +package com.iflytop.gd.infrastructure.modules.area; + +import com.iflytop.gd.common.enums.HeatModuleId; +import com.iflytop.gd.infrastructure.modules.model.bo.HeatModule; +import com.iflytop.gd.system.devices.StepMotor; +import jakarta.annotation.PostConstruct; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * 加热区 + */ +@Component +public class HeatArea { + /** + * 加热模块 + */ + private final List heatModuleList = Collections.synchronizedList(new ArrayList<>()); + + @PostConstruct + private void init(){ + for (HeatModuleId moduleId : HeatModuleId.values()) { + HeatModule heatModule = new HeatModule(); + heatModule.setHeatId(moduleId); +// heatModule.setLiftMotor(); + + + heatModuleList.add(heatModule); + System.out.println("模块枚举名: " + moduleId.name() + + ",模块 ID: " + moduleId.getId()); + } + } +} diff --git a/src/main/java/com/iflytop/gd/infrastructure/modules/area/LiquidArea.java b/src/main/java/com/iflytop/gd/infrastructure/modules/area/LiquidArea.java new file mode 100644 index 0000000..0d73006 --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/modules/area/LiquidArea.java @@ -0,0 +1,10 @@ +package com.iflytop.gd.infrastructure.modules.area; + +import org.springframework.stereotype.Component; + +/** + * 加液区 + */ +@Component +public class LiquidArea { +} diff --git a/src/main/java/com/iflytop/gd/infrastructure/modules/area/RailArmArea.java b/src/main/java/com/iflytop/gd/infrastructure/modules/area/RailArmArea.java new file mode 100644 index 0000000..9a7e662 --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/modules/area/RailArmArea.java @@ -0,0 +1,10 @@ +package com.iflytop.gd.infrastructure.modules.area; + +import org.springframework.stereotype.Component; + +/** + * 导轨机械臂 + */ +@Component +public class RailArmArea { +} diff --git a/src/main/java/com/iflytop/gd/infrastructure/modules/model/bo/HeatModule.java b/src/main/java/com/iflytop/gd/infrastructure/modules/model/bo/HeatModule.java new file mode 100644 index 0000000..23d7ea4 --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/modules/model/bo/HeatModule.java @@ -0,0 +1,67 @@ +package com.iflytop.gd.infrastructure.modules.model.bo; + +import com.iflytop.gd.common.enums.HeatModuleId; +import com.iflytop.gd.common.enums.TrayLiftStatus; +import com.iflytop.gd.system.devices.StepMotor; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.Duration; +import java.time.LocalDateTime; + +/** + * 加热区的加热模块 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class HeatModule { + /** + * 加热区ID + */ + private HeatModuleId heatId; + + /** + * 升降电机 + */ + private StepMotor liftMotor; + + /** + * 当前升降状态:抬起(RAISED) 或 降下(LOWERED) + */ + private TrayLiftStatus liftStatus = TrayLiftStatus.DOWN; + + /** + * 是否正在加热 + */ + private boolean heating = false; + + /** + * 目标温度,单位:摄氏度 + */ + private double targetTemperature = 0; + + /** + * 开始加热时间 + */ + private LocalDateTime startHeatingTime; + + /** + * 加热持续时间 + */ + private Duration heatingDuration; + + /** + * 是否存在托盘 + */ + private boolean hasTray = false; + + /** + * 是否存在拍子 + */ + private boolean hasCap = false; + +} diff --git a/src/main/resources/sql/init.sql b/src/main/resources/sql/init.sql index 700729b..8e8eaed 100644 --- a/src/main/resources/sql/init.sql +++ b/src/main/resources/sql/init.sql @@ -78,7 +78,7 @@ VALUES (6, '磷酸', '2025-02-18 02:46:43', '2025-02-18 02:46:43'), (7, '纯水', '2025-02-18 02:46:50', '2025-02-18 02:46:50'); --- 设备参数配置表 +-- 设备参数配置 表 CREATE TABLE IF NOT EXISTS device_param_config ( id INTEGER PRIMARY KEY AUTOINCREMENT, mid TEXT, @@ -87,3 +87,12 @@ CREATE TABLE IF NOT EXISTS device_param_config ( create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); + +-- 系统配置 表 +CREATE TABLE IF NOT EXISTS system_config ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + key TEXT NOT NULL UNIQUE, + value TEXT, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); \ No newline at end of file