//package com.zy.acs.wcs.core.thread; // //import com.alibaba.fastjson.JSONObject; //import com.core.common.Cools; //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.acs.wcs.core.Slave; //import com.zy.acs.wcs.core.ThreadHandler; //import com.zy.acs.wcs.core.cache.OutputQueue; //import lombok.Data; //import lombok.extern.slf4j.Slf4j; // //import java.io.DataInputStream; //import java.io.DataOutputStream; //import java.io.IOException; //import java.net.InetSocketAddress; //import java.net.Socket; //import java.net.SocketAddress; //import java.net.SocketTimeoutException; //import java.util.Date; // ///** // * 磅秤线程 // * Created by vincent on 2020/8/4 // */ //@Data //@Slf4j //public class ScaleThread implements Runnable, ThreadHandler { // // private Slave slave; // private Double scale = 0.0D; // private Socket socket; // private DataOutputStream dataOutputStream; // private DataInputStream dataInputStream; // // public ScaleThread(Slave slave) { // this.slave = slave; // } // // @Override // @SuppressWarnings("InfiniteLoopStatement") // public void run() { // connect(); // while (true) { // try { // byte[] read = read(8, 100); // if (null != read) { // String s = new String(read); // if (!Cools.isEmpty(s) && s.startsWith("=")) { // scale = Double.parseDouble(s.substring(1)); // // //将称重重量写入设备基础数据中的gross_wt字段 // if (scale > 20) { // BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); // Integer staNo = slave.getId() == 1 ? 101 : 201; // BasDevp basDevp = basDevpService.selectById(staNo); // 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", staNo); // jsonObject.put("scale", scale); // if (OutputQueue.SCALE.size() >= 32) { // OutputQueue.SCALE.poll(); // } // OutputQueue.SCALE.offer(jsonObject); // } // } // } // } // Thread.sleep(100); // } catch (SocketTimeoutException ignore) { // } catch (Exception e) { //// e.printStackTrace(); // } // } // } // // @Override // public boolean connect() { // // try { // close(); //1.主动释放连接 //2.某些服务器对指定ip有链路数限制 // socket = new Socket(); // //socket.setKeepAlive(true); // SocketAddress socketAddress = new InetSocketAddress(slave.getIp(), slave.getPort()); // socket.connect(socketAddress, 1000); //某些服务器ping延迟高时要增加,否则会报错connect timeout // dataOutputStream = new DataOutputStream(socket.getOutputStream()); // dataInputStream = new DataInputStream(socket.getInputStream()); //// log.info("条码扫描仪连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); // DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); // deviceErrorService.deleteDeviceError("scale", slave.getId()); // } catch (Exception e) { // socket = null; // log.error("磅秤连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); // DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); // deviceErrorService.addDeviceError("scale", slave.getId(), "磅秤连接失败"); // return false; // } // return true; // } // // @Override // public void close() { // try { // if (null != dataOutputStream) { // dataOutputStream.close(); // } // if (null != dataInputStream) { // dataInputStream.close(); // } //// if (null != socket && !socket.isClosed()) { //// socket.close(); //// } // if (null != socket) { // socket.close(); // } // socket = null; // } catch (IOException e) { // log.error("SocketClient close Exception:" + e.getMessage()); // } // } // // public void write(byte[] msg, int len) throws IOException { // if (null != dataInputStream) { // dataOutputStream.write(msg, 0, len); // dataOutputStream.flush(); // } // } // // public byte[] read(int bufferSize, int timeOut) throws IOException { //// if (socket == null) { //// connect(); //// } // connect(); // socket.setSoTimeout(timeOut); // byte[] bytes = new byte[bufferSize]; // int len = dataInputStream.read(bytes); // byte[] tempBytes = null; // if (len > 0) { // tempBytes = new byte[len]; // System.arraycopy(bytes, 0, tempBytes, 0, len); // } // return tempBytes; // } // // public boolean valid() throws Exception { // if (null == socket || socket.isClosed() || socket.isInputShutdown() || socket.isOutputShutdown()) { // if (dataInputStream != null) { // dataInputStream.close(); // } // if (dataOutputStream != null) { // dataOutputStream.close(); // } // if (socket != null) { // socket.close(); // } // return false; // } // return true; // } // //}