| | |
| | | import com.zy.asrs.entity.DeviceConfig; |
| | | import com.zy.asrs.service.DeviceConfigService; |
| | | import com.zy.common.utils.RedisUtil; |
| | | import com.zy.core.News; |
| | | import com.zy.core.action.ShuttleAction; |
| | | import com.zy.core.enums.RedisKeyType; |
| | | import com.zy.core.enums.SlaveType; |
| | | 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.List; |
| | | |
| | | @Slf4j |
| | | @Component |
| | | public class ShuttleExecuteScheduler { |
| | | public class ShuttleExecuteScheduler implements Runnable { |
| | | |
| | | // @Autowired |
| | | // private ShuttleAction shuttleAction; |
| | | // @Autowired |
| | | // private DeviceConfigService deviceConfigService; |
| | | // @Autowired |
| | | // private RedisUtil redisUtil; |
| | | // |
| | | // @Scheduled(cron = "0/1 * * * * ? ") |
| | | // public void execute() { |
| | | // List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() |
| | | // .eq("device_type", String.valueOf(SlaveType.Shuttle))); |
| | | // for (DeviceConfig deviceConfig : shuttleList) { |
| | | // Object object = redisUtil.get(RedisKeyType.SHUTTLE_FLAG.key + deviceConfig.getDeviceNo()); |
| | | // if (object == null) { |
| | | // continue; |
| | | // } |
| | | // |
| | | // int taskNo = Integer.parseInt(String.valueOf(object)); |
| | | // if (taskNo != 0) { |
| | | // //存在任务需要执行 |
| | | // boolean result = shuttleAction.executeWork(deviceConfig.getDeviceNo(), taskNo); |
| | | // } |
| | | // } |
| | | // } |
| | | private ShuttleAction shuttleAction; |
| | | private DeviceConfigService deviceConfigService; |
| | | private RedisUtil redisUtil; |
| | | private int threadControlCount; |
| | | |
| | | @Scheduled(cron = "0/1 * * * * ? ") |
| | | public void execute() { |
| | | |
| | | } |
| | | |
| | | public ShuttleExecuteScheduler(ShuttleAction shuttleAction, DeviceConfigService deviceConfigService, RedisUtil redisUtil, int threadControlCount) { |
| | | this.shuttleAction = shuttleAction; |
| | | this.deviceConfigService = deviceConfigService; |
| | | this.redisUtil = redisUtil; |
| | | this.threadControlCount = threadControlCount; |
| | | } |
| | | |
| | | @Override |
| | | public void run() { |
| | | List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() |
| | | .eq("device_type", String.valueOf(SlaveType.Shuttle))); |
| | | |
| | | List<List<DeviceConfig>> lists = new ArrayList<>(); |
| | | List<DeviceConfig> tmp = new ArrayList<>(); |
| | | |
| | | for (int i = 0; i < shuttleList.size(); i++) { |
| | | DeviceConfig deviceConfig = shuttleList.get(i); |
| | | if (i != 0 && i % threadControlCount == 0) { |
| | | lists.add(tmp); |
| | | tmp = new ArrayList<>(); |
| | | } |
| | | tmp.add(deviceConfig); |
| | | } |
| | | lists.add(tmp); |
| | | |
| | | for (List<DeviceConfig> list : lists) { |
| | | if (list.isEmpty()) { |
| | | continue; |
| | | } |
| | | |
| | | new Thread(() -> { |
| | | while (true) { |
| | | try { |
| | | for (DeviceConfig deviceConfig : list) { |
| | | Object object = redisUtil.get(RedisKeyType.SHUTTLE_FLAG.key + deviceConfig.getDeviceNo()); |
| | | if (object == null) { |
| | | continue; |
| | | } |
| | | |
| | | int taskNo = Integer.parseInt(String.valueOf(object)); |
| | | if (taskNo != 0) { |
| | | //存在任务需要执行 |
| | | long startTime = System.currentTimeMillis(); |
| | | News.info("execute {},{}", deviceConfig.getDeviceNo(), taskNo); |
| | | boolean result = shuttleAction.executeWork(deviceConfig.getDeviceNo(), taskNo); |
| | | Thread.sleep(100); |
| | | News.info("execute end {},{},{}", deviceConfig.getDeviceNo(), taskNo, System.currentTimeMillis() - startTime); |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | }).start(); |
| | | } |
| | | } |
| | | } |