whyclxw
2025-05-28 e16302f9d475c7cc4dd18c5abf1a23cb5502e362
src/main/java/com/whyc/service/BadBattMonService.java
@@ -1,5 +1,6 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.whyc.dto.AlarmDaoFactory;
@@ -7,37 +8,81 @@
import com.whyc.dto.Response;
import com.whyc.dto.paramter.BattinfPar;
import com.whyc.dto.result.ReportBattBadDTO;
import com.whyc.mapper.AlarmParamMapper;
import com.whyc.mapper.BadbattMonMapper;
import com.whyc.mapper.BattInfMapper;
import com.whyc.pojo.AlarmParam;
import com.whyc.pojo.BadbattMon;
import com.whyc.pojo.BattMapInformation;
import com.whyc.pojo.UserInf;
import com.whyc.util.ActionUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class BadBattMonService {
    @Resource
    BadbattMonMapper badbattMonMapper;
    @Resource
    AlarmParamMapper alarmParamMapper;
    @Resource
    BattInfMapper binfMapper;
    public Response<List<BattMaintDealarm>> searchByInfo(int pageNum,int pageSize,BattinfPar battinfPar) {
    public Response<List<BattMaintDealarm>> searchByInfo(int pageNum, int pageSize, BattinfPar battinfPar) {
        //分页信息
        PageHelper.startPage(pageNum,pageSize);
        PageHelper.startPage(pageNum, pageSize);
        UserInf userInf = ActionUtil.getUser();
        List<ReportBattBadDTO> list = badbattMonMapper.searchByInfo(battinfPar,userInf.getUId().intValue());
        for (ReportBattBadDTO dto:list) {
            if(Integer.parseInt(dto.getBdmon().getNote())== AlarmDaoFactory.Alarm_CapAlarm){
        float capAlarm = 0.8f;
        float capChange = 0.6f;
        //1.查询劣化(告警)和损坏(更换)的阈值
        QueryWrapper<AlarmParam> alarmWrapper = new QueryWrapper();
        alarmWrapper.and(wrapper -> {
            return wrapper.eq("alm_name", "Batt_Alarm_Type_CapAlarm").or().eq("alm_name", "Batt_Alarm_Type_CapChange");
        });
        alarmWrapper.orderByAsc("alm_id");
        List<AlarmParam> paramList = alarmParamMapper.selectList(alarmWrapper);
        if (paramList.size() > 0) {
            capAlarm = paramList.get(0).getAlmLowCoe();//劣化参数0.8
            capChange = paramList.get(1).getAlmLowCoe();//损坏参数0.6
        }
        battinfPar.setCapAlarm(capAlarm);
        battinfPar.setCapChange(capChange);
        List<ReportBattBadDTO> list = badbattMonMapper.searchByInfo(battinfPar, userInf.getUId().intValue());
        for (ReportBattBadDTO dto : list) {
            if (Integer.parseInt(dto.getBdmon().getNote()) == AlarmDaoFactory.Alarm_CapAlarm) {
                dto.getBdmon().setNote("告警");
            }else if(Integer.parseInt(dto.getBdmon().getNote())== AlarmDaoFactory.Alarm_CapChange){
            } else if (Integer.parseInt(dto.getBdmon().getNote()) == AlarmDaoFactory.Alarm_CapChange) {
                dto.getBdmon().setNote("更换");
            }else{
            } else {
                dto.getBdmon().setNote("--");
            }
        }
        PageInfo<ReportBattBadDTO> pinfo = new PageInfo(list);
        return new Response().set(1, pinfo, "查询成功");
    }
    public Response<List<BattMaintDealarm>> searchByInfo2(int pageNum, int pageSize, BattinfPar battinfPar) {
        //分页信息
        PageHelper.startPage(pageNum, pageSize);
        UserInf userInf = ActionUtil.getUser();
        List<ReportBattBadDTO> list = badbattMonMapper.searchByInfo2(battinfPar, userInf.getUId().intValue());
        for (ReportBattBadDTO dto : list) {
            switch (dto.getBdmon().getFlag()){
                case 1:dto.getBdmon().setNote("损坏");break;
                case 2:dto.getBdmon().setNote("劣化");break;
                case 3:dto.getBdmon().setNote("优秀");break;
                case 4:dto.getBdmon().setNote("无法判断");break;
            }
        }
        PageInfo<ReportBattBadDTO> pinfo = new PageInfo(list);
        return new Response().set(1, pinfo, "查询成功");
    }
    //落后单体数量查询
@@ -56,12 +101,178 @@
    }
    //管理员首页:蓄电池优劣分析
    @Transactional
    public Response getQualityAnalysis(int userId) {
        return new Response().set(1);
        try {
            //1.查询劣化(告警)和损坏(更换)的阈值
            QueryWrapper<AlarmParam> alarmWrapper = new QueryWrapper();
            alarmWrapper.and(wrapper -> {
                return wrapper.eq("alm_name", "Batt_Alarm_Type_CapAlarm").or().eq("alm_name", "Batt_Alarm_Type_CapChange");
            });
            alarmWrapper.orderByAsc("alm_id");
            List<AlarmParam> paramList = alarmParamMapper.selectList(alarmWrapper);
            float capAlarm = 0f;
            float capChange = 0f;
            if (paramList != null && paramList.size() > 0) {
                capAlarm = paramList.get(0).getAlmLowCoe();//劣化参数0.8
                capChange = paramList.get(1).getAlmLowCoe();//损坏参数0.6
            } else {
                capAlarm = 0.8f;
                capChange = 0.6f;
            }
            Map<String, Integer> map = new HashMap<>();
            //劣化数量(包含损坏)
            int alarmNum = badbattMonMapper.getQualityAnalysis(userId, capAlarm);
            //损坏数量
            int changeNum = badbattMonMapper.getQualityAnalysis(userId, capChange);
            map.put("alarmNum", (alarmNum - changeNum));
            map.put("changeNum", changeNum);
            //总单体数(分类)
            int monNum = binfMapper.getMonCount(userId);
            map.put("monNum", monNum);
            //蓄电池优良
            map.put("goodSum", (monNum - alarmNum));
            return new Response().setII(1, true, map, "蓄电池优劣分析");
        } catch (Exception e) {
            return new Response<>().set(1, false, "发生异常:" + e.getCause());
        }
    }
    //管理员首页:蓄电池组优劣分析
    @Transactional
    public Response getGroupAnalysis(int userId) {
        try {
            //1.查询劣化(告警)和损坏(更换)的阈值
            QueryWrapper<AlarmParam> alarmWrapper = new QueryWrapper();
            alarmWrapper.and(wrapper -> {
                return wrapper.eq("alm_name", "Batt_Alarm_Type_CapAlarm").or().eq("alm_name", "Batt_Alarm_Type_CapChange");
            });
            alarmWrapper.orderByAsc("alm_id");
            List<AlarmParam> paramList = alarmParamMapper.selectList(alarmWrapper);
            float capAlarm = 0f;
            float capChange = 0f;
            if (paramList != null && paramList.size() > 0) {
                capAlarm = paramList.get(0).getAlmLowCoe();//劣化参数0.8
                capChange = paramList.get(1).getAlmLowCoe();//损坏参数0.6
            } else {
                capAlarm = 0.8f;
                capChange = 0.6f;
            }
            Map<String, Integer> map = new HashMap<>();
            //站点劣化数量(包含损坏)
            int alarmNum = badbattMonMapper.getGroupAnalysis(userId, capAlarm);
            //站点损坏数量
            int changeNum = badbattMonMapper.getGroupAnalysis(userId, capChange);
            map.put("alarmNum", (alarmNum - changeNum));
            map.put("changeNum", changeNum);
            //总电池组数(分类)
            int groupNum = binfMapper.geGroupCount(userId);
            map.put("groupNum", groupNum);
            //蓄电池优良
            map.put("goodSum", (groupNum - alarmNum));
            return new Response().setII(1, true, map, "蓄电池组优劣分析");
        } catch (Exception e) {
            return new Response<>().set(1, false, "发生异常:" + e.getCause());
        }
    }
    //管理员首页:不同品牌同一时间品质
    public Response getProductQuaAnalysis(int userId) {
        return new Response().set(1);
        Map<String, Map<String, Map<String, Integer>>> responseMap = new HashMap<>();
        float capAlarm = 0.8f;
        float capChange = 0.6f;
        try {
            //1.查询劣化(告警)和损坏(更换)的阈值
            QueryWrapper<AlarmParam> alarmWrapper = new QueryWrapper();
            alarmWrapper.and(wrapper -> {
                return wrapper.eq("alm_name", "Batt_Alarm_Type_CapAlarm").or().eq("alm_name", "Batt_Alarm_Type_CapChange");
            });
            alarmWrapper.orderByAsc("alm_id");
            List<AlarmParam> paramList = alarmParamMapper.selectList(alarmWrapper);
            if (paramList.size() > 0) {
                capAlarm = paramList.get(0).getAlmLowCoe();//劣化参数0.8
                capChange = paramList.get(1).getAlmLowCoe();//损坏参数0.6
            }
            //1~7年内数据
            for (int i = 1; i <= 8; i++) {
                List<BadbattMon> list = new ArrayList<>();
                String yeari = "year" + i;
                if (i == 8) {//8的时候超过7年
                    yeari = "yearOther";
                    list = badbattMonMapper.getProductQuaAnalysis(userId, 7, capAlarm, capChange, 0);
                } else {
                    list = badbattMonMapper.getProductQuaAnalysis(userId, i, capAlarm, capChange, 1);
                }
                Map<String, List<BadbattMon>> listMap = list.stream().collect(Collectors.groupingBy(BadbattMon::getBattProducer));
                Map<String, Map<String, Integer>> producerMap = new HashMap<>();
                for (String producer : listMap.keySet()) {
                    List<BadbattMon> badList = listMap.get(producer);
                    Map<String, List<BadbattMon>> badListMap = badList.stream().collect(Collectors.groupingBy(BadbattMon::getNote));
                    Map<String, Integer> badMap = new HashMap<>();
                    badMap.put("change", 0);
                    badMap.put("alarm", 0);
                    badMap.put("good", 0);
                    for (String note : badListMap.keySet()) {
                        badMap.put(note, badListMap.get(note).size());
                    }
                    producerMap.put(producer, badMap);
                }
                responseMap.put(yeari, producerMap);
            }
            return new Response().set(1, responseMap, "不同品牌同一时间品质和同品牌同时间品质");
        } catch (Exception e) {
            return new Response().set(1, responseMap, e.getCause().toString());
        }
    }
    //管理员首页:不同品牌同一时间品质
    public Response getProductQuaAnalysis2(int userId) {
        Map<String, Map<String, Map<String, Integer>>> responseMap = new HashMap<>();
        float capAlarm = 0.8f;
        float capChange = 0.6f;
        try {
            //1.查询劣化(告警)和损坏(更换)的阈值
            QueryWrapper<AlarmParam> alarmWrapper = new QueryWrapper();
            alarmWrapper.and(wrapper -> {
                return wrapper.eq("alm_name", "Batt_Alarm_Type_CapAlarm").or().eq("alm_name", "Batt_Alarm_Type_CapChange");
            });
            alarmWrapper.orderByAsc("alm_id");
            List<AlarmParam> paramList = alarmParamMapper.selectList(alarmWrapper);
            if (paramList.size() > 0) {
                capAlarm = paramList.get(0).getAlmLowCoe();//劣化参数0.8
                capChange = paramList.get(1).getAlmLowCoe();//损坏参数0.6
            }
            //1~7年内数据
            for (int i = 1; i <= 8; i++) {
                List<BadbattMon> list = new ArrayList<>();
                String yeari = "year" + i;
                if (i == 8) {//8的时候超过7年
                    yeari = "yearOther";
                    list = badbattMonMapper.getProductQuaAnalysis2(userId, 7, capAlarm, capChange, 0);
                } else {
                    list = badbattMonMapper.getProductQuaAnalysis2(userId, i, capAlarm, capChange, 1);
                }
                Map<String, List<BadbattMon>> listMap = list.stream().collect(Collectors.groupingBy(BadbattMon::getBattProducer));
                Map<String, Map<String, Integer>> producerMap = new HashMap<>();
                for (String producer : listMap.keySet()) {
                    List<BadbattMon> badList = listMap.get(producer);
                    Map<String, List<BadbattMon>> badListMap = badList.stream().collect(Collectors.groupingBy(BadbattMon::getNote));
                    Map<String, Integer> badMap = new HashMap<>();
                    badMap.put("change", 0);
                    badMap.put("alarm", 0);
                    badMap.put("good", 0);
                    for (String note : badListMap.keySet()) {
                        badMap.put(note, badListMap.get(note).size());
                    }
                    producerMap.put(producer, badMap);
                }
                responseMap.put(yeari, producerMap);
            }
            return new Response().set(1, responseMap, "不同品牌同一时间品质和同品牌同时间品质");
        } catch (Exception e) {
            return new Response().set(1, responseMap, e.getCause().toString());
        }
    }
}