*
lsh
2025-11-25 b9b7d28c2ee64de19c2905eee98091f3eb68709f
*
3个文件已修改
111 ■■■■ 已修改文件
src/main/java/com/zy/core/Slave.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/cache/OutputQueue.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/ScaleThread.java 104 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/Slave.java
@@ -14,4 +14,9 @@
    private Integer port;
    private Integer staNo;
    // 输送线plc编号
    private Integer devpPlcId;
}
src/main/java/com/zy/core/cache/OutputQueue.java
@@ -15,6 +15,8 @@
    public static ArrayBlockingQueue<String> DEVP = new ArrayBlockingQueue<>(32);
    // 条码器输出日志
    public static ArrayBlockingQueue<JSONObject> BARCODE = new ArrayBlockingQueue<>(32);
    // 磅秤输出日志
    public static ArrayBlockingQueue<JSONObject> SCALE = new ArrayBlockingQueue<>(32);
    // rgv输出日志
    public static ArrayBlockingQueue<String> RGV = new ArrayBlockingQueue<>(32);
}
src/main/java/com/zy/core/thread/ScaleThread.java
@@ -1,9 +1,19 @@
package com.zy.core.thread;
import com.alibaba.fastjson.JSONObject;
import com.core.common.Cools;
import com.zy.common.utils.News;
import com.core.common.DateUtils;
import com.core.common.SpringUtils;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.service.BasDevpService;
import com.zy.asrs.service.DeviceErrorService;
import com.zy.core.DevpThread;
import com.zy.core.Slave;
import com.zy.core.ThreadHandler;
import com.zy.core.cache.OutputQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.protocol.StaProtocol;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@@ -14,6 +24,7 @@
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketTimeoutException;
import java.util.Date;
/**
 * 磅秤线程
@@ -42,8 +53,56 @@
                byte[] read = read(8, 100);
                if (null != read) {
                    String s = new String(read);
                    if (!Cools.isEmpty(s) && s.startsWith("=")) {
                    if (!Cools.isEmpty(s) && s.startsWith("\u0002+")) {
//                    if (!Cools.isEmpty(s) && s.startsWith("=")) {
                        scale = Double.parseDouble(s.substring(1));
//                        System.out.println("scale:"+scale+ "ip:"+slave.getIp());
//                        String substring = s.substring(1);
//                        String s1 = new StringBuilder(substring).reverse().toString();//逆序
//                        scale = Double.parseDouble(s1);
                        //将称重重量写入设备基础数据中的gross_wt字段
//                        if(scale > 20) {
                        try{
                            // 获取站信息
                            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, slave.getDevpPlcId());
                            StaProtocol staProtocol = devpThread.getStation().get(slave.getStaNo());
                            if (staProtocol != null) {
                                if (scale>10000){
                                    scale = scale-10000;
                                }
                                devpThread.setGrossWt(staProtocol.getSiteId(), scale);
                                JSONObject jsonObject = new JSONObject();
                                jsonObject.put("time", DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmss_F));
                                jsonObject.put("id", slave.getStaNo());
                                jsonObject.put("scale", scale);
                                if (OutputQueue.SCALE.size() >= 32) {
                                    OutputQueue.SCALE.poll();
                                }
                                OutputQueue.SCALE.offer(jsonObject);
                            }
                        } catch (Exception e){
                            log.error("称重模块异常"+e .getMessage());
                        }
//                            BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class);
//                            BasDevp basDevp = basDevpService.selectById(slave.getStaNo());
//                            if(!Cools.isEmpty(basDevp)) {
//                                basDevp.setGrossWt(scale);
//                                if (null != basDevpService && !basDevpService.updateById(basDevp)) {
//                                    throw new Exception("更新数据库数据失败");
//                                }
//                                JSONObject jsonObject = new JSONObject();
//                                jsonObject.put("time", DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmss_F));
//                                jsonObject.put("id", slave.getStaNo());
//                                jsonObject.put("scale", scale);
//                                if (OutputQueue.SCALE.size() >= 32) {
//                                    OutputQueue.SCALE.poll();
//                                }
//                                OutputQueue.SCALE.offer(jsonObject);
//
//                            }
//                        }
                    }
                }
                Thread.sleep(100);
@@ -56,6 +115,7 @@
    @Override
    public boolean connect() {
        try {
            close();  //1.主动释放连接 //2.某些服务器对指定ip有链路数限制
            socket = new Socket();
@@ -65,9 +125,23 @@
            dataOutputStream = new DataOutputStream(socket.getOutputStream());
            dataInputStream = new DataInputStream(socket.getInputStream());
//            log.info("条码扫描仪连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
            try{
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.deleteDeviceError("Scale", slave.getId());
            } catch (Exception e){
//                log.error("e:"+e.getMessage());
            }
        } catch (Exception e) {
            socket = null;
            News.error("Scale"+" - 1"+" - 条码扫描仪连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
//            log.error("磅秤连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
//            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
//            deviceErrorService.addDeviceError("scale", slave.getId(), "磅秤连接失败");
            try{
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.deleteDeviceError("Scale", slave.getId());
            } catch (Exception e1){
//                log.error("e:"+e1.getMessage());
            }
            return false;
        }
        return true;
@@ -77,20 +151,20 @@
    public void close() {
        try {
            if (null != dataOutputStream) {
            dataOutputStream.close();
        }
        if (null != dataInputStream) {
            dataInputStream.close();
        }
                dataOutputStream.close();
            }
            if (null != dataInputStream) {
                dataInputStream.close();
            }
//        if (null != socket && !socket.isClosed()) {
//            socket.close();
//        }
        if (null != socket){
            socket.close();
        }
        socket = null;
            if (null != socket){
                socket.close();
            }
            socket = null;
        } catch (IOException e) {
            News.error("Scale"+" - 2"+" - SocketClient close Exception:" + e.getMessage());
            log.error("SocketClient close Exception:" + e.getMessage());
        }
    }
@@ -112,8 +186,8 @@
        int len = dataInputStream.read(bytes);
        byte[] tempBytes = null;
        if (len > 0) {
        tempBytes = new byte[len];
        System.arraycopy(bytes, 0, tempBytes, 0, len);
            tempBytes = new byte[len];
            System.arraycopy(bytes, 0, tempBytes, 0, len);
        }
        return tempBytes;
    }