From 21486193143f7d2fe344d07f4daab920ba17f4ab Mon Sep 17 00:00:00 2001 From: haozq <1611483981@qq.com> Date: Sat, 28 Sep 2024 12:35:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=B8=AD=E5=BF=83=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bonus/base/entity/CgqInfoDataVo.java | 60 ++++++++ .../java/com/bonus/base/entity/CjDataVo.java | 54 ++++++++ .../com/bonus/base/entity/DevAttributeVo.java | 76 ++++++++++ .../java/com/bonus/base/entity/DevInfoVo.java | 87 ++++++++++++ .../java/com/bonus/base/entity/DeviceVo.java | 22 +++ .../com/bonus/base/entity/LlgcqDataVo.java | 50 +++++++ .../com/bonus/base/entity/SafetyHatVo.java | 54 ++++++++ .../com/bonus/base/entity/SwhjDataVo.java | 83 +++++++++++ .../com/bonus/base/entity/WarnConfigVo.java | 115 ++++++++++++++++ .../java/com/bonus/base/entity/WarnVo.java | 36 +++++ .../java/com/bonus/base/entity/WatherVo.java | 39 ++++++ .../com/bonus/base/entity/YxkjDataVo.java | 58 ++++++++ .../com/bonus/base/entity/ZnshDataVo.java | 86 ++++++++++++ .../screen/mapper/TbDeviceDataRecord.java | 2 +- .../impl/ProjectDetailsViewServiceImpl.java | 2 +- .../screen/TbDeviceDataRecordMapper.xml | 14 +- bonus-modules/bonus-data/pom.xml | 130 ++++++++++++++++++ .../java/com/bonus/BonusDataApplication.java | 33 +++++ .../data/config/SystemScheduleConfig.java | 0 .../data/controller/DataCenterController.java | 0 .../com/bonus/data/entity/CgqInfoDataVo.java | 0 .../java/com/bonus/data/entity/CjDataVo.java | 0 .../com/bonus/data/entity/DevAttributeVo.java | 0 .../java/com/bonus/data/entity/DevInfoVo.java | 0 .../java/com/bonus/data/entity/DeviceVo.java | 0 .../com/bonus/data/entity/LlgcqDataVo.java | 0 .../com/bonus/data/entity/SafetyHatVo.java | 0 .../com/bonus/data/entity/SwhjDataVo.java | 0 .../com/bonus/data/entity/WarnConfigVo.java | 0 .../java/com/bonus/data/entity/WarnVo.java | 0 .../java/com/bonus/data/entity/WatherVo.java | 0 .../com/bonus/data/entity/YxkjDataVo.java | 0 .../com/bonus/data/entity/ZnshDataVo.java | 0 .../bonus/data/mapper/DataCenterMapper.java | 0 .../com/bonus/data/mapper/WatherMapper.java | 0 .../bonus/data/service/DataCenterService.java | 0 .../data/service/DataCenterServiceImpl.java | 0 .../bonus/data/service/WatherWarnService.java | 0 .../bonus-data/src/main/resources/banner.txt | 10 ++ .../src/main/resources/bootstrap.yml | 28 ++++ .../bonus-data/src/main/resources/logback.xml | 74 ++++++++++ .../mapper/data/DataCenterMapper.xml | 0 .../resources/mapper/data/WatherMapper.xml | 0 .../resources/template/TbPeopleTemplate.xlsx | Bin 0 -> 10978 bytes .../template/TbProPowerTemplate.xlsx | Bin 0 -> 10495 bytes 45 files changed, 1104 insertions(+), 9 deletions(-) create mode 100644 bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/CgqInfoDataVo.java create mode 100644 bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/CjDataVo.java create mode 100644 bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/DevAttributeVo.java create mode 100644 bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/DevInfoVo.java create mode 100644 bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/DeviceVo.java create mode 100644 bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/LlgcqDataVo.java create mode 100644 bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/SafetyHatVo.java create mode 100644 bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/SwhjDataVo.java create mode 100644 bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/WarnConfigVo.java create mode 100644 bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/WarnVo.java create mode 100644 bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/WatherVo.java create mode 100644 bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/YxkjDataVo.java create mode 100644 bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/ZnshDataVo.java create mode 100644 bonus-modules/bonus-data/pom.xml create mode 100644 bonus-modules/bonus-data/src/main/java/com/bonus/BonusDataApplication.java rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/config/SystemScheduleConfig.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/controller/DataCenterController.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/entity/CgqInfoDataVo.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/entity/CjDataVo.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/entity/DevAttributeVo.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/entity/DevInfoVo.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/entity/DeviceVo.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/entity/LlgcqDataVo.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/entity/SafetyHatVo.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/entity/SwhjDataVo.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/entity/WarnConfigVo.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/entity/WarnVo.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/entity/WatherVo.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/entity/YxkjDataVo.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/entity/ZnshDataVo.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/mapper/DataCenterMapper.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/mapper/WatherMapper.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/service/DataCenterService.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/service/DataCenterServiceImpl.java (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/java/com/bonus/data/service/WatherWarnService.java (100%) create mode 100644 bonus-modules/bonus-data/src/main/resources/banner.txt create mode 100644 bonus-modules/bonus-data/src/main/resources/bootstrap.yml create mode 100644 bonus-modules/bonus-data/src/main/resources/logback.xml rename bonus-modules/{bonus-base => bonus-data}/src/main/resources/mapper/data/DataCenterMapper.xml (100%) rename bonus-modules/{bonus-base => bonus-data}/src/main/resources/mapper/data/WatherMapper.xml (100%) create mode 100644 bonus-modules/bonus-data/src/main/resources/template/TbPeopleTemplate.xlsx create mode 100644 bonus-modules/bonus-data/src/main/resources/template/TbProPowerTemplate.xlsx diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/CgqInfoDataVo.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/CgqInfoDataVo.java new file mode 100644 index 0000000..d4eb4ee --- /dev/null +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/CgqInfoDataVo.java @@ -0,0 +1,60 @@ +package com.bonus.base.entity; + +import lombok.Data; + +/** + * 传感器数据 + * @author 黑子 + */ +@Data +public class CgqInfoDataVo { + /** + * id + */ + private String id; + /** + * 电量 + */ + private String capacity; + /** + * 电池告警阈值 + */ + private String alarmThreshold; + /** + * angle_x + */ + private String angleX; + /** + * 角度 Y + */ + private String angleY; + + private String angleZ; + /** + * 端设备出厂标识 + */ + private String nodeId; + /** + * 平台注册端设备主键 + */ + private String deviceId; + + /** + * 设备模型 + */ + private String model; + /** + * 服务id + */ + private String serviceId; + /** + * 数据采集时间 + */ + private String dataTime; + /** + * 备注 + */ + private String remark; + + +} diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/CjDataVo.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/CjDataVo.java new file mode 100644 index 0000000..6770837 --- /dev/null +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/CjDataVo.java @@ -0,0 +1,54 @@ +package com.bonus.base.entity; + +import lombok.Data; + +/** + * 沉降数据解析实体类 + * @author 黑子 + */ +@Data +public class CjDataVo { + + private String id; + + /** + * 当前测量值单位:mm + */ + private String subsideData; + /** + * 实时变化值单位:mm + */ + private String realSubsideData; + /** + * 累加值 单位:mm + */ + private String accSubsideData; + /** + * 混凝土基础沉降单位:mm + */ + private String settlementFoundation; + /** + * 是否混凝土默认0 不是,1 是混凝土 + */ + private String isConcrete; + /** + * 端设备出厂标识 + */ + private String nodeId; + /** + * 设备id + */ + private String deviceId; + /** + * 模型id + */ + private String model; + /** + * 服务id + */ + private String serviceId; + + private String dataTime; + + private String remark; +} diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/DevAttributeVo.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/DevAttributeVo.java new file mode 100644 index 0000000..d64c320 --- /dev/null +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/DevAttributeVo.java @@ -0,0 +1,76 @@ +package com.bonus.base.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.text.SimpleDateFormat; +import java.util.Date; + +//import static com.oracle.jrockit.jfr.ContentType.Timestamp; + +/** + * @author 黑子 + * 设备检测属性值 + */ +@Data +@AllArgsConstructor +public class DevAttributeVo { + + private String id; + + private String devName; + + private String devType; + + private String devId; + + private String jcName; + + private String jcValue; + + private String jcUnit; + + private String relCode; + /** + * 是否告警 + */ + private String isWarn; + /** + * 检测时间 + */ + private String jcTime; + + private String devJson; + + private String attributeId; + + private String mergerId; + + public DevAttributeVo(String devId,String devJson,String devName,String devType, String jcName, String jcValue, String jcUnit, String relCode, String isWarn, String jcTime, String mergerId) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + long timestamp = Long.parseLong(jcTime); + Date date = new Date(timestamp); + String formattedDate = sdf.format(date); + this.devId = devId; + this.devJson = devJson; + this.devName = devName; + this.devType = devType; + this.jcName = jcName; + this.jcValue = jcValue; + this.jcUnit = jcUnit; + this.relCode = relCode; + this.isWarn = isWarn; + this.jcTime = formattedDate; + this.mergerId = mergerId; + } + + public DevAttributeVo(String devId,String devName,String devType, String jcName, String jcValue, String isWarn, String jcTime) { + this.devId = devId; + this.devName = devName; + this.devType = devType; + this.jcName = jcName; + this.jcValue = jcValue; + this.isWarn = isWarn; + this.jcTime = jcTime; + } +} diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/DevInfoVo.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/DevInfoVo.java new file mode 100644 index 0000000..0abd327 --- /dev/null +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/DevInfoVo.java @@ -0,0 +1,87 @@ +package com.bonus.base.entity; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 设备基础信息 + * @author 黑子 + */ +@Data +public class DevInfoVo implements Serializable { + /** + * 边带id + */ + private String bdId; + /** + * 级联编码 + */ + private String relType; + + /** + * 设备id + */ + private String id; + /** + * 设备编码 + */ + private String deviceCode; + + /** + * 设备名称 + */ + private String deviceName; + /** + * 设备类型 + */ + private String deviceType; + + /** + * 工程名称 + */ + private String deviceProjectName; + + /** + * 设备工程编码 + */ + private String deviceProjectCode; + + /** + * 设备负责人 + */ + private String deviceFuzeren; + + /** + * 设备绑定状态1 绑定0 未绑定 + */ + private String bangdingState; + /** + * 设备在线状态1:在线,0:离线 + */ + private String deviceOnlineState; + /** + * 设备故障状态1:故障,0:正常 + */ + private String deviceFailureState; + /** + * 设备告警状态1:告警,0:正常 + */ + private String deviceAlarmState; + /** + * 设备出场日期 + */ + private String deviceManuDate; + /** + * 设备厂商 + */ + private String deviceFactory; + /** + * 更新时间 + */ + private String updateTime; + /** + * 备注 + */ + private String remark; +} diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/DeviceVo.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/DeviceVo.java new file mode 100644 index 0000000..010c5e9 --- /dev/null +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/DeviceVo.java @@ -0,0 +1,22 @@ +package com.bonus.base.entity; + +import lombok.Data; + +/** + * 设备实体类 + * @author 黑子 + */ +@Data +public class DeviceVo { + + private String devId; + + private String devName; + + private String devType; + + private String proName; + + private String proCode; + +} diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/LlgcqDataVo.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/LlgcqDataVo.java new file mode 100644 index 0000000..c679b54 --- /dev/null +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/LlgcqDataVo.java @@ -0,0 +1,50 @@ +package com.bonus.base.entity; + +import lombok.Data; + +/** + * 拉力传感器 + * @author 黑子 + */ +@Data +public class LlgcqDataVo { + + private String id; + /** + * 电量 + */ + private String capacity; + /** + * 告警阈值 + */ + private String alarmThreshold; + /** + * 拉力 + */ + private String tractionData; + + + + /** + * 端设备出厂标识 + */ + private String nodeId; + /** + * 平台注册端设备主键 + */ + private String deviceId; + /** + * 设备模型 + */ + private String model; + /** + * 服务 ID + */ + private String serviceId; + /** + * 数据监测时间 + */ + private String dataTime; + + private String remark; +} diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/SafetyHatVo.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/SafetyHatVo.java new file mode 100644 index 0000000..c6b4369 --- /dev/null +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/SafetyHatVo.java @@ -0,0 +1,54 @@ +package com.bonus.base.entity; + +import lombok.Data; + +/** + * @author : 阮世耀 + * @version : 1.0 + * @PackagePath: com.bonus.data.entity + * @CreateTime: 2024-09-23 17:41 + * @Description: 安全帽监测数据 + */ +@Data +public class SafetyHatVo { + + private String id; + + // 设备编码 + private String deviceCode; + + // 经度 + private String lon; + + // 纬度 + private String lat; + + /** + * 海拔高度 + */ + private String altitude; + + + /** + * 端设备出厂标识 + */ + private String nodeId; + /** + * 平台注册端设备主键 + */ + private String deviceId; + /** + * 设备模型 + */ + private String model; + /** + * 服务 ID + */ + private String serviceId; + /** + * 数据监测时间 + */ + private String dataTime; + + private String remark; +} diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/SwhjDataVo.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/SwhjDataVo.java new file mode 100644 index 0000000..e8bda2d --- /dev/null +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/SwhjDataVo.java @@ -0,0 +1,83 @@ +package com.bonus.base.entity; + +import lombok.Data; + +/** + * @author 黑子 + * 室外环境 数据 + */ +@Data +public class SwhjDataVo { + + private String id; + /** + * 0.5µm 粒子数个单位:个/m³ + */ + private String grain05; + /** + * 1.0µm 粒子数单位:个/m³ + */ + private String grain10; + /** + * 5.0µm 粒子数单位:个/m³ + */ + private String grain50; + /** + * PM25 单位:μg/m3 + */ + private String pm25; + /** + * PM10 单位:μg/m3 + */ + private String pm10; + /** + * 风向 + */ + private String windDirection; + /** + * 风速 单位:m/s + */ + private String windForce; + /** + * 温度 + */ + private String airTemperature; + /** + * 湿度 单位:%rh + */ + private String humidity; + /** + * 微正压 单位:Pa + */ + private String positivePressure; + /** + * 端设备出厂标识 + */ + private String nodeId; + /** + * 平台注册端设备主键 + */ + private String deviceId; + /** + * 设备模型 + */ + private String model; + /** + * 服务 ID + */ + private String serviceId; + /** + * 噪声 + */ + private String noise; + /** + * 数据监测时间 + */ + private String dataTime; + + private String remark; + + + + +} diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/WarnConfigVo.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/WarnConfigVo.java new file mode 100644 index 0000000..4e360cb --- /dev/null +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/WarnConfigVo.java @@ -0,0 +1,115 @@ +package com.bonus.base.entity; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + *系统 预警配置数据 + * @author 黑子 + */ +@Data +public class WarnConfigVo implements Serializable { + + + /** + * 主键 + */ + private Long id; + + /** + * 类型(来源码表-设备类型) + */ + private Integer configuType; + + /** + * 类型(来源码表-设备类型) + */ + private String typeName; + + /** + * 配置名称 + */ + private String configName; + + /** + * 阈值1-max + */ + private BigDecimal configVal1Max; + + /** + * 阈值1-min + */ + private BigDecimal configVal1Min; + /** + * + */ + private String configVal1Str; + + /** + * 阈值2-max + */ + private BigDecimal configVal2Max; + + /** + * 阈值2-min + */ + private BigDecimal configVal2Min; + + private String configVal2Str; + + + private BigDecimal configVal3Max; + + + private BigDecimal configVal3Min; + + + private String configVal3Str; + + private BigDecimal configVal4Max; + + + private BigDecimal configVal4Min; + + + private String configVal4Str; + + + private BigDecimal configVal5Max; + + + private BigDecimal configVal5Min; + + + private String configVal5Str; + + + private BigDecimal configVal6Max; + + + private BigDecimal configVal6Min; + + + private String configVal6Str; + + + private Integer delFlag; + + + private Date createTime; + + + private Integer createUser; + + + private Date updateTime; + + + private Integer updateUser; + + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/WarnVo.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/WarnVo.java new file mode 100644 index 0000000..ad8f650 --- /dev/null +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/WarnVo.java @@ -0,0 +1,36 @@ +package com.bonus.base.entity; + +import lombok.Data; + +/** + * 系统设备告警表 + * @author 黑子 + */ +@Data +public class WarnVo { + + private String id; + + private String warnTime; + + private String warnContent; + + private String warnType; + + private String devId; + + private String proId; + + private String proCode; + + private String remarks; + + public WarnVo(String warnTime, String warnContent, String warnType, String devId, String proCode, String remarks) { + this.warnTime = warnTime; + this.warnContent = warnContent; + this.warnType = warnType; + this.devId = devId; + this.proCode = proCode; + this.remarks = remarks; + } +} diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/WatherVo.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/WatherVo.java new file mode 100644 index 0000000..df27a98 --- /dev/null +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/WatherVo.java @@ -0,0 +1,39 @@ +package com.bonus.base.entity; + +import lombok.Data; + +/** + * 天气预警实体类 + * @author 黑子 + */ +@Data +public class WatherVo { + + private String city; + + private String createTime; + + + private String content; + + + private String type; + + + private String level; + + + private String province; + + private String day; + + public WatherVo(String city, String createTime, String content, String type, String level, String province, String day) { + this.city = city; + this.createTime = createTime; + this.content = content; + this.type = type; + this.level = level; + this.province = province; + this.day = day; + } +} diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/YxkjDataVo.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/YxkjDataVo.java new file mode 100644 index 0000000..d5f37ee --- /dev/null +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/YxkjDataVo.java @@ -0,0 +1,58 @@ +package com.bonus.base.entity; + +import lombok.Data; + +/** + * 有限空间 实体类 + * @author 黑子 + */ +@Data +public class YxkjDataVo { + /** + * 含氧量 + */ + private String oxygen; + /** + * 一氧化碳 + */ + private String carbonMonoxide; + /** + * 可燃气体 + */ + private String combustible; + /** + * 硫化氢 + */ + private String hydrothion; + + /** + * 硫化氢 + */ + private String nodeId; + + /** + * 设备id + */ + private String deviceId; + + /** + * 模块 + */ + private String model; + + /** + * 服务id + */ + private String serviceId; + + /** + * 时间 + */ + private String dataTime; + + /** + * 备注 + */ + private String remark; + +} diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/ZnshDataVo.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/ZnshDataVo.java new file mode 100644 index 0000000..2f30cad --- /dev/null +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/entity/ZnshDataVo.java @@ -0,0 +1,86 @@ +package com.bonus.base.entity; + +import lombok.Data; + +/** + * 智能手环实体类 + * @author 黑子 + */ +@Data +public class ZnshDataVo { + + private String id; + /** + * 相对坐标-x + * + */ + private String posX; + /** + * 相对坐标-y + * + */ + private String posY; + /** + * 经度 + */ + private String latitude; + /** + * 维度 + */ + private String longitude; + /** + * 心率值 + */ + private String heartRateValue; + /** + * 血氧值 + */ + private String bloodOxygenValue; + /** + * 血压值 + */ + private String bloodPressureValue; + /** + * 体温值 + */ + private String bodyTempValue; + /** + * pressure + */ + private String pressure; + /** + * 海拔 + */ + private String altitude; + /** + *绑定人S + */ + private String idCard; + /** + * 人员名称 + */ + private String personName; + + /** + * 端设备出厂标识 + */ + private String nodeId; + /** + * 平台注册端设备主键 + */ + private String deviceId; + /** + * 设备模型 + */ + private String model; + /** + * 服务 ID + */ + private String serviceId; + /** + * 数据监测时间 + */ + private String dataTime; + + private String remark; +} diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/screen/mapper/TbDeviceDataRecord.java b/bonus-modules/bonus-base/src/main/java/com/bonus/screen/mapper/TbDeviceDataRecord.java index df2c0b0..d5073ab 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/screen/mapper/TbDeviceDataRecord.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/screen/mapper/TbDeviceDataRecord.java @@ -1,7 +1,7 @@ package com.bonus.screen.mapper; import com.bonus.base.domain.TbDevAttribute; -import com.bonus.data.entity.DevAttributeVo; +import com.bonus.base.entity.DevAttributeVo; import com.bonus.screen.vo.DeviceWarnRecordVo; import com.bonus.screen.vo.WarnPredictionRecordVo; import org.apache.ibatis.annotations.Mapper; diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/screen/service/impl/ProjectDetailsViewServiceImpl.java b/bonus-modules/bonus-base/src/main/java/com/bonus/screen/service/impl/ProjectDetailsViewServiceImpl.java index ff83b9d..74bebfd 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/screen/service/impl/ProjectDetailsViewServiceImpl.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/screen/service/impl/ProjectDetailsViewServiceImpl.java @@ -2,7 +2,7 @@ package com.bonus.screen.service.impl; import com.alibaba.nacos.common.utils.CollectionUtils; import com.bonus.common.core.web.domain.AjaxResult; -import com.bonus.data.entity.DevAttributeVo; +import com.bonus.base.entity.DevAttributeVo; import com.bonus.screen.mapper.TbDeviceDataRecord; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/bonus-modules/bonus-base/src/main/resources/mapper/screen/TbDeviceDataRecordMapper.xml b/bonus-modules/bonus-base/src/main/resources/mapper/screen/TbDeviceDataRecordMapper.xml index 165248f..ae4d71e 100644 --- a/bonus-modules/bonus-base/src/main/resources/mapper/screen/TbDeviceDataRecordMapper.xml +++ b/bonus-modules/bonus-base/src/main/resources/mapper/screen/TbDeviceDataRecordMapper.xml @@ -64,7 +64,7 @@ where tddr.dev_id = #{devId} - SELECT tddr.dev_id,tddr.dev_name,tddr.dev_type,tddr.attribute_name as jcName,tddr.attribute_val as jcValue, tddr.is_warn,tddr.create_time as jcTime @@ -81,7 +81,7 @@ ORDER BY tddr.attribute_name, tddr.create_time DESC; - SELECT tddr.dev_id as devId,tddr.dev_name as devName,tddr.dev_type as devType,tddr.attribute_name as jcName,tddr.attribute_val as jcValue, tddr.is_warn as isWarn,tddr.create_time as jcTime @@ -96,7 +96,7 @@ tddr.create_time DESC - SELECT tddr.dev_id as devId,tddr.dev_name as devName,tddr.dev_type as devType,tddr.attribute_name as jcName,tddr.attribute_val as jcValue, tddr.is_warn as isWarn,tddr.create_time as jcTime @@ -112,7 +112,7 @@ limit 10 - SELECT tddr.dev_id as devId,tddr.dev_name as devName,tddr.dev_type as devType,tddr.attribute_name as jcName,tddr.attribute_val as jcValue, tddr.is_warn as isWarn,tddr.create_time as jcTime @@ -129,7 +129,7 @@ ORDER BY tddr.attribute_name, tddr.create_time DESC; - SELECT tddr.dev_id as devId,tddr.dev_name as devName,tddr.dev_type as devType,tddr.attribute_name as jcName,tddr.attribute_val as jcValue, tddr.is_warn as isWarn,tddr.create_time as jcTime @@ -145,7 +145,7 @@ limit 10 - SELECT tddr.dev_id as devId,tddr.dev_name as devName,tddr.dev_type as devType,tddr.attribute_name as jcName,tddr.attribute_val as jcValue, tddr.is_warn as isWarn,tddr.create_time as jcTime @@ -161,7 +161,7 @@ limit 20 - SELECT tddr.dev_id,tddr.dev_name,tddr.dev_type,tddr.attribute_name as jcName,tddr.attribute_val as jcValue, tddr.is_warn,tddr.create_time as jcTime diff --git a/bonus-modules/bonus-data/pom.xml b/bonus-modules/bonus-data/pom.xml new file mode 100644 index 0000000..d06e9f4 --- /dev/null +++ b/bonus-modules/bonus-data/pom.xml @@ -0,0 +1,130 @@ + + + + com.bonus + bonus-modules + 24.9.0-SNAPSHOT + + 4.0.0 + + bonus-data + + + bonus-modules-data服务 + + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + + com.alibaba.fastjson2 + fastjson2 + ${fastjson.version} + + + + + + com.mysql + mysql-connector-j + + + + + com.bonus + bonus-common-datasource + + + + com.bonus + bonus-common-core + + + + + com.bonus + bonus-common-datascope + + + com.bonus + bonus-common-swagger + + + com.bonus + bonus-common-log + + + + + com.bonus + bonus-common-log + + + + + com.bonus + bonus-common-swagger + + + com.google.guava + guava + 30.0-jre + compile + + + com.bonus + bonus-common-security + + + com.google.code.gson + gson + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + + + \ No newline at end of file diff --git a/bonus-modules/bonus-data/src/main/java/com/bonus/BonusDataApplication.java b/bonus-modules/bonus-data/src/main/java/com/bonus/BonusDataApplication.java new file mode 100644 index 0000000..de3a48c --- /dev/null +++ b/bonus-modules/bonus-data/src/main/java/com/bonus/BonusDataApplication.java @@ -0,0 +1,33 @@ +package com.bonus; + +import com.bonus.common.security.annotation.EnableCustomConfig; +import com.bonus.common.security.annotation.EnableRyFeignClients; +import com.bonus.common.swagger.annotation.EnableCustomSwagger2; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; + +/** + * base基础模块启动服务 + * @author ma_sh + */ + +@EnableCustomConfig +@EnableCustomSwagger2 +@EnableRyFeignClients +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class }) +public class BonusDataApplication { + public static void main(String[] args) { + SpringApplication.run(BonusDataApplication.class, args); + System.out.println("(♥◠‿◠)ノ゙ bonus-data数据中心模块启动成功 ლ(´ڡ`ლ)゙ \n" + + " .-------. ____ __ \n" + + " | _ _ \\ \\ \\ / / \n" + + " | ( ' ) | \\ _. / ' \n" + + " |(_ o _) / _( )_ .' \n" + + " | (_,_).' __ ___(_ o _)' \n" + + " | |\\ \\ | || |(_,_)' \n" + + " | | \\ `' /| `-' / \n" + + " | | \\ / \\ / \n" + + " ''-' `'-' `-..-' "); + } +} \ No newline at end of file diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/config/SystemScheduleConfig.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/config/SystemScheduleConfig.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/config/SystemScheduleConfig.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/config/SystemScheduleConfig.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/controller/DataCenterController.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/controller/DataCenterController.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/controller/DataCenterController.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/controller/DataCenterController.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/CgqInfoDataVo.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/CgqInfoDataVo.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/CgqInfoDataVo.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/CgqInfoDataVo.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/CjDataVo.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/CjDataVo.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/CjDataVo.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/CjDataVo.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/DevAttributeVo.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/DevAttributeVo.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/DevAttributeVo.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/DevAttributeVo.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/DevInfoVo.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/DevInfoVo.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/DevInfoVo.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/DevInfoVo.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/DeviceVo.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/DeviceVo.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/DeviceVo.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/DeviceVo.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/LlgcqDataVo.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/LlgcqDataVo.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/LlgcqDataVo.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/LlgcqDataVo.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/SafetyHatVo.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/SafetyHatVo.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/SafetyHatVo.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/SafetyHatVo.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/SwhjDataVo.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/SwhjDataVo.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/SwhjDataVo.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/SwhjDataVo.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/WarnConfigVo.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/WarnConfigVo.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/WarnConfigVo.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/WarnConfigVo.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/WarnVo.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/WarnVo.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/WarnVo.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/WarnVo.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/WatherVo.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/WatherVo.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/WatherVo.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/WatherVo.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/YxkjDataVo.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/YxkjDataVo.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/YxkjDataVo.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/YxkjDataVo.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/ZnshDataVo.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/ZnshDataVo.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/entity/ZnshDataVo.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/entity/ZnshDataVo.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/mapper/DataCenterMapper.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/mapper/DataCenterMapper.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/mapper/DataCenterMapper.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/mapper/DataCenterMapper.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/mapper/WatherMapper.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/mapper/WatherMapper.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/mapper/WatherMapper.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/mapper/WatherMapper.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/service/DataCenterService.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/service/DataCenterService.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/service/DataCenterService.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/service/DataCenterService.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/service/DataCenterServiceImpl.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/service/DataCenterServiceImpl.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/service/DataCenterServiceImpl.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/service/DataCenterServiceImpl.java diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/data/service/WatherWarnService.java b/bonus-modules/bonus-data/src/main/java/com/bonus/data/service/WatherWarnService.java similarity index 100% rename from bonus-modules/bonus-base/src/main/java/com/bonus/data/service/WatherWarnService.java rename to bonus-modules/bonus-data/src/main/java/com/bonus/data/service/WatherWarnService.java diff --git a/bonus-modules/bonus-data/src/main/resources/banner.txt b/bonus-modules/bonus-data/src/main/resources/banner.txt new file mode 100644 index 0000000..27cacb9 --- /dev/null +++ b/bonus-modules/bonus-data/src/main/resources/banner.txt @@ -0,0 +1,10 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} + _ __ _ _ + (_) / _|(_)| | + _ __ _ _ ___ _ _ _ ______ | |_ _ | | ___ +| '__|| | | | / _ \ | | | || ||______|| _|| || | / _ \ +| | | |_| || (_) || |_| || | | | | || || __/ +|_| \__,_| \___/ \__, ||_| |_| |_||_| \___| + __/ | + |___/ \ No newline at end of file diff --git a/bonus-modules/bonus-data/src/main/resources/bootstrap.yml b/bonus-modules/bonus-data/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..5e96db5 --- /dev/null +++ b/bonus-modules/bonus-data/src/main/resources/bootstrap.yml @@ -0,0 +1,28 @@ +# Tomcat +server: + port: 21995 +# Spring +spring: + application: + # 应用名称 + name: bonus-data + profiles: + # 环境配置 + active: dev + cloud: + nacos: + username: nacos + password: Jjsp@nacos2023 + discovery: + # 服务注册地址 + server-addr: 127.0.0.1:8848 + namespace: bns-public + config: + # 配置中心地址 + server-addr: 127.0.0.1:8848 + namespace: bns-public + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} diff --git a/bonus-modules/bonus-data/src/main/resources/logback.xml b/bonus-modules/bonus-data/src/main/resources/logback.xml new file mode 100644 index 0000000..ef09ad2 --- /dev/null +++ b/bonus-modules/bonus-data/src/main/resources/logback.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/bonus-modules/bonus-base/src/main/resources/mapper/data/DataCenterMapper.xml b/bonus-modules/bonus-data/src/main/resources/mapper/data/DataCenterMapper.xml similarity index 100% rename from bonus-modules/bonus-base/src/main/resources/mapper/data/DataCenterMapper.xml rename to bonus-modules/bonus-data/src/main/resources/mapper/data/DataCenterMapper.xml diff --git a/bonus-modules/bonus-base/src/main/resources/mapper/data/WatherMapper.xml b/bonus-modules/bonus-data/src/main/resources/mapper/data/WatherMapper.xml similarity index 100% rename from bonus-modules/bonus-base/src/main/resources/mapper/data/WatherMapper.xml rename to bonus-modules/bonus-data/src/main/resources/mapper/data/WatherMapper.xml diff --git a/bonus-modules/bonus-data/src/main/resources/template/TbPeopleTemplate.xlsx b/bonus-modules/bonus-data/src/main/resources/template/TbPeopleTemplate.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d98e7e68585d2555a0a92fa03483119e23cfbba1 GIT binary patch literal 10978 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 z zp&QcXKnm$0Bj&`5&tWc84?oP$_vtVp6{KFG`LEh&OjU|?Kv00X2PH>>(&lG$J!x%Z z<(rT8#NvvRB`Dt&145NGIDcTE64p5r-PrcxOm-g`3;S{0e*(#)5sEt#U3>^Z6BkFbJm+}V1fnVenWeDc(DnGE5-(L(%UY0Nyf)qn>)BXN@`mJ%d*!}wM zRe!gvTk#>4;DzXQadDz5o9Mm2v;>(bC06R(G3{eW;31_jt&(Fm9ll2Gb%^f$AWO)uApP#~xY?i1}NYS%aR?fbds1Z1* z_@03`r_1x1(gPtBgMB-()6)+D=->ymoR6KFFn#2gJlVoXi;sI=PTOzcY~DHyztJyz4Co%Br9JVd9S+Qc?xk2dKV zC*D`0oFy$v=SWu2a%EyUF8r!yG^)ZtxZq%%{Ai;u_R z@_nVUL$J@lsgKrsl&b%SRE1ws;eLk3r%>u{;s)vM;F^RJ%5(hEHDIqEv-~(rN|#uT zufNA(P(1Q&-jZMi{;O}Go0+e06TDwzu7}wYqT?W+9i!Mium2)k5m}SZd?yGtO-AM0 zFd*r&&LmfoT~!nks;=!mDF8KWg8oWZ!Y$A5A<`cxBc;+1g;Ht`Kmi&uU)7-aHy>J*mEn0_^2X@+djh7bzegAa;zKEQRkgUktgXJdlkBX}UgpCy z6$@$4@QGR1TR9tk=IzAmLKEQ5sxnQV?Qsw^$_{@ou8n+wVe83 z+P|N^x(y565>8uTrA{{V)0p9m6ki2f38{>xz9Gt+ki@WIf zk*8wh`zlKoRGF9InVKrI|DXc(6l45KO9d!XhV z9{8H!Ey`mo?{dmg>G_|r{8te8pWu}7igLdN!}t-LA0h%@!N=&|WPd$b{zA7iwb!k)2|Xy7Y_VAI29 z4Gq)Ud7M^KhaIgc&+O3i#(j6^k33`C34C+UMabJvaUwN>#nOl|u4f{@K6Dyt^T2ks zZB|N+^HEZt%tXLPy}TuQ(VL$DMK!W|G95caeDL9?30bL7NoK~j$(xL@FSS%1aj()` zgi{3~ex#s?O_7a~pN4~8QVMu1xU%o&na&Ahew||9<{7Q*&b)*Ad*lJ&4NK_?K8BNk zr|4tS-arcA=w{*QW~}AyWZ`P~coc6;8+Ytu$B?;9zd=uK#^q2euV93V70qDL*oAMo z2$LQ__eKftJ{l0G!GN8cQK24w<9qm04DM}7bqcH(bJeIG+d&;nTtfx-e4M|sk>DkB zFL@kRI#1FETykR6ni{y&bZF(W6_cSDj5X+OdgK`>&Apx(Wyemu;D~^+yd*9T*w05E zM=cGsL5O*3cC}xCh%Ov8lBXTT8+LT0jOL>tAJfUPOs8tb5`?d5Y;h}Z-FU;&7(qnL zijjQgp(mkXK3kqWrHAoFCnX`~%zj?D+4fEr-*2++DYf`Z>pP5sh`8A%BtRgnv$lWiUVMje&$5 zR8Z+A=j*G5HfVH

ICqNFMWs9KKDf2h_YM7)0+1b!Bn4Kfm(AZYf|T&8I@fW(qjW zBDvyUVYBh0I=QWzer-nXp)dI7r{ROZTi}T^Spc+}5+oGPuSn4Ef}y8Y0vief5`rAu z*HQkX&3+5`=Pb&jGy2^gYmZRK|8z}%SNhaBJ@Wik%Kit>ub1h+DSLcdf44_vkL@ot zQGeI>v?}V6__sc~zq0+SM(Qa$h>{{rE!QhsID)s$d=ISy>_GLZ@%vkvv6_WuJrQ4v4@ literal 0 HcmV?d00001