From 5a4dadcb1dd64ff1fca770b34028d730a509366a Mon Sep 17 00:00:00 2001 From: sxu <602087911@qq.com> Date: Mon, 4 Nov 2024 13:30:42 +0800 Subject: [PATCH] add data --- bonus-modules/data/pom.xml | 134 ++++ .../java/com/bonus/data/DataApplication.java | 35 + .../data/config/SystemScheduleConfig.java | 42 ++ .../data/controller/DataCenterController.java | 114 +++ .../com/bonus/data/entity/CgqInfoDataVo.java | 60 ++ .../java/com/bonus/data/entity/CjDataVo.java | 54 ++ .../com/bonus/data/entity/DevAttributeVo.java | 79 ++ .../java/com/bonus/data/entity/DevInfoVo.java | 87 +++ .../java/com/bonus/data/entity/DeviceVo.java | 22 + .../com/bonus/data/entity/LlgcqDataVo.java | 50 ++ .../com/bonus/data/entity/SafetyHatVo.java | 54 ++ .../com/bonus/data/entity/SwhjDataVo.java | 83 +++ .../com/bonus/data/entity/WarnConfigVo.java | 115 +++ .../java/com/bonus/data/entity/WarnVo.java | 36 + .../java/com/bonus/data/entity/WatherVo.java | 39 + .../com/bonus/data/entity/YxkjDataVo.java | 58 ++ .../com/bonus/data/entity/ZnshDataVo.java | 86 +++ .../bonus/data/mapper/DataCenterMapper.java | 109 +++ .../com/bonus/data/mapper/WatherMapper.java | 30 + .../bonus/data/service/DataCenterService.java | 67 ++ .../data/service/DataCenterServiceImpl.java | 698 ++++++++++++++++++ .../bonus/data/service/WatherWarnService.java | 195 +++++ .../data/src/main/resources/banner.txt | 10 + .../resources/bootstrap-sgzb_bns_local.yml | 30 + .../data/src/main/resources/bootstrap.yml | 8 + .../data/src/main/resources/logback.xml | 74 ++ .../mapper/data/DataCenterMapper.xml | 117 +++ .../resources/mapper/data/WatherMapper.xml | 22 + .../resources/template/TbPeopleTemplate.xlsx | Bin 0 -> 10978 bytes .../template/TbProPowerTemplate.xlsx | Bin 0 -> 10495 bytes pom.xml | 1 + 31 files changed, 2509 insertions(+) create mode 100644 bonus-modules/data/pom.xml create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/DataApplication.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/config/SystemScheduleConfig.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/controller/DataCenterController.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/entity/CgqInfoDataVo.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/entity/CjDataVo.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/entity/DevAttributeVo.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/entity/DevInfoVo.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/entity/DeviceVo.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/entity/LlgcqDataVo.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/entity/SafetyHatVo.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/entity/SwhjDataVo.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/entity/WarnConfigVo.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/entity/WarnVo.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/entity/WatherVo.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/entity/YxkjDataVo.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/entity/ZnshDataVo.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/mapper/DataCenterMapper.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/mapper/WatherMapper.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/service/DataCenterService.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/service/DataCenterServiceImpl.java create mode 100644 bonus-modules/data/src/main/java/com/bonus/data/service/WatherWarnService.java create mode 100644 bonus-modules/data/src/main/resources/banner.txt create mode 100644 bonus-modules/data/src/main/resources/bootstrap-sgzb_bns_local.yml create mode 100644 bonus-modules/data/src/main/resources/bootstrap.yml create mode 100644 bonus-modules/data/src/main/resources/logback.xml create mode 100644 bonus-modules/data/src/main/resources/mapper/data/DataCenterMapper.xml create mode 100644 bonus-modules/data/src/main/resources/mapper/data/WatherMapper.xml create mode 100644 bonus-modules/data/src/main/resources/template/TbPeopleTemplate.xlsx create mode 100644 bonus-modules/data/src/main/resources/template/TbProPowerTemplate.xlsx diff --git a/bonus-modules/data/pom.xml b/bonus-modules/data/pom.xml new file mode 100644 index 0000000..8898a4f --- /dev/null +++ b/bonus-modules/data/pom.xml @@ -0,0 +1,134 @@ + + + 4.0.0 + + com.bonus + bonus + 24.10.0-SNAPSHOT + ../../pom.xml + + + com.bonus + data + + + bonus-modules-data数据模块 + + + + + + + + + + + + com.github.ulisesbocchio + jasypt-spring-boot-starter + ${jasypt-spring-boot-starter.version} + + + + 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 + + + + + io.springfox + springfox-swagger-ui + ${swagger.fox.version} + + + + + com.mysql + mysql-connector-j + + + + + com.bonus + bonus-common-datasource + + + + + com.bonus + bonus-common-datascope + + + + + com.bonus + bonus-common-log + + + + + com.bonus + bonus-common-swagger + + + com.google.guava + guava + 30.0-jre + compile + + + + org.springframework.boot + spring-boot-starter-mail + + + com.bonus + bonus-common-biz + 24.10.0-SNAPSHOT + compile + + + junit + junit + test + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + \ No newline at end of file diff --git a/bonus-modules/data/src/main/java/com/bonus/data/DataApplication.java b/bonus-modules/data/src/main/java/com/bonus/data/DataApplication.java new file mode 100644 index 0000000..d1de4b7 --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/DataApplication.java @@ -0,0 +1,35 @@ +package com.bonus.data; + +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; + +/** + * 系统模块 + * + * @author bonus + */ +@EnableCustomConfig +@EnableCustomSwagger2 +@EnableRyFeignClients +@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) +public class DataApplication +{ + public static void main(String[] args) + { + SpringApplication.run(DataApplication.class, args); + System.out.println("(♥◠‿◠)ノ゙ 基础模块启动成功 ლ(´ڡ`ლ)゙ \n" + + " .-------. ____ __ \n" + + " | _ _ \\ \\ \\ / / \n" + + " | ( ' ) | \\ _. / ' \n" + + " |(_ o _) / _( )_ .' \n" + + " | (_,_).' __ ___(_ o _)' \n" + + " | |\\ \\ | || |(_,_)' \n" + + " | | \\ `' /| `-' / \n" + + " | | \\ / \\ / \n" + + " ''-' `'-' `-..-' "); + } +} diff --git a/bonus-modules/data/src/main/java/com/bonus/data/config/SystemScheduleConfig.java b/bonus-modules/data/src/main/java/com/bonus/data/config/SystemScheduleConfig.java new file mode 100644 index 0000000..b93f0b2 --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/config/SystemScheduleConfig.java @@ -0,0 +1,42 @@ +package com.bonus.data.config; + +import com.bonus.data.service.WatherWarnService; +import lombok.extern.slf4j.Slf4j; +import org.checkerframework.checker.units.qual.A; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; + +import javax.annotation.PostConstruct; + +/** + * 系统定时任务处理器 + * @author 黑子 + */ +@Slf4j +@EnableScheduling +@Configuration +public class SystemScheduleConfig { + + @Autowired + WatherWarnService service; + + /** + * 自动获取预警数据 + */ + @Scheduled(cron = "0 0/30 * * * ?") + @PostConstruct + private void updateWeather(){ + service.getCityWather(); + } + + + /** + * 自动更新边带状态 + */ + @Scheduled(cron = "0 0/10 * * * ?") + private void updateBdStatus(){ + service.updateBdStatus(); + } +} diff --git a/bonus-modules/data/src/main/java/com/bonus/data/controller/DataCenterController.java b/bonus-modules/data/src/main/java/com/bonus/data/controller/DataCenterController.java new file mode 100644 index 0000000..21f6303 --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/controller/DataCenterController.java @@ -0,0 +1,114 @@ +package com.bonus.data.controller; + +import com.alibaba.fastjson2.JSONObject; +import com.bonus.common.core.web.controller.BaseController; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.data.entity.*; +import com.bonus.data.service.DataCenterService; +import lombok.extern.slf4j.Slf4j; +import org.checkerframework.checker.units.qual.A; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + + +/** + * 边带记录设备表(tb_bd_device_record)表控制层 + * + * @author ma_sh + */ +@RestController +@RequestMapping("/data") +@Slf4j +public class DataCenterController extends BaseController { + + @Autowired + private DataCenterService service; + + /** + * 设备数据同步 + * @return + */ + @PostMapping("/uploadDevStatus") + public AjaxResult uploadDevStatus(@RequestBody String obj){ + try{ + return service.uploadDevStatus(obj); + }catch (Exception e){ + log.error(e.toString(),e); + } + return AjaxResult.error("数据解析异常"); + } + + + /** + * 传感器数据同步 + * @return + */ + @PostMapping("/uploadCgqData") + public AjaxResult uploadCgqData(@RequestBody String obj){ + return service.uploadCgqData(obj); + } + + /** + * 基础沉降上报数据 + * @return + */ + @PostMapping("/uploadCjData") + public AjaxResult uploadCjData(@RequestBody String obj){ + return service.uploadCjData(obj); + } + /** + * 室外环境检测 上报数据 + * @return + */ + @PostMapping("/uploadSwHjData") + public AjaxResult uploadSwHjData(@RequestBody String obj){ + + return service.uploadSwHjData(obj); + } + + /** + * 有限空间 数据上报 + * @param obj + * @return + */ + @PostMapping("/uploadYxkjData") + public AjaxResult uploadYxkjData(@RequestBody String obj){ + + + return service.uploadYxkjData(obj); + } + + /** + * 拉力传感器-数据上报 + * @param obj + * @return + */ + @PostMapping("/uploadLlCgqData") + public AjaxResult uploadLlCgqData(@RequestBody String obj){ + + return service.uploadLlCgqData(obj); + } + /** + * 智能手环数据上报 + * @param obj + * @return + */ + @PostMapping("/uploadZnshData") + public AjaxResult uploadZnshData(@RequestBody String obj){ + return service.uploadZnshData(obj); + } + + /** + * 安全帽数据上报 + * @param obj 设备数据 + */ + @PostMapping("/uploadSafetyHatData") + public AjaxResult uploadSafetyHatData(@RequestBody String obj){ + return service.uploadSafetyHatData(obj); + } +} diff --git a/bonus-modules/data/src/main/java/com/bonus/data/entity/CgqInfoDataVo.java b/bonus-modules/data/src/main/java/com/bonus/data/entity/CgqInfoDataVo.java new file mode 100644 index 0000000..fd7d33a --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/entity/CgqInfoDataVo.java @@ -0,0 +1,60 @@ +package com.bonus.data.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/data/src/main/java/com/bonus/data/entity/CjDataVo.java b/bonus-modules/data/src/main/java/com/bonus/data/entity/CjDataVo.java new file mode 100644 index 0000000..fa6c65e --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/entity/CjDataVo.java @@ -0,0 +1,54 @@ +package com.bonus.data.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/data/src/main/java/com/bonus/data/entity/DevAttributeVo.java b/bonus-modules/data/src/main/java/com/bonus/data/entity/DevAttributeVo.java new file mode 100644 index 0000000..4e08482 --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/entity/DevAttributeVo.java @@ -0,0 +1,79 @@ +package com.bonus.data.entity; + +import com.bonus.common.core.utils.DateUtils; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +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/data/src/main/java/com/bonus/data/entity/DevInfoVo.java b/bonus-modules/data/src/main/java/com/bonus/data/entity/DevInfoVo.java new file mode 100644 index 0000000..e0b05a9 --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/entity/DevInfoVo.java @@ -0,0 +1,87 @@ +package com.bonus.data.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/data/src/main/java/com/bonus/data/entity/DeviceVo.java b/bonus-modules/data/src/main/java/com/bonus/data/entity/DeviceVo.java new file mode 100644 index 0000000..bcf1775 --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/entity/DeviceVo.java @@ -0,0 +1,22 @@ +package com.bonus.data.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/data/src/main/java/com/bonus/data/entity/LlgcqDataVo.java b/bonus-modules/data/src/main/java/com/bonus/data/entity/LlgcqDataVo.java new file mode 100644 index 0000000..1e28cb3 --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/entity/LlgcqDataVo.java @@ -0,0 +1,50 @@ +package com.bonus.data.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/data/src/main/java/com/bonus/data/entity/SafetyHatVo.java b/bonus-modules/data/src/main/java/com/bonus/data/entity/SafetyHatVo.java new file mode 100644 index 0000000..cc9f53f --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/entity/SafetyHatVo.java @@ -0,0 +1,54 @@ +package com.bonus.data.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/data/src/main/java/com/bonus/data/entity/SwhjDataVo.java b/bonus-modules/data/src/main/java/com/bonus/data/entity/SwhjDataVo.java new file mode 100644 index 0000000..948f164 --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/entity/SwhjDataVo.java @@ -0,0 +1,83 @@ +package com.bonus.data.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/data/src/main/java/com/bonus/data/entity/WarnConfigVo.java b/bonus-modules/data/src/main/java/com/bonus/data/entity/WarnConfigVo.java new file mode 100644 index 0000000..1d911ce --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/entity/WarnConfigVo.java @@ -0,0 +1,115 @@ +package com.bonus.data.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/data/src/main/java/com/bonus/data/entity/WarnVo.java b/bonus-modules/data/src/main/java/com/bonus/data/entity/WarnVo.java new file mode 100644 index 0000000..16488cd --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/entity/WarnVo.java @@ -0,0 +1,36 @@ +package com.bonus.data.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/data/src/main/java/com/bonus/data/entity/WatherVo.java b/bonus-modules/data/src/main/java/com/bonus/data/entity/WatherVo.java new file mode 100644 index 0000000..f920e0e --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/entity/WatherVo.java @@ -0,0 +1,39 @@ +package com.bonus.data.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/data/src/main/java/com/bonus/data/entity/YxkjDataVo.java b/bonus-modules/data/src/main/java/com/bonus/data/entity/YxkjDataVo.java new file mode 100644 index 0000000..b70eb59 --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/entity/YxkjDataVo.java @@ -0,0 +1,58 @@ +package com.bonus.data.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/data/src/main/java/com/bonus/data/entity/ZnshDataVo.java b/bonus-modules/data/src/main/java/com/bonus/data/entity/ZnshDataVo.java new file mode 100644 index 0000000..e688882 --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/entity/ZnshDataVo.java @@ -0,0 +1,86 @@ +package com.bonus.data.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/data/src/main/java/com/bonus/data/mapper/DataCenterMapper.java b/bonus-modules/data/src/main/java/com/bonus/data/mapper/DataCenterMapper.java new file mode 100644 index 0000000..87b639d --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/mapper/DataCenterMapper.java @@ -0,0 +1,109 @@ +package com.bonus.data.mapper; + +import com.bonus.data.entity.*; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author 黑子 + * 数据中心 接口层 + */ +@Repository +public interface DataCenterMapper { + + /** + * 查询级联设备id + * @param vo + * @return + */ + int getDevInfoNum(DevInfoVo vo); + + /** + *更新设备数据 + * @param vo + * @return + */ + int updateDevInfo(DevInfoVo vo); + + /** + * 新增设备数据 + * @param vo + * @return + */ + int insertDevInfo(DevInfoVo vo); + + /** + * 查询系统设备id + * @param relId + * @param bdId + * @return + */ + DeviceVo getDevInfoId(@Param("relId") String relId,@Param("bdId") String bdId); + + /** + * 依据设备id 及级联编码 拆线呢检测数据 + * @param vo + * @return + */ + String getAttribute(DevAttributeVo vo); + + /** + * 更新数据 + * @param vo + */ + void updateAttribute(DevAttributeVo vo); + + /** + * 查询 数据 + * @param vo + */ + void insertAttribute(DevAttributeVo vo); + + /** + * 依据设备id 查询设备告警配置 + * @param devId + * @return + */ + WarnConfigVo getDevWarnConfig(@Param("devId") String devId); + + /** + * 插入数据记录 + * @param vo + */ + void insertRecordData(DevAttributeVo vo); + + /** + * 更新设备采集数据值 + * @param devId + * @param devJson + */ + void updateDevData(@Param("devId") String devId, @Param("devJson") String devJson); + + /** + * 通过边带编码 查询设备边带id + * @param edgeId + * @return + */ + String getDevBdData(@Param("edgeId") String edgeId); + + /** + * 查询本系统设备类型 + * @param vo + * @return + */ + Integer getDevTypeId(DevInfoVo vo); + + /** + * 新增告警数据 + * @param vo + */ + void insertWarn(WarnVo vo); + + /** + * 更新边带状态 + * @param bdId + */ + void updateBdStatus(@Param("bdId") String bdId); +} diff --git a/bonus-modules/data/src/main/java/com/bonus/data/mapper/WatherMapper.java b/bonus-modules/data/src/main/java/com/bonus/data/mapper/WatherMapper.java new file mode 100644 index 0000000..9694182 --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/mapper/WatherMapper.java @@ -0,0 +1,30 @@ +package com.bonus.data.mapper; + +import com.bonus.data.entity.WatherVo; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +/** + * 天气接口处理 + * @author 黑子 + */ +@Repository +public interface WatherMapper { + + /** + * 删除当天数据 + * @param day + */ + void delWatherWrn(@Param("day") String day); + + /** + *更新数据 + * @param date + */ + void replaceWather(WatherVo date); + + /** + * 更新边带状态 + */ + void updateBdStatus(); +} diff --git a/bonus-modules/data/src/main/java/com/bonus/data/service/DataCenterService.java b/bonus-modules/data/src/main/java/com/bonus/data/service/DataCenterService.java new file mode 100644 index 0000000..41b8f36 --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/service/DataCenterService.java @@ -0,0 +1,67 @@ +package com.bonus.data.service; + +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.data.entity.*; + +import java.util.List; + +/** + * @author 黑子 + */ +public interface DataCenterService { + /** + * 设备基础信息上传 + * @param obj + * @return + */ + AjaxResult uploadDevStatus(String obj); + + /** + * 传感器数据采集同步 + * @param obj + * @return + */ + AjaxResult uploadCgqData(String obj); + + /** + * 沉降数据采集 + * @param obj + * @return + */ + AjaxResult uploadCjData(String obj); + + /** + * 安全帽监测--数据采集 + * @param obj + * @return + */ + AjaxResult uploadSafetyHatData(String obj); + + /** + * 室外环境检测-数据采集 + * @param obj + * @return + */ + AjaxResult uploadSwHjData(String obj); + + /** + * 有限空间数据采集 + * @param obj + * @return + */ + AjaxResult uploadYxkjData(String obj); + + /** + * 拉力传感器 数据采集 + * @param obj + * @return + */ + AjaxResult uploadLlCgqData(String obj); + + /** + * 智能手环数据采集 + * @param obj + * @return + */ + AjaxResult uploadZnshData(String obj); +} diff --git a/bonus-modules/data/src/main/java/com/bonus/data/service/DataCenterServiceImpl.java b/bonus-modules/data/src/main/java/com/bonus/data/service/DataCenterServiceImpl.java new file mode 100644 index 0000000..103823c --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/service/DataCenterServiceImpl.java @@ -0,0 +1,698 @@ +package com.bonus.data.service; + +import com.alibaba.fastjson2.JSONObject; +import com.alibaba.nacos.common.utils.UuidUtils; +import com.bonus.common.core.utils.DateUtils; +import com.bonus.common.core.utils.StringUtils; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.data.entity.*; +import com.bonus.data.mapper.DataCenterMapper; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; + +/** + * @author 黑子 + * 数据中心处理曾 + */ + +@Service +@Slf4j +public class DataCenterServiceImpl implements DataCenterService{ + + @Autowired + private DataCenterMapper mapper; + + @Override + public AjaxResult uploadDevStatus(String obj) { + AtomicReference msg= new AtomicReference<>("数据上传成功!"); + try{ + JSONObject jsonObject = JSONObject.parseObject(obj); + Object edgeId=jsonObject.get("edgeId"); + log.info("设备数据数据-->{}",obj); + List list = jsonObject.getList("list",DevInfoVo.class); + if(ObjectUtils.isNotEmpty(edgeId)){ + String bdId = mapper.getDevBdData(edgeId.toString()); + if(StringUtils.isNotEmpty(bdId)){ + if (StringUtils.isNotEmpty(list)) { + mapper.updateBdStatus(bdId); + list.forEach(vo->{ + vo.setBdId(bdId); + vo.setRelType(vo.getDeviceType()); + Integer devType=mapper.getDevTypeId(vo); + if(devType!=null && devType!=0){ + vo.setDeviceType(devType.toString()); + } + int nums = mapper.getDevInfoNum(vo); + if (nums > 0) { + //是否更新 + int num = mapper.updateDevInfo(vo); + if(num<1){ + msg.set("存在数据更新失败!"); + } + }else{ + int num=mapper.insertDevInfo(vo); + if(num<1){ + msg.set("设备上传失败,请联系管理员!"); + } + } + }); + } + }else{ + msg.set("边带设备未注册!"); + } + + } + + + }catch (Exception e){ + log.error(e.toString(),e); + } + return AjaxResult.success(msg.get()); + } + + /** + * 传感器数据采集同步 + * @param obj + * @return + */ + @Override + public AjaxResult uploadCgqData(String obj) { + AtomicReference msg= new AtomicReference<>("数据上传成功!"); + try{ + JSONObject jsonObject = JSONObject.parseObject(obj); + log.info("传感器数据-->{}",obj); + Object edgeId=jsonObject.get("edgeId"); + String bdId; + if(ObjectUtils.isNotEmpty(edgeId)){ + bdId=edgeId.toString(); + } else { + bdId = "999"; + } + List list = jsonObject.getList("list",CgqInfoDataVo.class); + ObjectMapper objectMapper=new ObjectMapper(); + List attributeVos=new ArrayList<>(); + if (StringUtils.isNotEmpty(list)) { + list.forEach(vo->{ + //先找到系统设备id + DeviceVo deviceVo=mapper.getDevInfoId(vo.getDeviceId(),bdId); + if(ObjectUtils.isNotEmpty(deviceVo) && StringUtils.isNotEmpty(deviceVo.getDevId())){ + mapper.updateBdStatus(bdId); + String json=""; + try { + json = objectMapper.writeValueAsString(vo); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + String devId= deviceVo.getDevId(); + log.info("设备注册系统id---->{}",devId); + WarnConfigVo config=mapper.getDevWarnConfig(devId); + String mergerId= UuidUtils.generateUuid().toUpperCase().replaceAll("-",""); + attributeVos.clear(); + DevAttributeVo devAttributeVo=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"电池电量",vo.getCapacity(),"%","capacity","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo); + DevAttributeVo devAttributeVo2=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"角度X",vo.getAngleX(),"°","angle_x",isWarn(config,vo.getAngleX(),1,deviceVo,"角度X"),vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo2); + DevAttributeVo devAttributeVo3=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"角度Y",vo.getAngleY(),"°","angle_y",isWarn(config,vo.getAngleY(),1,deviceVo,"角度Y"),vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo3); + DevAttributeVo devAttributeVo4=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"角度Z",vo.getAngleZ(),"°","angle_z",isWarn(config,vo.getAngleZ(),1,deviceVo,"角度Z"),vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo4); + //更新/新增设备检测信息及记录 + insertOrAddDevAttribute(attributeVos); + //更新设备采集数据json + mapper.updateDevData(devId,json); + }else{ + log.info("设备未注册------>{}",vo.getDeviceId()); + msg.set("设备未注册!"); + } + + }); + } + }catch (Exception e){ + log.error(e.toString(),e); + } + return AjaxResult.error(msg.get()); + } + + @Override + public AjaxResult uploadCjData(String obj) { + int code = 1; + try{ + JSONObject jsonObject = JSONObject.parseObject(obj); + log.info("沉降数据-->{}",obj); + List list = jsonObject.getList("list",CjDataVo.class); + Object edgeId=jsonObject.get("edgeId"); + String bdId; + if(ObjectUtils.isNotEmpty(edgeId)){ + bdId=edgeId.toString(); + } else { + bdId = "999"; + } + ObjectMapper objectMapper=new ObjectMapper(); + List attributeVos=new ArrayList<>(); + if (StringUtils.isNotEmpty(list)) { + for (CjDataVo vo : list) {//先找到系统设备id + DeviceVo deviceVo = mapper.getDevInfoId(vo.getDeviceId(), bdId); + if (ObjectUtils.isNotEmpty(deviceVo) && StringUtils.isNotEmpty(deviceVo.getDevId())) { + mapper.updateBdStatus(bdId); + String json = ""; + try { + json = objectMapper.writeValueAsString(vo); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + String devId = deviceVo.getDevId(); + log.info("设备注册系统id---->{}", devId); + // WarnConfigVo config=mapper.getDevWarnConfig(devId); + String mergerId = UuidUtils.generateUuid().toUpperCase().replaceAll("-", ""); + attributeVos.clear(); + DevAttributeVo devAttributeVo = new DevAttributeVo(devId, json, deviceVo.getDevName(), deviceVo.getDevType(), "测量值", vo.getSubsideData(), "mm", "subside_data", "0", vo.getDataTime(), mergerId); + attributeVos.add(devAttributeVo); + DevAttributeVo devAttributeVo2 = new DevAttributeVo(devId, json, deviceVo.getDevName(), deviceVo.getDevType(), "变化值", vo.getRealSubsideData(), "mm", "real_subside_data", "0", vo.getDataTime(), mergerId); + attributeVos.add(devAttributeVo2); + DevAttributeVo devAttributeVo3 = new DevAttributeVo(devId, json, deviceVo.getDevName(), deviceVo.getDevType(), "累加值", vo.getAccSubsideData(), "mm", "acc_subside_data", "0", vo.getDataTime(), mergerId); + attributeVos.add(devAttributeVo3); + DevAttributeVo devAttributeVo4 = new DevAttributeVo(devId, json, deviceVo.getDevName(), deviceVo.getDevType(), "基础沉降", vo.getSettlementFoundation(), "mm", "settlement_foundation", "0", vo.getDataTime(), mergerId); + attributeVos.add(devAttributeVo4); + //更新/新增设备检测信息及记录 + insertOrAddDevAttribute(attributeVos); + //更新设备采集数据json + mapper.updateDevData(devId, json); + } else { + log.info("设备未注册------>{}", vo.getDeviceId()); + code = 0; + } + + } + } + }catch (Exception e){ + log.error(e.toString(),e); + } + return code == 1 ? AjaxResult.success("设备上传成功") : AjaxResult.error("设备未注册"); + } + + /** + * 安全帽监测--数据采集 + * + * @param obj + * @return + */ + @Override + public AjaxResult uploadSafetyHatData(String obj) { + AtomicReference msg= new AtomicReference<>("数据上传成功!"); + try { + JSONObject jsonObject = JSONObject.parseObject(obj); + log.info("安全帽感知设备数据-->{}",obj); + List list = jsonObject.getList("list",SafetyHatVo.class); + ObjectMapper objectMapper = new ObjectMapper(); + List safetyHatVos = new ArrayList<>(); + Object edgeId = jsonObject.get("edgeId"); + String bdId; + if (ObjectUtils.isNotEmpty(edgeId)){ + bdId = edgeId.toString(); + } else { + bdId = "99999"; + } + if (StringUtils.isNotEmpty(list)) { + list.forEach(vo->{ + //先找到系统设备id + DeviceVo deviceVo = mapper.getDevInfoId(vo.getDeviceId(),bdId); + if(ObjectUtils.isNotEmpty(deviceVo) && StringUtils.isNotEmpty(deviceVo.getDevId())){ + mapper.updateBdStatus(bdId); + String json; + try { + json = objectMapper.writeValueAsString(vo); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + String devId = deviceVo.getDevId(); + log.info("设备注册系统id---->{}",devId); + // WarnConfigVo config = mapper.getDevWarnConfig(devId); + String mergerId= UuidUtils.generateUuid().toUpperCase().replaceAll("-",""); + safetyHatVos.clear(); + DevAttributeVo devAttributeVo = new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"经度",vo.getLon(),"","hat_lon","0",vo.getDataTime(),mergerId); + safetyHatVos.add(devAttributeVo); + DevAttributeVo devAttributeVo2 = new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"纬度",vo.getLat(),"","hat_lat","0",vo.getDataTime(),mergerId); + safetyHatVos.add(devAttributeVo2); + //更新/新增设备检测信息及记录 + insertOrAddDevAttribute(safetyHatVos); + mapper.updateDevData(devId,json); + }else{ + log.info("设备未注册------>{}",vo.getDeviceId()); + msg.set("设备未注册!"); + } + }); + } + }catch (Exception e){ + log.error(e.toString(),e); + } + return AjaxResult.error(msg.get()); + } + + @Override + public AjaxResult uploadSwHjData(String obj) { + AtomicReference msg= new AtomicReference<>("数据上传成功!"); + try{ + JSONObject jsonObject = JSONObject.parseObject(obj); + log.info("室外环境检测数据-->{}",obj); + List list = jsonObject.getList("list",SwhjDataVo.class); + ObjectMapper objectMapper=new ObjectMapper(); + List attributeVos=new ArrayList<>(); + Object edgeId=jsonObject.get("edgeId"); + String bdId; + if(ObjectUtils.isNotEmpty(edgeId)){ + bdId=edgeId.toString(); + } else { + bdId = "999"; + } + + if (StringUtils.isNotEmpty(list)) { + list.forEach(vo->{ + //先找到系统设备id + DeviceVo deviceVo=mapper.getDevInfoId(vo.getDeviceId(),bdId); + if(ObjectUtils.isNotEmpty(deviceVo) && StringUtils.isNotEmpty(deviceVo.getDevId())){ + mapper.updateBdStatus(bdId); + String json=""; + try { + json = objectMapper.writeValueAsString(vo); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + String devId= deviceVo.getDevId(); + log.info("设备注册系统id---->{}",devId); + WarnConfigVo config=mapper.getDevWarnConfig(devId); + String mergerId= UuidUtils.generateUuid().toUpperCase().replaceAll("-",""); + attributeVos.clear(); + DevAttributeVo devAttributeVo=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"0.5µm粒子数个",vo.getGrain05(),"m³","grain_05","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo); + DevAttributeVo devAttributeVo2=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"1.0µm粒子数",vo.getGrain10(),"m³","grain_10","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo2); + DevAttributeVo devAttributeVo3=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"5.0µm粒子数",vo.getGrain50(),"m³","grain_50","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo3); + DevAttributeVo devAttributeVo4=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"pm2.5",vo.getPm25(),"μg/m3","pm25",isWarn(config,vo.getPm25(),2,deviceVo,"pm2.5"),vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo4); + DevAttributeVo devAttributeVo5=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"pm10",vo.getPm10(),"μg/m3","pm10",isWarn(config,vo.getPm10(),3,deviceVo,"pm10"),vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo5); + DevAttributeVo devAttributeVo6=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"噪声",vo.getNoise(),"db","noise",isWarn(config,vo.getNoise(),4,deviceVo,"噪声"),vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo6); + DevAttributeVo devAttributeVo7=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"风向",vo.getWindDirection(),"","wind_direction","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo7); + DevAttributeVo devAttributeVo8=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"风速",vo.getWindForce(),"m/s","wind_force","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo8); + DevAttributeVo devAttributeVo9=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"温度",vo.getAirTemperature(),"°C","air_Temperature",isWarn(config,vo.getAirTemperature(),5,deviceVo,"温度"),vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo9); + DevAttributeVo devAttributeVo10=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"湿度",vo.getHumidity(),"%rh","humidity",isWarn(config,vo.getHumidity(),6,deviceVo,"湿度"),vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo10); + DevAttributeVo devAttributeVo11=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"微正压",vo.getPositivePressure(),"Pa","positive_pressure","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo11); + //更新/新增设备检测信息及记录 + insertOrAddDevAttribute(attributeVos); + //更新设备采集数据json + mapper.updateDevData(devId,json); + }else{ + log.info("设备未注册------>{}",vo.getDeviceId()); + msg.set("设备未注册!"); + } + + }); + } + }catch (Exception e){ + log.error(e.toString(),e); + } + return AjaxResult.error(msg.get()); + } + + + @Override + public AjaxResult uploadYxkjData(String obj) { + AtomicReference msg= new AtomicReference<>("数据上传成功!"); + try{ + JSONObject jsonObject = JSONObject.parseObject(obj); + log.info("有限空间数据-->{}",obj); + List list = jsonObject.getList("list",YxkjDataVo.class); + ObjectMapper objectMapper=new ObjectMapper(); + List attributeVos=new ArrayList<>(); + Object edgeId=jsonObject.get("edgeId"); + String bdId; + if(ObjectUtils.isNotEmpty(edgeId)){ + bdId=edgeId.toString(); + } else { + bdId = "999"; + } + if (StringUtils.isNotEmpty(list)) { + list.forEach(vo->{ + //先找到系统设备id + DeviceVo deviceVo=mapper.getDevInfoId(vo.getDeviceId(),bdId); + if(ObjectUtils.isNotEmpty(deviceVo) && StringUtils.isNotEmpty(deviceVo.getDevId())){ + mapper.updateBdStatus(bdId); + String json=""; + try { + json = objectMapper.writeValueAsString(vo); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + String devId= deviceVo.getDevId(); + log.info("设备注册系统id---->{}",devId); + WarnConfigVo config=mapper.getDevWarnConfig(devId); + String mergerId= UuidUtils.generateUuid().toUpperCase().replaceAll("-",""); + attributeVos.clear(); + DevAttributeVo devAttributeVo=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"含氧量",vo.getOxygen(),"%VOL","oxygen",isWarn(config,vo.getOxygen(),7,deviceVo,"含氧量"),vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo); + DevAttributeVo devAttributeVo2=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"一氧化碳",vo.getCarbonMonoxide(),"ppm","carbon_monoxide",isWarn(config,vo.getCarbonMonoxide(),8,deviceVo,"一氧化碳"),vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo2); + DevAttributeVo devAttributeVo3=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"可燃气体",vo.getCombustible(),"%LEL","combustible",isWarn(config,vo.getCombustible(),9,deviceVo,"可燃气体"),vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo3); + DevAttributeVo devAttributeVo4=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"硫化氢",vo.getHydrothion(),"ppm","hydrothion",isWarn(config,vo.getHydrothion(),10,deviceVo,"硫化氢"),vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo4); + //更新/新增设备检测信息及记录 + insertOrAddDevAttribute(attributeVos); + mapper.updateDevData(devId,json); + }else{ + log.info("设备未注册------>{}",vo.getDeviceId()); + msg.set("设备未注册!"); + } + + }); + } + }catch (Exception e){ + log.error(e.toString(),e); + } + return AjaxResult.error(msg.get()); + } + + @Override + public AjaxResult uploadLlCgqData(String obj) { + AtomicReference msg= new AtomicReference<>("数据上传成功!"); + try{ + JSONObject jsonObject = JSONObject.parseObject(obj); + log.info("拉力传感器数据-->{}",obj); + List list = jsonObject.getList("list",LlgcqDataVo.class); + ObjectMapper objectMapper=new ObjectMapper(); + List attributeVos=new ArrayList<>(); + Object edgeId=jsonObject.get("edgeId"); + String bdId; + if(ObjectUtils.isNotEmpty(edgeId)){ + bdId=edgeId.toString(); + } else { + bdId = "999"; + } + if (StringUtils.isNotEmpty(list)) { + list.forEach(vo->{ + //先找到系统设备id + DeviceVo deviceVo=mapper.getDevInfoId(vo.getDeviceId(),bdId); + if(ObjectUtils.isNotEmpty(deviceVo) && StringUtils.isNotEmpty(deviceVo.getDevId())){ + mapper.updateBdStatus(bdId); + String json=""; + try { + json = objectMapper.writeValueAsString(vo); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + String devId= deviceVo.getDevId(); + log.info("设备注册系统id---->{}",devId); + WarnConfigVo config=mapper.getDevWarnConfig(devId); + String mergerId= UuidUtils.generateUuid().toUpperCase().replaceAll("-",""); + attributeVos.clear(); + DevAttributeVo devAttributeVo=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"电量",vo.getCapacity(),"%VOL","capacity","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo); + DevAttributeVo devAttributeVo2=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"拉力",vo.getTractionData(),"/KN","traction_data",isWarn(config,vo.getTractionData(),11,deviceVo,"拉力"),vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo2); + //更新/新增设备检测信息及记录 + insertOrAddDevAttribute(attributeVos); + mapper.updateDevData(devId,json); + }else{ + log.info("设备未注册------>{}",vo.getDeviceId()); + msg.set("设备未注册!"); + } + }); + } + }catch (Exception e){ + log.error(e.toString(),e); + } + return AjaxResult.error(msg.get()); + } + + @Override + public AjaxResult uploadZnshData(String obj) { + AtomicReference msg= new AtomicReference<>("数据上传成功!"); + try{ + JSONObject jsonObject = JSONObject.parseObject(obj); + log.info("只能手环数据-->{}",obj); + List list = jsonObject.getList("list",ZnshDataVo.class); + ObjectMapper objectMapper=new ObjectMapper(); + List attributeVos=new ArrayList<>(); + Object edgeId=jsonObject.get("edgeId"); + String bdId; + if(ObjectUtils.isNotEmpty(edgeId)){ + bdId=edgeId.toString(); + } else { + bdId = "999"; + } + if (StringUtils.isNotEmpty(list)) { + list.forEach(vo->{ + //先找到系统设备id + DeviceVo deviceVo=mapper.getDevInfoId(vo.getDeviceId(),bdId); + if(ObjectUtils.isNotEmpty(deviceVo) && StringUtils.isNotEmpty(deviceVo.getDevId())){ + mapper.updateBdStatus(bdId); + String json=""; + try { + json = objectMapper.writeValueAsString(vo); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + String devId= deviceVo.getDevId(); + log.info("设备注册系统id---->{}",devId); + // WarnConfigVo config=mapper.getDevWarnConfig(devId); + String mergerId= UuidUtils.generateUuid().toUpperCase().replaceAll("-",""); + attributeVos.clear(); + DevAttributeVo devAttributeVo=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"相对坐标x",vo.getPosX(),"","pos_x","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo); + DevAttributeVo devAttributeVo2=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"相对坐标y",vo.getPosY(),"","pos_y","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo2); + DevAttributeVo devAttributeVo3=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"纬度",vo.getLatitude(),"","latitude","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo3); + DevAttributeVo devAttributeVo4=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"经度",vo.getLongitude(),"","longitude","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo4); + DevAttributeVo devAttributeVo5=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"心率",vo.getHeartRateValue(),"","heart_rate_value","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo5); + DevAttributeVo devAttributeVo6=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"血氧",vo.getBloodOxygenValue(),"","blood_oxygen_value","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo6); + DevAttributeVo devAttributeVo7=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"血压",vo.getBloodPressureValue(),"","blood_pressure_value","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo7); + DevAttributeVo devAttributeVo8=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"体温",vo.getBodyTempValue(),"","body_temp_value","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo8); + DevAttributeVo devAttributeVo9=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"气压",vo.getPressure(),"","pressure","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo9); + DevAttributeVo devAttributeVo10=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"海拔",vo.getAltitude(),"","altitude","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo10); + DevAttributeVo devAttributeVo11=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"身份证号码",vo.getIdCard(),"","id_card","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo11); + DevAttributeVo devAttributeVo12=new DevAttributeVo(devId,json,deviceVo.getDevName(),deviceVo.getDevType(),"人员名称",vo.getPersonName(),"","person_name","0",vo.getDataTime(),mergerId); + attributeVos.add(devAttributeVo12); + //更新/新增设备检测信息及记录 + insertOrAddDevAttribute(attributeVos); + mapper.updateDevData(devId,json); + }else{ + log.info("设备未注册------>{}",vo.getDeviceId()); + msg.set("设备未注册!"); + } + }); + } + }catch (Exception e){ + log.error(e.toString(),e); + } + return AjaxResult.error(msg.get()); + } + + + /** + * 数据插入/更新 + * @param list + */ + @Async + public void insertOrAddDevAttribute(List list){ + try{ + if (StringUtils.isNotEmpty(list)) { + list.forEach(vo->{ + String id=mapper.getAttribute(vo); + if(StringUtils.isNotEmpty(id)){ + vo.setAttributeId(id); + mapper.updateAttribute(vo); + }else{ + mapper.insertAttribute(vo); + } + //插入数据记录 + mapper.insertRecordData(vo); + }); + } + + + + }catch (Exception e){ + log.error(e.toString(),e); + } + } + + /** + * 判断是否告警 + * @return + */ + public String isWarn(WarnConfigVo config,String val,int type ,DeviceVo deviceVo,String warn){ + try{ + if(ObjectUtils.isNotEmpty(config) && type==1 && ObjectUtils.isNotEmpty(val)){ + BigDecimal max=config.getConfigVal1Max(); + BigDecimal min=config.getConfigVal1Min(); + BigDecimal value=new BigDecimal(val); + //设备告警 + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"倾角异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + } + if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"倾角异常",warn+"低于阈值",DateUtils.getTime()); + return "1"; + } + }else if(ObjectUtils.isNotEmpty(config) && type==2 && ObjectUtils.isNotEmpty(val)){ + BigDecimal max=config.getConfigVal4Max(); + BigDecimal min=config.getConfigVal4Min(); + BigDecimal value=new BigDecimal(val); + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"PM2.5异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"PM2.5异常",warn+"低于阈值",DateUtils.getTime()); + return "1"; + } + }else if(ObjectUtils.isNotEmpty(config) && type==3 && ObjectUtils.isNotEmpty(val)){ + BigDecimal max=config.getConfigVal5Max(); + BigDecimal min=config.getConfigVal5Min(); + BigDecimal value=new BigDecimal(val); + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"PM10异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"PM10异常",warn+"低于阈值",DateUtils.getTime()); + return "1"; + } + }else if(ObjectUtils.isNotEmpty(config) && type==4 && ObjectUtils.isNotEmpty(val)){ + BigDecimal max=config.getConfigVal3Max(); + BigDecimal min=config.getConfigVal3Min(); + BigDecimal value=new BigDecimal(val); + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"噪声异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"噪声异常",warn+"低于阈值",DateUtils.getTime()); + return "1"; + } + }else if(ObjectUtils.isNotEmpty(config) && type==5 && ObjectUtils.isNotEmpty(val)){ + BigDecimal max=config.getConfigVal1Max(); + BigDecimal min=config.getConfigVal1Min(); + BigDecimal value=new BigDecimal(val); + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"温度异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"温度异常",warn+"低于阈值",DateUtils.getTime()); + return "1"; + } + }else if(ObjectUtils.isNotEmpty(config) && type==6 && ObjectUtils.isNotEmpty(val)){ + BigDecimal max=config.getConfigVal2Max(); + BigDecimal min=config.getConfigVal2Min(); + BigDecimal value=new BigDecimal(val); + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"湿度异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"湿度异常",warn+"低于阈值",DateUtils.getTime()); + return "1"; + } + }else if(ObjectUtils.isNotEmpty(config) && type==7 && ObjectUtils.isNotEmpty(val)){ + BigDecimal max=config.getConfigVal1Max(); + BigDecimal min=config.getConfigVal1Min(); + BigDecimal value=new BigDecimal(val); + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"含氧量异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"含氧量异常",warn+"低于阈值",DateUtils.getTime()); + return "1"; + } + }else if(ObjectUtils.isNotEmpty(config) && type==8 && ObjectUtils.isNotEmpty(val)){ + BigDecimal max=config.getConfigVal2Max(); + BigDecimal min=config.getConfigVal2Min(); + BigDecimal value=new BigDecimal(val); + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"一氧化碳异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"一氧化碳异常",warn+"低于阈值",DateUtils.getTime()); + return "1"; + } + }else if(ObjectUtils.isNotEmpty(config) && type==9 && ObjectUtils.isNotEmpty(val)){ + BigDecimal max=config.getConfigVal3Max(); + BigDecimal min=config.getConfigVal3Min(); + BigDecimal value=new BigDecimal(val); + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"可燃气体异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"可燃气体异常",warn+"低于阈值",DateUtils.getTime()); + return "1"; + } + }else if(ObjectUtils.isNotEmpty(config) && type==10 && ObjectUtils.isNotEmpty(val)){ + BigDecimal max=config.getConfigVal4Max(); + BigDecimal min=config.getConfigVal4Min(); + BigDecimal value=new BigDecimal(val); + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"硫化氢异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"硫化氢异常",warn+"低于阈值",DateUtils.getTime()); + return "1"; + } + }else if(ObjectUtils.isNotEmpty(config) && type==11 && ObjectUtils.isNotEmpty(val)){ + BigDecimal max=config.getConfigVal4Max(); + BigDecimal min=config.getConfigVal4Min(); + BigDecimal value=new BigDecimal(val); + if(max.compareTo(value)<0){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"拉力异常",warn+"超出阈值",DateUtils.getTime()); + return "1"; + }else if(min.compareTo(value)>0 ){ + insertWarn(deviceVo.getDevId(),deviceVo.getProCode(),"拉力异常",warn+"低于阈值",DateUtils.getTime()); + return "1"; + } + } + + }catch (Exception e){ + log.error(e.toString(),e); + } + return "0"; + } + + /** + * 设备告警数据插入 + * @param devId + * @param + * @param warnType + * @param warnContent + * @param warnTime + */ + public void insertWarn(String devId,String proCode,String warnType,String warnContent,String warnTime){ + try{ + WarnVo vo=new WarnVo(warnTime,warnContent,warnType,devId,proCode,""); + mapper.insertWarn(vo); + }catch (Exception e){ + log.error(e.toString(),e); + } + } +} diff --git a/bonus-modules/data/src/main/java/com/bonus/data/service/WatherWarnService.java b/bonus-modules/data/src/main/java/com/bonus/data/service/WatherWarnService.java new file mode 100644 index 0000000..052e673 --- /dev/null +++ b/bonus-modules/data/src/main/java/com/bonus/data/service/WatherWarnService.java @@ -0,0 +1,195 @@ +package com.bonus.data.service; + +import cn.hutool.core.date.DateTime; +import com.alibaba.fastjson2.JSON; +import com.bonus.common.core.utils.DateUtils; +import com.bonus.data.entity.WatherVo; +import com.bonus.data.mapper.WatherMapper; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 天气预警抓取 + */ +@Service +public class WatherWarnService { + + private static final Logger log = LoggerFactory.getLogger(WatherWarnService.class); + /** + * 搜索城市 + */ + // static String CITY = "合肥市@阜阳市@安庆市@滁州市@六安市@宿州市@宣城市@芜湖市@池州市@淮南市@黄山市@蚌埠市@亳州市@淮北市@铜陵市@马鞍山市"; + + static String CITY =""; + /** + * 所有城市灾害预警列表 + */ + final static String ALL_CITY_URL = "http://product.weather.com.cn/alarm/grepalarm_cn.php"; + + /** + * 搜索城市灾害预警数据页面 + */ + final static String VALUE_URL = "http://product.weather.com.cn/alarm/webdata/"; + /** + * 时间戳 + */ + static long TIME_STAMP = System.currentTimeMillis(); + + @Autowired + private WatherMapper mapper; + + + + /** + * 数据信息接口 + * @param + */ + public void getCityWather(){ + try{ + String url = ALL_CITY_URL + "?_=" + TIME_STAMP; + String allWarningCity = getWarnCityList(url); + if (allWarningCity == null) { + return; + } + List> data = getCityLists(allWarningCity); + List citys=Arrays.asList(CITY.split("@")); + for (String city:citys) { + String realUrl = getSearchCityUrl(data,city); + if (realUrl == null || "".equals(realUrl)) { + mapper.delWatherWrn(DateUtils.getDate()); + } else { + String wholeUrl = VALUE_URL + realUrl + "?_=" + TIME_STAMP; + Map map = dealNewUrl(wholeUrl); + System.out.println("预警内容: "+map.get("ISSUECONTENT")+"类型:"+map.get("SIGNALTYPE")+"等级:"+map.get("SIGNALLEVEL")); + String time=map.get("ISSUETIME");//时间 + String content=map.get("ISSUECONTENT").split("(预警信息来源")[0]; + String type=map.get("SIGNALTYPE")+"预警"; + String level=map.get("SIGNALLEVEL"); + String prov=map.get("PROVINCE"); + WatherVo vo=new WatherVo(prov,time,content,type,level,prov,DateUtils.getDate()); + mapper.replaceWather(vo); + + } + } + }catch (Exception e){ + log.error(e.toString(),e); + } + } + + + /** + * 处理所有城市灾害列表页面 + * + * @param url + * @return + */ + public static String getWarnCityList(String url) { + String allWeatherInfo = null; + CloseableHttpClient client; + client = HttpClientBuilder.create().build(); + + HttpGet get = new HttpGet(url); + RequestConfig config = RequestConfig.custom() + .setConnectTimeout(10*1000) //连接超时时间 + .setConnectionRequestTimeout(6000) //从连接池中取的连接的最长时间 + .setSocketTimeout(2*60*1000) //数据传输的超时时间 + .build(); + get.setConfig(config); + HttpResponse response; + try { + response = client.execute(get); + if (response != null) { + HttpEntity entity = response.getEntity(); + allWeatherInfo = EntityUtils.toString(entity, "UTF-8"); + } else { + System.out.println("全国所有城市都没有预警或者中国预警网错误"); + } + } catch (IOException e) { + e.printStackTrace(); + } + return allWeatherInfo; + } + + /** + * 获得城市列表 + * @param allWeatherInfo + * @return + */ + private static List> getCityLists(String allWeatherInfo) { + String[] split = allWeatherInfo.split("="); + String value = split[1]; + String substring = value.substring(0, value.length() - 1); + Map>> jsonMap = JSON.parseObject(substring, Map.class); + return jsonMap.get("data"); + } + + /** + * 得到搜索城市的url + * + * @param data + * @return + */ + public static String getSearchCityUrl(List> data, String city) { + String realUrl = ""; + List> sortedList = data.stream() + .filter(strings -> strings.get(0).contains(city)) + .sorted(Comparator.comparing(s -> s.get(0).length())) + .limit(1) + .collect(Collectors.toList()); + if (sortedList.isEmpty()) { + return realUrl; + } + realUrl = sortedList.get(0).get(1); + return realUrl; + } + + /** + * 访问城市url + * + * @param url + * @return + */ + public static Map dealNewUrl(String url) { + Map map=new HashMap<>(16); + CloseableHttpClient client; + client = HttpClients.createDefault(); + HttpGet get = new HttpGet(url); + HttpResponse response; + try { + response = client.execute(get); + HttpEntity entity = response.getEntity(); + if (entity != null) { + String string = EntityUtils.toString(entity, "UTF-8"); + // System.out.println("搜索城市数据: " + string); + String[] split = string.split("="); + String s = split[1]; + map = JSON.parseObject(s, Map.class); + } + } catch (IOException e) { + e.printStackTrace(); + } + return map; + } + + public void updateBdStatus() { + try{ + mapper.updateBdStatus(); + }catch (Exception e){ + log.error(e.toString()); + } + } +} diff --git a/bonus-modules/data/src/main/resources/banner.txt b/bonus-modules/data/src/main/resources/banner.txt new file mode 100644 index 0000000..27cacb9 --- /dev/null +++ b/bonus-modules/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/data/src/main/resources/bootstrap-sgzb_bns_local.yml b/bonus-modules/data/src/main/resources/bootstrap-sgzb_bns_local.yml new file mode 100644 index 0000000..c999eb2 --- /dev/null +++ b/bonus-modules/data/src/main/resources/bootstrap-sgzb_bns_local.yml @@ -0,0 +1,30 @@ +# Tomcat +server: + port: 18988 + +# Spring +spring: + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 127.0.0.1:8848 + namespace: sgzb_bns + config: + # 配置中心地址 + server-addr: 127.0.0.1:8848 + namespace: sgzb_bns + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + +#加密组件 +jasypt: + encryptor: + password: Encrypt + +#sourceUrl: +#sourceUser: +#sourcePassword: \ No newline at end of file diff --git a/bonus-modules/data/src/main/resources/bootstrap.yml b/bonus-modules/data/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..0d905c8 --- /dev/null +++ b/bonus-modules/data/src/main/resources/bootstrap.yml @@ -0,0 +1,8 @@ +# Spring +spring: + application: + # 应用名称 + name: bonus-data + profiles: + # 环境配置 + active: sgzb_bns_local diff --git a/bonus-modules/data/src/main/resources/logback.xml b/bonus-modules/data/src/main/resources/logback.xml new file mode 100644 index 0000000..ef09ad2 --- /dev/null +++ b/bonus-modules/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/data/src/main/resources/mapper/data/DataCenterMapper.xml b/bonus-modules/data/src/main/resources/mapper/data/DataCenterMapper.xml new file mode 100644 index 0000000..646fb32 --- /dev/null +++ b/bonus-modules/data/src/main/resources/mapper/data/DataCenterMapper.xml @@ -0,0 +1,117 @@ + + + + + + + insert into tb_device( + dev_type, dev_code, dev_name, + dev_status,dev_warn, del_flag, + dev_err, dev_factory, remark, pro_name, + pro_code, rel_id,bd_id,rel_type + )values + (#{deviceType},#{deviceCode},#{deviceName}, + #{deviceOnlineState},#{deviceAlarmState},0, + #{deviceFailureState},#{deviceFactory},#{remark},#{deviceProjectName}, + #{deviceProjectCode},#{id},#{bdId},#{relType} + ) + + + insert into tb_dev_attribute( + dev_id,jc_name,jc_value,jc_unit,rel_code,is_warn,jc_time,del_flag + )values (#{devId},#{jcName},#{jcValue},#{jcUnit},#{relCode},#{isWarn},#{jcTime},0) + + + + + insert into tb_dev_data_record( + dev_json, dev_id,dev_name,attribute_id, + attribute_name, attribute_val, merger_id, + is_warn, create_time, dev_type) + values (#{devJson},#{devId},#{devName},#{attributeId}, + #{jcName},#{jcValue},#{mergerId},#{isWarn},now(),#{devType}) + + + replace into tb_dev_data( + dev_id,dev_data,sys_time + )VALUES (#{devId},#{devJson},now()) + + + INSERT INTO tb_warn( + warn_time,warn_content, + warn_type, dev_id, state, + pro_code, remarks + )values (#{warnTime},#{warnContent},#{warnType},#{devId},0,#{proId},#{remarks}) + + + + update tb_device set + dev_type=#{deviceType}, dev_code=#{deviceCode},dev_name=#{deviceName}, + dev_status= #{deviceOnlineState},dev_warn=#{deviceAlarmState}, + dev_err= #{deviceFailureState}, dev_factory=#{deviceFactory}, remark=#{remark}, + pro_name=#{deviceProjectCode}, + pro_code=#{deviceProjectCode}, + rel_type=#{relType} + where rel_id=#{id} and bd_id=#{bdId} + + + + update tb_dev_attribute set + jc_value=#{jcValue},jc_time=#{jcTime},is_warn=#{isWarn} + where id=#{attributeId} + + + + update tb_bd_device_record + set dev_status='1',status_time=now() + WHERE dev_code=#{bdId} + + + + + + + + + + + + + \ No newline at end of file diff --git a/bonus-modules/data/src/main/resources/mapper/data/WatherMapper.xml b/bonus-modules/data/src/main/resources/mapper/data/WatherMapper.xml new file mode 100644 index 0000000..391d464 --- /dev/null +++ b/bonus-modules/data/src/main/resources/mapper/data/WatherMapper.xml @@ -0,0 +1,22 @@ + + + + + replace into t_warn_prediction( + city, create_time, content, + type, level, is_accecpt, state, + is_xf, cs_val, province, day + )values (#{city},#{createTime},#{content},#{type},#{level},0,0,0,0,#{province},#{day}) + + + + update tb_bd_device_record + set dev_status='0' + WHERE TIMESTAMPDIFF(HOUR, status_time, NOW()) >= 1 and dev_status='1' + + + delete from t_warn_prediction + where day like CONCAT('%',#{day},'%') + + + \ No newline at end of file diff --git a/bonus-modules/data/src/main/resources/template/TbPeopleTemplate.xlsx b/bonus-modules/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 diff --git a/pom.xml b/pom.xml index a4b8f35..68cc1b0 100644 --- a/pom.xml +++ b/pom.xml @@ -247,6 +247,7 @@ bonus-modules bonus-common-biz bonus-modules/base + bonus-modules/data pom