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 60b50f5..3487eee 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 @@ -1688,23 +1688,52 @@ public class EntrustServiceImpl extends BaseServiceImpl return o1.getOrder() - o2.getOrder(); } }); - List doubles = new ArrayList<>(); - double a1 = Double.parseDouble(list.get(95).getValue()); - double a2 = Double.parseDouble(list.get(94).getValue()); - double a3 = Double.parseDouble(list.get(93).getValue()); - double a4 = Double.parseDouble(list.get(92).getValue()); - doubles.add(a1); - doubles.add(a2); - doubles.add(a3); - doubles.add(a4); - List collect = doubles.stream().sorted().collect(Collectors.toList()); - String format2 = df.format((collect.get(1) + collect.get(2)) / 4); - ExamineDataArrVO examineDataArrVO = new ExamineDataArrVO(); - examineDataArrVO.setNum("临界值"); - examineDataArrVO.setLog2(format2); - examineDataArrVO.setResult(""); - list1.add(examineDataArrVO); - list1.addAll(voList); + int group = list.size() / 96; + for (int i = 0; i < group; i++) { + List doubles = new ArrayList<>(); + double a1 = Double.parseDouble(list.get((i * 96) + 95).getValue()); + double a2 = Double.parseDouble(list.get((i * 96) + 94).getValue()); + double a3 = Double.parseDouble(list.get((i * 96) + 93).getValue()); + double a4 = Double.parseDouble(list.get((i * 96) + 92).getValue()); + doubles.add(a1); + doubles.add(a2); + doubles.add(a3); + doubles.add(a4); + List collect = doubles.stream().sorted().collect(Collectors.toList()); + String format2 = df.format((collect.get(1) + collect.get(2)) / 4); + ExamineDataArrVO examineDataArrVO = new ExamineDataArrVO(); + examineDataArrVO.setNum("临界值"); + examineDataArrVO.setLog2(format2); + examineDataArrVO.setResult(""); + list1.add(examineDataArrVO); + int finalI = i; + list1.addAll(voList.stream().filter(vo -> vo.getOrder() > finalI * 96 && vo.getOrder() <= (finalI + 1) * 96).collect(Collectors.toList())); + + // 阳性对照值 + double avg = Double.parseDouble(format2); + ExamineDataArrVO yang = new ExamineDataArrVO(); + yang.setNum("阳性对照"); + yang.setResult("成立"); + if (avg == 1.0 / 512) { + yang.setLog2("1:512"); + } else if (avg < 1.0 / 512 && avg > 1.0 / 1024) { + yang.setLog2("1:720"); + } else if (avg == 1.0 / 1024) { + yang.setLog2("1:1024"); + } else if (avg < 1.0 / 1024 && avg > 1.0 / 2048) { + yang.setLog2("1:1440"); + } else if (avg == 1.0 / 2048) { + yang.setLog2("1:2048"); + } + list1.add(yang); + + // 阴性对照值 + ExamineDataArrVO yin = new ExamineDataArrVO(); + yin.setNum("阴性对照"); + yin.setLog2("<1:8"); + yin.setResult("成立"); + list1.add(yin); + } if (list1.size() > 0) { Map> resultMap = new HashMap<>(); @@ -2280,18 +2309,18 @@ public class EntrustServiceImpl extends BaseServiceImpl // 根据试剂给不同检测数值命名 if ( "1580730163250188290".equals(examineResult.getReagentId()) - || "1570297916894146562".equals(examineResult.getReagentId()) - || "1570667729797705730".equals(examineResult.getReagentId()) - || "1570671477110534145".equals(examineResult.getReagentId()) - || "1659464963116519426".equals(examineResult.getReagentId()) - || "1589877000410296322".equals(examineResult.getReagentId()) - || "1677607364850900993".equals(examineResult.getReagentId()) - || "1677607364859289601".equals(examineResult.getReagentId()) - || "1682203934330204161".equals(examineResult.getReagentId()) - || "1582988982068027393".equals(examineResult.getReagentId()) - || "1691712889624555522".equals(examineResult.getReagentId()) - || "1680136574547013633".equals(examineResult.getReagentId()) - || "1691710090853576706".equals(examineResult.getReagentId()) + || "1570297916894146562".equals(examineResult.getReagentId()) + || "1570667729797705730".equals(examineResult.getReagentId()) + || "1570671477110534145".equals(examineResult.getReagentId()) + || "1659464963116519426".equals(examineResult.getReagentId()) + || "1589877000410296322".equals(examineResult.getReagentId()) + || "1677607364850900993".equals(examineResult.getReagentId()) + || "1677607364859289601".equals(examineResult.getReagentId()) + || "1682203934330204161".equals(examineResult.getReagentId()) + || "1582988982068027393".equals(examineResult.getReagentId()) + || "1691712889624555522".equals(examineResult.getReagentId()) + || "1680136574547013633".equals(examineResult.getReagentId()) + || "1691710090853576706".equals(examineResult.getReagentId()) ) { result.put("18", "S/P"); } else if ("1580815808211578882".equals(examineResult.getReagentId())) { diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/ExamineResultServiceImpl.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/ExamineResultServiceImpl.java index 40559d0..26b30a2 100644 --- a/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/ExamineResultServiceImpl.java +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/ExamineResultServiceImpl.java @@ -809,74 +809,132 @@ public class ExamineResultServiceImpl extends BaseServiceImpl> groupMap = new HashMap<>(); + // 组数 + int group = 0; + // 除9是否有余数 + int size = (originRowDatas.size() + 1) % 9; + if (size == 0) { + group = (originRowDatas.size() + 1) / 9; + } else { + group = (originRowDatas.size() + 1) / 9 + 1; + } + + for (int i = 0; i < group; i++) { + List excels = new ArrayList<>(); + for (int j = i * 8 + i; j < (i + 1) * 8 + i; j++) { + ExamineExcel excel = originRowDatas.get(j); + excels.add(excel); + } + groupMap.put((i + 1) + "", excels); + } + String simpleName1 = examine.getSimpleName().split("-")[0]; String[] experieNum = examine.getExperieNum().split(","); - // 获取4个抗原对照值 - List list = new ArrayList<>(); - list.add(Double.parseDouble(originRowDatas.get(4).getCode12())); - list.add(Double.parseDouble(originRowDatas.get(5).getCode12())); - list.add(Double.parseDouble(originRowDatas.get(6).getCode12())); - list.add(Double.parseDouble(originRowDatas.get(7).getCode12())); - List list1 = list.stream().sorted().collect(Collectors.toList()); - DecimalFormat df = new DecimalFormat("#0.000"); - // 对照平均值 - Double avg = Double.valueOf(df.format((list1.get(1) + list1.get(2)) / 4)); // 结果resultList List> resultList = new ArrayList<>(); - for (int r = 0; r < 8; r++) { - if (r > 0) { - // 第1列 - resultList.add(assumb(r, 1, originRowDatas.get(r).getCode1(), originRowDatas.get(r - 1).getCode1(), avg, simpleName1, experieNum)); - // 第2列 - resultList.add(assumb(r, 2, originRowDatas.get(r).getCode2(), originRowDatas.get(r - 1).getCode2(), avg, simpleName1, experieNum)); - // 第3列 - resultList.add(assumb(r, 3, originRowDatas.get(r).getCode3(), originRowDatas.get(r - 1).getCode3(), avg, simpleName1, experieNum)); - // 第4列 - resultList.add(assumb(r, 4, originRowDatas.get(r).getCode4(), originRowDatas.get(r - 1).getCode4(), avg, simpleName1, experieNum)); - // 第5列 - resultList.add(assumb(r, 5, originRowDatas.get(r).getCode5(), originRowDatas.get(r - 1).getCode5(), avg, simpleName1, experieNum)); - // 第6列 - resultList.add(assumb(r, 6, originRowDatas.get(r).getCode6(), originRowDatas.get(r - 1).getCode6(), avg, simpleName1, experieNum)); - // 第7列 - resultList.add(assumb(r, 7, originRowDatas.get(r).getCode7(), originRowDatas.get(r - 1).getCode7(), avg, simpleName1, experieNum)); - // 第8列 - resultList.add(assumb(r, 8, originRowDatas.get(r).getCode8(), originRowDatas.get(r - 1).getCode8(), avg, simpleName1, experieNum)); - // 第9列 - resultList.add(assumb(r, 9, originRowDatas.get(r).getCode9(), originRowDatas.get(r - 1).getCode9(), avg, simpleName1, experieNum)); - // 第10列 - resultList.add(assumb(r, 10, originRowDatas.get(r).getCode10(), originRowDatas.get(r - 1).getCode10(), avg, simpleName1, experieNum)); - // 第11列 - resultList.add(assumb(r, 11, originRowDatas.get(r).getCode11(), originRowDatas.get(r - 1).getCode11(), avg, simpleName1, experieNum)); - // 第12列 - resultList.add(assumb(r, 12, originRowDatas.get(r).getCode12(), originRowDatas.get(r - 1).getCode12(), avg, simpleName1, experieNum)); - } else { - // 第1列 - resultList.add(assumb(r, 1, originRowDatas.get(r).getCode1(), null, avg, simpleName1, experieNum)); - // 第2列 - resultList.add(assumb(r, 2, originRowDatas.get(r).getCode2(), null, avg, simpleName1, experieNum)); - // 第3列 - resultList.add(assumb(r, 3, originRowDatas.get(r).getCode3(), null, avg, simpleName1, experieNum)); - // 第4列 - resultList.add(assumb(r, 4, originRowDatas.get(r).getCode4(), null, avg, simpleName1, experieNum)); - // 第5列 - resultList.add(assumb(r, 5, originRowDatas.get(r).getCode5(), null, avg, simpleName1, experieNum)); - // 第6列 - resultList.add(assumb(r, 6, originRowDatas.get(r).getCode6(), null, avg, simpleName1, experieNum)); - // 第7列 - resultList.add(assumb(r, 7, originRowDatas.get(r).getCode7(), null, avg, simpleName1, experieNum)); - // 第8列 - resultList.add(assumb(r, 8, originRowDatas.get(r).getCode8(), null, avg, simpleName1, experieNum)); - // 第9列 - resultList.add(assumb(r, 9, originRowDatas.get(r).getCode9(), null, avg, simpleName1, experieNum)); - // 第10列 - resultList.add(assumb(r, 10, originRowDatas.get(r).getCode10(), null, avg, simpleName1, experieNum)); - // 第11列 - resultList.add(assumb(r, 11, originRowDatas.get(r).getCode11(), null, avg, simpleName1, experieNum)); - // 第12列 - resultList.add(assumb(r, 12, originRowDatas.get(r).getCode12(), null, avg, simpleName1, experieNum)); + DecimalFormat df = new DecimalFormat("#0.000"); + + for (int i = 0; i < group; i++) { + List excels = groupMap.get(i + 1 + ""); + // 获取4个抗原对照值 + List list = new ArrayList<>(); + list.add(Double.parseDouble(excels.get(4).getCode12())); + list.add(Double.parseDouble(excels.get(5).getCode12())); + list.add(Double.parseDouble(excels.get(6).getCode12())); + list.add(Double.parseDouble(excels.get(7).getCode12())); + List list1 = list.stream().sorted().collect(Collectors.toList()); + // 对照平均值(临界值) + Double avg = Double.parseDouble(df.format((list1.get(1) + list1.get(2)) / 4)); + + // 成立条件判断 + if (avg > 1.0 / 512 || avg < 1.0 / 2048) { + throw new ServiceException("阳性对照条件不成立,请修改后重新上传!"); } +// Map map = new HashMap<>(); +// map.put("num", "临界值"); +// map.put("log2", avg); +// map.put("result", " "); +// resultList.add(map); + + for (int r = 0; r < 8; r++) { + if (r > 0) { + // 第1列 + resultList.add(assumb(r, 1, excels.get(r).getCode1(), excels.get(r - 1).getCode1(), avg, simpleName1, experieNum, i)); + // 第2列 + resultList.add(assumb(r, 2, excels.get(r).getCode2(), excels.get(r - 1).getCode2(), avg, simpleName1, experieNum, i)); + // 第3列 + resultList.add(assumb(r, 3, excels.get(r).getCode3(), excels.get(r - 1).getCode3(), avg, simpleName1, experieNum, i)); + // 第4列 + resultList.add(assumb(r, 4, excels.get(r).getCode4(), excels.get(r - 1).getCode4(), avg, simpleName1, experieNum, i)); + // 第5列 + resultList.add(assumb(r, 5, excels.get(r).getCode5(), excels.get(r - 1).getCode5(), avg, simpleName1, experieNum, i)); + // 第6列 + resultList.add(assumb(r, 6, excels.get(r).getCode6(), excels.get(r - 1).getCode6(), avg, simpleName1, experieNum, i)); + // 第7列 + resultList.add(assumb(r, 7, excels.get(r).getCode7(), excels.get(r - 1).getCode7(), avg, simpleName1, experieNum, i)); + // 第8列 + resultList.add(assumb(r, 8, excels.get(r).getCode8(), excels.get(r - 1).getCode8(), avg, simpleName1, experieNum, i)); + // 第9列 + resultList.add(assumb(r, 9, excels.get(r).getCode9(), excels.get(r - 1).getCode9(), avg, simpleName1, experieNum, i)); + // 第10列 + resultList.add(assumb(r, 10, excels.get(r).getCode10(), excels.get(r - 1).getCode10(), avg, simpleName1, experieNum, i)); + // 第11列 + resultList.add(assumb(r, 11, excels.get(r).getCode11(), excels.get(r - 1).getCode11(), avg, simpleName1, experieNum, i)); + // 第12列 + resultList.add(assumb(r, 12, excels.get(r).getCode12(), excels.get(r - 1).getCode12(), avg, simpleName1, experieNum, i)); + } else { + // 第1列 + resultList.add(assumb(r, 1, excels.get(r).getCode1(), null, avg, simpleName1, experieNum, i)); + // 第2列 + resultList.add(assumb(r, 2, excels.get(r).getCode2(), null, avg, simpleName1, experieNum, i)); + // 第3列 + resultList.add(assumb(r, 3, excels.get(r).getCode3(), null, avg, simpleName1, experieNum, i)); + // 第4列 + resultList.add(assumb(r, 4, excels.get(r).getCode4(), null, avg, simpleName1, experieNum, i)); + // 第5列 + resultList.add(assumb(r, 5, excels.get(r).getCode5(), null, avg, simpleName1, experieNum, i)); + // 第6列 + resultList.add(assumb(r, 6, excels.get(r).getCode6(), null, avg, simpleName1, experieNum, i)); + // 第7列 + resultList.add(assumb(r, 7, excels.get(r).getCode7(), null, avg, simpleName1, experieNum, i)); + // 第8列 + resultList.add(assumb(r, 8, excels.get(r).getCode8(), null, avg, simpleName1, experieNum, i)); + // 第9列 + resultList.add(assumb(r, 9, excels.get(r).getCode9(), null, avg, simpleName1, experieNum, i)); + // 第10列 + resultList.add(assumb(r, 10, excels.get(r).getCode10(), null, avg, simpleName1, experieNum, i)); + // 第11列 + resultList.add(assumb(r, 11, excels.get(r).getCode11(), null, avg, simpleName1, experieNum, i)); + // 第12列 + resultList.add(assumb(r, 12, excels.get(r).getCode12(), null, avg, simpleName1, experieNum, i)); + } + } + +// // 阳性对照值 +// Map yangMap = new HashMap<>(); +// yangMap.put("num", "阳性对照"); +// if (avg == 1.0 / 512) { +// yangMap.put("log2", "1:512"); +// } else if (avg < 1.0 / 512 && avg > 1.0 / 1024) { +// yangMap.put("log2", "1:720"); +// } else if (avg == 1.0 / 1024) { +// yangMap.put("log2", "1:1024"); +// } else if (avg < 1.0 / 1024 && avg > 1.0 / 2048) { +// yangMap.put("log2", "1:1440"); +// } else if (avg == 1.0 / 2048) { +// yangMap.put("log2", "1:2048"); +// } +// yangMap.put("result", "成立"); +// resultList.add(yangMap); +// // 阴性对照值 +// Map yinMap = new HashMap<>(); +// yinMap.put("num", "阴性对照"); +// yinMap.put("log2", "<1:8"); +// yinMap.put("result", "成立"); +// resultList.add(yinMap); } List> mapList = new ArrayList<>(); @@ -5282,11 +5340,11 @@ public class ExamineResultServiceImpl extends BaseServiceImpl assumb(int row, int col, String value, String lastValue, Double avg, String simpleName1, String[] experieNums) { + private Map assumb(int row, int col, String value, String lastValue, Double avg, String simpleName1, String[] experieNums, int group) { // row:行: 0-7 // col:列: 1-12 // 计算排序 - int order = (row + 1) + (col - 1) * 8; + int order = (group * 96) + (row + 1) + (col - 1) * 8; // 如果是前十列 if (col < 11) { if (org.apache.commons.lang3.StringUtils.isNotBlank(value)) { @@ -5318,7 +5376,7 @@ public class ExamineResultServiceImpl extends BaseServiceImpl map = new HashMap<>();