|
@@ -10,6 +10,7 @@ import com.huimv.eartag2.common.dao.repo.EartagDataRepo;
|
|
|
import com.huimv.eartag2.common.dao.repo.EartagEnvRepo;
|
|
|
import com.huimv.eartag2.common.dao.repo.EartagHeartbeatRepo;
|
|
|
import com.huimv.eartag2.common.dao.repo.EartagRawRepo;
|
|
|
+import com.huimv.eartag2.common.mq.Const;
|
|
|
import com.huimv.eartag2.producer.Producer;
|
|
|
import com.huimv.eartag2.service.IDataService;
|
|
|
import com.huimv.eartag2.service.IDeviceService;
|
|
@@ -21,7 +22,6 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
|
-import org.springframework.data.redis.core.ValueOperations;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
@@ -69,7 +69,226 @@ public class DataServiceImpl implements IDataService {
|
|
|
|
|
|
//处理接收数据
|
|
|
@Override
|
|
|
- public String handleClientAsk(String askText, ChannelHandlerContext ctx) throws ParseException {
|
|
|
+ public String handleClientAsk(String askText) throws ParseException {
|
|
|
+// System.out.println("000拆分粘包之后数据>>"+askText);
|
|
|
+ //--对接收的上报数据解析
|
|
|
+ String answer = parseAskText2(askText);
|
|
|
+
|
|
|
+ //--将原始数据保存到rabbitMQ(重构之后代码)
|
|
|
+ producer.sendClientAsk2(askText);
|
|
|
+
|
|
|
+ return answer;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map parseDeviceAsk(String askText) throws ParseException {
|
|
|
+ Map resultMap = new HashMap();
|
|
|
+ log.info("#开始解析Ask请求数据>>" + askText.trim().replace("\n", ""));
|
|
|
+ String[] dataArray = askText.split("\\+");
|
|
|
+ String cmdHeader = dataArray[0];
|
|
|
+ String answer = null;
|
|
|
+ if (cmdHeader.trim().equalsIgnoreCase("hm")) {
|
|
|
+ //采集器原始数据
|
|
|
+ //芯片id/设备编码
|
|
|
+ String idCode = dataArray[1];
|
|
|
+ String cmd = dataArray[2];
|
|
|
+ //采集器应答数据
|
|
|
+ if (cmd.trim().equalsIgnoreCase("0")) {
|
|
|
+ //不需要处理
|
|
|
+// answer = null;
|
|
|
+ resultMap.put("clientType", "device");
|
|
|
+ resultMap.put("answerStatus", false);
|
|
|
+ resultMap.put("answerText", null);
|
|
|
+ resultMap.put("mqStatus", false);
|
|
|
+ resultMap.put("askText", askText);
|
|
|
+ return resultMap;
|
|
|
+ } else if (cmd.trim().equalsIgnoreCase("1")) {
|
|
|
+ //获取设备编码
|
|
|
+ //{读取设备编码}
|
|
|
+ String deviceCode = getDeviceCodeByChipId(idCode);
|
|
|
+ if (deviceCode == null) {
|
|
|
+ log.error("异常:该芯片ID[" + idCode + "]未获取到设备编码,该设备为非法未注册设备.");
|
|
|
+ resultMap.put("validStatus",false);
|
|
|
+ }else {
|
|
|
+ answer = "hm+1+0+" + deviceCode + "+123+8+end";
|
|
|
+ log.info("##获取设备编码-应答数据>>" + answer);
|
|
|
+// resultMap.put("chipId", idCode);
|
|
|
+// resultMap.put("deviceCode", deviceCode);
|
|
|
+ resultMap.put("validStatus",true);
|
|
|
+ resultMap.put("clientType", "device");
|
|
|
+ resultMap.put("answerStatus", true);
|
|
|
+ resultMap.put("answerText", answer);
|
|
|
+ resultMap.put("mqStatus", false);
|
|
|
+ resultMap.put("askText", askText);
|
|
|
+ }
|
|
|
+ return resultMap;
|
|
|
+ } else if (cmd.trim().equalsIgnoreCase("2")) {
|
|
|
+ //获取服务器时间命令
|
|
|
+// answer = "hm+2+0+"+dateUtil.getNowText()+"+4+end";
|
|
|
+ answer = "hm+2+" + dateUtil.getNowText() + "+4+end";
|
|
|
+ log.info("##获取服务器时间-应答数据>>" + answer);
|
|
|
+ resultMap.put("validStatus",true);
|
|
|
+ resultMap.put("clientType", "device");
|
|
|
+ resultMap.put("answerStatus", true);
|
|
|
+ resultMap.put("answerText", answer);
|
|
|
+ resultMap.put("mqStatus", false);
|
|
|
+ resultMap.put("askText", askText);
|
|
|
+ return resultMap;
|
|
|
+
|
|
|
+ } else if (cmd.trim().equalsIgnoreCase("3")) {
|
|
|
+ //心跳包命令
|
|
|
+// heartbeatMap = new HashMap();
|
|
|
+// answer = "hm+3+0+6+end";
|
|
|
+ answer = "hm+3+6+end";
|
|
|
+ log.info("##心跳包-应答数据>>" + answer);
|
|
|
+ resultMap.put("validStatus",true);
|
|
|
+ resultMap.put("clientType", "device");
|
|
|
+ resultMap.put("answerStatus", true);
|
|
|
+ resultMap.put("answerText", answer);
|
|
|
+ resultMap.put("mqStatus", true);
|
|
|
+ resultMap.put("askText", askText);
|
|
|
+ return resultMap;
|
|
|
+ } else if (cmd.trim().equalsIgnoreCase("4")) {
|
|
|
+ //环境温度-设备、数值、上传时间
|
|
|
+// answer = "hm+4+0+7+end";
|
|
|
+ answer = "hm+4+7+end";
|
|
|
+ log.info("##环境温度-应答数据>>" + answer);
|
|
|
+ resultMap.put("validStatus",true);
|
|
|
+ resultMap.put("clientType", "device");
|
|
|
+ resultMap.put("answerStatus", true);
|
|
|
+ resultMap.put("answerText", answer);
|
|
|
+ resultMap.put("mqStatus", true);
|
|
|
+ resultMap.put("askText", askText);
|
|
|
+ return resultMap;
|
|
|
+ } else {
|
|
|
+ log.error("##当前数据为非法数据>>" + askText);
|
|
|
+ resultMap.put("validStatus",false);
|
|
|
+ resultMap.put("clientType", "device");
|
|
|
+ resultMap.put("answerStatus", false);
|
|
|
+ resultMap.put("answerText", null);
|
|
|
+ resultMap.put("mqStatus", false);
|
|
|
+ return resultMap;
|
|
|
+ }
|
|
|
+// return answer;
|
|
|
+ } else if (cmdHeader.trim().equalsIgnoreCase("zj")) {
|
|
|
+ //耳标应答数据(不需要应答)
|
|
|
+ answer = null;
|
|
|
+ resultMap.put("validStatus",true);
|
|
|
+ resultMap.put("clientType", "eartag");
|
|
|
+ resultMap.put("answerStatus", false);
|
|
|
+ resultMap.put("answerText", null);
|
|
|
+ resultMap.put("mqStatus", true);
|
|
|
+ resultMap.put("askText", askText);
|
|
|
+ return resultMap;
|
|
|
+ } else {
|
|
|
+ log.error("##当前请求数据为非法数据>>" + askText);
|
|
|
+ resultMap.put("validStatus",false);
|
|
|
+ resultMap.put("clientType", "不清楚设备类型");
|
|
|
+ resultMap.put("answerStatus", false);
|
|
|
+ resultMap.put("answerText", null);
|
|
|
+ resultMap.put("mqStatus", false);
|
|
|
+ return resultMap;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean isValidDevice(String cmdHeader, String idCode, String cmd) {
|
|
|
+ if (cmdHeader.trim().equalsIgnoreCase("hm") && cmd.trim().equalsIgnoreCase("1")) {
|
|
|
+ //{读取设备编码}
|
|
|
+ String deviceCode = getDeviceCodeByChipId(idCode);
|
|
|
+ log.info("芯片id>>"+idCode+", 设备编码>>"+deviceCode);
|
|
|
+ if(deviceCode == null){
|
|
|
+ return false;
|
|
|
+ }else{
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String getDeviceAnswer(String cmdHeader, String cmd, String idCode) throws ParseException {
|
|
|
+ String answer = null;
|
|
|
+ if (cmdHeader.trim().equalsIgnoreCase("hm")) {
|
|
|
+ //采集器应答数据
|
|
|
+ if (cmd.trim().equalsIgnoreCase("0")) {
|
|
|
+ //获取目标服务器的通信地址和端口号(不需要处理)
|
|
|
+ answer = null;
|
|
|
+ } else if (cmd.trim().equalsIgnoreCase("1")) {
|
|
|
+ //{读取设备编码}
|
|
|
+ String deviceCode = getDeviceCodeByChipId(idCode);
|
|
|
+ answer = "hm+1+0+" + deviceCode + "+123+8+end";
|
|
|
+ log.info("##获取设备编码-应答数据>>" + answer);
|
|
|
+ } else if (cmd.trim().equalsIgnoreCase("2")) {
|
|
|
+ //获取服务器时间命令
|
|
|
+ answer = "hm+2+" + dateUtil.getNowText() + "+4+end";
|
|
|
+ log.info("##获取服务器时间-应答数据>>" + answer);
|
|
|
+ } else if (cmd.trim().equalsIgnoreCase("3")) {
|
|
|
+ //心跳包命令
|
|
|
+ answer = "hm+3+6+end";
|
|
|
+ log.info("##心跳包-应答数据>>" + answer);
|
|
|
+ } else if (cmd.trim().equalsIgnoreCase("4")) {
|
|
|
+ //环境温度-设备、数值、上传时间
|
|
|
+ answer = "hm+4+7+end";
|
|
|
+ log.info("##环境温度-应答数据>>" + answer);
|
|
|
+ } else {
|
|
|
+ log.error("##当前数据为非法数据>>");
|
|
|
+ }
|
|
|
+ return answer;
|
|
|
+ } else if (cmdHeader.trim().equalsIgnoreCase("zj")) {
|
|
|
+ //耳标应答数据(不需要应答)
|
|
|
+ return null;
|
|
|
+ } else {
|
|
|
+ log.error("##当前请求数据为非法数据>>");
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Method : sendBizMQ
|
|
|
+ * @Description : 注意:askText中第三位cmd对于耳标数据而言是耳标号,对于设备而言是命令。
|
|
|
+ * @Params : [cmdHeader, cmd, askText]
|
|
|
+ * @Return : void
|
|
|
+ *
|
|
|
+ * @Author : ZhuoNing
|
|
|
+ * @Date : 2022/3/23
|
|
|
+ * @Time : 17:20
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void sendBizMQ(String cmdHeader, String cmd, String askText) {
|
|
|
+ askText = askText.replaceAll("\r","").replaceAll("\n","");
|
|
|
+ Map map = new HashMap();
|
|
|
+ map.put("askText",askText);
|
|
|
+ System.out.println("-->3.1");
|
|
|
+ if (cmdHeader.trim().equalsIgnoreCase("hm") && (cmd.trim().equalsIgnoreCase("3") || cmd.trim().equalsIgnoreCase("4"))) {
|
|
|
+ System.out.println("-->3.2");
|
|
|
+ //发送到设备处理消息队列
|
|
|
+ rabbitTemplate.convertAndSend(Const.EXCHANGE_ASK_DEVICE, Const.ROUTING_KEY_ASK_DEVICE, map);
|
|
|
+ System.out.println("## --> 发送设备处理模块.");
|
|
|
+ } else if (cmdHeader.trim().equalsIgnoreCase("zj")) {
|
|
|
+ System.out.println("-->3.3");
|
|
|
+ //{发送消息}
|
|
|
+ if(cmd.trim().equalsIgnoreCase("ffffffffffffffff") || cmd.trim().equalsIgnoreCase("0000000000000000")){
|
|
|
+ log.error("舍弃掉未配置耳标号的耳标,"+askText+"");
|
|
|
+ }else{
|
|
|
+ System.out.println("-->3.4");
|
|
|
+ //发送到耳标处理消息队列
|
|
|
+ rabbitTemplate.convertAndSend(Const.EXCHANGE_ASK_EARTAG, Const.ROUTING_KEY_ASK_EARTAG, map);
|
|
|
+ System.out.println("## --> 发送耳标处理模块.");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ System.out.println("-->3.5");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void sendEartagMQ(Map map) {
|
|
|
+ //发送到耳标处理消息队列
|
|
|
+ rabbitTemplate.convertAndSend(Const.EXCHANGE_ASK_EARTAG, Const.ROUTING_KEY_ASK_EARTAG, map);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public String handleClientAsk_1(String askText) throws ParseException {
|
|
|
// System.out.println("000拆分粘包之后数据>>"+askText);
|
|
|
//--对接收的上报数据解析
|
|
|
String answer = parseAskText2(askText);
|
|
@@ -282,7 +501,8 @@ public class DataServiceImpl implements IDataService {
|
|
|
}
|
|
|
|
|
|
/* 根本设备id获取设备编码 */
|
|
|
- private String getDeviceCode(String chipId) {
|
|
|
+ @Override
|
|
|
+ public String getDeviceCodeByChipId(String chipId) {
|
|
|
// ValueOperations ops = redisTemplate.opsForValue();
|
|
|
// ops.set("deviceCode", "202007239999869");
|
|
|
// String deviceCode = (String) ops.get("deviceCode");
|
|
@@ -303,6 +523,12 @@ public class DataServiceImpl implements IDataService {
|
|
|
return deviceCode;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void sendDeviceMQ(Map map) {
|
|
|
+ //发送到耳标处理消息队列
|
|
|
+ rabbitTemplate.convertAndSend(Const.EXCHANGE_ASK_DEVICE, Const.ROUTING_KEY_ASK_DEVICE, map);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 解析接收数据
|
|
|
*/
|
|
@@ -322,8 +548,8 @@ public class DataServiceImpl implements IDataService {
|
|
|
answer = null;
|
|
|
} else if (cmd.trim().equalsIgnoreCase("1")) {
|
|
|
//获取设备编码
|
|
|
- /* 读取设备编码 */
|
|
|
- String deviceCode = getDeviceCode(idCode);
|
|
|
+ //{读取设备编码}
|
|
|
+ String deviceCode = getDeviceCodeByChipId(idCode);
|
|
|
answer = "hm+1+0+" + deviceCode + "+123+8+end";
|
|
|
log.info("##获取设备编码-应答数据>>" + answer);
|
|
|
} else if (cmd.trim().equalsIgnoreCase("2")) {
|
|
@@ -377,7 +603,7 @@ public class DataServiceImpl implements IDataService {
|
|
|
} else if (cmd.trim().equalsIgnoreCase("1")) {
|
|
|
//获取设备编码
|
|
|
/* 读取设备编码 */
|
|
|
- String deviceCode = getDeviceCode(device);
|
|
|
+ String deviceCode = getDeviceCodeByChipId(device);
|
|
|
answer = "hm+1+0+" + deviceCode + "+123+8+end";
|
|
|
log.info("##获取设备编码-应答数据>>" + answer);
|
|
|
} else if (cmd.trim().equalsIgnoreCase("2")) {
|
|
@@ -569,7 +795,7 @@ public class DataServiceImpl implements IDataService {
|
|
|
} else if (cmd.trim().equalsIgnoreCase("1")) {
|
|
|
//获取设备编码
|
|
|
/* 读取设备编码 */
|
|
|
- String deviceCode = getDeviceCode(device);
|
|
|
+ String deviceCode = getDeviceCodeByChipId(device);
|
|
|
answer = "hm+1+0+" + deviceCode + "+123+8+end";
|
|
|
log.info("##获取设备编码-应答数据>>" + answer);
|
|
|
} else if (cmd.trim().equalsIgnoreCase("2")) {
|