Browse Source

feat:定义分区

tags/freeze
白凤吉 3 months ago
parent
commit
7acedfe91e
  1. 14
      src/main/java/com/iflytop/gd/app/mapper/SystemConfigMapper.java
  2. 22
      src/main/java/com/iflytop/gd/app/model/entity/SystemConfig.java
  3. 77
      src/main/java/com/iflytop/gd/app/service/CraftsStepService.java
  4. 19
      src/main/java/com/iflytop/gd/app/service/SystemConfigService.java
  5. 34
      src/main/java/com/iflytop/gd/common/enums/HeatModuleId.java
  6. 9
      src/main/java/com/iflytop/gd/common/enums/TrayLiftStatus.java
  7. 7
      src/main/java/com/iflytop/gd/infrastructure/modules/CapArea.java
  8. 36
      src/main/java/com/iflytop/gd/infrastructure/modules/Device.java
  9. 7
      src/main/java/com/iflytop/gd/infrastructure/modules/HeatArea.java
  10. 7
      src/main/java/com/iflytop/gd/infrastructure/modules/LiquidArea.java
  11. 7
      src/main/java/com/iflytop/gd/infrastructure/modules/RailArm.java
  12. 10
      src/main/java/com/iflytop/gd/infrastructure/modules/area/CapArea.java
  13. 10
      src/main/java/com/iflytop/gd/infrastructure/modules/area/ColdTrapArea.java
  14. 10
      src/main/java/com/iflytop/gd/infrastructure/modules/area/DoorArea.java
  15. 36
      src/main/java/com/iflytop/gd/infrastructure/modules/area/HeatArea.java
  16. 10
      src/main/java/com/iflytop/gd/infrastructure/modules/area/LiquidArea.java
  17. 10
      src/main/java/com/iflytop/gd/infrastructure/modules/area/RailArmArea.java
  18. 67
      src/main/java/com/iflytop/gd/infrastructure/modules/model/bo/HeatModule.java
  19. 11
      src/main/resources/sql/init.sql

14
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<SystemConfig> {
}

22
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;
}

77
src/main/java/com/iflytop/gd/app/service/CraftsStepService.java

