diff --git a/src/main/java/com/lanhai/entity/SurvDeviceDeploy.java b/src/main/java/com/lanhai/entity/SurvDeviceDeploy.java index 319d6d5..e8cd88e 100644 --- a/src/main/java/com/lanhai/entity/SurvDeviceDeploy.java +++ b/src/main/java/com/lanhai/entity/SurvDeviceDeploy.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -197,6 +198,13 @@ public class SurvDeviceDeploy extends Model { @TableField("SURV_CONFIG_ID") private String survConfigId; + /** + * 设备配置串 + */ + @TableField("DEVICE_CONFIG") + @ApiModelProperty(value = "设备配置串") + private String deviceConfig; + @Override protected Serializable pkVal() { return this.id; diff --git a/src/main/java/com/lanhai/entity/SurvTransdataAir.java b/src/main/java/com/lanhai/entity/SurvTransdataAir.java index 7e7afa3..3c3ca42 100644 --- a/src/main/java/com/lanhai/entity/SurvTransdataAir.java +++ b/src/main/java/com/lanhai/entity/SurvTransdataAir.java @@ -94,8 +94,8 @@ public class SurvTransdataAir extends Model { /** * 站点ID */ -// @TableField("STATION_ID") -// private String stationId; + @TableField("STATION_ID") + private String stationId; /** * 设备ID @@ -106,8 +106,8 @@ public class SurvTransdataAir extends Model { /** * 站点编号 */ -// @TableField("STATION_CODE") -// private String stationCode; + @TableField("STATION_CODE") + private String stationCode; /** * 设备编号 @@ -124,14 +124,14 @@ public class SurvTransdataAir extends Model { /** * 站点名称 */ -// @TableField("STATION_NAME") -// private String stationName; + @TableField("STATION_NAME") + private String stationName; /** * 设备名称 */ -// @TableField("DEVICE_NAME") -// private String deviceName; + @TableField("DEVICE_NAME") + private String deviceName; /** * 租户号 diff --git a/src/main/java/com/lanhai/entity/SurvTransdataSoil.java b/src/main/java/com/lanhai/entity/SurvTransdataSoil.java index a0c6b98..cabe8c2 100644 --- a/src/main/java/com/lanhai/entity/SurvTransdataSoil.java +++ b/src/main/java/com/lanhai/entity/SurvTransdataSoil.java @@ -221,8 +221,8 @@ public class SurvTransdataSoil extends Model { /** * 站点ID */ -// @TableField("STATION_ID") -// private String stationId; + @TableField("STATION_ID") + private String stationId; /** * 设备ID @@ -233,8 +233,8 @@ public class SurvTransdataSoil extends Model { /** * 站点编号 */ -// @TableField("STATION_CODE") -// private String stationCode; + @TableField("STATION_CODE") + private String stationCode; /** * 设备编号 @@ -251,14 +251,15 @@ public class SurvTransdataSoil extends Model { /** * 站点名称 */ -// @TableField("STATION_NAME") -// private String stationName; + @TableField("STATION_NAME") + private String stationName; /** * 设备名称 */ -// @TableField("DEVICE_NAME") -// private String deviceName; + @TableField("DEVICE_NAME") + private String deviceName; + /** * 租户号 @@ -309,6 +310,10 @@ public class SurvTransdataSoil extends Model { private String deployId; + + + + @Override protected Serializable pkVal() { return this.id; diff --git a/src/main/java/com/lanhai/o/iot/pbs/ResolvConfig.java b/src/main/java/com/lanhai/o/iot/pbs/ResolvConfig.java new file mode 100644 index 0000000..3c51227 --- /dev/null +++ b/src/main/java/com/lanhai/o/iot/pbs/ResolvConfig.java @@ -0,0 +1,10 @@ +package com.lanhai.o.iot.pbs; + +import lombok.Data; + +import java.util.List; + +@Data +public class ResolvConfig { + List resolvConfig; +} diff --git a/src/main/java/com/lanhai/o/iot/pbs/ResolveConfigDetail.java b/src/main/java/com/lanhai/o/iot/pbs/ResolveConfigDetail.java new file mode 100644 index 0000000..6493585 --- /dev/null +++ b/src/main/java/com/lanhai/o/iot/pbs/ResolveConfigDetail.java @@ -0,0 +1,27 @@ +package com.lanhai.o.iot.pbs; + +import lombok.Data; + +@Data +public class ResolveConfigDetail { + /** + * 索引 + */ + private String index; + /** + * 报文取值范围 + */ + private String range; + + /** + * 实体字段 + */ + private String field; + + /** + * 排序 + */ + private Integer sortNo; + + +} diff --git a/src/main/java/com/lanhai/o/iot/pbs/WaterCommonTransVo.java b/src/main/java/com/lanhai/o/iot/pbs/WaterCommonTransVo.java new file mode 100644 index 0000000..2825c62 --- /dev/null +++ b/src/main/java/com/lanhai/o/iot/pbs/WaterCommonTransVo.java @@ -0,0 +1,76 @@ +package com.lanhai.o.iot.pbs; + +import lombok.Data; + +import java.util.Date; + +/** + * 普倍思解析实体 + */ +@Data +public class WaterCommonTransVo { + + + + /** + * 数据ID + */ + private String dataId; + + private String deployCode; + + /** + * 总磷 + */ + private String dataWaterTp; + private String dataWaterTpSy; + private String dataWaterTpLd; + + + /** + * 总氮 + */ + private String dataWaterTn; + private String dataWaterTnSy; + private String dataWaterTnLd; + + /** + * 硝态氮 + */ + private String dataWaterNo; + + /** + * 氨氮 + */ + private String dataWaterNh; + private String dataWaterNhSy; + private String dataWaterNhLd; + + + /** + * 化学需氧量 + */ + private String dataWaterCod; + private String dataWaterCodSy; + private String dataWaterCodLd; + + + + private String fluidLevel;//液位 + private String firstValveStatus;//1#球阀状态 + private String secondValveStatus;//2#球阀状态 + private String crashStopStatus;//急停状态 + private String waterPumpStatus;//水泵状态 + private String mainSideStatus;//主副泵状态 + + + /** + * 数据更新时间 + */ + private Date dataDateTime; + + /** + * 数据获取类型;realTime=实时,dayTime=日数据,month=月数据,year=年数据 + */ + private String dataGatherType; +} diff --git a/src/main/java/com/lanhai/service/ISurvTransdataLivestockwaterService.java b/src/main/java/com/lanhai/service/ISurvTransdataLivestockwaterService.java index 64adbfa..10aec5b 100644 --- a/src/main/java/com/lanhai/service/ISurvTransdataLivestockwaterService.java +++ b/src/main/java/com/lanhai/service/ISurvTransdataLivestockwaterService.java @@ -1,5 +1,6 @@ package com.lanhai.service; +import com.lanhai.entity.SurvDeviceDeploy; import com.lanhai.entity.SurvTransdataLivestockwater; import com.baomidou.mybatisplus.extension.service.IService; import com.lanhai.entity.SurvTransdataOrientwater; @@ -13,7 +14,7 @@ public interface ISurvTransdataLivestockwaterService extends IService implements ISurvAlertRecordService { @@ -128,6 +130,10 @@ public class SurvAlertRecordServiceImpl extends ServiceImpl set = jsonObject.keySet(); diff --git a/src/main/java/com/lanhai/service/Impl/SurvHisdataLivestockwaterServiceImpl.java b/src/main/java/com/lanhai/service/Impl/SurvHisdataLivestockwaterServiceImpl.java index d032e74..081a604 100644 --- a/src/main/java/com/lanhai/service/Impl/SurvHisdataLivestockwaterServiceImpl.java +++ b/src/main/java/com/lanhai/service/Impl/SurvHisdataLivestockwaterServiceImpl.java @@ -2,13 +2,11 @@ package com.lanhai.service.Impl; import cn.hutool.core.bean.BeanUtil; import com.lanhai.constant.PollutionConstants; -import com.lanhai.entity.ScEquZhibiao; -import com.lanhai.entity.SurvDeviceDeploy; -import com.lanhai.entity.SurvHisdataLivestockwater; -import com.lanhai.entity.SurvTransdataLivestockwater; +import com.lanhai.entity.*; import com.lanhai.mapper.SurvHisdataLivestockwaterMapper; import com.lanhai.service.ISurvHisdataLivestockwaterService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.lanhai.service.ISurvStationInfoService; import com.lanhai.util.BigDecimalRandomAdjuster; import com.lanhai.util.DateUtils; import com.lanhai.util.SpringBeanUtils; @@ -40,6 +38,10 @@ public class SurvHisdataLivestockwaterServiceImpl extends ServiceImpl10 || "0.0000".equals(transdataLivestockwater.getDataWaterNo())){ + isok =false; + } + }else{ + isok =false; + } if(StringUtils.isNotBlank(transdataLivestockwater.getDataWaterNh())){ if(transdataLivestockwater.getDataWaterNh().contains("-") || transdataLivestockwater.getDataWaterNh().length()>10 || "0.0000".equals(transdataLivestockwater.getDataWaterNh()) ){ isok =false; @@ -109,15 +135,13 @@ public class SurvTransdataLivestockwaterServiceImpl extends ServiceImpl baowenMap = new HashMap(); baowenMap.put("mn", transdataLivestockwater.getDeployCode()); baowenMap.put("DataTime", dataDateTimeStr); - baowenMap.put("e1", transdataLivestockwater.getDataWaterTp()); - baowenMap.put("e2", transdataLivestockwater.getDataWaterTpSy()); - baowenMap.put("e3", transdataLivestockwater.getDataWaterTpLd()); - baowenMap.put("e4", transdataLivestockwater.getDataWaterTn()); - baowenMap.put("e5", transdataLivestockwater.getDataWaterTnSy()); - baowenMap.put("e6", transdataLivestockwater.getDataWaterTnLd()); - baowenMap.put("e7", transdataLivestockwater.getDataWaterNo()); - alertRecordService.saveBaojing(baowenMap); - }else{ + Map dataMap = TUtil.getAllKeyValuePairs(transdataLivestockwater); + if(dataMap!=null && !dataMap.isEmpty()){ + baowenMap.putAll(dataMap); + } + alertRecordService.saveBaojingV2(baowenMap,deploy,null); + }else{//无效数据进错误数据表 + log.error("xxxxxxxxx无效数据,转入错误数据表xxxxxxxxxx"); SurvHisdataLivestockwaterError error = new SurvHisdataLivestockwaterError(); BeanUtil.copyProperties(transdataLivestockwater, error); hisdataLivestockwaterErrorService.save(error); diff --git a/src/main/java/com/lanhai/service/Impl/SurvTransdataOrientwaterServiceImpl.java b/src/main/java/com/lanhai/service/Impl/SurvTransdataOrientwaterServiceImpl.java index 4b18fcb..2e1fdb2 100644 --- a/src/main/java/com/lanhai/service/Impl/SurvTransdataOrientwaterServiceImpl.java +++ b/src/main/java/com/lanhai/service/Impl/SurvTransdataOrientwaterServiceImpl.java @@ -5,14 +5,14 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.lanhai.entity.SurvHisdataOrientwater; -import com.lanhai.entity.SurvHisdataOrientwaterError; -import com.lanhai.entity.SurvTransdataOrientwater; +import com.lanhai.entity.*; import com.lanhai.mapper.SurvTransdataOrientwaterMapper; +import com.lanhai.o.iot.pbs.WaterCommonTransVo; import com.lanhai.service.ISurvAlertRecordService; import com.lanhai.service.ISurvHisdataOrientwaterService; import com.lanhai.service.ISurvTransdataOrientwaterService; import com.lanhai.util.DataUtil; +import com.lanhai.util.TUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; @@ -41,6 +41,8 @@ public class SurvTransdataOrientwaterServiceImpl extends ServiceImpl10 || "0.0000".equals(transdataOrientwater.getDataWaterNh()) ){ + isok =false; + } + }else{ + isok =false; + } + + if(StringUtils.isNotBlank(transdataOrientwater.getDataWaterCod())){ + if(transdataOrientwater.getDataWaterCod().contains("-") || transdataOrientwater.getDataWaterCod().length()>10 || "0.0000".equals(transdataOrientwater.getDataWaterCod()) ){ + isok =false; + } + }else{ + isok =false; + } if(isok) { saveOrUpdate(transdataOrientwater); //保存历史表 @@ -103,15 +133,14 @@ public class SurvTransdataOrientwaterServiceImpl extends ServiceImpl baowenMap = new HashMap(); baowenMap.put("mn", transdataOrientwater.getDeployCode()); baowenMap.put("DataTime", dataDateTimeStr); - baowenMap.put("e1", transdataOrientwater.getDataWaterTp()); - baowenMap.put("e2", transdataOrientwater.getDataWaterTpSy()); - baowenMap.put("e3", transdataOrientwater.getDataWaterTpLd()); - baowenMap.put("e4", transdataOrientwater.getDataWaterTn()); - baowenMap.put("e5", transdataOrientwater.getDataWaterTnSy()); - baowenMap.put("e6", transdataOrientwater.getDataWaterTnLd()); - baowenMap.put("e7", transdataOrientwater.getDataWaterNo()); - alertRecordService.saveBaojing(baowenMap); - }else{ + + Map dataMap = TUtil.getAllKeyValuePairs(transdataOrientwater); + if(dataMap!=null && !dataMap.isEmpty()){ + baowenMap.putAll(dataMap); + } + alertRecordService.saveBaojingV2(baowenMap,deploy,null); + }else{//无效数据进错误数据表 + log.error("xxxxxxxxx无效数据,转入错误数据表xxxxxxxxxx"); SurvHisdataOrientwaterError survHisdataOrientwaterError =new SurvHisdataOrientwaterError(); BeanUtil.copyProperties(transdataOrientwater,survHisdataOrientwaterError); survHisdataOrientwaterError.setTransDate(new Date()); diff --git a/src/main/java/com/lanhai/service/Impl/SurvTransdataSoilServiceImpl.java b/src/main/java/com/lanhai/service/Impl/SurvTransdataSoilServiceImpl.java index 1d7f574..489a4fe 100644 --- a/src/main/java/com/lanhai/service/Impl/SurvTransdataSoilServiceImpl.java +++ b/src/main/java/com/lanhai/service/Impl/SurvTransdataSoilServiceImpl.java @@ -12,6 +12,7 @@ import com.lanhai.mapper.SurvTransdataSoilMapper; import com.lanhai.service.*; import com.lanhai.util.TUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,6 +39,8 @@ public class SurvTransdataSoilServiceImpl extends ServiceImpl() @@ -166,7 +184,20 @@ public class SurvTransdataSoilServiceImpl extends ServiceImpl() @@ -241,7 +272,19 @@ public class SurvTransdataSoilServiceImpl extends ServiceImpl list = new ArrayList<>(); - list.add("01"); - list.add("02"); - list.add("03"); - list.add("04"); + String code = CommonConstant.XZP_WATER+substring; + log.error("===================收到tcp设备消息:{}===============",code); + log.error("xxxxxxxxxxx{}原始报文:{}xxxxxxxxxxxxxxxxxx",code,s); + SurvDeviceDeploy deviceDeploy = deviceDeployService.getOneByCode(code); - if(list.contains(substring)){ + if(deviceDeploy != null && (!hostAddress.equals(deviceDeploy.getIpAddr()) || !port.equals(deviceDeploy.getPort()))){ + if(PollutionConstants.WATER_ORIENT.equals(deviceDeploy.getDeployType())){ + transdataOrientwaterService.saveBaowen(s,deviceDeploy); + } else if (PollutionConstants.WATER_LIVE.equals(deviceDeploy.getDeployType())) { + transdataLivestockwaterService.saveBaowen(s,deviceDeploy); + } - if("01".equals(substring) || "02".equals(substring)){ - transdataOrientwaterService.saveBaowen(s); - }else if("03".equals(substring) || "04".equals(substring)){ - transdataLivestockwaterService.saveBaowen(s); - } - String code = CommonConstant.XZP_WATER+s.substring(2,4); - log.error("code111:"+code); - SurvDeviceDeploy deviceDeploy = deviceDeployService.getOneByCode(code); - if(deviceDeploy != null && (!hostAddress.equals(deviceDeploy.getIpAddr()) || !port.equals(deviceDeploy.getPort()))){ - deviceDeploy.setIpAddr(hostAddress); - deviceDeploy.setPort(port); - deviceDeployService.updateById(deviceDeploy); - log.error("更新了111:"+deviceDeploy.getId()+","+deviceDeploy.getIpAddr()+",prot:"+deviceDeploy.getPort()); - } + //更新设备信息 + deviceDeploy.setIpAddr(hostAddress); + deviceDeploy.setPort(port); + deviceDeployService.updateById(deviceDeploy); + log.error("============更新了设备信息:"+deviceDeploy.getId()+","+deviceDeploy.getIpAddr()+",prot:"+deviceDeploy.getPort()); } + } } catch (Exception e) { diff --git a/src/main/java/com/lanhai/util/DataUtil.java b/src/main/java/com/lanhai/util/DataUtil.java index d26aeb3..0a10742 100644 --- a/src/main/java/com/lanhai/util/DataUtil.java +++ b/src/main/java/com/lanhai/util/DataUtil.java @@ -1,11 +1,16 @@ package com.lanhai.util; +import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.lanhai.constant.CommonConstant; +import com.lanhai.entity.SurvDeviceDeploy; import com.lanhai.entity.SurvTransdataLivestockwater; import com.lanhai.entity.SurvTransdataOrientwater; +import com.lanhai.o.iot.pbs.ResolvConfig; +import com.lanhai.o.iot.pbs.ResolveConfigDetail; +import com.lanhai.o.iot.pbs.WaterCommonTransVo; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -269,7 +274,36 @@ public class DataUtil{ } + public static WaterCommonTransVo strToWaterTrans(String str, SurvDeviceDeploy deploy) { + WaterCommonTransVo waterCommonTransVo = new WaterCommonTransVo(); + if(StringUtils.isNotBlank(str) && deploy!=null && deploy.getDeviceConfig() !=null){ + + waterCommonTransVo.setDataDateTime(new Date()); + waterCommonTransVo.setDataGatherType("realTime"); + waterCommonTransVo.setDeployCode(deploy.getDeployCode()); + + //根据配置进行解析 + ResolvConfig resolvConfig = JSONUtil.toBean(deploy.getDeviceConfig(), ResolvConfig.class); + if(resolvConfig.getResolvConfig()!=null && !resolvConfig.getResolvConfig().isEmpty()){ + for (ResolveConfigDetail resolveConfigDetail : resolvConfig.getResolvConfig()) { + try{ + String[] configs = resolveConfigDetail.getRange().split("-"); + int leftside = Integer.parseInt(configs[0]); + int rightSide = Integer.parseInt(configs[1]); + String vals = getVal(str.substring(leftside,rightSide)); + TUtil.setFieldValue(waterCommonTransVo,resolveConfigDetail.getField(),vals); + }catch (Exception e){ + log.error("=========普备思设备解析错误跳过=={}=======",JSONUtil.toJsonStr(resolveConfigDetail)); + e.printStackTrace(); + } + } + } + + } + log.error("<=========普备思设备解析完成=={}=======>",JSONUtil.toJsonStr(waterCommonTransVo)); + return waterCommonTransVo; + } diff --git a/src/main/java/com/lanhai/util/TUtil.java b/src/main/java/com/lanhai/util/TUtil.java index 1bcd29d..558b173 100644 --- a/src/main/java/com/lanhai/util/TUtil.java +++ b/src/main/java/com/lanhai/util/TUtil.java @@ -2,7 +2,9 @@ package com.lanhai.util; import java.lang.reflect.Field; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @createTime 2023年07月26日 20:54:00 @@ -148,4 +150,32 @@ public class TUtil { return fieldNames; } + /** + * 通过反射获取实体所有字段的键值对 + * @param entity 实体对象 + * @return 包含所有字段名和值的Map + */ + public static Map getAllKeyValuePairs(Object entity) { + Map result = new HashMap<>(); + + if (entity == null) { + return result; + } + + Class clazz = entity.getClass(); + Field[] fields = clazz.getDeclaredFields(); + + for (Field field : fields) { + try { + field.setAccessible(true); // 设置可访问私有字段 + Object value = field.get(entity); + result.put(field.getName(), String.valueOf(value)); + } catch (IllegalAccessException e) { + System.err.println("无法访问字段: " + field.getName()); + } + } + + return result; + } + }