You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

382 lines
9.7 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. package com.dreamworks.boditech.controller;
  2. import com.dreamworks.boditech.controller.entity.ApiResponse;
  3. import com.dreamworks.boditech.driver.Device;
  4. import com.dreamworks.boditech.driver.actuator.ActIncubator;
  5. import com.dreamworks.boditech.driver.actuator.ActModuleIncubatorTemperature;
  6. import com.dreamworks.boditech.driver.actuator.ActModuleTestCardBoxCaseTemperature;
  7. import com.dreamworks.boditech.driver.actuator.ActuatorModule;
  8. import com.dreamworks.boditech.driver.entity.*;
  9. import com.dreamworks.boditech.driver.task.Task;
  10. import com.dreamworks.boditech.service.DeviceService;
  11. import jakarta.annotation.Resource;
  12. import org.springframework.beans.factory.annotation.Value;
  13. import org.springframework.stereotype.Controller;
  14. import org.springframework.web.bind.annotation.*;
  15. import java.io.IOException;
  16. import java.util.*;
  17. @Controller
  18. public class DeviceController extends BaseController {
  19. @Resource
  20. private DeviceService deviceService;
  21. @ResponseBody
  22. @PostMapping("/api/device/power-off")
  23. public ApiResponse powerOff() {
  24. DeviceService theDeviceService = this.deviceService;
  25. TimerTask timerTask = new TimerTask() {
  26. @Override
  27. public void run() {
  28. theDeviceService.powerOff();
  29. }
  30. };
  31. Timer timer = new Timer();
  32. timer.schedule(timerTask, 1000);
  33. return this.success();
  34. }
  35. @ResponseBody
  36. @PostMapping("/api/device/reboot")
  37. public ApiResponse reboot() {
  38. DeviceService theDeviceService = this.deviceService;
  39. TimerTask timerTask = new TimerTask() {
  40. @Override
  41. public void run() {
  42. theDeviceService.reboot();
  43. }
  44. };
  45. Timer timer = new Timer();
  46. timer.schedule(timerTask, 1000);
  47. return this.success();
  48. }
  49. /**
  50. * load consumable resources
  51. * @return api response
  52. */
  53. @ResponseBody
  54. @PostMapping("/api/device/load")
  55. public ApiResponse load() {
  56. this.deviceService.load();
  57. return this.success();
  58. }
  59. @ResponseBody
  60. @PostMapping("/api/device/unload")
  61. public ApiResponse unload() {
  62. this.deviceService.unload();
  63. return this.success();
  64. }
  65. @ResponseBody
  66. @PostMapping("/api/device/temperature-get")
  67. public ApiResponse temperatureGet() {
  68. Integer mid = ActuatorModule.TEST_CARD_BOX_CASE_TEMPERATURE;
  69. ActModuleTestCardBoxCaseTemperature module = (ActModuleTestCardBoxCaseTemperature)this.deviceService.device.getActuator(mid);
  70. Double temperature = module.getTemperature();
  71. return this.success(Map.of(
  72. "testCardBoxCase", temperature
  73. ));
  74. }
  75. @ResponseBody
  76. @PostMapping("/api/device/pipette-tip-update-by-box")
  77. public ApiResponse pipetteTipUpdate( @RequestBody ParamPipetteTipUpdate param ) {
  78. this.deviceService.pipetteTipUpdateByBox(param);
  79. return this.success();
  80. }
  81. @ResponseBody
  82. @PostMapping("/api/device/pipette-tip-box-status-get")
  83. public ApiResponse pipetteTipStatusGet() {
  84. return this.success(this.deviceService.device.pipetteTips.getAll());
  85. }
  86. @ResponseBody
  87. @PostMapping("/api/device/buffer-tube-update-by-box")
  88. public ApiResponse bufferTubeUpdateByBox( @RequestBody ParamBufferTubeUpdateByBox param) {
  89. this.deviceService.bufferTubeUpdateByBox(param);
  90. return this.success();
  91. }
  92. @ResponseBody
  93. @PostMapping("/api/device/status-get")
  94. public ApiResponse status() {
  95. String status = "READY";
  96. if ( this.deviceService.device.testCards.getIsLoaded() ) {
  97. status = "CONSUMABLES_LOADED";
  98. }
  99. if ( this.deviceService.isExecutorRunning() ) {
  100. status = this.deviceService.getExecutorWorkingStatus();
  101. }
  102. return this.success(Map.of("status", status));
  103. }
  104. @ResponseBody
  105. @PostMapping("/api/device/incubator-status-get")
  106. public ApiResponse incubatorStatusGet() {
  107. Device device = this.deviceService.device;
  108. ActIncubator incubator = (ActIncubator)device.getActuator(ActuatorModule.INCUBATOR_MOTOR);
  109. IncubatorSlot[] slots = incubator.getSlots();
  110. ActModuleIncubatorTemperature temperatureMod = (ActModuleIncubatorTemperature)device.getActuator(ActuatorModule.INCUBATOR_TEMPERATURE);
  111. Double temperature = temperatureMod.getTemperature();
  112. return this.success(Map.of(
  113. "temperature", temperature,
  114. "slots", slots
  115. ));
  116. }
  117. @ResponseBody
  118. @PostMapping("/api/device/start")
  119. public ApiResponse start() {
  120. this.deviceService.start();
  121. return this.success();
  122. }
  123. @ResponseBody
  124. @PostMapping("/api/device/stop")
  125. public ApiResponse stop() {
  126. this.deviceService.stop();
  127. return this.success();
  128. }
  129. @ResponseBody
  130. @PostMapping("/api/device/pause")
  131. public ApiResponse pause() {
  132. return this.success();
  133. }
  134. @ResponseBody
  135. @PostMapping("/api/device/resume")
  136. public ApiResponse resume() {
  137. return this.success();
  138. }
  139. private Integer initCount = 3;
  140. @ResponseBody
  141. @PostMapping("/api/device/init")
  142. public ApiResponse init() {
  143. if ( initCount > 0 ) {
  144. this.initCount --;
  145. ApiResponse response = new ApiResponse();
  146. response.success = false;
  147. response.message = "";
  148. response.data = List.of(
  149. Map.of("message","请确认试管帽夹中无试管帽","type","manual"),
  150. Map.of("message","移液枪复位","type","auto"),
  151. Map.of("message","机械臂复位","type","auto"),
  152. Map.of("message","孵育盘复位","type","auto")
  153. );
  154. return response;
  155. } else {
  156. this.initCount = 3;
  157. return this.success();
  158. }
  159. }
  160. @ResponseBody
  161. @PostMapping("/api/device/service-status-get")
  162. public ApiResponse serviceStatusGet() {
  163. String deviceConnection = this.deviceService.device.getConnectionStatus();
  164. // @TODO : 想个办法获取数据库连接状态
  165. String databaseConnection = "connected";
  166. return this.success(Map.of(
  167. "deviceConnection", deviceConnection,
  168. "databaseConnection", databaseConnection
  169. ));
  170. }
  171. @ResponseBody
  172. @PostMapping("/api/device/restore")
  173. public ApiResponse restore() {
  174. this.deviceService.reset(true);
  175. return this.success();
  176. }
  177. @ResponseBody
  178. @RequestMapping("/api/device/id-chip-status-get")
  179. public ApiResponse statusGet() {
  180. return this.success(Map.of(
  181. "status" , "OFFLINE"
  182. ));
  183. }
  184. @ResponseBody
  185. @PostMapping("/api/device/test-card-load")
  186. public ApiResponse testCardLoad(@RequestHeader(name="IS-FS-READY",required = false) String isFsReady ) {
  187. // @TODO : 删除该标记
  188. if ( "NO".equals(isFsReady) ) {
  189. return this.success();
  190. }
  191. this.deviceService.testCardLoad();
  192. return this.success();
  193. }
  194. @ResponseBody
  195. @PostMapping("/api/device/test-card-update-by-box")
  196. public ApiResponse testCardUpdateByBox( @RequestBody ParamTestCardUpdateByBox update ) {
  197. this.deviceService.testCardUpdateByBox(update);
  198. return this.success();
  199. }
  200. @ResponseBody
  201. @PostMapping("/api/device/test-card-status-get")
  202. public ApiResponse testCardStatusGet() {
  203. return this.success(this.deviceService.device.testCards.getAllBoxes());
  204. }
  205. @ResponseBody
  206. @PostMapping("/api/device/buffer-tube-load")
  207. public ApiResponse bufferTubeLoad() {
  208. // List<CsmBufferTube> list = this.deviceService.bufferTubeLoad();
  209. return this.success();
  210. }
  211. @ResponseBody
  212. @PostMapping("/api/device/buffer-tube-status-get")
  213. public ApiResponse bufferTubeStatusGet() {
  214. return this.success(this.deviceService.device.bufferTubes.getAllBoxes());
  215. }
  216. @ResponseBody
  217. @PostMapping("/api/device/large-buffer-tube-load")
  218. public ApiResponse largeBufferTubeLoad() {
  219. // List< CsmLargeBufferTube> list = this.deviceService.largeBufferTubeLoad();
  220. return this.success();
  221. }
  222. @ResponseBody
  223. @PostMapping("/api/device/large-buffer-tube-update")
  224. public ApiResponse largeBufferTubeUpdate(@RequestBody ParamLargeBufferTubeUpdate param) {
  225. this.deviceService.largeBufferTubeUpdate(param);
  226. return this.success();
  227. }
  228. @ResponseBody
  229. @PostMapping("/api/device/large-buffer-tube-status-get")
  230. public ApiResponse largeBufferTubeStatusGet() {
  231. return this.success(this.deviceService.device.largeBufferTubes.getAll());
  232. }
  233. @ResponseBody
  234. @PostMapping("/api/device/trash-box-status-get")
  235. public ApiResponse trashBoxStatusGet() {
  236. return this.success(Map.of(
  237. "status", "EMPTY"
  238. ));
  239. }
  240. @ResponseBody
  241. @PostMapping("/api/device/test-tube-rack-status-get")
  242. public ApiResponse testTubeRackStatusGet() {
  243. List<Map<String,Object>> tubes = new ArrayList<>();
  244. for ( int i=0; i<10; i++ ) {
  245. List<Map<String,Object>> tasks = new ArrayList<>();
  246. for ( int ti=0; ti<3; ti++ ) {
  247. Map<String,Object> task = new HashMap<>();
  248. task.put("projectName", "hsCRP");
  249. task.put("projectId", "01");
  250. tasks.add(task);
  251. }
  252. Map<String,Object> tube = new HashMap<>();
  253. tube.put("index", Integer.toString(i));
  254. tube.put("status", "WAITING");
  255. tube.put("sampleUID", "016");
  256. tube.put("sampleType","FB");
  257. tube.put("projects",tasks);
  258. tubes.add(tube);
  259. }
  260. return this.success(Map.of(
  261. "type" , "AUTO",
  262. "tubes", tubes
  263. ));
  264. }
  265. }