whycxzp
2022-04-22 7f9ac4bf1b38b8e622f8c759efeca2af9dc12a48
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
package com.whyc.service;
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.whyc.mapper.*;
import com.whyc.pojo.BattTestDataInf;
import com.whyc.pojo.BattTestDataStop;
import com.whyc.pojo.BatteryStorageTestDetail;
import com.whyc.pojo.BatteryTestData;
import org.apache.ibatis.annotations.ResultMap;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * 一次测试-单体数据统计(最后一笔)
 */
@Service
public class BattTestDataStopService {
 
    @Resource
    private TableMapper tableMapper;
 
    @Resource
    private BatteryStorageTestDetailMapper groupTestDetailMapper;
 
    @Resource
    private BatteryTestDetailMapper testDetailMapper;
 
    @Resource
    private BatteryTestDataMapper dataMapper;
 
    @Resource
    private BattTestDataInfMapper battTestDataInfmapper;
 
    @Resource
    private BattTestDataStopMapper stopMapper;
 
    @Resource
    private BattTestDataMapper battTestDataMapper;
 
    /**创建tb_batttestdata_stop_xxx,tb_batttestdata__xxx*/
    public void createNewDB(){
        QueryWrapper<BattTestDataInf> query = Wrappers.query();
        query.select(" distinct BattGroupId").lt("BattGroupId",10000);
        List<BattTestDataInf> tableSuffixList = battTestDataInfmapper.selectList(query);
        tableMapper.createTable("db_batt_testdata",tableSuffixList);
    }
 
    public void createIndexBatch(){
        List<String> groupTableList = tableMapper.getTableNameLike("db_bcm_testdetail", "t_battery_storage_test_detail_");
        groupTableList.remove(0);
        groupTableList.remove(0);
        groupTestDetailMapper.createIndexBatch(groupTableList);
    }
 
 
    /**
     * testdata_xxx表 数据添加
     */
    public void transferToDB2(){
        //===查询旧表所有的数据===
        List<String> monTableList = tableMapper.getTableNameLike("db_bcm_testdetail", "t_battery_test_detail_");
        monTableList = monTableList.subList(48,86); //又从727执行到了731
        //对每个电池组旧数据,直接插入到新表中,也是根据电池组id单独建表
        monTableList.forEach(tableName->{
            String[] tableSplit = tableName.split("_");
            int battGroupId = Integer.parseInt(tableSplit[tableSplit.length-1]);
            List<BatteryTestData> infoList = dataMapper.getInfoList2(battGroupId);
            //List<BatteryTestData> infoList = dataMapper.getInfoList();
            //===将旧表数据插入到平台表中
            List<BattTestDataStop> newList = new LinkedList<>();
            infoList.forEach(oldInfo->{
                BattTestDataStop stop = new BattTestDataStop();
                stop.setBattGroupId(oldInfo.getBattGroupId());
                stop.setDataAvailable(1);
                stop.setDataNew(1);
                stop.setGroupVol(oldInfo.getGroupVol());
                stop.setMonNum(oldInfo.getBatteryCode());
                stop.setMonTmp(oldInfo.getTemperature());
                stop.setMonVol(oldInfo.getVoltage());
                stop.setNum(null);
                stop.setOnlineVol(0f);
                stop.setRecordNum(oldInfo.getRecordNum());
                stop.setRecordTime(oldInfo.getRecordTime());
                stop.setTestCap(oldInfo.getRealCapacity());
                stop.setTestCurr(oldInfo.getCurrent());
                stop.setTestRecordCount(oldInfo.getTestRecordCount());
                stop.setTestStarttime(oldInfo.getTestStartTime());
                stop.setTestTimelong(oldInfo.getTestTimeLong());
                stop.setTestType(oldInfo.getTestType());
 
                newList.add(stop);
            });
            //剩下来只需要对锁定一次测试中多组测试的测试时长,就可以锁定record_time,完成数据全部填充
            //对电池组内的测试进行分组,按照testRecordCount.
            Map<Integer, List<BattTestDataStop>> recordListMap = newList.stream().collect(Collectors.groupingBy(BattTestDataStop::getTestRecordCount));
            recordListMap.forEach((testRecordCount,recordList)->{
                //获取整次测试结束时间
                Date recordCountFinishTime = recordList.get(0).getRecordTime();
                Date recordCountStartTime = recordList.get(0).getTestStarttime();
                int recordNum = 1;
                //用来定位最后一组
                int groupNum = (int) Math.ceil(recordList.size() / 24f);
                int currentGroupNum = 1;
                //每次循环,是1组电池组测试数据,获取测试testTimeLong(每组测试开始时长,我们需要每组测试结束后整次的累计时长 TODO)
                for (int i = 0; i < recordList.size(); i = i +24) {
                    int testTimeLong;
                    if(currentGroupNum++ !=groupNum){
                        testTimeLong = recordList.get(i+24).getTestTimelong();
                    }else{ //最后一笔
                        testTimeLong = (int) Math.ceil((recordCountFinishTime.getTime() - recordCountStartTime.getTime())/1000);
                    }
                    int finalRecordNum = recordNum;
                    List<BattTestDataStop> subList = recordList.subList(i, i + 24);
                    subList.forEach(data->
                    {
                        data.setRecordNum(finalRecordNum);
                        data.setTestTimelong(testTimeLong);
                        data.setRecordTime(new Date(recordCountStartTime.getTime()+testTimeLong*1000));
                    });
                    /*//数据插入数据库
                    battTestDataMapper.insertBatch(battGroupId,subList);*/
                    recordNum++;
                }
                //数据插入数据库
                battTestDataMapper.insertBatch(battGroupId,recordList);
            });
 
            System.out.println("当前表查询完毕:"+tableName);
        });
        System.out.println("-----------------撒花");
    }
 
