whycxzp
2021-03-19 a867557192408a8ea7050b40b8dd157054146430
更新 部分电池数据统计接口
7个文件已修改
2个文件已添加
238 ■■■■ 已修改文件
src/main/java/com/whyc/controller/BatteryDataController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/DataAnalysisFloatDTO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/DataAnalysisIntegerDTO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/BatteryDataMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BatteryAlarmService.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BatteryDataService.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/PowerAlarmService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/util/MathUtil.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BatteryDataMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/BatteryDataController.java
@@ -12,6 +12,7 @@
/**
 * 电池数据统计
 * TODO: 单体统计每日更新一次,从缓存中获取提高效率
 */
@RestController
@RequestMapping("batteryData")
@@ -33,5 +34,24 @@
        return service.getBatteryCap(userId);
    }
    /**这个接口后续需要考虑是否分开电压统计和温度统计*/
    @GetMapping("monVolAndTemp")
    @ApiOperation(value = "单体电压和温度统计")
    public Response getMonVolAndTemp(@RequestParam Integer userId){
        return service.getMonVolAndTemp(userId);
    }
    @GetMapping("monRes")
    @ApiOperation(value = "单体电阻统计")
    public Response getMonRes(@RequestParam Integer userId){
        return service.getMonRes(userId);
    }
    @GetMapping("monCap")
    @ApiOperation(value = "单体容量统计")
    public Response getMonCap(@RequestParam Integer userId){
        return service.getMonCap(userId);
    }
}
src/main/java/com/whyc/dto/DataAnalysisFloatDTO.java
New file
@@ -0,0 +1,35 @@
package com.whyc.dto;
/**
 * 数据统计传输类-浮点型
 */
public class DataAnalysisFloatDTO {
    private Float min;
    private Float max;
    private Float average;
    public Float getMin() {
        return min;
    }
    public void setMin(Float min) {
        this.min = min;
    }
    public Float getMax() {
        return max;
    }
    public void setMax(Float max) {
        this.max = max;
    }
    public Float getAverage() {
        return average;
    }
    public void setAverage(Float average) {
        this.average = average;
    }
}
src/main/java/com/whyc/dto/DataAnalysisIntegerDTO.java
New file
@@ -0,0 +1,35 @@
package com.whyc.dto;
/**
 * 数据统计传输类-整型
 */
public class DataAnalysisIntegerDTO {
    private Integer min;
    private Integer max;
    private Integer average;
    public Integer getMin() {
        return min;
    }
    public void setMin(Integer min) {
        this.min = min;
    }
    public Integer getMax() {
        return max;
    }
    public void setMax(Integer max) {
        this.max = max;
    }
    public Integer getAverage() {
        return average;
    }
    public void setAverage(Integer average) {
        this.average = average;
    }
}
src/main/java/com/whyc/mapper/BatteryDataMapper.java
@@ -1,10 +1,23 @@
package com.whyc.mapper;
import com.whyc.dto.DataAnalysisFloatDTO;
import com.whyc.pojo.BatteryEndurance;
import com.whyc.pojo.BatteryRTState;
import java.util.List;
public interface BatteryDataMapper {
    List<BatteryEndurance> endurance(Integer userId);
    List<BatteryRTState> getBatteryCap(Integer userId);
    //TODO
    List<DataAnalysisFloatDTO> getMonVolAndTemp(Integer userId);
    //TODO
    DataAnalysisFloatDTO getMonRes(Integer userId);
    //TODO
    DataAnalysisFloatDTO getMonCap(Integer userId);
}
src/main/java/com/whyc/service/BatteryAlarmService.java
@@ -54,9 +54,9 @@
            int totalStationNum = infoMapper.getStationCount(userId);
            //容量低告警占比
            String capLowRateStr = MathUtil.divide(alarmNum,totalAlarmNum);
            String capLowRateStr = (String) MathUtil.divide(alarmNum,totalAlarmNum,false);
            //容量低告警机房占比
            String capLowStationRateStr = MathUtil.divide(stationNum,totalStationNum);
            String capLowStationRateStr = (String) MathUtil.divide(stationNum,totalStationNum,false);
            resultMap.put("告警数",alarmNum);
            resultMap.put("告警总数",totalAlarmNum);
