package com.whyc.service;
|
|
import com.whyc.dto.Response;
|
import com.whyc.mapper.BattGroupDataMapper;
|
import com.whyc.pojo.BattgroupData;
|
import com.whyc.pojo.FileInfo;
|
import com.whyc.util.MathUtil;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.util.HashMap;
|
import java.util.LinkedList;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
@Service
|
public class BattGroupDataService {
|
|
@Resource
|
private BattGroupDataMapper mapper;
|
|
public List<BattgroupData> getListWithTestTime(int battGroupId) {
|
return mapper.getListWithTestTime(battGroupId);
|
}
|
|
public Response getComparedList(int baseBattGroupId, int battGroupId) {
|
List<BattgroupData> baseDataList = getListWithTestTime(baseBattGroupId);
|
List<BattgroupData> dataList = getListWithTestTime(battGroupId);
|
|
//内阻变化率,均一性;电压变化率,均一性
|
Map<String,List<String>> map = new HashMap<>();
|
List<String> resChangeRate = new LinkedList<>();
|
List<String> volChangeRate = new LinkedList<>();
|
List<String> resBalanceRate = new LinkedList<>();
|
List<String> volBalanceRate = new LinkedList<>();
|
|
float sdBaseBr = MathUtil.getStandardDeviation(baseDataList.stream().map(BattgroupData::getBr).collect(Collectors.toList()));
|
float sdBaseBv = MathUtil.getStandardDeviation(baseDataList.stream().map(BattgroupData::getBv).collect(Collectors.toList()));
|
float sdBr = MathUtil.getStandardDeviation(dataList.stream().map(BattgroupData::getBr).collect(Collectors.toList()));
|
float sdBv = MathUtil.getStandardDeviation(dataList.stream().map(BattgroupData::getBv).collect(Collectors.toList()));
|
|
resBalanceRate.add(sdBaseBr*100+"%");
|
resBalanceRate.add(sdBr*100+"%");
|
|
volBalanceRate.add(sdBaseBv*100+"%");
|
volBalanceRate.add(sdBv*100+"%");
|
|
for (int i = 0; i < dataList.size(); i++) {
|
BattgroupData data = dataList.get(i);
|
//这么做是在 电池单体数据按存储顺序且不出现断层
|
BattgroupData baseData = null;
|
if(i< baseDataList.size()) {
|
baseData = baseDataList.get(i);
|
}
|
if(baseData!=null){
|
//进行内阻和电压变化率计算
|
Float br = data.getBr();
|
Float baseBr = baseData.getBr();
|
if(baseBr == 0.0f){
|
if(br == 0.0f){
|
resChangeRate.add("0.0%");
|
}else{
|
resChangeRate.add("-");
|
}
|
}else {
|
float brFloat = BigDecimal.valueOf(br).subtract(BigDecimal.valueOf(baseBr)).divide(BigDecimal.valueOf(baseBr), 4, BigDecimal.ROUND_HALF_UP).floatValue();
|
resChangeRate.add(brFloat * 100 + "%");
|
}
|
|
Float bv = data.getBv();
|
Float baseBv = baseData.getBv();
|
if(baseBv == 0.0f){
|
if(bv == 0.0f){
|
volChangeRate.add("0.0%");
|
}else{
|
volChangeRate.add("-");
|
}
|
}else {
|
float bvFloat = BigDecimal.valueOf(bv).subtract(BigDecimal.valueOf(baseBv)).divide(BigDecimal.valueOf(baseBv), 4, BigDecimal.ROUND_HALF_UP).floatValue();
|
volChangeRate.add(bvFloat * 100 + "%");
|
}
|
}
|
}
|
//将均一性值,也进行变化率计算
|
float brFloat = BigDecimal.valueOf(sdBr).subtract(BigDecimal.valueOf(sdBaseBr)).divide(BigDecimal.valueOf(sdBaseBr),4, BigDecimal.ROUND_HALF_UP).floatValue();
|
resChangeRate.add(brFloat*100+"%");
|
|
float bvFloat = BigDecimal.valueOf(sdBv).subtract(BigDecimal.valueOf(sdBaseBv)).divide(BigDecimal.valueOf(sdBaseBv),4, BigDecimal.ROUND_HALF_UP).floatValue();
|
volChangeRate.add(bvFloat*100+"%");
|
|
map.put("resChangeRate",resChangeRate);
|
map.put("volChangeRate",volChangeRate);
|
map.put("resBalanceRate",resBalanceRate);
|
map.put("volBalanceRate",volBalanceRate);
|
return new Response().setIII(1,baseDataList,dataList,map,null);
|
}
|
|
public static void main(String[] args) {
|
Float bv = 0.353f;
|
Float baseBv = 0.354f;
|
float bvFloat = BigDecimal.valueOf(bv).subtract(BigDecimal.valueOf(baseBv)).divide(BigDecimal.valueOf(baseBv),4,BigDecimal.ROUND_HALF_UP).floatValue();
|
System.out.println((bvFloat * 100 + "%"));
|
}
|
}
|