|  |  |  | 
|---|
|  |  |  | package com.zy.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.core.Slave; | 
|---|
|  |  |  | import com.zy.core.ThreadHandler; | 
|---|
|  |  |  | import com.zy.core.cache.OutputQueue; | 
|---|
|  |  |  | import lombok.Data; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | import java.net.Socket; | 
|---|
|  |  |  | import java.net.SocketAddress; | 
|---|
|  |  |  | import java.net.SocketTimeoutException; | 
|---|
|  |  |  | import java.util.Date; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 磅秤线程 | 
|---|
|  |  |  | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public boolean connect() { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | close();  //1.主动释放连接 //2.某些服务器对指定ip有链路数限制 | 
|---|
|  |  |  | socket = new Socket(); | 
|---|
|  |  |  | 
|---|
|  |  |  | 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()); | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | 
|---|
|  |  |  | 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) { | 
|---|
|  |  |  | log.error("SocketClient close Exception:" + e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void write(byte[] msg, int len) throws IOException { | 
|---|
|  |  |  | if (null != dataInputStream) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (null != dataInputStream) { | 
|---|
|  |  |  | dataOutputStream.write(msg, 0, len); | 
|---|
|  |  |  | dataOutputStream.flush(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|