@@ -151,9 +151,9 @@
            //总机房数
            int totalStationNum = infoMapper.getStationCount(userId);
            //放电电流低告警占比
            String disChargeLowRateStr = MathUtil.divide(disChargeAlarmNum,totalAlarmNum);
            String disChargeLowRateStr = (String) MathUtil.divide(disChargeAlarmNum,totalAlarmNum,false);
            //放电电流低告警机房占比
            String disChargeLowStationRateStr = MathUtil.divide(disChargeStationNum,totalStationNum);
            String disChargeLowStationRateStr = (String) MathUtil.divide(disChargeStationNum,totalStationNum,false);
            resultMap.put("低告警数量", disChargeAlarmNum);     //低告警数量 alm_signal_id:DisChargeCurr 7 high; 8 low
            resultMap.put("告警机房总数", disChargeStationNum);      //告警机房总数
@@ -193,9 +193,9 @@
        int totalStationNum = infoMapper.getStationCount(userId);
        //放电电流高告警占比
        String dischargeRateStr = MathUtil.divide(dischargeHighAlarmsNum,totalStationAlarmNum);
        String dischargeRateStr = (String) MathUtil.divide(dischargeHighAlarmsNum,totalStationAlarmNum,false);
        //放电电流高告警机房占比
        String dischargeStationRateStr = MathUtil.divide(dischargeTotalAlarmStations,totalStationNum);
        String dischargeStationRateStr = (String) MathUtil.divide(dischargeTotalAlarmStations,totalStationNum,false);
        disCharge.put("高告警数量",dischargeHighAlarmsNum);     //高告警数量    alm_signal_id:ChargeCurrHigh 5 high; 6 low
        disCharge.put("告警总数",totalStationAlarmNum);        //告警总数
@@ -213,9 +213,9 @@
        int chargeTotalAlarmStations = mapper.getTotalAlarmStations(userId,AlarmConstant.ALM_SIGNAL_ID_ChargeCurrHigh);
        //放电电流高告警占比
        String chargeRateStr = MathUtil.divide(chargeHighAlarmsNum,totalStationAlarmNum);
        String chargeRateStr = (String) MathUtil.divide(chargeHighAlarmsNum,totalStationAlarmNum,false);
        //放电电流高告警机房占比
        String chargeStationRateStr = MathUtil.divide(chargeTotalAlarmStations,totalStationNum);
        String chargeStationRateStr = (String) MathUtil.divide(chargeTotalAlarmStations,totalStationNum,false);
        reCharge.put("高告警数量", chargeHighAlarmsNum);     //高告警数量
        reCharge.put("告警总数", totalStationAlarmNum);        //告警总数
@@ -263,9 +263,9 @@
        int totalStationNum = infoMapper.getStationCount(userId);
        //电压告警占比
        String volRateStr = MathUtil.divide(volTotalAlarmNum,totalStationAlarmNum);
        String volRateStr = (String) MathUtil.divide(volTotalAlarmNum,totalStationAlarmNum,false);
        //电压告警机房占比
        String volStationRateStr = MathUtil.divide(volTotalAlarmStations,totalStationNum);
        String volStationRateStr = (String) MathUtil.divide(volTotalAlarmStations,totalStationNum,false);
        monVolMap.put("高告警数量", volHighAlarmsNum);     //高告警数量    alm_signal_id 9
@@ -292,9 +292,9 @@
        int resTotalAlarmStations = mapper.getTotalAlarmStations(userId,AlarmConstant.Alarm_res_Monomer);
        //内阻告警占比
        String resRateStr = MathUtil.divide(resTotalAlarmNum,totalStationAlarmNum);
        String resRateStr = (String) MathUtil.divide(resTotalAlarmNum,totalStationAlarmNum,false);
        //内阻告警机房占比
        String resStationRateStr = MathUtil.divide(resTotalAlarmStations,totalStationNum);
        String resStationRateStr = (String) MathUtil.divide(resTotalAlarmStations,totalStationNum,false);
        monResMap.put("高告警数量", resHighAlarmsNum);     //高告警数量    alm_signal_id 13
        monResMap.put("低告警数量", resLowAlarmsNum);     //低告警数量     alm_signal_id 14
