Browse Source

feat:增加托盘试管控制服务

master
白凤吉 2 weeks ago
parent
commit
845cfe475e
  1. 19
      src/main/java/com/iflytop/colortitration/app/common/enums/TitrationStatus.java
  2. 37
      src/main/java/com/iflytop/colortitration/app/controller/TraytController.java
  3. 32
      src/main/java/com/iflytop/colortitration/app/controller/TubeController.java
  4. 10
      src/main/java/com/iflytop/colortitration/app/core/state/DeviceState.java
  5. 11
      src/main/java/com/iflytop/colortitration/app/core/state/TubeState.java
  6. 19
      src/main/java/com/iflytop/colortitration/app/model/dto/TrayTubeSetExistDTO.java
  7. 6
      src/main/java/com/iflytop/colortitration/app/service/DeviceInitService.java
  8. 51
      src/main/java/com/iflytop/colortitration/app/service/TrayService.java
  9. 25
      src/main/java/com/iflytop/colortitration/app/service/TubeService.java

19
src/main/java/com/iflytop/colortitration/app/common/enums/TitrationStatus.java

@ -0,0 +1,19 @@
package com.iflytop.colortitration.app.common.enums;
/**
* 滴定状态
*/
public enum TitrationStatus {
/**
* 滴定未开始
*/
NOT_STARTED,
/**
* 滴定进行中
*/
IN_PROGRESS,
/**
* 滴定完毕
*/
COMPLETED;
}

37
src/main/java/com/iflytop/colortitration/app/controller/TraytController.java

@ -0,0 +1,37 @@
package com.iflytop.colortitration.app.controller;
import com.iflytop.colortitration.app.common.enums.MultipleModuleCode;
import com.iflytop.colortitration.app.service.TrayService;
import com.iflytop.colortitration.common.result.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Tag(name = "试管")
@RestController
@RequestMapping("/api/tray")
@RequiredArgsConstructor
@Slf4j
public class TraytController {
private final TrayService trayService;
@Operation(summary = "放入一个托盘")
@PostMapping("/tray-in")
public Result<?> trayIn(MultipleModuleCode moduleCode) {
trayService.trayIn(moduleCode);
return Result.success();
}
@Operation(summary = "拿走一个托盘")
@PostMapping("/tray-out")
public Result<?> trayOut(MultipleModuleCode moduleCode) {
trayService.trayOut(moduleCode);
return Result.success();
}
}

32
src/main/java/com/iflytop/colortitration/app/controller/TubeController.java

@ -0,0 +1,32 @@
package com.iflytop.colortitration.app.controller;
import com.iflytop.colortitration.app.model.dto.TrayTubeSetExistDTO;
import com.iflytop.colortitration.app.service.TubeService;
import com.iflytop.colortitration.common.result.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Tag(name = "试管")
@RestController
@RequestMapping("/api/tube")
@RequiredArgsConstructor
@Slf4j
public class TubeController {
private final TubeService tubeService;
@Operation(summary = "修改托盘是否存在试管")
@PutMapping("/set-tube-exist")
public Result<?> setTubeExist(@RequestBody List<TrayTubeSetExistDTO> trayTubeSetExistDTOList) {
tubeService.setTubeExist(trayTubeSetExistDTOList);
return Result.success();
}
}

10
src/main/java/com/iflytop/colortitration/app/core/state/DeviceState.java

