|  | @@ -102,10 +102,9 @@ public class IotBreakerDeviceServiceImpl extends ServiceImpl<IotBreakerDeviceMap
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      private void saveBreaker(List<BreakerDeviceDto> list, List<SysOrgVO> orgList, String msgId) throws IllegalAccessException {
 | 
	
		
			
				|  |  |          //对回路信息按机构进行分组
 | 
	
		
			
				|  |  | -        // Map<String,List<BreakerDeviceDto>> listMap = breakerDeviceDtoLists.stream().collect(Collectors.groupingBy(r -> r.getOrgCode()));
 | 
	
		
			
				|  |  | -        List<IotBreaker> breakers = new ArrayList<>();
 | 
	
		
			
				|  |  | +        List<IotBreaker> insertBreakersList = new ArrayList<>();
 | 
	
		
			
				|  |  |          List<IotBreaker> listAll = breakerMapper.selectList(null);
 | 
	
		
			
				|  |  | -        List<IotBreaker> breakers1 = new ArrayList<>();
 | 
	
		
			
				|  |  | +        List<IotBreaker> updateBreakersList = new ArrayList<>();
 | 
	
		
			
				|  |  |          List<NorthError> errors = new ArrayList<>();
 | 
	
		
			
				|  |  |          NorthError error = null;
 | 
	
		
			
				|  |  |          for (BreakerDeviceDto dto : list) {
 | 
	
	
		
			
				|  | @@ -125,20 +124,26 @@ public class IotBreakerDeviceServiceImpl extends ServiceImpl<IotBreakerDeviceMap
 | 
	
		
			
				|  |  |                  continue;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              IotBreaker breaker = this.buildBreaker(dto, org);
 | 
	
		
			
				|  |  | -            if (listAll.stream().anyMatch(r -> r.getUniqueCode().equals(breaker.getUniqueCode()))) {
 | 
	
		
			
				|  |  | -                breakers1.add(breaker);
 | 
	
		
			
				|  |  | +            Optional<IotBreaker> breakerOptional = listAll.stream().filter(r -> r.getUniqueCode().equals(breaker.getUniqueCode())).findAny();
 | 
	
		
			
				|  |  | +            if (breakerOptional.isPresent()) {
 | 
	
		
			
				|  |  | +                IotBreaker iotBreaker = breakerOptional.get();
 | 
	
		
			
				|  |  | +                iotBreaker.setUpdateTime(LocalDateTime.now());
 | 
	
		
			
				|  |  | +                BeanUtils.copyProperties(breaker, iotBreaker, "id");
 | 
	
		
			
				|  |  | +                updateBreakersList.add(iotBreaker);
 | 
	
		
			
				|  |  |              } else {
 | 
	
		
			
				|  |  | -                breakers.add(breaker);
 | 
	
		
			
				|  |  | +                breaker.setCreateTime(LocalDateTime.now());
 | 
	
		
			
				|  |  | +                breaker.setUpdateTime(LocalDateTime.now());
 | 
	
		
			
				|  |  | +                insertBreakersList.add(breaker);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          northErrorService.saveErrorData(errors);
 | 
	
		
			
				|  |  |          try {
 | 
	
		
			
				|  |  |              breakerMapper.updateAllDel();
 | 
	
		
			
				|  |  | -            if (ObjectUtil.isNotEmpty(breakers)) {
 | 
	
		
			
				|  |  | -                breakerMapper.batchInsert(breakers);
 | 
	
		
			
				|  |  | +            if (ObjectUtil.isNotEmpty(insertBreakersList)) {
 | 
	
		
			
				|  |  | +                breakerMapper.batchInsert(insertBreakersList);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            if (ObjectUtil.isNotEmpty(breakers1)) {
 | 
	
		
			
				|  |  | -                breakerMapper.batchUpdate(breakers1);
 | 
	
		
			
				|  |  | +            if (ObjectUtil.isNotEmpty(updateBreakersList)) {
 | 
	
		
			
				|  |  | +                breakerMapper.batchUpdate(updateBreakersList);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          } catch (Exception e) {
 | 
	
	
		
			
				|  | @@ -176,43 +181,51 @@ public class IotBreakerDeviceServiceImpl extends ServiceImpl<IotBreakerDeviceMap
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public ReceiveErrorDto saveBreakerData(BreakerDeviceDataDto request, String msgId) throws IllegalAccessException {
 | 
	
		
			
				|  |  | +        String uniqueCode = IotBreaker.getUniqueCode(request.getOrgCode(), request.getHostCode(), request.getDeviceCode());
 | 
	
		
			
				|  |  | +        if (!RedisCheckRepeatDataUtil.checkData(uniqueCode, request.getStatus() + "", -1)) {
 | 
	
		
			
				|  |  | +            //保存拦截数据
 | 
	
		
			
				|  |  | +            this.saveBreakerDataLog(request, msgId);
 | 
	
		
			
				|  |  | +            return ReceiveErrorDto.success("数据已接受,短时间内收到相同的回路数据,处理结果忽略:拒绝处理该数据");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          //验证参数是否齐全
 | 
	
		
			
				|  |  |          List<SysOrgVO> cacheList = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
 | 
	
		
			
				|  |  | -        ReceiveErrorDto dto = checkBreakerDataInfo(request,cacheList);
 | 
	
		
			
				|  |  | -        if (dto.getSuccess()) {
 | 
	
		
			
				|  |  | -            //处理数据
 | 
	
		
			
				|  |  | -            Map<String, Object> map = this.buildBreakerAndData(request);
 | 
	
		
			
				|  |  | -            dto = (ReceiveErrorDto) map.get("errorDto");
 | 
	
		
			
				|  |  | -            if (dto.getSuccess()) {
 | 
	
		
			
				|  |  | -                IotBreakerDevice breakerDevice = (IotBreakerDevice) map.get("breakerDevice");
 | 
	
		
			
				|  |  | -                IotBreakerDeviceData breakerDeviceData = (IotBreakerDeviceData) map.get("breakerDeviceData");
 | 
	
		
			
				|  |  | -                IotBreaker breaker = (IotBreaker) map.get("breaker");
 | 
	
		
			
				|  |  | -                IotBreakerData breakerData = (IotBreakerData) map.get("breakerData");
 | 
	
		
			
				|  |  | -                IotPowerOffAlarm powerOffAlarm = (IotPowerOffAlarm) map.get("powerOffAlarm");
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                try{
 | 
	
		
			
				|  |  | -                    baseMapper.updateById(breakerDevice);
 | 
	
		
			
				|  |  | -                    breakerDeviceDataMapper.insert(breakerDeviceData);
 | 
	
		
			
				|  |  | -                    if(breaker!=null){
 | 
	
		
			
				|  |  | -                        breakerMapper.updateById(breaker);
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    if(breakerData!=null){
 | 
	
		
			
				|  |  | -                        breakerDataMapper.insert(breakerData);
 | 
	
		
			
				|  |  | -                        breakerDataLogMapper.insertDataLog(breakerData);
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    if(powerOffAlarm!=null){
 | 
	
		
			
				|  |  | -                        powerOffAlarmService.saveOrUpdate(powerOffAlarm);
 | 
	
		
			
				|  |  | -                        //如果是通电,则将他之前的所有断电记录的恢复时间设置为当前记录的恢复时间
 | 
	
		
			
				|  |  | -                        if(powerOffAlarm.getRecoveryTime()!=null){
 | 
	
		
			
				|  |  | -                            powerOffAlarmMapper.saveOrUpdateOtherPower(powerOffAlarm);
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | +        ReceiveErrorDto dto = checkBreakerDataInfo(request, cacheList);
 | 
	
		
			
				|  |  | +        if (!dto.getSuccess()) {
 | 
	
		
			
				|  |  | +            return dto;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //处理数据
 | 
	
		
			
				|  |  | +        Map<String, Object> map = this.buildBreakerAndData(request);
 | 
	
		
			
				|  |  | +        dto = (ReceiveErrorDto) map.get("errorDto");
 | 
	
		
			
				|  |  | +        if (!dto.getSuccess()) {
 | 
	
		
			
				|  |  | +            return dto;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        IotBreakerDevice breakerDevice = (IotBreakerDevice) map.get("breakerDevice");
 | 
	
		
			
				|  |  | +        IotBreakerDeviceData breakerDeviceData = (IotBreakerDeviceData) map.get("breakerDeviceData");
 | 
	
		
			
				|  |  | +        IotBreaker breaker = (IotBreaker) map.get("breaker");
 | 
	
		
			
				|  |  | +        IotBreakerData breakerData = (IotBreakerData) map.get("breakerData");
 | 
	
		
			
				|  |  | +        IotPowerOffAlarm powerOffAlarm = (IotPowerOffAlarm) map.get("powerOffAlarm");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                }catch (Exception e){
 | 
	
		
			
				|  |  | -                    LogUtils.BASE_INFO_BREAKER_DEVICE_DATA.error("保存回路数据失败:{}", e);
 | 
	
		
			
				|  |  | -                    throw new RuntimeException (e.getMessage());
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            baseMapper.updateById(breakerDevice);
 | 
	
		
			
				|  |  | +            breakerDeviceDataMapper.insert(breakerDeviceData);
 | 
	
		
			
				|  |  | +            if (breaker != null) {
 | 
	
		
			
				|  |  | +                breakerMapper.updateById(breaker);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if (breakerData != null) {
 | 
	
		
			
				|  |  | +                breakerDataMapper.insert(breakerData);
 | 
	
		
			
				|  |  | +                breakerDataLogMapper.insertDataLog(breakerData);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if (powerOffAlarm != null) {
 | 
	
		
			
				|  |  | +                powerOffAlarmService.saveOrUpdate(powerOffAlarm);
 | 
	
		
			
				|  |  | +                //如果是通电,则将他之前的所有断电记录的恢复时间设置为当前记录的恢复时间
 | 
	
		
			
				|  |  | +                if (powerOffAlarm.getRecoveryTime() != null) {
 | 
	
		
			
				|  |  | +                    powerOffAlarmMapper.saveOrUpdateOtherPower(powerOffAlarm);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        } catch (Exception e) {
 | 
	
		
			
				|  |  | +            LogUtils.BASE_INFO_BREAKER_DEVICE_DATA.error("保存回路数据失败:{}", e);
 | 
	
		
			
				|  |  | +            throw new RuntimeException(e.getMessage());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          return dto;
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -245,7 +258,10 @@ public class IotBreakerDeviceServiceImpl extends ServiceImpl<IotBreakerDeviceMap
 | 
	
		
			
				|  |  |          Map<String, Object> map = new HashMap<>();
 | 
	
		
			
				|  |  |          ReceiveErrorDto errorDto = new ReceiveErrorDto();
 | 
	
		
			
				|  |  |          QueryWrapper<IotBreakerDevice> qbreaker = new QueryWrapper<>();
 | 
	
		
			
				|  |  | -        qbreaker.lambda().eq(IotBreakerDevice::getDeviceUniqueCode, IotBreakerDevice.getUniqueCode(request.getOrgCode(), request.getHostCode(), request.getDeviceCode()));
 | 
	
		
			
				|  |  | +        qbreaker.lambda().eq(IotBreakerDevice::getDeviceUniqueCode,
 | 
	
		
			
				|  |  | +                IotBreakerDevice.getUniqueCode(request.getOrgCode(),
 | 
	
		
			
				|  |  | +                        request.getHostCode(),
 | 
	
		
			
				|  |  | +                        request.getDeviceCode()));
 | 
	
		
			
				|  |  |          qbreaker.lambda().eq(IotBreakerDevice::getDeleted, 0);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          IotBreakerDevice breakerDevice = baseMapper.selectOne(qbreaker);
 | 
	
	
		
			
				|  | @@ -405,8 +421,8 @@ public class IotBreakerDeviceServiceImpl extends ServiceImpl<IotBreakerDeviceMap
 | 
	
		
			
				|  |  |              Optional<IotBreakerDevice> deviceOptional = breakerDeviceAllOlds.stream().filter(r -> r.getDeviceUniqueCode().equals(breakerDeviceNew.getDeviceUniqueCode())).findAny();
 | 
	
		
			
				|  |  |              if (deviceOptional.isPresent()) {
 | 
	
		
			
				|  |  |                  IotBreakerDevice breakerDeviceOld = deviceOptional.get();
 | 
	
		
			
				|  |  | -                BeanUtils.copyProperties(breakerDeviceNew, breakerDeviceOld);
 | 
	
		
			
				|  |  |                  breakerDeviceNew.setUpdateTime(LocalDateTime.now());
 | 
	
		
			
				|  |  | +                BeanUtils.copyProperties(breakerDeviceNew, breakerDeviceOld, "id");
 | 
	
		
			
				|  |  |                  breakerDeviceOlds.add(breakerDeviceOld);
 | 
	
		
			
				|  |  |              } else {
 | 
	
		
			
				|  |  |                  breakerDeviceNew.setId(IdWorker.getId());
 | 
	
	
		
			
				|  | @@ -449,7 +465,9 @@ public class IotBreakerDeviceServiceImpl extends ServiceImpl<IotBreakerDeviceMap
 | 
	
		
			
				|  |  |                  .orgPath(org.getPath())
 | 
	
		
			
				|  |  |                  .deviceUniqueCode(IotBreakerDevice.getUniqueCode(org.getCode(), req.getHostCode(), req.getDeviceCode()))
 | 
	
		
			
				|  |  |                  .breakerName(breakerName)
 | 
	
		
			
				|  |  | +                .status(2)
 | 
	
		
			
				|  |  |                  .deleted(0)
 | 
	
		
			
				|  |  | +                .createTime(LocalDateTime.now())
 | 
	
		
			
				|  |  |                  .breakerUniqueCode(breakerUniqueCode).build();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -472,6 +490,18 @@ public class IotBreakerDeviceServiceImpl extends ServiceImpl<IotBreakerDeviceMap
 | 
	
		
			
				|  |  |              deviceCode = dto.getDeviceCode().substring(0, dto.getDeviceCode().length() - 4) + "1001";
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          String uniqueCode = IotBreaker.getUniqueCode(org.getCode(), dto.getHostCode(), index);
 | 
	
		
			
				|  |  | -        return IotBreaker.builder().name(name).orgId(org.getId()).orgName(org.getName()).orgPath(org.getPath()).id(IdWorker.getId()).uniqueCode(uniqueCode).deleted(0).deviceCode(deviceCode).type(type).build();
 | 
	
		
			
				|  |  | +        return IotBreaker.builder().
 | 
	
		
			
				|  |  | +                name(name)
 | 
	
		
			
				|  |  | +                .orgId(org.getId())
 | 
	
		
			
				|  |  | +                .orgName(org.getName())
 | 
	
		
			
				|  |  | +                .orgPath(org.getPath())
 | 
	
		
			
				|  |  | +                .id(IdWorker.getId())
 | 
	
		
			
				|  |  | +                .uniqueCode(uniqueCode)
 | 
	
		
			
				|  |  | +                .deleted(0)
 | 
	
		
			
				|  |  | +                .status(2)
 | 
	
		
			
				|  |  | +                .breakerName(name)
 | 
	
		
			
				|  |  | +                .deviceCode(deviceCode)
 | 
	
		
			
				|  |  | +                .type(type)
 | 
	
		
			
				|  |  | +                .build();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 |