package com.zy.core; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.exception.CoolException; import com.zy.asrs.entity.DeviceConfig; import com.zy.asrs.service.DeviceConfigService; import com.zy.common.utils.RedisUtil; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.SlaveType; import com.zy.core.thread.impl.ZySiemensCrnThread; import com.zy.core.thread.impl.ZyStationThread; import com.zy.core.thread.impl.ZyRgvThread; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import java.util.List; /** * Created by vincent on 2020/8/4 */ @Slf4j @Component public class ServerBootstrap { @Autowired private MainProcess mainProcess; @Autowired private RedisUtil redisUtil; @Autowired private DeviceConfigService deviceConfigService; @PostConstruct @Async public void init() throws InterruptedException { News.info("核心控制层开始初始化..............................................."); Thread.sleep(2000); // 初始化消息队列 initMq(); // 初始化下位机线程 initThread(); // 开始主流程进程 mainProcess.start(); News.info("核心控制层已启动..............................................."); } private void initMq(){ // 初始化堆垛机mq List crnList = deviceConfigService.selectList(new EntityWrapper() .eq("device_type", String.valueOf(SlaveType.Crn))); for (DeviceConfig crn : crnList) { MessageQueue.init(SlaveType.Crn, crn.getDeviceNo()); } // 初始化Rgv小车mq List rgvList = deviceConfigService.selectList(new EntityWrapper() .eq("device_type", String.valueOf(SlaveType.Rgv))); for (DeviceConfig rgv : rgvList) { MessageQueue.init(SlaveType.Rgv, rgv.getDeviceNo()); } // 初始化输送线mq List devpList = deviceConfigService.selectList(new EntityWrapper() .eq("device_type", String.valueOf(SlaveType.Devp))); for (DeviceConfig devp : devpList) { MessageQueue.init(SlaveType.Devp, devp.getDeviceNo()); } // 初始化条码扫描仪mq List barcodeList = deviceConfigService.selectList(new EntityWrapper() .eq("device_type", String.valueOf(SlaveType.Barcode))); for (DeviceConfig barcode : barcodeList) { MessageQueue.init(SlaveType.Barcode, barcode.getDeviceNo()); } // 初始化Led灯mq List ledList = deviceConfigService.selectList(new EntityWrapper() .eq("device_type", String.valueOf(SlaveType.Led))); for (DeviceConfig led : ledList) { MessageQueue.init(SlaveType.Led, led.getDeviceNo()); } } private void initThread(){ News.info("初始化堆垛机........................................................"); List crnList = deviceConfigService.selectList(new EntityWrapper() .eq("device_type", String.valueOf(SlaveType.Crn))); for (DeviceConfig deviceConfig : crnList) { ThreadHandler thread = null; if (deviceConfig.getThreadImpl().equals("ZySiemensCrnThread")) { thread = new ZySiemensCrnThread(deviceConfig, redisUtil); } else { throw new CoolException("未知的线程实现"); } new Thread(thread).start(); SlaveConnection.put(SlaveType.Crn, deviceConfig.getDeviceNo(), thread); } News.info("初始化输送站........................................................"); List devpList = deviceConfigService.selectList(new EntityWrapper() .eq("device_type", String.valueOf(SlaveType.Devp))); for (DeviceConfig deviceConfig : devpList) { ThreadHandler thread = null; if (deviceConfig.getThreadImpl().equals("ZyStationThread")) { thread = new ZyStationThread(deviceConfig, redisUtil); } else { throw new CoolException("未知的线程实现"); } new Thread(thread).start(); SlaveConnection.put(SlaveType.Devp, deviceConfig.getDeviceNo(), thread); } News.info("初始化RGV........................................................"); List rgvList = deviceConfigService.selectList(new EntityWrapper() .eq("device_type", String.valueOf(SlaveType.Rgv))); for (DeviceConfig deviceConfig : rgvList) { ThreadHandler thread = null; if (deviceConfig.getThreadImpl().equals("ZyRgvThread")) { thread = new ZyRgvThread(deviceConfig, redisUtil); } else { throw new CoolException("未知的线程实现"); } new Thread(thread).start(); SlaveConnection.put(SlaveType.Rgv, deviceConfig.getDeviceNo(), thread); } } @PreDestroy public void destroy() { } }