|
|
@@ -1,17 +1,12 @@
|
|
|
package com.xunmei.mediator.api.service;
|
|
|
|
|
|
-import cn.hutool.core.collection.ListUtil;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
-import com.baomidou.dynamic.datasource.annotation.DS;
|
|
|
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
-import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.xunmei.common.core.constant.SecurityConstants;
|
|
|
import com.xunmei.common.core.domain.iot.domain.IotDevice;
|
|
|
import com.xunmei.common.core.domain.mediator.domain.*;
|
|
|
@@ -19,27 +14,26 @@ import com.xunmei.common.core.enums.CategoryDataEnum;
|
|
|
import com.xunmei.common.core.util.BeanHelper;
|
|
|
import com.xunmei.common.core.utils.DateUtils;
|
|
|
import com.xunmei.common.core.utils.IDHelper;
|
|
|
-import com.xunmei.mediator.api.mapper.*;
|
|
|
+import com.xunmei.mediator.api.mapper.MediatorAlarmRuleExpressMapper;
|
|
|
+import com.xunmei.mediator.api.mapper.MediatorAlarmRuleMapper;
|
|
|
+import com.xunmei.mediator.api.mapper.MediatorAlarmSystemFieldMapper;
|
|
|
+import com.xunmei.mediator.api.mapper.MediatorTimeTemplateMapper;
|
|
|
import com.xunmei.mediator.domain.dto.redis.RedisKey;
|
|
|
-import com.xunmei.mediator.util.RedisUtil;
|
|
|
-import com.xunmei.system.api.RemoteDeviceService;
|
|
|
import com.xunmei.system.api.RemoteOrgService;
|
|
|
-import com.xunmei.system.api.domain.SysDevice;
|
|
|
import com.xunmei.system.api.domain.SysOrg;
|
|
|
import com.xunmei.system.api.domain.north.MediatorDeviceData;
|
|
|
import com.xunmei.system.api.domain.north.MediatorProductDevice;
|
|
|
import com.xunmei.system.api.domain.north.NorthError;
|
|
|
-import com.xunmei.system.api.dto.device.DeviceData;
|
|
|
import com.xunmei.system.api.dto.device.DeviceDto;
|
|
|
-import com.xunmei.system.api.dto.device.DeviceReceivePageDto;
|
|
|
-import com.xunmei.system.api.enums.*;
|
|
|
+import com.xunmei.system.api.enums.DataType;
|
|
|
+import com.xunmei.system.api.enums.DeviceType;
|
|
|
+import com.xunmei.system.api.enums.ElectricityMeterAttributes;
|
|
|
+import com.xunmei.system.api.enums.ProductTypeEnum;
|
|
|
import com.xunmei.system.api.util.LogUtils;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
-import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Propagation;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
@@ -95,7 +89,7 @@ public class EquipmentSyncService {
|
|
|
* @param
|
|
|
*/
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void saveDeviceData(List<DeviceReceivePageDto> pages) {
|
|
|
+ public void saveDeviceData( List<DeviceDto> pages,String msgId, String branchId) {
|
|
|
|
|
|
String key = "base_info_equipment_" + DateUtil.format(new Date(), "yyyy-MM-dd");
|
|
|
/**
|
|
|
@@ -127,15 +121,9 @@ public class EquipmentSyncService {
|
|
|
Map<String, MediatorCategory> categorys = new HashMap<>();
|
|
|
List<IotDevice> olds = new ArrayList();
|
|
|
List<IotDevice> list = new ArrayList<>();
|
|
|
- for (int i = 0; i < pages.size(); i++) {
|
|
|
- DeviceReceivePageDto page = pages.get(i);
|
|
|
- if (page == null) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- Map<String, List<IotDevice>> rel = analysisDeviceList(page, orgs, categorys);
|
|
|
- olds.addAll(rel.get("olds"));
|
|
|
- list.addAll(rel.get("list"));
|
|
|
- }
|
|
|
+ Map<String, List<IotDevice>> rel = analysisDeviceList(pages, orgs, categorys,msgId,branchId);
|
|
|
+ olds.addAll(rel.get("olds"));
|
|
|
+ list.addAll(rel.get("list"));
|
|
|
//第一步逻辑删除数据,逻辑删除
|
|
|
this.iIotDeviceService.updateDeviceDeleted();
|
|
|
|
|
|
@@ -170,18 +158,15 @@ public class EquipmentSyncService {
|
|
|
/**
|
|
|
* 解析每一页的数据
|
|
|
*
|
|
|
- * @param page
|
|
|
+ * @param
|
|
|
* @return
|
|
|
*/
|
|
|
- private Map<String, List<IotDevice>> analysisDeviceList(DeviceReceivePageDto page, Map<String, Map<String, Object>> orgs, Map<String, MediatorCategory> categorys) {
|
|
|
+ private Map<String, List<IotDevice>> analysisDeviceList(List<DeviceDto> dtos, Map<String, Map<String, Object>> orgs, Map<String, MediatorCategory> categorys,String msgId, String branchId) {
|
|
|
Map<String, List<IotDevice>> rel = new HashMap<>();
|
|
|
|
|
|
/**
|
|
|
* 验证数据正确性,有错误的数据,存储到错误数据中
|
|
|
*/
|
|
|
- String msgId = page.getMsgId();
|
|
|
- String branchId = page.getBranchId();
|
|
|
- List<DeviceDto> dtos = page.getData();
|
|
|
Iterator var2 = dtos.iterator();
|
|
|
List<NorthError> errors = new ArrayList<>();
|
|
|
List<IotDevice> list = new ArrayList<>();
|
|
|
@@ -395,48 +380,6 @@ public class EquipmentSyncService {
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 按页码缓存数据,且判断数据是否已经完整
|
|
|
- *
|
|
|
- * @param pageData
|
|
|
- * @return
|
|
|
- */
|
|
|
- public List<DeviceReceivePageDto> isCompleted(DeviceReceivePageDto pageData) {
|
|
|
- String packageGuid = pageData.getPackageGuid();
|
|
|
- Long currPage = pageData.getCurrPage();
|
|
|
- Long totalPage = pageData.getTotalPage();
|
|
|
-
|
|
|
- //生成当前页的redis key值,判断是否已经获取到该分页数据,
|
|
|
- //若没有获取到,则存入当前页数据,获取到了则继续判断是否拿到所有的数据,
|
|
|
- //如果拿到了所有的数据则开始处理数据
|
|
|
- String currPageKey = packageGuid + "_" + currPage;
|
|
|
- Boolean isExist = stringRedisTemplate.hasKey(currPageKey);
|
|
|
- if (Boolean.FALSE.equals(isExist)) {
|
|
|
- String data = JSON.toJSONString(pageData);
|
|
|
- stringRedisTemplate.opsForValue().set(currPageKey, data);
|
|
|
- stringRedisTemplate.expire(currPageKey, 1, TimeUnit.DAYS);
|
|
|
- }
|
|
|
- List<String> allPageKeyList = new ArrayList<>();
|
|
|
- for (int i = 1; i <= totalPage; i++) {
|
|
|
- String everyPageKey = packageGuid + "_" + i;
|
|
|
- allPageKeyList.add(everyPageKey);
|
|
|
- }
|
|
|
- //判断是否拿到所有的数据
|
|
|
- final List<Boolean> list = allPageKeyList.stream().map(key -> stringRedisTemplate.hasKey(key)).distinct().collect(Collectors.toList());
|
|
|
- if (list.contains(Boolean.FALSE)){
|
|
|
- return ListUtil.empty();
|
|
|
- }
|
|
|
- return allPageKeyList.stream().map(k -> {
|
|
|
- String obj = this.stringRedisTemplate.opsForValue().get(k);
|
|
|
- if (ObjectUtil.isNotEmpty(obj)) {
|
|
|
- this.stringRedisTemplate.delete(k);
|
|
|
- return JSON.parseObject(obj, DeviceReceivePageDto.class);
|
|
|
- }
|
|
|
- return null;
|
|
|
- }).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void analysisItem(MediatorDeviceData deviceData) throws ParseException {
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|