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
182 lines
7.0 KiB
package com.iflytop.a800.controller;
|
|
import com.iflytop.a800.TaskManager;
|
|
import com.iflytop.a800.model.*;
|
|
import com.iflytop.a800.resource.TestTube;
|
|
import com.iflytop.a800.task.TubeRackTask;
|
|
import com.iflytop.a800.task.TubeTestTask;
|
|
import com.iflytop.uf.UfActiveRecord;
|
|
import com.iflytop.uf.controller.UfApiControllerBase;
|
|
import com.iflytop.uf.controller.UfApiResponse;
|
|
import com.iflytop.uf.model.UfMdbDictItem;
|
|
import com.iflytop.uf.util.UfJsonHelper;
|
|
import org.springframework.stereotype.Controller;
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
@Controller
|
|
public class TestController extends UfApiControllerBase {
|
|
@PostMapping("/api/test/emergency-task-get")
|
|
@ResponseBody
|
|
public UfApiResponse emergencyTaskGet() {
|
|
var task = UfActiveRecord.findOne(MdbEmergencyTestTask.class, Map.of("isFinished", "no"));
|
|
return this.success(task);
|
|
}
|
|
|
|
@PostMapping("/api/test/emergency-task-append")
|
|
@ResponseBody
|
|
public UfApiResponse emergencyTaskAppend(@RequestBody Map<String, Object> params) {
|
|
List<String> projectIds = (List<String>)params.get("projectIds");
|
|
|
|
var taskModel = new MdbEmergencyTestTask();
|
|
taskModel.attenuation = (String)params.get("attenuation");
|
|
taskModel.barCode = (String)params.get("barCode");
|
|
taskModel.projectDetectType = (String)params.get("projectDetectType");
|
|
taskModel.projectIds = UfJsonHelper.objectToJson(projectIds);
|
|
taskModel.sampleTypeDetectType = (String)params.get("sampleTypeDetectType");
|
|
taskModel.sampleType = (String)params.get("sampleType");
|
|
taskModel.sampleUid = (String)params.get("sampleUid");
|
|
taskModel.status = UfMdbDictItem.getValue("TEST_TASK_STATUS", "NEW");
|
|
taskModel.isFinished = "no";
|
|
taskModel.createdAt = System.currentTimeMillis();
|
|
taskModel.save();
|
|
|
|
var tube = new TestTube();
|
|
tube.isExisted = true;
|
|
tube.type = "EmergencyTube";
|
|
tube.barCode = taskModel.barCode;
|
|
tube.index = 0;
|
|
|
|
var taskMan = TaskManager.getInstance();
|
|
for ( var projectId : projectIds ) {
|
|
var project = UfActiveRecord.findOne(MdbProject.class, Map.of("id", projectId));
|
|
var testTask = new TubeTestTask();
|
|
testTask.tube = tube;
|
|
testTask.project = project;
|
|
taskMan.append(testTask);
|
|
}
|
|
|
|
return this.success();
|
|
}
|
|
|
|
@PostMapping("/api/test/test-tube-rack-list")
|
|
@ResponseBody
|
|
public UfApiResponse testTubeRackList() {
|
|
var tasks = UfActiveRecord.find(MdbTubeRackTestTask.class);
|
|
|
|
var list = new ArrayList<Map<String, Object>>();
|
|
for ( var task : tasks ) {
|
|
var item = task.toMap();
|
|
var tubeList = new ArrayList<Map<String, Object>>();
|
|
for ( var tube : task.getTubes() ) {
|
|
var tubeItem = tube.toMap();
|
|
tubeItem.put("projects", tube.getProjects());
|
|
tubeItem.put("projectIds", tube.getProjectIdList());
|
|
tubeList.add(tubeItem);
|
|
}
|
|
item.put("tubes", tubeList);
|
|
list.add(item);
|
|
}
|
|
|
|
return this.success(list);
|
|
}
|
|
|
|
@PostMapping("/api/test/test-tube-rack-save")
|
|
@ResponseBody
|
|
public UfApiResponse tubeRackTaskSave(@RequestBody Map<String, Object> params) {
|
|
var task = new MdbTubeRackTestTask();
|
|
task.id = (String)params.get("id");
|
|
task.isNewRecord = null == params.get("id");
|
|
task.setAttributes(params);
|
|
task.status = UfMdbDictItem.getValue("TUBE_RACK_TASK_STATUS", "CONFIGURING");
|
|
task.save();
|
|
|
|
var oldTubes = UfActiveRecord.find(MdbTubeRackTestTaskTube.class, Map.of("rackId", task.id));
|
|
for ( var tube : oldTubes ) {
|
|
tube.delete();
|
|
}
|
|
|
|
var tubes = (List<Map<String, Object>>)params.get("tubes");
|
|
for ( var tube : tubes ) {
|
|
var projectIds = (List<String>)tube.get("projectIds");
|
|
tube.put("projectIds", UfJsonHelper.objectToJson(projectIds));
|
|
var tubeModel = new MdbTubeRackTestTaskTube();
|
|
tubeModel.rackId = task.id;
|
|
tubeModel.status = UfMdbDictItem.getValue("TUBE_STATUS", "NEW");
|
|
tubeModel.setAttributes(tube);
|
|
tubeModel.save();
|
|
}
|
|
|
|
return this.success(task);
|
|
}
|
|
|
|
@PostMapping("/api/test/test-tube-rack-delete")
|
|
@ResponseBody
|
|
public UfApiResponse tubeRackTaskDelete(@RequestBody Map<String, Object> params) {
|
|
String id = (String)params.get("id");
|
|
var task = UfActiveRecord.findOne(MdbTubeRackTestTask.class, id);
|
|
task.delete();
|
|
return this.success();
|
|
}
|
|
|
|
@PostMapping("/api/test/test-tube-rack-lock")
|
|
@ResponseBody
|
|
public UfApiResponse tubeRackTaskLock(@RequestBody Map<String, Object> params) {
|
|
String id = (String)params.get("id");
|
|
var task = UfActiveRecord.findOne(MdbTubeRackTestTask.class, id);
|
|
task.status = UfMdbDictItem.getValue("TUBE_RACK_TASK_STATUS", "WAITING");
|
|
task.save();
|
|
|
|
// 如果没有正在执行的试管架任务则提交任务
|
|
var taskMan = TaskManager.getInstance();
|
|
var testTask = new TubeRackTask(task);
|
|
taskMan.append(testTask);
|
|
return this.success();
|
|
}
|
|
|
|
@PostMapping("/api/test/test-tube-rack-unlock")
|
|
@ResponseBody
|
|
public UfApiResponse tubeRackTaskUnlock(@RequestBody Map<String, Object> params) {
|
|
String id = (String)params.get("id");
|
|
var task = UfActiveRecord.findOne(MdbTubeRackTestTask.class, id);
|
|
task.status = UfMdbDictItem.getValue("TUBE_RACK_TASK_STATUS", "CONFIGURING");
|
|
task.save();
|
|
return this.success();
|
|
}
|
|
|
|
@PostMapping("/api/test/test-tube-rack-status-get")
|
|
@ResponseBody
|
|
public UfApiResponse tubeRackStatusGet() {
|
|
var statusProcessing = UfMdbDictItem.getValue("TUBE_RACK_TASK_STATUS", "PROCESSING");
|
|
var rack = UfActiveRecord.findOne(MdbTubeRackTestTask.class, Map.of("status", statusProcessing));
|
|
if ( null == rack ) {
|
|
return this.success(null);
|
|
}
|
|
|
|
var tubeList = new ArrayList<Map<String, Object>>();
|
|
var tubes = rack.getTubes();
|
|
for ( var tube : tubes ) {
|
|
var tubeItem = tube.toMap();
|
|
tubeItem.put("projects", tube.getProjects());
|
|
tubeList.add(tubeItem);
|
|
}
|
|
|
|
var result = rack.toMap();
|
|
result.put("tubes", tubeList);
|
|
return this.success(result);
|
|
}
|
|
|
|
@PostMapping("/api/test/active-batch-list")
|
|
@ResponseBody
|
|
public UfApiResponse activeBatchList() {
|
|
var tests = UfActiveRecord.find(MdbTest.class);
|
|
var list = new ArrayList<Map<String, Object>>();
|
|
for ( var test : tests ) {
|
|
var item = test.toMap();
|
|
list.add(item);
|
|
}
|
|
return this.success(list);
|
|
}
|
|
}
|