package com.yuanchu.mom.utils;
|
|
|
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.context.AnalysisContext;
|
import com.alibaba.excel.event.AnalysisEventListener;
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.yuanchu.mom.excel.HuTiaoData;
|
import com.yuanchu.mom.mapper.InsOrderStateMapper;
|
import com.yuanchu.mom.mapper.InsProductMapper;
|
import com.yuanchu.mom.mapper.InsProductResult2Mapper;
|
import com.yuanchu.mom.mapper.InsSampleMapper;
|
import com.yuanchu.mom.pojo.*;
|
import com.yuanchu.mom.service.InsOrderPlanService;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
@Component
|
public class DianLuUtils {
|
|
@Value("${wordUrl}")
|
private String wordUrl;
|
|
@Resource
|
private InsProductMapper insProductMapper;
|
|
@Resource
|
private InsSampleMapper insSampleMapper;
|
|
@Resource
|
private InsProductResult2Mapper insProductResult2Mapper;
|
|
@Resource
|
private InsOrderStateMapper insOrderStateMapper;
|
|
//读取互调的文件
|
public void readDianLuFile1(Integer sampleId,InsOrderFile insOrderFile) {
|
String excelFilePath = wordUrl + "/" + insOrderFile.getFileUrl(); // 更新为你的文件路径
|
List<HuTiaoData> huTiaoData = readExcelData(excelFilePath);
|
//查询该样品的互调项目id
|
List<InsProduct> products = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
|
.eq(InsProduct::getState, 1)
|
.eq(InsProduct::getInsSampleId, sampleId)
|
.eq(InsProduct::getInspectionItemSubclass, "互调"));
|
//查询检验任务id
|
List<InsOrderState> orderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
|
.eq(InsOrderState::getInsSampleId, sampleId)
|
.eq(InsOrderState::getLaboratory, "电路试验"));
|
//查询原有检验数据
|
List<InsProduct> productList = getInsProduct(sampleId, "电路试验");
|
//根据频点分类
|
Map<String, List<HuTiaoData>> collect = huTiaoData.stream().collect(Collectors.groupingBy(HuTiaoData::getOften,LinkedHashMap::new, Collectors.toList()));
|
for (Map.Entry<String, List<HuTiaoData>> stringListEntry : collect.entrySet()) {
|
InsProductResult2 insProductResult2 = new InsProductResult2();
|
insProductResult2.setOften(stringListEntry.getKey()+"(M)");//频点
|
//根据下倾角进行分类
|
Map<String, List<HuTiaoData>> collect1 = stringListEntry.getValue().stream().collect(Collectors.groupingBy(HuTiaoData::getAngle,LinkedHashMap::new, Collectors.toList()));
|
String angles = collect1.entrySet().stream().map(stringListEntry1 -> stringListEntry1.getKey() + "°").collect(Collectors.joining(","));
|
insProductResult2.setAngle(angles); //下倾角
|
//根据端口号进行分类
|
Map<String, List<HuTiaoData>> collect2 = stringListEntry.getValue().stream().collect(Collectors.groupingBy(HuTiaoData::getPort,LinkedHashMap::new, Collectors.toList()));
|
String ports = collect2.entrySet().stream().map(Map.Entry::getKey).collect(Collectors.joining(","));
|
insProductResult2.setPort(ports); //端口号
|
//通过同一端口号同一下倾角获取最大检验值
|
List<String> string = new ArrayList<>();
|
for (Map.Entry<String, List<HuTiaoData>> listEntry : collect1.entrySet()) {
|
Map<String, List<HuTiaoData>> collect3 = listEntry.getValue().stream().collect(Collectors.groupingBy(HuTiaoData::getPort,LinkedHashMap::new, Collectors.toList()));
|
List<String> stringList = new ArrayList<>();
|
for (Map.Entry<String, List<HuTiaoData>> entry : collect3.entrySet()) {
|
OptionalDouble max = entry.getValue().stream().mapToDouble(value -> Double.parseDouble(value.getValue())).max();
|
stringList.add(String.valueOf(max.getAsDouble()));
|
}
|
string.add("[" + stringList.stream().collect(Collectors.joining(",")) + "]");
|
}
|
String value = "[" + string.stream().collect(Collectors.joining(",")) + "]";
|
insProductResult2.setValue(value);
|
insProductResult2.setInsProductId(products.get(0).getId());
|
//次数
|
insProductResult2.setNum(orderStates.get(0).getNum());
|
//频段(先判断原有数据是否有)
|
if (ObjectUtils.isNotEmpty(productList.get(0).getInsProductResult2())) {
|
insProductResult2.setFrequency(productList.get(0).getInsProductResult2().get(0).getFrequency());
|
}
|
insProductResult2Mapper.insert(insProductResult2);
|
}
|
}
|
|
|
public static List<HuTiaoData> readExcelData(String filePath) {
|
List<HuTiaoData> dataList = new ArrayList<>();
|
|
// 初始化监听器
|
AnalysisEventListener<HuTiaoData> listener = new AnalysisEventListener<HuTiaoData>() {
|
@Override
|
public void invoke(HuTiaoData data, AnalysisContext context) {
|
// 处理每行数据,这里简单地添加到数据列表中
|
dataList.add(data);
|
}
|
|
@Override
|
public void doAfterAllAnalysed(AnalysisContext context) {
|
// 所有数据解析完成后的操作,这里暂不实现
|
}
|
};
|
|
// 读取Excel文件
|
EasyExcel.read(filePath, HuTiaoData.class, listener).sheet().doRead();
|
|
return dataList;
|
}
|
|
public List<InsProduct> getInsProduct(Integer id, String laboratory) {
|
List<InsProduct> insProducts = new ArrayList<>();
|
//样品
|
insProducts = insSampleMapper.getInsProduct1(id, laboratory);
|
if (insProducts.size() == 0) {
|
insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
|
.eq(InsProduct::getInsSampleId, id)
|
.eq(InsProduct::getState, 1)
|
.eq(InsProduct::getSonLaboratory, laboratory));
|
for (InsProduct insProduct : insProducts) {
|
List<InsProductResult2> insProductResult2List = insProductResult2Mapper.selectList(Wrappers.<InsProductResult2>lambdaQuery()
|
.eq(InsProductResult2::getInsProductId, insProduct.getId()).isNull(InsProductResult2::getNum));
|
insProduct.setInsProductResult2(insProductResult2List);
|
}
|
}
|
return insProducts;
|
}
|
}
|