From 6daf900a09adcca981f620744bf89851654d88e0 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期二, 05 八月 2025 09:58:08 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/ServerBootstrap.java | 187 +++++++++++++++++++++++++++++++++++----------- 1 files changed, 143 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java index 2ef85a0..723e418 100644 --- a/src/main/java/com/zy/core/ServerBootstrap.java +++ b/src/main/java/com/zy/core/ServerBootstrap.java @@ -1,19 +1,34 @@ package com.zy.core; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.core.exception.CoolException; +import com.zy.asrs.entity.BasLift; +import com.zy.asrs.entity.DeviceConfig; +import com.zy.asrs.service.BasLiftService; +import com.zy.asrs.service.DeviceConfigService; +import com.zy.common.utils.RedisUtil; +import com.zy.core.action.ShuttleAction; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.SlaveType; -import com.zy.core.model.CrnSlave; -import com.zy.core.model.DevpSlave; -import com.zy.core.properties.SlaveProperties; -import com.zy.core.thread.BarcodeThread; -import com.zy.core.thread.CrnThread; -import com.zy.core.thread.DevpThread; +import com.zy.core.task.ShuttleExecuteScheduler; +import com.zy.core.thread.TrafficControlThread; +import com.zy.core.thread.impl.NyLiftThread; +import com.zy.core.thread.impl.NyShuttleThread; +import com.zy.core.thread.impl.TrafficControlImplThread; +import com.zy.core.thread.impl.ZyForkLiftThread; +import com.zy.core.utils.DeviceMsgUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; +import java.util.ArrayList; +import java.util.List; /** * Created by vincent on 2020/8/4 @@ -22,66 +37,150 @@ @Component public class ServerBootstrap { - @Autowired - private SlaveProperties slaveProperties; + @Value("${deviceExecuteConfig.threadControlCount}") + private int threadControlCount; + @Autowired private MainProcess mainProcess; + @Autowired + private RedisUtil redisUtil; + @Autowired + private DeviceConfigService deviceConfigService; + @Autowired + private ShuttleAction shuttleAction; + @Autowired + private DeviceMsgUtils deviceMsgUtils; + @Autowired + private BasLiftService basLiftService; - -// @PostConstruct - public void init(){ + @PostConstruct + @Async + public void init() throws InterruptedException { + News.info("鏍稿績鎺у埗灞傚紑濮嬪垵濮嬪寲..............................................."); + Thread.sleep(2000); // 鍒濆鍖栨秷鎭槦鍒� initMq(); // 鍒濆鍖栦笅浣嶆満绾跨▼ initThread(); // 寮�濮嬩富娴佺▼杩涚▼ mainProcess.start(); + News.info("鏍稿績鎺у埗灞傚凡鍚姩..............................................."); } private void initMq(){ - // 鍒濆鍖栧爢鍨涙満mq - for (Slave crn : slaveProperties.getCrn()) { - MessageQueue.init(SlaveType.Crn, crn); + // 鍒濆鍖栬揣鍙夋彁鍗囨満mq + List<DeviceConfig> forkLiftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() + .eq("device_type", String.valueOf(SlaveType.ForkLift))); + for (DeviceConfig forkLift : forkLiftList) { + MessageQueue.init(SlaveType.ForkLift, forkLift.getDeviceNo()); } - // 鍒濆鍖栬緭閫佺嚎mq - for (Slave devp : slaveProperties.getDevp()) { - MessageQueue.init(SlaveType.Devp, devp); + // 鍒濆鍖栨彁鍗囨満mq + List<DeviceConfig> liftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() + .eq("device_type", String.valueOf(SlaveType.Lift))); + for (DeviceConfig lift : liftList) { + MessageQueue.init(SlaveType.Lift, lift.getDeviceNo()); } - // 鍒濆鍖栨潯鐮佹壂鎻忎华mq - for (Slave barcode : slaveProperties.getBarcode()) { - MessageQueue.init(SlaveType.Barcode, barcode); + // 鍒濆鍖栧洓鍚戠┛姊溅mq + List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() + .eq("device_type", String.valueOf(SlaveType.Shuttle))); + for (DeviceConfig shuttle : shuttleList) { + MessageQueue.init(SlaveType.Shuttle, shuttle.getDeviceNo()); } - // 鍒濆鍖朙ed鐏痬q - for (Slave led : slaveProperties.getLed()) { - MessageQueue.init(SlaveType.Led, led); - } - // 鍒濆鍖栫绉癿q - for (Slave scale : slaveProperties.getScale()) { - MessageQueue.init(SlaveType.Scale, scale); - } + + MessageQueue.init(SlaveType.TrafficControl, 1); } private void initThread(){ - // 鍒濆鍖栧爢鍨涙満绾跨▼ - for (CrnSlave crn : slaveProperties.getCrn()) { - CrnThread crnThread = new CrnThread(crn); - new Thread(crnThread).start(); - SlaveConnection.put(SlaveType.Crn, crn.getId(), crnThread); + List<DeviceConfig> allDevices = new ArrayList<>(); + List<DeviceConfig> fakeDevices = new ArrayList<>(); + + // 鍒濆鍖栬揣鍙夋彁鍗囨満 + News.info("鍒濆鍖栬揣鍙夋彁鍗囨満........................................................"); + List<DeviceConfig> forkLiftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() + .eq("device_type", String.valueOf(SlaveType.ForkLift))); + for (DeviceConfig deviceConfig : forkLiftList) { + BasLift basLift = basLiftService.selectOne(new EntityWrapper<BasLift>().eq("lift_no", deviceConfig.getDeviceNo())); + if (basLift == null) { + throw new CoolException("鏈厤缃揣鍙夋彁鍗囨満鏁版嵁"); + } + + ThreadHandler thread = null; + if (deviceConfig.getThreadImpl().equals("ZyForkLiftThread")) { + thread = new ZyForkLiftThread(deviceConfig, basLift.getStationList$(), redisUtil); + } else { + throw new CoolException("鏈煡鐨勭嚎绋嬪疄鐜�"); + } + + new Thread(thread).start(); + SlaveConnection.put(SlaveType.ForkLift, deviceConfig.getDeviceNo(), thread); + + if (deviceConfig.getFake() == 1) { + fakeDevices.add(deviceConfig); + }else { + allDevices.add(deviceConfig); + } } - // 鍒濆鍖栬緭閫佺嚎绾跨▼ - for (DevpSlave devp : slaveProperties.getDevp()) { - DevpThread devpThread = new DevpThread(devp); - new Thread(devpThread).start(); - SlaveConnection.put(SlaveType.Devp, devp.getId(), devpThread); + // 鍒濆鍖栨彁鍗囨満 + News.info("鍒濆鍖栨彁鍗囨満........................................................"); + List<DeviceConfig> liftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() + .eq("device_type", String.valueOf(SlaveType.Lift))); + for (DeviceConfig deviceConfig : liftList) { + BasLift basLift = basLiftService.selectOne(new EntityWrapper<BasLift>().eq("lift_no", deviceConfig.getDeviceNo())); + if (basLift == null) { + throw new CoolException("鏈厤缃彁鍗囨満鏁版嵁"); + } + + ThreadHandler thread = null; + if (deviceConfig.getThreadImpl().equals("NyLiftThread")) { + thread = new NyLiftThread(deviceConfig, basLift.getPoint$(), basLift.getStationList$(), redisUtil); + } else { + throw new CoolException("鏈煡鐨勭嚎绋嬪疄鐜�"); + } + + new Thread(thread).start(); + SlaveConnection.put(SlaveType.Lift, deviceConfig.getDeviceNo(), thread); + + if (deviceConfig.getFake() == 1) { + fakeDevices.add(deviceConfig); + }else { + allDevices.add(deviceConfig); + } } -// // 鍒濆鍖栨潯鐮佹壂鎻忎华绾跨▼ -// for (Slave barcode : slaveProperties.getBarcode()) { -// BarcodeThread barcodeThread = new BarcodeThread(barcode); -// new Thread(barcodeThread).start(); -// SlaveConnection.put(SlaveType.Barcode, barcode.getId(), barcodeThread); -// } + // 鍒濆鍖栧洓鍚戠┛姊溅 + News.info("鍒濆鍖栧洓鍚戠┛姊溅......................................................"); + List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() + .eq("device_type", String.valueOf(SlaveType.Shuttle))); + for (DeviceConfig deviceConfig : shuttleList) { + ThreadHandler thread = null; + if (deviceConfig.getThreadImpl().equals("NyShuttleThread")) { + thread = new NyShuttleThread(deviceConfig, redisUtil); + } else { + throw new CoolException("鏈煡鐨勭嚎绋嬪疄鐜�"); + } + + new Thread(thread).start(); + SlaveConnection.put(SlaveType.Shuttle, deviceConfig.getDeviceNo(), thread); + + if (deviceConfig.getFake() == 1) { + fakeDevices.add(deviceConfig); + }else { + allDevices.add(deviceConfig); + } + } + + + //璁惧鍒濆鍖栧畬姣� + deviceMsgUtils.sendDeviceConfig(JSON.toJSONString(allDevices)); + deviceMsgUtils.sendFakeDeviceConfig(JSON.toJSONString(fakeDevices)); + + TrafficControlThread trafficControlThread = new TrafficControlImplThread(redisUtil); + new Thread(trafficControlThread).start(); + SlaveConnection.put(SlaveType.TrafficControl, 1, trafficControlThread); + + ShuttleExecuteScheduler shuttleExecuteScheduler = new ShuttleExecuteScheduler(shuttleAction, deviceConfigService, redisUtil, threadControlCount); + new Thread(shuttleExecuteScheduler).start(); } -- Gitblit v1.9.1