From 7a3002c06623b400fe78ec69115f99ec61223bd3 Mon Sep 17 00:00:00 2001 From: sige Date: Mon, 25 Dec 2023 16:29:22 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=95=E7=AE=A1=E6=9E=B6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=88=97=E8=A1=A8=EF=BC=8C=E5=88=A0=E9=99=A4=EF=BC=8C=E9=94=81?= =?UTF-8?q?=E5=AE=9A=EF=BC=8C=E8=A7=A3=E9=99=A4=E9=94=81=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../boditech/controller/TestController.java | 165 +++++++-------------- .../parameter/ParamTestTubeRackTaskSaveTube.java | 2 +- .../dreamworks/boditech/mapper/ProjectMapper.java | 3 + .../mapper/TestTubeRackTestTaskMapper.java | 17 +++ .../mapper/TestTubeRackTestTaskTubeMapper.java | 11 +- .../boditech/service/ProjectService.java | 10 ++ .../dreamworks/boditech/service/TestService.java | 47 +++++- .../com/dreamworks/boditech/utils/MyCommon.java | 20 +++ 8 files changed, 157 insertions(+), 118 deletions(-) diff --git a/src/main/java/com/dreamworks/boditech/controller/TestController.java b/src/main/java/com/dreamworks/boditech/controller/TestController.java index f785685..ac5b882 100644 --- a/src/main/java/com/dreamworks/boditech/controller/TestController.java +++ b/src/main/java/com/dreamworks/boditech/controller/TestController.java @@ -1,8 +1,12 @@ package com.dreamworks.boditech.controller; import com.dreamworks.boditech.controller.entity.ApiResponse; import com.dreamworks.boditech.entity.MdbTestTubeRackTestTask; +import com.dreamworks.boditech.entity.MdbTestTubeRackTestTaskTube; +import com.dreamworks.boditech.entity.Project; import com.dreamworks.boditech.entity.parameter.ParamTestTubeRackTaskSave; +import com.dreamworks.boditech.service.ProjectService; import com.dreamworks.boditech.service.TestService; +import com.dreamworks.boditech.utils.MyCommon; import jakarta.annotation.Resource; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; @@ -16,6 +20,8 @@ import java.util.Map; public class TestController extends BaseController { @Resource private TestService testService; + @Resource + private ProjectService projectService; @ResponseBody @PostMapping("/api/test/test-tube-rack-save") @@ -28,101 +34,60 @@ public class TestController extends BaseController { @PostMapping("/api/test/test-tube-rack-list") public ApiResponse testTubeRackList() { List> list = new ArrayList<>(); - Map item = new HashMap<>(); - item.put("id", 1); - item.put("status", "WAITING"); - item.put("tubeTypeDetectType", "AUTO"); - item.put("tubeType", ""); - item.put("editable", false); - List> tubes = new ArrayList<>(); - for ( int i=0; i<10; i++ ) { - Map tube = new HashMap<>(); - tube.put("tubeIndex", Integer.toString(i)); - tube.put("projectDetectType", "MANUAL"); - List> projects = new ArrayList<>(); - for ( int pi=0; pi<3; pi++ ) { - Map project = new HashMap<>(); - project.put("id", Integer.toString(i)); - project.put("name", "hsCRP"); - project.put("color", "red"); - projects.add(project); - } - tube.put("projects", projects); - tube.put("sampleTypeDetectType", "MANUAL"); - tube.put("sampleUid", "016"); - tube.put("sampleType","WB"); - tube.put("barCode", "123456789"); - tube.put("preprocess", Map.of("preprocess",true)); - tubes.add(tube); - } - item.put("tubes", tubes); - list.add(item); - - Map item2 = new HashMap<>(); - item2.put("id", 2); - item2.put("status", "WAITING"); - item2.put("tubeTypeDetectType", "AUTO"); - item2.put("tubeType", ""); - item2.put("editable", false); - List> tubes2 = new ArrayList<>(); - for ( int i=0; i<10; i++ ) { - Map tube = new HashMap<>(); - tube.put("tubeIndex", Integer.toString(i)); - tube.put("projectDetectType", "MANUAL"); - List> projects = new ArrayList<>(); - for ( int pi=0; pi<1; pi++ ) { - Map project = new HashMap<>(); - project.put("id", Integer.toString(i)); - project.put("name", "hsCRP"); - project.put("color", "red"); - projects.add(project); - } - tube.put("projects", projects); - tube.put("sampleTypeDetectType", "MANUAL"); - tube.put("sampleUid", "016"); - tube.put("sampleType","WB"); - tube.put("barCode", "123456789"); - tube.put("preprocess", Map.of("preprocess",true)); - tubes2.add(tube); - } - item2.put("tubes", tubes); - list.add(item2); - - Map item3 = new HashMap<>(); - item3.put("id", 3); - item3.put("status", "CONFIGURING"); - item3.put("tubeTypeDetectType", "AUTO"); - item3.put("tubeType", ""); - item3.put("editable", true); - List> tubes3 = new ArrayList<>(); - for ( int i=0; i<10; i++ ) { - Map tube = new HashMap<>(); - tube.put("tubeIndex", Integer.toString(i)); - tube.put("projectDetectType", "MANUAL"); - List> projects = new ArrayList<>(); - for ( int pi=0; pi<1; pi++ ) { - Map project = new HashMap<>(); - project.put("id", Integer.toString(i)); - project.put("name", "hsCRP"); - project.put("color", "red"); - projects.add(project); + List racks = this.testService.testTubeRackTaskList(); + for ( MdbTestTubeRackTestTask rack : racks ) { + Map item = MyCommon.objectToMap(rack); + + // attach tubes to rack + List tubes = this.testService.testTubeRackTaskTubeListByRackId(rack.id); + List> tubeList = new ArrayList<>(); + for ( MdbTestTubeRackTestTaskTube tube : tubes ) { + Map tubeItem = MyCommon.objectToMap(tube); + + // attach projects to tube + String[] ids = tube.projectIds.isEmpty() ? new String[0] : tube.projectIds.split(","); + List projectIds = new ArrayList<>(); + List> projectList = new ArrayList<>(); + for ( String id : ids ) { + Project project = this.projectService.activeProjectGetById(Integer.parseInt(id)); + Map projectItem = MyCommon.objectToMap(project); + projectItem.remove("steps"); + projectList.add(projectItem); + projectIds.add(Integer.parseInt(id)); + } + tubeItem.put("projects", projectList); + tubeItem.put("projectIds", projectIds); + tubeList.add(tubeItem); } - tube.put("projects", projects); - tube.put("sampleTypeDetectType", "MANUAL"); - tube.put("sampleUid", "016"); - tube.put("sampleType","WB"); - tube.put("barCode", "123456789"); - tube.put("preprocess", Map.of("preprocess",true)); - tubes3.add(tube); + item.put("tubes", tubeList); + list.add(item); } - item3.put("tubes", tubes); - list.add(item3); - return this.success(list); } + @ResponseBody + @PostMapping("/api/test/test-tube-rack-delete") + public ApiResponse testTubeRackBatchDelete( @RequestBody Map params ) { + Integer id = Integer.parseInt(params.get("id").toString()); + this.testService.testTubeRackTaskDeleteById(id); + return this.success(); + } + @ResponseBody + @PostMapping("/api/test/test-tube-rack-lock") + public ApiResponse testTubeRackLock(@RequestBody Map params) { + Integer id = Integer.parseInt(params.get("id").toString()); + this.testService.testTubeRackTestLock(id); + return this.success(); + } + @ResponseBody + @PostMapping("/api/test/test-tube-rack-unlock") + public ApiResponse testTubeRackUnlock(@RequestBody Map params) { + Integer id = Integer.parseInt(params.get("id").toString()); + this.testService.testTubeRackTestUnlock(id); + return this.success(); + } @@ -164,30 +129,6 @@ public class TestController extends BaseController { } @ResponseBody - @PostMapping("/api/test/test-tube-rack-batch-delete") - public ApiResponse testTubeRackBatchDelete( @RequestBody Map params ) { - return this.success(); - } - - @ResponseBody - @PostMapping("/api/test/test-tube-rack-update") - public ApiResponse testTubeRackUpdate( @RequestBody Map params ) { - return this.success(); - } - - @ResponseBody - @PostMapping("/api/test/test-tube-rack-lock") - public ApiResponse testTubeRackLock() { - return this.success(); - } - - @ResponseBody - @PostMapping("/api/test/test-tube-rack-unlock") - public ApiResponse testTubeRackUnlock() { - return this.success(); - } - - @ResponseBody @PostMapping("/api/test/search") public ApiResponse search( @RequestBody Map params ) { List> list = new ArrayList<>(); diff --git a/src/main/java/com/dreamworks/boditech/entity/parameter/ParamTestTubeRackTaskSaveTube.java b/src/main/java/com/dreamworks/boditech/entity/parameter/ParamTestTubeRackTaskSaveTube.java index 7425f4e..cda79aa 100644 --- a/src/main/java/com/dreamworks/boditech/entity/parameter/ParamTestTubeRackTaskSaveTube.java +++ b/src/main/java/com/dreamworks/boditech/entity/parameter/ParamTestTubeRackTaskSaveTube.java @@ -2,7 +2,7 @@ package com.dreamworks.boditech.entity.parameter; import java.util.List; public class ParamTestTubeRackTaskSaveTube { // index of tube - public Integer tubeIndex; + public Integer index; // project detect type public String projectDetectType; // project ids diff --git a/src/main/java/com/dreamworks/boditech/mapper/ProjectMapper.java b/src/main/java/com/dreamworks/boditech/mapper/ProjectMapper.java index 9b5d44f..70835bb 100644 --- a/src/main/java/com/dreamworks/boditech/mapper/ProjectMapper.java +++ b/src/main/java/com/dreamworks/boditech/mapper/ProjectMapper.java @@ -2,6 +2,9 @@ package com.dreamworks.boditech.mapper; import com.dreamworks.boditech.entity.Project; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; + +import java.util.List; + @Mapper public interface ProjectMapper { @Select("SELECT * FROM bdt_projects WHERE id=#{id} LIMIT 1") diff --git a/src/main/java/com/dreamworks/boditech/mapper/TestTubeRackTestTaskMapper.java b/src/main/java/com/dreamworks/boditech/mapper/TestTubeRackTestTaskMapper.java index 40a6d59..c4791a5 100644 --- a/src/main/java/com/dreamworks/boditech/mapper/TestTubeRackTestTaskMapper.java +++ b/src/main/java/com/dreamworks/boditech/mapper/TestTubeRackTestTaskMapper.java @@ -2,6 +2,8 @@ package com.dreamworks.boditech.mapper; import com.dreamworks.boditech.entity.MdbTestTubeRackTestTask; import org.apache.ibatis.annotations.*; +import java.util.List; + @Mapper public interface TestTubeRackTestTaskMapper { @Insert("INSERT INTO btd_test_tube_rack_test_tasks " + @@ -21,6 +23,21 @@ public interface TestTubeRackTestTaskMapper { ) void update(MdbTestTubeRackTestTask task); + @Update("UPDATE btd_test_tube_rack_test_tasks SET " + + "editable = #{editable}, " + + "status = #{status}, " + + "updatedAt = #{updatedAt}, " + + "updatedBy = #{updatedBy} " + + "WHERE id = #{id}" + ) + void updateLock(MdbTestTubeRackTestTask task); + @Select("SELECT * FROM btd_test_tube_rack_test_tasks WHERE id = #{id}") MdbTestTubeRackTestTask findById(Integer id); + + @Select("SELECT * FROM btd_test_tube_rack_test_tasks ORDER BY createdAt DESC") + List findAll(); + + @Delete("DELETE FROM btd_test_tube_rack_test_tasks WHERE id = #{id}") + void deleteById(Integer id); } diff --git a/src/main/java/com/dreamworks/boditech/mapper/TestTubeRackTestTaskTubeMapper.java b/src/main/java/com/dreamworks/boditech/mapper/TestTubeRackTestTaskTubeMapper.java index 9ea431c..dd3b507 100644 --- a/src/main/java/com/dreamworks/boditech/mapper/TestTubeRackTestTaskTubeMapper.java +++ b/src/main/java/com/dreamworks/boditech/mapper/TestTubeRackTestTaskTubeMapper.java @@ -1,9 +1,9 @@ package com.dreamworks.boditech.mapper; import com.dreamworks.boditech.entity.MdbTestTubeRackTestTaskTube; -import org.apache.ibatis.annotations.Delete; -import org.apache.ibatis.annotations.Insert; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Options; +import org.apache.ibatis.annotations.*; + +import java.util.List; + @Mapper public interface TestTubeRackTestTaskTubeMapper { @Insert("INSERT INTO btd_test_tube_rack_test_task_tubes " + @@ -15,4 +15,7 @@ public interface TestTubeRackTestTaskTubeMapper { @Delete("DELETE FROM btd_test_tube_rack_test_task_tubes WHERE rackId = #{rackId}") void deleteAllByRackId(Integer rackId); + + @Select("SELECT * FROM btd_test_tube_rack_test_task_tubes WHERE rackId = #{rackId} ORDER BY `index` ASC") + List findAllByRackId(Integer rackId); } diff --git a/src/main/java/com/dreamworks/boditech/service/ProjectService.java b/src/main/java/com/dreamworks/boditech/service/ProjectService.java index ec23596..7601d61 100644 --- a/src/main/java/com/dreamworks/boditech/service/ProjectService.java +++ b/src/main/java/com/dreamworks/boditech/service/ProjectService.java @@ -23,6 +23,16 @@ public class ProjectService { } } + // get active project by given id + public Project activeProjectGetById( Integer id ) { + for ( Project project : this.projects ) { + if ( null != project && project.id.equals(id) ) { + return project; + } + } + throw new RuntimeException("PROJECT_CODE_NOT_ACTIVE"); + } + // get active project by given code num public Project activeProjectGetByCodeNum( Integer codeNum, String lotCode ) { for ( Project project : this.projects ) { diff --git a/src/main/java/com/dreamworks/boditech/service/TestService.java b/src/main/java/com/dreamworks/boditech/service/TestService.java index 7a46e6e..d26b020 100644 --- a/src/main/java/com/dreamworks/boditech/service/TestService.java +++ b/src/main/java/com/dreamworks/boditech/service/TestService.java @@ -78,7 +78,7 @@ public class TestService { for (ParamTestTubeRackTaskSaveTube tube : param.tubes) { MdbTestTubeRackTestTaskTube item = new MdbTestTubeRackTestTaskTube(); item.rackId = task.id; - item.index = tube.tubeIndex; + item.index = tube.index; item.projectDetectType = tube.projectDetectType; item.sampleTypeDetectType = tube.sampleTypeDetectType; item.sampleType = tube.sampleType; @@ -94,8 +94,53 @@ public class TestService { } } + // test tube rack task list + public List testTubeRackTaskList() { + return this.testTubeRackTestTaskMapper.findAll(); + } + + // test tube rack task tube list + public List testTubeRackTaskTubeListByRackId(Integer rackId) { + return this.testTubeRackTestTaskTubeMapper.findAllByRackId(rackId); + } + // test tube rack task delete + public void testTubeRackTaskDeleteById(Integer id) { + this.testTubeRackTestTaskMapper.deleteById(id); + this.testTubeRackTestTaskTubeMapper.deleteAllByRackId(id); + } + // test tube rack task lock + public void testTubeRackTestLock(Integer id) { + MdbTestTubeRackTestTask task = this.testTubeRackTestTaskMapper.findById(id); + if ( null == task ) { + throw new RuntimeException("TEST_TUBE_RACK_TASK_NOT_FOUND"); + } + if ( !task.editable ) { + throw new RuntimeException("TEST_TUBE_RACK_TASK_NOT_EDITABLE"); + } + task.editable = false; + task.status = "WAITING"; + task.updatedAt = System.currentTimeMillis(); + task.updatedBy = this.accountService.getCurrentAccountId(); + this.testTubeRackTestTaskMapper.updateLock(task); + } + + // test tube rack task unlock + public void testTubeRackTestUnlock(Integer id) { + MdbTestTubeRackTestTask task = this.testTubeRackTestTaskMapper.findById(id); + if ( null == task ) { + throw new RuntimeException("TEST_TUBE_RACK_TASK_NOT_FOUND"); + } + if ( task.editable ) { + throw new RuntimeException("TEST_TUBE_RACK_TASK_NOT_LOCKED"); + } + task.editable = true; + task.status = "CONFIGURING"; + task.updatedAt = System.currentTimeMillis(); + task.updatedBy = this.accountService.getCurrentAccountId(); + this.testTubeRackTestTaskMapper.updateLock(task); + } diff --git a/src/main/java/com/dreamworks/boditech/utils/MyCommon.java b/src/main/java/com/dreamworks/boditech/utils/MyCommon.java index e043029..6266794 100644 --- a/src/main/java/com/dreamworks/boditech/utils/MyCommon.java +++ b/src/main/java/com/dreamworks/boditech/utils/MyCommon.java @@ -1,4 +1,11 @@ package com.dreamworks.boditech.utils; + +import org.springframework.cglib.beans.BeanMap; + +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + public class MyCommon { // easy sleep public static void easySleep(int ms) { @@ -6,4 +13,17 @@ public class MyCommon { Thread.sleep(ms); } catch (InterruptedException ignored) {} } + + // object to map + public static Map objectToMap(Object obj) { + Map map = new HashMap(); + Field[] fields = obj.getClass().getDeclaredFields(); + for ( Field field : fields ) { + field.setAccessible(true); + try { + map.put(field.getName(), field.get(obj)); + } catch (IllegalAccessException ignored) {} + } + return map; + } }