| package com.zy.asrs.task; | 
|   | 
| import com.alibaba.fastjson.JSON; | 
| import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
| import com.zy.asrs.domain.param.ShuttleTimedPowerRangeParam; | 
| import com.zy.asrs.entity.BasShuttle; | 
| import com.zy.asrs.service.BasShuttleService; | 
| import com.zy.common.utils.RedisUtil; | 
| import com.zy.system.entity.Config; | 
| import com.zy.system.service.ConfigService; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.scheduling.annotation.Scheduled; | 
| import org.springframework.stereotype.Component; | 
|   | 
| import java.time.LocalTime; | 
| import java.util.List; | 
|   | 
| @Component | 
| @Slf4j | 
| public class ShuttleChargePowerScheduler { | 
|   | 
|     @Autowired | 
|     private ConfigService configService; | 
|     @Autowired | 
|     private BasShuttleService basShuttleService; | 
|     @Autowired | 
|     private RedisUtil redisUtil; | 
|   | 
|     /** | 
|      * 小车充电线自动调节 | 
|      * 每5钟执行一次 | 
|      */ | 
|     @Scheduled(cron = "0 5 * * * ? ") | 
|     public void run() { | 
|         boolean timedCharge = false; | 
|         Config timedChargeConfig = configService.selectOne(new EntityWrapper<Config>() | 
|                 .eq("code", "timedCharge") | 
|                 .eq("status", 1)); | 
|         if (timedChargeConfig != null) { | 
|             if("Y".equals(timedChargeConfig.getValue())) { | 
|                 timedCharge = true; | 
|             } | 
|         } | 
|   | 
|         if(!timedCharge) { | 
|             return; | 
|         } | 
|   | 
|         Config timedChargeRangeConfig = configService.selectOne(new EntityWrapper<Config>() | 
|                 .eq("code", "timedChargeRange") | 
|                 .eq("status", 1)); | 
|         if (timedChargeRangeConfig == null) { | 
|             return; | 
|         } | 
|   | 
|         Integer timedChargePowerLine = 90; | 
|         Config timedChargePowerLineConfig = configService.selectOne(new EntityWrapper<Config>() | 
|                 .eq("code", "timedChargePowerLine") | 
|                 .eq("status", 1)); | 
|         if (timedChargePowerLineConfig == null) { | 
|             return; | 
|         } | 
|         timedChargePowerLine = Integer.parseInt(timedChargePowerLineConfig.getValue()); | 
|   | 
|         Integer shuttleDefaultChargePowerLine = 70; | 
|         Config shuttleDefaultChargePowerLineConfig = configService.selectOne(new EntityWrapper<Config>() | 
|                 .eq("code", "shuttleDefaultChargePowerLine") | 
|                 .eq("status", 1)); | 
|         if (shuttleDefaultChargePowerLineConfig != null) { | 
|             shuttleDefaultChargePowerLine = Integer.parseInt(shuttleDefaultChargePowerLineConfig.getValue()); | 
|         } | 
|   | 
|         List<ShuttleTimedPowerRangeParam> list = JSON.parseArray(timedChargeRangeConfig.getValue(), ShuttleTimedPowerRangeParam.class); | 
|         for (ShuttleTimedPowerRangeParam rangeParam : list) { | 
|             Object timedChargeObject = redisUtil.get("timedCharge"); | 
|   | 
|             LocalTime startTime = LocalTime.of(rangeParam.getStartTime(), 0); | 
|             LocalTime endTime = LocalTime.of(rangeParam.getEndTime(), 0); | 
|             boolean checkTime = checkTime(startTime, endTime); | 
|             if(!checkTime) { | 
|                 if (timedChargeObject != null) { | 
|                     subPower(shuttleDefaultChargePowerLine); | 
|                 } | 
|                 continue; | 
|             } | 
|   | 
|             if(timedChargeObject != null) { | 
|                 continue; | 
|             } | 
|   | 
|             addPower(timedChargePowerLine); | 
|         } | 
|   | 
|     } | 
|   | 
|     public boolean checkTime(LocalTime startTime, LocalTime endTime) { | 
|         LocalTime now = LocalTime.now(); | 
|         return !now.isBefore(startTime) && !now.isAfter(endTime); | 
|     } | 
|   | 
|     public boolean addPower(Integer timedChargePowerLine) { | 
|         //调整电量线 | 
|         List<BasShuttle> shuttleList = basShuttleService.selectList(new EntityWrapper<BasShuttle>().ne("charge_line", timedChargePowerLine)); | 
|         if (shuttleList.isEmpty()) { | 
|             return false; | 
|         } | 
|   | 
|         for (BasShuttle basShuttle : shuttleList) { | 
|             basShuttle.setChargeLine(timedChargePowerLine); | 
|             basShuttleService.updateById(basShuttle); | 
|         } | 
|   | 
|         redisUtil.set("timedCharge", shuttleList.size()); | 
|         return true; | 
|     } | 
|   | 
|     public boolean subPower(Integer shuttleDefaultChargePowerLine) { | 
|         List<BasShuttle> shuttleList = basShuttleService.selectList(new EntityWrapper<BasShuttle>()); | 
|         if (shuttleList.isEmpty()) { | 
|             return false; | 
|         } | 
|   | 
|         for (BasShuttle basShuttle : shuttleList) { | 
|             basShuttle.setChargeLine(shuttleDefaultChargePowerLine); | 
|             basShuttleService.updateById(basShuttle); | 
|         } | 
|   | 
|         redisUtil.del("timedCharge"); | 
|         return true; | 
|     } | 
|   | 
| } |