| | |
| | | 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 { |
| | |
| | | |
| | | @Autowired |
| | | private IDryRealTimeDataService realTimeDataService; |
| | | |
| | | |
| | | @Autowired |
| | | private IDryEquipmentService equipmentService; |
| | | |
| | | @Autowired |
| | | private IDryEqpTypeService eqpTypeService; |
| | | |
| | | @Autowired |
| | | private IDryShopService dryShopService; |
| | | |
| | | |
| | | |
| | | |
| | | @Override |
| | |
| | | |
| | | } |
| | | 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); |
| | | |
| | |
| | | |
| | | // 接收设备实时数据 |
| | | 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 { |
| | | DryEquipment equipment = (DryEquipment) messageJson.get("equipment"); |
| | | |
| | | DryEquipment dryEquipment = equipmentService.selectByTenantIdEquipmentId(equipment.getTenantId() + "", equipment.getCode()); |
| | | if (dryEquipment == null) { |
| | | equipmentService.save(equipment); |
| | | } |
| | | |
| | | // 获取设备所属车间 |
| | | DryShop shop = (DryShop) messageJson.get("shop"); |
| | | shop.setTenantId(equipment.getTenantId()); |
| | | dryShopService.save(shop); |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | |
| | | |
| | | |
| | | 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.getById(equipmentVo.getShopId()); |
| | | // 根据设备类型ID查询设备类型信息 |
| | | DryEqpType eqpType = eqpTypeService.getById(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; |
| | | |
| | | } |
| | | |
| | | } |