|
|
@@ -0,0 +1,119 @@
|
|
|
+package com.yunfeiyun.agmp.iotm.device.ybq.serviceImp;
|
|
|
+
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import com.alibaba.fastjson2.JSONObject;
|
|
|
+import com.yunfeiyun.agmp.common.core.page.PageDomain;
|
|
|
+import com.yunfeiyun.agmp.common.framework.manager.RedisCacheManager;
|
|
|
+import com.yunfeiyun.agmp.common.utils.JSONUtils;
|
|
|
+import com.yunfeiyun.agmp.common.utils.StringUtils;
|
|
|
+import com.yunfeiyun.agmp.common.utils.uuid.IdUtils;
|
|
|
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
|
|
|
+import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
|
|
|
+import com.yunfeiyun.agmp.iot.common.domain.IotDeviceconfig;
|
|
|
+import com.yunfeiyun.agmp.iot.common.domain.IotDevicelasteddata;
|
|
|
+import com.yunfeiyun.agmp.iot.common.domain.IotYbqEnvData;
|
|
|
+import com.yunfeiyun.agmp.iot.common.model.cmd.CmdGroupModel;
|
|
|
+import com.yunfeiyun.agmp.iot.common.service.MongoService;
|
|
|
+import com.yunfeiyun.agmp.iotm.device.common.domin.DeviceRefreshDto;
|
|
|
+import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceDataListReqVo;
|
|
|
+import com.yunfeiyun.agmp.iotm.device.common.service.impl.IotDeviceBaseServiceImpl;
|
|
|
+import com.yunfeiyun.agmp.iotm.device.ybq.service.IotYbqEnvDataService;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+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 javax.annotation.Resource;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author zhangn
|
|
|
+ */
|
|
|
+@Service(ServiceNameConst.SERVICE_HS_YBQ)
|
|
|
+@Slf4j
|
|
|
+public class IotYbqEnvDataServiceImpl extends IotDeviceBaseServiceImpl implements IotYbqEnvDataService {
|
|
|
+ @Resource
|
|
|
+ private RedisTemplate redisTemplate;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MongoService<IotYbqEnvData> mongoService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RedisCacheManager redisCacheManager;
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void insertData(IotYbqEnvData iotYbqEnvData) {
|
|
|
+ mongoService.saveOne(iotYbqEnvData);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void deleteData(String id) {
|
|
|
+ mongoService.removeAllByParam("id", id, "IotYbqEnvData");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<IotYbqEnvData> selectIotYbqEnvDataList(IotDeviceDataListReqVo reqVo) {
|
|
|
+
|
|
|
+ Map<String, Object> map = BeanUtil.beanToMap(reqVo);
|
|
|
+ if (StringUtils.isNotEmpty(reqVo.getStartTime()) && StringUtils.isEmpty(reqVo.getEndTime())) {
|
|
|
+ map.put("gte_ybqdataCreatedDate", reqVo.getStartTime());
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(reqVo.getStartTime()) && StringUtils.isNotEmpty(reqVo.getEndTime())) {
|
|
|
+ map.put("lte_ybqdataCreatedDate", reqVo.getEndTime());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(reqVo.getStartTime()) && StringUtils.isNotEmpty(reqVo.getEndTime())) {
|
|
|
+ map.put("time_ybqdataCreatedDate", reqVo.getStartTime() + "," + reqVo.getEndTime());
|
|
|
+ }
|
|
|
+ map.remove("startTime");
|
|
|
+ map.remove("endTime");
|
|
|
+ List<IotYbqEnvData> iotYbqEnvDataResVos = mongoService.findAll(IotYbqEnvData.class, map, "ybqdataCreatedDate desc");
|
|
|
+ return iotYbqEnvDataResVos;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public IotYbqEnvData selectIotYbqEnvLastedData(String deviceBid) {
|
|
|
+ // 尝试从Redis中获取设备的最新数据
|
|
|
+ ValueOperations<String, IotDevicelasteddata> operation = redisTemplate.opsForValue();
|
|
|
+
|
|
|
+ IotDevicelasteddata latestData = null;
|
|
|
+ try {
|
|
|
+ // 存放是在IOTS
|
|
|
+ latestData = operation.get("IOTS:IOT:device_lasted_data:" + deviceBid);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ if (latestData != null) {
|
|
|
+ String content = latestData.getDevldContent();
|
|
|
+ log.info("设备 [{}] 的最新数据在Redis中找到。{}", deviceBid, content);
|
|
|
+ return JSONUtils.toObject(content, IotYbqEnvData.class);
|
|
|
+ } else {
|
|
|
+ log.info("设备 [{}] 在Redis中无最新数据。", deviceBid);
|
|
|
+ }
|
|
|
+ // 从MongoDB中查询数据
|
|
|
+ IotDeviceDataListReqVo dataListReqVo = new IotDeviceDataListReqVo();
|
|
|
+ dataListReqVo.setDevBid(deviceBid);
|
|
|
+
|
|
|
+ Map<String, Object> params = new HashMap<>();
|
|
|
+ PageDomain pageDomain = new PageDomain();
|
|
|
+ pageDomain.setPageSize(1);
|
|
|
+ pageDomain.setPageNum(1);
|
|
|
+ params.put("devBid", deviceBid);
|
|
|
+ List<IotYbqEnvData> envDataList = mongoService.findListPage(IotYbqEnvData.class, params, pageDomain).getRecords();
|
|
|
+ if (envDataList != null && !envDataList.isEmpty()) {
|
|
|
+ log.info("设备 [{}] 的数据从MongoDB成功获取。", deviceBid);
|
|
|
+ return envDataList.get(0);
|
|
|
+ } else {
|
|
|
+ log.warn("设备 [{}] 在MongoDB中也未找到数据。", deviceBid);
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void refresh(DeviceRefreshDto reqVo) {
|
|
|
+
|
|
|
+ }
|
|
|
+}
|