zss
2024-12-09 4bc7776bc6c063a9bfb9806e4bf6db5bf22985b1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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;
    }
}