| package com.zy.core.task; | 
|   | 
| import com.zy.common.utils.RedisUtil; | 
| import com.zy.core.cache.SlaveConnection; | 
| import com.zy.core.enums.RedisKeyType; | 
| import com.zy.core.enums.SlaveType; | 
| import com.zy.core.model.TrafficControlDataModel; | 
| import com.zy.core.model.param.OperateTrafficControlParam; | 
| import com.zy.core.thread.TrafficControlThread; | 
| import lombok.Getter; | 
| 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.util.ArrayList; | 
| import java.util.Comparator; | 
| import java.util.List; | 
| import java.util.Set; | 
|   | 
| @Slf4j | 
| @Component | 
| public class TrafficApplyProcess { | 
|   | 
|     @Autowired | 
|     private RedisUtil redisUtil; | 
|   | 
|     @Scheduled(cron = "0/3 * * * * ? ") | 
|     public void processApply() { | 
|         TrafficControlThread trafficControlThread = (TrafficControlThread) SlaveConnection.get(SlaveType.TrafficControl, 1); | 
|         if (trafficControlThread == null) { | 
|             return; | 
|         } | 
|         Set<String> keys = redisUtil.searchKeys(RedisKeyType.TRAFFIC_CONTROL_APPLY.key); | 
|   | 
|         List<ApplyKey> sortList = new ArrayList<>(); | 
|         for (String key : keys) { | 
|             String[] split = key.split(RedisKeyType.TRAFFIC_CONTROL_APPLY.key); | 
|             String[] split1 = split[1].split("_"); | 
|             String shuttleNo = split1[0]; | 
|   | 
|             int count = 0; | 
|             String applyCountKey = RedisKeyType.TRAFFIC_CONTROL_SHUTTLE_APPLY_COUNT.key + shuttleNo; | 
|             Object object = redisUtil.get(applyCountKey); | 
|             if(object != null) { | 
|                 count = (Integer) object; | 
|             } | 
|   | 
|             sortList.add(new ApplyKey(key, count)); | 
|         } | 
|   | 
|         sortList.sort(Comparator.comparing(ApplyKey::getCount).reversed()); | 
|   | 
|         for (ApplyKey applyKey : sortList) { | 
|             String key = applyKey.getKey(); | 
|             TrafficControlDataModel dataModel = (TrafficControlDataModel) redisUtil.get(key); | 
|             redisUtil.del(key); | 
|   | 
|             boolean apply = trafficControlThread.processApply(dataModel); | 
|   | 
|             String applyCountKey = RedisKeyType.TRAFFIC_CONTROL_SHUTTLE_APPLY_COUNT.key + dataModel.getShuttleNo(); | 
|             if (apply) { | 
|                 redisUtil.del(applyCountKey); | 
|             }else { | 
|                 Object object = redisUtil.get(applyCountKey); | 
|                 if (object == null) { | 
|                     redisUtil.set(applyCountKey, 0, 60 * 60); | 
|                 }else { | 
|                     Integer count = (Integer) object; | 
|                     redisUtil.set(applyCountKey, count + 1, 60 * 60); | 
|                 } | 
|             } | 
|         } | 
|     } | 
|   | 
|     @Scheduled(cron = "0/3 * * * * ? ") | 
|     public void processReport() { | 
|         TrafficControlThread trafficControlThread = (TrafficControlThread) SlaveConnection.get(SlaveType.TrafficControl, 1); | 
|         if (trafficControlThread == null) { | 
|             return; | 
|         } | 
|         Set<String> keys = redisUtil.searchKeys(RedisKeyType.TRAFFIC_CONTROL_REPORT_LIST.key); | 
|   | 
|         for (String key : keys) { | 
|             OperateTrafficControlParam param = (OperateTrafficControlParam) redisUtil.get(key); | 
|             redisUtil.del(key); | 
|             boolean apply = trafficControlThread.operateTrafficControl(param); | 
|         } | 
|     } | 
|   | 
|     @Scheduled(cron = "0/3 * * * * ? ") | 
|     public void processCancel() { | 
|         TrafficControlThread trafficControlThread = (TrafficControlThread) SlaveConnection.get(SlaveType.TrafficControl, 1); | 
|         if (trafficControlThread == null) { | 
|             return; | 
|         } | 
|         Set<String> keys = redisUtil.searchKeys(RedisKeyType.TRAFFIC_CONTROL_CANCEL_LIST.key); | 
|   | 
|         for (String key : keys) { | 
|             TrafficControlDataModel param = (TrafficControlDataModel) redisUtil.get(key); | 
|             redisUtil.del(key); | 
|             boolean apply = trafficControlThread.cancelTrafficControl(param.getShuttleNo(), param.getTaskNo()); | 
|         } | 
|     } | 
|   | 
|     class ApplyKey{ | 
|         @Getter | 
|         String key; | 
|         @Getter | 
|         Integer count; | 
|   | 
|         public ApplyKey(String key, Integer count) { | 
|             this.key = key; | 
|             this.count = count; | 
|         } | 
|   | 
|     } | 
|   | 
| } |