自动化立体仓库 - WCS系统
#
lsh
2024-09-13 ac6bb34756815cceea18ae27dbec3e404bcdf69b
src/main/java/com/zy/core/thread/LedThread.java
@@ -1,13 +1,11 @@
package com.zy.core.thread;
import com.alibaba.fastjson.JSON;
import com.core.common.Cools;
import com.zy.common.entity.Parameter;
import com.zy.common.model.MatDto;
import com.zy.core.Slave;
import com.zy.core.ThreadHandler;
import com.zy.core.cache.MessageQueue;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.ErrMsg;
import com.zy.core.model.Task;
import com.zy.core.model.command.LedCommand;
import lombok.Data;
@@ -23,9 +21,8 @@
import onbon.bx05.utils.DisplayStyleFactory;
import java.awt.*;
import java.util.HashSet;
import java.util.*;
import java.util.List;
import java.util.Set;
/**
 * Created by vincent on 2020/9/1
@@ -40,14 +37,21 @@
    TextCaptionBxArea area;
    DisplayStyleFactory.DisplayStyle[] styles = DisplayStyleFactory.getStyles().toArray(new DisplayStyleFactory.DisplayStyle[0]);
    private Set<Integer> workNos = new HashSet<>();
    private boolean ledMk = true;
    private boolean ledMk = false;
    private boolean resetStatus = false;    // 复位状态
    // 显示器
    private StringBuffer stringBuffer = new StringBuffer();
    private List<LedCommand> commandList;
//    private StringBuffer errorMsg = new StringBuffer();
    private List<ErrMsg> errorMsg = new ArrayList<>();
    public LedThread(Slave slave) {
        this.slave = slave;
        try {
            Bx5GEnv.initial(3000);
            screen = new Bx5GScreenClient("my");
//            Bx5GEnv.initial(3000);
//            screen = new Bx5GScreenClient("my");
        } catch (Exception e) {
            e.printStackTrace();
            log.info("led连接构造器错误 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
@@ -57,7 +61,7 @@
    @Override
    @SuppressWarnings({"InfiniteLoopStatement", "unchecked"})
    public void run() {
        connect();
//        connect();
        close();
        while (true) {
            try {
@@ -71,6 +75,20 @@
                        // 复位
                        case 2:
                            reset();
                            break;
                        // 写数据 液晶
                        case 3:
                            write7((List<LedCommand>)task.getData());
                            break;
                        // 复位 液晶
                        case 4:
                            reset7();
                            break;
                        case 5:
                            error((ErrMsg)task.getData());
                            break;
                        case 6:
                            errorReset();
                            break;
                        default:
                            break;
@@ -96,11 +114,18 @@
        TextBxPage page = new TextBxPage();
        for (LedCommand command : list) {
            page.newLine(command.getTitle() +"("+command.getWorkNo()+")");
            page.newLine("源库位:"+command.getSourceLocNo());
            page.newLine("库位:"+ (command.getIoType() < 100 ? command.getLocNo() : command.getSourceLocNo()));
            page.newLine("目标站:"+command.getStaNo());
            if (!command.isEmptyMk()) {
                for (MatDto matDto : command.getMatDtos()) {
                    page.newLine(matDto.getMaknx() + "【数量" + matDto.getCount() +"】");
                    //去掉小数点
                    String strQty = matDto.getCount().toString();
                    int idx = strQty.lastIndexOf(".");
                    if(idx >= 0){
                        strQty.substring(0,idx);
                    }
                    page.newLine(matDto.getMaknx() + "[数量" + strQty +"]");
//                    page.newLine(matDto.getMaknx() + "【数量" + matDto.getCount() +"】");
                }
            }
            page.newLine("\n");
@@ -126,9 +151,9 @@
    }
    private void reset() throws Bx5GException {
//        if (!connect()) {
//            return;
//        }
        if (!connect()) {
            return;
        }
//        if (resetStatus) {
//            return;
//        }
@@ -139,20 +164,21 @@
        // 创建一个数据页
        TextBxPage page = new TextBxPage();
        List<String> list = null;
        try {
            String ledDefaultMsg = Parameter.get().getLedDefaultMsg();
            list = JSON.parseArray(ledDefaultMsg, String.class);
        } catch (Exception ignore) {
        }
        if (!Cools.isEmpty(list)) {
            for (String str : list) {
                page.newLine(str);
            }
        } else {
            page.newLine("自动化立体仓库");
            page.newLine("西格迈股份有限公司");
        }
//        List<String> list = null;
//        try {
//            String ledDefaultMsg = Parameter.get().getLedDefaultMsg();
//            list = JSON.parseArray(ledDefaultMsg, String.class);
//        } catch (Exception ignore) {
//        }
//        if (!Cools.isEmpty(list)) {
//            for (String str : list) {
//                page.newLine(str);
//            }
//        } else {
//            page.newLine("自动化立体仓库");
//            page.newLine("西格迈股份有限公司");
//        }
        page.newLine("力源智能仓储");
        // 设置字体
        page.setFont(new Font("宋体",Font.PLAIN,13));
@@ -173,6 +199,55 @@
        }
        close();
    }
    private void write7(List<LedCommand> list) {
        commandList = list;
        StringBuilder sb = new StringBuilder();
        for (LedCommand command : list) {
            sb.append(command.getTitle()).append("(").append(command.getWorkNo()).append(")").append("\n");
            sb.append("源库位:").append(command.getSourceLocNo()).append("\n");
            sb.append("目标站:").append(command.getStaNo()).append("\n");
            if (!command.isEmptyMk()) {
                for (MatDto matDto : command.getMatDtos()) {
                    sb.append("物料编码:").append(matDto.getMatNo()).append("\n");
                    sb.append("数量:").append(matDto.getCount()).append("\n");
                }
            }
            sb.append("\n");
        }
        stringBuffer.delete(0, stringBuffer.length());
        stringBuffer.append(sb.toString());
        errorReset();
    }
    private void reset7() {
        commandList = null;
        stringBuffer.delete(0, stringBuffer.length());
    }
    private void error(ErrMsg errMsg) {
//        errorMsg.clear();
        ErrMsg errMsOld = null;
        for (ErrMsg errMsg1 : errorMsg){
            if (errMsg1.getId()==1){
                errMsOld = errMsg1;
            }
            errMsg1.setId(errMsg1.getId()-1);
        }
        if (errMsOld != null){
            errorMsg.remove(errMsOld);
        }
        errMsg.setId(errMsg.getIdCode());
        errorMsg.add(errMsg);
    }
    public void errorReset() {
        this.errorMsg.clear();
    }
    @Override
    public boolean connect() {
@@ -192,12 +267,19 @@
    @Override
    public void close() {
        screen.disconnect();
//        screen.disconnect();
    }
    public static void main(String[] args) throws Exception {
        String strQty = "1234";
        int index = strQty.lastIndexOf(".");
        if(index>=0) {
            strQty=strQty.substring(0, index);
        }
        System.out.println("2==>>"+strQty);
        Bx5GEnv.initial(3000);
        Bx5GScreenClient screen = new Bx5GScreenClient("my");
        DisplayStyleFactory.DisplayStyle[] styles = DisplayStyleFactory.getStyles().toArray(new DisplayStyleFactory.DisplayStyle[0]);