自动化立体仓库 - WCS系统
#
luxiaotao1123
2020-08-05 3e3959bf84c673b3cb366e6225a6b5c8dfbea903
#
3个文件已添加
3个文件已修改
187 ■■■■■ 已修改文件
src/main/java/com/zy/core/ServerBootstrap.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/cache/MessageQueue.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/channel/TestController.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/Task.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/CrnThread.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/ServerBootstrap.java
@@ -1,6 +1,7 @@
package com.zy.core;
import com.core.common.Cools;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.properties.SlaveProperties;
@@ -26,10 +27,34 @@
    @PostConstruct
    public void init(){
        // 初始化消息队列
        initMq();
        // 初始化下位机线程
        initThread();
    }
    private void initMq(){
        // 初始化堆垛机mq
        for (Slave crn : slaveProperties.getCrn()) {
            MessageQueue.init(SlaveType.Crn, crn);
        }
        // 初始化输送线mq
        for (Slave devp : slaveProperties.getDevp()) {
            MessageQueue.init(SlaveType.Devp, devp);
        }
        // 初始化条码扫描仪mq
        for (Slave barcode : slaveProperties.getBarcode()) {
            MessageQueue.init(SlaveType.Barcode, barcode);
        }
        // 初始化Led灯mq
        for (Slave led : slaveProperties.getLed()) {
            MessageQueue.init(SlaveType.Led, led);
        }
        // 初始化磅称mq
        for (Slave scale : slaveProperties.getScale()) {
            MessageQueue.init(SlaveType.Scale, scale);
        }
    }
    private void initThread(){
        // 初始化堆垛机线程
@@ -43,6 +68,7 @@
        for (Slave devo : slaveProperties.getDevp()) {
            DevpThread devpThread = new DevpThread(devo);
            new Thread(devpThread).start();
            SlaveConnection.put(SlaveType.Devp, devo.getId(), devpThread);
        }
    }
src/main/java/com/zy/core/cache/MessageQueue.java
New file
@@ -0,0 +1,96 @@
package com.zy.core.cache;
import com.zy.core.Slave;
import com.zy.core.ThreadHandler;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.Task;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
/**
 * 消息队列
 * Created by vincent on 2020/8/5
 */
public class MessageQueue {
    // 堆垛机mq交换机
    private static final Map<Integer, ConcurrentLinkedQueue<Task>> CRN_EXCHANGE = new ConcurrentHashMap<>();
    // 输送线mq交换机
    private static final Map<Integer, ConcurrentLinkedQueue<Task>> DEVP_EXCHANGE = new ConcurrentHashMap<>();
    // 条码扫描仪mq交换机
    private static final Map<Integer, ConcurrentLinkedQueue<Task>> BARCODE_EXCHANGE = new ConcurrentHashMap<>();
    // Led灯 mq交换机
    private static final Map<Integer, ConcurrentLinkedQueue<Task>> LED_EXCHANGE = new ConcurrentHashMap<>();
    // 磅称mq交换机
    private static final Map<Integer, ConcurrentLinkedQueue<Task>> SCALE_EXCHANGE = new ConcurrentHashMap<>();
    /**
     *    mq 交换机初始化
     **/
    public static void init(SlaveType type, Slave slave) {
        switch (type) {
            case Crn:
                CRN_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
                break;
            case Devp:
                DEVP_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
                break;
            case Barcode:
                BARCODE_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
                break;
            case Led:
                LED_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
                break;
            case Scale:
                SCALE_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
                break;
            default:
                break;
        }
    }
    /**
     * 添加元素
     * 如果发现队列已满无法添加的话,会直接返回false。
     */
    public static boolean offer(SlaveType type, Integer id, Task task) {
        switch (type) {
            case Crn:
                return CRN_EXCHANGE.get(id).offer(task);
            case Devp:
                return DEVP_EXCHANGE.get(id).offer(task);
            case Barcode:
                return BARCODE_EXCHANGE.get(id).offer(task);
            case Led:
                return LED_EXCHANGE.get(id).offer(task);
            case Scale:
                return SCALE_EXCHANGE.get(id).offer(task);
            default:
                return false;
        }
    }
    /**
     * 移除元素
     * 若队列为空,返回null。
     */
    public static Task poll(SlaveType type, Integer id) {
        switch (type) {
            case Crn:
                return CRN_EXCHANGE.get(id).poll();
            case Devp:
                return DEVP_EXCHANGE.get(id).poll();
            case Barcode:
                return BARCODE_EXCHANGE.get(id).poll();
            case Led:
                return LED_EXCHANGE.get(id).poll();
            case Scale:
                return SCALE_EXCHANGE.get(id).poll();
            default:
                return null;
        }
    }
}
src/main/java/com/zy/core/channel/TestController.java
New file
@@ -0,0 +1,22 @@
package com.zy.core.channel;
import com.zy.core.cache.MessageQueue;
import com.zy.core.model.Task;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * Created by vincent on 2020/8/5
 */
@RestController
public class TestController {
    @RequestMapping("/test")
    public String test(){
        Task task = new Task();
        task.setId(1);
        MessageQueue.CRN_QUE.offer(task);
        return "ok";
    }
}
src/main/java/com/zy/core/model/Task.java
New file
@@ -0,0 +1,13 @@
package com.zy.core.model;
import lombok.Data;
/**
 * Created by vincent on 2020/8/5
 */
@Data
public class Task {
    private int id;
}
src/main/java/com/zy/core/thread/CrnThread.java
@@ -2,13 +2,20 @@
import com.zy.core.Slave;
import com.zy.core.ThreadHandler;
import com.zy.core.cache.MessageQueue;
import com.zy.core.model.Task;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
/**
 * Created by vincent on 2020/8/4
 */
@Slf4j
@Data
public class CrnThread implements Runnable, ThreadHandler {
    private Slave slave;
    private int distance;
    public CrnThread(Slave slave) {
        this.slave = slave;
@@ -20,12 +27,17 @@
        while (true) {
            try {
                System.out.println("线程"+slave.getId()+"正在运行");
                Task task = MessageQueue.CRN_QUE.poll();
                if (task == null) {
                    System.out.println("无任务");
                } else {
                    System.out.println("任务"+task.getId());
                }
                Thread.sleep(1000);
                Thread.sleep(3000);
            } catch (Exception e) {
                e.printStackTrace();
            }
src/main/resources/application.yml
@@ -40,14 +40,10 @@
    id: 1
    ip: 192.168.1.1
    port: 8888
  crn[1]:
    id: 2
    ip: 192.168.1.1
    port: 8888
  crn[2]:
    id: 3
    ip: 192.168.1.1
    port: 8888
#  crn[1]:
#    id: 2
#    ip: 192.168.1.1
#    port: 8888
  # 站点
  devp[0]:
    id: 1