|
|
|
|
@ -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<ExamineExcel> 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<Map<String, List<Map<String, Map<String, Object>>>>> ptExcelReview( |
|
|
|
|
MultipartFile file, |
|
|
|
|
String examineId, |
|
|
|
|
Map<String,String> info, //变量对应的标版的孔位,一行行的逐渐递增
|
|
|
|
|
String reg //计算公式
|
|
|
|
|
) throws Exception{ |
|
|
|
|
try { |
|
|
|
|
List<ExamineExcel> read = ExcelUtil.read(file, ExamineExcel.class); |
|
|
|
|
Map<String, List<ExamineExcel>> 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<ExamineExcel> 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<Map<String, Object>> list = new ArrayList<>(); |
|
|
|
|
// 按照公式计算实验数据并返回
|
|
|
|
|
Map<String, List<Map<String, Map<String, Object>>>> map1 = new HashMap<>(); |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < group; i++) { |
|
|
|
|
List<Map<String, Map<String, Object>>> mapList = new ArrayList<>(); |
|
|
|
|
List<ExamineExcel> excels = map.get(i + 1 + ""); |
|
|
|
|
//解析info,确定参数x的值和其它相对不变的参数
|
|
|
|
|
Map<String,Object> params = new HashMap<>(); //存放解析出的参数
|
|
|
|
|
|
|
|
|
|
Integer xStart = 0; |
|
|
|
|
Integer xEnd = 0; |
|
|
|
|
//解析参数
|
|
|
|
|
Set<String> 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<String, Map<String, Object>> 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<String, Object> 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<Map<String, Object>>() { |
|
|
|
|
@Override |
|
|
|
|
public int compare(Map<String, Object> o1, Map<String, Object> o2) { |
|
|
|
|
Integer id1 = (Integer) o1.get("order"); |
|
|
|
|
Integer id2 = (Integer) o2.get("order"); |
|
|
|
|
// 升序
|
|
|
|
|
return id1.compareTo(id2); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
int numIndex = 0; |
|
|
|
|
for (Map<String, Object> stringObjectMap : list) { |
|
|
|
|
String num = (String) stringObjectMap.get("num"); |
|
|
|
|
if (num != null && !"".equals(num)) { |
|
|
|
|
num = split[numIndex]; |
|
|
|
|
stringObjectMap.put("num", num); |
|
|
|
|
numIndex++; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
LambdaQueryWrapper<ExamineResult> 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解析数据 |
|
|
|
|
*/ |
|
|
|
|
|