package com.whyc.service;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.whyc.mapper.*;
|
import com.whyc.pojo.BattTestDataInf;
|
import com.whyc.pojo.BatteryStorageTestData;
|
import com.whyc.pojo.BatteryStorageTestDetail;
|
import com.whyc.pojo.BatteryTestDetail;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.stream.Collectors;
|
|
/**
|
* 一次测试-n个采样点组端统计
|
*/
|
@Service
|
public class BattTestDataInfService {
|
|
@Resource
|
private TableMapper tableMapper;
|
|
@Resource
|
private BatteryStorageTestDetailMapper groupTestDetailMapper;
|
|
@Resource
|
private BatteryTestDetailMapper testDetailMapper;
|
|
@Resource
|
private BatteryStorageTestDataMapper dataMapper;
|
|
@Resource
|
private BattTestDataInfMapper mapper;
|
|
/**
|
* 修正data_inf表中参数,目前已经将原表的字段testDuration放入upload_data_ext,record_num(从旧表组端计算得到的各次记录的组数)放入upload_usr_id
|
* 产生问题的原因是:旧表单次测试总体表中的记录结束时间,测试时长与单次组端记录不一致,组端记录时间超出总表记录结束时间
|
* 已经执行一次,禁止再次执行导致数据异常!!!!!!!
|
*/
|
@Deprecated
|
public void correctRecordNum(){
|
//获取所有的组端表
|
List<String> groupTableList = tableMapper.getTableNameLike("db_bcm_testdetail", "t_battery_storage_test_detail_");
|
//对每张表进行遍历,返回测试id对应的超出次数
|
List<BattTestDataInf> incorrectList = new LinkedList<>();
|
groupTableList.forEach(tableName->{
|
List<BattTestDataInf> subIncorrectList = groupTestDetailMapper.getIncorrectData(tableName);
|
incorrectList.addAll(subIncorrectList);
|
});
|
//对所有的存在不正确记录的测试id,进行记录次数减除
|
mapper.updateRecordNum(incorrectList);
|
}
|
|
/**
|
* 需要重写的表字段有
|
* 1.record_num
|
* 2.max_monvol,max_monnum,min_monnum,min_monvol
|
*/
|
public void updateField(){
|
QueryWrapper<BattTestDataInf> query = Wrappers.query();
|
query.lt("BattGroupId",10000);
|
List<BattTestDataInf> dataList = mapper.selectList(query);
|
//查询所有的表中的组端记录信息
|
List<BatteryStorageTestDetail> groupTestDataList = new ArrayList<>();
|
List<String> groupTableList = tableMapper.getTableNameLike("db_bcm_testdetail", "t_battery_storage_test_detail_");
|
for (int i = 0; i < groupTableList.size(); i++) {
|
List<BatteryStorageTestDetail> infoList = groupTestDetailMapper.getInfo(groupTableList.get(i));
|
groupTestDataList.addAll(infoList);
|
}
|
|
List<String> monTableList = tableMapper.getTableNameLike("db_bcm_testdetail", "t_battery_test_detail_");
|
//查询所有的表中的单体记录信息
|
List<BatteryTestDetail> testDataList = new ArrayList<>();
|
for (int i = 0; i < monTableList.size(); i++) {
|
List<BatteryTestDetail> extremumList = testDetailMapper.getExtremum2(monTableList.get(i));
|
testDataList.addAll(extremumList);
|
}
|
|
//LinkedHashMap<Long, List<BatteryStorageTestDetail>> map = groupTestDataList.stream().collect(Collectors.groupingBy(BatteryStorageTestDetail::getBatteryStorageTestDataId, LinkedHashMap::new, Collectors.toList()));
|
Map<Long, List<BatteryStorageTestDetail>> map = groupTestDataList.stream().collect(Collectors.groupingBy(BatteryStorageTestDetail::getBatteryStorageTestDataId));
|
Map<Integer, List<BatteryTestDetail>> testDataMap = testDataList.stream().collect(Collectors.groupingBy(BatteryTestDetail::getBatteryStorageTestDataId));
|
|
AtomicInteger sum = new AtomicInteger();
|
dataList.stream().forEach(battTestDataInf -> {
|
System.out.println("当前进行记录数:"+sum.get());
|
sum.getAndIncrement();
|
//重写1
|
System.out.println("当前的记录为:"+battTestDataInf.getBattGroupId()+","+battTestDataInf.getUploadClientType());
|
List<BatteryStorageTestDetail> subGroupList = map.get(battTestDataInf.getUploadClientType().longValue());
|
if(subGroupList!=null) {
|
battTestDataInf.setRecordNum(subGroupList.get(0).getTestTime().intValue());
|
}
|
//重写2
|
List<BatteryTestDetail> subBatteryTestDetailList = testDataMap.get(battTestDataInf.getUploadClientType());
|
if(subBatteryTestDetailList != null) {
|
battTestDataInf.setMinMonnum(subBatteryTestDetailList.get(0).getBatteryCode());
|
battTestDataInf.setMinMonvol(subBatteryTestDetailList.get(0).getVoltage());
|
|
battTestDataInf.setMaxMonnum(subBatteryTestDetailList.get(subBatteryTestDetailList.size() - 1).getBatteryCode());
|
battTestDataInf.setMaxMonvol(subBatteryTestDetailList.get(subBatteryTestDetailList.size() - 1).getVoltage());
|
}
|
});
|
//分组插入,每组100条数据
|
System.out.println("总条数为:"+dataList.size());
|
int groupNum = (int) Math.ceil(dataList.size()/100f);
|
int currentGroupNum = 1;
|
List<BattTestDataInf> subList;
|
int sumA=0;
|
for (int i = 0; i < dataList.size(); i=i+100) {
|
if(currentGroupNum!=groupNum){
|
subList = dataList.subList(i, i + 100);
|
sumA+=100;
|
}else{
|
subList = dataList.subList(i, dataList.size());
|
sumA = sumA + dataList.size()-i;
|
}
|
mapper.updateFieldBatch(subList);
|
System.out.println("已经更新记录数为:"+sumA);
|
currentGroupNum++;
|
}
|
|
/*for (int i = 0; i < dataList.size(); i++) {
|
BattTestDataInf currentData = dataList.get(i);
|
//根据testDataId查询测试了几组数据
|
int recordNum = groupTestDetailMapper.getAll2(currentData.getBattGroupId(), currentData.getUploadClientType());
|
//重写1
|
currentData.setRecordNum(recordNum);
|
//根据电池组id & 测试id 查询,当前测试id中最大的单体电压和单体编号
|
List<BatteryTestDetail> extremumList = testDetailMapper.getExtremum(currentData.getBattGroupId(), currentData.getUploadClientType());
|
|
//重写2
|
System.out.println("当前查询的表和测试id为:"+currentData.getBattGroupId()+","+currentData.getUploadClientType());
|
currentData.setMinMonnum(extremumList.get(0).getBatteryCode());
|
currentData.setMinMonvol(extremumList.get(0).getVoltage());
|
|
currentData.setMaxMonnum(extremumList.get(extremumList.size()-1).getBatteryCode());
|
currentData.setMaxMonvol(extremumList.get(extremumList.size()-1).getVoltage());
|
}*/
|
|
}
|
|
/**
|
* 更新修正版
|
*/
|
public void transferToDB2(){
|
//===查询旧表所有的数据===
|
List<BatteryStorageTestData> oldList = dataMapper.getDataList();
|
Map<Integer, List<BatteryStorageTestData>> oldListMap = oldList.stream().collect(Collectors.groupingBy(BatteryStorageTestData::getBatteryStorageId,LinkedHashMap::new,Collectors.toList()));
|
Iterator<Map.Entry<Integer, List<BatteryStorageTestData>>> iterator = oldListMap.entrySet().iterator();
|
while (iterator.hasNext()){
|
List<BatteryStorageTestData> subOldList = iterator.next().getValue();
|
for (int i = 0; i < subOldList.size(); i++) {
|
subOldList.get(i).setTestRecordCount(i+1);
|
if(i!=subOldList.size()-1){
|
subOldList.get(i).setTestRecordCountEx(i+2);
|
}else{
|
subOldList.get(i).setTestRecordCountEx(0);
|
}
|
}
|
}
|
|
//===将旧表数据插入到平台表中
|
List<BattTestDataInf> newList = new LinkedList<>();
|
oldList.forEach(oldDetail->{
|
BattTestDataInf dataInf = new BattTestDataInf();
|
dataInf.setBattGroupId(oldDetail.getBatteryStorageId());
|
dataInf.setDataAvailable(1);
|
dataInf.setDataNew(1);
|
dataInf.setGroupVol(oldDetail.getVoltage());
|
//TODO 需要后续统计给出,s1
|
dataInf.setMaxMonnum(0);
|
dataInf.setMaxMonvol(0f);
|
dataInf.setMinMonnum(0);
|
dataInf.setMinMonvol(0f);
|
dataInf.setMonNum(0);
|
dataInf.setMonVol(0f);
|
dataInf.setNum(null);
|
dataInf.setRecordNum(0);
|
//TODO 需要后续统计给出,e1
|
//存储旧的试验结束时间
|
dataInf.setRecordTime(oldDetail.getStopTestTime());
|
|
//这里填写测试经历时长,后面数值调整需要用到
|
dataInf.setRecordTimeInterval(0);
|
dataInf.setTestCap(oldDetail.getRealCapacity());
|
dataInf.setTestCurr(oldDetail.getCurrent());
|
dataInf.setTestRecordCount(oldDetail.getTestRecordCount());
|
dataInf.setTestRecordCountEx(oldDetail.getTestRecordCountEx());
|
dataInf.setTestStarttime(oldDetail.getStartTestTime());
|
try {
|
//无用处字段
|
dataInf.setTestStarttimeEx(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("1970-01-01 00:00:00"));
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
|
dataInf.setTestStoptype(0);
|
//先写入的是开始测试到当前测试节点的总时间,需要后续重新赋值为总时间-上个单体的总时间
|
dataInf.setTestTimelong(oldDetail.getTestDuration());
|
if(oldDetail.getTestType() ==1){
|
dataInf.setTestType(2);
|
if(oldDetail.getStartReason().contains("充电测试")) {
|
//对应 核容充电
|
dataInf.setTestStarttype(3);
|
}else if(oldDetail.getStartReason().contains("市电停电")) {
|
//对应 监测充电
|
dataInf.setTestStarttype(1);
|
}else{ //核容测试
|
//对应 核容充电
|
dataInf.setTestStarttype(3);
|
}
|
}else{
|
dataInf.setTestType(3);
|
if(oldDetail.getStartReason().contains("核容测试")) {
|
//对应 核容放电
|
dataInf.setTestStarttype(3);
|
}else if(oldDetail.getStartReason().contains("市电停电")) {
|
//对应 监测放电
|
dataInf.setTestStarttype(1);
|
}
|
}
|
|
//用于存储testDataId
|
dataInf.setUploadClientType(oldDetail.getId().intValue());
|
//用于存储testTime
|
dataInf.setUploadDataExt(0);
|
dataInf.setUploadUsrId(0);
|
|
newList.add(dataInf);
|
});
|
//分组插入,每组100条数据
|
System.out.println("总条数为:"+newList.size());
|
int groupNum = (int) Math.ceil(newList.size()/100f);
|
int currentGroupNum = 1;
|
List<BattTestDataInf> subList;
|
int sum=0;
|
for (int i = 0; i < newList.size(); i=i+100) {
|
if(currentGroupNum!=groupNum){
|
subList = newList.subList(i, i + 100);
|
sum+=100;
|
}else{
|
subList = newList.subList(i, newList.size());
|
sum = sum + newList.size()-i;
|
}
|
mapper.insertBatchSomeColumn(subList);
|
System.out.println("已经插入记录数为:"+sum);
|
currentGroupNum++;
|
}
|
|
}
|
|
/*public void transferToDB(){
|
//===查询旧表所有的数据===
|
List<BatteryStorageTestDetail> oldList = new LinkedList<BatteryStorageTestDetail>();
|
//查询旧表所有的数据表名
|
List<String> tableNameList = tableMapper.getTableNameLike("db_bcm_testdetail","t_battery_storage_test_detail_");
|
tableNameList.forEach(tableName->{
|
List<BatteryStorageTestDetail> singleList = testDetailMapper.getAll(tableName);
|
oldList.addAll(singleList);
|
});
|
//===将旧表数据插入到平台表中
|
List<BattTestDataInf> newList = new LinkedList<>();
|
oldList.forEach(oldDetail->{
|
BattTestDataInf dataInf = new BattTestDataInf();
|
dataInf.setBattGroupId(oldDetail.getBatteryStorageId());
|
dataInf.setDataAvailable(1);
|
dataInf.setDataNew(1);
|
dataInf.setGroupVol(oldDetail.getVoltage());
|
//TODO 需要后续统计给出,s1
|
dataInf.setMaxMonnum(0);
|
dataInf.setMaxMonvol(0f);
|
dataInf.setMinMonnum(0);
|
dataInf.setMinMonvol(0f);
|
dataInf.setMonNum(0);
|
dataInf.setMonVol(0f);
|
dataInf.setNum(null);
|
dataInf.setRecordNum(0);
|
//TODO 需要后续统计给出,e1
|
//存储旧的试验结束时间
|
dataInf.setRecordTime(oldDetail.getStopTestTime());
|
|
//这里填写测试经历时长,后面数值调整需要用到
|
dataInf.setRecordTimeInterval(0);
|
dataInf.setTestCap(oldDetail.getRealCapacity());
|
dataInf.setTestCurr(oldDetail.getCurrent());
|
//TODO 需要后续统计给出,s2
|
dataInf.setTestRecordCount(0);
|
dataInf.setTestRecordCountEx(0);
|
//先写入的是当前测试的结束时间,需要后续重新赋值为前一次的结束时间
|
dataInf.setTestStarttime(oldDetail.getStartTestTime());
|
//TODO 需要后续统计给出,e2
|
try {
|
//存储旧的测试开始时间
|
dataInf.setTestStarttimeEx(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("1970-01-01 00:00:00"));
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
|
dataInf.setTestStoptype(0);
|
//先写入的是开始测试到当前测试节点的总时间,需要后续重新赋值为总时间-上个单体的总时间
|
dataInf.setTestTimelong(oldDetail.getTestTime().intValue());
|
if(oldDetail.getTestType() ==1){
|
dataInf.setTestType(2);
|
if(oldDetail.getStartReason().contains("充电测试")) {
|
//对应 核容充电
|
dataInf.setTestStarttype(3);
|
}else if(oldDetail.getStartReason().contains("市电停电")) {
|
//对应 监测充电
|
dataInf.setTestStarttype(1);
|
}else{ //核容测试
|
//对应 核容充电
|
dataInf.setTestStarttype(3);
|
}
|
}else{
|
dataInf.setTestType(3);
|
if(oldDetail.getStartReason().contains("核容测试")) {
|
//对应 核容放电
|
dataInf.setTestStarttype(3);
|
}else if(oldDetail.getStartReason().contains("市电停电")) {
|
//对应 监测放电
|
dataInf.setTestStarttype(1);
|
}
|
}
|
|
//用于存储testDataId
|
dataInf.setUploadClientType(oldDetail.getBatteryStorageTestDataId().intValue());
|
//用于存储testTime
|
dataInf.setUploadDataExt(oldDetail.getTestTime().intValue());
|
dataInf.setUploadUsrId(0);
|
|
newList.add(dataInf);
|
});
|
//分组插入,每组100条数据
|
System.out.println("总条数为:"+newList.size());
|
int groupNum = Math.round(newList.size()/100f);
|
int currentGroupNum = 1;
|
List<BattTestDataInf> subList;
|
int sum=0;
|
for (int i = 0; i < newList.size(); i=i+100) {
|
if(currentGroupNum!=groupNum){
|
subList = newList.subList(i, i + 100);
|
sum+=100;
|
}else{
|
subList = newList.subList(i, newList.size());
|
sum = sum + newList.size()-i;
|
}
|
mapper.insertBatchSomeColumn(subList);
|
System.out.println("已经插入记录数为:"+sum);
|
currentGroupNum++;
|
}
|
|
}*/
|
}
|