    public void transferToDB(){
        //===查询旧表所有的数据===
        List<BatteryTestData> infoList = dataMapper.getInfoList();
        //===将旧表数据插入到平台表中
        List<BattTestDataStop> newList = new LinkedList<>();
        infoList.forEach(oldInfo->{
            BattTestDataStop stop = new BattTestDataStop();
            stop.setBattGroupId(oldInfo.getBattGroupId());
            stop.setDataAvailable(1);
            stop.setDataNew(1);
            stop.setGroupVol(oldInfo.getGroupVol());
            stop.setMonNum(oldInfo.getBatteryCode());
            stop.setMonTmp(oldInfo.getTemperature());
            stop.setMonVol(oldInfo.getVoltage());
            stop.setNum(null);
            stop.setOnlineVol(0f);
            stop.setRecordNum(oldInfo.getRecordNum());
            stop.setRecordTime(oldInfo.getRecordTime());
            stop.setTestCap(oldInfo.getRealCapacity());
            stop.setTestCurr(oldInfo.getCurrent());
            stop.setTestRecordCount(oldInfo.getTestRecordCount());
            stop.setTestStarttime(oldInfo.getTestStartTime());
            stop.setTestTimelong(oldInfo.getTestTimeLong());
            stop.setTestType(oldInfo.getTestType());
 
            newList.add(stop);
        });
        //按照电池组id进行分组
        Map<Integer, List<BattTestDataStop>> listMap = newList.stream().collect(Collectors.groupingBy(BattTestDataStop::getBattGroupId));
 
        for (Map.Entry<Integer, List<BattTestDataStop>> next : listMap.entrySet()) {
            Integer battGroupId = next.getKey();
            List<BattTestDataStop> newList2 = next.getValue();
            List<BattTestDataStop> subList;
            //分组插入,每组100条数据
            System.out.println(battGroupId+"的总条数为:" + newList2.size());
            int groupNum = (int) Math.ceil(newList2.size() / 100f);
            int currentGroupNum = 1;
            int sum = 0;
            for (int i = 0; i < newList2.size(); i = i + 100) {
                if (currentGroupNum != groupNum) {
                    subList = newList2.subList(i, i + 100);
                    sum += 100;
                } else {
                    subList = newList2.subList(i, newList2.size());
                    sum = sum + newList2.size() - i;
                }
                stopMapper.insertBatch(battGroupId, subList);
                System.out.println(battGroupId+"已经插入记录数为:" + sum);
                currentGroupNum++;
            }
        }
    }
}