From f613d1c82ee144f3513226afeb2a368a743c5951 Mon Sep 17 00:00:00 2001 From: "lisai17@sina.com" Date: Mon, 7 Dec 2020 11:18:31 +0800 Subject: [PATCH] . --- .../devicectrl/common/DeviceThread.java | 28 +++- .../ssjygl/devicectrl/device/KeLiScale.java | 127 ++++++++++++++++++ .../ssjygl/devicectrl/device/LEDThread.java | 15 ++- .../local/ssjygl/devicectrl/device/PLC.java | 7 +- .../com/cowr/local/ssjygl/main/Config.java | 2 +- .../transport/TransportDeviceService.java | 2 + .../src/main/resources/dev/config.properties | 2 +- .../src/main/resources/dev/db.properties | 17 ++- .../src/main/resources/prod/config.properties | 2 +- .../ordercluster/OrderclusterSyncService.java | 6 +- 10 files changed, 186 insertions(+), 22 deletions(-) create mode 100644 ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/device/KeLiScale.java diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/common/DeviceThread.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/common/DeviceThread.java index 71ba3b9..f5cf995 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/common/DeviceThread.java +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/common/DeviceThread.java @@ -178,6 +178,8 @@ public class DeviceThread extends Thread { } else { scale = new XiShuiScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port")); } + } else if (supermarket_id == 7) { + scale = new KeLiScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port")); } else { scale = new XiShuiScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port")); } @@ -237,6 +239,26 @@ public class DeviceThread extends Thread { }); } + public void reconnScale(String scaleId){ + if (!this.scaleMap.containsKey(scaleId)) { + throw new IllegalArgumentException(scaleId + " does not exist"); + } + + AbsScale scale = this.scaleMap.get(scaleId); + + if (scale == null) { + return; + } + + try{ + scale.disconnect(); + Thread.sleep(500); + scale.connect(); + }catch (Exception e){ + log.error(e.getMessage(), e); + } + } + public Double scale(String scaleId) throws IOException { if (!this.scaleMap.containsKey(scaleId)) { throw new IllegalArgumentException(scaleId + " does not exist"); @@ -244,11 +266,11 @@ public class DeviceThread extends Thread { AbsScale scale = this.scaleMap.get(scaleId); - if(scale == null){ + if (scale == null) { return null; } - if(!scale.isConnected()){ + if (!scale.isConnected()) { scale.connect(); } @@ -263,7 +285,7 @@ public class DeviceThread extends Thread { this.printerMap.get(printerId).print(file); } - public void showPriceInfo(String which, String truck_license, String weight, String total_price){ + public void showPriceInfo(String which, String truck_license, String weight, String total_price) { for (Controller controller : controllers) { if (controller.getWhich().equals(which)) { controller.getLed().setPriceInfo(truck_license, weight, total_price); diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/device/KeLiScale.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/device/KeLiScale.java new file mode 100644 index 0000000..040d558 --- /dev/null +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/device/KeLiScale.java @@ -0,0 +1,127 @@ +package com.cowr.local.ssjygl.devicectrl.device; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.stream.Collectors; + +/** + * 柯力称重显示器 + */ +public class KeLiScale extends AbsScale { + private static final int DATA_LENGTH = 8; + + public KeLiScale(String id, String ip, int port) { + super(id, ip, port); + } + + @Override + public double weigh() throws IOException { + InputStream inputStream = socket.getInputStream(); + byte[] clearBuf = new byte[inputStream.available()]; + inputStream.read(clearBuf); + int errCount = 0; + + String weight = "0.0"; + while (true) { + if (errCount >= 10) { + break; + } + + errCount++; + + byte[] buf = new byte[DATA_LENGTH]; + int read = inputStream.read(buf); + + if (read != DATA_LENGTH) { + continue; + } + + weight = new String(Arrays.copyOfRange(buf, 2, 8)); + break; + } + + return Double.parseDouble(weight) / 1000d; + } + + @Override + public double weigh15() throws IOException { + ArrayList list = new ArrayList<>(); + AtomicBoolean run = new AtomicBoolean(true); + + InputStream inputStream = socket.getInputStream(); + byte[] clearBuf = new byte[inputStream.available()]; + inputStream.read(clearBuf); + int errCount = 0; + + while (run.get() && list.size() < 15) { + long st = System.currentTimeMillis(); + + byte[] buf = new byte[DATA_LENGTH]; + int read = inputStream.read(buf); + + if (read != DATA_LENGTH && errCount < 10) { + errCount++; + continue; + } + + String weight = new String(Arrays.copyOfRange(buf, 2, 8)); + + if (!pattern.matcher(weight).matches() || weight.equals("000000")) { +// System.out.println("error:" + weight); + + if (errCount == 100) { + break; + } + errCount++; + continue; + } + +// System.out.println("读一次耗时:" + (System.currentTimeMillis() - st) + ", " + Double.parseDouble(flip(weight))); + list.add(weight); + } + + String max = "0"; + if (list.size() > 0) { + Map collect = list.stream().collect( + Collectors.groupingBy(num -> num, Collectors.counting())); + max = collect.entrySet().stream().max(Comparator.comparingLong(Map.Entry::getValue)).get().getKey(); + } + + return Double.parseDouble(max) / 1000d; + } + + + public static void main(String[] args) { + KeLiScale s = new KeLiScale("scale", "192.168.20.30", 10001); + + try { + boolean connect = s.connect(); + System.out.println("connect " + connect); + } catch (IOException e) { + e.printStackTrace(); + } + + long st = System.currentTimeMillis(); + + for (int i = 0; i < 100; i++) { + try { + st = System.currentTimeMillis(); + double weigh = s.weigh15(); + System.out.println("end:" + weigh + ", tm: " + (System.currentTimeMillis() - st)); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } catch (IOException e) { + e.printStackTrace(); + } +// break; + } + } +} diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/device/LEDThread.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/device/LEDThread.java index 2a2c378..f945635 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/device/LEDThread.java +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/device/LEDThread.java @@ -172,7 +172,7 @@ public class LEDThread extends Device implements Runnable { byte[] z = new byte[read]; System.arraycopy(y, 0, z, 0, read); // System.out.println(getId() + " LED 返回数据:" + HexDump.toHex(z)); -// socket.close(); + } catch (Exception e) { if (e.getMessage().contains("Socket is not connected")) { log.error("LED %s %s 连接已断开", getId(), getIp()); @@ -185,6 +185,15 @@ public class LEDThread extends Device implements Runnable { reconn(); } finally { + try{ + if(socket != null){ + socket.close(); + socket = null; + } + }catch (Exception e){ + log.error(e.getMessage(),e); + } + lock.unlock(); } } @@ -337,7 +346,7 @@ public class LEDThread extends Device implements Runnable { public static void main(String[] args) { try { - LEDThread led = new LEDThread("", "192.168.20.52", 5005); + LEDThread led = new LEDThread("", "192.168.20.50", 5005); Thread thread = new Thread(led); thread.setDaemon(true); thread.start(); @@ -345,6 +354,8 @@ public class LEDThread extends Device implements Runnable { System.out.println("LED 启动"); + led.setWeightInfo("鄂A7D1P1", "1.1"); + Thread.sleep(10000000); led.running = false; diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/device/PLC.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/device/PLC.java index fb70a07..6ec2d4e 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/device/PLC.java +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/device/PLC.java @@ -275,11 +275,12 @@ public class PLC extends Device { public static void main(String[] args) { try { - PLC plc = new PLC("_plc", "192.168.20.20", 502, com.cowr.local.ssjygl.devicectrl.common.DeviceThread.defaultAddressTable); + PLC plc = new PLC("_plc", "192.168.20.21", 502, com.cowr.local.ssjygl.devicectrl.common.DeviceThread.defaultAddressTable); plc.connect(); plc.isConnected(); - plc.write("rodIn1Down"); -// plc.write("rodOut2Up"); +// plc.write("rodIn1Down"); + String cmd = "rodOut2Down"; + plc.write(cmd); // plc.write("sensorIn2Reset"); // plc.write("sensorOut1Reset"); diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/main/Config.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/main/Config.java index 68486ff..6574d9a 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/main/Config.java +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/main/Config.java @@ -95,7 +95,7 @@ public class Config extends JFinalConfig { public static DeviceThread deviceThread = new DeviceThread(); public static SocketIOService socketio = null; private static boolean client_run = true; - public static final String CLINET_VERSION = "20201130"; + public static final String CLINET_VERSION = "20201207"; public static String getRootPath() { return PathKit.getWebRootPath() diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/transport/TransportDeviceService.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/transport/TransportDeviceService.java index 7cf1126..007862a 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/transport/TransportDeviceService.java +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/transport/TransportDeviceService.java @@ -298,6 +298,8 @@ public class TransportDeviceService { break; } + Config.deviceThread.reconnScale(which); + Thread.sleep(500); }catch (Exception e){ log.error(e.getMessage(), e); diff --git a/ssjygl-xsx-local/src/main/resources/dev/config.properties b/ssjygl-xsx-local/src/main/resources/dev/config.properties index 68d95e1..1012b37 100644 --- a/ssjygl-xsx-local/src/main/resources/dev/config.properties +++ b/ssjygl-xsx-local/src/main/resources/dev/config.properties @@ -15,7 +15,7 @@ socketserver.port=21002 socketio.port=12002 #当前部署本地程序的砂站id -current.supermarket_id=1 +current.supermarket_id=7 #落杆后,等待上磅的时间 default_scale_wait_time=8000 diff --git a/ssjygl-xsx-local/src/main/resources/dev/db.properties b/ssjygl-xsx-local/src/main/resources/dev/db.properties index 2540495..b91aa91 100644 --- a/ssjygl-xsx-local/src/main/resources/dev/db.properties +++ b/ssjygl-xsx-local/src/main/resources/dev/db.properties @@ -1,13 +1,12 @@ -# mysql -# GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.119' IDENTIFIED BY 'Local_1' WITH GRANT OPTION; -jdbcUrl=jdbc:mysql://rm-wz9wa070076b2uge2ro.mysql.rds.aliyuncs.com:3306/ssjy_xsx_dev?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&useInformationSchema=true&serverTimezone=GMT%2B8&autoReconnect=true -user=dev_ssjy_xsx -password=Ssjy_xs_890 +## mysql +## GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.119' IDENTIFIED BY 'Local_1' WITH GRANT OPTION; +#jdbcUrl=jdbc:mysql://rm-wz9wa070076b2uge2ro.mysql.rds.aliyuncs.com:3306/ssjy_xsx_dev?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&useInformationSchema=true&serverTimezone=GMT%2B8&autoReconnect=true +#user=dev_ssjy_xsx +#password=Ssjy_xs_890 -#jdbcUrl=jdbc:mysql://192.168.20.2:3306/ssjy_xsx_dev?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&useInformationSchema=true&serverTimezone=GMT%2B8&autoReconnect=true -#jdbcUrl=jdbc:mysql://192.168.1.177:3306/ssjy_xsx_dev?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&useInformationSchema=true&serverTimezone=GMT%2B8&autoReconnect=true -#user=root -#password=Ssjy_xsx_890 +jdbcUrl=jdbc:mysql://192.168.20.2:3306/ssjy_xsx_dev?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&useInformationSchema=true&serverTimezone=GMT%2B8&autoReconnect=true +user=root +password=Ssjy_xsx_890 # redis redis.basekey=ssjcgl_xsx_dev diff --git a/ssjygl-xsx-local/src/main/resources/prod/config.properties b/ssjygl-xsx-local/src/main/resources/prod/config.properties index 1fddb14..f79c500 100644 --- a/ssjygl-xsx-local/src/main/resources/prod/config.properties +++ b/ssjygl-xsx-local/src/main/resources/prod/config.properties @@ -15,7 +15,7 @@ socketserver.port=21002 socketio.port=12002 #当前部署本地程序的砂站id -current.supermarket_id=6 +current.supermarket_id=1 #落杆后,等待上磅的时间 default_scale_wait_time=8000 diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/OrderclusterSyncService.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/OrderclusterSyncService.java index 7335028..c0e8cb2 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/OrderclusterSyncService.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/OrderclusterSyncService.java @@ -1022,7 +1022,8 @@ public class OrderclusterSyncService extends BaseSyncService { "select * from ordercluster t \n" + " where t.customer_id = ? \n" + " and t.cutoff_time = ? \n" + - " and t.state < 5 limit 1", oldobj.getCustomerId(), cutoff_time)}; + " and t.supermarket_id = ? \n" + + " and t.state < 5 limit 1", oldobj.getCustomerId(), cutoff_time, oldobj.getSupermarketId())}; boolean ret = Db.tx(new IAtom() { @Override @@ -1235,7 +1236,8 @@ public class OrderclusterSyncService extends BaseSyncService { "select * from ordercluster t \n" + " where t.customer_name = ? \n" + " and t.cutoff_time = ? \n" + - " and t.state < 5 limit 1", oldobj.getCustomerName(), cutoff_time); + " and t.supermarket_id = ? \n" + + " and t.state < 5 limit 1", oldobj.getCustomerName(), cutoff_time, oldobj.getSupermarketId()); if (forwardoldobj == null) { // 新建一个