dev
parent
46f88ce90b
commit
f4886af87b
|
|
@ -9,6 +9,7 @@ public interface Enums {
|
|||
HEARTBEATREPLY, // 心跳回复
|
||||
SYNCTASK, // 数据同步
|
||||
SYNCRECV, // 数据同步反馈
|
||||
SYNCFAIL, // 数据同步失败,返回失败原因
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -19,7 +19,11 @@ public class AliyunSmsService {
|
|||
this.client = new DefaultAcsClient(DefaultProfile.getProfile(regionId, accessKeyId, secret));
|
||||
}
|
||||
|
||||
public String generator(String temp_code_str, JSONObject param) {
|
||||
public String generator(String temp_code_str, JSONObject param) throws Exception {
|
||||
if(temp_code_str == null){
|
||||
throw new Exception("模板文件不存在");
|
||||
}
|
||||
|
||||
for (String key : param.keySet()) {
|
||||
temp_code_str = temp_code_str.replace("${" + key + "}", param.getString(key));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,6 +52,8 @@ public class DeviceThread extends Thread {
|
|||
private List<Controller> controllers = new ArrayList<>();
|
||||
private List<Thread> threads = new ArrayList<>();
|
||||
|
||||
private int supermarket_id;
|
||||
|
||||
/*
|
||||
{
|
||||
"flow": [{
|
||||
|
|
@ -160,9 +162,21 @@ public class DeviceThread extends Thread {
|
|||
String plckey = plcconf.getString("ip") + "_" + plcconf.getIntValue("port");
|
||||
|
||||
// 一个摄像头只能连一次
|
||||
Camera camera = new Camera(which + "_camera", cameraconf.getString("ip"));
|
||||
XiShuiScale scale = new XiShuiScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
|
||||
LEDThread led = new LEDThread(which + "_led", ledconf.getString("ip"), ledconf.getIntValue("port"));
|
||||
Camera camera = new Camera(which + "_camera", cameraconf.getString("ip"));
|
||||
LEDThread led = new LEDThread(which + "_led", ledconf.getString("ip"), ledconf.getIntValue("port"));
|
||||
AbsScale scale;
|
||||
|
||||
if (supermarket_id == 3) { // 城隍用了耀华的表头
|
||||
scale = new YaoHuaScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
|
||||
} else if (supermarket_id == 4) { // 石畈用了两个不一样的表头
|
||||
if (scaleconf.getIntValue("port") == 10001) {
|
||||
scale = new YaoHuaScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
|
||||
} else {
|
||||
scale = new XiShuiScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
|
||||
}
|
||||
} else {
|
||||
scale = new XiShuiScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
|
||||
}
|
||||
|
||||
PLC plc = null;
|
||||
for (Map.Entry<String, PLC> entry : plcMap.entrySet()) {
|
||||
|
|
@ -231,6 +245,14 @@ public class DeviceThread extends Thread {
|
|||
return cameras.get(ip);
|
||||
}
|
||||
|
||||
public int getSupermarket_id() {
|
||||
return supermarket_id;
|
||||
}
|
||||
|
||||
public void setSupermarket_id(int supermarket_id) {
|
||||
this.supermarket_id = supermarket_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* 定时任务定时扫描检查
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -256,10 +256,10 @@ public class PLC extends Device {
|
|||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
PLC plc = new PLC("_plc", "192.168.20.21", 502, com.cowr.local.ssjygl.devicectrl.common.DeviceThread.defaultAddressTable);
|
||||
PLC plc = new PLC("_plc", "192.168.20.20", 502, com.cowr.local.ssjygl.devicectrl.common.DeviceThread.defaultAddressTable);
|
||||
plc.connect();
|
||||
plc.isConnected();
|
||||
plc.write("rodOut2Down");
|
||||
plc.write("rodOut1Up");
|
||||
// plc.write("rodOut2Up");
|
||||
|
||||
// plc.write("sensorIn2Reset");
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
package com.cowr.local.ssjygl.devicectrl.device;
|
||||
|
||||
;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -94,7 +92,7 @@ public class XiShuiScale extends AbsScale {
|
|||
|
||||
|
||||
public static void main(String[] args) {
|
||||
XiShuiScale s = new XiShuiScale("scale", "192.168.20.31", 10001);
|
||||
XiShuiScale s = new XiShuiScale("scale", "192.168.20.30", 10003);
|
||||
|
||||
try {
|
||||
boolean connect = s.connect();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,126 @@
|
|||
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 YaoHuaScale extends AbsScale {
|
||||
public YaoHuaScale(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[12];
|
||||
int read = inputStream.read(buf);
|
||||
|
||||
if (read != 18) {
|
||||
continue;
|
||||
}
|
||||
|
||||
weight = new String(Arrays.copyOfRange(buf, 2, 8));
|
||||
break;
|
||||
}
|
||||
|
||||
return Double.parseDouble(weight) / 1000d;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double weigh15() throws IOException {
|
||||
ArrayList<String> 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[12];
|
||||
int read = inputStream.read(buf);
|
||||
|
||||
if (read != 18 && 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<String, Long> 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) {
|
||||
YaoHuaScale s = new YaoHuaScale("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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -342,6 +342,7 @@ public class Config extends JFinalConfig {
|
|||
|
||||
// 最后启动 deviceThread
|
||||
// if ("prod".equals(ENV)) {
|
||||
deviceThread.setSupermarket_id(CliCacheData.SUP.getId());
|
||||
deviceThread.start();
|
||||
// }
|
||||
} catch (Exception e) {
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.cowr.local.ssjygl.netty;
|
|||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cowr.common.enums.Enums;
|
||||
import com.cowr.common.view.Result;
|
||||
import com.cowr.local.ssjygl.main.Config;
|
||||
import com.cowr.local.ssjygl.synctask.SyncTaskService;
|
||||
import com.jfinal.log.Log;
|
||||
|
|
@ -104,7 +105,7 @@ public class NettyClient {
|
|||
log.debug("停止 socket 服务");
|
||||
try {
|
||||
if (channel != null) {
|
||||
if(channel.parent() != null){
|
||||
if (channel.parent() != null) {
|
||||
channel.parent().close();
|
||||
}
|
||||
channel.close();
|
||||
|
|
@ -154,14 +155,20 @@ public class NettyClient {
|
|||
log.debug("注册成功,supermarket_id:" + supermarket_id);
|
||||
} else if (Enums.MsgTarget.SYNCTASK.name().equals(target)) {
|
||||
JSONObject data = json.getJSONObject("data");
|
||||
boolean ret = SyncTaskService.me.recv(data);
|
||||
Result ret = SyncTaskService.me.recv(data);
|
||||
|
||||
// 接收成功后,返回id
|
||||
if (ret) {
|
||||
if (ret.getCode() == Result.SUCCESS) {
|
||||
sendMsg(ctx, new JSONObject()
|
||||
.fluentPut("target", Enums.MsgTarget.SYNCRECV)
|
||||
.fluentPut("id", data.get("id"))
|
||||
.toJSONString());
|
||||
} else {
|
||||
sendMsg(ctx, new JSONObject()
|
||||
.fluentPut("target", Enums.MsgTarget.SYNCFAIL)
|
||||
.fluentPut("id", data.get("id"))
|
||||
.fluentPut("msg", ret.getMsg())
|
||||
.toJSONString());
|
||||
}
|
||||
} else if (Enums.MsgTarget.SYNCRECV.name().equals(target)) {
|
||||
SyncTaskService.me.syncComplete(json.getString("id"));
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.cowr.local.ssjygl.synctask;
|
|||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cowr.common.enums.Enums;
|
||||
import com.cowr.common.view.Result;
|
||||
import com.cowr.local.ssjygl.main.CliCacheData;
|
||||
import com.cowr.local.ssjygl.main.Config;
|
||||
import com.cowr.model.AuthLicense;
|
||||
|
|
@ -111,9 +112,9 @@ public class SyncTaskService {
|
|||
* @param data
|
||||
* @return
|
||||
*/
|
||||
public boolean recv(JSONObject data) {
|
||||
public Result recv(JSONObject data) {
|
||||
if(!isEnable()){
|
||||
return true;
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
long st = System.currentTimeMillis();
|
||||
|
|
@ -130,9 +131,10 @@ public class SyncTaskService {
|
|||
) {
|
||||
log.error("同步的数据是空的 %s", data.toJSONString());
|
||||
log.debug("recv 1 time: %s", System.currentTimeMillis() - st);
|
||||
return true;
|
||||
return Result.failedstr("同步的数据是空的 %s", data.toJSONString());
|
||||
}
|
||||
|
||||
final String[] err = {null};
|
||||
boolean ret = Db.tx(new IAtom() {
|
||||
@Override
|
||||
public boolean run() {
|
||||
|
|
@ -219,8 +221,10 @@ public class SyncTaskService {
|
|||
} catch (Exception e) {
|
||||
if (e.getMessage().contains("PRIMARY")) {
|
||||
log.error("主键冲突 %s", data.toJSONString());
|
||||
err[0] = String.format("主键冲突 %s", data.toJSONString());
|
||||
} else if (e.getMessage().contains("Duplicate entry")) {
|
||||
log.error("重复数据 %s", data.toJSONString());
|
||||
err[0] = String.format("重复数据 %s", data.toJSONString());
|
||||
} else {
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
|
|
@ -231,12 +235,12 @@ public class SyncTaskService {
|
|||
});
|
||||
|
||||
log.debug("recv 2 time: %s", System.currentTimeMillis() - st);
|
||||
return ret;
|
||||
return ret ? Result.success() : Result.failed(err[0]);
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
|
||||
log.debug("recv 3 time: %s", System.currentTimeMillis() - st);
|
||||
return false;
|
||||
return Result.failed(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ socketserver.port=21002
|
|||
socketio.port=12002
|
||||
|
||||
#当前部署本地程序的砂站id
|
||||
current.supermarket_id=6
|
||||
current.supermarket_id=1
|
||||
|
||||
#打印用到的配置信息
|
||||
print.vendor=浠水县长投环保有限公司
|
||||
|
|
|
|||
|
|
@ -199,6 +199,9 @@ public class NettyServer {
|
|||
}
|
||||
} else if (Enums.MsgTarget.SYNCRECV.name().equals(target)) {
|
||||
SyncTaskService.me.syncComplete(json.getString("id"));
|
||||
} else if (Enums.MsgTarget.SYNCFAIL.name().equals(target)) {
|
||||
log.debug("客户端[%s]同步数据[sync_task id:%s]发生错误", map.get(ctx.channel()), json.getString("id"));
|
||||
log.debug("客户端上传错误信息:%s", json.getString("msg"));
|
||||
} else {
|
||||
System.out.println(json);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -76,7 +76,13 @@ public class SmsService {
|
|||
obj.put("date", DateTimeUtil.sdfymd.get().format(ordercluster.getCutoffTime()));
|
||||
obj.put("weight", String.format("%.2f", ordercluster.getTotalWeight()));
|
||||
|
||||
String content = this.aliyunsms.generator(Const.SMS_TEMP_MAP.get(Const.TEMP_CODE_PEIE), obj);
|
||||
String content = null;
|
||||
try {
|
||||
content = this.aliyunsms.generator(Const.SMS_TEMP_MAP.get(Const.TEMP_CODE_PEIE), obj);
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return false;
|
||||
}
|
||||
|
||||
for (Sysuser sysuser : users) {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -57,21 +57,21 @@ log4j.appender.fileInfo.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss.SSS} %p
|
|||
# %t 输出产生该日志事件的线程名
|
||||
|
||||
|
||||
# nettyclient 日志
|
||||
# nettyserver 日志
|
||||
log4j.additivity.com.cowr.service.ssjygl.netty=false
|
||||
log4j.logger.com.cowr.service.ssjygl.netty=DEBUG, nettyclientFile, nettyclientConsole
|
||||
log4j.appender.nettyclientFile=org.apache.log4j.RollingFileAppender
|
||||
log4j.appender.nettyclientFile.encoding=UTF-8
|
||||
log4j.appender.nettyclientFile.Append=true
|
||||
log4j.appender.nettyclientFile.Threshold=DEBUG
|
||||
log4j.appender.nettyclientFile.File=../logs/ssjygl.xsx.nettyclient.log
|
||||
log4j.appender.nettyclientFile.MaxFileSize=10MB
|
||||
log4j.appender.nettyclientFile.MaxBackupIndex=1000
|
||||
log4j.appender.nettyclientFile.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.nettyclientFile.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss.SSS} %p %F %L - %M %m %X{traceId}%n
|
||||
log4j.logger.com.cowr.service.ssjygl.netty=DEBUG, nettyserverFile, nettyserverConsole
|
||||
log4j.appender.nettyserverFile=org.apache.log4j.RollingFileAppender
|
||||
log4j.appender.nettyserverFile.encoding=UTF-8
|
||||
log4j.appender.nettyserverFile.Append=true
|
||||
log4j.appender.nettyserverFile.Threshold=DEBUG
|
||||
log4j.appender.nettyserverFile.File=../logs/ssjygl.xsx.nettyserver.log
|
||||
log4j.appender.nettyserverFile.MaxFileSize=10MB
|
||||
log4j.appender.nettyserverFile.MaxBackupIndex=1000
|
||||
log4j.appender.nettyserverFile.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.nettyserverFile.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss.SSS} %p %F %L - %M %m %X{traceId}%n
|
||||
|
||||
log4j.appender.nettyclientConsole.Threshold=DEBUG
|
||||
log4j.appender.nettyclientConsole=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.nettyclientConsole.encoding=UTF-8
|
||||
log4j.appender.nettyclientConsole.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.nettyclientConsole.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[%p][%l]: %m%n
|
||||
log4j.appender.nettyserverConsole.Threshold=DEBUG
|
||||
log4j.appender.nettyserverConsole=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.nettyserverConsole.encoding=UTF-8
|
||||
log4j.appender.nettyserverConsole.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.nettyserverConsole.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[%p][%l]: %m%n
|
||||
Loading…
Reference in New Issue