From a4cb43f1d0075e9eab366b021d8a24314833699c Mon Sep 17 00:00:00 2001 From: litao Date: Fri, 21 Oct 2022 11:35:33 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=89=93=E5=8D=B0=E5=8E=9F=E5=A7=8B=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E4=BB=AA=E5=99=A8=E8=AE=BE=E5=A4=87=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=202.=E6=A0=B7=E5=93=81=E5=8E=9F=E5=A7=8B=E7=BC=96=E5=8F=B7?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=203.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/springblade/lims/entry/Simple.java | 5 + .../controller/ExamineResultController.java | 403 +++++++++++++++++- .../lims/controller/SimpleController.java | 10 + .../lims/service/impl/EntrustServiceImpl.java | 80 +++- 4 files changed, 469 insertions(+), 29 deletions(-) diff --git a/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/entry/Simple.java b/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/entry/Simple.java index 166eea5..19c6c78 100644 --- a/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/entry/Simple.java +++ b/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/entry/Simple.java @@ -1,5 +1,6 @@ package org.springblade.lims.entry; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.models.auth.In; @@ -10,6 +11,7 @@ import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.util.Date; +import java.util.List; /** * @author swj @@ -78,5 +80,8 @@ public class Simple extends BaseEntity implements Serializable { private static final long serialVersionUID = 1L; + // 样品集合 + @TableField(exist = false) + private List simples; } diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/ExamineResultController.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/ExamineResultController.java index 5a5ddd7..98008cb 100644 --- a/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/ExamineResultController.java +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/ExamineResultController.java @@ -593,7 +593,7 @@ public class ExamineResultController extends BladeController { map1.put("g" + (i + 1), mapList); } } - // 非洲猪瘟病毒抗体检测试剂盒 + // 非洲猪瘟病毒ELISA抗体检测试剂盒(哈尔滨维科生物技术有限公司) else if ("1580730163250188290".equals(reagentId)) { for (int i = 0; i < group; i++) { List>> mapList = new ArrayList<>(); @@ -673,7 +673,7 @@ public class ExamineResultController extends BladeController { } else if (Double.parseDouble(SP) < 0.1) { mapResult.put("result", "阴性"); } else { - mapResult.put("result", "疑似"); + mapResult.put("result", "可疑"); } } else { mapResult.put("originResult", code); @@ -757,11 +757,11 @@ public class ExamineResultController extends BladeController { int index = (n - 1) * 8 + j + 1; //n是列,j是行 ,我们定义index是一列列的定义 if (StringUtil.isNoneBlank(code)) { if (j > 5 || n > 1) { - String SP = df.format(100 - Double.parseDouble(code) / v1 * 100); + String PB = df.format(100 - Double.parseDouble(code) / v1 * 100); mapResult.put("originResult", code); - mapResult.put("value", SP); + mapResult.put("value", PB); mapResult.put("num", "1"); - if (Double.parseDouble(SP) > 50) { + if (Double.parseDouble(PB) > 50) { mapResult.put("result", "阳性"); } else { mapResult.put("result", "阴性"); @@ -801,7 +801,7 @@ public class ExamineResultController extends BladeController { Map> map2 = new HashMap<>(); - String SP = "0.00"; + String PI = "0.00"; for (int n = 1; n <= filedsLength; n++) { String code; switch (n) { @@ -850,15 +850,304 @@ public class ExamineResultController extends BladeController { if (StringUtil.isNoneBlank(code)) { if (j > 5 || n > 1) { if (v1 != 0) { - SP = df.format((v1 - Double.parseDouble(code)) / v1); + PI = df.format((v1 - Double.parseDouble(code)) / v1); + } + mapResult.put("originResult", code); + mapResult.put("value", PI); + mapResult.put("num", "1"); + if (Double.parseDouble(PI) >= 0.5) { + mapResult.put("result", "阳性"); + } else { + mapResult.put("result", "阴性"); + } + } else { + mapResult.put("originResult", code); + mapResult.put("num", ""); + } + } else { + mapResult.put("originResult", ""); + mapResult.put("num", ""); + } + mapResult.put("order", index + i * 96); + map2.put(a + n, mapResult); + list.add(mapResult); + } + mapList.add(map2); + } + map1.put("g" + (i + 1), mapList); + } + } + // 非洲猪瘟病毒ELISA抗体检测试剂盒(北京金诺百泰生物技术有限公司) + else if ("1570667729797705730".equals(reagentId)) { + for (int i = 0; i < group; i++) { + List>> mapList = new ArrayList<>(); + List excels = map.get(i + 1 + ""); + double code1 = Double.parseDouble(excels.get(0).getCode1()); + double code2 = Double.parseDouble(excels.get(1).getCode1()); + double code3 = Double.parseDouble(excels.get(2).getCode1()); + double code4 = Double.parseDouble(excels.get(3).getCode1()); + double v1 = (code1 + code2) / 2; + double v2 = (code3 + code4) / 2; + DecimalFormat df = new DecimalFormat("#0.000"); + for (int j = 0; j < excels.size(); j++) { + // 行标头:前端渲染需要A、B、C.... + String a = String.valueOf((char) (j + 65)); + + ExamineExcel examineExcel = excels.get(j);//取到一行记录 + int filedsLength = examineExcel.getClass().getDeclaredFields().length - 1; + + Map> map2 = new HashMap<>(); + + String SP = "0.00"; + for (int n = 1; n <= filedsLength; n++) { + String code; + switch (n) { + case 1: + code = examineExcel.getCode1(); + break; + case 2: + code = examineExcel.getCode2(); + break; + case 3: + code = examineExcel.getCode3(); + break; + case 4: + code = examineExcel.getCode4(); + break; + case 5: + code = examineExcel.getCode5(); + break; + case 6: + code = examineExcel.getCode6(); + break; + case 7: + code = examineExcel.getCode7(); + break; + case 8: + code = examineExcel.getCode8(); + break; + case 9: + code = examineExcel.getCode9(); + break; + case 10: + code = examineExcel.getCode10(); + break; + case 11: + code = examineExcel.getCode11(); + break; + case 12: + code = examineExcel.getCode12(); + break; + default: + code = "0"; + } + + Map mapResult = new HashMap<>(); + int index = (n - 1) * 8 + j + 1; //n是列,j是行 ,我们定义index是一列列的定义 + if (StringUtil.isNoneBlank(code)) { + if (j > 5 || n > 1) { + if ((v2 - v1) != 0) { + SP = df.format((Double.parseDouble(code) - v1) / (v2 - v1)); } mapResult.put("originResult", code); mapResult.put("value", SP); mapResult.put("num", "1"); - if (Double.parseDouble(SP) >= 0.5) { + if (Double.parseDouble(SP) >= 0.4) { mapResult.put("result", "阳性"); + } else if (Double.parseDouble(SP) <= 0.3) { + mapResult.put("result", "阴性"); } else { + mapResult.put("result", "可疑"); + } + } else { + mapResult.put("originResult", code); + mapResult.put("num", ""); + } + } else { + mapResult.put("originResult", ""); + mapResult.put("num", ""); + } + mapResult.put("order", index + i * 96); + map2.put(a + n, mapResult); + list.add(mapResult); + } + mapList.add(map2); + } + map1.put("g" + (i + 1), mapList); + } + } + // 猪繁殖与呼吸综合征病毒间接ELISA抗体检测试剂盒 + else if ("1582988982068027393".equals(reagentId)) { + for (int i = 0; i < group; i++) { + List>> mapList = new ArrayList<>(); + List excels = map.get(i + 1 + ""); + double code3 = Double.parseDouble(excels.get(2).getCode1()); + double code4 = Double.parseDouble(excels.get(3).getCode1()); + double v2 = (code3 + code4) / 2; + DecimalFormat df = new DecimalFormat("#0.000"); + for (int j = 0; j < excels.size(); j++) { + // 行标头:前端渲染需要A、B、C.... + String a = String.valueOf((char) (j + 65)); + + ExamineExcel examineExcel = excels.get(j);//取到一行记录 + int filedsLength = examineExcel.getClass().getDeclaredFields().length - 1; + + Map> map2 = new HashMap<>(); + + String SP = "0.00"; + for (int n = 1; n <= filedsLength; n++) { + String code; + switch (n) { + case 1: + code = examineExcel.getCode1(); + break; + case 2: + code = examineExcel.getCode2(); + break; + case 3: + code = examineExcel.getCode3(); + break; + case 4: + code = examineExcel.getCode4(); + break; + case 5: + code = examineExcel.getCode5(); + break; + case 6: + code = examineExcel.getCode6(); + break; + case 7: + code = examineExcel.getCode7(); + break; + case 8: + code = examineExcel.getCode8(); + break; + case 9: + code = examineExcel.getCode9(); + break; + case 10: + code = examineExcel.getCode10(); + break; + case 11: + code = examineExcel.getCode11(); + break; + case 12: + code = examineExcel.getCode12(); + break; + default: + code = "0"; + } + + Map mapResult = new HashMap<>(); + int index = (n - 1) * 8 + j + 1; //n是列,j是行 ,我们定义index是一列列的定义 + if (StringUtil.isNoneBlank(code)) { + if (j > 5 || n > 1) { + if (v2 != 0) { + SP = df.format((Double.parseDouble(code) / v2)); + } + mapResult.put("originResult", code); + mapResult.put("value", SP); + mapResult.put("num", "1"); + if (Double.parseDouble(SP) >= 0.4) { + mapResult.put("result", "阳性"); + } else { + mapResult.put("result", "阴性"); + } + } else { + mapResult.put("originResult", code); + mapResult.put("num", ""); + } + } else { + mapResult.put("originResult", ""); + mapResult.put("num", ""); + } + mapResult.put("order", index + i * 96); + map2.put(a + n, mapResult); + list.add(mapResult); + } + mapList.add(map2); + } + map1.put("g" + (i + 1), mapList); + } + } + // 猪瘟病毒阻断ELISA抗体检测试剂盒(武汉科前生物股份有限公司) + else if ("1570283733628678145".equals(reagentId)) { + for (int i = 0; i < group; i++) { + List>> mapList = new ArrayList<>(); + List excels = map.get(i + 1 + ""); + double code1 = Double.parseDouble(excels.get(0).getCode1()); + double code2 = Double.parseDouble(excels.get(1).getCode1()); + double v1 = (code1 + code2) / 2; + DecimalFormat df = new DecimalFormat("#0.000"); + for (int j = 0; j < excels.size(); j++) { + // 行标头:前端渲染需要A、B、C.... + String a = String.valueOf((char) (j + 65)); + + ExamineExcel examineExcel = excels.get(j);//取到一行记录 + int filedsLength = examineExcel.getClass().getDeclaredFields().length - 1; + + Map> map2 = new HashMap<>(); + + String SP = "0.00"; + for (int n = 1; n <= filedsLength; n++) { + String code; + switch (n) { + case 1: + code = examineExcel.getCode1(); + break; + case 2: + code = examineExcel.getCode2(); + break; + case 3: + code = examineExcel.getCode3(); + break; + case 4: + code = examineExcel.getCode4(); + break; + case 5: + code = examineExcel.getCode5(); + break; + case 6: + code = examineExcel.getCode6(); + break; + case 7: + code = examineExcel.getCode7(); + break; + case 8: + code = examineExcel.getCode8(); + break; + case 9: + code = examineExcel.getCode9(); + break; + case 10: + code = examineExcel.getCode10(); + break; + case 11: + code = examineExcel.getCode11(); + break; + case 12: + code = examineExcel.getCode12(); + break; + default: + code = "0"; + } + + Map mapResult = new HashMap<>(); + int index = (n - 1) * 8 + j + 1; //n是列,j是行 ,我们定义index是一列列的定义 + if (StringUtil.isNoneBlank(code)) { + if (j > 5 || n > 1) { + if (v1 != 0) { + SP = df.format(1 - (Double.parseDouble(code) / v1)); + } + mapResult.put("originResult", code); + mapResult.put("value", Double.parseDouble(SP) * 100 + "%"); + mapResult.put("num", "1"); + if (Double.parseDouble(SP) >= 0.4) { + mapResult.put("result", "阳性"); + } else if (Double.parseDouble(SP) <= 0.3) { mapResult.put("result", "阴性"); + } else { + mapResult.put("result", "可疑"); } } else { mapResult.put("originResult", code); @@ -877,6 +1166,104 @@ public class ExamineResultController extends BladeController { map1.put("g" + (i + 1), mapList); } } + // 猪伪狂犬病病毒gE蛋白ELISA抗体检测试剂盒(武汉科前生物股份有限公司) + else if ("1570296117147660290".equals(reagentId)) { + for (int i = 0; i < group; i++) { + List>> mapList = new ArrayList<>(); + List excels = map.get(i + 1 + ""); + double code1 = Double.parseDouble(excels.get(0).getCode1()); + double code2 = Double.parseDouble(excels.get(1).getCode1()); + double v1 = (code1 + code2) / 2; + DecimalFormat df = new DecimalFormat("#0.000"); + for (int j = 0; j < excels.size(); j++) { + // 行标头:前端渲染需要A、B、C.... + String a = String.valueOf((char) (j + 65)); + + ExamineExcel examineExcel = excels.get(j);//取到一行记录 + int filedsLength = examineExcel.getClass().getDeclaredFields().length - 1; + + Map> map2 = new HashMap<>(); + + String SN = "0.00"; + for (int n = 1; n <= filedsLength; n++) { + String code; + switch (n) { + case 1: + code = examineExcel.getCode1(); + break; + case 2: + code = examineExcel.getCode2(); + break; + case 3: + code = examineExcel.getCode3(); + break; + case 4: + code = examineExcel.getCode4(); + break; + case 5: + code = examineExcel.getCode5(); + break; + case 6: + code = examineExcel.getCode6(); + break; + case 7: + code = examineExcel.getCode7(); + break; + case 8: + code = examineExcel.getCode8(); + break; + case 9: + code = examineExcel.getCode9(); + break; + case 10: + code = examineExcel.getCode10(); + break; + case 11: + code = examineExcel.getCode11(); + break; + case 12: + code = examineExcel.getCode12(); + break; + default: + code = "0"; + } + + Map mapResult = new HashMap<>(); + int index = (n - 1) * 8 + j + 1; //n是列,j是行 ,我们定义index是一列列的定义 + if (StringUtil.isNoneBlank(code)) { + if (j > 5 || n > 1) { + if (v1 != 0) { + SN = df.format(Double.parseDouble(code) / v1); + } + mapResult.put("originResult", code); + mapResult.put("value", Double.parseDouble(SN)); + mapResult.put("num", "1"); + if (Double.parseDouble(SN) <= 0.35) { + mapResult.put("result", "阳性"); + } else if (Double.parseDouble(SN) > 0.4) { + mapResult.put("result", "阴性"); + } else { + mapResult.put("result", "可疑"); + } + } else { + mapResult.put("originResult", code); + mapResult.put("num", ""); + } + } else { + mapResult.put("originResult", ""); + mapResult.put("num", ""); + } + mapResult.put("order", index + i * 96); + map2.put(a + n, mapResult); + list.add(mapResult); + } + mapList.add(map2); + } + map1.put("g" + (i + 1), mapList); + } + } + + // for (int i = 0; i < group; i++) { // List>> mapList = new ArrayList<>(); diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/SimpleController.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/SimpleController.java index 28aea58..990bac2 100644 --- a/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/SimpleController.java +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/SimpleController.java @@ -1,6 +1,7 @@ package org.springblade.lims.controller; +import com.alibaba.nacos.common.utils.CollectionUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.annotations.Api; @@ -91,4 +92,13 @@ public class SimpleController extends BladeController { return map; } + /** + * 样品原始编号修改 + */ + @PostMapping("/update") + public void updateSimple(@RequestBody Simple simple) { + if (CollectionUtils.isNotEmpty(simple.getSimples())) { + service.updateBatchById(simple.getSimples()); + } + } } diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/EntrustServiceImpl.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/EntrustServiceImpl.java index a280b1d..dceece6 100644 --- a/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/EntrustServiceImpl.java +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/EntrustServiceImpl.java @@ -693,19 +693,18 @@ public class EntrustServiceImpl extends BaseServiceImpl // 1.生成坐标(给每一个数据单元赋予坐标) // 1.1.根据原始编号分组 -// Map> collect = resultList.stream().collect(Collectors.groupingBy(ExamineResultVo::getOriginalNum)); - Map> collect = resultList.stream().collect(Collectors.groupingBy(ExamineResultVo::getRecessiveNum)); +// Map> collect = resultList.stream().collect(Collectors.groupingBy(ExamineResultVo::getRecessiveNum)); + Map> collect = resultList.stream().collect(Collectors.groupingBy(ExamineResultVo::getNum)); Set keys = collect.keySet(); List recessiveNumList = new ArrayList<>(); recessiveNumList.addAll(keys); // TODO 排序方式不对,现在是:1,10,11,12...,会有中文的情况 -// Collections.sort(originalNumList); Collections.sort(recessiveNumList, new Comparator() { @Override public int compare(String o1, String o2) { - Integer expirNum1 = Integer.valueOf(o1); - Integer expirNum2 = Integer.valueOf(o2); + Integer expirNum1 = Integer.valueOf(o1.split("-")[o1.split("-").length - 1]); + Integer expirNum2 = Integer.valueOf(o2.split("-")[o2.split("-").length - 1]); return expirNum1 - expirNum2; } }); @@ -717,6 +716,7 @@ public class EntrustServiceImpl extends BaseServiceImpl List everyResultUnit = collect.get(originalNum); Map row = new HashMap<>(); row.put("originalNum", everyResultUnit.get(0).getOriginalNum()); + row.put("num", everyResultUnit.get(0).getNum()); rowCount++; // 对检测按照index分组 @@ -739,22 +739,16 @@ public class EntrustServiceImpl extends BaseServiceImpl } }); - String num = ""; +// String num = ""; String value = ""; String result = ""; for (int i = 0; i < currExamResVoList.size(); i++) { ExamineResultVo resultVo = currExamResVoList.get(i); - if (i == currExamResVoList.size() - 1) { - num += resultVo.getNum(); - value += resultVo.getValue(); - result += resultVo.getResult(); - } else { - num += resultVo.getNum() + ","; - value += resultVo.getValue() + ","; - result += resultVo.getResult() + ","; - } +// num += resultVo.getNum(); + value += resultVo.getValue(); + result += resultVo.getResult(); } - row.put("num" + index, num); +// row.put("num" + index, num); row.put("value" + index, value); row.put("result" + index, result); } @@ -1182,7 +1176,15 @@ public class EntrustServiceImpl extends BaseServiceImpl result.put("2", examineResult.getDisposal()); result.put("3", StringUtils.remove(examine.getSimpleName(), "-")); result.put("4", examine.getSimpleCount()); - result.put("5", byId.getName()); + // 标题名称 + if ("4".equals(byId.getInputMode())) { + result.put("5", byId.getName().substring(0, byId.getName().length() - 2)); + // 检测项目 + result.put("19", byId.getName()); + } else { + result.put("5", byId.getName()); + } + // 检测依据 if (examineBasis != null) { result.put("6", examineBasis.getName()); } @@ -1273,15 +1275,29 @@ public class EntrustServiceImpl extends BaseServiceImpl // 使用仪器名称及编号 String[] split2 = examineResult.getInstrumentId().split(","); String instrumentName = ""; + List strings = new ArrayList<>(); for (int i = 0; i < split2.length; i++) { Instrument instrument = instrumentService.getById(split2[i]); String s2 = instrument.getName() + instrument.getCode(); - if (i == (split2.length - 1)) { - instrumentName += s2; + strings.add(s2); + } + // 按照仪器编号排序 + Collections.sort(strings, new Comparator() { + @Override + public int compare(String o1, String o2) { + Integer expirNum1 = Integer.valueOf(o1.split("-")[o1.split("-").length - 1]); + Integer expirNum2 = Integer.valueOf(o2.split("-")[o2.split("-").length - 1]); + return expirNum1 - expirNum2; + } + }); + for (int i = 0; i < strings.size(); i++) { + if (i == (strings.size() - 1)) { + instrumentName += strings.get(i); } else { - instrumentName += s2 + ","; + instrumentName += strings.get(i) + ","; } } + result.put("9", instrumentName.replace(",", "\r\n")); // String value = DictBizCache.getValue(DictBizEnum.SIMPLE_STATUS, examineResult.getSimpleStatus()); result.put("10", examineResult.getSimpleStatus()); @@ -1342,6 +1358,12 @@ public class EntrustServiceImpl extends BaseServiceImpl // 如果是布鲁氏检测 (列排单+式和列排多+式) if ("2".equals(byId.getInputMode()) || "6".equals(byId.getInputMode())) { + if ("2".equals(byId.getInputMode())) { + result.put("18", "平板凝集"); + } else { + result.put("18", "试管凝集"); + } + List list = JSON.parseArray(examineResult.getExamineDataArr(), ExamineTemplate2Excel.class); // 阴阳性数量 // long yin = list.stream().filter((ExamineTemplate2Excel e) -> "阴性".equals(e.getResult())).count(); @@ -1383,7 +1405,6 @@ public class EntrustServiceImpl extends BaseServiceImpl } everyGroupData.add(list.get(j)); count++; - } for (int j = 1; j <= resultMap.size(); j++) { List arrVOList = resultMap.get(String.valueOf(j)); @@ -2575,6 +2596,23 @@ public class EntrustServiceImpl extends BaseServiceImpl } // 普通检测 else { + // 根据试剂给不同检测数值命名 + if ("1580730163250188290".equals(examineResult.getReagentId()) + || "1570667729797705730".equals(examineResult.getReagentId()) + || "1582988982068027393".equals(examineResult.getReagentId())){ + result.put("18", "S/P"); + } else if ("1580815808211578882".equals(examineResult.getReagentId())) { + result.put("18", "PI"); + } else if ("1570666183341043714".equals(examineResult.getReagentId())) { + result.put("18", "PB"); + } else if ("1570283733628678145".equals(examineResult.getReagentId())) { + result.put("18", "阻断率"); + } else if ("1570296117147660290".equals(examineResult.getReagentId())) { + result.put("18", "S/N"); + } else { + result.put("18", "样品OD"); + } + if (list.size() % 96 == 0) { for (int i = 0; i < list.size() / 96; i++) { double a1 = Double.parseDouble(list.get(i * 96).getOriginResult());