From d97f0c0b9811c3151d1ca986407a8f3d78323fa8 Mon Sep 17 00:00:00 2001 From: yitonglei Date: Thu, 22 Sep 2022 10:53:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E9=AA=8C=E6=95=B0=E6=8D=AE=E7=9A=84?= =?UTF-8?q?=E8=AE=A1=E7=AE=97ExamineResultController=E4=B8=AD=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=BA=86=E4=B8=80=E4=B8=AA=E4=BD=BF=E7=94=A8=E6=95=B0?= =?UTF-8?q?=E5=AD=A6=E5=85=AC=E5=BC=8F=E8=AE=A1=E7=AE=97=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E7=9A=84=E6=96=B9=E6=B3=95ptExcelReview=EF=BC=88=EF=BC=89?= =?UTF-8?q?=EF=BC=8C=E4=B8=BA=E5=85=B6=E5=AE=83=E8=AE=A1=E7=AE=97=E5=81=9A?= =?UTF-8?q?=E5=8F=82=E8=80=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab-service/lab-lims/pom.xml | 22 +- .../controller/ExamineResultController.java | 270 +++++++++++++++++- 2 files changed, 285 insertions(+), 7 deletions(-) diff --git a/lab-service/lab-lims/pom.xml b/lab-service/lab-lims/pom.xml index 5710fc9..7f89fc7 100644 --- a/lab-service/lab-lims/pom.xml +++ b/lab-service/lab-lims/pom.xml @@ -130,7 +130,27 @@ io.minio minio - + + com.alibaba + QLExpress + 3.2.0 + + + com.alibaba + QLExpress + 3.2.0 + + + com.alibaba + QLExpress + 3.2.0 + + + com.alibaba + QLExpress + 3.2.0 + + 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 f0c9803..9f33a3c 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 @@ -14,18 +14,14 @@ import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; +import org.springblade.core.tool.utils.StringUtil; import org.springblade.lims.entry.*; import org.springblade.lims.excel.*; import org.springblade.lims.service.*; -import org.springblade.system.feign.ISysClient; +import org.springblade.lims.utils.FormulaTool; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; - -import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; import java.text.DecimalFormat; import java.util.*; import java.util.stream.Collectors; @@ -98,6 +94,268 @@ public class ExamineResultController extends BladeController { } } + /** 普通Excel解析数据 review start **/ + //获取单元格的值 + private String getCode(List list,Integer order){ + String result; + ExamineExcel examineExcel = (order % 8 - 1 >= 0) ? list.get(order % 8 - 1) : list.get(list.size() - 1); + Integer re = order / 8 + 1; + switch (re){ + case 1: + result = examineExcel.getCode1(); + break; + case 2: + result = examineExcel.getCode2(); + break; + case 3: + result = examineExcel.getCode3(); + break; + case 4: + result = examineExcel.getCode4(); + break; + case 5: + result = examineExcel.getCode5(); + break; + case 6: + result = examineExcel.getCode6(); + break; + case 7: + result = examineExcel.getCode7(); + break; + case 8: + result = examineExcel.getCode8(); + break; + case 9: + result = examineExcel.getCode9(); + break; + case 10: + result = examineExcel.getCode10(); + break; + case 11: + result = examineExcel.getCode11(); + break; + case 12: + result = examineExcel.getCode12(); + break; + default: + result = "0"; + } + return result; + } + + private R>>>> ptExcelReview( + MultipartFile file, + String examineId, + Map info, //变量对应的标版的孔位,一行行的逐渐递增 + String reg //计算公式 + ) throws Exception{ + try { + List read = ExcelUtil.read(file, ExamineExcel.class); + Map> map = new HashMap<>(); +// int index = 0; + // 组数 + int group = 0; + // 除9是否有余数 + int size = (read.size() + 1) % 9; + + if (size == 0) { + group = (read.size() + 1) / 9; + } else { + group = (read.size() + 1) / 9 + 1; + } + + //将读取到的excel按照每一版分组 + 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 = read.get(j); + excels.add(excel); + } + map.put((i + 1) + "", excels); + } + + Examine examine = examineService.getById(examineId); + String experieNum = examine.getExperieNum(); + String[] split = experieNum.split(","); + + List> list = new ArrayList<>(); + // 按照公式计算实验数据并返回 + Map>>> map1 = new HashMap<>(); + + for (int i = 0; i < group; i++) { + List>> mapList = new ArrayList<>(); + List excels = map.get(i + 1 + ""); + //解析info,确定参数x的值和其它相对不变的参数 + Map params = new HashMap<>(); //存放解析出的参数 + + Integer xStart = 0; + Integer xEnd = 0; + //解析参数 + Set strings = info.keySet(); + String x = ""; + for(String s: strings){ + String para = info.get(s); + if (para.split("-").length > 1){//可变参数 + String[] xs = para.split("-"); + xStart = Integer.parseInt(xs[0]); + xEnd = Integer.parseInt(xs[1]); + x = s; + }else{//相对固定的参数 + Integer order = Integer.valueOf(para); + params.put(s,StringUtil.isBlank(getCode(excels,order)) ? "0" : getCode(excels,order)); + } + } + + //按照列循环每一版的数据 + for (int m = 0; m < excels.size(); m++){ + String a = ""; + if (m == 0) { + a = "A"; + } + if (m == 1) { + a = "B"; + } + if (m == 2) { + a = "C"; + } + if (m == 3) { + a = "D"; + } + if (m == 4) { + a = "E"; + } + if (m == 5) { + a = "F"; + } + if (m == 6) { + a = "G"; + } + if (m == 7) { + a = "H"; + } + ExamineExcel examineExcel = excels.get(m);//取到一行记录 + int filedsLength = examineExcel.getClass().getDeclaredFields().length - 1; + + Map> map2 = new HashMap<>(); + for(int n = 1; n <= filedsLength; n++){ + System.out.println(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 + m + 1; //n是列,m是行 ,我们定义index是一列列的定义 + System.out.println("code的值==" + code + ",列n ==" + n+",行m="+m); + System.out.println("-------------------"); + if (StringUtil.isNoneBlank(code)){ + if(xStart <= index && index <= xEnd){ + params.put(x,code); + String value = FormulaTool.getResult(reg, params); + mapResult.put("originResult", examineExcel.getCode1()); + mapResult.put("value", "0E-10".equals(value) ? "0": value); + if (Double.parseDouble(value) >= 0.4) { + mapResult.put("result", "阳性"); + } else { + mapResult.put("result", "阴性"); + } + } + }else { + if(xStart <= index && index <= xEnd){ + 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); + } + } + + Collections.sort(list, new Comparator>() { + @Override + public int compare(Map o1, Map o2) { + Integer id1 = (Integer) o1.get("order"); + Integer id2 = (Integer) o2.get("order"); + // 升序 + return id1.compareTo(id2); + } + }); + + int numIndex = 0; + for (Map stringObjectMap : list) { + String num = (String) stringObjectMap.get("num"); + if (num != null && !"".equals(num)) { + num = split[numIndex]; + stringObjectMap.put("num", num); + numIndex++; + } + } + + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ExamineResult::getExamineId, examineId); + ExamineResult result = service.getOne(wrapper); + if (result != null) { + result.setOriginRecordData(JSON.toJSONString(map)); + result.setOriginRecordResult(JSON.toJSONString(map1)); + result.setExamineDataArr(JSON.toJSONString(list)); + service.updateById(result); + } else { + ExamineResult examineResult = new ExamineResult(); + examineResult.setExamineId(Long.valueOf(examineId)); + examineResult.setOriginRecordData(JSON.toJSONString(map)); + examineResult.setOriginRecordResult(JSON.toJSONString(map1)); + examineResult.setExamineDataArr(JSON.toJSONString(list)); + service.save(examineResult); + } + return R.data(map1); + } catch (ArrayIndexOutOfBoundsException e) { + throw new RuntimeException("分配样品数量与检测样品数量不一致!"); + }catch(Exception e1){ + throw new RuntimeException("算术异常,请检查实验数据!"); + } + } + /** 普通Excel解析数据 review stop **/ + /** * 常规Excel解析数据 */