| | |
| | | import com.sandu.ximon.admin.vo.EquipmentInfomation; |
| | | import com.sandu.ximon.dao.bo.LightBo; |
| | | import com.sandu.ximon.dao.bo.PoleTaskLightPowerBo; |
| | | import com.sandu.ximon.dao.domain.*; |
| | | import com.sandu.ximon.dao.domain.Light; |
| | | import com.sandu.ximon.dao.domain.LightReportData; |
| | | import com.sandu.ximon.dao.domain.Pole; |
| | | import com.sandu.ximon.dao.domain.PoleBinding; |
| | | import com.sandu.ximon.dao.enums.DeviceRespStatusEnums; |
| | | import com.sandu.ximon.dao.mapper.LightMapper; |
| | | import com.sandu.ximon.dao.mapper.LightTaskMapper; |
| | |
| | | //夿Task.getWeekList()æ¯å¦å
嫿¨å¤©çæææ° ä¸å
å«ç´æ¥è¿å0 ä¸è¿è¡è®¡ç® |
| | | if (Task.getWeekList() != null && !Task.getWeekList().isEmpty()) { |
| | | if (!Task.getWeekList().contains(week)) { |
| | | return new BigDecimal(0.00); |
| | | return BigDecimal.ZERO; |
| | | } |
| | | } else { |
| | | return new BigDecimal(0.00); |
| | | return BigDecimal.ZERO; |
| | | } |
| | | |
| | | |
| | |
| | | */ |
| | | } |
| | | |
| | | |
| | | /** |
| | | * ä¸å¤©çè½è |
| | | * |
| | | * @param list |
| | | * @return |
| | | */ |
| | | public BigDecimal jisuanEnergy(LightTaskDto Task) { |
| | | //åæ¾è½è |
| | | final BigDecimal[] bigEnergy = {new BigDecimal(0.00)}; |
| | | |
| | | //è·åæ¨å¤©çæææ° |
| | | LocalDateTime now = LocalDateTime.now(); |
| | | LocalDateTime yesterday = now.minusDays(1); |
| | | int week = yesterday.getDayOfWeek().getValue(); |
| | | |
| | | //夿Task.getWeekList()æ¯å¦å
嫿¨å¤©çæææ° ä¸å
å«ç´æ¥è¿å0 ä¸è¿è¡è®¡ç® |
| | | if (Task.getWeekList() != null && !Task.getWeekList().isEmpty()) { |
| | | if (!Task.getWeekList().contains(week)) { |
| | | return BigDecimal.ZERO; |
| | | } |
| | | } else { |
| | | return BigDecimal.ZERO; |
| | | } |
| | | |
| | | /** |
| | | * èè½ç计ç®å¼å§ |
| | | */ |
| | | List<PoleTaskLightPowerBo> poleTaskLightPowerBos = SpringContextHolder.getBean(LightTaskMapper.class).listLightTaskByTaskId(Task.getTaskId()); |
| | | ControlLightCommandVO startTime = parseSwitchLightCommand(Task.getOpenOrder()); |
| | | ControlLightCommandVO endTime = parseSwitchLightCommand(Task.getCloseOrder()); |
| | | //è·åå°åç¯ä»»å¡çèè½ç |
| | | if (!Task.getControlOrder().isEmpty()) {//ææ§çæä»¤ æåè®¡ç® |
| | | List<ControlLightCommandVO> controlLightCommandVOS = parseControlLightCommand(Task.getControlOrder()); |
| | | |
| | | |
| | | for (int i = 0; i < controlLightCommandVOS.size(); i++) { |
| | | //å¾å°æ¶é¿*亮度 |
| | | BigDecimal bigEnergy1 = calculateEnergyConsumption(startTime, controlLightCommandVOS.get(i)); |
| | | //夿 Energy==0 åä¸è®¡ç® |
| | | if (bigEnergy1.compareTo(new BigDecimal(0)) != 0) { |
| | | //计ç®è½è(æ» æ¶é¿*亮度*åç) |
| | | BigDecimal totalEnergy = totalEnergy(bigEnergy1, Task.getLightAdress(), poleTaskLightPowerBos); |
| | | bigEnergy[0] = bigEnergy[0].add(totalEnergy); |
| | | } |
| | | if (controlLightCommandVOS.size() == (i + 1)) { |
| | | BigDecimal bigEnergy2 = calculateEnergyConsumption(controlLightCommandVOS.get(i), endTime); |
| | | |
| | | System.out.println(bigEnergy2 + "æ¶é¿*亮度==========================="); |
| | | |
| | | //计ç®è½è(æ» æ¶é¿*亮度*åç) |
| | | if (bigEnergy2.compareTo(new BigDecimal(0)) != 0) { |
| | | BigDecimal totalEnergy3 = totalEnergy(bigEnergy2, Task.getLightAdress(), poleTaskLightPowerBos); |
| | | bigEnergy[0] = bigEnergy[0].add(totalEnergy3); |
| | | } |
| | | break; |
| | | } |
| | | startTime = controlLightCommandVOS.get(i); |
| | | //计ç®è½è(æ» æ¶é¿*亮度*åç) |
| | | } |
| | | } else {//æ æ§ç¯æä»¤ ç´æ¥è®¡ç® |
| | | //计ç®è½è(é¨å æ¶é¿*亮度) |
| | | BigDecimal Energy = calculateEnergyConsumption(startTime, endTime); |
| | | //计ç®è½è(æ» æ¶é¿*亮度*åç) |
| | | //夿 Energy==0 åä¸è®¡ç® |
| | | if (Energy.compareTo(new BigDecimal(0)) != 0) { |
| | | BigDecimal totalEnergy = totalEnergy(Energy, Task.getLightAdress(), poleTaskLightPowerBos); |
| | | bigEnergy[0] = bigEnergy[0].add(totalEnergy); |
| | | } |
| | | |
| | | // saving.add(bigDecimal); |
| | | |
| | | } |
| | | return bigEnergy[0]; |
| | | |
| | | /** |
| | | * 计ç®è½èç»æ |
| | | */ |
| | | } |
| | | |
| | | |
| | | private BigDecimal totalEnergy(BigDecimal bigEnergy2, String lightAdress, List<PoleTaskLightPowerBo> poleTaskLightPowerBos) { |
| | | |
| | | //poleTaskLightPowerBos å
å«è¯¥ä»»å¡ææçç¯çåç |
| | |
| | | |
| | | // BigDecimal hour = BigDecimal.valueOf((v2.getHour() - v1.getHour())); |
| | | // BigDecimal hour; |
| | | if (v1.getBrightness() == 0) { |
| | | return BigDecimal.ZERO; |
| | | } |
| | | double hour; |
| | | double min; |
| | | //è®¡ç®æ¶é¿ |
| | |
| | | //è®¡ç®æ¶é¿ |
| | | BigDecimal totalTime = BigDecimal.valueOf(hour * 60 + min); |
| | | |
| | | //计ç®èè½ç ( (1-v1.getBrightness()/100)*totalTime/3600 ) ä¿ç两ä½å°æ° |
| | | BigDecimal energySaving = BigDecimal.valueOf((1 - v1.getBrightness() / 100) * totalTime.doubleValue() / 3600).setScale(2, BigDecimal.ROUND_HALF_UP); |
| | | |
| | | //计ç®èè½ç ( (1-v1.getBrightness()/100)*totalTime/1440 ) ä¿ç两ä½å°æ° |
| | | // è®¡ç® 1-v1.getBrightness()/100çå¼ |
| | | BigDecimal Brightness = BigDecimal.valueOf(100 - v1.getBrightness()); |
| | | //Brightness/100*totalTime/1440 ä¿ç两ä½å°æ° Brightness没æé¤ä»¥100 卿»æ¶é´*100 |
| | | BigDecimal energySaving = Brightness.multiply(totalTime).divide(new BigDecimal(144000), 2, BigDecimal.ROUND_HALF_UP); |
| | | |
| | | System.out.println(energySaving + "èè½ç"); |
| | | return energySaving; |
| | | } |
| | |
| | | |
| | | //计ç®è½è(é¨å æ¶é¿*亮度) |
| | | public BigDecimal calculateEnergyConsumption(ControlLightCommandVO v1, ControlLightCommandVO v2) { |
| | | |
| | | if (v1.getBrightness() == 0) { |
| | | return BigDecimal.ZERO; |
| | | } |
| | | double hour; |
| | | double min; |
| | | //è®¡ç®æ¶é¿ |
| | | BigDecimal hour; |
| | | if (v2.getHour() > v1.getHour()) { |
| | | hour = BigDecimal.valueOf((v2.getHour() - v1.getHour())); |
| | | hour = v2.getHour() - v1.getHour(); |
| | | } else if (v2.getHour() < v1.getHour()) { |
| | | hour = BigDecimal.valueOf((v2.getHour() + 24 - v1.getHour())); |
| | | hour = 24 + (v2.getHour() - v1.getHour()); |
| | | } else { |
| | | hour = BigDecimal.valueOf(0); |
| | | hour = 0; |
| | | } |
| | | BigDecimal min; |
| | | //计ç®åé |
| | | |
| | | if (v2.getMin() > v1.getMin()) { |
| | | min = BigDecimal.valueOf((v2.getMin() - v1.getMin()) / 60); |
| | | min = v2.getMin() - v1.getMin(); |
| | | } else if (v2.getMin() < v1.getMin()) { |
| | | min = BigDecimal.valueOf((v2.getMin() + 60 - v1.getMin()) / 60); |
| | | hour = hour.subtract(BigDecimal.valueOf(1)); |
| | | min = 60 + (v1.getMin() - v2.getMin()); |
| | | hour = hour - 1; |
| | | } else { |
| | | min = BigDecimal.valueOf(0); |
| | | min = 0; |
| | | } |
| | | BigDecimal totalTime = (hour.add(min)); |
| | | //è®¡ç®æ¶é¿ |
| | | BigDecimal totalTime = BigDecimal.valueOf(hour + min / 60); |
| | | //计ç®äº®ç¯æ¶é¿*亮度 |
| | | BigDecimal energyConsumption = totalTime.multiply(BigDecimal.valueOf(v1.getBrightness())).divide(BigDecimal.valueOf(100)); |
| | | BigDecimal energyConsumption = totalTime.multiply(BigDecimal.valueOf(v1.getBrightness())).divide(BigDecimal.valueOf(100)).setScale(2, BigDecimal.ROUND_HALF_UP); |
| | | return energyConsumption; |
| | | } |
| | | |