package com.zy.asrs.wcs.core; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zy.asrs.wcs.core.cache.MessageQueue; import com.zy.asrs.wcs.core.model.enums.SlaveType; import com.zy.asrs.wcs.core.utils.RedisUtil; import com.zy.asrs.wcs.rcs.entity.Device; import com.zy.asrs.wcs.rcs.entity.DeviceType; import com.zy.asrs.wcs.rcs.service.DeviceService; import com.zy.asrs.wcs.rcs.service.DeviceTypeService; 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 DeviceService deviceService; @Autowired private DeviceTypeService deviceTypeService; @PostConstruct @Async public void init() throws InterruptedException { News.info("核心控制层开始初始化..............................................."); Thread.sleep(2000); // 初始化消息队列 initMq(); // 初始化下位机线程 initThread(); // 开始主流程进程 mainProcess.start(); News.info("核心控制层已启动..............................................."); } private void initMq(){ // 初始化设备mq for (Device device : deviceService.list()) { DeviceType type = deviceTypeService.getById(device.getDeviceType()); SlaveType slaveType = SlaveType.findInstance(type.getFlag()); if (slaveType != null) { MessageQueue.init(slaveType, device.getId().intValue()); } } } private void initThread(){ List list1 = deviceTypeService.list(); for (DeviceType type : deviceTypeService.list()) { List list = deviceService.list(new LambdaQueryWrapper() .eq(Device::getDeviceType, type.getId()) .eq(Device::getStatus, 1) ); if (list.isEmpty()) { continue; } News.info("初始化{}线程...................................................", type.getName()); } // // 初始化输送线线程 // News.info("初始化输送线线程..................................................."); // for (DevpSlave devp : slaveProperties.getDevp()) { // DevpThread devpThread = new SiemensDevpThread(devp); // new Thread((Runnable) devpThread).start(); // SlaveConnection.put(SlaveType.Devp, devp.getId(), devpThread); // } // // 初始化提升机 // News.info("初始化提升机........................................................"); // for (LiftSlave liftSlave : slaveProperties.getLift()) { // SiemensLiftThread liftThread = new SiemensLiftThread(liftSlave, redisUtil); // new Thread(liftThread).start(); // SlaveConnection.put(SlaveType.Lift, liftSlave.getId(), liftThread); // } // // 初始化四向穿梭车 // News.info("初始化四向穿梭车......................................................"); // for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) { // ShuttleThread shuttleThread = new ShuttleThread(shuttleSlave,redisUtil); // new Thread(shuttleThread).start(); // SlaveConnection.put(SlaveType.Shuttle, shuttleSlave.getId(), shuttleThread); // } // // 初始化条码扫描仪线程 // News.info("初始化条码扫描仪线程..................................................."); // for (Slave barcode : slaveProperties.getBarcode()) { // BarcodeThread barcodeThread = new BarcodeThread(barcode); // new Thread(barcodeThread).start(); // SlaveConnection.put(SlaveType.Barcode, barcode.getId(), barcodeThread); // } // // 初始化LED线程 // News.info("初始化LED线程..................................................."); // for (LedSlave led : slaveProperties.getLed()) { // LedThread ledThread = new LedThread(led); // new Thread(ledThread).start(); // SlaveConnection.put(SlaveType.Led, led.getId(), ledThread); // } // 初始化磅秤线程 // News.info("初始化磅秤线程..................................................."); // for (Slave scale : slaveProperties.getScale()) { // ScaleThread barcodeThread = new ScaleThread(scale); // new Thread(barcodeThread).start(); // SlaveConnection.put(SlaveType.Scale, scale.getId(), barcodeThread); // } } @PreDestroy public void destroy() { } }