package com.zy.asrs.wcs.core.task; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zy.asrs.wcs.core.domain.param.ShuttleTimedPowerRangeParam; import com.zy.asrs.wcs.core.entity.BasShuttle; import com.zy.asrs.wcs.core.service.BasShuttleService; import com.zy.asrs.wcs.core.utils.RedisUtil; import com.zy.asrs.wcs.system.entity.Dict; import com.zy.asrs.wcs.system.service.DictService; 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 DictService dictService; @Autowired private RedisUtil redisUtil; @Autowired private BasShuttleService basShuttleService; /** * 小车充电线自动调节 * 每5钟执行一次 */ @Scheduled(cron = "0 5 * * * ? ") public void run() { boolean timedCharge = false; Dict timedChargeDict = dictService.getOne(new LambdaQueryWrapper().eq(Dict::getFlag, "timedCharge")); if (timedChargeDict != null) { if("Y".equals(timedChargeDict.getValue())) { timedCharge = true; } } if(!timedCharge) { return; } Dict timedChargeRangeDict = dictService.getOne(new LambdaQueryWrapper().eq(Dict::getFlag, "timedChargeRange")); if (timedChargeRangeDict == null) { return; } Integer timedChargePowerLine = 90; Dict timedChargePowerLineDict = dictService.getOne(new LambdaQueryWrapper().eq(Dict::getFlag, "timedChargePowerLine")); if (timedChargePowerLineDict == null) { return; } timedChargePowerLine = Integer.parseInt(timedChargePowerLineDict.getValue()); Integer shuttleDefaultChargePowerLine = 70; Dict shuttleDefaultChargePowerLineDict = dictService.getOne(new LambdaQueryWrapper().eq(Dict::getFlag, "shuttleDefaultChargePowerLine")); if (shuttleDefaultChargePowerLineDict != null) { shuttleDefaultChargePowerLine = Integer.parseInt(shuttleDefaultChargePowerLineDict.getValue()); } List list = JSON.parseArray(timedChargeRangeDict.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.list(new LambdaQueryWrapper().ne(BasShuttle::getChargeLine, 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.list(new LambdaQueryWrapper()); if (shuttleList.isEmpty()) { return false; } for (BasShuttle basShuttle : shuttleList) { basShuttle.setChargeLine(shuttleDefaultChargePowerLine); basShuttleService.updateById(basShuttle); } redisUtil.del("timedCharge"); return true; } }