From 5775cd2c00bd3138a5c639a4d8aab91d287f9064 Mon Sep 17 00:00:00 2001 From: bsw215583320 <baoshiwei121@163.com> Date: 星期五, 08 十一月 2024 11:27:59 +0800 Subject: [PATCH] 云平台mqtt接收设备信息后处理逻辑 --- jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttSampleCallback.java | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 101 insertions(+), 9 deletions(-) diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttSampleCallback.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttSampleCallback.java index e1ccd32..b51e204 100644 --- a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttSampleCallback.java +++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttSampleCallback.java @@ -3,22 +3,32 @@ import cn.hutool.core.thread.ThreadUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; import org.eclipse.paho.client.mqttv3.MqttCallback; import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.jeecg.common.config.TenantContext; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.MqttConstant; import org.jeecg.common.util.DateUtils; import org.jeecg.common.util.RedisUtil; import org.jeecg.modules.base.service.BaseCommonService; import org.jeecg.modules.dry.api.EmqxApi; +import org.jeecg.modules.dry.entity.DryEqpType; +import org.jeecg.modules.dry.entity.DryEquipment; +import org.jeecg.modules.dry.entity.DryShop; +import org.jeecg.modules.dry.service.IDryEqpTypeService; +import org.jeecg.modules.dry.service.IDryEquipmentService; import org.jeecg.modules.dry.service.IDryRealTimeDataService; +import org.jeecg.modules.dry.service.IDryShopService; +import org.jeecg.modules.dry.vo.DryEquipmentVo; import org.jeecg.modules.dry.vo.RealTimeDataVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; +@Slf4j @Component @Scope("prototype") public class MqttSampleCallback implements MqttCallback { @@ -35,6 +45,18 @@ @Autowired private IDryRealTimeDataService realTimeDataService; + + + @Autowired + private IDryEquipmentService equipmentService; + + @Autowired + private IDryEqpTypeService eqpTypeService; + + @Autowired + private IDryShopService dryShopService; + + @Override @@ -80,9 +102,14 @@ } if (topic.startsWith("$SYS/brokers/") && topic.endsWith("disconnected")) { - String clientid = messageJson.getString("clientid"); - redisUtil.del(MqttConstant.MQTT_ONLINE_CLIENT + clientid); - System.err.println(String.format("璁惧: %s涓嬬嚎", clientid)); + try { + String clientid = messageJson.getString("clientid"); + redisUtil.del(MqttConstant.MQTT_ONLINE_CLIENT + clientid); + System.err.println(String.format("璁惧: %s涓嬬嚎", clientid)); + } catch (Exception e) { + e.printStackTrace(); + } + } parseAdminCommand(topic, mqttMessage); @@ -166,14 +193,43 @@ // 鎺ユ敹璁惧瀹炴椂鏁版嵁 case MqttConstant.TENANT_UP_PREFIX_REALTIME_DATA: - try { - RealTimeDataVo vo = JSON.parseObject(message, RealTimeDataVo.class); - realTimeDataService.realTimeDataHandle(vo); - } catch (Exception e) { - e.printStackTrace(); - } + ThreadUtil.execute(() -> { + try { + RealTimeDataVo vo = JSON.parseObject(message, RealTimeDataVo.class); + realTimeDataService.realTimeDataHandle(vo); + } catch (Exception e) { + e.printStackTrace(); + } + }); break; + case MqttConstant.TENANT_UP_PREFIX_EQU: + ThreadUtil.execute(() -> { + try { + Object equObj = messageJson.get("equipment"); + DryEquipment equipment = JSON.parseObject(equObj.toString(), DryEquipment.class); + TenantContext.setTenant(equipment.getTenantId()+""); + DryEquipment dryEquipment = equipmentService.selectByTenantIdEquipmentId(equipment.getTenantId() + "", equipment.getCode()); + if (dryEquipment == null) { + equipmentService.save(equipment); + } + Object typeObj = messageJson.get("eqpType"); + DryEqpType eqpType = JSON.parseObject(typeObj.toString(), DryEqpType.class); + DryEqpType dryEqpType = eqpTypeService.getById(eqpType.getId()); + if (dryEqpType == null) { + eqpTypeService.save(eqpType); + } + // 鑾峰彇璁惧鎵�灞炶溅闂� + Object shopObj = messageJson.get("shop"); + DryShop shop = JSON.parseObject(shopObj.toString(), DryShop.class); + DryShop dryShop = dryShopService.getById(shop.getId()); + if (dryShop == null) { + dryShopService.save(shop); + } + } catch (Exception e) { + e.printStackTrace(); + } + }); } @@ -218,6 +274,42 @@ break; + case MqttConstant.SERVICE_REQ_PREFIX: + log.debug("鏀跺埌璁惧璇︾粏淇℃伅鏌ヨ璇锋眰"); + ThreadUtil.execute(() -> { + String tenantId = messageJson.getString("tenantId"); + String clientId = mqttUtil.getMqttClient().getClientId(); + String tenant = clientId.substring(clientId.lastIndexOf("_")+1); + if (tenantId!=null && tenantId.equals(tenant)) { + // 鏍规嵁璁惧缂栫爜鏌ヨ璁惧淇℃伅 + String code = messageJson.getString("code"); + DryEquipment equipmentVo = equipmentService.selectByTenantIdEquipmentId(tenantId,code); + // 鏍规嵁璁惧杞﹂棿id鏌ヨ杞﹂棿淇℃伅 + DryShop shop = dryShopService.selectByTenantIdShopId(tenantId, equipmentVo.getShopId()); + // 鏍规嵁璁惧绫诲瀷ID鏌ヨ璁惧绫诲瀷淇℃伅 + DryEqpType eqpType = eqpTypeService.selectByTenantIdTypeId(tenantId, equipmentVo.getType()); + + JSONObject res = new JSONObject(); + + res.put("tenant", clientId); + res.put("equipment", equipmentVo); + res.put("shop", shop); + res.put("eqpType", eqpType); + try { + MqttMessage sendMessage = new MqttMessage(res.toJSONString().getBytes()); + sendMessage.setQos(0); + mqttUtil.getMqttClient().publish(MqttConstant.TENANT_UP_PREFIX_EQU, sendMessage); + // baseCommonService.addLog(res.toString(), CommonConstant.LOG_TYPE_MQTT, CommonConstant.OPERATE_MQTT_2); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + + + + break; + } } -- Gitblit v1.9.3