diff --git a/iot-access/access-api/src/main/java/com/njcn/access/enums/AccessResponseEnum.java b/iot-access/access-api/src/main/java/com/njcn/access/enums/AccessResponseEnum.java index a741138..30d8de0 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/enums/AccessResponseEnum.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/enums/AccessResponseEnum.java @@ -17,7 +17,7 @@ public enum AccessResponseEnum { NDID_NO_FIND("A0301", "nDid在平台端未找到或者已注册"), MISSING_CLIENT("A0302","设备客户端不在线!"), - MODEL_REPEAT("A0302", "模板重复,请勿重复录入!"), + MODEL_REPEAT("A0302", "模板存在,请勿重复录入!"), MODEL_NO_FIND("A0302", "模板不存在,请先录入模板数据!"), MESSAGE_TYPE_ERROR("A0303","报文消息类型Type错误!"), diff --git a/iot-access/access-api/src/main/java/com/njcn/access/enums/DataModel.java b/iot-access/access-api/src/main/java/com/njcn/access/enums/DataModel.java new file mode 100644 index 0000000..290a41b --- /dev/null +++ b/iot-access/access-api/src/main/java/com/njcn/access/enums/DataModel.java @@ -0,0 +1,69 @@ +package com.njcn.access.enums; + +/** + * @author xuyang + */ +public interface DataModel { + + /** + * 数据模型 + */ + String APF = "Apf"; + + String DVR = "Dvr"; + + String EPD = "Epd"; + + String PQD = "Pqd"; + + String BMD = "Bmd"; + + String EVT = "Evt"; + + String ALM = "Alm"; + + String STS = "Sts"; + + String DI = "Di"; + + String DO = "Do"; + + String PARM = "Parm"; + + String SET = "Set"; + + String INSET = "InSet"; + + String CTRL = "Ctrl"; + + /** + * 数据模型临时表 + */ + String APF_DATA = "apf_data"; + + String DVR_DATA = "dvr_data"; + + String EPD_DATA = "epd_data"; + + String PQD_DATA = "pqd_data"; + + String BMD_DATA = "bmd_data"; + + String EVT_DATA = "evt_data"; + + String ALM_DATA = "alm_data"; + + String STS_DATA = "sts_data"; + + String DI_DATA = "di_data"; + + String DO_DATA = "do_data"; + + String PARM_DATA = "parm_data"; + + String SET_DATA = "set_data"; + + String INSET_DATA = "inset_data"; + + String CTRL_DATA = "ctrl_data"; +} diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/EvtDto.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/EvtDto.java index 6a40e23..c70cdf3 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/EvtDto.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/EvtDto.java @@ -33,6 +33,10 @@ public class EvtDto implements Serializable { @NotNull(message = "事件类别,不为空") private String eventType; + @SerializedName("Phase") + @NotNull(message = "相别,不为空") + private String phase; + @SerializedName("Parm") private List param; } diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/SetDto.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/SetDto.java index 644e253..052f3c7 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/SetDto.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/SetDto.java @@ -35,11 +35,11 @@ public class SetDto implements Serializable { @SerializedName("MaxNum") @ApiModelProperty("设置最大值") - private Integer maxNum; + private Double maxNum; @SerializedName("MinNum") @ApiModelProperty("设置最小值") - private Integer minNum; + private Double minNum; @SerializedName("DefaultValue") @NotNull(message = "参数缺省值") diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/ApfDto.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/ApfDto.java index eebbdec..4763a86 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/ApfDto.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/ApfDto.java @@ -38,6 +38,10 @@ public class ApfDto implements Serializable { @ApiModelProperty("单位") private String unit; + @SerializedName("Phase") + @ApiModelProperty("相别") + private String phase; + @SerializedName("StatMethod") @ApiModelProperty("数据统计方法(max,min,avg,cp95)") private List statMethod; diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDevModelServiceImpl.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDevModelServiceImpl.java index 97a46ea..2ba8f57 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDevModelServiceImpl.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDevModelServiceImpl.java @@ -1,23 +1,48 @@ package com.njcn.access.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.alibaba.nacos.shaded.com.google.gson.Gson; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.njcn.access.enums.AccessResponseEnum; +import com.njcn.access.enums.DataModel; +import com.njcn.access.enums.TypeEnum; +import com.njcn.access.pojo.dto.data.EpdPqdDto; +import com.njcn.access.pojo.dto.data.EvtDto; +import com.njcn.access.pojo.dto.data.EvtParamDto; +import com.njcn.access.pojo.dto.devModel.ApfDto; import com.njcn.access.pojo.dto.devModel.TemplateDto; import com.njcn.access.service.ICsDevModelService; import com.njcn.access.utils.JsonUtil; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.utils.LogUtil; import com.njcn.csdevice.api.DevModelFeignClient; import com.njcn.csdevice.pojo.param.CsDevModelAddParm; import com.njcn.csdevice.pojo.po.CsDevModelPO; import com.njcn.oss.utils.FileStorageUtil; +import com.njcn.system.api.DicDataFeignClient; import com.njcn.system.api.DictTreeFeignClient; +import com.njcn.system.api.EpdFeignClient; +import com.njcn.system.pojo.param.EleEpdPqdParam; +import com.njcn.system.pojo.po.Dic; +import com.njcn.system.pojo.po.EleEpdPqd; import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.client.ConditionalOnBlockingDiscoveryEnabled; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import java.io.IOException; import java.sql.Date; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; /** * 类的介绍: @@ -26,18 +51,24 @@ import java.time.format.DateTimeFormatter; * @version 1.0.0 * @createTime 2023/7/3 15:40 */ +@Slf4j @Service @AllArgsConstructor public class CsDevModelServiceImpl implements ICsDevModelService { + @Autowired + public CsDevModelServiceImpl csDevModelService; + private final FileStorageUtil fileStorageUtil; private final DevModelFeignClient devModelFeignClient; - private final DictTreeFeignClient dictTreeFeignClient; + private final EpdFeignClient epdFeignClient; + + private final DicDataFeignClient dicDataFeignClient; @Override - @Transactional(rollbackFor = Exception.class) + @Transactional(rollbackFor = {Exception.class}) public void addModel(MultipartFile file) { String json = null; try { @@ -48,9 +79,9 @@ public class CsDevModelServiceImpl implements ICsDevModelService { //String filePath = fileStorageUtil.uploadMultipart(devModelParam.getFile(), OssPath.DEV_MODEL + devModelParam.getDevType() + "_"); String filePath = ""; //1.录入cs_dev_model表,记录装置型号和模板记录 - addCsDevModel(templateDto,filePath); - - + CsDevModelPO csDevModelPo = csDevModelService.addCsDevModel(templateDto,filePath); + //2.录入字典数据 + csDevModelService.analysisDict(templateDto); } catch (IOException e) { @@ -61,15 +92,96 @@ public class CsDevModelServiceImpl implements ICsDevModelService { /** * 新增cs_dev_model数据 */ - private CsDevModelPO addCsDevModel(TemplateDto templateDto, String filePath){ + public CsDevModelPO addCsDevModel(TemplateDto templateDto, String filePath){ + CsDevModelPO po = devModelFeignClient.findModel(templateDto.getDevType(),templateDto.getVersion(),templateDto.getTime()).getData(); + if (!Objects.isNull(po)){ + throw new BusinessException(AccessResponseEnum.MODEL_REPEAT); + } CsDevModelAddParm csDevModelAddParm = new CsDevModelAddParm(); csDevModelAddParm.setDevTypeName(templateDto.getDevType()); csDevModelAddParm.setName(templateDto.getDevType()); csDevModelAddParm.setVersionNo(templateDto.getVersion()); csDevModelAddParm.setTime(templateDto.getTime()); csDevModelAddParm.setFilePath(filePath); - CsDevModelPO csDevModel = devModelFeignClient.addDevModel(csDevModelAddParm).getData(); - return csDevModel; + return devModelFeignClient.addDevModel(csDevModelAddParm).getData(); } + /** + * 解析字典数据 + * 根据data_type和name来判断字典是否已经录入,录入过的就不在录入 + */ + public void analysisDict(TemplateDto templateDto){ + List result = new ArrayList<>(); + List dataList = templateDto.getDataList(); + if (CollectionUtil.isNotEmpty(dataList)){ + dataList.forEach(item->{ + switch (item) { + case DataModel.APF: + log.info("处理apf字典数据"); + List apfList = templateDto.getApfDto(); + apfList.forEach(apf->{ + String id = dicDataFeignClient.getDicDataByCode(item).getData().getId(); + String classId = dicDataFeignClient.getDicDataByCode(DataModel.APF_DATA).getData().getId(); + List list = epdFeignClient.judgeExist(apf.getName(),id).getData(); + if (CollectionUtil.isEmpty(list)){ + EleEpdPqdParam eleEpdPqdParam = new EleEpdPqdParam(); + eleEpdPqdParam.setName(apf.getName()); + eleEpdPqdParam.setOtherName(apf.getName()); + eleEpdPqdParam.setShowName(apf.getName()); + eleEpdPqdParam.setSort(apf.getIdx()); + eleEpdPqdParam.setType(apf.getType()); + eleEpdPqdParam.setUnit(apf.getUnit()); + eleEpdPqdParam.setStatMethod(apf.getStatMethod()); + eleEpdPqdParam.setDataType(id); + if (Objects.isNull(apf.getPhase())){ + eleEpdPqdParam.setPhase("M"); + } else { + eleEpdPqdParam.setPhase(apf.getPhase()); + } + eleEpdPqdParam.setClassId(classId); + result.add(eleEpdPqdParam); + } + }); + break; + case DataModel.EVT: + log.info("处理evt字典数据"); + List evtList = templateDto.getEvtDto(); + evtList.forEach(evt->{ + String id = dicDataFeignClient.getDicDataByCode(item).getData().getId(); + String classId = dicDataFeignClient.getDicDataByCode(DataModel.EVT_DATA).getData().getId(); + List list = epdFeignClient.judgeExist(evt.getName(),id).getData(); + if (CollectionUtil.isEmpty(list)){ + EleEpdPqdParam eleEpdPqdParam = new EleEpdPqdParam(); + eleEpdPqdParam.setName(evt.getName()); + eleEpdPqdParam.setOtherName(evt.getName()); + eleEpdPqdParam.setShowName(evt.getName()); + eleEpdPqdParam.setSort(evt.getIdx()); + eleEpdPqdParam.setEventType(evt.getEventType()); + eleEpdPqdParam.setDataType(id); + if (Objects.isNull(evt.getPhase())){ + eleEpdPqdParam.setPhase("M"); + } else { + eleEpdPqdParam.setPhase(evt.getPhase()); + } + eleEpdPqdParam.setClassId(classId); + EleEpdPqd po = epdFeignClient.add(eleEpdPqdParam).getData(); + if (CollectionUtil.isNotEmpty(evt.getParam())){ + evt.getParam().forEach(param->{ + + }); + } + } + }); + break; + default: + break; + } + }); + } + if (CollectionUtil.isNotEmpty(result)){ + epdFeignClient.addByModel(result); + } + } + + }