@ -18,7 +18,6 @@ public class CraftsStepService {
* @param heatId 加热区 ID * @param heatId 加热区 ID
* @param step 工艺步骤包括 method params * @param step 工艺步骤包括 method params
* @return true 表示执行成功false 表示失败 * @return true 表示执行成功false 表示失败
* @throws InterruptedException 如果延时被中断
*/ */
public boolean executeStep(String heatId, CraftsStep step){ public boolean executeStep(String heatId, CraftsStep step){
String method = step.getMethod(); String method = step.getMethod();
@ -26,7 +25,8 @@ public class CraftsStepService {
delay(3); delay(3);
return switch (method) { return switch (method) {
case "ADD_LIQUID" -> addLiquid(heatId, params); 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); case "TAKE_PHOTO" -> takePhoto(heatId);
default -> true; default -> true;
}; };
@ -36,15 +36,38 @@ public class CraftsStepService {
* 添加溶液 * 添加溶液
*/ */
private boolean addLiquid(String heatId, JSONObject params) { private boolean addLiquid(String heatId, JSONObject params) {
// TODO: params 中获取溶液类型体积等参数并调用设备服务
//if 判断加液区是否空闲
//等待空闲
//if 判断托盘电机是否升起
//升起托盘
//if 判断托盘是否有拍子
//将机械臂移动至托盘上方
//下降机械臂使夹爪可以夹住拍子
//夹住拍子
//机械臂提升至安全高度
//下降拍子存放区1个位置
//将机械臂移动至拍子存放区上方
//下降机械臂
//松开夹爪
//将机械臂移动至托盘上方
//下降机械臂使夹爪可以夹住托盘
//机械臂提升至安全位置
//移动机械臂至加液区
//下降机械臂将托盘与试管落入加液区
//松开夹爪
//提升机械臂至安全高度
//for 根据工艺配置添加溶液
//加液机械臂移动至第N个试管
//启动x加液泵添加m毫升溶液
return true; return true;
} }
/** /**
* 摇匀操作 * 摇匀操作
*/ */
private boolean shaking(String heatId, JSONObject params) {
// TODO: params 中获取速度时长等参数并调用设备服务
private boolean shaking(JSONObject params) {
//判断加液区是否有托盘
//进行摇匀
return true; return true;
} }
@ -52,7 +75,26 @@ public class CraftsStepService {
* 加热 * 加热
*/ */
private boolean heating(String heatId, JSONObject params) { private boolean heating(String heatId, JSONObject params) {
// TODO: params 中获取温度时长等参数并调用设备服务
//if 判断加液区是否有托盘
//将机械臂移动至加液区托盘上方
//下降机械臂使夹爪可以夹住托盘
//夹住托盘
//将托盘提升至安全高度
//将机械臂移动至加热区上方
//下降机械臂使托盘与试管落入加热区
//将机械臂提升至安全高度
//移动机械臂至拍子存放区上方
//下降机械臂使夹爪可以夹住拍子
//提升机械臂携带拍子至安全高度
//将机械臂移动至加热区托盘上方
//降下机械臂使拍子盖住托盘试管
//松开夹爪
//提升机械臂至安全高度
//降下托盘
//根据配置开始加热
//else
//根据配置开始加热
//加热结束提升托盘
return true; return true;
} }
@ -60,7 +102,28 @@ public class CraftsStepService {
* 拍照操作· * 拍照操作·
*/ */
private boolean takePhoto(String heatId) { private boolean takePhoto(String heatId) {
// TODO: 调用相机或设备服务执行拍照
//if 判断加液位是否有托盘
//进行拍照
//else
//if 判断托盘电机是否升起
//升起托盘
//if 判断托盘是否有拍子
//将机械臂移动至托盘上方
//下降机械臂使夹爪可以夹住拍子
//夹住拍子
//机械臂提升至安全高度
//下降拍子存放区1个位置
//将机械臂移动至拍子存放区上方
//下降机械臂
//松开夹爪
//将机械臂移动至托盘上方
//下降机械臂使夹爪可以夹住托盘
//机械臂提升至安全位置
//移动机械臂至加液区
//下降机械臂将托盘与试管落入加液区
//松开夹爪
//提升机械臂至安全高度
//进行拍照
return true; return true;
} }

19
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<SystemConfigMapper, SystemConfig> {
private final SystemConfigMapper systemConfigMapper;
}

34
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;
}
}

9
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
}

7
src/main/java/com/iflytop/gd/infrastructure/modules/CapArea.java

@ -1,7 +0,0 @@
package com.iflytop.gd.infrastructure.modules;
/**
* 拍子存放区
*/
public class CapArea {
}

36
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;
}

7
src/main/java/com/iflytop/gd/infrastructure/modules/HeatArea.java

@ -1,7 +0,0 @@
package com.iflytop.gd.infrastructure.modules;
/**
* 加热区
*/
public class HeatArea {
}

7
src/main/java/com/iflytop/gd/infrastructure/modules/LiquidArea.java

@ -1,7 +0,0 @@
package com.iflytop.gd.infrastructure.modules;
/**
* 加液区
*/
public class LiquidArea {
}

7
src/main/java/com/iflytop/gd/infrastructure/modules/RailArm.java

@ -1,7 +0,0 @@
package com.iflytop.gd.infrastructure.modules;
/**
* 导轨机械臂
*/
public class RailArm {
}

10
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 {
}

10
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 {
}

10
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 {
}

36
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<HeatModule> 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());
}
}
}

10
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 {
}

10
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 {
}

67
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;
}

11
src/main/resources/sql/init.sql

@ -78,7 +78,7 @@ VALUES
(6, '磷酸', '2025-02-18 02:46:43', '2025-02-18 02:46:43'), (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'); (7, '纯水', '2025-02-18 02:46:50', '2025-02-18 02:46:50');
-- 设备参数配置表
-- 设备参数配置
CREATE TABLE IF NOT EXISTS device_param_config ( CREATE TABLE IF NOT EXISTS device_param_config (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
mid TEXT, mid TEXT,
@ -87,3 +87,12 @@ CREATE TABLE IF NOT EXISTS device_param_config (
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_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
);
Loading…
Cancel
Save