接收采集数据,增加了使用配置数据点限制,配置了的数据点才会保存。未配置则丢弃
| | |
| | | import org.springframework.messaging.MessageChannel; |
| | | import org.springframework.messaging.MessageHandler; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.qianwen.mdc.collect.service.DeviceStateFixPointService; |
| | | import com.qianwen.mdc.collect.service.IOTMqttReceiveService; |
| | | import com.qianwen.mdc.collect.service.WorkstationAppMappingService; |
| | | import com.qianwen.mdc.collect.service.WorkstationDatapointsService; |
| | | import com.qianwen.mdc.collect.service.feedback.WorkstationFeedbackService; |
| | | |
| | | import cn.hutool.core.date.DateTime; |
| | |
| | | |
| | | @Value("${mqtt.password:}") |
| | | private String mqttPassword; |
| | | |
| | | @Autowired |
| | | private IOTMqttReceiveService recService; |
| | | @Autowired |
| | | private DeviceStateFixPointService stateFixPointService; |
| | | |
| | | @Autowired |
| | | private WorkstationFeedbackService workstationFeedbackService; |
| | | |
| | | @Autowired |
| | | private WorkstationAppMappingService workstationAppMappingService; |
| | | |
| | | public static final String COLLECT_DATA_TOPIC = "forward/test"; |
| | | @Autowired |
| | | private WorkstationDatapointsService dpService; |
| | | /** |
| | | * æ¥æ¶æ°æ®çmqtt topicï¼å¨IOTå¹³å°é
ç½®ç |
| | | */ |
| | | @Value("${mqtt.dataReceiveTopic:}") |
| | | public String COLLECT_DATA_TOPIC; |
| | | |
| | | /** |
| | | * åé¦å建çtopicï¼mdcä¸ï¼ï¼æ¬åºç¨æ¥æ¶å¹¶å¤ç |
| | |
| | | |
| | | public static final String WOCKSTATION_CREATE_TOPIC = "mdc/workstation-create"; |
| | | |
| | | private final String WORKSTATION_APP_MAPPING_CHANGED_TOPIC = "mdc/workstation_app_mapping_changed"; |
| | | /** |
| | | * 工使°æ®ç¹åå |
| | | */ |
| | | private final String WORKSTATION_DATAPOINT_CHANGED_TOPIC = "mdc/workstation_datapoint_changed"; |
| | | |
| | | @Bean |
| | | public MqttPahoClientFactory mqttClientFactory() { |
| | |
| | | String clientId = "spring-boot-mqtt-client-inbound"+r.nextInt(1000); |
| | | MqttPahoMessageDrivenChannelAdapter adapter = |
| | | new MqttPahoMessageDrivenChannelAdapter(clientId, |
| | | mqttClientFactory(), COLLECT_DATA_TOPIC, FEEDBACK_TOPIC,WOCKSTATION_CREATE_TOPIC,WORKSTATION_APP_MAPPING_CHANGED_TOPIC);//æåä¸ä¸ªåæ°å
许å¤ä¸ªtopicåæ° |
| | | mqttClientFactory(), COLLECT_DATA_TOPIC, FEEDBACK_TOPIC,WOCKSTATION_CREATE_TOPIC,WORKSTATION_DATAPOINT_CHANGED_TOPIC);//æåä¸ä¸ªåæ°å
许å¤ä¸ªtopicåæ° |
| | | adapter.setCompletionTimeout(5000); |
| | | adapter.setConverter(new DefaultPahoMessageConverter()); |
| | | adapter.setQos(1); |
| | |
| | | logger.info("å·¥ä½åå»ºæ¥æ¶æ¶æ¯={}",workstationId); |
| | | stateFixPointService.deviceStateFixPoint(DateTime.now(), Arrays.asList(workstationId)); |
| | | recService.handle((String)message.getPayload()); |
| | | }else if(WORKSTATION_APP_MAPPING_CHANGED_TOPIC.equals(topic)) { |
| | | String workstationId = (String)message.getPayload(); |
| | | logger.info("å·¥ä½appIdæ å°ååæ¶æ¯={}",workstationId); |
| | | }else if(WORKSTATION_DATAPOINT_CHANGED_TOPIC.equals(topic)) { |
| | | String payload = (String)message.getPayload(); |
| | | logger.info("å·¥ä½appIdæ å°ååæ¶æ¯={}",payload); |
| | | workstationAppMappingService.saveToCache(); |
| | | //æ¸
é¤è¯¥å·¥ä½çæ°æ®ç¹ç¼å |
| | | JSONObject payloadObj = JSONObject.parseObject(payload); |
| | | //payloadObj.getLong("workstationId"); |
| | | |
| | | dpService.datapointsCacheEvict(payloadObj.getString("appId")); |
| | | } else {//订é
äºå 个topic就伿¥æ¶å°å 个ï¼å
¶ä»çä¸ä¼è¿æ¥ |
| | | logger.warn("topic={},msg={},æ 对åºçå¤çå¨",topic,message.getPayload()); |
| | | } |
| | |
| | | public void testRec2() { |
| | | //æ°æ®æ ¼å¼ï¼{"174":[{"values":{"d1":12},"ts":"1721978780449"}]} 174æ¯åºç¨id |
| | | //夿¡æ ¼å¼ï¼{"174":[{"values":{"DeviceStatus":2},"ts":"1722478128278"},{"values":{"SpindleSpeed":22},"ts":"1722478128281"}]} |
| | | String payload = "{\"174\":[{\"values\":{\"DeviceStatus_n\":2,\"Output\":38},\"ts\":\""+System.currentTimeMillis()+"\"}]}"; |
| | | String payload = "{\"182\":[{\"values\":{\"DeviceStatus_n\":2,\"Output\":38},\"ts\":\""+System.currentTimeMillis()+"\"}]}"; |
| | | //payload = "{\"174\":[{\"values\":{\"Output\":11},\"ts\":\"1722478128278\"},{\"values\":{\"SpindleSpeed\":22},\"ts\":\"1722478128281\"}]}"; |
| | | recService.handle(payload); |
| | | } |
| | |
| | | */ |
| | | public class TelemetryData { |
| | | private long workstationId; |
| | | /** |
| | | * iotdbçappId |
| | | */ |
| | | private String appId; |
| | | private List<TelemetryDataItem> dataItems = new ArrayList<>(); |
| | | |
| | | public void addItem(TelemetryDataItem item) { |
| | |
| | | public void setDataItems(List<TelemetryDataItem> dataItems) { |
| | | this.dataItems = dataItems; |
| | | } |
| | | |
| | | public String getAppId() { |
| | | return appId; |
| | | } |
| | | public void setAppId(String appId) { |
| | | this.appId = appId; |
| | | } |
| | | @Override |
| | | public String toString() { |
| | | return "TelemetryData [workstationId=" + workstationId + ", dataItems=" + dataItems + "]"; |
| | | return "TelemetryData [workstationId=" + workstationId + ", appId=" + appId + ", dataItems=" + dataItems + "]"; |
| | | } |
| | | |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.qianwen.mdc.collect.entity.mgr; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.qianwen.core.mp.base.BaseEntity; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | |
| | | |
| | | /** |
| | | * å·¥ä½ééæ°æ®ç¹ |
| | | */ |
| | | @TableName("workstation_datapoints") |
| | | public class WorkstationDatapoints extends BaseEntity { |
| | | private static final long serialVersionUID = 1; |
| | | |
| | | @ApiModelProperty("模æ¿ç±»å") |
| | | private Integer type; |
| | | |
| | | @ApiModelProperty("ç¹ä½é
ç½®(jsonæ°ç»)") |
| | | private String dpConfig; |
| | | |
| | | /** |
| | | * å·¥ä½id |
| | | */ |
| | | private long workstationId; |
| | | |
| | | /** |
| | | * IOTå¹³å°appId |
| | | */ |
| | | private String appId; |
| | | |
| | | public Integer getType() { |
| | | return type; |
| | | } |
| | | |
| | | public void setType(Integer type) { |
| | | this.type = type; |
| | | } |
| | | |
| | | public String getDpConfig() { |
| | | return dpConfig; |
| | | } |
| | | |
| | | public void setDpConfig(String dpConfig) { |
| | | this.dpConfig = dpConfig; |
| | | } |
| | | |
| | | public long getWorkstationId() { |
| | | return workstationId; |
| | | } |
| | | |
| | | public void setWorkstationId(long workstationId) { |
| | | this.workstationId = workstationId; |
| | | } |
| | | |
| | | public String getAppId() { |
| | | return appId; |
| | | } |
| | | |
| | | public void setAppId(String appId) { |
| | | this.appId = appId; |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | package com.qianwen.mdc.collect.handler; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.qianwen.mdc.collect.dto.PackedTelemetryData; |
| | | import com.qianwen.mdc.collect.entity.iotdb.Alarm; |
| | | import com.qianwen.mdc.collect.service.AlarmService; |
| | |
| | | @Override |
| | | public void handleData(PackedTelemetryData data) { |
| | | |
| | | Alarm alarm = new Alarm();//Objects.requireNonNull(BeanUtil.copy(data, Alarm.class)); |
| | | alarmService.saveAlarms(parseAlarm(data)); |
| | | |
| | | log.info("æ¥è¦æ°æ®å¤ç宿:åè¦æ°æ®{} ",data); |
| | | |
| | | } |
| | | |
| | | List<Alarm> parseAlarm(PackedTelemetryData data){ |
| | | List<Alarm> alarmList = new ArrayList<>(); |
| | | //828d jsonæ°ç»æ ¼å¼[{"alarmNo":"8084"}] |
| | | JSONArray alarmArr = JSONArray.parseArray(data.getValue()); |
| | | |
| | | for(int i=0;i<alarmArr.size();i++) { |
| | | Alarm alarm = new Alarm(); |
| | | alarm.setTime(data.getTime()); |
| | | alarm.setWorkstationId(data.getWorkstationId()); |
| | | alarm.setCalendarCode(data.getCalendarCode()); |
| | |
| | | alarm.setFactoryYear(data.getFactoryYear()); |
| | | alarm.setShiftIndex(data.getShiftIndex()); |
| | | alarm.setShiftTimeType(data.getShiftTimeType()); |
| | | fileAlarmDetail(alarm,data); |
| | | alarmService.saveAlarms(Arrays.asList(alarm)); |
| | | |
| | | log.info("æ¥è¦æ°æ®å¤ç宿:åè¦æ°æ®{} ",alarm); |
| | | JSONObject alarmJson = alarmArr.getJSONObject(i); |
| | | alarm.setCode(alarmJson.getString("alarmNo")); |
| | | |
| | | alarm.setMessage("");//ææ¶æ²¡æï¼éè¦åæ¥ |
| | | |
| | | alarmList.add(alarm); |
| | | } |
| | | |
| | | /** |
| | | * å¡«å
åè¦ç详ç»ä¿¡æ¯ï¼çº§å«ï¼ä¿¡æ¯ï¼ä»£ç |
| | | * @param alarm |
| | | */ |
| | | void fileAlarmDetail(Alarm alarm,PackedTelemetryData data){ |
| | | alarm.setCode(this.parseCode(data.getValue())); |
| | | alarm.setMessage(data.getValue()); |
| | | return alarmList; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * è§£ææ¥è¦ä»£ç |
| | | * @param collectText |
| | | * @return |
| | | */ |
| | | String parseCode(String collectText) { |
| | | return "0000"; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.qianwen.mdc.collect.mapper.mgr; |
| | | |
| | | import com.qianwen.core.mp.mapper.BladeMapper; |
| | | import com.qianwen.mdc.collect.entity.mgr.WorkstationDatapoints; |
| | | |
| | | /** |
| | | * 工使°æ®ç¹mapper |
| | | */ |
| | | public interface WorkstationDatapointsMapper extends BladeMapper<WorkstationDatapoints> { |
| | | |
| | | } |
| | |
| | | private TimeSliceCache timeSliceCache; |
| | | @Autowired |
| | | private DeviceStateMapper deviceStateMapper; |
| | | @Autowired |
| | | private WorkstationAppMappingService mappingService;; |
| | | //@Autowired |
| | | //private WorkstationAppMappingService mappingService;; |
| | | |
| | | @Override |
| | | public void run(ApplicationArguments args) throws Exception { |
| | | |
| | | mappingService.saveToCache(); |
| | | //mappingService.saveToCache(); |
| | | |
| | | //çææ¶é´åç |
| | | CacheBuildDTO cacheBuildDTO = CacheBuildDTO.builder().tenantIds(Sets.newHashSet(new String[]{"000000"})).targetDate(LocalDate.now()).build(); |
| | |
| | | //@RedisLock("posting:lock:initStateFixPoint") |
| | | public void checkNeedStateFixPoint() { |
| | | DateTime dateTime = DateTime.now(); |
| | | log.info("è¿å
¥ç¨åºå¯å¨æ ¡éªæ¯å¦åå¨å·¥ä½æè¿åºå®ç¹....... "); |
| | | log.info("ç¨åºå¯å¨æ ¡éªæ¯å¦åå¨å·¥ä½æè¿åºå®ç¹....... "); |
| | | |
| | | Long count = deviceStateMapper.fixPointCountByDate(Integer.valueOf(DatePattern.PURE_DATE_FORMAT.format(dateTime))); |
| | | /* |
| | |
| | | import com.qianwen.mdc.collect.domain.TelemetryData; |
| | | import com.qianwen.mdc.collect.domain.TelemetryDataItem; |
| | | import com.qianwen.mdc.collect.mqtt.MqttMessageSender; |
| | | import com.qianwen.mdc.collect.vo.WorkstationDatapointsVO; |
| | | |
| | | /** |
| | | * ééæ°æ®å¤çå
¥åº |
| | |
| | | public class CollectDataService { |
| | | private static final Logger log = LoggerFactory.getLogger(CollectDataService.class); |
| | | |
| | | //private String DB_PREFIX = "root.f2."; |
| | | private static final Map<Integer, String> PROCESS_PARAM_MAP = new HashMap<>(); |
| | | @Autowired |
| | | private IotDBSessionConfig iotdbConfig; |
| | |
| | | private IotDBCommonService iotDBCommonService; |
| | | @Autowired |
| | | private MqttMessageSender mqttMessageSender; |
| | | |
| | | |
| | | /** |
| | | * 宿¶æ°æ®topicï¼è¦ä¸mdcéé¢å¾ç¸å |
| | |
| | | public void handleCollectData(List<TelemetryData> telemetryDataList) { |
| | | |
| | | for (TelemetryData dt : telemetryDataList) { |
| | | |
| | | handleOneWorkstation(dt); |
| | | |
| | | sendRealtimeDataMsg(dt); |
| | |
| | | * @param dt |
| | | */ |
| | | void handleOneWorkstation(TelemetryData dt) { |
| | | String deviceId;// = DB_PREFIX+TEMPLATE_NAME + "_" + dt.getWorkstationId(); |
| | | String deviceId; |
| | | |
| | | //long workstationId = dpVo.getWorkstationId(); |
| | | |
| | | List<MeasurementSchema> schemas = new ArrayList<>(); |
| | | |
| | | schemas.add(new MeasurementSchema("workstation_id", TSDataType.INT64)); |
| | | schemas.add(new MeasurementSchema("n", TSDataType.TEXT)); |
| | | schemas.add(new MeasurementSchema("v", TSDataType.TEXT)); |
| | | |
| | | |
| | | int rowIndex = 0; |
| | | |
| | |
| | | iotDBCommonService.setTemmplateIfNotSet(TEMPLATE_NAME, deviceId); |
| | | Tablet tablet = new Tablet(deviceId, schemas); |
| | | for(TypedTelemetryData tdata : typeList) { |
| | | |
| | | |
| | | rowIndex = tablet.rowSize++; |
| | | tablet.addTimestamp(rowIndex, tdata.getTime()); |
| | | tablet.addValue("workstation_id",rowIndex,dt.getWorkstationId()); |
| | |
| | | if(!tdata.getName().equals("Alarm")) { |
| | | tablet.addValue("v",rowIndex,tdata.getValue()); |
| | | }else { |
| | | //åè¦ä¿¡æ¯æ ¹æ®åçéè¦å¤çä¸ä¸ï¼æ ¼å¼æªjson对象ï¼{"timestamp":1718839644476,"code":1000,"msg":"EMERGENCY STOP","alarmtype":15,"level":""} |
| | | //åè¦ä¿¡æ¯æ ¹æ®åçéè¦å¤çä¸ä¸ï¼æ ¼å¼ä¸ºjson对象ï¼{"timestamp":1718839644476,"code":1000,"msg":"EMERGENCY STOP","alarmtype":15,"level":""} |
| | | tablet.addValue("v",rowIndex,formatAlarmMsg(tdata.getTime(),tdata.getValue())); |
| | | } |
| | | } |
| | | |
| | | try { |
| | | iotdbConfig.getSessionPool().insertAlignedTablet(tablet); |
| | | |
| | | //updateLastParam(dt.getWorkstationId(),typeList); |
| | | } catch (Exception e) { |
| | | log.error("IOTDBå
¥åºå¤±è´¥",e); |
| | | e.printStackTrace(); |
| | | }finally { |
| | | //iotdbConfig.getSessionPool().clo1se(); |
| | | } |
| | |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Optional; |
| | | import java.util.Set; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | |
| | | import com.qianwen.mdc.collect.domain.TelemetryData; |
| | | import com.qianwen.mdc.collect.domain.TelemetryDataItem; |
| | | import com.qianwen.mdc.collect.utils.redis.RedisUtil; |
| | | import com.qianwen.mdc.collect.vo.WorkstationDatapointsVO; |
| | | |
| | | @Service |
| | | public class IOTMqttReceiveService { |
| | |
| | | private PackedDataService packedDataService; |
| | | @Autowired |
| | | private RedisUtil redisUtil; |
| | | @Autowired |
| | | private WorkstationDatapointsService dpService; |
| | | /** |
| | | * å¤çæ¶å°çæ¶æ¯,对åºTelemetryDataPostingConsumer |
| | | * @param payload |
| | | */ |
| | | public void handle(String payload) { |
| | | //System.out.println("Received message122: " + payload); |
| | | //è§£ææ¶æ¯ |
| | | List<TelemetryData> teleList = parsePayload(payload); |
| | | |
| | |
| | | */ |
| | | List<TelemetryData> parsePayload(String payload){ |
| | | List<TelemetryData> dtList = new ArrayList<TelemetryData> (); |
| | | //æ°æ®æ ¼å¼ï¼{"174":[{"values":{"d1":12},"ts":"1721978780449"}]} 174æ¯åºç¨id |
| | | //夿¡æ ¼å¼ï¼{"174":[{"values":{"output":11},"ts":"1722478128278"},{"values":{"spindleSpeed":22},"ts":"1722478128281"}]} |
| | | //夿¡ æ°æ®æ ¼å¼ï¼{"174":[{"values":{"output":11},"ts":"1722478128278"},{"values":{"spindleSpeed":22},"ts":"1722478128281"}]} 174æ¯åºç¨id |
| | | //è§£ææ¶æ¯ name,valueå½¢å¼ï¼å¦n=output,v=11 |
| | | JSONObject jsonObj = JSONObject.parseObject(payload); |
| | | |
| | | Set<String> keySet = jsonObj.keySet(); |
| | | String[] keys = keySet.toArray(new String[] {}); |
| | | |
| | | //WorkstationDatapointsVO dpVo; |
| | | |
| | | final String NEWDP_SUFFIX = "_n";//计ç®è§å使ç¨ä¹åæ°æ°æ®ç¹çç»å°¾ |
| | | for(String key : keys) { |
| | | String appId = key;//iotç³»ç»ä¸çåºç¨idï¼æ¬åºç¨ä¸åºè¯¥ç¨è¡¨å»å¯¹åº |
| | | long workstationId = getWorkstationIdByAppId(appId); |
| | | |
| | | |
| | | //TODO è·å工使°æ®ç¹é
ç½®,åªä¿åé
ç½®å¥½çæ°æ®ç¹ï¼æ²¡æé
ç½®çééæ°æ®æå¼ã |
| | | final WorkstationDatapointsVO dpVo = dpService.getDatapointsByAppIdFromCache(appId); |
| | | if(dpVo == null) { |
| | | //工使²¡æå®ä¹è¿æ°æ®ç¹æè
appIdä¸å¹é
|
| | | log.warn("appId={}æªæ¾å°æ°æ®ç¹å®ä¹è®°å½ï¼ä¸¢å¼æ°æ®",appId); |
| | | continue; |
| | | } |
| | | |
| | | TelemetryData tdata = new TelemetryData(); |
| | | tdata.setWorkstationId(workstationId); |
| | | |
| | | //tdata.setWorkstationId(workstationId); |
| | | tdata.setAppId(appId); |
| | | tdata.setWorkstationId(dpVo.getWorkstationId()); |
| | | |
| | | JSONArray dtArr = jsonObj.getJSONArray(appId); |
| | | for(int i=0;i<dtArr.size();i++) { |
| | |
| | | String oriValueKey = valueKey;;//ç±äºä½¿ç¨è®¡ç®è§åçééç¹åç§°ä¼åé¢å¢å ä¸ä¸ª"_n",æä»¥è¿ä¸ªoriValueKey代表没æå¢å "_n"ç |
| | | if(StringUtils.endsWith(valueKey, NEWDP_SUFFIX)) { |
| | | oriValueKey = StringUtils.removeEnd(valueKey, NEWDP_SUFFIX); |
| | | } |
| | | if(!dpVo.containsDataPoint(oriValueKey)) { |
| | | //妿ä¸åå¨è¯¥æ°æ®ç¹é
ç½®ï¼è¯¥æ°æ®ç´æ¥å¿½ç¥ |
| | | return; |
| | | } |
| | | tdataItem.addPoint(oriValueKey,values.getString(valueKey));//使ç¨åå§é
ç½®ç¹ä¿æä¿åæ°æ® |
| | | }); |
| | |
| | | * @param appId |
| | | * @return |
| | | */ |
| | | public long getWorkstationIdByAppId(String appId) { |
| | | /* |
| | | public Long getWorkstationIdByAppId(String appId) { |
| | | |
| | | Object wid = redisUtil.hget("workstation-appid-map", appId); |
| | | String workstationId = String.valueOf(Optional.ofNullable(wid).orElse(appId)); |
| | | |
| | | String workstationId = String.valueOf(Optional.ofNullable(wid).orElse(StringUtils.EMPTY)); |
| | | if(ObjectUtil.isEmpty(workstationId)) { |
| | | return null; |
| | | } |
| | | return Long.parseLong(workstationId); |
| | | } |
| | | */ |
| | | } |
| | |
| | | private WorkstationCache workstationCache; |
| | | @Autowired |
| | | private TimeSliceCache timeSliceCache; |
| | | @Autowired |
| | | private WorkstationDatapointsService dpService; |
| | | |
| | | static { |
| | | PROCESS_PARAM_MAP.put(1, "STATE"); |
| | |
| | | String[] keys = map.keySet().toArray(new String[0]); |
| | | for (int j = 0; j < keys.length; j++) { |
| | | //TODO: è¿éï¼åç³»ç»è¿è¡äºè¿æ»¤ãWorkstationCollectDataServiceImpl.handlerWorkstationCollectDataé |
| | | |
| | | PackedTelemetryData pkData = new PackedTelemetryData(); |
| | | pkData.setWorkstationId(tdata.getWorkstationId()); |
| | | pkData.setValue(map.get(keys[j])); |
| | | pkData.setTime(item.getTime()); |
| | | |
| | | pkData.setName(keys[j]);//åæ°åç§° |
| | | pkData.setName(keys[j]);//æ°æ®ç¹åç§° |
| | | |
| | | fillByCalendar(pkData); |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.qianwen.mdc.collect.service; |
| | | |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cache.annotation.CacheEvict; |
| | | import org.springframework.cache.annotation.Cacheable; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.qianwen.core.mp.base.BaseServiceImpl; |
| | | import com.qianwen.mdc.collect.entity.mgr.WorkstationDatapoints; |
| | | import com.qianwen.mdc.collect.mapper.mgr.WorkstationDatapointsMapper; |
| | | import com.qianwen.mdc.collect.vo.WorkstationDatapointsVO; |
| | | /** |
| | | * 工使°æ®ç¹æå¡ï¼ä¸»è¦ç¨äºè·åæ°æ®ç¹å®ä¹ãå®ä¹å¨smartmanåºç¨ |
| | | */ |
| | | @Service |
| | | public class WorkstationDatapointsService extends BaseServiceImpl<WorkstationDatapointsMapper, WorkstationDatapoints> { |
| | | private Logger log = LoggerFactory.getLogger(this.getClass()); |
| | | |
| | | |
| | | /** |
| | | * è·å工使°æ®ç¹é
ç½® ,ä»ç¼å |
| | | * @param workstationId |
| | | * @return |
| | | */ |
| | | @Cacheable(value = "collect:datapoint" ,key = "#appId") |
| | | public WorkstationDatapointsVO getDatapointsByAppIdFromCache(String appId) { |
| | | return this.getDataPointByAppId(appId); |
| | | } |
| | | |
| | | /* |
| | | @CachePut(value = "collect:datapoint" ,key = "#appId") |
| | | public WorkstationDatapointsVO datapointsCachePut(String appId) { |
| | | return this.getDataPointByAppId(appId); |
| | | } |
| | | */ |
| | | |
| | | @CacheEvict(value = "collect:datapoint" ,key = "#appId") |
| | | public void datapointsCacheEvict(String appId) { |
| | | |
| | | } |
| | | /** |
| | | * 仿°æ®åºæ¥è¯¢æ°æ®ç¹å®ä¹ |
| | | * @param workstationId å·¥ä½id |
| | | * @return |
| | | */ |
| | | WorkstationDatapointsVO getDataPointByAppId(String appId) { |
| | | log.info("appid={}", appId); |
| | | WorkstationDatapoints dp = baseMapper.selectOne(Wrappers.<WorkstationDatapoints>lambdaQuery() |
| | | .eq(WorkstationDatapoints::getAppId, appId)); |
| | | |
| | | log.info("dp={}", dp); |
| | | |
| | | WorkstationDatapointsVO dpVO = null; |
| | | |
| | | if (dp != null) { |
| | | dpVO = new WorkstationDatapointsVO(dp.getWorkstationId(), dp.getAppId(), dp.getDpConfig()); |
| | | } |
| | | return dpVO; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.qianwen.mdc.collect.vo; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.json.JSONUtil; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | |
| | | |
| | | /** |
| | | * å·¥ä½ééæ°æ®ç¹VO |
| | | */ |
| | | public class WorkstationDatapointsVO implements Serializable{ |
| | | |
| | | /** |
| | | * åºååï¼åºä¸ºéè¦springç¼å |
| | | */ |
| | | private static final long serialVersionUID = 6558493027948435061L; |
| | | |
| | | @ApiModelProperty("ç¹ä½è¡¨å¤´(jsonæ°ç»)") |
| | | private String dpHead; |
| | | |
| | | @ApiModelProperty("ç¹ä½é
ç½®(jsonæ°ç»)") |
| | | private String dpConfig; |
| | | |
| | | /** |
| | | * å·¥ä½id |
| | | */ |
| | | private long workstationId; |
| | | |
| | | /** |
| | | * IOTå¹³å°appId |
| | | */ |
| | | private String appId; |
| | | |
| | | //private List<DataPoint> points = null; |
| | | private List<String> points = new ArrayList<>(); |
| | | |
| | | public WorkstationDatapointsVO(long workstationId, String appId,String dpConfig) { |
| | | super(); |
| | | this.dpConfig = dpConfig; |
| | | this.workstationId = workstationId; |
| | | this.appId = appId; |
| | | |
| | | initPoints(); |
| | | } |
| | | void initPoints() { |
| | | if(ObjectUtil.isEmpty(dpConfig)) { |
| | | return; |
| | | } |
| | | |
| | | JSONArray ptArr = JSONArray.parseArray(dpConfig); |
| | | |
| | | points = new ArrayList<>(); |
| | | JSONObject ptObj; |
| | | for(int i=0;i<ptArr.size();i++) { |
| | | ptObj = ptArr.getJSONObject(i); |
| | | |
| | | //DataPoint dp = new DataPoint(); |
| | | //dp.setDpName(ptObj.getString("dpName")); |
| | | |
| | | points.add(ptObj.getString("dpName")); |
| | | } |
| | | } |
| | | |
| | | public String getDpConfig() { |
| | | return dpConfig; |
| | | } |
| | | |
| | | public void setDpConfig(String dpConfig) { |
| | | this.dpConfig = dpConfig; |
| | | } |
| | | |
| | | public long getWorkstationId() { |
| | | return workstationId; |
| | | } |
| | | |
| | | public void setWorkstationId(long workstationId) { |
| | | this.workstationId = workstationId; |
| | | } |
| | | |
| | | public String getDpHead() { |
| | | return dpHead; |
| | | } |
| | | |
| | | public void setDpHead(String dpHead) { |
| | | this.dpHead = dpHead; |
| | | } |
| | | |
| | | public String getAppId() { |
| | | return appId; |
| | | } |
| | | |
| | | public void setAppId(String appId) { |
| | | this.appId = appId; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 夿ééåéåç§°æ¯å¦å¨æ°æ®ç¹é
ç½®ç§ |
| | | * @param dpName |
| | | * @return |
| | | */ |
| | | public boolean containsDataPoint(String dpName) { |
| | | if(ObjectUtil.isEmpty(points)) { |
| | | return false; |
| | | } |
| | | |
| | | return points.contains(dpName); |
| | | /* |
| | | for(String dpn : points) { |
| | | if(StringUtils.equals(dpn, dpName)) { |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | */ |
| | | } |
| | | |
| | | |
| | | } |
| | | /* |
| | | class DataPoint{ |
| | | private String dpName; |
| | | |
| | | public String getDpName() { |
| | | return dpName; |
| | | } |
| | | |
| | | public void setDpName(String dpName) { |
| | | this.dpName = dpName; |
| | | } |
| | | |
| | | |
| | | } |
| | | */ |
| | |
| | | #å¿è·³æ¶é´ |
| | | keepalive: 10 |
| | | connectionTimeout: 3000 #è¿æ¥è¶
æ¶æ¶é´ |
| | | |
| | | dataReceiveTopic: forward/test #ä»iot平尿¥æ¶mqttééæ°æ®çtopic |
| | | # mysql |
| | | datasource: |
| | | type: mysql |
| | |
| | | #iotdb 以åå
¶jdbcä¸èµ·é
ç½® |
| | | iotdb: |
| | | driver: org.apache.iotdb.jdbc.IoTDBDriver |
| | | host: 120.46.212.231 |
| | | host: localhost #120.46.212.231 |
| | | port: 6667 |
| | | maxSize: 100 |
| | | username: root |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.qianwen.mdc.collect.service; |
| | | |
| | | import static org.junit.Assert.assertNull; |
| | | |
| | | import org.junit.jupiter.api.Test; |
| | | |
| | | public class IOTMqttReceiveServiceTest { |
| | | |
| | | @Test |
| | | public void t() { |
| | | |
| | | //System.out.println(a == null); |
| | | } |
| | | } |