|
@@ -1,11 +1,26 @@
|
|
|
package com.usky.iot.service.impl;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.usky.backend.client.DeviceDataClient;
|
|
|
+import com.usky.backend.domain.request.DeviceDataInfoVO;
|
|
|
+import com.usky.common.core.exception.BusinessException;
|
|
|
import com.usky.common.mybatis.core.AbstractCrudService;
|
|
|
-import com.usky.iot.domain.DmpDataInfo;
|
|
|
+import com.usky.iot.domain.*;
|
|
|
import com.usky.iot.mapper.DmpDataInfoMapper;
|
|
|
-import com.usky.iot.service.DmpDataInfoService;
|
|
|
+import com.usky.iot.service.*;
|
|
|
+import com.usky.backend.domain.request.DmpDeviceDataRequestVO;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.time.Instant;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneId;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
/**
|
|
|
* <p>
|
|
|
* 数据信息 服务实现类
|
|
@@ -16,5 +31,81 @@ import org.springframework.stereotype.Service;
|
|
|
*/
|
|
|
@Service
|
|
|
public class DmpDataInfoServiceImpl extends AbstractCrudService<DmpDataInfoMapper, DmpDataInfo> implements DmpDataInfoService {
|
|
|
+ @Autowired
|
|
|
+ private DmpProductInfoService dmpProductInfoService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DmpProductAttributeService dmpProductAttributeService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DmpDeviceInfoService dmpDeviceInfoService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DeviceDataClient deviceDataClient;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DmpDeviceTypeService dmpDeviceTypeService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void data(DmpDeviceDataRequestVO dmpDeviceDataRequestVO){
|
|
|
+ List<DeviceDataInfoVO> dataInfo = new ArrayList<>();
|
|
|
+
|
|
|
+ LambdaQueryWrapper<DmpDeviceInfo> dmpDeviceQuery = Wrappers.lambdaQuery();
|
|
|
+ dmpDeviceQuery.eq(DmpDeviceInfo::getDeleteFlag,0)
|
|
|
+ .eq(DmpDeviceInfo::getDeviceId,dmpDeviceDataRequestVO.getDeviceId());
|
|
|
+ List<DmpDeviceInfo> deviceDataInfo = dmpDeviceInfoService.list(dmpDeviceQuery);
|
|
|
+ if(CollectionUtils.isEmpty(deviceDataInfo)){
|
|
|
+ throw new BusinessException("录入数据失败,"+dmpDeviceDataRequestVO.getDeviceId()+" 这个设备没有注册");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ LambdaQueryWrapper<DmpProductInfo> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper.select(DmpProductInfo::getId,DmpProductInfo::getDeviceType)
|
|
|
+ .eq(DmpProductInfo::getDeleteFlag,0)
|
|
|
+ .eq(DmpProductInfo::getProductCode,dmpDeviceDataRequestVO.getProductCode());
|
|
|
+ List<DmpProductInfo> list = dmpProductInfoService.list(queryWrapper);
|
|
|
+ if(CollectionUtils.isNotEmpty(list)){
|
|
|
+
|
|
|
+ LambdaQueryWrapper<DmpDeviceType> deviceTypeList = Wrappers.lambdaQuery();
|
|
|
+ deviceTypeList.eq(DmpDeviceType::getTypeCode,list.get(0).getDeviceType());
|
|
|
+ List<DmpDeviceType> lt = dmpDeviceTypeService.list(deviceTypeList);
|
|
|
+ if(CollectionUtils.isEmpty(lt)){
|
|
|
+ throw new BusinessException("查找设备类型简称失败,"+list.get(0).getDeviceType()+" 在设备类型表中不存在");
|
|
|
+ }
|
|
|
+ String shortName = lt.get(0).getTypeAbbrevia();
|
|
|
+
|
|
|
+ LambdaQueryWrapper<DmpProductAttribute> queryWrapper1 = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper1.select(DmpProductAttribute::getAttributeCode)
|
|
|
+ .eq(DmpProductAttribute::getDeleteFlag,0)
|
|
|
+ .eq(DmpProductAttribute::getProductId,list.get(0).getId());
|
|
|
+ List<DmpProductAttribute> list1 = dmpProductAttributeService.list(queryWrapper1);
|
|
|
+ if(CollectionUtils.isNotEmpty(list1)){
|
|
|
+ for(int i=0;i<list1.size();i++){
|
|
|
+ Map<String,Float> metrics = dmpDeviceDataRequestVO.getMetrics();
|
|
|
+ if(metrics.size()>0){
|
|
|
+ for(Map.Entry<String,Float> map:metrics.entrySet()){
|
|
|
+ String key = map.getKey();
|
|
|
+ float value = map.getValue();
|
|
|
+ if(key.equals(list1.get(i).getAttributeCode())){ //属性名需和产品注册信息一致
|
|
|
+ DeviceDataInfoVO deviceDataInfoVO = new DeviceDataInfoVO();
|
|
|
+ deviceDataInfoVO.setDeviceId(dmpDeviceDataRequestVO.getDeviceId());
|
|
|
+ deviceDataInfoVO.setDeviceType(list.get(0).getDeviceType());
|
|
|
+ deviceDataInfoVO.setTypeAbbrevia(shortName);
|
|
|
+ deviceDataInfoVO.setName(key);
|
|
|
+ deviceDataInfoVO.setValue(value);
|
|
|
+ deviceDataInfoVO.setTimestamp(LocalDateTime.ofInstant(Instant.ofEpochSecond(dmpDeviceDataRequestVO.getTimestamp()), ZoneId.systemDefault()));
|
|
|
+ dataInfo.add(deviceDataInfoVO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ throw new BusinessException("查找产品信息失败,"+dmpDeviceDataRequestVO.getProductCode()+" 在产品信息表中不存在");
|
|
|
+ }
|
|
|
+ if(CollectionUtils.isNotEmpty(dataInfo)){
|
|
|
+ deviceDataClient.data(dataInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
}
|