Explorar el Código

新增 新普惠气象墒情物联网设备功能对接

zhaiyifei hace 1 año
padre
commit
96ced9a0dc

+ 4 - 315
src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/service/impl/IotYfQxzServiceImpl.java

@@ -1,61 +1,25 @@
 package com.yunfeiyun.agmp.iotm.device.qxsqz.service.impl;
 
-import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.yunfeiyun.agmp.common.constant.ErrorCode;
-import com.yunfeiyun.agmp.common.core.page.PageDomain;
-import com.yunfeiyun.agmp.common.core.page.TableDataInfo;
-import com.yunfeiyun.agmp.common.core.page.TableSupport;
-import com.yunfeiyun.agmp.common.framework.manager.RedisCacheManager;
-import com.yunfeiyun.agmp.common.utils.DateUtils;
 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.IotErrorCode;
-import com.yunfeiyun.agmp.iot.common.constant.device.ElementFactorUtil;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
-import com.yunfeiyun.agmp.iot.common.domain.*;
-import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
+import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
+import com.yunfeiyun.agmp.iot.common.domain.IotDeviceconfig;
 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.service.IotDeviceBaseService;
-import com.yunfeiyun.agmp.iotm.device.common.service.impl.IotDeviceBaseServiceImpl;
-import com.yunfeiyun.agmp.iotm.device.qxsqz.domain.IotDeviceQxzDataListReqVo;
-import com.yunfeiyun.agmp.iotm.device.qxsqz.domain.QxzDataLast24hDto;
-import com.yunfeiyun.agmp.iotm.util.MongoUtil;
+import com.yunfeiyun.agmp.iotm.device.qxsqz.service.IIotYfQxzCommService;
 import com.yunfeiyun.agmp.iotm.web.service.IIotCmdtaskService;
-import com.yunfeiyun.agmp.iotm.web.service.IIotDeviceService;
 import com.yunfeiyun.agmp.iotm.web.service.IIotDeviceconfigService;
-import com.yunfeiyun.agmp.iotm.web.service.IIotDevicefactorService;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Sort;
-import org.springframework.data.mongodb.core.aggregation.*;
-import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.text.ParseException;
-import java.util.*;
 
 @Service(value = ServiceNameConst.SERVICE_YF_QXZ)
 @Slf4j
