whycxzp
2022-09-20 ed769962f71894a5e75a1269c161e76e613aec7e
更新分析,对比
1个文件已添加
2个文件已修改
125 ■■■■■ 已修改文件
src/main/java/com/whyc/controller/BattGroupDataController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BattGroupDataService.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/util/MathUtil.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/BattGroupDataController.java
@@ -24,13 +24,14 @@
    @ApiOperation("单数据分析-单体数据列表")
    @GetMapping("list")
    public Response getList(@RequestParam int battGroupId){
    public Response getListWithTestTime(@RequestParam int battGroupId){
        List<BattgroupData> monList = service.getListWithTestTime(battGroupId);
        return new Response().set(1,monList);
    }
    @ApiOperation("对比分析-两组数据列表")
    @GetMapping("compareList")
    @ApiOperation(value = "对比分析-两组数据列表",notes = "data:第一行的基础数据,data2:第二行的基础数据," +
            "data3:key-value键值对,其中resChangeRate:内阻变化率,volChangeRate:电压变化率,resBalanceRate:内阻均一性,volBalanceRate:电压均一性")
    @GetMapping("comparedList")
    public Response getComparedList(@RequestParam int baseBattGroupId,@RequestParam int battGroupId){
        return service.getComparedList(baseBattGroupId,battGroupId);
    }
src/main/java/com/whyc/service/BattGroupDataService.java
@@ -4,11 +4,16 @@
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 {
@@ -24,12 +29,78 @@
        List<BattgroupData> baseDataList = getListWithTestTime(baseBattGroupId);
        List<BattgroupData> dataList = getListWithTestTime(battGroupId);
        //内阻变化率,均一性;电压变化率,均一性 TODO 均一性
        List<Float> resChangeRate = new LinkedList<>();
        List<Float> volChangeRate = new LinkedList<>();
        List<Float> resBalanceRate = new LinkedList<>();
        List<Float> volBalanceRate = new LinkedList<>();
        //内阻变化率,均一性;电压变化率,均一性
        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<>();
        return new Response().setII(1,baseDataList,dataList,null);
        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 + "%"));
    }
}
src/main/java/com/whyc/util/MathUtil.java
New file
@@ -0,0 +1,35 @@
package com.whyc.util;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class MathUtil {
    public static float getStandardDeviation(List<Float> list){
        //求平均值
        float avg = list.stream().collect(Collectors.averagingDouble(Float::floatValue)).floatValue();
        //求方差
        //相减,平方,累加
        float subSquareTotal = 0.0f;
        for (Float item : list) {
            subSquareTotal += (item -avg)*(item -avg);
        }
        Float s = subSquareTotal/list.size();
        //标准差
        double σ = Math.sqrt(s.doubleValue());
        return BigDecimal.valueOf(σ).setScale(4, RoundingMode.HALF_UP).floatValue();
    }
    public static void main(String[] args) {
        Float[] f = {3.54f,3.55f,3.55f,3.56f,3.57f,3.56f,3.58f,3.58f,3.56f};
        Float[] f2 = {3.53f,3.55f,3.56f,3.57f,3.59f,3.58f,3.6f,3.6f,3.61f};
        Float standardDeviation = getStandardDeviation(Arrays.asList(f));
        Float standardDeviation2 = getStandardDeviation(Arrays.asList(f2));
        System.out.println(standardDeviation);
        System.out.println(standardDeviation2);
    }
}