|
@@ -1,6 +1,13 @@
|
|
package com.huimv.env.input.server;
|
|
package com.huimv.env.input.server;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
|
+import com.huimv.env.input.c.MyNativeClass;
|
|
|
|
+import com.huimv.env.input.entity.*;
|
|
|
|
+import com.huimv.env.input.mapper.TerminalPortMapper;
|
|
|
|
+import com.huimv.env.input.service.*;
|
|
|
|
+import com.huimv.env.input.ws.WebsocketWorkerUtil;
|
|
import io.netty.buffer.ByteBuf;
|
|
import io.netty.buffer.ByteBuf;
|
|
import io.netty.buffer.Unpooled;
|
|
import io.netty.buffer.Unpooled;
|
|
|
|
|
|
@@ -9,12 +16,22 @@ import io.netty.channel.ChannelHandlerContext;
|
|
import io.netty.channel.ChannelInboundHandlerAdapter;
|
|
import io.netty.channel.ChannelInboundHandlerAdapter;
|
|
import io.netty.util.CharsetUtil;
|
|
import io.netty.util.CharsetUtil;
|
|
import lombok.extern.log4j.Log4j2;
|
|
import lombok.extern.log4j.Log4j2;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
+import org.springframework.util.ObjectUtils;
|
|
|
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
+import java.text.DecimalFormat;
|
|
import java.text.ParseException;
|
|
import java.text.ParseException;
|
|
|
|
+import java.util.Arrays;
|
|
|
|
+import java.util.Collections;
|
|
|
|
+import java.util.Date;
|
|
|
|
+import java.util.List;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
import java.util.regex.Pattern;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
+import java.util.stream.IntStream;
|
|
|
|
|
|
/**
|
|
/**
|
|
* @Project : huimv.shiwan
|
|
* @Project : huimv.shiwan
|
|
@@ -30,6 +47,29 @@ import java.util.regex.Pattern;
|
|
public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
|
|
public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
|
|
private StringBuilder askTextSb = null;
|
|
private StringBuilder askTextSb = null;
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ private IEnvDataService envDataService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private ITerminalPortService terminalPortService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private IBaseFarmService baseFarmService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private IBasePigpenService basePigpenService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private IPortWarningInfoService portWarningInfoService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private IPortChangeDataService portChangeDataService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private ITerminalService terminalService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private IHeartInfoService heartInfoService;
|
|
//
|
|
//
|
|
public void appendClientAsk(String text) {
|
|
public void appendClientAsk(String text) {
|
|
if (this.askTextSb == null) {
|
|
if (this.askTextSb == null) {
|
|
@@ -112,47 +152,577 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
|
|
log.info("当前命令是非hm命令[" + askText + "]");
|
|
log.info("当前命令是非hm命令[" + askText + "]");
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- //芯片id/设备编码
|
|
|
|
|
|
+ String version = dataArray[dataArray.length - 3];
|
|
|
|
+ if ("v2.0".equals(version)) {
|
|
|
|
+ askCmdActuatorV2(askText, ctx, dataArray);
|
|
|
|
+ } else {
|
|
|
|
+ askCmdActuatorV1(askText, ctx, dataArray);
|
|
|
|
+ log.info("当前版本异常[" + askText + "]");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ private void askCmdActuatorV2(String askText, ChannelHandlerContext ctx, String[] dataArray){
|
|
|
|
+ //芯片id/设备编码
|
|
String cmd = dataArray[1];
|
|
String cmd = dataArray[1];
|
|
-// Map map = new HashMap();
|
|
|
|
-// map.put("askText", askText);
|
|
|
|
-// rawDataService.insert(idCode,askText);
|
|
|
|
switch (cmd) {
|
|
switch (cmd) {
|
|
case "1":
|
|
case "1":
|
|
- //上传温度
|
|
|
|
- getTemp(dataArray,ctx);
|
|
|
|
|
|
+ //心跳
|
|
|
|
+ getHear(askText, dataArray, ctx,2);
|
|
break;
|
|
break;
|
|
case "2":
|
|
case "2":
|
|
- //上传充电状态
|
|
|
|
- getChargingStatus(dataArray,ctx);
|
|
|
|
|
|
+ //上传数据
|
|
|
|
+ getChuanGanData2(askText, dataArray, ctx);
|
|
|
|
+ break;
|
|
case "3":
|
|
case "3":
|
|
- //上传漏电状态
|
|
|
|
- getLeakageStatus(dataArray,ctx);
|
|
|
|
|
|
+ //充电前后功率
|
|
|
|
+ savePower2(askText, dataArray, ctx);
|
|
|
|
+ break;
|
|
case "4":
|
|
case "4":
|
|
- //心跳
|
|
|
|
- getHear(dataArray,ctx);
|
|
|
|
|
|
+ //充电中电流
|
|
|
|
+ saveElectric2(askText, dataArray, ctx);
|
|
|
|
+ break;
|
|
|
|
+ case "5":
|
|
|
|
+ //充电前电流
|
|
|
|
+ saveBeforeElectric2(askText, dataArray, ctx);
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ log.error(String.format("未知指令 --> %s", askText));
|
|
|
|
+ answerCmd("hm+4+1+end", ctx);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private synchronized void saveBeforeElectric2(String askText, String[] dataArray, ChannelHandlerContext ctx) {
|
|
|
|
+
|
|
|
|
+ String gateWayCode = dataArray[2];
|
|
|
|
+ String terminalCode = dataArray[3];
|
|
|
|
+ String terminalPortCode = "1";
|
|
|
|
+ String num = dataArray[4];
|
|
|
|
+ String eleData = dataArray[5];
|
|
|
|
+ Date now = new Date();
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ PortChangeData portChangeData = portChangeDataService.getOne(new QueryWrapper<PortChangeData>().eq("terminal_port_code", gateWayCode + terminalCode + terminalPortCode).eq("num", num));
|
|
|
|
+ if (ObjectUtils.isEmpty(portChangeData)) {
|
|
|
|
+ portChangeData = new PortChangeData();
|
|
|
|
+ portChangeData.setNum(Integer.parseInt(num));
|
|
|
|
+ portChangeData.setCreateTime(now);
|
|
|
|
+ portChangeData.setGatwayCode(gateWayCode);
|
|
|
|
+ portChangeData.setTerminalCode(gateWayCode+terminalCode);
|
|
|
|
+ portChangeData.setTerminalPortCode(gateWayCode+terminalCode+terminalPortCode);
|
|
|
|
+ portChangeData.setBeforeElectricCurrent(eleData);
|
|
|
|
+ portChangeDataService.save(portChangeData);
|
|
|
|
+ }else {
|
|
|
|
+ portChangeData.setBeforeElectricCurrent(eleData);
|
|
|
|
+ portChangeDataService.updateById(portChangeData);
|
|
|
|
+ if(changeDataIsAll(portChangeData)){
|
|
|
|
+ int i = getStatusEle(portChangeData);
|
|
|
|
+ TerminalPort deviceCode = terminalPortService.getOne(new QueryWrapper<TerminalPort>().eq("device_code", portChangeData.getTerminalPortCode()));
|
|
|
|
+ System.out.println("---->"+i);
|
|
|
|
+ if (i == 1){
|
|
|
|
+ deviceCode.setChargingWarning(1);
|
|
|
|
+ String ans = "hm+5+1+end";
|
|
|
|
+ answerCmd(ans,ctx);
|
|
|
|
+ saveChargingWarning(portChangeData,deviceCode);
|
|
|
|
+ }else {
|
|
|
|
+ String ans = "hm+5+0+end";
|
|
|
|
+ answerCmd(ans,ctx);
|
|
|
|
+ deviceCode.setChargingWarning(0);
|
|
|
|
+ }
|
|
|
|
+ terminalPortService.updateById(deviceCode);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ log.error(String.format("点位查询失败--> %s" ,askText));
|
|
|
|
+ log.error(e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- private void getHear(String[] dataArray, ChannelHandlerContext ctx) {
|
|
|
|
|
|
+ private synchronized void saveElectric2(String askText, String[] dataArray, ChannelHandlerContext ctx) {
|
|
String ans = "hm+4+1+end";
|
|
String ans = "hm+4+1+end";
|
|
answerCmd(ans,ctx);
|
|
answerCmd(ans,ctx);
|
|
|
|
+ String gateWayCode = dataArray[2];
|
|
|
|
+ String terminalCode = dataArray[3];
|
|
|
|
+ String terminalPortCode = "1";
|
|
|
|
+ String num = dataArray[4];
|
|
|
|
+ String eleData = dataArray[5];
|
|
|
|
+ Date now = new Date();
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ PortChangeData portChangeData = portChangeDataService.getOne(new QueryWrapper<PortChangeData>().eq("terminal_port_code", gateWayCode + terminalCode + terminalPortCode).eq("num", num));
|
|
|
|
+ if (ObjectUtils.isEmpty(portChangeData)) {
|
|
|
|
+ portChangeData = new PortChangeData();
|
|
|
|
+ portChangeData.setNum(Integer.parseInt(num));
|
|
|
|
+ portChangeData.setCreateTime(now);
|
|
|
|
+
|
|
|
|
+ portChangeData.setGatwayCode(gateWayCode);
|
|
|
|
+ portChangeData.setTerminalCode(gateWayCode+terminalCode);
|
|
|
|
+ portChangeData.setTerminalPortCode(gateWayCode+terminalCode+terminalPortCode);
|
|
|
|
+ portChangeData.setElectricCurrent(eleData);
|
|
|
|
+
|
|
|
|
+ portChangeDataService.save(portChangeData);
|
|
|
|
+ }else {
|
|
|
|
+ portChangeData.setElectricCurrent(eleData);
|
|
|
|
+ portChangeDataService.updateById(portChangeData);
|
|
|
|
+
|
|
|
|
+// if(changeDataIsAll(portChangeData)){
|
|
|
|
+// int i = getStatusEle(portChangeData);
|
|
|
|
+// TerminalPort deviceCode = terminalPortService.getOne(new QueryWrapper<TerminalPort>().eq("device_code", portChangeData.getTerminalPortCode()));
|
|
|
|
+// if (i == 1){
|
|
|
|
+// deviceCode.setChargingWarning(1);
|
|
|
|
+// saveChargingWarning(portChangeData,deviceCode);
|
|
|
|
+// }else {
|
|
|
|
+// deviceCode.setChargingWarning(0);
|
|
|
|
+// }
|
|
|
|
+// terminalPortService.updateById(deviceCode);
|
|
|
|
+// }
|
|
|
|
+ }
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ log.error(String.format("点位查询失败--> %s" ,askText));
|
|
|
|
+ log.error(e);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
- private void getLeakageStatus(String[] dataArray, ChannelHandlerContext ctx) {
|
|
|
|
|
|
+ private synchronized void savePower2(String askText, String[] dataArray, ChannelHandlerContext ctx) {
|
|
String ans = "hm+3+1+end";
|
|
String ans = "hm+3+1+end";
|
|
answerCmd(ans,ctx);
|
|
answerCmd(ans,ctx);
|
|
|
|
+ String gateWayCode = dataArray[2];
|
|
|
|
+ String terminalCode = dataArray[3];
|
|
|
|
+ String terminalPortCode = "1";
|
|
|
|
+ String num = dataArray[4];
|
|
|
|
+ int[] splitPower = Arrays.stream(dataArray[5].split(",")).mapToInt(Integer::parseInt).toArray();
|
|
|
|
+ int[] splitBeforePower = Arrays.stream(dataArray[6].split(",")).mapToInt(Integer::parseInt).toArray();
|
|
|
|
+ Date now = new Date();
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ PortChangeData portChangeData = portChangeDataService.getOne(new QueryWrapper<PortChangeData>().eq("terminal_port_code", gateWayCode + terminalCode + terminalPortCode).eq("num", num));
|
|
|
|
+ if (ObjectUtils.isEmpty(portChangeData)) {
|
|
|
|
+ portChangeData = new PortChangeData(gateWayCode + terminalCode + terminalPortCode,gateWayCode + terminalCode ,gateWayCode,
|
|
|
|
+ splitPower[0],splitPower[1],splitPower[2],
|
|
|
|
+ splitBeforePower[0],splitBeforePower[1],splitBeforePower[2],
|
|
|
|
+ now,Integer.parseInt(num));
|
|
|
|
+ portChangeDataService.save(portChangeData);
|
|
|
|
+ }else {
|
|
|
|
+ portChangeData.setActivePower( splitPower[0]);
|
|
|
|
+ portChangeData.setReactivePower( splitPower[1]);
|
|
|
|
+ portChangeData.setApparentPower( splitPower[2]);
|
|
|
|
+ portChangeData.setBeforeActivePower(splitBeforePower[0]);
|
|
|
|
+ portChangeData.setBeforeReactivePower(splitBeforePower[1]);
|
|
|
|
+ portChangeData.setBeforeApparentPower(splitBeforePower[2]);
|
|
|
|
+ portChangeDataService.updateById(portChangeData);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ log.error(String.format("点位查询失败--> %s" ,askText));
|
|
|
|
+ log.error(e);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
- private void getChargingStatus(String[] dataArray, ChannelHandlerContext ctx) {
|
|
|
|
|
|
+ private int getStatusEle(PortChangeData portChangeData) {
|
|
|
|
+ // 前有功功率 前无功功率 前视在功率 + 前 128个电流值
|
|
|
|
+ int[] lastEleData = Arrays.stream(portChangeData.getBeforeElectricCurrent().split(",")).mapToInt(Integer::parseInt).toArray();
|
|
|
|
+ int[] lastGlData = new int[]{portChangeData.getBeforeActivePower(),portChangeData.getBeforeReactivePower(),portChangeData.getBeforeApparentPower()};
|
|
|
|
+
|
|
|
|
+ // 有功功率 无功功率 视在功率 + 128个电流值
|
|
|
|
+ int[] curretEleData =Arrays.stream(portChangeData.getElectricCurrent().split(",")).mapToInt(Integer::parseInt).toArray();
|
|
|
|
+ int[] curretGlData = new int[]{portChangeData.getActivePower(),portChangeData.getReactivePower(),portChangeData.getApparentPower()};
|
|
|
|
+ int[] ints = IntStream.concat( Arrays.stream(lastGlData),Arrays.stream(lastEleData)).toArray();
|
|
|
|
+ int[] ints1 = IntStream.concat(Arrays.stream(curretGlData) ,Arrays.stream(curretEleData)).toArray();
|
|
|
|
+
|
|
|
|
+ System.out.println("last");
|
|
|
|
+ for (int i : ints) {
|
|
|
|
+ System.out.print(i+",");
|
|
|
|
+ }
|
|
|
|
+ System.out.println();
|
|
|
|
+ System.out.println("curretData");
|
|
|
|
+ for (int i : ints1) {
|
|
|
|
+ System.out.print(i+",");
|
|
|
|
+ }
|
|
|
|
+ System.out.println();
|
|
|
|
+ return MyNativeClass.LibraryshowChar.LIBRARY_CHAR.current_detection(ints,ints1 );
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void saveChargingWarning(PortChangeData portChangeData ,TerminalPort deviceCode) {
|
|
|
|
+
|
|
|
|
+ BasePigpen basePigpen = basePigpenService.getById(deviceCode.getLocationId());
|
|
|
|
+
|
|
|
|
+ PortWarningInfo portWarningInfo = new PortWarningInfo();
|
|
|
|
+ portWarningInfo.setGatwayCode(portChangeData.getGatwayCode());
|
|
|
|
+
|
|
|
|
+ portWarningInfo.setTerminalCode(portChangeData.getTerminalCode());
|
|
|
|
+ portWarningInfo.setTerminalPortCode(portChangeData.getTerminalPortCode());
|
|
|
|
+ portWarningInfo.setLocationId(deviceCode.getLocationId());
|
|
|
|
+ portWarningInfo.setFarmId(deviceCode.getFarmId());
|
|
|
|
+ portWarningInfo.setWarningType(2);
|
|
|
|
+ portWarningInfo.setCreateTime(new Date());
|
|
|
|
+ portWarningInfo.setContent(String.format("%s 充电预警",basePigpen.getBuildName()));
|
|
|
|
+ portWarningInfo.setWarningType(2);
|
|
|
|
+ portWarningInfoService.save(portWarningInfo);
|
|
|
|
+ WebsocketWorkerUtil.sendWarningMessage(deviceCode.getFarmId(),String.format("%s 充电预警",basePigpen.getBuildName()));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private boolean changeDataIsAll(PortChangeData portChangeData) {
|
|
|
|
+ return portChangeData.getActivePower() != null &&
|
|
|
|
+ portChangeData.getBeforeActivePower() != null &&
|
|
|
|
+ portChangeData.getReactivePower() != null &&
|
|
|
|
+ portChangeData.getBeforeReactivePower() != null &&
|
|
|
|
+ portChangeData.getApparentPower() != null &&
|
|
|
|
+ portChangeData.getBeforeApparentPower() != null &&
|
|
|
|
+ portChangeData.getElectricCurrent() != null &&
|
|
|
|
+ portChangeData.getBeforeElectricCurrent() != null ;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void getChuanGanData2(String askText, String[] dataArray, ChannelHandlerContext ctx) {
|
|
String ans = "hm+2+1+end";
|
|
String ans = "hm+2+1+end";
|
|
answerCmd(ans,ctx);
|
|
answerCmd(ans,ctx);
|
|
|
|
+ //hm+2+867699060007086+1+2222+7+260+0+104,17,159+0,0+v2.0+24+end
|
|
|
|
+ String gateWayCode = dataArray[2];
|
|
|
|
+ String terminalCode = dataArray[3];
|
|
|
|
+ String terminalPortCode = "1";
|
|
|
|
+ String voltage = getNum(dataArray[4]);
|
|
|
|
+ String electriCurrent = getNum(dataArray[5]);
|
|
|
|
+ String temp = getNum(dataArray[6]);
|
|
|
|
+ String leakageValue = getNum(dataArray[7]);
|
|
|
|
+ Date now = new Date();
|
|
|
|
+ int[] splitPower = Arrays.stream(dataArray[8].split(",")).mapToInt(Integer::parseInt).toArray();
|
|
|
|
+ int[] splitStatus =Arrays.stream(dataArray[9].split(",")).mapToInt(Integer::parseInt).toArray();
|
|
|
|
+ EnvData envData = new EnvData(gateWayCode+terminalCode+terminalPortCode,gateWayCode+terminalCode,gateWayCode,
|
|
|
|
+ voltage,electriCurrent,temp, leakageValue,
|
|
|
|
+ splitPower[0],splitPower[1],splitPower[2],
|
|
|
|
+ splitStatus[0],0,splitStatus[1],
|
|
|
|
+ askText,now);
|
|
|
|
+ envDataService.save(envData);
|
|
|
|
+ //更新状态
|
|
|
|
+// try {
|
|
|
|
+ TerminalPort deviceCode = terminalPortService.getOne(new QueryWrapper<TerminalPort>().eq("device_code", gateWayCode + terminalCode + terminalPortCode));
|
|
|
|
+ if (ObjectUtils.isEmpty(deviceCode)){
|
|
|
|
+ log.info(String.format("无端口设备--> %s" ,askText));
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ deviceCode.setVoltage(voltage);
|
|
|
|
+ deviceCode.setElectricCurrent(electriCurrent);
|
|
|
|
+ deviceCode.setTemp(temp);
|
|
|
|
+ deviceCode.setLeakageValue(leakageValue);
|
|
|
|
+ deviceCode.setActivePower( splitPower[0]);
|
|
|
|
+ deviceCode.setReactivePower(splitPower[1]);
|
|
|
|
+ deviceCode.setApparentPower(splitPower[2]);
|
|
|
|
+ deviceCode.setHeightTempWarning( splitStatus[0]);
|
|
|
|
+ deviceCode.setChargingWarning( 0);
|
|
|
|
+ deviceCode.setLeakageWarning( splitStatus[1]);
|
|
|
|
+ deviceCode.setUpdateTime(now);
|
|
|
|
+ deviceCode.setStatus(1);
|
|
|
|
+ terminalPortService.updateById(deviceCode);
|
|
|
|
+ //添加报警
|
|
|
|
+ saveWarning2(gateWayCode,terminalCode,terminalPortCode,deviceCode,splitStatus,now);
|
|
|
|
+ }
|
|
|
|
+ private void saveWarning2(String gateWayCode,String terminaCode,String terminalPortCode ,TerminalPort terminalPort,int[] splitStatus,Date now) {
|
|
|
|
+ if (splitStatus[0] == 0 && splitStatus[1] == 0 )
|
|
|
|
+ return;
|
|
|
|
+ Integer farmId = terminalPort.getFarmId();
|
|
|
|
+ Integer locationId = terminalPort.getLocationId();
|
|
|
|
+
|
|
|
|
+ BasePigpen basePigpen = basePigpenService.getById(locationId);
|
|
|
|
+
|
|
|
|
+ if (ObjectUtils.isEmpty(basePigpen)){
|
|
|
|
+ log.info(String.format("无栋舍数据--> %s" ,terminalPort.toString()));
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ PortWarningInfo portWarningInfo = new PortWarningInfo();
|
|
|
|
+ portWarningInfo.setGatwayCode(gateWayCode);
|
|
|
|
+ portWarningInfo.setTerminalCode(gateWayCode+terminaCode);
|
|
|
|
+ portWarningInfo.setTerminalPortCode(gateWayCode+ terminaCode +terminalPortCode);
|
|
|
|
+ portWarningInfo.setLocationId(locationId);
|
|
|
|
+ portWarningInfo.setFarmId(farmId);
|
|
|
|
+ portWarningInfo.setWarningType(farmId);
|
|
|
|
+ portWarningInfo.setCreateTime(now);
|
|
|
|
+ if (splitStatus[0] == 1){
|
|
|
|
+ portWarningInfo.setContent(String.format("%s 高温预警",basePigpen.getBuildName()));
|
|
|
|
+ portWarningInfo.setWarningType(1);
|
|
|
|
+ portWarningInfoService.save(portWarningInfo);
|
|
|
|
+ WebsocketWorkerUtil.sendWarningMessage(farmId,String.format("%s 高温预警",basePigpen.getBuildName()));
|
|
|
|
+ }
|
|
|
|
+ if (splitStatus[1] == 1){
|
|
|
|
+ portWarningInfo.setContent(String.format("%s 漏电预警",basePigpen.getBuildName()));
|
|
|
|
+ portWarningInfo.setWarningType(3);
|
|
|
|
+ portWarningInfoService.save(portWarningInfo);
|
|
|
|
+ WebsocketWorkerUtil.sendWarningMessage(farmId,String.format("%s 漏电预警",basePigpen.getBuildName()));
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
- private void getTemp(String[] dataArray, ChannelHandlerContext ctx) {
|
|
|
|
|
|
+ private void askCmdActuatorV1(String askText, ChannelHandlerContext ctx, String[] dataArray){
|
|
|
|
+ //芯片id/设备编码
|
|
|
|
+ String cmd = dataArray[1];
|
|
|
|
+ switch (cmd) {
|
|
|
|
+ case "1":
|
|
|
|
+ //心跳
|
|
|
|
+ getHear(askText, dataArray, ctx,1);
|
|
|
|
+ break;
|
|
|
|
+ case "2":
|
|
|
|
+ //上传数据
|
|
|
|
+ getChuanGanData(askText, dataArray, ctx);
|
|
|
|
+ break;
|
|
|
|
+ case "3":
|
|
|
|
+ //充电前后功率
|
|
|
|
+ savePower(askText, dataArray, ctx);
|
|
|
|
+ break;
|
|
|
|
+ case "4":
|
|
|
|
+ //充电中电流
|
|
|
|
+ saveElectric(askText, dataArray, ctx);
|
|
|
|
+ break;
|
|
|
|
+ case "5":
|
|
|
|
+ //充电前电流
|
|
|
|
+ saveBeforeElectric(askText, dataArray, ctx);
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ log.error(String.format("未知指令 --> %s", askText));
|
|
|
|
+ answerCmd("hm+4+1+end", ctx);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private synchronized void saveBeforeElectric(String askText, String[] dataArray, ChannelHandlerContext ctx) {
|
|
|
|
+ String ans = "hm+5+1+end";
|
|
|
|
+ answerCmd(ans,ctx);
|
|
|
|
+ String gateWayCode = dataArray[2];
|
|
|
|
+ String terminalCode = dataArray[3];
|
|
|
|
+ String terminalPortCode = dataArray[4];
|
|
|
|
+ String num = dataArray[5];
|
|
|
|
+ String eleData = dataArray[6];
|
|
|
|
+ Date now = new Date();
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ PortChangeData portChangeData = portChangeDataService.getOne(new QueryWrapper<PortChangeData>().eq("terminal_port_code", gateWayCode + terminalCode + terminalPortCode).eq("num", num));
|
|
|
|
+ if (ObjectUtils.isEmpty(portChangeData)) {
|
|
|
|
+ portChangeData = new PortChangeData();
|
|
|
|
+ portChangeData.setNum(Integer.parseInt(num));
|
|
|
|
+ portChangeData.setCreateTime(now);
|
|
|
|
+ portChangeData.setGatwayCode(gateWayCode);
|
|
|
|
+ portChangeData.setTerminalCode(gateWayCode+terminalCode);
|
|
|
|
+ portChangeData.setTerminalPortCode(gateWayCode+terminalCode+terminalPortCode);
|
|
|
|
+ portChangeData.setBeforeElectricCurrent(eleData);
|
|
|
|
+ portChangeDataService.save(portChangeData);
|
|
|
|
+ }else {
|
|
|
|
+ portChangeData.setBeforeElectricCurrent(eleData);
|
|
|
|
+ portChangeDataService.updateById(portChangeData);
|
|
|
|
+ }
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ log.error(String.format("点位查询失败--> %s" ,askText));
|
|
|
|
+ log.error(e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private synchronized void saveElectric(String askText, String[] dataArray, ChannelHandlerContext ctx) {
|
|
|
|
+ String ans = "hm+4+1+end";
|
|
|
|
+ answerCmd(ans,ctx);
|
|
|
|
+ String gateWayCode = dataArray[2];
|
|
|
|
+ String terminalCode = dataArray[3];
|
|
|
|
+ String terminalPortCode = dataArray[4];
|
|
|
|
+ String num = dataArray[5];
|
|
|
|
+ String eleData = dataArray[6];
|
|
|
|
+ Date now = new Date();
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ PortChangeData portChangeData = portChangeDataService.getOne(new QueryWrapper<PortChangeData>().eq("terminal_port_code", gateWayCode + terminalCode + terminalPortCode).eq("num", num));
|
|
|
|
+ if (ObjectUtils.isEmpty(portChangeData)) {
|
|
|
|
+ portChangeData = new PortChangeData();
|
|
|
|
+ portChangeData.setNum(Integer.parseInt(num));
|
|
|
|
+ portChangeData.setCreateTime(now);
|
|
|
|
+
|
|
|
|
+ portChangeData.setGatwayCode(gateWayCode);
|
|
|
|
+ portChangeData.setTerminalCode(gateWayCode+terminalCode);
|
|
|
|
+ portChangeData.setTerminalPortCode(gateWayCode+terminalCode+terminalPortCode);
|
|
|
|
+ portChangeData.setElectricCurrent(eleData);
|
|
|
|
+
|
|
|
|
+ portChangeDataService.save(portChangeData);
|
|
|
|
+ }else {
|
|
|
|
+ portChangeData.setElectricCurrent(eleData);
|
|
|
|
+ portChangeDataService.updateById(portChangeData);
|
|
|
|
+ }
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ log.error(String.format("点位查询失败--> %s" ,askText));
|
|
|
|
+ log.error(e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public String reverseWithComma(String input) {
|
|
|
|
+ String[] parts = input.split(",");
|
|
|
|
+ List<String> partList = Arrays.asList(parts);
|
|
|
|
+ Collections.reverse(partList);
|
|
|
|
+ StringBuilder reversedBuilder = new StringBuilder();
|
|
|
|
+ for (int i = 0; i < partList.size(); i++) {
|
|
|
|
+ reversedBuilder.append(partList.get(i));
|
|
|
|
+ if (i < partList.size() - 1) {
|
|
|
|
+ reversedBuilder.append(",");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return reversedBuilder.toString();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private synchronized void savePower(String askText, String[] dataArray, ChannelHandlerContext ctx) {
|
|
|
|
+ String ans = "hm+3+1+end";
|
|
|
|
+ answerCmd(ans,ctx);
|
|
|
|
+ String gateWayCode = dataArray[2];
|
|
|
|
+ String terminalCode = dataArray[3];
|
|
|
|
+ String terminalPortCode = dataArray[4];
|
|
|
|
+ String num = dataArray[5];
|
|
|
|
+ int[] splitPower = Arrays.stream(dataArray[6].split(",")).mapToInt(Integer::parseInt).toArray();
|
|
|
|
+ int[] splitBeforePower = Arrays.stream(dataArray[7].split(",")).mapToInt(Integer::parseInt).toArray();
|
|
|
|
+ Date now = new Date();
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ PortChangeData portChangeData = portChangeDataService.getOne(new QueryWrapper<PortChangeData>().eq("terminal_port_code", gateWayCode + terminalCode + terminalPortCode).eq("num", num));
|
|
|
|
+ if (ObjectUtils.isEmpty(portChangeData)) {
|
|
|
|
+ portChangeData = new PortChangeData(gateWayCode + terminalCode + terminalPortCode,gateWayCode + terminalCode ,gateWayCode,
|
|
|
|
+ splitPower[0],splitPower[1],splitPower[2],
|
|
|
|
+ splitBeforePower[0],splitBeforePower[1],splitBeforePower[2],
|
|
|
|
+ now,Integer.parseInt(num));
|
|
|
|
+ portChangeDataService.save(portChangeData);
|
|
|
|
+ }else {
|
|
|
|
+ portChangeData.setActivePower( splitPower[0]);
|
|
|
|
+ portChangeData.setReactivePower( splitPower[1]);
|
|
|
|
+ portChangeData.setApparentPower( splitPower[2]);
|
|
|
|
+ portChangeData.setBeforeActivePower(splitBeforePower[0]);
|
|
|
|
+ portChangeData.setBeforeReactivePower(splitBeforePower[1]);
|
|
|
|
+ portChangeData.setBeforeApparentPower(splitBeforePower[2]);
|
|
|
|
+ portChangeDataService.updateById(portChangeData);
|
|
|
|
+ }
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ log.error(String.format("点位查询失败--> %s" ,askText));
|
|
|
|
+ log.error(e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ private void getHear(String askText,String[] dataArray, ChannelHandlerContext ctx,int version) {
|
|
|
|
+ /**
|
|
|
|
+ * 接口中只需要定义你要用到的函数或者公共变量,不需要的可以不定义
|
|
|
|
+ * 映射libadd.so里面的函数,注意类型要匹配
|
|
|
|
+ */
|
|
|
|
+
|
|
String ans = "hm+1+1+end";
|
|
String ans = "hm+1+1+end";
|
|
answerCmd(ans,ctx);
|
|
answerCmd(ans,ctx);
|
|
|
|
+ String gateWayCode = dataArray[2];
|
|
|
|
+ String terminalCode = dataArray[3];
|
|
|
|
+ TerminalPort terminalPort = new TerminalPort();
|
|
|
|
+ terminalPort.setStatus(1);
|
|
|
|
+ terminalPortService.update(terminalPort,new UpdateWrapper<TerminalPort>().like("device_code",gateWayCode + terminalCode));
|
|
|
|
+ Terminal terminal = new Terminal();
|
|
|
|
+ terminal.setStatus(1);
|
|
|
|
+ terminalService.update(terminal,new UpdateWrapper<Terminal>().eq("device_code",gateWayCode + terminalCode));
|
|
|
|
+ switch ( version){
|
|
|
|
+ case 1:
|
|
|
|
+ HeartInfo heartInfo1 = new HeartInfo(new Date(), gateWayCode + terminalCode, gateWayCode, askText);
|
|
|
|
+ heartInfoService.save(heartInfo1);
|
|
|
|
+ break;
|
|
|
|
+ case 2:
|
|
|
|
+ HeartInfo heartInfo2 = new HeartInfo(new Date(), gateWayCode + "1", gateWayCode, askText);
|
|
|
|
+ heartInfoService.save(heartInfo2);
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ log.info("未知版本");
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ private void getChuanGanData(String askText,String[] dataArray, ChannelHandlerContext ctx) {
|
|
|
|
+ String ans = "hm+2+1+end";
|
|
|
|
+ answerCmd(ans,ctx);
|
|
|
|
+ //hm+1+867699060007086+1+1+242+3+2494+9+0+0+31+0+0+0+V1.0+0+end
|
|
|
|
+ String gateWayCode = dataArray[2];
|
|
|
|
+ String terminalCode = dataArray[3];
|
|
|
|
+ String terminalPortCode = dataArray[4];
|
|
|
|
+ String voltage = getNum(dataArray[5]);
|
|
|
|
+ String electriCurrent = getNum(dataArray[6]);
|
|
|
|
+ String temp = getNum(dataArray[7]);
|
|
|
|
+ String leakageValue = getNum(dataArray[8]);
|
|
|
|
+ Date now = new Date();
|
|
|
|
+ int[] splitPower = Arrays.stream(dataArray[9].split(",")).mapToInt(Integer::parseInt).toArray();
|
|
|
|
+ int[] splitStatus =Arrays.stream(dataArray[10].split(",")).mapToInt(Integer::parseInt).toArray();
|
|
|
|
+ EnvData envData = new EnvData(gateWayCode+terminalCode+terminalPortCode,gateWayCode+terminalCode,gateWayCode,
|
|
|
|
+ voltage,electriCurrent,temp, leakageValue,
|
|
|
|
+ splitPower[0],splitPower[1],splitPower[2],
|
|
|
|
+ splitStatus[0],splitStatus[1],splitStatus[2],
|
|
|
|
+ askText,now);
|
|
|
|
+ envDataService.save(envData);
|
|
|
|
+ //更新状态
|
|
|
|
+// try {
|
|
|
|
+ TerminalPort deviceCode = terminalPortService.getOne(new QueryWrapper<TerminalPort>().eq("device_code", gateWayCode + terminalCode + terminalPortCode));
|
|
|
|
+ if (ObjectUtils.isEmpty(deviceCode)){
|
|
|
|
+ log.info(String.format("无端口设备--> %s" ,askText));
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ deviceCode.setVoltage(voltage);
|
|
|
|
+ deviceCode.setElectricCurrent(electriCurrent);
|
|
|
|
+ deviceCode.setTemp(temp);
|
|
|
|
+ deviceCode.setLeakageValue(leakageValue);
|
|
|
|
+ deviceCode.setActivePower( splitPower[0]);
|
|
|
|
+ deviceCode.setReactivePower(splitPower[1]);
|
|
|
|
+ deviceCode.setApparentPower(splitPower[2]);
|
|
|
|
+ deviceCode.setHeightTempWarning( splitStatus[0]);
|
|
|
|
+ deviceCode.setChargingWarning( splitStatus[1]);
|
|
|
|
+ deviceCode.setLeakageWarning( splitStatus[2]);
|
|
|
|
+ deviceCode.setUpdateTime(now);
|
|
|
|
+ deviceCode.setStatus(1);
|
|
|
|
+ terminalPortService.updateById(deviceCode);
|
|
|
|
+ //添加报警
|
|
|
|
+ saveWarning(gateWayCode,terminalCode,terminalPortCode,deviceCode,splitStatus,now);
|
|
|
|
+// }catch (Exception e){
|
|
|
|
+// log.error(String.format("端口设备查询失败--> %s" ,askText));
|
|
|
|
+// log.error(e);
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void saveWarning(String gateWayCode,String terminaCode,String terminalPortCode ,TerminalPort terminalPort,int[] splitStatus,Date now) {
|
|
|
|
+ if (splitStatus[0] == 0 && splitStatus[1] == 0 &&splitStatus[2] == 0 )
|
|
|
|
+ return;
|
|
|
|
+ Integer farmId = terminalPort.getFarmId();
|
|
|
|
+ Integer locationId = terminalPort.getLocationId();
|
|
|
|
+ BaseFarm baseFarm = baseFarmService.getById(farmId);
|
|
|
|
+ BasePigpen basePigpen = basePigpenService.getById(locationId);
|
|
|
|
+ if (ObjectUtils.isEmpty(baseFarm)){
|
|
|
|
+ log.info(String.format("无小区数据--> %s" ,terminalPort.toString()));
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if (ObjectUtils.isEmpty(basePigpen)){
|
|
|
|
+ log.info(String.format("无栋舍数据--> %s" ,terminalPort.toString()));
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ PortWarningInfo portWarningInfo = new PortWarningInfo();
|
|
|
|
+ portWarningInfo.setGatwayCode(gateWayCode);
|
|
|
|
+
|
|
|
|
+ portWarningInfo.setTerminalCode(gateWayCode+terminaCode);
|
|
|
|
+ portWarningInfo.setTerminalPortCode(gateWayCode+ terminaCode +terminalPortCode);
|
|
|
|
+ portWarningInfo.setLocationId(locationId);
|
|
|
|
+ portWarningInfo.setFarmId(farmId);
|
|
|
|
+ portWarningInfo.setWarningType(1);
|
|
|
|
+ portWarningInfo.setCreateTime(now);
|
|
|
|
+ if (splitStatus[0] == 1){
|
|
|
|
+
|
|
|
|
+ portWarningInfo.setContent(String.format("%s 高温预警",basePigpen.getBuildName()));
|
|
|
|
+ portWarningInfo.setWarningType(1);
|
|
|
|
+ portWarningInfoService.save(portWarningInfo);
|
|
|
|
+ WebsocketWorkerUtil.sendWarningMessage(farmId,String.format("%s 高温预警",basePigpen.getBuildName()));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (splitStatus[1] == 1){
|
|
|
|
+ portWarningInfo.setContent(String.format("%s 充电预警",basePigpen.getBuildName()));
|
|
|
|
+ portWarningInfo.setWarningType(2);
|
|
|
|
+ portWarningInfoService.save(portWarningInfo);
|
|
|
|
+ WebsocketWorkerUtil.sendWarningMessage(farmId,String.format("%s 充电预警",basePigpen.getBuildName()));
|
|
|
|
+ }
|
|
|
|
+ if (splitStatus[2] == 1){
|
|
|
|
+ portWarningInfo.setContent(String.format("%s 漏电预警",basePigpen.getBuildName()));
|
|
|
|
+ portWarningInfo.setWarningType(3);
|
|
|
|
+ portWarningInfoService.save(portWarningInfo);
|
|
|
|
+ WebsocketWorkerUtil.sendWarningMessage(farmId,String.format("%s 漏电预警",basePigpen.getBuildName()));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private String getNum(String num){
|
|
|
|
+ return String.format("%.1f", Double.parseDouble(num) / 10.0);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|