@ -24,11 +24,8 @@ public class DeviceState {
@Schema(description = "加热模块") @Schema(description = "加热模块")
private final Map<MultipleModuleCode, HeatModuleState> heatModuleStateMap = new HashMap<>(); private final Map<MultipleModuleCode, HeatModuleState> heatModuleStateMap = new HashMap<>();
@Schema(description = "托盘1 试管状态")
private final Map<Integer, TubeState> trayTubeStateMap1 = new HashMap<>();
@Schema(description = "托盘2 试管状态")
private final Map<Integer, TubeState> trayTubeStateMap2 = new HashMap<>();
@Schema(description = "试管状态")
private final Map<Integer, TubeState> trayTubeStateMap = new HashMap<>();
@Schema(description = "托盘1是否存在,true 存在 false不存在") @Schema(description = "托盘1是否存在,true 存在 false不存在")
private boolean trayExist1 = false; private boolean trayExist1 = false;
@ -54,8 +51,7 @@ public class DeviceState {
public JSONObject toJSON() { public JSONObject toJSON() {
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
json.putOnce("titrationModule", new ArrayList<>(titrationModuleStateMap.values())); json.putOnce("titrationModule", new ArrayList<>(titrationModuleStateMap.values()));
json.putOnce("tray1TubeState", new ArrayList<>(trayTubeStateMap1.values()));
json.putOnce("tray2TubeState", new ArrayList<>(trayTubeStateMap2.values()));
json.putOnce("trayTubeState", new ArrayList<>(trayTubeStateMap.values()));
json.putOnce("trayExist1", virtual); json.putOnce("trayExist1", virtual);
json.putOnce("trayExist2", virtual); json.putOnce("trayExist2", virtual);
json.putOnce("virtual", virtual); json.putOnce("virtual", virtual);

11
src/main/java/com/iflytop/colortitration/app/core/state/TubeState.java

@ -1,6 +1,7 @@
package com.iflytop.colortitration.app.core.state; package com.iflytop.colortitration.app.core.state;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.iflytop.colortitration.app.common.enums.TitrationStatus;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -18,8 +19,11 @@ public class TubeState {
@Schema(description = "试管位编号") @Schema(description = "试管位编号")
private Integer bubeNum; private Integer bubeNum;
@Schema(description = "是否存在试管")
private boolean trayExist = false;
@Schema(description = "是否存在试管,true 存在 false不存在")
private boolean bubeExist = true;
@Schema(description = "滴定状态")
private TitrationStatus titrationStatus = TitrationStatus.NOT_STARTED;
@Schema(description = "体积") @Schema(description = "体积")
private Double volume; private Double volume;
@ -27,4 +31,7 @@ public class TubeState {
@Schema(description = "结果") @Schema(description = "结果")
private Double result; private Double result;
public TubeState(Integer bubeNum) {
this.bubeNum = bubeNum;
}
} }

19
src/main/java/com/iflytop/colortitration/app/model/dto/TrayTubeSetExistDTO.java

@ -0,0 +1,19 @@
package com.iflytop.colortitration.app.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Schema(description = "是否存在试管")
@Data
public class TrayTubeSetExistDTO {
@NotNull
@Schema(description = "试管编号")
private Integer tubeNum;
@NotNull
@Schema(description = "是否存在试管 true存在 false不存在")
private Boolean bubeExist;
}

6
src/main/java/com/iflytop/colortitration/app/service/DeviceInitService.java

@ -19,7 +19,7 @@ public class DeviceInitService {
private final AppEventBusService eventBus; private final AppEventBusService eventBus;
private boolean isLink = false; private boolean isLink = false;
private final DeviceState deviceState; private final DeviceState deviceState;
private final ObjectProvider<TitrationModule> trayStateObjectProvider;
private final ObjectProvider<TitrationModule> titrationModuleObjectProvider;
@PostConstruct @PostConstruct
public void init() { public void init() {
@ -46,10 +46,10 @@ public class DeviceInitService {
public void initDeviceState() { public void initDeviceState() {
log.info("初始化 initDeviceState"); log.info("初始化 initDeviceState");
TitrationModule trayModule1 = trayStateObjectProvider.getObject();
TitrationModule trayModule1 = titrationModuleObjectProvider.getObject();
trayModule1.setModuleCode(MultipleModuleCode.MODULE_1); trayModule1.setModuleCode(MultipleModuleCode.MODULE_1);
deviceState.getTitrationModuleStateMap().put(MultipleModuleCode.MODULE_1, trayModule1); deviceState.getTitrationModuleStateMap().put(MultipleModuleCode.MODULE_1, trayModule1);
TitrationModule trayModule2 = trayStateObjectProvider.getObject();
TitrationModule trayModule2 = titrationModuleObjectProvider.getObject();
trayModule2.setModuleCode(MultipleModuleCode.MODULE_2); trayModule2.setModuleCode(MultipleModuleCode.MODULE_2);
deviceState.getTitrationModuleStateMap().put(MultipleModuleCode.MODULE_2, trayModule2); deviceState.getTitrationModuleStateMap().put(MultipleModuleCode.MODULE_2, trayModule2);
log.info("初始化 initDeviceState完毕"); log.info("初始化 initDeviceState完毕");

51
src/main/java/com/iflytop/colortitration/app/service/TrayService.java

@ -0,0 +1,51 @@
package com.iflytop.colortitration.app.service;
import com.iflytop.colortitration.app.common.enums.MultipleModuleCode;
import com.iflytop.colortitration.app.core.state.DeviceState;
import com.iflytop.colortitration.app.core.state.TubeState;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.stereotype.Service;
@Slf4j
@Service
@RequiredArgsConstructor
public class TrayService {
private final DeviceState deviceState;
private final ObjectProvider<TubeState> tubeStateObjectProvider;
/**
* 放入了一个新托盘
*/
public synchronized void trayIn(MultipleModuleCode moduleCode) {
if (MultipleModuleCode.MODULE_1.equals(moduleCode)) {
for (int i = 1; i < 17; i++) {
deviceState.getTrayTubeStateMap().put(i, tubeStateObjectProvider.getObject(i));
}
deviceState.setTrayExist1(true);
} else if (MultipleModuleCode.MODULE_2.equals(moduleCode)) {
for (int i = 17; i < 33; i++) {
deviceState.getTrayTubeStateMap().put(i, tubeStateObjectProvider.getObject(i));
}
deviceState.setTrayExist2(true);
}
}
/**
* 拿走了托盘
*/
public synchronized void trayOut(MultipleModuleCode moduleCode) {
if (MultipleModuleCode.MODULE_1.equals(moduleCode)) {
for (int i = 1; i < 17; i++) {
deviceState.getTrayTubeStateMap().remove(i);
}
deviceState.setTrayExist1(false);
} else if (MultipleModuleCode.MODULE_2.equals(moduleCode)) {
for (int i = 17; i < 33; i++) {
deviceState.getTrayTubeStateMap().remove(i);
}
deviceState.setTrayExist2(false);
}
}
}

25
src/main/java/com/iflytop/colortitration/app/service/TubeService.java

@ -0,0 +1,25 @@
package com.iflytop.colortitration.app.service;
import com.iflytop.colortitration.app.core.state.DeviceState;
import com.iflytop.colortitration.app.model.dto.TrayTubeSetExistDTO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
@Slf4j
@Service
@RequiredArgsConstructor
public class TubeService {
private final DeviceState deviceState;
/**
* 修改托盘中试管是否存在
*/
public void setTubeExist(List<TrayTubeSetExistDTO> trayTubeSetExistDTOList) {
for (TrayTubeSetExistDTO trayTubeSetExistDTO : trayTubeSetExistDTOList) {
deviceState.getTrayTubeStateMap().get(trayTubeSetExistDTO.getTubeNum()).setBubeExist(trayTubeSetExistDTO.getBubeExist());
}
}
}
Loading…
Cancel
Save