2021与蓝度共同重构项目,服务端
liuhaonan
2022-04-20 831b0b323c21ab574db318e5195bef29f150a30a
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java
@@ -33,6 +33,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
@@ -207,14 +208,32 @@
//        List<LightBo> listLight = baseMapper.listLight(clientId, null);
//        List<String> deviceCodeList = listLight.stream().map(LightBo::getDeviceCode).collect(Collectors.toList());
        List<LightTaskDto> lightTaskDtos = SpringContextHolder.getBean(LightTaskService.class).listLightTask(null, null);
        //获取到正在执行的任务列表
        List<LightTaskDto> lightTaskDtos = SpringContextHolder.getBean(LightTaskService.class).listTask();
        LocalDateTime now = LocalDateTime.now();
        lightTaskDtos.forEach(Task -> {
            ControlLightCommandVO startTime = parseSwitchLightCommand(Task.getOpenOrder());
            if(Task.getControlOrder()!=null){
                List<ControlLightCommandVO> controlLightCommandVOS = parseControlLightCommand(Task.getControlOrder());
            }
            ControlLightCommandVO endTime = parseSwitchLightCommand(Task.getCloseOrder());
            //存放节能率
            List<BigDecimal> saving = new ArrayList<>();
            //获取到单灯任务的节能率
            if (Task.getControlOrder() != null) {//有控等指令 拆分计算
                List<ControlLightCommandVO> controlLightCommandVOS = parseControlLightCommand(Task.getControlOrder());
                for (int i = 0; i < controlLightCommandVOS.size(); i++) {
                    BigDecimal bigDecimal = calculateEnergySaving(startTime, controlLightCommandVOS.get(i));
                    if(controlLightCommandVOS.size()==i){
                        BigDecimal bigDecimal1 = calculateEnergySaving(controlLightCommandVOS.get(i), endTime);
                        saving.add(bigDecimal1);
                        break;
                    }
                    startTime = controlLightCommandVOS.get(i);
                    saving.add(bigDecimal);
                }
            }else {//无控灯指令 直接计算
                BigDecimal bigDecimal = calculateEnergySaving(startTime, endTime);
                saving.add(bigDecimal);
            }
        });
@@ -263,14 +282,27 @@
    }
    //计算节能率
    public void calculateEnergySaving(ControlLightCommandVO v1,ControlLightCommandVO v2){
      int hour = v2.getHour()- v1.getHour();
      int min = (v2.getMin()- v1.getMin());
      int brightness = v2.getBrightness()- v1.getBrightness();
      int totalTime=(hour*60+min)*60;
      Double energySaving = (1-(v1.getBrightness()/100.0))*totalTime/(36*24);
    public BigDecimal calculateEnergySaving(ControlLightCommandVO v1, ControlLightCommandVO v2) {
        BigDecimal hour = BigDecimal.valueOf((v2.getHour() - v1.getHour()));
        BigDecimal min = BigDecimal.valueOf((v2.getMin() - v1.getMin()) / 60);
        BigDecimal totalTime = (hour.add(min));
        BigDecimal energySaving = BigDecimal.valueOf((100 - v1.getBrightness())).divide(BigDecimal.valueOf(100)).multiply(totalTime).divide(BigDecimal.valueOf(24));
        System.out.println(energySaving);
        return energySaving;
    }
//    //计算节能率
//    public void calculateEnergySaving(ControlLightCommandVO v1,ControlLightCommandVO v2){
//      int hour = v2.getHour()- v1.getHour();
//      int min = (v2.getMin()- v1.getMin());
//      int brightness = v2.getBrightness()- v1.getBrightness();
//      int totalTime=(hour*60+min)*60;
//      Double energySaving = (1-(v1.getBrightness()/100.0))*totalTime/(36*24);
//    }
    /**
     * 用户拥有的路灯
     *