-public class IotYfQxzServiceImpl extends IotDeviceBaseServiceImpl implements IotDeviceBaseService {
-
-    @Autowired
-    private MongoService mongoService;
-
-    @Autowired
-    private IIotDevicefactorService iotDevicefactorService;
-
-    @Autowired
-    private IIotDeviceService iotDeviceService;
-
-    @Autowired
-    private RedisCacheManager redisCacheManager;
+public class IotYfQxzServiceImpl extends IIotYfQxzCommService {
 
     @Autowired
     private IIotCmdtaskService iIotCmdtaskService;
@@ -63,281 +27,6 @@ public class IotYfQxzServiceImpl extends IotDeviceBaseServiceImpl implements Iot
     @Resource
     private IIotDeviceconfigService iIotDeviceconfigService;
 
-    public TableDataInfo dataList(IotDeviceQxzDataListReqVo reqVo) throws ParseException {
-        return dataList(reqVo, true, false);
-    }
-
-    /**
-     * 获取数据列表接口
-     * @param reqVo
-     */
-    public TableDataInfo dataList(IotDeviceQxzDataListReqVo reqVo, boolean isNow, boolean isDisable) throws ParseException {
-        TableDataInfo rspData = new TableDataInfo();
-        rspData.setCode(ErrorCode.SUCCESS.getCode());
-        rspData.setMsg(ErrorCode.SUCCESS.getMessage());
-        rspData.setData(new ArrayList<>());
-        rspData.setTotal(0);
-
-        IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());
-
-        String devBid = findDevice.getDevBid();
-        Criteria criteria = new Criteria().and("devBid").is(devBid);
-        if(isNow){
-            Date startDate = null;
-            Date endDate = null;
-            try{
-                startDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, reqVo.getStartTime());
-                endDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, reqVo.getEndTime());
-            }catch (Exception e){
-                log.error("时间格式错误", e);
-                throw new IotBizException(ErrorCode.INVALID_PARAMETER.getCode(), "请输入正确的起止时间");
-            }
-            criteria = criteria.andOperator(
-                    Criteria.where("time").gte(startDate),
-                    Criteria.where("time").lte(endDate)
-            );
-        }
-
-        MatchOperation matchOperation = Aggregation.match(criteria);
-
-        GroupOperation groupOperation = Aggregation.group("time")
-                .push("$$ROOT").as("data");
-
-        ProjectionOperation projectionOperationResult = Aggregation.project("_id")
-                .and("_id").as("time")
-                .and("data").as("dataList");
-
-        SortOperation sortOperation = Aggregation.sort(Sort.Direction.DESC, "time");
-
-        Aggregation aggregation = Aggregation.newAggregation(
-                matchOperation,
-                groupOperation,
-                projectionOperationResult,
-                sortOperation
-        );
-
-        PageDomain pageDomain = TableSupport.buildPageRequest();
-        IPage<QxzDataListDto> qxzDataListDtoIPage = mongoService.aggregate(IotYfqxzdata.class, aggregation, QxzDataListDto.class, pageDomain);
-        //查出该设备的“自定义要素信息列表”
-        IotDevicefactor param = new IotDevicefactor();
-        param.setDevBid(devBid);
-        List<IotDevicefactor> factorList = iotDevicefactorService.selectIotDevicefactorList(param);
-
-        List<List<IotQxzDataListRseVo>> rest = new ArrayList<>();
-        for(QxzDataListDto item: qxzDataListDtoIPage.getRecords()){
-            List<QxzDataDto> dataList = item.getDataList();
-            List<IotQxzDataListRseVo> iotQxzDataListRseVoList = ElementFactorUtil.qxzListProcessData(dataList, factorList, findDevice, isDisable);
-            rest.add(iotQxzDataListRseVoList);
-        }
-        rspData.setData(rest);
-        rspData.setTotal(qxzDataListDtoIPage.getTotal());
-        return rspData;
-    }
-
-    /**
-     * 获取折线图数据列表接口
-     * @param reqVo
-     */
-    public List<IotQxzDataListRseVo> chartList(IotDeviceQxzDataListReqVo reqVo) throws ParseException {
-
-        //1、查出总条数 2、查出“符合条件的、当前页的”数据 3、json结构重组(如果需要的话) 4、附加 要素自定义 信息
-
-        String devBid = reqVo.getDevBid();
-        if(StringUtils.isEmpty(devBid)){
-            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备标识不能为空");
-        }
-
-        IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());
-
-        String startDate = reqVo.getStartTime();
-        String endDate = reqVo.getEndTime();
-        String unit = "day";
-
-        Criteria criteria = new Criteria().and("devBid").is(devBid);
-
-        //必须设置起止时间
-        if(StringUtils.isNotEmpty(startDate) && StringUtils.isNotEmpty(endDate)){
-            //限制 起止时间
-            criteria = criteria.andOperator(
-                    Criteria.where("time").gte(DateUtils.parseDate(startDate)),
-                    Criteria.where("time").lte(DateUtils.parseDate(endDate))
-            );
-            //选择 数据粒度
-            unit = MongoUtil.getDateTruncUnit(startDate, endDate);
-        }
-
-        MatchOperation matchOperation = Aggregation.match(criteria);
-
-        ProjectionOperation projectionOperation = Aggregation.project()
-                .and("eName").as("eName")
-                .and("eNum").as("eNum")
-                .and("eKey").as("eKey")
-                .andExpression("{$convert: {input: '$eValue', to: 'double', onError: -99, onNull: -99}}").as("eValue")
-                .andExpression("{$dateTrunc: {date: {$toDate: '$time'}, unit:'" + unit + "'}}").as("time");
-
-        GroupOperation groupOperation = Aggregation.group("eName", "eNum", "eKey")
-                .push("$$ROOT").as("data");
-
-        UnwindOperation unwindOperation = Aggregation.unwind("$data");
-        GroupOperation groupOperation2 = Aggregation.group("data.eName", "data.eNum", "data.eKey", "data.time")
-                .avg("data.eValue").as("eValue");
-
-        SortOperation sortOperation = Aggregation.sort(Sort.Direction.ASC, "_id.time");
-        JSONArray roundArray = new JSONArray();
-        roundArray.add("$eValue");
-        roundArray.add(2);
-        Map<String, Object> roundMap = new HashMap<>();
-        roundMap.put("$round", roundArray);
-        Map<String, Object> pushMapStr = new HashMap<>();
-        pushMapStr.put("$toString", roundMap);
-
-        Map<String, Object> pushMap = new HashMap<>();
-        pushMap.put("number", pushMapStr);
-        pushMap.put("time", "$_id.time");
-
-        GroupOperation groupOperation3 = Aggregation.group("_id.eName", "_id.eNum", "_id.eKey")
-                .push(pushMap).as("dataList");
-
-        ProjectionOperation projectionOperation2 = Aggregation.project()
-                .and("eName").as("eName")
-                .and("eNum").as("eNum")
-                .and("eKey").as("eKey")
-                .and("dataList").as("dataList");
-        SortOperation sortOperation2 = Aggregation.sort(Sort.Direction.ASC, "eKey");
-
-        Aggregation aggregation = Aggregation.newAggregation(
-                matchOperation,
-                projectionOperation,
-                groupOperation,
-                unwindOperation,
-                groupOperation2,
-                sortOperation,
-                groupOperation3,
-                projectionOperation2,
-                sortOperation2
-        );
-        List<QxzDataDto> dataList = mongoService.aggregate(IotYfqxzdata.class, aggregation, QxzDataDto.class);
-
-        //查出该设备的“自定义要素信息列表”
-        IotDevicefactor param = new IotDevicefactor();
-        param.setDevBid(devBid);
-        List<IotDevicefactor> factorList = iotDevicefactorService.selectIotDevicefactorList(param);
-        List<IotQxzDataListRseVo> iotQxzDataListRseVoList = ElementFactorUtil.qxzChartProcessData(dataList, factorList, findDevice, false);
-        return iotQxzDataListRseVoList;
-    }
-
-    /**
-     * 获取24小时数据列表接口
-     * @param reqVo
-     * @return
-     */
-    public List<IotQxzDataListRseVo> dataList24h(IotDeviceQxzDataListReqVo reqVo){
-        String devBid = reqVo.getDevBid();
-        long endTime = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.dateNow()).getTime();
-        long begintime = endTime-86400000;
-
-        IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());
-
-        Criteria criteria = new Criteria().and("devBid").is(devBid);
-        criteria = criteria.andOperator(
-                Criteria.where("time").gte(new Date(begintime)),
-                Criteria.where("time").lte(new Date(endTime))
-        );
-        MatchOperation matchOperation = Aggregation.match(criteria);
-        AddFieldsOperation addFieldsOperation = Aggregation.addFields()
-                .addField("eValueNum")
-                .withValueOfExpression("{$convert: {input: '$eValue', to: 'double', onError: -99, onNull: -99}}")
-                .build();
-
-        SortOperation sortOperation = Aggregation.sort(Sort.Direction.ASC, "eValueNum");
-
-        GroupOperation groupOperation = Aggregation.group("eNum", "eName", "eKey")
-                .push("$$ROOT").as("data");
-        SortOperation sortOperation2 = Aggregation.sort(Sort.Direction.ASC, "data.eValueNum")
-                .and(Sort.Direction.ASC, "data.time");
-
-        ProjectionOperation projectionOperationResult = Aggregation.project("_id")
-                .and("_id").as("elem")
-                .andExpression("{$last: '$data'}").as("max_data")
-                .andExpression("{$first: '$data'}").as("min_data");
-
-        ProjectionOperation projectionOperationResult2 = Aggregation.project("_id")
-                .and("elem").as("elem")
-                .and("elem.eNum").as("eNum")
-                .and("elem.eName").as("eName")
-                .and("elem.eKey").as("eKey")
-                .and("max_data.eValue").as("maxVal")
-                .and("max_data.time").as("maxValdate")
-                .and("min_data.eValue").as("minVal")
-                .and("min_data.time").as("minValdate");
-
-        SortOperation sortOperation3 = Aggregation.sort(Sort.Direction.ASC, "eNum")
-                .and(Sort.Direction.ASC, "eName")
-                .and(Sort.Direction.ASC, "eKey");
-
-        Aggregation aggregation = Aggregation.newAggregation(
-                matchOperation,
-                addFieldsOperation,
-                sortOperation,
-                groupOperation,
-                sortOperation2,
-                projectionOperationResult,
-                projectionOperationResult2,
-                sortOperation3
-        );
-
-        List<QxzDataLast24hDto> qxzDataLast24hDtoList = mongoService.aggregate(IotYfqxzdata.class, aggregation, QxzDataLast24hDto.class);
-        //查出该设备的“自定义要素信息列表”
-        IotDevicefactor param = new IotDevicefactor();
-        param.setDevBid(devBid);
-        List<IotDevicefactor> factorList = iotDevicefactorService.selectIotDevicefactorList(param);
-        Map<String, QxzDataLast24hDto> iotXphLast24hDtoMap = new HashMap<>();
-        List<QxzDataDto> dataList = new ArrayList<>();
-        for(QxzDataLast24hDto item: qxzDataLast24hDtoList){
-            String key = ElementFactorUtil.getAddress(item.getEName(), item.getEKey());
-            iotXphLast24hDtoMap.put(key, item);
-            QxzDataDto dto = new QxzDataDto();
-            BeanUtils.copyProperties(item, dto);
-            dataList.add(dto);
-        }
-
-        List<IotQxzDataListRseVo> iotQxzDataListRseVoList = ElementFactorUtil.qxzListProcessData(dataList, factorList, findDevice, false);
-        for(IotQxzDataListRseVo item: iotQxzDataListRseVoList){
-            QxzDataLast24hDto qxzDataLast24hDto = iotXphLast24hDtoMap.get(item.getAddress());
-            item.setMinVal(qxzDataLast24hDto.getMinVal());
-            item.setMinValdate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, qxzDataLast24hDto.getMinValdate()));
-            item.setMaxVal(qxzDataLast24hDto.getMaxVal());
-            item.setMaxValdate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, qxzDataLast24hDto.getMaxValdate()));
-        }
-        return iotQxzDataListRseVoList;
-    }
-
-    /**
-     * 获取最近数据列表接口
-     * @param reqVo
-     * @return
-     */
-    public IotDevicelasteddata dataLatest(IotDeviceQxzDataListReqVo reqVo) throws ParseException {
-        String devBid = reqVo.getDevBid();
-
-        IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());
-        TableDataInfo tableDataInfo = dataList(reqVo, false, true);
-        List<List<IotQxzDataListRseVo>> rest = (List<List<IotQxzDataListRseVo>>) tableDataInfo.getData();
-        if(rest == null || rest.isEmpty()){
-            log.info("devBid:{},【最近数据】empty",devBid);
-            return null;
-        }
-
-        List<IotQxzDataListRseVo> iotQxzDataListRseVoList = rest.get(0);
-        IotQxzDataListRseVo iotQxzDataListRseVo = iotQxzDataListRseVoList.get(0);
-        IotDevicelasteddata latestData = new IotDevicelasteddata();
-        BeanUtils.copyProperties(findDevice, latestData);
-        latestData.setDevldCreateddate(iotQxzDataListRseVo.getTime());
-        latestData.setDevldUpdateddate(iotQxzDataListRseVo.getTime());
-        latestData.setDevldContent(JSONArray.toJSONString(iotQxzDataListRseVoList));
-        return latestData;
-    }
-
     /**
      * 刷新指令集
      * @param reqVo

+ 375 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/qxsqz/service/impl/IotYfQxzServiceImplbackup.java

@@ -0,0 +1,375 @@
+//package com.yunfeiyun.agmp.iotm.device.qxsqz.service.impl;
+//
+//import com.alibaba.fastjson2.JSONArray;
+//import com.alibaba.fastjson2.JSONObject;
+//import com.baomidou.mybatisplus.core.metadata.IPage;
+//import com.yunfeiyun.agmp.common.constant.ErrorCode;
+//import com.yunfeiyun.agmp.common.core.page.PageDomain;
+//import com.yunfeiyun.agmp.common.core.page.TableDataInfo;
+//import com.yunfeiyun.agmp.common.core.page.TableSupport;
+//import com.yunfeiyun.agmp.common.framework.manager.RedisCacheManager;
+//import com.yunfeiyun.agmp.common.utils.DateUtils;
+//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.IotErrorCode;
+//import com.yunfeiyun.agmp.iot.common.constant.device.ElementFactorUtil;
+//import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
+//import com.yunfeiyun.agmp.iot.common.domain.*;
+//import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
+//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.service.IotDeviceBaseService;
+//import com.yunfeiyun.agmp.iotm.device.common.service.impl.IotDeviceBaseServiceImpl;
+//import com.yunfeiyun.agmp.iotm.device.qxsqz.domain.IotDeviceQxzDataListReqVo;
+//import com.yunfeiyun.agmp.iotm.device.qxsqz.domain.QxzDataLast24hDto;
+//import com.yunfeiyun.agmp.iotm.util.MongoUtil;
+//import com.yunfeiyun.agmp.iotm.web.service.IIotCmdtaskService;
+//import com.yunfeiyun.agmp.iotm.web.service.IIotDeviceService;
+//import com.yunfeiyun.agmp.iotm.web.service.IIotDeviceconfigService;
+//import com.yunfeiyun.agmp.iotm.web.service.IIotDevicefactorService;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.beans.BeanUtils;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.data.domain.Sort;
+//import org.springframework.data.mongodb.core.aggregation.*;
+//import org.springframework.data.mongodb.core.query.Criteria;
+//import org.springframework.stereotype.Service;
+//
+//import javax.annotation.Resource;
+//import java.text.ParseException;
+//import java.util.*;
+//
+//@Service(value = ServiceNameConst.SERVICE_YF_QXZ)
+//@Slf4j
+//public class IotYfQxzServiceImplbackup extends IotDeviceBaseServiceImpl implements IotDeviceBaseService {
+//
+//    @Autowired
+//    private MongoService mongoService;
+//
+//    @Autowired
+//    private IIotDevicefactorService iotDevicefactorService;
+//
+//    @Autowired
+//    private IIotDeviceService iotDeviceService;
+//
+//    @Autowired
+//    private RedisCacheManager redisCacheManager;
+//
+//    @Autowired
+//    private IIotCmdtaskService iIotCmdtaskService;
+//
+//    @Resource
+//    private IIotDeviceconfigService iIotDeviceconfigService;
+//
+//    public TableDataInfo dataList(IotDeviceQxzDataListReqVo reqVo) throws ParseException {
+//        return dataList(reqVo, true, false);
+//    }
+//
+//    /**
+//     * 获取数据列表接口
+//     * @param reqVo
+//     */
+//    public TableDataInfo dataList(IotDeviceQxzDataListReqVo reqVo, boolean isNow, boolean isDisable) throws ParseException {
+//        TableDataInfo rspData = new TableDataInfo();
+//        rspData.setCode(ErrorCode.SUCCESS.getCode());
+//        rspData.setMsg(ErrorCode.SUCCESS.getMessage());
+//        rspData.setData(new ArrayList<>());
+//        rspData.setTotal(0);
+//
+//        IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());
+//
+//        String devBid = findDevice.getDevBid();
+//        Criteria criteria = new Criteria().and("devBid").is(devBid);
+//        if(isNow){
+//            Date startDate = null;
+//            Date endDate = null;
+//            try{
+//                startDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, reqVo.getStartTime());
+//                endDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, reqVo.getEndTime());
+//            }catch (Exception e){
+//                log.error("时间格式错误", e);
+//                throw new IotBizException(ErrorCode.INVALID_PARAMETER.getCode(), "请输入正确的起止时间");
+//            }
+//            criteria = criteria.andOperator(
+//                    Criteria.where("time").gte(startDate),
+//                    Criteria.where("time").lte(endDate)
+//            );
+//        }
+//
+//        MatchOperation matchOperation = Aggregation.match(criteria);
+//
+//        GroupOperation groupOperation = Aggregation.group("time")
+//                .push("$$ROOT").as("data");
+//
+//        ProjectionOperation projectionOperationResult = Aggregation.project("_id")
+//                .and("_id").as("time")
+//                .and("data").as("dataList");
+//
+//        SortOperation sortOperation = Aggregation.sort(Sort.Direction.DESC, "time");
+//
+//        Aggregation aggregation = Aggregation.newAggregation(
+//                matchOperation,
+//                groupOperation,
+//                projectionOperationResult,
+//                sortOperation
+//        );
+//
+//        PageDomain pageDomain = TableSupport.buildPageRequest();
+//        IPage<QxzDataListDto> qxzDataListDtoIPage = mongoService.aggregate(IotYfqxzdata.class, aggregation, QxzDataListDto.class, pageDomain);
+//        //查出该设备的“自定义要素信息列表”
+//        IotDevicefactor param = new IotDevicefactor();
+//        param.setDevBid(devBid);
+//        List<IotDevicefactor> factorList = iotDevicefactorService.selectIotDevicefactorList(param);
+//
+//        List<List<IotQxzDataListRseVo>> rest = new ArrayList<>();
+//        for(QxzDataListDto item: qxzDataListDtoIPage.getRecords()){
+//            List<QxzDataDto> dataList = item.getDataList();
+//            List<IotQxzDataListRseVo> iotQxzDataListRseVoList = ElementFactorUtil.qxzListProcessData(dataList, factorList, findDevice, isDisable);
+//            rest.add(iotQxzDataListRseVoList);
+//        }
+//        rspData.setData(rest);
+//        rspData.setTotal(qxzDataListDtoIPage.getTotal());
+//        return rspData;
+//    }
+//
+//    /**
+//     * 获取折线图数据列表接口
+//     * @param reqVo
+//     */
+//    public List<IotQxzDataListRseVo> chartList(IotDeviceQxzDataListReqVo reqVo) throws ParseException {
+//
+//        //1、查出总条数 2、查出“符合条件的、当前页的”数据 3、json结构重组(如果需要的话) 4、附加 要素自定义 信息
+//
+//        String devBid = reqVo.getDevBid();
+//        if(StringUtils.isEmpty(devBid)){
+//            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备标识不能为空");
+//        }
+//
+//        IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());
+//
+//        String startDate = reqVo.getStartTime();
+//        String endDate = reqVo.getEndTime();
+//        String unit = "day";
+//
+//        Criteria criteria = new Criteria().and("devBid").is(devBid);
+//
+//        //必须设置起止时间
+//        if(StringUtils.isNotEmpty(startDate) && StringUtils.isNotEmpty(endDate)){
+//            //限制 起止时间
+//            criteria = criteria.andOperator(
+//                    Criteria.where("time").gte(DateUtils.parseDate(startDate)),
+//                    Criteria.where("time").lte(DateUtils.parseDate(endDate))
+//            );
+//            //选择 数据粒度
+//            unit = MongoUtil.getDateTruncUnit(startDate, endDate);
+//        }
+//
+//        MatchOperation matchOperation = Aggregation.match(criteria);
+//
+//        ProjectionOperation projectionOperation = Aggregation.project()
+//                .and("eName").as("eName")
+//                .and("eNum").as("eNum")
+//                .and("eKey").as("eKey")
+//                .andExpression("{$convert: {input: '$eValue', to: 'double', onError: -99, onNull: -99}}").as("eValue")
+//                .andExpression("{$dateTrunc: {date: {$toDate: '$time'}, unit:'" + unit + "'}}").as("time");
+//
+//        GroupOperation groupOperation = Aggregation.group("eName", "eNum", "eKey")
+//                .push("$$ROOT").as("data");
+//
+//        UnwindOperation unwindOperation = Aggregation.unwind("$data");
+//        GroupOperation groupOperation2 = Aggregation.group("data.eName", "data.eNum", "data.eKey", "data.time")
+//                .avg("data.eValue").as("eValue");
+//
+//        SortOperation sortOperation = Aggregation.sort(Sort.Direction.ASC, "_id.time");
+//        JSONArray roundArray = new JSONArray();
+//        roundArray.add("$eValue");
+//        roundArray.add(2);
+//        Map<String, Object> roundMap = new HashMap<>();
+//        roundMap.put("$round", roundArray);
+//        Map<String, Object> pushMapStr = new HashMap<>();
+//        pushMapStr.put("$toString", roundMap);
+//
+//        Map<String, Object> pushMap = new HashMap<>();
+//        pushMap.put("number", pushMapStr);
+//        pushMap.put("time", "$_id.time");
+//
+//        GroupOperation groupOperation3 = Aggregation.group("_id.eName", "_id.eNum", "_id.eKey")
+//                .push(pushMap).as("dataList");
+//
+//        ProjectionOperation projectionOperation2 = Aggregation.project()
+//                .and("eName").as("eName")
+//                .and("eNum").as("eNum")
+//                .and("eKey").as("eKey")
+//                .and("dataList").as("dataList");
+//        SortOperation sortOperation2 = Aggregation.sort(Sort.Direction.ASC, "eKey");
+//
+//        Aggregation aggregation = Aggregation.newAggregation(
+//                matchOperation,
+//                projectionOperation,
+//                groupOperation,
+//                unwindOperation,
+//                groupOperation2,
+//                sortOperation,
+//                groupOperation3,
+//                projectionOperation2,
+//                sortOperation2
+//        );
+//        List<QxzDataDto> dataList = mongoService.aggregate(IotYfqxzdata.class, aggregation, QxzDataDto.class);
+//
+//        //查出该设备的“自定义要素信息列表”
+//        IotDevicefactor param = new IotDevicefactor();
+//        param.setDevBid(devBid);
+//        List<IotDevicefactor> factorList = iotDevicefactorService.selectIotDevicefactorList(param);
+//        List<IotQxzDataListRseVo> iotQxzDataListRseVoList = ElementFactorUtil.qxzChartProcessData(dataList, factorList, findDevice, false);
+//        return iotQxzDataListRseVoList;
+//    }
+//
+//    /**
+//     * 获取24小时数据列表接口
+//     * @param reqVo
+//     * @return
+//     */
+//    public List<IotQxzDataListRseVo> dataList24h(IotDeviceQxzDataListReqVo reqVo){
+//        String devBid = reqVo.getDevBid();
+//        long endTime = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.dateNow()).getTime();
+//        long begintime = endTime-86400000;
+//
+//        IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());
+//
+//        Criteria criteria = new Criteria().and("devBid").is(devBid);
+//        criteria = criteria.andOperator(
+//                Criteria.where("time").gte(new Date(begintime)),
+//                Criteria.where("time").lte(new Date(endTime))
+//        );
+//        MatchOperation matchOperation = Aggregation.match(criteria);
+//        AddFieldsOperation addFieldsOperation = Aggregation.addFields()
+//                .addField("eValueNum")
+//                .withValueOfExpression("{$convert: {input: '$eValue', to: 'double', onError: -99, onNull: -99}}")
+//                .build();
+//
+//        SortOperation sortOperation = Aggregation.sort(Sort.Direction.ASC, "eValueNum");
+//
+//        GroupOperation groupOperation = Aggregation.group("eNum", "eName", "eKey")
+//                .push("$$ROOT").as("data");
+//        SortOperation sortOperation2 = Aggregation.sort(Sort.Direction.ASC, "data.eValueNum")
+//                .and(Sort.Direction.ASC, "data.time");
+//
+//        ProjectionOperation projectionOperationResult = Aggregation.project("_id")
+//                .and("_id").as("elem")
+//                .andExpression("{$last: '$data'}").as("max_data")
+//                .andExpression("{$first: '$data'}").as("min_data");
+//
+//        ProjectionOperation projectionOperationResult2 = Aggregation.project("_id")
+//                .and("elem").as("elem")
+//                .and("elem.eNum").as("eNum")
+//                .and("elem.eName").as("eName")
+//                .and("elem.eKey").as("eKey")
+//                .and("max_data.eValue").as("maxVal")
+//                .and("max_data.time").as("maxValdate")
+//                .and("min_data.eValue").as("minVal")
+//                .and("min_data.time").as("minValdate");
+//
+//        SortOperation sortOperation3 = Aggregation.sort(Sort.Direction.ASC, "eNum")
+//                .and(Sort.Direction.ASC, "eName")
+//                .and(Sort.Direction.ASC, "eKey");
+//
+//        Aggregation aggregation = Aggregation.newAggregation(
+//                matchOperation,
+//                addFieldsOperation,
+//                sortOperation,
+//                groupOperation,
+//                sortOperation2,
+//                projectionOperationResult,
+//                projectionOperationResult2,
+//                sortOperation3
+//        );
+//
+//        List<QxzDataLast24hDto> qxzDataLast24hDtoList = mongoService.aggregate(IotYfqxzdata.class, aggregation, QxzDataLast24hDto.class);
+//        //查出该设备的“自定义要素信息列表”
+//        IotDevicefactor param = new IotDevicefactor();
+//        param.setDevBid(devBid);
+//        List<IotDevicefactor> factorList = iotDevicefactorService.selectIotDevicefactorList(param);
+//        Map<String, QxzDataLast24hDto> iotXphLast24hDtoMap = new HashMap<>();
+//        List<QxzDataDto> dataList = new ArrayList<>();
+//        for(QxzDataLast24hDto item: qxzDataLast24hDtoList){
+//            String key = ElementFactorUtil.getAddress(item.getEName(), item.getEKey());
+//            iotXphLast24hDtoMap.put(key, item);
+//            QxzDataDto dto = new QxzDataDto();
+//            BeanUtils.copyProperties(item, dto);
+//            dataList.add(dto);
+//        }
+//
+//        List<IotQxzDataListRseVo> iotQxzDataListRseVoList = ElementFactorUtil.qxzListProcessData(dataList, factorList, findDevice, false);
+//        for(IotQxzDataListRseVo item: iotQxzDataListRseVoList){
+//            QxzDataLast24hDto qxzDataLast24hDto = iotXphLast24hDtoMap.get(item.getAddress());
+//            item.setMinVal(qxzDataLast24hDto.getMinVal());
+//            item.setMinValdate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, qxzDataLast24hDto.getMinValdate()));
+//            item.setMaxVal(qxzDataLast24hDto.getMaxVal());
+//            item.setMaxValdate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, qxzDataLast24hDto.getMaxValdate()));
+//        }
+//        return iotQxzDataListRseVoList;
+//    }
+//
+//    /**
+//     * 获取最近数据列表接口
+//     * @param reqVo
+//     * @return
+//     */
+//    public IotDevicelasteddata dataLatest(IotDeviceQxzDataListReqVo reqVo) throws ParseException {
+//        String devBid = reqVo.getDevBid();
+//
+//        IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());
+//        TableDataInfo tableDataInfo = dataList(reqVo, false, true);
+//        List<List<IotQxzDataListRseVo>> rest = (List<List<IotQxzDataListRseVo>>) tableDataInfo.getData();
+//        if(rest == null || rest.isEmpty()){
+//            log.info("devBid:{},【最近数据】empty",devBid);
+//            return null;
+//        }
+//
+//        List<IotQxzDataListRseVo> iotQxzDataListRseVoList = rest.get(0);
+//        IotQxzDataListRseVo iotQxzDataListRseVo = iotQxzDataListRseVoList.get(0);
+//        IotDevicelasteddata latestData = new IotDevicelasteddata();
+//        BeanUtils.copyProperties(findDevice, latestData);
+//        latestData.setDevldCreateddate(iotQxzDataListRseVo.getTime());
+//        latestData.setDevldUpdateddate(iotQxzDataListRseVo.getTime());
+//        latestData.setDevldContent(JSONArray.toJSONString(iotQxzDataListRseVoList));
+//        return latestData;
+//    }
+//
+//    /**
+//     * 刷新指令集
+//     * @param reqVo
+//     */
+//    public void refresh(DeviceRefreshDto reqVo) {
+//
+//        IotDevice findDevice = reqVo.getIotDevice();
+//        String devBid = findDevice.getDevBid();
+//        log.info("创建【“刷新”指令集任务】,设备类型:{}", findDevice.getDevtypeName());
+//        JSONObject ext = new JSONObject();
+//        ext.put("type", "data");
+//        JSONObject payload = new JSONObject();
+//        payload.put("cmd", "read");
+//        payload.put("ext", ext);
+//        IotDeviceconfig iotDeviceconfig = new IotDeviceconfig();
+//        iotDeviceconfig.setTid(findDevice.getTid());
+//        iotDeviceconfig.setDevBid(devBid);
+//        iotDeviceconfig.setDevcfgContext(JSONUtils.toJSONString(payload));
+//
+//        CmdGroupModel cmdGroupModel = iIotDeviceconfigService.createRefreshCmd(iotDeviceconfig);
+//
+//        // 构建日志需要用的内容
+//        cmdGroupModel.setRequestId(IdUtils.fastUUID());
+//        cmdGroupModel.setDevCode(findDevice.getDevCode());
+//        cmdGroupModel.setCtBiztype("3");
+//        cmdGroupModel.setCtDevtype(findDevice.getDevtypeBid());
+//        cmdGroupModel.setCtBiztitle(findDevice.getDevtypeName() + ":" + findDevice.getDevCode());
+//        cmdGroupModel.setCtParam("设备id:"+devBid);
+//        iIotCmdtaskService.handInternalCmd(cmdGroupModel);
+//        String taskUuid = cmdGroupModel.getTaskUuid();
+//        log.info("【“刷新”指令集任务】创建成功,taskUuid:{}", taskUuid);
+//    }
+//
+//
+//}