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.

182 lines
7.0 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. package com.iflytop.a800.controller;
  2. import com.iflytop.a800.TaskManager;
  3. import com.iflytop.a800.model.*;
  4. import com.iflytop.a800.resource.TestTube;
  5. import com.iflytop.a800.task.TubeRackTask;
  6. import com.iflytop.a800.task.TubeTestTask;
  7. import com.iflytop.uf.UfActiveRecord;
  8. import com.iflytop.uf.controller.UfApiControllerBase;
  9. import com.iflytop.uf.controller.UfApiResponse;
  10. import com.iflytop.uf.model.UfMdbDictItem;
  11. import com.iflytop.uf.util.UfJsonHelper;
  12. import org.springframework.stereotype.Controller;
  13. import org.springframework.web.bind.annotation.PostMapping;
  14. import org.springframework.web.bind.annotation.RequestBody;
  15. import org.springframework.web.bind.annotation.ResponseBody;
  16. import java.util.ArrayList;
  17. import java.util.List;
  18. import java.util.Map;
  19. @Controller
  20. public class TestController extends UfApiControllerBase {
  21. @PostMapping("/api/test/emergency-task-get")
  22. @ResponseBody
  23. public UfApiResponse emergencyTaskGet() {
  24. var task = UfActiveRecord.findOne(MdbEmergencyTestTask.class, Map.of("isFinished", "no"));
  25. return this.success(task);
  26. }
  27. @PostMapping("/api/test/emergency-task-append")
  28. @ResponseBody
  29. public UfApiResponse emergencyTaskAppend(@RequestBody Map<String, Object> params) {
  30. List<String> projectIds = (List<String>)params.get("projectIds");
  31. var taskModel = new MdbEmergencyTestTask();
  32. taskModel.attenuation = (String)params.get("attenuation");
  33. taskModel.barCode = (String)params.get("barCode");
  34. taskModel.projectDetectType = (String)params.get("projectDetectType");
  35. taskModel.projectIds = UfJsonHelper.objectToJson(projectIds);
  36. taskModel.sampleTypeDetectType = (String)params.get("sampleTypeDetectType");
  37. taskModel.sampleType = (String)params.get("sampleType");
  38. taskModel.sampleUid = (String)params.get("sampleUid");
  39. taskModel.status = UfMdbDictItem.getValue("TEST_TASK_STATUS", "NEW");
  40. taskModel.isFinished = "no";
  41. taskModel.createdAt = System.currentTimeMillis();
  42. taskModel.save();
  43. var tube = new TestTube();
  44. tube.isExisted = true;
  45. tube.type = "EmergencyTube";
  46. tube.barCode = taskModel.barCode;
  47. tube.index = 0;
  48. var taskMan = TaskManager.getInstance();
  49. for ( var projectId : projectIds ) {
  50. var project = UfActiveRecord.findOne(MdbProject.class, Map.of("id", projectId));
  51. var testTask = new TubeTestTask();
  52. testTask.tube = tube;
  53. testTask.project = project;
  54. taskMan.append(testTask);
  55. }
  56. return this.success();
  57. }
  58. @PostMapping("/api/test/test-tube-rack-list")
  59. @ResponseBody
  60. public UfApiResponse testTubeRackList() {
  61. var tasks = UfActiveRecord.find(MdbTubeRackTestTask.class);
  62. var list = new ArrayList<Map<String, Object>>();
  63. for ( var task : tasks ) {
  64. var item = task.toMap();
  65. var tubeList = new ArrayList<Map<String, Object>>();
  66. for ( var tube : task.getTubes() ) {
  67. var tubeItem = tube.toMap();
  68. tubeItem.put("projects", tube.getProjects());
  69. tubeItem.put("projectIds", tube.getProjectIdList());
  70. tubeList.add(tubeItem);
  71. }
  72. item.put("tubes", tubeList);
  73. list.add(item);
  74. }
  75. return this.success(list);
  76. }
  77. @PostMapping("/api/test/test-tube-rack-save")
  78. @ResponseBody
  79. public UfApiResponse tubeRackTaskSave(@RequestBody Map<String, Object> params) {
  80. var task = new MdbTubeRackTestTask();
  81. task.id = (String)params.get("id");
  82. task.isNewRecord = null == params.get("id");
  83. task.setAttributes(params);
  84. task.status = UfMdbDictItem.getValue("TUBE_RACK_TASK_STATUS", "CONFIGURING");
  85. task.save();
  86. var oldTubes = UfActiveRecord.find(MdbTubeRackTestTaskTube.class, Map.of("rackId", task.id));
  87. for ( var tube : oldTubes ) {
  88. tube.delete();
  89. }
  90. var tubes = (List<Map<String, Object>>)params.get("tubes");
  91. for ( var tube : tubes ) {
  92. var projectIds = (List<String>)tube.get("projectIds");
  93. tube.put("projectIds", UfJsonHelper.objectToJson(projectIds));
  94. var tubeModel = new MdbTubeRackTestTaskTube();
  95. tubeModel.rackId = task.id;
  96. tubeModel.status = UfMdbDictItem.getValue("TUBE_STATUS", "NEW");
  97. tubeModel.setAttributes(tube);
  98. tubeModel.save();
  99. }
  100. return this.success(task);
  101. }
  102. @PostMapping("/api/test/test-tube-rack-delete")
  103. @ResponseBody
  104. public UfApiResponse tubeRackTaskDelete(@RequestBody Map<String, Object> params) {
  105. String id = (String)params.get("id");
  106. var task = UfActiveRecord.findOne(MdbTubeRackTestTask.class, id);
  107. task.delete();
  108. return this.success();
  109. }
  110. @PostMapping("/api/test/test-tube-rack-lock")
  111. @ResponseBody
  112. public UfApiResponse tubeRackTaskLock(@RequestBody Map<String, Object> params) {
  113. String id = (String)params.get("id");
  114. var task = UfActiveRecord.findOne(MdbTubeRackTestTask.class, id);
  115. task.status = UfMdbDictItem.getValue("TUBE_RACK_TASK_STATUS", "WAITING");
  116. task.save();
  117. // 如果没有正在执行的试管架任务则提交任务
  118. var taskMan = TaskManager.getInstance();
  119. var testTask = new TubeRackTask(task);
  120. taskMan.append(testTask);
  121. return this.success();
  122. }
  123. @PostMapping("/api/test/test-tube-rack-unlock")
  124. @ResponseBody
  125. public UfApiResponse tubeRackTaskUnlock(@RequestBody Map<String, Object> params) {
  126. String id = (String)params.get("id");
  127. var task = UfActiveRecord.findOne(MdbTubeRackTestTask.class, id);
  128. task.status = UfMdbDictItem.getValue("TUBE_RACK_TASK_STATUS", "CONFIGURING");
  129. task.save();
  130. return this.success();
  131. }
  132. @PostMapping("/api/test/test-tube-rack-status-get")
  133. @ResponseBody
  134. public UfApiResponse tubeRackStatusGet() {
  135. var statusProcessing = UfMdbDictItem.getValue("TUBE_RACK_TASK_STATUS", "PROCESSING");
  136. var rack = UfActiveRecord.findOne(MdbTubeRackTestTask.class, Map.of("status", statusProcessing));
  137. if ( null == rack ) {
  138. return this.success(null);
  139. }
  140. var tubeList = new ArrayList<Map<String, Object>>();
  141. var tubes = rack.getTubes();
  142. for ( var tube : tubes ) {
  143. var tubeItem = tube.toMap();
  144. tubeItem.put("projects", tube.getProjects());
  145. tubeList.add(tubeItem);
  146. }
  147. var result = rack.toMap();
  148. result.put("tubes", tubeList);
  149. return this.success(result);
  150. }
  151. @PostMapping("/api/test/active-batch-list")
  152. @ResponseBody
  153. public UfApiResponse activeBatchList() {
  154. var tests = UfActiveRecord.find(MdbTest.class);
  155. var list = new ArrayList<Map<String, Object>>();
  156. for ( var test : tests ) {
  157. var item = test.toMap();
  158. list.add(item);
  159. }
  160. return this.success(list);
  161. }
  162. }