src/main/java/com/whyc/controller/BatteryDataController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/dto/DataAnalysisFloatDTO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/dto/DataAnalysisIntegerDTO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/mapper/BatteryDataMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/service/BatteryAlarmService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/service/BatteryDataService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/service/PowerAlarmService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/util/MathUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/BatteryDataMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | 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>