whycxzp
2021-10-12 d5cf76188ad37f062f37ebce3464097203b4db05
src/main/java/com/whyc/service/BatteryDataService.java
@@ -1,10 +1,8 @@
package com.whyc.service;
import com.whyc.dto.AnalysisMonCapDTO;
import com.whyc.dto.BatteryInfo;
import com.whyc.dto.Response;
import com.whyc.constant.AlarmConstant;
import com.whyc.dto.*;
import com.whyc.mapper.*;
import com.whyc.dto.AnalysisMonFieldDTO;
import com.whyc.pojo.BatteryEndurance;
import com.whyc.pojo.BatteryRTState;
import com.whyc.pojo.Tables;
@@ -37,25 +35,38 @@
    public Response getEndurance(Integer userId) {
        List<BatteryEndurance> enduranceList = mapper.endurance(userId);
        List<Integer> times = Arrays.asList(1, 2, 3);
        List<Integer> times = Arrays.asList(1, 2, 3,5,8);
        Map resultMap = enduranceAnalysis(enduranceList,times);
        return new Response<Map>().set(1,resultMap);
    }
    /**按时间阶段统计续航*/
    private static Map enduranceAnalysis(List<BatteryEndurance> enduranceList, List<Integer> times) {
        Map<String,Integer> map = new HashMap<>();
        Map<String,Integer> map = new LinkedHashMap<>();
        //初始化续航分类
        for (int i = 0; i < times.size(); i++) {
            if(i ==0 ){
                map.put("续航"+times.get(0)+"小时内",0);
            }
            else if(i == times.size()-1){
                map.put("续航"+times.get(i-1)+"小时到"+times.get(i)+"小时",0);
                map.put("续航"+times.get(times.size()-1)+"小时以上",0);
            }else {
                map.put("续航" + times.get(i-1) + "小时到" + times.get(i) + "小时", 0);
            }
        }
        for (int i = 0; i < enduranceList.size(); i++) {
            //每一个具体的续航进行分组
            if(enduranceList.get(i).getEnduranceActualTime()<times.get(0)){
            if(enduranceList.get(i).getEnduranceActualTime()<times.get(0)*60){
                map.put("续航"+times.get(0)+"小时内",Optional.ofNullable(map.get("续航"+times.get(0)+"小时内")).orElse(0)+1);
            }
            else if(enduranceList.get(i).getEnduranceActualTime()>times.get(times.size()-1)){
            else if(enduranceList.get(i).getEnduranceActualTime()>times.get(times.size()-1)*60){
                map.put("续航"+times.get(times.size()-1)+"小时以上",Optional.ofNullable(map.get("续航"+times.get(times.size()-1)+"小时以上")).orElse(0)+1);
            }else {
                for (int j = 0; j < times.size(); j++) {
                    if (enduranceList.get(i).getEnduranceActualTime() <= times.get(j)) {
                    if (enduranceList.get(i).getEnduranceActualTime() <= times.get(j)*60) {
                        map.put("续航" + times.get(j - 1) + "小时到" + times.get(j) + "小时", Optional.ofNullable(map.get("续航" + times.get(j - 1) + "小时到" + times.get(j) + "小时")).orElse(0) + 1);
                        break;
                    }
@@ -116,6 +127,44 @@
        return maps;
    }
    /**
     * 落后单体统计,统计各种类型所占比例:
     * 容量告警:单体容量告警
     * 容量更换:单体容量更换
     * 总电池单体-上面两种:单体容量健康
     */
    public Response getMonCapStatus(Integer userId) {
        //初始化 单体容量健康 单体容量告警 单体容量更换 和 map
        Map<String,Integer> monCapMap = new HashMap();
        Integer monCapGood = 0;
        Integer monCapAlarm = 0;
        Integer monCapChange = 0;
        //查询用户管理的总单体数
        Integer totalMonNum = mapper.getTotalMonNum(userId);
        //查询用户管理的落后单体数
        List<BadBattMonDTO> list = mapper.getBadMonOfCapAlarm(userId);
        if(!list.isEmpty()) {
            for (int i = 0; i < list.size(); i++) {
                //容量告警
                if (list.get(i).getNote() == AlarmConstant.Alarm_CapAlarm) {
                    monCapAlarm = list.get(i).getNum();
                }
                //容量更换
                else {
                    monCapChange = list.get(i).getNum();
                }
            }
        }
        monCapGood = totalMonNum - monCapAlarm -monCapChange ;
        monCapMap.put("单体容量健康",monCapGood);
        monCapMap.put("单体容量告警",monCapAlarm);
        monCapMap.put("单体容量更换",monCapChange);
        return new Response().set(1,monCapMap);
    }
    /**单体信息统计*/
    public List<AnalysisMonFieldDTO> monFieldStatistics(String filedName, String fieldName2) {
            //查询所有的电池组
@@ -170,14 +219,14 @@
            List<AnalysisMonCapDTO> capDTOList = entry.getValue();
            //执行容量统计
            for (AnalysisMonCapDTO monCapDTO : capDTOList){
                if(monCapDTO.getMonVol()>monCapDTO.getMonVolStd()*0.9f){
                //if(monCapDTO.getMonVol()>monCapDTO.getMonVolStd()*0.9f){
                    int hourRate=BattCapFactory.GetHourRate(monCapDTO.getMonCapStd(),monCapDTO.getTestCurr());
                    realCap = BattCapFactory.GetMonomerCap(monCapDTO.getMonCapStd(),hourRate,monCapDTO.getTestCap(),monCapDTO.getMaxMonVol(),
                            monCapDTO.getMonVol(),monCapDTO.getMonVolStd(),BattCapFactory.CapType_Real);
                }else{
                /*}else{
                    //查询电池测试表中对应的测试批次的单体剩余容量
                    realCap = Math.abs(testDataMapper.getRestCapByCondition(monCapDTO));
                }
                }*/
                if(realCap<minCap){
                    minCap = realCap;
                }