@@ -318,9 +318,9 @@
        int tempTotalAlarmStations = mapper.getTotalAlarmStations(userId,AlarmConstant.Alarm_tmp_Monomer);
        //温度告警占比
        String tempRateStr = MathUtil.divide(tempTotalAlarmNum,totalStationAlarmNum);
        String tempRateStr = (String) MathUtil.divide(tempTotalAlarmNum,totalStationAlarmNum,false);
        //温度告警机房占比
        String tempStationRateStr = MathUtil.divide(tempTotalAlarmStations,totalStationNum);
        String tempStationRateStr = (String) MathUtil.divide(tempTotalAlarmStations,totalStationNum,false);
        monTemMap.put("高告警数量", tempHighAlarmsNum);     //高告警数量    alm_signal_id 13
        monTemMap.put("低告警数量", tempLowAlarmsNum);     //低告警数量     alm_signal_id 14
@@ -358,9 +358,9 @@
        int totalStationNum = infoMapper.getStationCount(userId);
        //告警占比
        String rate = MathUtil.divide(alarmNum,totalAlarmNum);
        String rate = (String) MathUtil.divide(alarmNum,totalAlarmNum,false);
        //告警机房占比
        String stationRate = MathUtil.divide(alarmStationNum,totalStationNum);
        String stationRate = (String) MathUtil.divide(alarmStationNum,totalStationNum,false);
        resMap.put(alarmName,alarmNum);     //告警数量
        resMap.put("告警总数", totalAlarmNum);        //告警总数
@@ -403,9 +403,9 @@
            int totalStationNum = infoMapper.getStationCount(userId);
            //告警占比
            String rate = MathUtil.divide(totalAlarmNum,totalAlarms);
            String rate = (String) MathUtil.divide(totalAlarmNum,totalAlarms,false);
            //告警机房占比
            String stationRate = MathUtil.divide(alarmStationNum,totalStationNum);
            String stationRate = (String) MathUtil.divide(alarmStationNum,totalStationNum,false);
            resMap.put(mapName1,alarmNum);     //告警1数量
            resMap.put(mapName2,alarmNum2);     //告警2数量
