| | |
| | | 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 { |
| | |
| | | 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 + "%")); |
| | | } |
| | | } |