|
|
@@ -0,0 +1,1384 @@
|
|
|
+package com.usky.iot.service.impl;
|
|
|
+
|
|
|
+
|
|
|
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
|
|
+import cn.afterturn.easypoi.excel.ExcelImportUtil;
|
|
|
+import cn.afterturn.easypoi.excel.entity.ExportParams;
|
|
|
+import cn.afterturn.easypoi.excel.entity.ImportParams;
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
+import cn.hutool.core.date.DateTime;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.mysql.cj.x.protobuf.MysqlxDatatypes;
|
|
|
+import com.usky.backend.client.DataQueryClient;
|
|
|
+import com.usky.backend.client.DeviceDataClient;
|
|
|
+import com.usky.backend.domain.*;
|
|
|
+import com.usky.backend.domain.response.DataRealTimeResponseVO;
|
|
|
+import com.usky.common.core.bean.ApiResult;
|
|
|
+import com.usky.common.core.bean.CommonPage;
|
|
|
+import com.usky.common.core.exception.BusinessException;
|
|
|
+import com.usky.common.core.util.BeanMapperUtils;
|
|
|
+import com.usky.common.core.util.UUIDUtils;
|
|
|
+import com.usky.common.mybatis.core.AbstractCrudService;
|
|
|
+import com.usky.demo.RemoteTsdbProxyService;
|
|
|
+import com.usky.demo.domain.LastInnerQueryVO;
|
|
|
+import com.usky.demo.domain.LastInnerResultVO;
|
|
|
+import com.usky.iot.domain.*;
|
|
|
+import com.usky.common.security.utils.SecurityUtils;
|
|
|
+import com.usky.iot.mapper.DmpDeviceInfoMapper;
|
|
|
+import com.usky.iot.mapper.DmpProductAttributeMapper;
|
|
|
+import com.usky.iot.service.BaseFacilityDeviceService;
|
|
|
+import com.usky.iot.service.DmpDeviceInfoService;
|
|
|
+import com.usky.iot.service.DmpDeviceStatusService;
|
|
|
+import com.usky.iot.service.DmpProductAttributeService;
|
|
|
+import com.usky.iot.service.enums.TopicInfo;
|
|
|
+import com.usky.iot.service.vo.*;
|
|
|
+import com.usky.transfer.RemoteTransferService;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.poi.ss.usermodel.Workbook;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
+import sun.net.dns.ResolverConfiguration;
|
|
|
+
|
|
|
+import javax.servlet.ServletOutputStream;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.io.IOException;
|
|
|
+import java.text.DecimalFormat;
|
|
|
+import java.time.Instant;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneOffset;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * <p>
|
|
|
+ * 设备信息表 服务实现类
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @author ya
|
|
|
+ * @since 2022-10-08
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+public class DmpDeviceInfoServiceImpl extends AbstractCrudService<DmpDeviceInfoMapper, DmpDeviceInfo> implements DmpDeviceInfoService {
|
|
|
+ @Autowired
|
|
|
+ private DmpDeviceStatusService dmpDeviceStatusService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DmpProductAttributeService dmpProductAttributeService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private BaseFacilityDeviceService baseFacilityDeviceService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DeviceDataClient deviceDataClient;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DataQueryClient dataQueryClient;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RemoteTransferService remoteTransferService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DmpProductAttributeMapper dmpProductAttributeMapper;
|
|
|
+
|
|
|
+ private static final String ALARM_HTTP_URL = "/service-alarm/baseAlarm/alarmInfo";
|
|
|
+
|
|
|
+ private RemoteTsdbProxyService remoteTsdbProxyService;
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, Object> control(String productCode, String deviceUuid, String commandCode, String commandValue, String domain, Long userId, String userName) {
|
|
|
+ Integer tenantId;
|
|
|
+ long commandUserId;
|
|
|
+ String commandUserName;
|
|
|
+ if (StringUtils.isNotBlank(domain)) {
|
|
|
+ tenantId = baseMapper.sysTenantId(domain);
|
|
|
+ commandUserId = userId;
|
|
|
+ commandUserName = userName;
|
|
|
+ } else {
|
|
|
+ tenantId = SecurityUtils.getTenantId();
|
|
|
+ commandUserId = SecurityUtils.getUserId();
|
|
|
+ commandUserName = SecurityUtils.getUsername();
|
|
|
+ }
|
|
|
+//
|
|
|
+// //人员设备权限校验,校验通过,可以下发命令控制设备
|
|
|
+// Integer fid = baseMapper.getMeetingFaceData(commandUserId);
|
|
|
+// if(fid == null){
|
|
|
+// throw new BusinessException("人脸卡号信息未注册");
|
|
|
+// }
|
|
|
+// Integer[] deviceFid = baseMapper.getMeetingFaceDeviceList(fid);
|
|
|
+// if(deviceFid.length == 0){
|
|
|
+// throw new BusinessException("人员未绑定设备,请检查");
|
|
|
+// }
|
|
|
+//
|
|
|
+// LambdaQueryWrapper<DmpDeviceInfo> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+// queryWrapper.select(DmpDeviceInfo::getId)
|
|
|
+// .eq(DmpDeviceInfo::getDeviceId,deviceUuid)
|
|
|
+// .eq(DmpDeviceInfo::getDeleteFlag,0);
|
|
|
+// DmpDeviceInfo one = this.getOne(queryWrapper);
|
|
|
+// if(one != null){
|
|
|
+// boolean exist = Arrays.asList(deviceFid).contains(one.getId());
|
|
|
+// if(!exist){
|
|
|
+// throw new BusinessException("暂无权限");
|
|
|
+// }
|
|
|
+// }else{
|
|
|
+// throw new BusinessException("设备未注册,请先注册");
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("method", "control");
|
|
|
+ Map<String, Object> map1 = new HashMap<>();
|
|
|
+ map1.put("commandCode", commandCode);
|
|
|
+ map1.put("commandValue", commandValue);
|
|
|
+ map.put("params", map1);
|
|
|
+
|
|
|
+ return remoteTransferService.deviceControl(productCode, deviceUuid, JSON.toJSONString(map), tenantId, commandUserId, commandUserName);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public CommonPage<DmpTopicResponseVO> topic(DmpTopicRequestVO requestVO) {
|
|
|
+
|
|
|
+ String productCode = requestVO.getProductCode();
|
|
|
+ String deviceId = requestVO.getDeviceId();
|
|
|
+ String deviceUuid = requestVO.getDeviceUuid();
|
|
|
+ String deviceName = requestVO.getDeviceName();
|
|
|
+ String simCode = requestVO.getSimCode();
|
|
|
+ String installAddress = requestVO.getInstallAddress();
|
|
|
+ Integer productId = requestVO.getProductId();
|
|
|
+ Integer pageNum = requestVO.getPageNum();
|
|
|
+ Integer pageSize = requestVO.getPageSize();
|
|
|
+
|
|
|
+ pageNum = (pageNum != null) ? pageNum : 1;
|
|
|
+ pageSize = (pageSize != null) ? pageSize : 10;
|
|
|
+
|
|
|
+ List<DmpTopicResponseVO> responseVOList = new ArrayList<>();
|
|
|
+ String topicType = requestVO.getTopicType();
|
|
|
+
|
|
|
+ if (topicType == null) {
|
|
|
+ if (StringUtils.isBlank(productCode)) {
|
|
|
+ throw new BusinessException("产品编码“productCode”不能为空!");
|
|
|
+ } else if (StringUtils.isBlank(deviceId)) {
|
|
|
+ throw new BusinessException("设备编号“deviceId”不能为空!");
|
|
|
+ } else if (StringUtils.isBlank(deviceUuid)) {
|
|
|
+ throw new BusinessException("设备uuid“deviceUuid“不能为空!");
|
|
|
+ }
|
|
|
+
|
|
|
+ DmpTopicResponseVO add = new DmpTopicResponseVO();
|
|
|
+ add.setTopic("/" + productCode + "/" + deviceId + "/" + TopicInfo.ADD_REMARKS.getLetter());
|
|
|
+ add.setPublisher(TopicInfo.GATEWAY_DEVICE.getValue());
|
|
|
+ add.setSubscriber(TopicInfo.IOT_PLATFORM.getValue());
|
|
|
+ add.setRemarks(TopicInfo.ADD_REMARKS.getValue());
|
|
|
+ responseVOList.add(add);
|
|
|
+
|
|
|
+ DmpTopicResponseVO info = new DmpTopicResponseVO();
|
|
|
+ info.setTopic("/" + productCode + "/" + deviceId + "/" + TopicInfo.INFO_REMARKS.getLetter());
|
|
|
+ info.setPublisher(TopicInfo.GATEWAY_DEVICE.getValue());
|
|
|
+ info.setSubscriber(TopicInfo.IOT_PLATFORM.getValue());
|
|
|
+ info.setRemarks(TopicInfo.INFO_REMARKS.getValue());
|
|
|
+ responseVOList.add(info);
|
|
|
+
|
|
|
+ DmpTopicResponseVO control = new DmpTopicResponseVO();
|
|
|
+ control.setTopic("/" + deviceUuid + "/" + TopicInfo.CONTROL_REMARKS.getLetter());
|
|
|
+ control.setSubscriber(TopicInfo.GATEWAY_DEVICE.getValue());
|
|
|
+ control.setPublisher(TopicInfo.IOT_PLATFORM.getValue());
|
|
|
+ control.setRemarks(TopicInfo.CONTROL_REMARKS.getValue());
|
|
|
+ responseVOList.add(control);
|
|
|
+
|
|
|
+ DmpTopicResponseVO controlResponse = new DmpTopicResponseVO();
|
|
|
+ controlResponse.setTopic("/" + deviceUuid + "/" + TopicInfo.CONTROL_RESPONSE_REMARKS.getLetter());
|
|
|
+ controlResponse.setPublisher(TopicInfo.GATEWAY_DEVICE.getValue());
|
|
|
+ controlResponse.setSubscriber(TopicInfo.IOT_PLATFORM.getValue());
|
|
|
+ controlResponse.setRemarks(TopicInfo.CONTROL_RESPONSE_REMARKS.getValue());
|
|
|
+ responseVOList.add(controlResponse);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ switch (topicType) {
|
|
|
+ case "add":
|
|
|
+ /*if (StringUtils.isBlank(productCode)) {
|
|
|
+ throw new BusinessException("产品编码“productCode”不能为空!");
|
|
|
+ } else if (StringUtils.isBlank(deviceId)) {
|
|
|
+ throw new BusinessException("设备编号“deviceId”不能为空!");
|
|
|
+ } else if (StringUtils.isBlank(deviceName)) {
|
|
|
+ throw new BusinessException("设备名“deviceName“不能为空!");
|
|
|
+ }
|
|
|
+
|
|
|
+ DmpTopicResponseVO add = new DmpTopicResponseVO();
|
|
|
+ add.setTopic("/" + productCode + "/" + deviceId + "/" + TopicInfo.ADD_REMARKS.getLetter());
|
|
|
+ add.setPublisher(TopicInfo.GATEWAY_DEVICE.getValue());
|
|
|
+ add.setSubscriber(TopicInfo.IOT_PLATFORM.getValue());
|
|
|
+ add.setRemarks(TopicInfo.ADD_REMARKS.getValue());
|
|
|
+
|
|
|
+ // 组装topicPayload
|
|
|
+ JSONObject topicPayloadJson = new JSONObject();
|
|
|
+ topicPayloadJson.put("productCode", productCode);
|
|
|
+ topicPayloadJson.put("deviceId", deviceId);
|
|
|
+ topicPayloadJson.put("deviceName", deviceName);
|
|
|
+ if (!StringUtils.isBlank(simCode)) {
|
|
|
+ topicPayloadJson.put("simCode", simCode);
|
|
|
+ }
|
|
|
+ if (!StringUtils.isBlank(installAddress)) {
|
|
|
+ topicPayloadJson.put("installAddress", installAddress);
|
|
|
+ }
|
|
|
+ String topicPayload = topicPayloadJson.toString();
|
|
|
+ add.setTopicPayload(topicPayload);
|
|
|
+ responseVOList.add(add);*/
|
|
|
+ break;
|
|
|
+ case "info":
|
|
|
+ if (StringUtils.isBlank(productCode)) {
|
|
|
+ throw new BusinessException("产品编码“productCode”不能为空!");
|
|
|
+ } else if (productId == null) {
|
|
|
+ throw new BusinessException("产品ID“productId“不能为空!");
|
|
|
+ } else if (StringUtils.isBlank(deviceId)) {
|
|
|
+ throw new BusinessException("设备编号“deviceId”不能为空!");
|
|
|
+ }
|
|
|
+
|
|
|
+ DmpTopicResponseVO info = new DmpTopicResponseVO();
|
|
|
+ info.setTopic("/" + productCode + "/" + deviceId + "/" + TopicInfo.INFO_REMARKS.getLetter());
|
|
|
+ info.setPublisher(TopicInfo.GATEWAY_DEVICE.getValue());
|
|
|
+ info.setSubscriber(TopicInfo.IOT_PLATFORM.getValue());
|
|
|
+ info.setRemarks(TopicInfo.INFO_REMARKS.getValue());
|
|
|
+
|
|
|
+ // 组装topicPayload
|
|
|
+ JSONObject infoPayloadJson = new JSONObject();
|
|
|
+ infoPayloadJson.put("productCode", productCode);
|
|
|
+ Long timestamp = System.currentTimeMillis();
|
|
|
+ infoPayloadJson.put("timestamp", timestamp);
|
|
|
+
|
|
|
+ JSONObject metricsJson = new JSONObject();
|
|
|
+ List<DmpProductAttribute> productAttributeList = getProductAttributeList(productId);
|
|
|
+ for (DmpProductAttribute productAttribute : productAttributeList) {
|
|
|
+ metricsJson.put(productAttribute.getAttributeCode(), productAttribute.getMaximum());
|
|
|
+ }
|
|
|
+ infoPayloadJson.put("metrics", metricsJson);
|
|
|
+
|
|
|
+ JSONObject tagsJson = new JSONObject();
|
|
|
+ tagsJson.put("device_id", deviceId);
|
|
|
+ infoPayloadJson.put("tags", tagsJson);
|
|
|
+ String infoPayload = infoPayloadJson.toString();
|
|
|
+ info.setTopicPayload(infoPayload);
|
|
|
+ info.setProductAttributeList(productAttributeList);
|
|
|
+ responseVOList.add(info);
|
|
|
+ break;
|
|
|
+ case "control":
|
|
|
+ /*if (StringUtils.isBlank(deviceUuid)) {
|
|
|
+ throw new BusinessException("设备uuid“deviceUuid“不能为空!");
|
|
|
+ }else if (StringUtils.isBlank(productCode)){
|
|
|
+ throw new BusinessException("产品编码“productCode”不能为空!");
|
|
|
+ }
|
|
|
+
|
|
|
+ DmpTopicResponseVO control = new DmpTopicResponseVO();
|
|
|
+ control.setTopic("/" + deviceUuid + "/" + TopicInfo.CONTROL_REMARKS.getLetter());
|
|
|
+ control.setPublisher(TopicInfo.IOT_PLATFORM.getValue());
|
|
|
+ control.setSubscriber(TopicInfo.GATEWAY_DEVICE.getValue());
|
|
|
+ control.setRemarks(TopicInfo.CONTROL_REMARKS.getValue());
|
|
|
+
|
|
|
+ // 组装topicPayload
|
|
|
+ JSONObject controlPayloadJson = new JSONObject();
|
|
|
+
|
|
|
+ responseVOList.add(control);*/
|
|
|
+ break;
|
|
|
+ case "controlResponse":
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new BusinessException("topicType参数错误!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ int fromIndex = (pageNum - 1) * pageSize;
|
|
|
+ int toIndex = Math.min(fromIndex + pageSize, responseVOList.size());
|
|
|
+ List<DmpTopicResponseVO> paginatedList = responseVOList.subList(fromIndex, toIndex);
|
|
|
+
|
|
|
+ IPage<DmpTopicResponseVO> page = new Page<>(pageNum, pageSize);
|
|
|
+ page.setRecords(paginatedList);
|
|
|
+ page.setTotal(responseVOList.size());
|
|
|
+ return ToCommonPage(page);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取产品属性列表
|
|
|
+ *
|
|
|
+ * @param productId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private List<DmpProductAttribute> getProductAttributeList(Integer productId) {
|
|
|
+ LambdaQueryWrapper<DmpProductAttribute> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(DmpProductAttribute::getProductId, productId);
|
|
|
+ return dmpProductAttributeMapper.selectList(queryWrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取设备告警信息
|
|
|
+ *
|
|
|
+ * @param deviceId
|
|
|
+ * @param productCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public DmpHttpAlarmResponseVO alarmResponse(String deviceId, String productCode) {
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ String alarmTime = now.format(formatter);
|
|
|
+
|
|
|
+ DmpHttpAlarmResponseVO responseVO = new DmpHttpAlarmResponseVO();
|
|
|
+ JSONObject alarmPayloadJson = new JSONObject();
|
|
|
+ alarmPayloadJson.put("productCode", productCode);
|
|
|
+ alarmPayloadJson.put("deviceId", deviceId);
|
|
|
+ alarmPayloadJson.put("alarmTime", alarmTime);
|
|
|
+ alarmPayloadJson.put("alarmType", "311");
|
|
|
+ alarmPayloadJson.put("alarmObject", "烟雾报警");
|
|
|
+ alarmPayloadJson.put("alarmData", "0");
|
|
|
+ alarmPayloadJson.put("alarmAttribute", "烟雾报警");
|
|
|
+ alarmPayloadJson.put("alarmContent", "烟感");
|
|
|
+ alarmPayloadJson.put("alarmGrade", 1);
|
|
|
+ alarmPayloadJson.put("alarmAddress", "上海市青浦区华徐公路628号C幢");
|
|
|
+ String alarmPayload = alarmPayloadJson.toString();
|
|
|
+ responseVO.setAlarmPayload(alarmPayload);
|
|
|
+ responseVO.setAlarmHttpUrl(ALARM_HTTP_URL);
|
|
|
+ return responseVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void add(DmpDeviceInfo dmpDeviceInfo) {
|
|
|
+ if (checkNameUnique(dmpDeviceInfo)) {
|
|
|
+ throw new BusinessException("新增设备信息'" + dmpDeviceInfo.getDeviceId() + "'失败,设备信息已存在");
|
|
|
+ }
|
|
|
+ List<DmpProductInfo> list = baseMapper.getProductInfo(dmpDeviceInfo.getProductCode());
|
|
|
+ if (CollectionUtils.isNotEmpty(list)) {
|
|
|
+ dmpDeviceInfo.setDeviceType(list.get(0).getDeviceType());
|
|
|
+ dmpDeviceInfo.setProductId(list.get(0).getId());
|
|
|
+ dmpDeviceInfo.setCreatedBy(SecurityUtils.getUsername());
|
|
|
+ dmpDeviceInfo.setCreatedTime(LocalDateTime.now());
|
|
|
+ dmpDeviceInfo.setTenantId(SecurityUtils.getTenantId());
|
|
|
+// dmpDeviceInfo.setServiceStatus(1);
|
|
|
+ if (StringUtils.isBlank(dmpDeviceInfo.getDeviceUuid())) {
|
|
|
+ dmpDeviceInfo.setDeviceUuid(UUIDUtils.uuid());
|
|
|
+ }
|
|
|
+ this.save(dmpDeviceInfo);
|
|
|
+
|
|
|
+ DmpDeviceStatus dmpDeviceStatus = new DmpDeviceStatus();
|
|
|
+ dmpDeviceStatus.setDeviceId(dmpDeviceInfo.getDeviceId());
|
|
|
+ dmpDeviceStatus.setProductId(dmpDeviceInfo.getProductId());
|
|
|
+ dmpDeviceStatus.setDeviceStatus(2);
|
|
|
+ dmpDeviceStatus.setLastOfflineTime(LocalDateTime.now());
|
|
|
+ dmpDeviceStatus.setProductCode(dmpDeviceInfo.getProductCode());
|
|
|
+ dmpDeviceStatus.setDeviceUuid(dmpDeviceInfo.getDeviceUuid());
|
|
|
+ dmpDeviceStatusService.save(dmpDeviceStatus);
|
|
|
+ } else {
|
|
|
+ throw new BusinessException("新增设备信息'" + dmpDeviceInfo.getDeviceId() + "'失败,无对应产品信息");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void update(DmpDeviceInfo dmpDeviceInfo) {
|
|
|
+ dmpDeviceInfo.setUpdatedBy(SecurityUtils.getUsername());
|
|
|
+ dmpDeviceInfo.setUpdatedTime(LocalDateTime.now());
|
|
|
+ if (checkNameUnique(dmpDeviceInfo)) {
|
|
|
+ throw new BusinessException("修改设备信息'" + dmpDeviceInfo.getDeviceId() + "'失败,设备信息已存在");
|
|
|
+ }
|
|
|
+ this.updateById(dmpDeviceInfo);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean checkNameUnique(DmpDeviceInfo dmpDeviceInfo) {
|
|
|
+ Integer id = null == dmpDeviceInfo.getId() ? -1 : dmpDeviceInfo.getId();
|
|
|
+ LambdaQueryWrapper<DmpDeviceInfo> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper
|
|
|
+ .eq(DmpDeviceInfo::getDeviceId, dmpDeviceInfo.getDeviceId())
|
|
|
+ .eq(DmpDeviceInfo::getProductCode, dmpDeviceInfo.getProductCode())
|
|
|
+ .eq(DmpDeviceInfo::getDeleteFlag, 0)
|
|
|
+ .eq(DmpDeviceInfo::getTenantId, SecurityUtils.getTenantId());
|
|
|
+ DmpDeviceInfo one = this.getOne(queryWrapper);
|
|
|
+ return null != one && !Objects.equals(one.getId(), id);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean checkNameUnique1(DmpDeviceInfo dmpDeviceInfo, Integer tenantId) {
|
|
|
+ Integer id = null == dmpDeviceInfo.getId() ? -1 : dmpDeviceInfo.getId();
|
|
|
+ LambdaQueryWrapper<DmpDeviceInfo> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper
|
|
|
+ .eq(DmpDeviceInfo::getDeviceId, dmpDeviceInfo.getDeviceId())
|
|
|
+ .eq(DmpDeviceInfo::getProductCode, dmpDeviceInfo.getProductCode())
|
|
|
+ .eq(DmpDeviceInfo::getDeleteFlag, 0)
|
|
|
+ .eq(DmpDeviceInfo::getTenantId, tenantId);
|
|
|
+ DmpDeviceInfo one = this.getOne(queryWrapper);
|
|
|
+ return null != one && !Objects.equals(one.getId(), id);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void deviceStatus(){
|
|
|
+// log.info("定时同步设备状态和设备告警数据 start");
|
|
|
+// ApiResult<List<StatusVO>> resultList = dataQueryClient.status();
|
|
|
+// List<StatusVO> list = resultList.getData();
|
|
|
+// if(CollectionUtils.isNotEmpty(list)){
|
|
|
+// List<String> devList = new ArrayList<>();
|
|
|
+// for(int i=0;i<list.size();i++){
|
|
|
+// devList.add(list.get(i).getDeviceId());
|
|
|
+// }
|
|
|
+//
|
|
|
+// List<DmpDeviceInfo> devInfoList = new ArrayList<>();
|
|
|
+// List<BaseAlarm> baseUnAlarmList = new ArrayList<>();
|
|
|
+//// List<BaseAlarm> baseAlarmList = new ArrayList<>();
|
|
|
+// if(devList.size() > 0) {
|
|
|
+// devInfoList = baseMapper.getDeviceInfoList(devList);
|
|
|
+// baseUnAlarmList = baseMapper.getUnDeviceAlarmList(devList);
|
|
|
+//// baseAlarmList = baseMapper.getDeviceAlarmList(devList);
|
|
|
+// }
|
|
|
+//
|
|
|
+// if(CollectionUtils.isNotEmpty(devInfoList)){
|
|
|
+// for(int i=0;i<list.size();i++){
|
|
|
+// String date = list.get(i).getTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
|
+// String currentDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
|
+// LambdaUpdateWrapper<DmpDeviceStatus> updateWrapper = Wrappers.lambdaUpdate();
|
|
|
+// if(date.equals(currentDate)){
|
|
|
+// updateWrapper.set(DmpDeviceStatus::getDeviceStatus,1) //设备在线
|
|
|
+// .set(DmpDeviceStatus::getLastOnlineTime,list.get(i).getTime())
|
|
|
+// .eq(DmpDeviceStatus::getDeviceId,list.get(i).getDeviceId())
|
|
|
+// .eq(DmpDeviceStatus::getProductCode,list.get(i).getProductCode());
|
|
|
+// //设备离线告警恢复在线自动默认处理
|
|
|
+// if(CollectionUtils.isNotEmpty(baseUnAlarmList)){
|
|
|
+// for(int j=0;j<baseUnAlarmList.size();j++){
|
|
|
+// if(list.get(i).getDeviceId().equals(baseUnAlarmList.get(j).getDeviceId()) && list.get(i).getProductCode().equals(baseUnAlarmList.get(j).getProductCode())){
|
|
|
+// LambdaUpdateWrapper<BaseAlarm> updateWrapper1 = Wrappers.lambdaUpdate();
|
|
|
+// updateWrapper1.set(BaseAlarm::getHandleStatus,1)
|
|
|
+// .set(BaseAlarm::getHandleBy,"YT_admin")
|
|
|
+// .set(BaseAlarm::getHandleTime,LocalDateTime.now())
|
|
|
+// .eq(BaseAlarm::getDeviceId,list.get(i).getDeviceId())
|
|
|
+// .eq(BaseAlarm::getHandleStatus,0)
|
|
|
+// .eq(BaseAlarm::getProductCode,list.get(i).getProductCode());
|
|
|
+// this.update(updateWrapper1);
|
|
|
+// break;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// }else{
|
|
|
+// updateWrapper.set(DmpDeviceStatus::getDeviceStatus,2) //设备离线
|
|
|
+// .set(DmpDeviceStatus::getLastOfflineTime,list.get(i).getTime())
|
|
|
+// .eq(DmpDeviceStatus::getDeviceId,list.get(i).getDeviceId())
|
|
|
+// .eq(DmpDeviceStatus::getProductCode,list.get(i).getProductCode());
|
|
|
+//
|
|
|
+// for(int j=0;j<devInfoList.size();j++){
|
|
|
+// if(list.get(i).getDeviceId().equals(devInfoList.get(j).getDeviceId()) && list.get(i).getProductCode().equals(devInfoList.get(j).getProductCode())){
|
|
|
+// int count = 0;
|
|
|
+// for(int k=0;k<baseUnAlarmList.size();k++){
|
|
|
+// if(list.get(i).getDeviceId().equals(baseUnAlarmList.get(k).getDeviceId()) && list.get(i).getProductCode().equals(baseUnAlarmList.get(k).getProductCode())){
|
|
|
+// count++;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if(count == 0){
|
|
|
+// BaseAlarm baseAlarm = new BaseAlarm();
|
|
|
+// baseAlarm.setDeviceId(list.get(i).getDeviceId());
|
|
|
+// baseAlarm.setAlarmTime(LocalDateTime.parse(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH"))+":00:00",DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
|
|
+// baseAlarm.setAlarmType("001");
|
|
|
+// baseAlarm.setAlarmObject(devInfoList.get(j).getDeviceName());
|
|
|
+// baseAlarm.setAlarmData("");
|
|
|
+// baseAlarm.setAlarmAttribute("离线告警");
|
|
|
+// baseAlarm.setAlarmContent("设备离线告警");
|
|
|
+// baseAlarm.setAlarmGrade(1);
|
|
|
+//
|
|
|
+// baseAlarm.setAlarmAddress(devInfoList.get(j).getInstallAddress());
|
|
|
+// baseAlarm.setProductCode(devInfoList.get(j).getProductCode());
|
|
|
+// this.add(baseAlarm);
|
|
|
+// }
|
|
|
+// break;
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// }
|
|
|
+// dmpDeviceStatusService.update(updateWrapper);
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// }
|
|
|
+// log.info("定时同步设备状态和设备告警数据 end");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void updateDeviceStatus(LastInnerQueryVO queryVO){
|
|
|
+ List<LastInnerResultVO> list = remoteTsdbProxyService.last(queryVO);
|
|
|
+ if(CollectionUtils.isNotEmpty(list)){
|
|
|
+ for(int i=0;i<list.size();i++){
|
|
|
+ String deviceuuid = list.get(i).getDeviceuuid();
|
|
|
+ LocalDateTime lTime = Instant.ofEpochMilli(Long.valueOf(list.get(i).getMetrics().get("time").toString())).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();
|
|
|
+ String date = lTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
|
+ String currentDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
|
+ LambdaUpdateWrapper<DmpDeviceStatus> updateWrapper = Wrappers.lambdaUpdate();
|
|
|
+ if(date.equals(currentDate)){
|
|
|
+ updateWrapper.set(DmpDeviceStatus::getDeviceStatus,1) //设备在线
|
|
|
+ .set(DmpDeviceStatus::getLastOnlineTime,lTime)
|
|
|
+ .eq(DmpDeviceStatus::getDeviceUuid,deviceuuid);
|
|
|
+
|
|
|
+ }else{
|
|
|
+ updateWrapper.set(DmpDeviceStatus::getDeviceStatus,2) //设备离线
|
|
|
+ .set(DmpDeviceStatus::getLastOnlineTime,lTime)
|
|
|
+ .eq(DmpDeviceStatus::getDeviceUuid,deviceuuid);
|
|
|
+
|
|
|
+ }
|
|
|
+ dmpDeviceStatusService.update(updateWrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public CommonPage<DmpDeviceInfo> page(DmpDeviceInfoRequest diRequest) {
|
|
|
+ List<DmpDeviceInfo> list = new ArrayList<>();
|
|
|
+ Integer total = 0;
|
|
|
+ Integer pageCurrent = diRequest.getCurrent();
|
|
|
+ Integer pageSize = diRequest.getSize();
|
|
|
+ IPage<DmpDeviceInfo> page = new Page<>(pageCurrent, pageSize);
|
|
|
+
|
|
|
+ if (diRequest.getDeviceStatus() != null) {
|
|
|
+ if (StringUtils.isNotBlank(diRequest.getDeviceId()) || StringUtils.isNotBlank(diRequest.getDeviceUuid()) || StringUtils.isNotBlank(diRequest.getDeviceName()) || diRequest.getProductId() != null || StringUtils.isNotBlank(diRequest.getProductCode()) || diRequest.getServiceStatus() != null) {
|
|
|
+ LambdaQueryWrapper<DmpDeviceInfo> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper.eq(StringUtils.isNotBlank(diRequest.getDeviceId()), DmpDeviceInfo::getDeviceId, diRequest.getDeviceId())
|
|
|
+ .eq(StringUtils.isNotBlank(diRequest.getDeviceUuid()), DmpDeviceInfo::getDeviceUuid, diRequest.getDeviceUuid())
|
|
|
+ .like(StringUtils.isNotBlank(diRequest.getDeviceName()), DmpDeviceInfo::getDeviceName, diRequest.getDeviceName())
|
|
|
+ .eq(diRequest.getProductId() != null, DmpDeviceInfo::getProductId, diRequest.getProductId())
|
|
|
+ .like(StringUtils.isNotBlank(diRequest.getProductCode()), DmpDeviceInfo::getProductCode, diRequest.getProductCode())
|
|
|
+ .eq(diRequest.getServiceStatus() != null, DmpDeviceInfo::getServiceStatus, diRequest.getServiceStatus())
|
|
|
+ .eq(DmpDeviceInfo::getDeleteFlag, 0)
|
|
|
+ .eq(DmpDeviceInfo::getTenantId, SecurityUtils.getTenantId())
|
|
|
+ .orderByDesc(DmpDeviceInfo::getId);
|
|
|
+ List<DmpDeviceInfo> list1 = this.list(queryWrapper);
|
|
|
+
|
|
|
+ if (CollectionUtils.isNotEmpty(list1)) {
|
|
|
+ List<String> devList = new ArrayList<>();
|
|
|
+ List<Integer> productIdList = new ArrayList<>();
|
|
|
+ for (int i = 0; i < list1.size(); i++) {
|
|
|
+ if (!devList.contains(list1.get(i).getDeviceId())) {
|
|
|
+ devList.add(list1.get(i).getDeviceId());
|
|
|
+ }
|
|
|
+ if (!productIdList.contains(list1.get(i).getProductId())) {
|
|
|
+ productIdList.add(list1.get(i).getProductId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (devList.size() > 0) {
|
|
|
+ LambdaQueryWrapper<DmpDeviceStatus> queryWrapper1 = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper1.in(DmpDeviceStatus::getDeviceId, devList)
|
|
|
+ .in(DmpDeviceStatus::getProductId, productIdList)
|
|
|
+ .eq(DmpDeviceStatus::getDeviceStatus, diRequest.getDeviceStatus());
|
|
|
+ List<DmpDeviceStatus> statusList = dmpDeviceStatusService.list(queryWrapper1);
|
|
|
+ if (statusList.size() > 0) {
|
|
|
+ for (int i = 0; i < list1.size(); i++) {
|
|
|
+ for (int j = 0; j < statusList.size(); j++) {
|
|
|
+ if (list1.get(i).getProductId().equals(statusList.get(j).getProductId()) && list1.get(i).getDeviceId().equals(statusList.get(j).getDeviceId())) {
|
|
|
+ list1.get(i).setDeviceStatus(statusList.get(j).getDeviceStatus());
|
|
|
+ list1.get(i).setLastOnlineTime(statusList.get(j).getLastOnlineTime());
|
|
|
+ list1.get(i).setLastOfflineTime(statusList.get(j).getLastOfflineTime());
|
|
|
+ list.add(list1.get(i));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if (list.size() > 0) {
|
|
|
+ total = list.size();
|
|
|
+ page.setTotal(total);
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer current = 0;
|
|
|
+ if (pageCurrent != null && pageSize > 0) {
|
|
|
+ current = (pageCurrent - 1) * pageSize;
|
|
|
+ }
|
|
|
+
|
|
|
+ page.setRecords(list.stream().skip(current).limit(pageSize).collect(Collectors.toList()));
|
|
|
+ } else {
|
|
|
+ LambdaQueryWrapper<DmpDeviceStatus> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper.eq(DmpDeviceStatus::getDeviceStatus, diRequest.getDeviceStatus());
|
|
|
+ List<DmpDeviceStatus> statusList = dmpDeviceStatusService.list(queryWrapper);
|
|
|
+ if (statusList.size() > 0) {
|
|
|
+ List<String> devList = new ArrayList<>();
|
|
|
+ List<Integer> productIdList = new ArrayList<>();
|
|
|
+ for (int i = 0; i < statusList.size(); i++) {
|
|
|
+ if (!devList.contains(statusList.get(i).getDeviceId())) {
|
|
|
+ devList.add(statusList.get(i).getDeviceId());
|
|
|
+ }
|
|
|
+ if (!productIdList.contains(statusList.get(i).getProductId())) {
|
|
|
+ productIdList.add(statusList.get(i).getProductId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (devList.size() > 0) {
|
|
|
+ LambdaQueryWrapper<DmpDeviceInfo> queryWrapper1 = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper1.in(DmpDeviceInfo::getDeviceId, devList)
|
|
|
+ .in(DmpDeviceInfo::getProductId, productIdList)
|
|
|
+ .eq(DmpDeviceInfo::getDeleteFlag, 0)
|
|
|
+ .eq(DmpDeviceInfo::getTenantId, SecurityUtils.getTenantId())
|
|
|
+ .orderByDesc(DmpDeviceInfo::getId);
|
|
|
+ List<DmpDeviceInfo> list1 = this.list(queryWrapper1);
|
|
|
+ if (list1.size() > 0) {
|
|
|
+ for (int i = 0; i < list1.size(); i++) {
|
|
|
+ for (int j = 0; j < statusList.size(); j++) {
|
|
|
+ if (list1.get(i).getProductId().equals(statusList.get(j).getProductId()) && list1.get(i).getDeviceId().equals(statusList.get(j).getDeviceId())) {
|
|
|
+ list1.get(i).setDeviceStatus(statusList.get(j).getDeviceStatus());
|
|
|
+ list1.get(i).setLastOnlineTime(statusList.get(j).getLastOnlineTime());
|
|
|
+ list1.get(i).setLastOfflineTime(statusList.get(j).getLastOfflineTime());
|
|
|
+ list.add(list1.get(i));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (list.size() > 0) {
|
|
|
+ total = list.size();
|
|
|
+ page.setTotal(total);
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer current = 0;
|
|
|
+ if (pageCurrent != null && pageSize > 0) {
|
|
|
+ current = (pageCurrent - 1) * pageSize;
|
|
|
+ }
|
|
|
+
|
|
|
+ page.setRecords(list.stream().skip(current).limit(pageSize).collect(Collectors.toList()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ LambdaQueryWrapper<DmpDeviceInfo> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper.eq(StringUtils.isNotBlank(diRequest.getDeviceId()), DmpDeviceInfo::getDeviceId, diRequest.getDeviceId())
|
|
|
+ .eq(StringUtils.isNotBlank(diRequest.getDeviceUuid()), DmpDeviceInfo::getDeviceUuid, diRequest.getDeviceUuid())
|
|
|
+ .like(StringUtils.isNotBlank(diRequest.getDeviceName()), DmpDeviceInfo::getDeviceName, diRequest.getDeviceName())
|
|
|
+ .eq(diRequest.getProductId() != null, DmpDeviceInfo::getProductId, diRequest.getProductId())
|
|
|
+ .like(StringUtils.isNotBlank(diRequest.getProductCode()), DmpDeviceInfo::getProductCode, diRequest.getProductCode())
|
|
|
+ .eq(diRequest.getServiceStatus() != null, DmpDeviceInfo::getServiceStatus, diRequest.getServiceStatus())
|
|
|
+ .eq(DmpDeviceInfo::getDeleteFlag, 0)
|
|
|
+ .eq(DmpDeviceInfo::getTenantId, SecurityUtils.getTenantId());
|
|
|
+
|
|
|
+ List<DmpDeviceInfo> allRecords = this.list(queryWrapper);
|
|
|
+
|
|
|
+ if (!allRecords.isEmpty()) {
|
|
|
+ List<String> devList = allRecords.stream().map(DmpDeviceInfo::getDeviceId).distinct().collect(Collectors.toList());
|
|
|
+ List<Integer> productIdList = allRecords.stream().map(DmpDeviceInfo::getProductId).distinct().collect(Collectors.toList());
|
|
|
+
|
|
|
+ LambdaQueryWrapper<DmpDeviceStatus> queryWrapper1 = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper1.in(DmpDeviceStatus::getDeviceId, devList)
|
|
|
+ .in(DmpDeviceStatus::getProductId, productIdList);
|
|
|
+
|
|
|
+ List<DmpDeviceStatus> statusList = dmpDeviceStatusService.list(queryWrapper1);
|
|
|
+
|
|
|
+ // 创建一个Map,用于快速查找设备状态
|
|
|
+ Map<String, DmpDeviceStatus> statusMap = new HashMap<>();
|
|
|
+ for (DmpDeviceStatus status : statusList) {
|
|
|
+ statusMap.put(status.getDeviceId(), status);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 重新排序设备信息,优先显示在线设备
|
|
|
+ allRecords.sort((d1, d2) -> {
|
|
|
+ DmpDeviceStatus status1 = statusMap.get(d1.getDeviceId());
|
|
|
+ DmpDeviceStatus status2 = statusMap.get(d2.getDeviceId());
|
|
|
+ Integer deviceStatus1 = status1 != null ? status1.getDeviceStatus() : 2; // 默认离线
|
|
|
+ Integer deviceStatus2 = status2 != null ? status2.getDeviceStatus() : 2; // 默认离线
|
|
|
+ // 在线设备优先(1 < 2),如果状态相同,则按id降序
|
|
|
+ return deviceStatus1.compareTo(deviceStatus2) != 0 ? deviceStatus1.compareTo(deviceStatus2) : d2.getId().compareTo(d1.getId());
|
|
|
+ });
|
|
|
+
|
|
|
+ // 填充设备状态信息
|
|
|
+ for (DmpDeviceInfo deviceInfo : allRecords) {
|
|
|
+ DmpDeviceStatus status = statusMap.get(deviceInfo.getDeviceId());
|
|
|
+ if (status != null) {
|
|
|
+ deviceInfo.setDeviceStatus(status.getDeviceStatus()); // 填充设备状态
|
|
|
+ } else {
|
|
|
+ deviceInfo.setDeviceStatus(2); // 默认离线
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分页处理
|
|
|
+ int start = (pageCurrent - 1) * pageSize;
|
|
|
+ int end = Math.min(start + pageSize, allRecords.size());
|
|
|
+
|
|
|
+ // 确保 start 不超过 allRecords 的大小
|
|
|
+ if (start >= allRecords.size()) {
|
|
|
+ start = 0; // 如果 start 超出范围,重置为 0
|
|
|
+ end = Math.min(pageSize, allRecords.size()); // 重新计算 end
|
|
|
+ }
|
|
|
+
|
|
|
+ List<DmpDeviceInfo> pageRecords = allRecords.subList(start, end);
|
|
|
+ total = allRecords.size();
|
|
|
+
|
|
|
+ page.setRecords(pageRecords);
|
|
|
+ page.setTotal(total);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return new CommonPage<>(page.getRecords(), page.getTotal(), pageSize, pageCurrent);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public CommonPage<DmpDeviceInfo> pageWhite(DmpDeviceInfoRequest diRequest) {
|
|
|
+ List<DmpDeviceInfo> list = new ArrayList<>();
|
|
|
+ Integer total = 0;
|
|
|
+ Integer pageCurrent = diRequest.getCurrent();
|
|
|
+ Integer pageSize = diRequest.getSize();
|
|
|
+ IPage<DmpDeviceInfo> page = new Page<>(pageCurrent, pageSize);
|
|
|
+ Integer tenantId = 0;
|
|
|
+ String domain = diRequest.getDomain();
|
|
|
+ if (StringUtils.isNotBlank(domain)) {
|
|
|
+ tenantId = baseMapper.sysTenantId(domain);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (diRequest.getDeviceStatus() != null) {
|
|
|
+ if (StringUtils.isNotBlank(diRequest.getDeviceId()) || StringUtils.isNotBlank(diRequest.getDeviceName()) || diRequest.getProductId() != null || StringUtils.isNotBlank(diRequest.getProductCode()) || diRequest.getServiceStatus() != null) {
|
|
|
+ LambdaQueryWrapper<DmpDeviceInfo> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper.eq(StringUtils.isNotBlank(diRequest.getDeviceId()), DmpDeviceInfo::getDeviceId, diRequest.getDeviceId())
|
|
|
+ .like(StringUtils.isNotBlank(diRequest.getDeviceName()), DmpDeviceInfo::getDeviceName, diRequest.getDeviceName())
|
|
|
+ .eq(diRequest.getProductId() != null, DmpDeviceInfo::getProductId, diRequest.getProductId())
|
|
|
+ .like(StringUtils.isNotBlank(diRequest.getProductCode()), DmpDeviceInfo::getProductCode, diRequest.getProductCode())
|
|
|
+ .eq(diRequest.getServiceStatus() != null, DmpDeviceInfo::getServiceStatus, diRequest.getServiceStatus())
|
|
|
+ .eq(DmpDeviceInfo::getDeleteFlag, 0)
|
|
|
+ .eq(DmpDeviceInfo::getTenantId, tenantId)
|
|
|
+ .orderByDesc(DmpDeviceInfo::getId);
|
|
|
+ List<DmpDeviceInfo> list1 = this.list(queryWrapper);
|
|
|
+
|
|
|
+ if (CollectionUtils.isNotEmpty(list1)) {
|
|
|
+ List<String> devList = new ArrayList<>();
|
|
|
+ List<Integer> productIdList = new ArrayList<>();
|
|
|
+ for (int i = 0; i < list1.size(); i++) {
|
|
|
+ if (!devList.contains(list1.get(i).getDeviceId())) {
|
|
|
+ devList.add(list1.get(i).getDeviceId());
|
|
|
+ }
|
|
|
+ if (!productIdList.contains(list1.get(i).getProductId())) {
|
|
|
+ productIdList.add(list1.get(i).getProductId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (devList.size() > 0) {
|
|
|
+ LambdaQueryWrapper<DmpDeviceStatus> queryWrapper1 = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper1.in(DmpDeviceStatus::getDeviceId, devList)
|
|
|
+ .in(DmpDeviceStatus::getProductId, productIdList)
|
|
|
+ .eq(DmpDeviceStatus::getDeviceStatus, diRequest.getDeviceStatus());
|
|
|
+ List<DmpDeviceStatus> statusList = dmpDeviceStatusService.list(queryWrapper1);
|
|
|
+ if (statusList.size() > 0) {
|
|
|
+ for (int i = 0; i < list1.size(); i++) {
|
|
|
+ for (int j = 0; j < statusList.size(); j++) {
|
|
|
+ if (list1.get(i).getProductId().equals(statusList.get(j).getProductId()) && list1.get(i).getDeviceId().equals(statusList.get(j).getDeviceId())) {
|
|
|
+ list1.get(i).setDeviceStatus(statusList.get(j).getDeviceStatus());
|
|
|
+ list1.get(i).setLastOnlineTime(statusList.get(j).getLastOnlineTime());
|
|
|
+ list1.get(i).setLastOfflineTime(statusList.get(j).getLastOfflineTime());
|
|
|
+ list.add(list1.get(i));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if (list.size() > 0) {
|
|
|
+ total = list.size();
|
|
|
+ page.setTotal(total);
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer current = 0;
|
|
|
+ if (pageCurrent != null && pageSize > 0) {
|
|
|
+ current = (pageCurrent - 1) * pageSize;
|
|
|
+ }
|
|
|
+
|
|
|
+ page.setRecords(list.stream().skip(current).limit(pageSize).collect(Collectors.toList()));
|
|
|
+ } else {
|
|
|
+ LambdaQueryWrapper<DmpDeviceStatus> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper.eq(DmpDeviceStatus::getDeviceStatus, diRequest.getDeviceStatus());
|
|
|
+ List<DmpDeviceStatus> statusList = dmpDeviceStatusService.list(queryWrapper);
|
|
|
+ if (statusList.size() > 0) {
|
|
|
+ List<String> devList = new ArrayList<>();
|
|
|
+ List<Integer> productIdList = new ArrayList<>();
|
|
|
+ for (int i = 0; i < statusList.size(); i++) {
|
|
|
+ if (!devList.contains(statusList.get(i).getDeviceId())) {
|
|
|
+ devList.add(statusList.get(i).getDeviceId());
|
|
|
+ }
|
|
|
+ if (!productIdList.contains(statusList.get(i).getProductId())) {
|
|
|
+ productIdList.add(statusList.get(i).getProductId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (devList.size() > 0) {
|
|
|
+ LambdaQueryWrapper<DmpDeviceInfo> queryWrapper1 = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper1.in(DmpDeviceInfo::getDeviceId, devList)
|
|
|
+ .in(DmpDeviceInfo::getProductId, productIdList)
|
|
|
+ .eq(DmpDeviceInfo::getDeleteFlag, 0)
|
|
|
+ .eq(DmpDeviceInfo::getTenantId, tenantId)
|
|
|
+ .orderByDesc(DmpDeviceInfo::getId);
|
|
|
+ List<DmpDeviceInfo> list1 = this.list(queryWrapper1);
|
|
|
+ if (list1.size() > 0) {
|
|
|
+ for (int i = 0; i < list1.size(); i++) {
|
|
|
+ for (int j = 0; j < statusList.size(); j++) {
|
|
|
+ if (list1.get(i).getProductId().equals(statusList.get(j).getProductId()) && list1.get(i).getDeviceId().equals(statusList.get(j).getDeviceId())) {
|
|
|
+ list1.get(i).setDeviceStatus(statusList.get(j).getDeviceStatus());
|
|
|
+ list1.get(i).setLastOnlineTime(statusList.get(j).getLastOnlineTime());
|
|
|
+ list1.get(i).setLastOfflineTime(statusList.get(j).getLastOfflineTime());
|
|
|
+ list.add(list1.get(i));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (list.size() > 0) {
|
|
|
+ total = list.size();
|
|
|
+ page.setTotal(total);
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer current = 0;
|
|
|
+ if (pageCurrent != null && pageSize > 0) {
|
|
|
+ current = (pageCurrent - 1) * pageSize;
|
|
|
+ }
|
|
|
+
|
|
|
+ page.setRecords(list.stream().skip(current).limit(pageSize).collect(Collectors.toList()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ LambdaQueryWrapper<DmpDeviceInfo> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper.eq(StringUtils.isNotBlank(diRequest.getDeviceId()), DmpDeviceInfo::getDeviceId, diRequest.getDeviceId())
|
|
|
+ .like(StringUtils.isNotBlank(diRequest.getDeviceName()), DmpDeviceInfo::getDeviceName, diRequest.getDeviceName())
|
|
|
+ .eq(diRequest.getProductId() != null, DmpDeviceInfo::getProductId, diRequest.getProductId())
|
|
|
+ .like(StringUtils.isNotBlank(diRequest.getProductCode()), DmpDeviceInfo::getProductCode, diRequest.getProductCode())
|
|
|
+ .eq(diRequest.getServiceStatus() != null, DmpDeviceInfo::getServiceStatus, diRequest.getServiceStatus())
|
|
|
+ .eq(DmpDeviceInfo::getDeleteFlag, 0)
|
|
|
+ .eq(DmpDeviceInfo::getTenantId, tenantId)
|
|
|
+ .orderByDesc(DmpDeviceInfo::getId);
|
|
|
+ page = this.page(page, queryWrapper);
|
|
|
+ if (page.getTotal() > 0) {
|
|
|
+ List<String> devList = new ArrayList<>();
|
|
|
+ List<Integer> productIdList = new ArrayList<>();
|
|
|
+ for (int i = 0; i < page.getRecords().size(); i++) {
|
|
|
+ if (!devList.contains(page.getRecords().get(i).getDeviceId())) {
|
|
|
+ devList.add(page.getRecords().get(i).getDeviceId());
|
|
|
+ }
|
|
|
+ if (!productIdList.contains(page.getRecords().get(i).getProductId())) {
|
|
|
+ productIdList.add(page.getRecords().get(i).getProductId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (devList.size() > 0) {
|
|
|
+ LambdaQueryWrapper<DmpDeviceStatus> queryWrapper1 = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper1.in(DmpDeviceStatus::getDeviceId, devList)
|
|
|
+ .in(DmpDeviceStatus::getProductId, productIdList);
|
|
|
+ List<DmpDeviceStatus> statusList = dmpDeviceStatusService.list(queryWrapper1);
|
|
|
+ if (statusList.size() > 0) {
|
|
|
+ for (int i = 0; i < page.getRecords().size(); i++) {
|
|
|
+ for (int j = 0; j < statusList.size(); j++) {
|
|
|
+ if (page.getRecords().get(i).getProductId().equals(statusList.get(j).getProductId()) && page.getRecords().get(i).getDeviceId().equals(statusList.get(j).getDeviceId())) {
|
|
|
+ page.getRecords().get(i).setDeviceStatus(statusList.get(j).getDeviceStatus());
|
|
|
+ page.getRecords().get(i).setLastOnlineTime(statusList.get(j).getLastOnlineTime());
|
|
|
+ page.getRecords().get(i).setLastOfflineTime(statusList.get(j).getLastOfflineTime());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return new CommonPage<>(page.getRecords(), page.getTotal(), pageSize, pageCurrent);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean remove(Integer id) {
|
|
|
+ DmpDeviceInfo dmpDeviceInfo = this.getById(id);
|
|
|
+ Optional.ofNullable(dmpDeviceInfo).orElseThrow(() -> new BusinessException("设备不存在"));
|
|
|
+
|
|
|
+ // 已关联设施的不能删除
|
|
|
+ LambdaQueryWrapper<BaseFacilityDevice> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper.eq(BaseFacilityDevice::getDeviceId, dmpDeviceInfo.getDeviceId());
|
|
|
+ int count = baseFacilityDeviceService.count(queryWrapper);
|
|
|
+ if (count > 0) {
|
|
|
+ throw new BusinessException("已关联设施的不能删除");
|
|
|
+ }
|
|
|
+
|
|
|
+ dmpDeviceInfo.setDeleteFlag(1);
|
|
|
+ return this.updateById(dmpDeviceInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> deviceCollect(List<Integer> productIds) {
|
|
|
+ QueryWrapper<DmpDeviceInfo> query = Wrappers.query();
|
|
|
+ query.select("product_id as productId", "count(*) as count", "count(service_status != 1 or null) as serviceCount")
|
|
|
+ .in(CollectionUtil.isNotEmpty(productIds), "product_id", productIds)
|
|
|
+ .eq("delete_flag", 0)
|
|
|
+ .eq("tenant_id", SecurityUtils.getTenantId())
|
|
|
+ .groupBy("product_id");
|
|
|
+ return this.listMaps(query);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int deviceCountByProductId(Integer productId) {
|
|
|
+ LambdaQueryWrapper<DmpDeviceInfo> lambdaQuery = Wrappers.lambdaQuery();
|
|
|
+ lambdaQuery.eq(DmpDeviceInfo::getProductId, productId)
|
|
|
+ .eq(DmpDeviceInfo::getDeleteFlag, 0);
|
|
|
+ return this.count(lambdaQuery);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void addByFile(MultipartFile multipartFiles) {
|
|
|
+ ImportParams params = new ImportParams();
|
|
|
+ params.setHeadRows(1);
|
|
|
+ params.setTitleRows(1);
|
|
|
+ String err = "文件导入失败";
|
|
|
+ try {
|
|
|
+ List<DeviceImportVo> deviceImportVos = ExcelImportUtil.importExcel(multipartFiles.getInputStream(),
|
|
|
+ DeviceImportVo.class, params);
|
|
|
+ if (CollectionUtils.isNotEmpty(deviceImportVos)) {
|
|
|
+ int rot = 0;
|
|
|
+ for (DeviceImportVo deviceImportVo : deviceImportVos) {
|
|
|
+ DmpDeviceInfo dmpDeviceInfo = BeanMapperUtils.map(deviceImportVo, DmpDeviceInfo.class);
|
|
|
+ if (StringUtils.isBlank(dmpDeviceInfo.getDeviceId()) || StringUtils.isBlank(dmpDeviceInfo.getProductCode()) || StringUtils.isBlank(dmpDeviceInfo.getDeviceName()) || StringUtils.isBlank(dmpDeviceInfo.getInstallAddress())) {
|
|
|
+ int h = rot + 3;
|
|
|
+ err = "文件导入失败,第" + h + "行数据导入失败,必填字段不能为空";
|
|
|
+ throw new BusinessException(err);
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ this.add(dmpDeviceInfo);
|
|
|
+ } catch (Exception e) {
|
|
|
+ int h = rot + 3;
|
|
|
+ err = "文件导入失败,第" + h + "行数据导入失败";
|
|
|
+ throw new BusinessException(err);
|
|
|
+ }
|
|
|
+ rot++;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ err = "文件不能为空";
|
|
|
+ throw new BusinessException(err);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new BusinessException(err);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void importDeviceInfo(List<DmpDeviceInfo> devList) {
|
|
|
+ List<DmpDeviceStatus> dmpDeviceStatusList = new ArrayList<>();
|
|
|
+ if (CollectionUtils.isEmpty(devList)) {
|
|
|
+ throw new BusinessException("数据不能为空");
|
|
|
+ }
|
|
|
+ for (int i = 0; i < devList.size(); i++) {
|
|
|
+ List<DmpProductInfo> list = baseMapper.getProductInfo(devList.get(i).getProductCode());
|
|
|
+ if (CollectionUtils.isNotEmpty(list)) {
|
|
|
+
|
|
|
+ if (checkNameUnique1(devList.get(i), list.get(0).getTenantId())) {
|
|
|
+ throw new BusinessException("新增设备信息'" + devList.get(i).getDeviceId() + "'失败,设备信息已存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ devList.get(i).setDeviceType(list.get(0).getDeviceType());
|
|
|
+ devList.get(i).setProductId(list.get(0).getId());
|
|
|
+ devList.get(i).setCreatedBy(SecurityUtils.getUsername());
|
|
|
+ devList.get(i).setCreatedTime(LocalDateTime.now());
|
|
|
+ devList.get(i).setTenantId(list.get(0).getTenantId());
|
|
|
+ devList.get(i).setServiceStatus(1);
|
|
|
+ devList.get(i).setDeviceUuid(UUIDUtils.uuid());
|
|
|
+
|
|
|
+ DmpDeviceStatus dmpDeviceStatus = new DmpDeviceStatus();
|
|
|
+ dmpDeviceStatus.setDeviceId(devList.get(i).getDeviceId());
|
|
|
+ dmpDeviceStatus.setProductId(devList.get(i).getProductId());
|
|
|
+ dmpDeviceStatus.setDeviceStatus(2);
|
|
|
+ dmpDeviceStatus.setLastOfflineTime(LocalDateTime.now());
|
|
|
+ dmpDeviceStatus.setProductCode(devList.get(i).getProductCode());
|
|
|
+ dmpDeviceStatus.setDeviceUuid(devList.get(i).getDeviceUuid());
|
|
|
+ dmpDeviceStatusList.add(dmpDeviceStatus);
|
|
|
+ } else {
|
|
|
+ throw new BusinessException("新增设备信息'" + devList.get(i).getDeviceId() + "'失败,无对应产品信息");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.saveBatch(devList);
|
|
|
+ dmpDeviceStatusService.saveBatch(dmpDeviceStatusList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void export(DmpDeviceInfoRequest dmpDeviceInfoRequest, HttpServletResponse response) {
|
|
|
+ Workbook workbook = null;
|
|
|
+ try {
|
|
|
+ ExportParams params = new ExportParams(null, "设备列表");
|
|
|
+ workbook = ExcelExportUtil.exportBigExcel(params, DmpDeviceExcelVO.class,
|
|
|
+ (o, i) -> {
|
|
|
+ dmpDeviceInfoRequest.setCurrent(i);
|
|
|
+ dmpDeviceInfoRequest.setSize(30);
|
|
|
+ CommonPage<DmpDeviceInfo> list = this.page(dmpDeviceInfoRequest);
|
|
|
+ return new ArrayList<>(BeanMapperUtils.mapList(list.getRecords(), DmpDeviceInfo.class, DmpDeviceExcelVO.class));
|
|
|
+ }, null);
|
|
|
+ if (null != workbook) {
|
|
|
+ exportExcel(workbook, response);
|
|
|
+ } else {
|
|
|
+ throw new BusinessException("表格数据为空");
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("导出文件失败", e);
|
|
|
+ throw new BusinessException("导出文件失败" + e.getMessage());
|
|
|
+ } finally {
|
|
|
+ if (workbook != null) {
|
|
|
+ try {
|
|
|
+ workbook.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ log.error("===export spec=== 关闭workbook失败", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void exportExcel(Workbook workbook, HttpServletResponse response) {
|
|
|
+ // 定义一个流,用作流式输出
|
|
|
+ ServletOutputStream outputStream = null;
|
|
|
+ try {
|
|
|
+ // 使用流的形式传输
|
|
|
+ response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
|
|
+ // 防止中文乱码
|
|
|
+ response.setCharacterEncoding("utf-8");
|
|
|
+ outputStream = response.getOutputStream();
|
|
|
+ workbook.write(outputStream);
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ if (null != outputStream) {
|
|
|
+ try {
|
|
|
+ // 关闭流
|
|
|
+ outputStream.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取表格数据
|
|
|
+ * @param multipartFile
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<DmpDeviceInfo> getDeviceByFile(Integer productId, MultipartFile multipartFile) {
|
|
|
+ ImportParams importParams = new ImportParams();
|
|
|
+ importParams.setHeadRows(1);
|
|
|
+ try {
|
|
|
+ List<DmpDeviceExportVO> dmpDeviceExportVOS = ExcelImportUtil.importExcel(
|
|
|
+ multipartFile.getInputStream(),
|
|
|
+ DmpDeviceExportVO.class,
|
|
|
+ importParams
|
|
|
+ );
|
|
|
+ if (CollectionUtils.isEmpty(dmpDeviceExportVOS)) {
|
|
|
+ throw new BusinessException("表格数据为空");
|
|
|
+ }
|
|
|
+ List<DmpDeviceInfo> deviceInfos = BeanMapperUtils.mapList(dmpDeviceExportVOS, DmpDeviceExportVO.class, DmpDeviceInfo.class);
|
|
|
+ long count = deviceInfos.stream()
|
|
|
+ .peek(device -> {
|
|
|
+ device.setProductId(productId);
|
|
|
+ device.setDeviceId(UUIDUtils.uuid());
|
|
|
+ })
|
|
|
+ .filter(device -> StringUtils.isBlank(device.getDeviceName()) ||
|
|
|
+ StringUtils.isBlank(device.getDeviceName())
|
|
|
+ || StringUtils.isBlank(device.getSimCode())
|
|
|
+ || null == device.getSubscribeFlag()
|
|
|
+ ).count();
|
|
|
+ long count1 = deviceInfos.stream()
|
|
|
+ .collect(Collectors.toMap(DmpDeviceInfo::getDeviceName, s -> 1, Integer::sum))
|
|
|
+ .entrySet()
|
|
|
+ .stream()
|
|
|
+ .filter(entry -> entry.getValue() > 1)
|
|
|
+ .count();
|
|
|
+ if (count > 0) {
|
|
|
+ throw new BusinessException("表格字段不能为空");
|
|
|
+ }
|
|
|
+ if (count1 > 0) {
|
|
|
+ throw new BusinessException("设备名称不能重复");
|
|
|
+ }
|
|
|
+ return deviceInfos;
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new BusinessException("解析表格异常,检查表格格式" + e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public CommonPage<Object> deviceCurrentDataList(String deviceName, String installAddress, String productCode, Integer pageNum, Integer pageSize) {
|
|
|
+ List<Object> list = new ArrayList<>();
|
|
|
+
|
|
|
+ List<DmpDeviceInfo> devList = new ArrayList<>();
|
|
|
+ LambdaQueryWrapper<DmpDeviceInfo> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper.eq(DmpDeviceInfo::getDeleteFlag, 0)
|
|
|
+ .eq(DmpDeviceInfo::getTenantId, SecurityUtils.getTenantId())
|
|
|
+ .like(StringUtils.isNotBlank(deviceName), DmpDeviceInfo::getDeviceName, deviceName)
|
|
|
+ .like(StringUtils.isNotBlank(installAddress), DmpDeviceInfo::getInstallAddress, installAddress)
|
|
|
+ .eq(DmpDeviceInfo::getProductCode, productCode)
|
|
|
+ .orderByAsc(DmpDeviceInfo::getId);
|
|
|
+ devList = this.list(queryWrapper);
|
|
|
+ if (devList.size() <= 0) {
|
|
|
+ return new CommonPage<>(list, 0, pageNum, pageSize);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (devList.size() > 0) {
|
|
|
+ List<String> deviceList = new ArrayList<>();
|
|
|
+ for (int k = 0; k < devList.size(); k++) {
|
|
|
+ deviceList.add(devList.get(k).getDeviceId());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (deviceList.size() > 0) {
|
|
|
+ List<DataRealTimeResponseVO> dataRealList = deviceDataClient.data(productCode, deviceList);
|
|
|
+ if (dataRealList.size() > 0) {
|
|
|
+ for (int i = 0; i < devList.size(); i++) {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("deviceId", devList.get(i).getDeviceId());
|
|
|
+ map.put("deviceName", devList.get(i).getDeviceName());
|
|
|
+ map.put("installAddress", devList.get(i).getInstallAddress());
|
|
|
+ map.put("latestTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
|
|
+
|
|
|
+ for (int j = 0; j < dataRealList.size(); j++) {
|
|
|
+ if (devList.get(i).getProductCode().equals(dataRealList.get(j).getProductCode()) && devList.get(i).getDeviceId().equals(dataRealList.get(j).getDeviceId())) {
|
|
|
+ map.put(dataRealList.get(j).getAttributeName(), dataRealList.get(j).getAttributeData());
|
|
|
+ map.put(dataRealList.get(j).getAttributeName() + "Time", dataRealList.get(j).getDataTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ list.add(map);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Object> objectList = new ArrayList<>();
|
|
|
+ int total = 0;
|
|
|
+ if (list.size() > 0) {
|
|
|
+ total = list.size();
|
|
|
+ }
|
|
|
+ int current = 0;
|
|
|
+ if (pageNum != 0 && pageSize > 0) {
|
|
|
+ current = (pageNum - 1) * pageSize;
|
|
|
+ }
|
|
|
+
|
|
|
+ objectList = list.stream().skip(current).limit(pageSize).collect(Collectors.toList());
|
|
|
+
|
|
|
+
|
|
|
+ return new CommonPage<>(objectList, total, pageNum, pageSize);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public CommonPage<DataTVResponseVO> dataTVList(DataTVRequestVO requestVO) {
|
|
|
+ List<DataTVResponseVO> list = new ArrayList<>();
|
|
|
+
|
|
|
+ IPage<DmpDeviceInfo> page = new Page<>(requestVO.getCurrent(), requestVO.getSize());
|
|
|
+ LambdaQueryWrapper<DmpDeviceInfo> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper.select(DmpDeviceInfo::getProductId, DmpDeviceInfo::getDeviceId, DmpDeviceInfo::getDeviceName, DmpDeviceInfo::getDeviceType, DmpDeviceInfo::getInstallAddress)
|
|
|
+ .eq(DmpDeviceInfo::getTenantId, SecurityUtils.getTenantId())
|
|
|
+ .eq(DmpDeviceInfo::getDeleteFlag, 0)
|
|
|
+ .eq(requestVO.getDeviceType() != null, DmpDeviceInfo::getDeviceType, requestVO.getDeviceType())
|
|
|
+ .eq(StringUtils.isNotBlank(requestVO.getDeviceId()), DmpDeviceInfo::getDeviceId, requestVO.getDeviceId())
|
|
|
+ .orderByDesc(DmpDeviceInfo::getId);
|
|
|
+ page = this.page(page, queryWrapper);
|
|
|
+ if (page.getSize() <= 0) {
|
|
|
+ return new CommonPage<>(list, 0, requestVO.getSize(), requestVO.getCurrent());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (page.getRecords().size() > 0) {
|
|
|
+ List<String> deviceIdList = new ArrayList<>();
|
|
|
+ List<Integer> productIdList = new ArrayList<>();
|
|
|
+ for (int i = 0; i < page.getRecords().size(); i++) {
|
|
|
+ deviceIdList.add(page.getRecords().get(i).getDeviceId());
|
|
|
+ if (!productIdList.contains(page.getRecords().get(i).getProductId())) {
|
|
|
+ productIdList.add(page.getRecords().get(i).getProductId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<ProductTVAttributeVO> attributeVOList = baseMapper.attributeList(productIdList);
|
|
|
+
|
|
|
+ if (deviceIdList.size() > 0) {
|
|
|
+ LambdaQueryWrapper<DmpDeviceStatus> queryWrapper1 = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper1.in(DmpDeviceStatus::getDeviceId, deviceIdList);
|
|
|
+ List<DmpDeviceStatus> deviceStatusList = dmpDeviceStatusService.list(queryWrapper1);
|
|
|
+
|
|
|
+ List<BaseAlarm> baseAlarmList = baseMapper.baseAlarmList(deviceIdList);
|
|
|
+
|
|
|
+ List<DataRealTimeResponseVO> dataRealList = deviceDataClient.data(null, deviceIdList);
|
|
|
+ for (int i = 0; i < page.getRecords().size(); i++) {
|
|
|
+ DataTVResponseVO dataTVResponseVO = new DataTVResponseVO();
|
|
|
+ dataTVResponseVO.setDeviceId(page.getRecords().get(i).getDeviceId());
|
|
|
+ dataTVResponseVO.setDeviceName(page.getRecords().get(i).getDeviceName());
|
|
|
+ dataTVResponseVO.setDeviceType(page.getRecords().get(i).getDeviceType());
|
|
|
+ dataTVResponseVO.setInstallAddress(page.getRecords().get(i).getInstallAddress());
|
|
|
+ if (CollectionUtils.isNotEmpty(deviceStatusList)) {
|
|
|
+ for (int j = 0; j < deviceStatusList.size(); j++) {
|
|
|
+ if (page.getRecords().get(i).getDeviceId().equals(deviceStatusList.get(j).getDeviceId())) {
|
|
|
+ dataTVResponseVO.setDeviceStatus(deviceStatusList.get(j).getDeviceStatus());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (CollectionUtils.isNotEmpty(baseAlarmList)) {
|
|
|
+ for (int j = 0; j < baseAlarmList.size(); j++) {
|
|
|
+ if (page.getRecords().get(i).getDeviceId().equals(baseAlarmList.get(j).getDeviceId())) {
|
|
|
+ List<BaseAlarmVO> list1 = new ArrayList<>();
|
|
|
+ if (baseAlarmList.get(j).getAlarmType().equals("815")) {
|
|
|
+ dataTVResponseVO.setAlarmStatus(2);
|
|
|
+ } else {
|
|
|
+ dataTVResponseVO.setAlarmStatus(1);
|
|
|
+ }
|
|
|
+ BaseAlarmVO baseAlarmVO = new BaseAlarmVO();
|
|
|
+ baseAlarmVO.setAlarmContent(baseAlarmList.get(j).getAlarmContent());
|
|
|
+ baseAlarmVO.setAlarmTime((baseAlarmList.get(j).getAlarmTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
|
|
+ list1.add(baseAlarmVO);
|
|
|
+ dataTVResponseVO.setAlarmList(list1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<DeviceAttributeVO> list1 = new ArrayList<>();
|
|
|
+ if (dataRealList.size() > 0) {
|
|
|
+ for (int j = 0; j < dataRealList.size(); j++) {
|
|
|
+ if (page.getRecords().get(i).getDeviceId().equals(dataRealList.get(j).getDeviceId())) {
|
|
|
+ DeviceAttributeVO attributeVO = new DeviceAttributeVO();
|
|
|
+ attributeVO.setCode(dataRealList.get(j).getAttributeName());
|
|
|
+ attributeVO.setValue(dataRealList.get(j).getAttributeData());
|
|
|
+ attributeVO.setTime("" + dataRealList.get(j).getDataTime());
|
|
|
+ if ((attributeVOList.size() > 0)) {
|
|
|
+ for (int k = 0; k < attributeVOList.size(); k++) {
|
|
|
+ if ((dataRealList.get(j).getProductCode().equals(attributeVOList.get(k).getProductCode())) && (dataRealList.get(j).getAttributeName().equals(attributeVOList.get(k).getAttributeCode()))) {
|
|
|
+ if (Objects.nonNull(attributeVOList.get(k).getAttributeName())) {
|
|
|
+ attributeVO.setName(attributeVOList.get(k).getAttributeName());
|
|
|
+ }
|
|
|
+ if (Objects.nonNull(attributeVOList.get(k).getAttributeUnit())) {
|
|
|
+ attributeVO.setUnit(attributeVOList.get(k).getAttributeUnit());
|
|
|
+ }
|
|
|
+ if (Objects.nonNull(attributeVOList.get(k).getMaximum())) {
|
|
|
+ attributeVO.setMaximum(Math.round(attributeVOList.get(k).getMaximum() * 100) / 100f);
|
|
|
+ }
|
|
|
+ if (Objects.nonNull(attributeVOList.get(k).getMinimum())) {
|
|
|
+ attributeVO.setMinimum(Math.round(attributeVOList.get(k).getMinimum() * 100) / 100f);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ list1.add(attributeVO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dataTVResponseVO.setDp(list1);
|
|
|
+ list.add(dataTVResponseVO);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return new CommonPage<>(list, page.getTotal(), page.getSize(), page.getCurrent());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<DataTVStatisticResponseVO> dataTVStatistic(DataTVRequestVO requestVO) {
|
|
|
+ List<DataTVStatisticResponseVO> list = new ArrayList<>();
|
|
|
+ LambdaQueryWrapper<DmpDeviceInfo> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper.select(DmpDeviceInfo::getProductId, DmpDeviceInfo::getDeviceId, DmpDeviceInfo::getDeviceName, DmpDeviceInfo::getDeviceType, DmpDeviceInfo::getInstallAddress)
|
|
|
+ .eq(DmpDeviceInfo::getTenantId, SecurityUtils.getTenantId())
|
|
|
+ .eq(DmpDeviceInfo::getDeleteFlag, 0)
|
|
|
+ .eq(requestVO.getDeviceType() != null, DmpDeviceInfo::getDeviceType, requestVO.getDeviceType())
|
|
|
+ .orderByDesc(DmpDeviceInfo::getId);
|
|
|
+ List<DmpDeviceInfo> list1 = this.list(queryWrapper);
|
|
|
+ if (CollectionUtils.isNotEmpty(list1)) {
|
|
|
+ List<String> deviceIdList = new ArrayList<>();
|
|
|
+ for (int i = 0; i < list1.size(); i++) {
|
|
|
+ deviceIdList.add(list1.get(i).getDeviceId());
|
|
|
+ }
|
|
|
+ Integer alarmCount = baseMapper.baseAlarmCount(deviceIdList);
|
|
|
+ Integer faultCount = baseMapper.baseFaultCount(deviceIdList);
|
|
|
+ Integer offlineCount = baseMapper.deviceOfflineCount(deviceIdList);
|
|
|
+ DataTVStatisticResponseVO responseVO = new DataTVStatisticResponseVO();
|
|
|
+ responseVO.setAlarmNum(alarmCount);
|
|
|
+ responseVO.setFaultNum(faultCount);
|
|
|
+ responseVO.setOfflineNum(offlineCount);
|
|
|
+ list.add(responseVO);
|
|
|
+ }
|
|
|
+
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> deviceDataTotal(DataTotalRequestVO requestVO) {
|
|
|
+ List<Map<String, Object>> list = dataQueryClient.deviceDataTotal(requestVO);
|
|
|
+
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<DataAverageResponseVO> deviceDataAverage(DataAverageRequestVO requestVO) {
|
|
|
+ List<DataAverageResponseVO> list = dataQueryClient.deviceDataAverage(requestVO);
|
|
|
+
|
|
|
+ if (requestVO.getGroupType().equals("Each")) {
|
|
|
+ if (list.size() > 0) {
|
|
|
+ List<String> deviceIdList = new ArrayList<>();
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ deviceIdList.add(list.get(i).getDeviceId());
|
|
|
+ }
|
|
|
+ LambdaQueryWrapper<DmpDeviceInfo> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper.in(DmpDeviceInfo::getDeviceId, deviceIdList)
|
|
|
+ .eq(DmpDeviceInfo::getDeleteFlag, 0)
|
|
|
+ .eq(DmpDeviceInfo::getTenantId, SecurityUtils.getTenantId());
|
|
|
+ List<DmpDeviceInfo> deviceInfoList = this.list(queryWrapper);
|
|
|
+ if (CollectionUtils.isNotEmpty(deviceIdList)) {
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ for (int j = 0; j < deviceInfoList.size(); j++) {
|
|
|
+ if (list.get(i).getDeviceId().equals(deviceInfoList.get(j).getDeviceId())) {
|
|
|
+ list.get(i).setDeviceName(deviceInfoList.get(j).getDeviceName());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<DataAverageExportVO> DataAverageExport(DataAverageRequestVO requestVO) {
|
|
|
+ List<DataAverageExportVO> list = dataQueryClient.DataAverageExport(requestVO);
|
|
|
+
|
|
|
+ if (requestVO.getGroupType().equals("Each")) {
|
|
|
+ if (list.size() > 0) {
|
|
|
+ List<String> deviceIdList = new ArrayList<>();
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ deviceIdList.add(list.get(i).getDeviceName());
|
|
|
+ }
|
|
|
+ LambdaQueryWrapper<DmpDeviceInfo> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper.in(DmpDeviceInfo::getDeviceId, deviceIdList)
|
|
|
+ .eq(DmpDeviceInfo::getDeleteFlag, 0)
|
|
|
+ .eq(DmpDeviceInfo::getTenantId, SecurityUtils.getTenantId());
|
|
|
+ List<DmpDeviceInfo> deviceInfoList = this.list(queryWrapper);
|
|
|
+ if (CollectionUtils.isNotEmpty(deviceIdList)) {
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ for (int j = 0; j < deviceInfoList.size(); j++) {
|
|
|
+ if (list.get(i).getDeviceName().equals(deviceInfoList.get(j).getDeviceId())) {
|
|
|
+ list.get(i).setDeviceName(deviceInfoList.get(j).getDeviceName());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+}
|