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() .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() .eq("code", "timedChargeRange") .eq("status", 1)); if (timedChargeRangeConfig == null) { return; } Integer timedChargePowerLine = 90; Config timedChargePowerLineConfig = configService.selectOne(new EntityWrapper() .eq("code", "timedChargePowerLine") .eq("status", 1)); if (timedChargePowerLineConfig == null) { return; } timedChargePowerLine = Integer.parseInt(timedChargePowerLineConfig.getValue()); Integer shuttleDefaultChargePowerLine = 70; Config shuttleDefaultChargePowerLineConfig = configService.selectOne(new EntityWrapper() .eq("code", "shuttleDefaultChargePowerLine") .eq("status", 1)); if (shuttleDefaultChargePowerLineConfig != null) { shuttleDefaultChargePowerLine = Integer.parseInt(shuttleDefaultChargePowerLineConfig.getValue()); } List 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 shuttleList = basShuttleService.selectList(new EntityWrapper().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 shuttleList = basShuttleService.selectList(new EntityWrapper()); if (shuttleList.isEmpty()) { return false; } for (BasShuttle basShuttle : shuttleList) { basShuttle.setChargeLine(shuttleDefaultChargePowerLine); basShuttleService.updateById(basShuttle); } redisUtil.del("timedCharge"); return true; } }