| | |
| | | |
| | | import cn.hutool.core.thread.ThreadUtil; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.alibaba.fastjson.TypeReference; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; |
| | | import org.eclipse.paho.client.mqttv3.MqttCallback; |
| | |
| | | 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.DryFaultRecord; |
| | | 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.service.*; |
| | | 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; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Slf4j |
| | | @Component |
| | |
| | | @Autowired |
| | | private IDryShopService dryShopService; |
| | | |
| | | @Autowired |
| | | private IDryFaultRecordService faultRecordService; |
| | | |
| | | |
| | | |
| | | |
| | | @Override |
| | | public void connectionLost(Throwable throwable) { |
| | | System.err.println("连接断开::掉线"); |
| | | System.err.println("连接断开::"+throwable.toString()); |
| | | } |
| | | |
| | | @Override |
| | | public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception { |
| | | public void messageArrived(String topic, MqttMessage mqttMessage) { |
| | | System.out.println("收到消息: \n topic:" + topic + "\n Qos:" + mqttMessage.getQos() + "\n payload:" |
| | | + new String(mqttMessage.getPayload())); |
| | | |
| | |
| | | item.put("clientid", clientid); |
| | | //是否连接 |
| | | item.put("connected", true); |
| | | // |
| | | String[] info = clientid.split("-"); |
| | | item.put("type", info[0]); |
| | | item.put("tenantId", info[1]); |
| | | item.put("code", info[2]); |
| | | |
| | | //根据clientid解析(注意配置文件中clientid格式 例:client-1000) |
| | | try { |
| | | String[] info = clientid.split("-"); |
| | | item.put("type", info[0]); |
| | | item.put("tenantId", info[1]); |
| | | //item.put("code", info[2]); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | redisUtil.set(MqttConstant.MQTT_ONLINE_CLIENT + clientid, item); |
| | | System.err.println(String.format("设备: %s上线", clientid)); |
| | | } |
| | |
| | | messageJson.put("timestamp", DateUtils.zone2Str(messageJson.get("timestamp").toString())); |
| | | } |
| | | // 实时数据上传太频繁且数据内容超过字段大小不记录日志 |
| | | if (!topic.equals(MqttConstant.TENANT_UP_PREFIX_REALTIME_DATA)){ |
| | | if (!topic.equals(MqttConstant.TENANT_UP_PREFIX_REALTIME_DATA) && !topic.equals(MqttConstant.TENANT_UP_PREFIX_FAULT_DATA)){ |
| | | baseCommonService.addLog(message, CommonConstant.LOG_TYPE_MQTT, CommonConstant.OPERATE_MQTT_1); |
| | | } |
| | | |
| | |
| | | }); |
| | | |
| | | break; |
| | | // 接收设备报警数据 |
| | | case MqttConstant.TENANT_UP_PREFIX_FAULT_DATA: |
| | | ThreadUtil.execute(() -> { |
| | | try { |
| | | |
| | | JSONObject jsonObject = JSON.parseObject(message); |
| | | List<DryFaultRecord> faultRecords = JSON.parseArray(jsonObject.get("data").toString(), DryFaultRecord.class); |
| | | System.err.println(faultRecords.toString()); |
| | | faultRecordService.saveBatch(faultRecords); |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | }); |
| | | |
| | | break; |
| | | |
| | | |
| | | case MqttConstant.TENANT_UP_PREFIX_EQU: |
| | | ThreadUtil.execute(() -> { |
| | | try { |
| | | DryEquipment equipment = (DryEquipment) messageJson.get("equipment"); |
| | | |
| | | 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); |
| | | } |
| | | // 获取设备所属车间 |
| | | DryShop shop = (DryShop) messageJson.get("shop"); |
| | | shop.setTenantId(equipment.getTenantId()); |
| | | dryShopService.save(shop); |
| | | |
| | | 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(); |
| | | } |