src/main/java/com/whyc/service/BatteryDataService.java
@@ -1,8 +1,11 @@
package com.whyc.service;
import com.whyc.dto.DataAnalysisFloatDTO;
import com.whyc.dto.Response;
import com.whyc.mapper.BatteryDataMapper;
import com.whyc.pojo.BatteryEndurance;
import com.whyc.pojo.BatteryRTState;
import com.whyc.util.MathUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -41,7 +44,6 @@
                }
            }
        }
        //排序
        TreeMap<String, Integer> maps = new TreeMap<>(new Comparator<String>() {
            @Override
@@ -57,9 +59,61 @@
    }
    public Response getBatteryCap(Integer userId) {
        return null;
        List<BatteryRTState> batteryRTStates = mapper.getBatteryCap(userId);
        List<Float> percents = Arrays.asList(0.8f, 0.85f,0.9f,0.95f);
        Map resultMap = batteryCapAnalysis(batteryRTStates,percents);
        return new Response<Map>().set(1,resultMap);
    }
    private Map batteryCapAnalysis(List<BatteryRTState> batteryRTStates, List<Float> percents) {
        Map<String,Integer> map = new HashMap<>();
        for (int i = 0; i < batteryRTStates.size(); i++) {
            //每一个具体的续航进行分组
            if((Float)MathUtil.divide(batteryRTStates.get(i).getBatteryRealCap(),batteryRTStates.get(i).getMonCapStd(),true)<percents.get(0)){
                map.put(percents.get(0)+"以下",Optional.ofNullable(map.get(percents.get(0)+"以下")).orElse(0)+1);
            }
            else if((Float)MathUtil.divide(batteryRTStates.get(i).getBatteryRealCap(),batteryRTStates.get(i).getMonCapStd(),true)>percents.get(percents.size()-1)){
                map.put(percents.get(percents.size()-1)+"以上",Optional.ofNullable(map.get(percents.get(percents.size()-1)+"以上")).orElse(0)+1);
            }else {
                for (int j = 0; j < percents.size(); j++) {
                    if ((Float)MathUtil.divide(batteryRTStates.get(i).getBatteryRealCap(),batteryRTStates.get(i).getMonCapStd(),true) <= percents.get(j)) {
                        map.put(percents.get(j - 1) + "到" + percents.get(j), Optional.ofNullable(map.get(percents.get(j - 1) + "到" + percents.get(j))).orElse(0) + 1);
                        break;
                    }
                }
            }
        }
        //排序
        TreeMap<String, Integer> maps = new TreeMap<>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });
        maps.putAll(map);
        map.clear();
        return maps;
    }
    public Response getMonVolAndTemp(Integer userId) {
        List<DataAnalysisFloatDTO> dataList= mapper.getMonVolAndTemp(userId);
        return new Response<>().set(1,dataList);
    }
    public Response getMonRes(Integer userId) {
        DataAnalysisFloatDTO data= mapper.getMonRes(userId);
        return new Response<>().set(1,data);
    }
    public Response getMonCap(Integer userId) {
        DataAnalysisFloatDTO data= mapper.getMonCap(userId);
        return new Response<>().set(1,data);
    }
    public static void main(String[] args) {
        BatteryEndurance endurance = new BatteryEndurance();
        endurance.setEnduranceActualTime(1.5);
src/main/java/com/whyc/service/PowerAlarmService.java
@@ -438,7 +438,7 @@
        //总机房数
        int stationCount = infoMapper.getStationCount(userId);
        //比例
        String alarmStationRate = MathUtil.divide(alarmStationCount, stationCount);
        String alarmStationRate = (String) MathUtil.divide(alarmStationCount, stationCount,false);
        resultMap.put("告警机房数",alarmStationCount);
        resultMap.put("告警机房比例",alarmStationRate);
src/main/java/com/whyc/util/MathUtil.java
@@ -8,9 +8,15 @@
 */
public class MathUtil {
    /**提取公共方法,相除获取比例*/
    public static String divide(int num,int num2){
        double res = BigDecimal.valueOf(num).divide(BigDecimal.valueOf(num2), 2, RoundingMode.HALF_UP).doubleValue();
    /**
     * 提取公共方法,相除获取比例,返回可选String或者Float
     * @return Object String或者Float类型
     * */
    public static Object divide(Object num,Object num2,boolean isFloat){
        float res = BigDecimal.valueOf((Float) num).divide(BigDecimal.valueOf((Float) num2), 2, RoundingMode.HALF_UP).floatValue();
        if(isFloat){
            return res;
        }
        return (int)(res*100)+"%";
    }
src/main/resources/mapper/BatteryDataMapper.xml
@@ -25,4 +25,31 @@
                    AND db_battinf.tb_battinf.station_install = 1
                )
    </select>
    <select id="getBatteryCap" resultType="com.whyc.pojo.BatteryRTState">
        SELECT
            state.batt_real_cap AS batteryRealCap,
            battInf.MonCapStd AS monCapStd
        FROM
            db_ram_db.tb_batt_rtstate state,
            db_battinf.tb_battinf battInf
        WHERE
            state.BattGroupId = battInf.BattGroupId
            AND batt_real_cap > 0
            AND state.BattGroupId IN (
                SELECT DISTINCT
                    db_battinf.tb_battinf.BattGroupId
                FROM
                    db_battinf.tb_battinf
                    LEFT OUTER JOIN db_user.tb_user_battgroup_baojigroup_battgroup ON db_user.tb_user_battgroup_baojigroup_battgroup.stationid = db_battinf.tb_battinf.stationid
                    LEFT OUTER JOIN db_user.tb_user_battgroup_baojigroup_usr ON db_user.tb_user_battgroup_baojigroup_usr.baoji_group_id = db_user.tb_user_battgroup_baojigroup_battgroup.baoji_group_id
                    LEFT OUTER JOIN db_user.tb_user_inf ON tb_user_inf.uid = db_user.tb_user_battgroup_baojigroup_usr.uid
                WHERE
                    db_user.tb_user_inf.uid = #{userId}
                    AND db_battinf.tb_battinf.station_install = 1
                )
    </select>
    <select id="getMonVolAndTemp" resultType="com.whyc.dto.DataAnalysisFloatDTO"></select>
    <select id="getMonRes" resultType="com.whyc.dto.DataAnalysisFloatDTO"></select>
    <select id="getMonCap" resultType="com.whyc.dto.DataAnalysisFloatDTO"></select>
</mapper>