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++;
|
}
|
}
|
}
|
}
|