From 57762d4f805aea149b9d879e51c039692df2938d Mon Sep 17 00:00:00 2001
From: wr <1754607820@qq.com>
Date: Fri, 3 Nov 2023 16:47:11 +0800
Subject: [PATCH] =?UTF-8?q?1.=E7=81=BF=E8=83=BD=E4=BA=91=E6=8E=A5=E5=8F=A3?=
=?UTF-8?q?=E7=A7=BB=E6=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/com/njcn/cloud/config/Message.java | 44 ++
.../cloud/enums/app/EventMsgCodeEnum.java | 75 +++
.../com/njcn/cloud/enums/app/ReturnCode.java | 14 +
.../cloud/enums/app/SteadyMsgCodeEnum.java | 55 ++
.../njcn/cloud/enums/app/TypeCodeEnum.java | 100 +++
.../njcn/cloud/enums/app/UserCodeEnum.java | 101 +++
.../njcn/cloud/enums/app/UserLevelEnum.java | 46 ++
.../com/njcn/cloud/pojo/dto/AppEventInfo.java | 65 ++
.../com/njcn/cloud/pojo/dto/AppEventMsg.java | 46 ++
.../com/njcn/cloud/pojo/dto/AppReport.java | 87 +++
.../com/njcn/cloud/pojo/dto/AppSendMsg.java | 48 ++
.../com/njcn/cloud/pojo/dto/AppSteadyAss.java | 44 ++
.../com/njcn/cloud/pojo/dto/AppSteadyMsg.java | 53 ++
.../com/njcn/cloud/pojo/dto/AppSteadyUrl.java | 52 ++
.../java/com/njcn/cloud/pojo/dto/AppUser.java | 108 ++++
.../com/njcn/cloud/pojo/dto/DeptLine.java | 28 +
.../njcn/cloud/pojo/dto/RMpEventDetail.java | 130 ++++
.../njcn/cloud/pojo/vo/AppSteadyMsgVO.java | 27 +
.../njcn/cloud/pojo/vo/EventEigDetailVO.java | 75 +++
.../njcn/cloud/pojo/vo/EventInfoDetailVO.java | 65 ++
.../njcn/cloud/pojo/vo/EventMsgDetailVO.java | 51 ++
.../njcn/cloud/pojo/vo/EventWaveDetailVO.java | 51 ++
.../com/njcn/cloud/pojo/vo/LineDetailVO.java | 35 ++
.../njcn/cloud/pojo/vo/SteadyMsgDetailVO.java | 31 +
.../njcn/cloud/pojo/vo/SteadyTargetVO.java | 25 +
.../java/com/njcn/cloud/pojo/vo/UserVO.java | 31 +
.../java/com/njcn/cloud/utils/AESUtil.java | 88 +++
.../java/com/njcn/cloud/utils/RedisDB.java | 92 +++
.../java/com/njcn/cloud/utils/SmsUtil.java | 124 ++++
.../java/com/njcn/cloud/utils/WordUtil.java | 344 ++++++++++
.../information/EventMsgController.java | 133 ++++
.../information/SteadyMsgController.java | 153 +++++
.../report/ShiningReportController.java | 59 ++
.../cloud/controller/user/UserController.java | 594 ++++++++++++++++++
.../njcn/cloud/mapper/AppEventInfoMapper.java | 68 ++
.../njcn/cloud/mapper/AppEventMsgMapper.java | 33 +
.../njcn/cloud/mapper/AppReportMapper.java | 16 +
.../njcn/cloud/mapper/AppSendMsgMapper.java | 16 +
.../njcn/cloud/mapper/AppSteadyAssMapper.java | 16 +
.../njcn/cloud/mapper/AppSteadyMsgMapper.java | 16 +
.../njcn/cloud/mapper/AppSteadyUrlMapper.java | 16 +
.../com/njcn/cloud/mapper/AppUserMapper.java | 39 ++
.../com/njcn/cloud/mapper/LineMapper.java | 23 +
.../mapper/mapping/AppEventInfoMapper.xml | 133 ++++
.../mapper/mapping/AppEventMsgMapper.xml | 49 ++
.../cloud/mapper/mapping/AppReportMapper.xml | 5 +
.../cloud/mapper/mapping/AppSendMsgMapper.xml | 5 +
.../mapper/mapping/AppSteadyAssMapper.xml | 5 +
.../mapper/mapping/AppSteadyMsgMapper.xml | 5 +
.../mapper/mapping/AppSteadyUrlMapper.xml | 5 +
.../cloud/mapper/mapping/AppUserMapper.xml | 21 +
.../njcn/cloud/mapper/mapping/LineMapper.xml | 37 ++
.../impl/user/AppEventInfoServiceImpl.java | 161 +++++
.../impl/user/AppEventMsgServiceImpl.java | 67 ++
.../impl/user/AppReportServiceImpl.java | 166 +++++
.../impl/user/AppSendMsgServiceImpl.java | 20 +
.../impl/user/AppSteadyAssServiceImpl.java | 20 +
.../impl/user/AppSteadyMsgServiceImpl.java | 159 +++++
.../impl/user/AppSteadyUrlServiceImpl.java | 20 +
.../service/impl/user/AppUserServiceImpl.java | 129 ++++
.../service/user/IAppEventInfoService.java | 59 ++
.../service/user/IAppEventMsgService.java | 37 ++
.../cloud/service/user/IAppReportService.java | 37 ++
.../service/user/IAppSendMsgService.java | 16 +
.../service/user/IAppSteadyAssService.java | 16 +
.../service/user/IAppSteadyMsgService.java | 62 ++
.../service/user/IAppSteadyUrlService.java | 16 +
.../cloud/service/user/IAppUserService.java | 14 +
68 files changed, 4581 insertions(+)
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/config/Message.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/EventMsgCodeEnum.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/ReturnCode.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/SteadyMsgCodeEnum.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/TypeCodeEnum.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/UserCodeEnum.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/UserLevelEnum.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppEventInfo.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppEventMsg.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppReport.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppSendMsg.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppSteadyAss.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppSteadyMsg.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppSteadyUrl.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppUser.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/DeptLine.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/RMpEventDetail.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/AppSteadyMsgVO.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/EventEigDetailVO.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/EventInfoDetailVO.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/EventMsgDetailVO.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/EventWaveDetailVO.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/LineDetailVO.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/SteadyMsgDetailVO.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/SteadyTargetVO.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/UserVO.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/utils/AESUtil.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/utils/RedisDB.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/utils/SmsUtil.java
create mode 100644 app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/utils/WordUtil.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/controller/information/EventMsgController.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/controller/information/SteadyMsgController.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/controller/report/ShiningReportController.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/controller/user/UserController.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppEventInfoMapper.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppEventMsgMapper.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppReportMapper.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppSendMsgMapper.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppSteadyAssMapper.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppSteadyMsgMapper.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppSteadyUrlMapper.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppUserMapper.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/LineMapper.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppEventInfoMapper.xml
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppEventMsgMapper.xml
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppReportMapper.xml
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppSendMsgMapper.xml
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppSteadyAssMapper.xml
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppSteadyMsgMapper.xml
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppSteadyUrlMapper.xml
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppUserMapper.xml
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/LineMapper.xml
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppEventInfoServiceImpl.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppEventMsgServiceImpl.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppReportServiceImpl.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppSendMsgServiceImpl.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppSteadyAssServiceImpl.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppSteadyMsgServiceImpl.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppSteadyUrlServiceImpl.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppUserServiceImpl.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppEventInfoService.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppEventMsgService.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppReportService.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppSendMsgService.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppSteadyAssService.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppSteadyMsgService.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppSteadyUrlService.java
create mode 100644 app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppUserService.java
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/config/Message.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/config/Message.java
new file mode 100644
index 0000000..6778069
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/config/Message.java
@@ -0,0 +1,44 @@
+package com.njcn.cloud.config;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+
+/**
+ * 类的介绍:短信配置获取实体
+ *
+ * @author xuyang
+ * @version 1.0.0
+ * @createTime 2023/8/25 15:19
+ */
+@Data
+@Configuration
+@Order(10)
+public class Message {
+
+ /**
+ * accessKeyId
+ */
+ @Value("${message.access-key}")
+ private String accessKeyId;
+
+ /**
+ * accessKeySecret
+ */
+ @Value("${message.secret-key}")
+ private String accessKeySecret;
+
+ /**
+ * 短信签名
+ */
+ @Value("${message.auto-graph}")
+ private String autoGraph;
+
+ /**
+ * 连接时间参数
+ */
+ @Value("${message.connect-time}")
+ private String time;
+
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/EventMsgCodeEnum.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/EventMsgCodeEnum.java
new file mode 100644
index 0000000..e31dda5
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/EventMsgCodeEnum.java
@@ -0,0 +1,75 @@
+package com.njcn.cloud.enums.app;
+
+/**
+ * @description: 暂态消息返回枚举
+ * @author: denghuajun
+ * @time: 2019-10-18 10:25:42
+ **/
+
+public enum EventMsgCodeEnum {
+ TRANSIENT_TYPE(1, "暂态系统"),
+ STEADY_TYPE(2, "稳态系统"),
+ GETDETAIL_SUCCESS(10101, "获取暂态消息成功"),
+ GETDETAIL_FALL(10102, "获取暂态消息失败"),
+ GETBASEDETAIL_SUCCESS(10103, "获取暂态事件基本信息成功"),
+ GETBASEDETAIL_FALL(10104, "获取暂态事件基本信息失败"),
+ GETEIGVALUEDETAIL_SUCCESS(10105, "获取暂态事件特征幅值成功"),
+ GETEIGVALUEDETAIL_FALL(10106, "获取暂态事件特征幅值失败"),
+ GETWAVEDETAIL_SUCCESS(10107, "获取暂态事件波形成功"),
+ GETWAVEDETAIL_FALL(10108, "获取暂态事件波形失败"),
+ GETEVADETAIL_SUCCESS(10109, "更新暂态事件评价成功"),
+ GETEVADETAIL_FALL(10110, "更新暂态事件评价失败"),
+ USERID_WRONG(10111, "用户索引非法"),
+ eventDetailIndex_WRONG(10112, "暂降事件ID非法"),
+ CLEANMSGINFO_SUCCESS(10113, "清空消息成功"),
+ CLEANMSGINFO_FALL(10114, "清空消息失败"),
+
+
+ REPORTLIST_SUCCESS(10501, "报告查询成功"),
+ REPORTLIST_FAIL(10502, "报告查询失败"),
+ CUSTOMREPORT_SUCCESS(10503, "自定义申请报告成功"),
+ CUSTOMREPORT_FAIL(10504, "自定义申请报告失败"),
+ EVENTDETAILREPORTAPPLY_SUCCESS(10505, "暂降事件报告申请成功"),
+ EVENTDETAILREPORTAPPLY_FAIL(10506, "暂降事件报告申请失败"),
+ EVENTDETAILREPORTDOWNLOAD_SUCCESS(10507, "暂降事件报告下载成功"),
+ EVENTDETAILREPORTDOWNLOAD_FAIL(10508, "暂降事件报告下载失败"),
+ EVENTDETAILREPORTDOWNLOAD_NOT_FAIL(10513, "暂降事件报告下载失败,为查询到暂降信息"),
+ EVENTDETAILREPORTDOWNLOAD_ERROR(10509, "报告下载未审核"),
+ MARKETINGUSERINFO_SUCCESS(10510, "获取营销人员信息成功"),
+ MARKETINGUSERINFO_FAIL(10511, "获取营销人员信息失败"),
+ EVENTDETAILREPORTAPPLY_NODATA(10512, "事件暂无波形");
+
+
+ EventMsgCodeEnum(int code, String msg) {
+ this.code = code;
+ this.msg = msg;
+ }
+
+ private int code;
+
+ private String msg;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ @Override
+ public String toString() {
+ return "EventMsgCodeEnum{" +
+ "code=" + code +
+ ", msg='" + msg + '\'' +
+ '}';
+ }
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/ReturnCode.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/ReturnCode.java
new file mode 100644
index 0000000..b71fc85
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/ReturnCode.java
@@ -0,0 +1,14 @@
+package com.njcn.cloud.enums.app;
+
+import java.io.Serializable;
+
+/**
+ * @author hongawen
+ * @date: 2019/10/25 10:49
+ */
+public class ReturnCode implements Serializable {
+
+ public static int RETURN_SUCCESS=10000;
+
+ public static int RETURN_FAIL=10001;
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/SteadyMsgCodeEnum.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/SteadyMsgCodeEnum.java
new file mode 100644
index 0000000..1049bb8
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/SteadyMsgCodeEnum.java
@@ -0,0 +1,55 @@
+package com.njcn.cloud.enums.app;
+
+/**
+ * @description: 稳态越限返回指标
+ * @author: gbl
+ **/
+
+public enum SteadyMsgCodeEnum {
+
+ GETSTATE_SUCCESS(10201, "获取稳态越限列表成功"),
+ GETSTATE_FALL(10202, "获取稳态越限列表失败"),
+
+ GETSTATEINFO_SUCCESS(10203, "获取稳态越限列表详细信息成功"),
+ GETSTATEINFO_FALL(10204, "获取稳态越限列表详细信息失败"),
+
+ GETTARGET_SUCCESS(10205, "获取稳态越限涉及指标成功"),
+ GETTARGET_FALL(10206, "获取稳态越限涉及指标失败"),
+
+ GETTARGETURL_SUCCESS(10207, "获取稳态越限指标图形成功"),
+ GETTARGETURL_FALL(10208, "获取稳态越限指标图形失败");
+
+
+ SteadyMsgCodeEnum(int code, String msg) {
+ this.code = code;
+ this.msg = msg;
+ }
+
+ private int code;
+
+ private String msg;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ @Override
+ public String toString() {
+ return "SteadyMsgCodeEnum{" +
+ "code=" + code +
+ ", msg='" + msg + '\'' +
+ '}';
+ }
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/TypeCodeEnum.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/TypeCodeEnum.java
new file mode 100644
index 0000000..7b8fd91
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/TypeCodeEnum.java
@@ -0,0 +1,100 @@
+package com.njcn.cloud.enums.app;
+
+import lombok.Data;
+
+/**
+ * @Description: 指标编码
+ * @Author: wr
+ * @Date: 2023/11/3 13:57
+ */
+public enum TypeCodeEnum {
+ FLICKET_ALLTIME(1, "Flicket_AllTime"),
+ FREQ_DEV_OVERTIME(2, "频率偏差越限"),
+ VOLTAGE_DEV_OVERTIME(3, "电压偏差越限"),
+ UBALANCE_OVERTIME(4, "电压不平衡越限"),
+ FLICKER_OVERTIME(5, "闪变越限"),
+ UABERRANCE_OVERTIME(6, "电压谐波畸变率越限"),
+ UHARM_2_OVERTIME(7, "2次电压谐波含有率越限"),
+ UHARM_3_OVERTIME(8, "3次电压谐波含有率越限"),
+ UHARM_4_OVERTIME(9, "4次电压谐波含有率越限"),
+ UHARM_5_OVERTIME(10, "5次电压谐波含有率越限"),
+ UHARM_6_OVERTIME(11, "6次电压谐波含有率越限"),
+ UHARM_7_OVERTIME(12, "7次电压谐波含有率越限"),
+ UHARM_8_OVERTIME(13, "8次电压谐波含有率越限"),
+ UHARM_9_OVERTIME(14, "9次电压谐波含有率越限"),
+ UHARM_10_OVERTIME(15, "10次电压谐波含有率越限"),
+ UHARM_11_OVERTIME(16, "11次电压谐波含有率越限"),
+ UHARM_12_OVERTIME(17, "12次电压谐波含有率越限"),
+ UHARM_13_OVERTIME(18, "13次电压谐波含有率越限"),
+ UHARM_14_OVERTIME(19, "14次电压谐波含有率越限"),
+ UHARM_15_OVERTIME(20, "15次电压谐波含有率越限"),
+ UHARM_16_OVERTIME(21, "16次电压谐波含有率越限"),
+ UHARM_17_OVERTIME(22, "17次电压谐波含有率越限"),
+ UHARM_18_OVERTIME(23, "18次电压谐波含有率越限"),
+ UHARM_19_OVERTIME(24, "19次电压谐波含有率越限"),
+ UHARM_20_OVERTIME(25, "20次电压谐波含有率越限"),
+ UHARM_21_OVERTIME(26, "21次电压谐波含有率越限"),
+ UHARM_22_OVERTIME(27, "22次电压谐波含有率越限"),
+ UHARM_23_OVERTIME(28, "23次电压谐波含有率越限"),
+ UHARM_24_OVERTIME(29, "24次电压谐波含有率越限"),
+ UHARM_25_OVERTIME(30, "25次电压谐波含有率越限"),
+ IHARM_2_OVERTIME(31, "2次电流谐波幅值越限"),
+ IHARM_3_OVERTIME(32, "3次电流谐波幅值越限"),
+ IHARM_4_OVERTIME(33, "4次电流谐波幅值越限"),
+ IHARM_5_OVERTIME(34, "5次电流谐波幅值越限"),
+ IHARM_6_OVERTIME(35, "6次电流谐波幅值越限"),
+ IHARM_7_OVERTIME(36, "7次电流谐波幅值越限"),
+ IHARM_8_OVERTIME(37, "8次电流谐波幅值越限"),
+ IHARM_9_OVERTIME(38, "9次电流谐波幅值越限"),
+ IHARM_10_OVERTIME(39, "10次电流谐波幅值越限"),
+ IHARM_11_OVERTIME(40, "11次电流谐波幅值越限"),
+ IHARM_12_OVERTIME(41, "12次电流谐波幅值越限"),
+ IHARM_13_OVERTIME(42, "13次电流谐波幅值越限"),
+ IHARM_14_OVERTIME(43, "14次电流谐波幅值越限"),
+ IHARM_15_OVERTIME(44, "15次电流谐波幅值越限"),
+ IHARM_16_OVERTIME(45, "16次电流谐波幅值越限"),
+ IHARM_17_OVERTIME(46, "17次电流谐波幅值越限"),
+ IHARM_18_OVERTIME(47, "18次电流谐波幅值越限"),
+ IHARM_19_OVERTIME(48, "19次电流谐波幅值越限"),
+ IHARM_20_OVERTIME(49, "20次电流谐波幅值越限"),
+ IHARM_21_OVERTIME(50, "21次电流谐波幅值越限"),
+ IHARM_22_OVERTIME(51, "22次电流谐波幅值越限"),
+ IHARM_23_OVERTIME(52, "23次电流谐波幅值越限"),
+ IHARM_24_OVERTIME(53, "24次电流谐波幅值越限"),
+ IHARM_25_OVERTIME(54, "25次电流谐波幅值越限");
+
+ private int code;
+
+ private String type;
+
+ TypeCodeEnum(int code, String type){
+ this.code = code;
+ this.type = type;
+ }
+
+ public static String getMsgByCode(int code){
+ for (TypeCodeEnum typeCodeEnum : TypeCodeEnum.values()) {
+ if (typeCodeEnum.code==code) {
+ return typeCodeEnum.type;
+ }
+ }
+ return "";
+ }
+
+ public static int getCodeByMsg(String type){
+ for (TypeCodeEnum typeCodeEnum : TypeCodeEnum.values()) {
+ if (typeCodeEnum.type.equalsIgnoreCase(type)) {
+ return typeCodeEnum.code;
+ }
+ }
+ return 0;
+ }
+
+ @Override
+ public String toString() {
+ return "TypeCodeEnum{" +
+ "code=" + code +
+ ", type='" + type + '\'' +
+ '}';
+ }
+}
\ No newline at end of file
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/UserCodeEnum.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/UserCodeEnum.java
new file mode 100644
index 0000000..d4f4a09
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/UserCodeEnum.java
@@ -0,0 +1,101 @@
+package com.njcn.cloud.enums.app;
+
+/**
+ * @author hongawen
+ * @date: 2019/10/17 14:07
+ *
+ * 用户返回标识枚举
+ */
+public enum UserCodeEnum {
+
+
+ LOGIN_SUCCESS(10002,"登录成功"),
+ LOGIN_FAIL(10003,"登录失败"),
+ LOGIN_WRONG_PWD(10004,"用户名密码错误"),
+ LOGIN_LOCKED(10005,"用户被锁定"),
+ KEY_WRONG(10006,"登录密码/验证码为空"),
+ PHONE_WRONG(10007,"手机号非法"),
+ DEVCODE_WRONG(10008,"设备码非法"),
+ CODE_WRONG(10009,"验证码为空"),
+ USERID_WRONG(10010,"用户索引非法"),
+ PASSWORD_WRONG(10011,"密码非法"),
+ REGIST_SUCCESS(10012,"注册成功"),
+ REGIST_FAIL(10013,"注册失败"),
+ REGIST_PHONE_FAIL(10014,"该号码已注册"),
+ SETPWD_SUCCESS(10015,"设置密码成功"),
+ SETPWD_FAIL(10016,"设置密码失败"),
+ RESETPWD_SUCCESS(10017,"重置密码成功"),
+ RESETPWD_FAIL(10018,"重置密码失败"),
+ REFERRAL_CODE_ERROR(10019,"推荐码非法"),
+ UPDATE_ROLE_SUCCESS(10020,"角色升级成功"),
+ UPDATE_ROLE_FAIL(10021,"角色升级失败"),
+ CODE_TYPE_ERROR(10022,"验证码类型非法"),
+ SEND_CODE_SUCCESS(10023,"验证码发送成功"),
+ SEND_CODE_FAIL(10024,"验证码发送失败"),
+ CODE_ERROR(10025,"验证码错误"),
+ REST_PHONE_SUCCESS(10026,"重置手机号成功"),
+ REST_PHONE_FAIL(10027,"重置手机号失败"),
+ NO_APPINFOSET(10028,"用户无消息配置"),
+ SET_INFO_SUCCESS(10029,"用户设置消息成功"),
+ SET_INFO_FAIL(10030,"用户设置消息失败"),
+
+ NO_USER(10031,"用户不存在"),
+ NO_MAIN_USER(10032,"用户缺失系统账户"),
+ NO_USER_SETTING(10033,"用户缺失配置信息"),
+ GET_MESSAGE_SUCCESS(10034,"获取消息配置成功"),
+ GET_MESSAGE_FAIL(10035,"获取消息配置失败"),
+ MESSAGE_CODE_RIGHT(10036,"验证码正确"),
+ MESSAGE_CODE_WRONG(10037,"验证码错误"),
+
+ NO_USER_FOCUS(10038,"无用户关注"),
+ EVENT_MSG_SUCCESS(10039,"暂态消息推送成功"),
+ EVENT_MSG_FAIL(10040,"暂态消息推送失败"),
+ REPEAT_EVENT_INFO(10041,"该事件已推送"),
+
+ STEADY_MSG_SUCCESS(10039,"稳态消息推送成功"),
+ STEADY_MSG_FAIL(10040,"稳态消息推送失败"),
+
+ INVALID_PARAMETER(10041,"参数非法"),
+
+ DEVICE_MSG_SUCCESS(10039,"终端消息推送成功"),
+ DEVICE_MSG_FAIL(10040,"终端消息推送失败"),
+ NOT_NULL_USER_INDEX(11001,"用户编号不能为空"),
+
+ ;
+
+ private int code;
+
+ private String msg;
+
+ UserCodeEnum(int code,String msg){
+ this.code=code;
+ this.msg=msg;
+ }
+
+ public int getCode(){
+ return code;
+ }
+
+ public String getMsg(){
+ return msg;
+ }
+
+ public static String getMsgByCode(int code){
+ for (UserCodeEnum userCodeEnum : UserCodeEnum.values()) {
+ if (userCodeEnum.code==code) {
+ return userCodeEnum.msg;
+ }
+ }
+ return "";
+ }
+
+
+ public static int getCodeByMsg(String msg){
+ for (UserCodeEnum userCodeEnum : UserCodeEnum.values()) {
+ if (userCodeEnum.msg.equalsIgnoreCase(msg)) {
+ return userCodeEnum.code;
+ }
+ }
+ return 0;
+ }
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/UserLevelEnum.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/UserLevelEnum.java
new file mode 100644
index 0000000..14246e5
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/enums/app/UserLevelEnum.java
@@ -0,0 +1,46 @@
+package com.njcn.cloud.enums.app;
+
+/**
+ * @author hongawen
+ * @date: 2019/10/28 15:11
+ */
+public enum UserLevelEnum {
+
+ HOST_USER("0","主用户"),NORMAL_USER("1","普通用户"),VIP1_USER("2","用户VIP1");
+
+ private String code;
+
+ private String msg;
+
+ UserLevelEnum(String code,String msg){
+ this.code=code;
+ this.msg=msg;
+ }
+
+ public String getCode(){
+ return code;
+ }
+
+ public String getMsg(){
+ return msg;
+ }
+
+ public static String getMsgByCode(String code){
+ for (UserLevelEnum userLevelEnum : UserLevelEnum.values()) {
+ if (userLevelEnum.code.equalsIgnoreCase(code)) {
+ return userLevelEnum.msg;
+ }
+ }
+ return "";
+ }
+
+
+ public static String getCodeByMsg(String msg){
+ for (UserLevelEnum userLevelEnum : UserLevelEnum.values()) {
+ if (userLevelEnum.msg.equalsIgnoreCase(msg)) {
+ return userLevelEnum.code;
+ }
+ }
+ return "";
+ }
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppEventInfo.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppEventInfo.java
new file mode 100644
index 0000000..db9c11f
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppEventInfo.java
@@ -0,0 +1,65 @@
+package com.njcn.cloud.pojo.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.njcn.db.bo.BaseEntity;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * 暂态消息详情
+ *
+ *
+ * @author wr
+ * @since 2023-11-01
+ */
+@Getter
+@Setter
+@TableName("app_event_info")
+@ApiModel(value = "AppEventInfo对象", description = "暂态消息详情")
+public class AppEventInfo {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("(关联表PQS_EventDetail)事件总表Guid")
+ @TableId("EventDetail_Index")
+ private String eventdetailIndex;
+
+ @ApiModelProperty("对系统是否有影响(0:无;1:有)")
+ @TableField("Evaluate")
+ private Integer evaluate;
+
+ @ApiModelProperty("(关联app_user表User_Index)暂态评价人")
+ @TableField("User_Index")
+ private String userIndex;
+
+ @ApiModelProperty("评价时间")
+ @TableField("Update_Time")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("瞬时波形资源路径")
+ @TableField("InstantWave_Path")
+ private String instantwavePath;
+
+ @ApiModelProperty("RMS资源路径")
+ @TableField("RmsWave_Path")
+ private String rmswavePath;
+
+ @ApiModelProperty("报告状态(1-成功,2-失败,3-成功待审核,4-失败待审核,自定义状态)")
+ @TableField("Report_State")
+ private Integer reportState;
+
+ @ApiModelProperty("报告的资源路径")
+ @TableField("Report_Path")
+ private String reportPath;
+
+
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppEventMsg.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppEventMsg.java
new file mode 100644
index 0000000..1cfc1dc
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppEventMsg.java
@@ -0,0 +1,46 @@
+package com.njcn.cloud.pojo.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.njcn.db.bo.BaseEntity;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * app暂态消息表
+ *
+ *
+ * @author wr
+ * @since 2023-10-31
+ */
+@Getter
+@Setter
+@TableName("app_event_msg")
+@ApiModel(value = "AppEventMsg对象", description = "app暂态消息表")
+public class AppEventMsg {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("暂态消息Guid")
+ @TableField("EventMsg_Index")
+ private String eventmsgIndex;
+
+ @ApiModelProperty("(关联app_user表User_Index)权限用户id")
+ @TableField("User_Index")
+ private String userIndex;
+
+ @ApiModelProperty("(关联表PQS_EventDetail)事件总表Guid")
+ @TableField("EventDetail_Index")
+ private LocalDateTime eventdetailIndex;
+
+ @ApiModelProperty("读取状态(0:未读,1:已读,2:删除)")
+ @TableField("state")
+ private String state;
+
+
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppReport.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppReport.java
new file mode 100644
index 0000000..8df04a7
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppReport.java
@@ -0,0 +1,87 @@
+package com.njcn.cloud.pojo.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.njcn.db.bo.BaseEntity;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * 报告信息
+ *
+ *
+ * @author wr
+ * @since 2023-11-02
+ */
+@Getter
+@Setter
+@TableName("app_report")
+@ApiModel(value = "AppReport对象", description = "报告信息")
+public class AppReport {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("报告表Guid")
+ @TableId("Report_Index")
+ private String reportIndex;
+
+ @ApiModelProperty("报告名称")
+ @TableField("Report_Name")
+ private String reportName;
+
+ @ApiModelProperty("(关联Pq_Line的Line_Index)")
+ @TableField("Line_Index")
+ private String lineIndex;
+
+ @ApiModelProperty("(关联app_user表User_Index)自定义报表时填值")
+ @TableField("User_Index")
+ private String userIndex;
+
+ @ApiModelProperty("报告生成时间")
+ @TableField("Update_Time")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("报告内容的起始时间")
+ @TableField("Start_Time")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime startTime;
+
+ @ApiModelProperty("报告内容的结束时间")
+ @TableField("End_Time")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime endTime;
+
+ @ApiModelProperty("系统类型(1-暂态,2-稳态)")
+ @TableField("System_Type")
+ private Integer systemType;
+
+ @ApiModelProperty("报告类型(1-周报,2-月报,5-自定义)")
+ @TableField("Report_Type")
+ private Integer reportType;
+
+ @ApiModelProperty("报告的资源路径")
+ @TableField("Report_Path")
+ private String reportPath;
+
+ @ApiModelProperty("报告状态(1-成功,2-失败,3-待审核,4-删除)")
+ @TableField("State")
+ private Integer state;
+
+ @ApiModelProperty("记录报告生成失败次数")
+ @TableField("Error_Count")
+ private Integer errorCount;
+
+ @ApiModelProperty("暂态报告部门guid")
+ @TableField("Depts_Index")
+ private String deptsIndex;
+
+
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppSendMsg.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppSendMsg.java
new file mode 100644
index 0000000..acfb075
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppSendMsg.java
@@ -0,0 +1,48 @@
+package com.njcn.cloud.pojo.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.njcn.db.bo.BaseEntity;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ *
+ *
+ *
+ * @author wr
+ * @since 2023-10-31
+ */
+@Getter
+@Setter
+@TableName("app_send_msg")
+@ApiModel(value = "AppSendMsg对象", description = "手机短信存储表")
+public class AppSendMsg {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("手机号")
+ @TableField("Phone")
+ private String phone;
+
+ @ApiModelProperty("发送信息")
+ @TableField("Message")
+ private String message;
+
+ @ApiModelProperty("发送时间")
+ @TableField("Send_Time")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime sendTime;
+
+ @ApiModelProperty("发送状态")
+ @TableField("Send_Status")
+ private String sendStatus;
+
+
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppSteadyAss.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppSteadyAss.java
new file mode 100644
index 0000000..d01f424
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppSteadyAss.java
@@ -0,0 +1,44 @@
+package com.njcn.cloud.pojo.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.njcn.db.bo.BaseEntity;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * 稳态消息详情
+ *
+ *
+ * @author wr
+ * @since 2023-11-03
+ */
+@Getter
+@Setter
+@TableName("app_steady_ass")
+@ApiModel(value = "AppSteadyAss对象", description = "稳态消息详情")
+public class AppSteadyAss {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("稳态消息列表Guid")
+ @TableField("Steady_Index")
+ private String steadyIndex;
+
+ @ApiModelProperty("监测点Guid")
+ @TableField("Line_Index")
+ private String lineIndex;
+
+ @ApiModelProperty("统计时间")
+ @TableField("Time_Id")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime timeId;
+
+
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppSteadyMsg.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppSteadyMsg.java
new file mode 100644
index 0000000..91b9bbf
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppSteadyMsg.java
@@ -0,0 +1,53 @@
+package com.njcn.cloud.pojo.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.njcn.db.bo.BaseEntity;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * 稳态消息
+ *
+ *
+ * @author wr
+ * @since 2023-11-03
+ */
+@Getter
+@Setter
+@TableName("app_steady_msg")
+@ApiModel(value = "AppSteadyMsg对象", description = "稳态消息")
+public class AppSteadyMsg {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("稳态消息列表Guid")
+ @TableId("Steady_Index")
+ private String steadyIndex;
+
+ @ApiModelProperty("(关联app_user表User_Index)权限用户id")
+ @TableField("User_Index")
+ private String userIndex;
+
+ @ApiModelProperty("统计时间")
+ @TableField("Time_Id")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime timeId;
+
+ @ApiModelProperty("越限监测点数")
+ @TableField("Line_Num")
+ private Integer lineNum;
+
+ @ApiModelProperty("读取状态(0:未读,1:已读,2:删除)")
+ @TableField("State")
+ private Integer state;
+
+
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppSteadyUrl.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppSteadyUrl.java
new file mode 100644
index 0000000..7a8fbd4
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppSteadyUrl.java
@@ -0,0 +1,52 @@
+package com.njcn.cloud.pojo.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.njcn.db.bo.BaseEntity;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * 稳态图形信息
+ *
+ *
+ * @author wr
+ * @since 2023-11-03
+ */
+@Getter
+@Setter
+@TableName("app_steady_url")
+@ApiModel(value = "AppSteadyUrl对象", description = "稳态图形信息")
+public class AppSteadyUrl {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("监测点Guid")
+ @TableField("Line_Index")
+ private String lineIndex;
+
+ @ApiModelProperty("统计时间")
+ @TableField("Time_Id")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime timeId;
+
+ @ApiModelProperty("越线Code")
+ @TableField("Type_Code")
+ private Integer typeCode;
+
+ @ApiModelProperty("越线次数")
+ @TableField("Limit_Num")
+ private Integer limitNum;
+
+ @ApiModelProperty("监测点Guid")
+ @TableField("Steady_Path")
+ private String steadyPath;
+
+
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppUser.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppUser.java
new file mode 100644
index 0000000..19c1719
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/AppUser.java
@@ -0,0 +1,108 @@
+package com.njcn.cloud.pojo.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.time.LocalDateTime;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ *
+ *
+ *
+ * @author wr
+ * @since 2023-10-31
+ */
+@Getter
+@Setter
+@TableName("app_user")
+@ApiModel(value = "AppUser对象", description = "用户信息表")
+public class AppUser {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("用户表GUID")
+ @TableId("user_index")
+ private String userIndex;
+
+ @ApiModelProperty("用户别名")
+ @TableField("Name")
+ private String name;
+
+ @ApiModelProperty("登录名")
+ @TableField("Login_Name")
+ private String loginName;
+
+ @ApiModelProperty("登录密码")
+ @TableField("Password")
+ private String password;
+
+ @ApiModelProperty("手机号")
+ @TableField("Phone")
+ private String phone;
+
+ @ApiModelProperty("邮箱")
+ @TableField("Email")
+ private String email;
+
+ @ApiModelProperty("注册时间")
+ @TableField("Register_Time")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime registerTime;
+
+ @ApiModelProperty("密码有效期字段(初始化的时候跟注册时间一样)")
+ @TableField("Psd_Validity")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime psdValidity;
+
+ @ApiModelProperty("最后一次登录时间")
+ @TableField("Login_Time")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime loginTime;
+
+ @ApiModelProperty("用户状态 0:删除; 1:正常; 2锁定;")
+ @TableField("State")
+ private Boolean state;
+
+ @ApiModelProperty("密码错误次数")
+ @TableField("Login_Error_Times")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Integer loginErrorTimes;
+
+ @ApiModelProperty("第一次登陆错误的时间")
+ @TableField("Login_First_Error_Time")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime loginFirstErrorTime;
+
+ @ApiModelProperty("营销人员名称(只针对主用户)")
+ @TableField("Sem_Name")
+ private String semName;
+
+ @ApiModelProperty("营销人员手机(只针对主用户)")
+ @TableField("Sem_Phone")
+ private String semPhone;
+
+ @ApiModelProperty("推荐码(新增主用户时候生成)")
+ @TableField("Referral_Code")
+ private String referralCode;
+
+ @ApiModelProperty("设备码")
+ @TableField("Dev_Code")
+ private String devCode;
+
+ @ApiModelProperty("用户类型")
+ @TableField("User_Type")
+ private String userType;
+
+ @ApiModelProperty("用户等级")
+ @TableField("User_Level")
+ private String userLevel;
+
+
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/DeptLine.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/DeptLine.java
new file mode 100644
index 0000000..b70e147
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/DeptLine.java
@@ -0,0 +1,28 @@
+package com.njcn.cloud.pojo.dto;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * @Description: 部门监测点关系表
+ * @Author: wr
+ * @Date: 2023/11/1 10:33
+ */
+@Data
+@TableName("pq_dept_line")
+public class DeptLine {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 部门Id
+ */
+ private String id;
+
+ /**
+ * 监测点Id
+ */
+ private String lineId;
+
+
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/RMpEventDetail.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/RMpEventDetail.java
new file mode 100644
index 0000000..cad565c
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/dto/RMpEventDetail.java
@@ -0,0 +1,130 @@
+package com.njcn.cloud.pojo.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.njcn.db.bo.BaseEntity;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ *
+ *
+ *
+ * @author wr
+ * @since 2023-11-02
+ */
+@Getter
+@Setter
+@TableName("r_mp_event_detail")
+@ApiModel(value = "RMpEventDetail对象", description = "")
+public class RMpEventDetail {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("暂时事件ID")
+ @TableId("event_id")
+ private String eventId;
+
+ @ApiModelProperty("监测点ID")
+ @TableField("measurement_point_id")
+ private String measurementPointId;
+
+ @ApiModelProperty("开始时间")
+ @TableField("start_time")
+ private LocalDateTime startTime;
+
+ @ApiModelProperty("统计指标类型(字典表PQS_Dicdata)")
+ @TableField("event_type")
+ private String eventType;
+
+ @ApiModelProperty("暂降原因(字典表PQS_Dicdata)")
+ @TableField("advance_reason")
+ private String advanceReason;
+
+ @ApiModelProperty("暂降类型(字典表PQS_Dicdata)")
+ @TableField("advance_type")
+ private String advanceType;
+
+ @ApiModelProperty("事件关联分析表Guid")
+ @TableField("eventass_index")
+ private String eventassIndex;
+
+ @TableField("dq_time")
+ private Double dqTime;
+
+ @ApiModelProperty("特征值计算更新时间(外键PQS_Relevance的Time字段)")
+ @TableField("deal_time")
+ private LocalDateTime dealTime;
+
+ @ApiModelProperty("默认事件个数为0")
+ @TableField("num")
+ private Integer num;
+
+ @ApiModelProperty("波形文件是否从装置招到本地(0:未招,1:已招)默认值为0")
+ @TableField("file_flag")
+ private Boolean fileFlag;
+
+ @ApiModelProperty("特征值计算标志(0,未处理;1,已处理; 2,已处理,无结果;3,计算失败)默认值为0")
+ @TableField("deal_flag")
+ private Boolean dealFlag;
+
+ @ApiModelProperty("处理结果第一条事件发生时间(读comtra文件获取)")
+ @TableField("first_time")
+ private LocalDateTime firstTime;
+
+ @ApiModelProperty("处理结果第一条事件暂降类型(字典表PQS_Dicdata)")
+ @TableField("first_type")
+ private String firstType;
+
+ @ApiModelProperty("处理结果第一条事件发生时间毫秒(读comtra文件获取)")
+ @TableField("first_ms")
+ private BigDecimal firstMs;
+
+ @ApiModelProperty("暂降能量")
+ @TableField("energy")
+ private Double energy;
+
+ @ApiModelProperty("暂降严重度")
+ @TableField("severity")
+ private Double severity;
+
+ @ApiModelProperty("暂降源与监测位置关系 Upper:上游;Lower :下游;Unknown :未知;为空则是未计算")
+ @TableField("sagsource")
+ private String sagsource;
+
+ @ApiModelProperty("持续时间,单位秒")
+ @TableField("duration")
+ private BigDecimal duration;
+
+ @ApiModelProperty("特征幅值")
+ @TableField("feature_amplitude")
+ private BigDecimal featureAmplitude;
+
+ @ApiModelProperty("相别")
+ @TableField("phase")
+ private String phase;
+
+ @ApiModelProperty("事件描述")
+ @TableField("event_describe")
+ private String eventDescribe;
+
+ @ApiModelProperty("波形路径")
+ @TableField("wave_path")
+ private String wavePath;
+
+ @ApiModelProperty("暂态事件上送时间")
+ @TableField("create_time")
+ private LocalDateTime createTime;
+
+ @TableField("transient_value")
+ private Double transientValue;
+
+
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/AppSteadyMsgVO.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/AppSteadyMsgVO.java
new file mode 100644
index 0000000..c9fe3c9
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/AppSteadyMsgVO.java
@@ -0,0 +1,27 @@
+package com.njcn.cloud.pojo.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.njcn.cloud.pojo.dto.AppSteadyMsg;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ *
+ * 稳态消息
+ *
+ *
+ * @author wr
+ * @since 2023-11-03
+ */
+@Data
+public class AppSteadyMsgVO {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("稳态越线列表")
+ private Page page;
+
+ @ApiModelProperty("未读条数")
+ private Integer unstate;
+
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/EventEigDetailVO.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/EventEigDetailVO.java
new file mode 100644
index 0000000..d3fac79
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/EventEigDetailVO.java
@@ -0,0 +1,75 @@
+package com.njcn.cloud.pojo.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author: wr
+ * @Date: 2023/11/1 14:19
+ */
+@Data
+public class EventEigDetailVO implements Serializable {
+
+ /**
+ * 输出参数
+ * 持续时间(单位秒)
+ * hold_time_rms 有效值算法持续时间
+ * hold_time_dq dq变换算法持续时间
+ * 波形起始点(单位度)
+ * POW_a A相波形起始点
+ * POW_b B相波形起始点
+ * POW_c C相波形起始点
+ * 跳变段电压变化率(单位V/S)
+ * Voltagechange_Va A相跳变段电压变化率
+ * Voltagechange_Vb B相跳变段电压变化率
+ * Voltagechange_Vc C相跳变段电压变化率
+ * 分段信息
+ * SEG_T_num 分段数目
+ * SEG_T0_idx 原始分段位置
+ * SEG_T_idx 修正分段位置
+ * 有效值分段信息
+ * SEG_RMS_T_num 分段数目
+ * SEG_RMS_T_idx 分段位置
+ * 特征幅值(单位V)
+ * u_min_num 特征值个数
+ * ua_min A相电压特征值
+ * ub_min B相电压特征值
+ * uc_min C相电压特征值
+ * u3_min 三相电压特征值
+ * order_min_idx 最小值位置
+ * 相位跳变(单位度)
+ * angle_diff_ap A相相位正跳变
+ * angle_diff_bp B相相位正跳变
+ * angle_diff_cp C相相位正跳变
+ * angle_diff_an A相相位负跳变
+ * angle_diff_bn B相相位负跳变
+ * angle_diff_cn C相相位负跳变
+ * bph_max_value 不平衡度(单位%)
+ */
+ public float hold_time_dq;
+ public float pow_a;
+ public float pow_b;
+ public float pow_c;
+ public float voltagechange_Va;
+ public float voltagechange_Vb;
+ public float voltagechange_Vc;
+ public float ua_min;
+ public float ub_min;
+ public float uc_min;
+ public float angle_diff_ap;
+ public float angle_diff_bp;
+ public float angle_diff_cp;
+ public float bph_max_value;
+ public String sagReason; // 暂降原因描述,数据库获取
+ public String sagType; // 暂降类型描述,数据库获取
+ private Integer pttype;
+
+ @Data
+ public static class Detail{
+ List list;
+ Integer backNumber;
+ }
+}
\ No newline at end of file
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/EventInfoDetailVO.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/EventInfoDetailVO.java
new file mode 100644
index 0000000..031512c
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/EventInfoDetailVO.java
@@ -0,0 +1,65 @@
+package com.njcn.cloud.pojo.vo;
+
+import cn.hutool.core.date.DateTime;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * @Description:
+ * @Author: wr
+ * @Date: 2023/11/1 13:17
+ */
+@Data
+public class EventInfoDetailVO implements Serializable {
+
+ @ApiModelProperty("监测点名称")
+ private String lineName;
+
+ @ApiModelProperty("供电公司名称")
+ private String gdName;
+
+ @ApiModelProperty("变电站名称")
+ private String bdzName;
+
+ @ApiModelProperty("终端名称")
+ private String devName;
+
+ @ApiModelProperty("电压等级")
+ private String scale;
+
+ @ApiModelProperty("ip")
+ private String ip;
+
+ @ApiModelProperty("暂降事件id")
+ private String eventDetailIndex;
+
+ @ApiModelProperty("触发时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime timeID;
+
+ @ApiModelProperty("持续时间")
+ private Float persistTime;
+
+ @ApiModelProperty("处理结果第一条事件发生时间毫秒")
+ private Long ms;
+
+ @ApiModelProperty("特征幅值")
+ private Float eventValue;
+
+ @ApiModelProperty("报告状态")
+ private int report;
+
+ @ApiModelProperty("评价")
+ private int evaluate;
+
+ @ApiModelProperty("报告路径")
+ private String reportPath;
+
+
+
+}
\ No newline at end of file
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/EventMsgDetailVO.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/EventMsgDetailVO.java
new file mode 100644
index 0000000..a895d5a
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/EventMsgDetailVO.java
@@ -0,0 +1,51 @@
+package com.njcn.cloud.pojo.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description:
+ * @return: null
+ * @Author: wr
+ * @Date: 2023/11/1 9:56
+ */
+@Data
+public class EventMsgDetailVO implements Serializable {
+
+ @ApiModelProperty("监测点Id")
+ private String lineIndex;
+
+ @ApiModelProperty("监测点名称")
+ private String lineName;
+
+ @ApiModelProperty("暂降事件id")
+ private String eventDetailIndex;
+
+ @ApiModelProperty("触发时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date timeID;
+
+ @ApiModelProperty("持续时间")
+ private Float persistTime;
+
+ @ApiModelProperty("毫秒数")
+ private Long ms;
+
+ @ApiModelProperty("特征幅值")
+ private Float eventValue;
+
+ @ApiModelProperty("终端信息")
+ private String lineInfo;
+
+ @ApiModelProperty("暂态消息")
+ private String eventMsgIndex;
+
+ @ApiModelProperty("读取状态")
+ private int state;
+
+
+}
\ No newline at end of file
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/EventWaveDetailVO.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/EventWaveDetailVO.java
new file mode 100644
index 0000000..2adc44a
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/EventWaveDetailVO.java
@@ -0,0 +1,51 @@
+package com.njcn.cloud.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Description:
+ * @Author: wr
+ * @Date: 2023/11/1 15:18
+ */
+@Data
+public class EventWaveDetailVO implements Serializable {
+
+ @ApiModelProperty("暂降事件id")
+ private String eventDetailIndex;
+
+ @ApiModelProperty("瞬时波形URL")
+ private String instantWaveUrl;
+
+ @ApiModelProperty("RMS波形URL")
+ private String rmsWaveUrl;
+
+ @Data
+ public static class Detail{
+ @ApiModelProperty("暂降事件id")
+ private String eventID;
+
+ @ApiModelProperty("监测点id")
+ private String measurementPointId;
+
+ @ApiModelProperty("监测点名称")
+ private String measurementPointName;
+
+ @ApiModelProperty("波形地址")
+ private String wavePath;
+
+ @ApiModelProperty("ip")
+ private String ip;
+
+ @ApiModelProperty("pt变比")
+ private Double pt;
+
+ @ApiModelProperty("ct变比")
+ private Double ct;
+
+ @ApiModelProperty("接线方式")
+ private Integer ptType;
+ }
+}
\ No newline at end of file
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/LineDetailVO.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/LineDetailVO.java
new file mode 100644
index 0000000..bd2693a
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/LineDetailVO.java
@@ -0,0 +1,35 @@
+package com.njcn.cloud.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 监测点信息
+ * @Author: wr
+ * @Date: 2023/11/3 14:36
+ */
+@Data
+public class LineDetailVO implements Serializable {
+ @ApiModelProperty("供电公司名称")
+ private String gdName;
+
+ @ApiModelProperty("变电站名称")
+ private String subName;
+
+ @ApiModelProperty("终端名称")
+ private String devName;
+
+ @ApiModelProperty("监测点Id")
+ private String lineId;
+
+ @ApiModelProperty("监测点名称")
+ private String lineName;
+
+ @ApiModelProperty("测量间隔(1-10分钟)")
+ private Integer timeInterval;
+
+ @ApiModelProperty("网络参数")
+ private String ip;
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/SteadyMsgDetailVO.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/SteadyMsgDetailVO.java
new file mode 100644
index 0000000..1ff0896
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/SteadyMsgDetailVO.java
@@ -0,0 +1,31 @@
+package com.njcn.cloud.pojo.vo;
+
+import com.njcn.cloud.pojo.dto.AppSteadyAss;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * @Description:
+ * @Author: wr
+ * @Date: 2023/11/3 11:40
+ */
+@Data
+public class SteadyMsgDetailVO extends AppSteadyAss {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("监测点名称")
+ private String lineName;
+
+ @ApiModelProperty("变电站名称")
+ private String subName;
+
+ @ApiModelProperty("越线次数")
+ private Integer limitNum;
+
+ @ApiModelProperty("描述")
+ private String describe;
+
+
+}
\ No newline at end of file
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/SteadyTargetVO.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/SteadyTargetVO.java
new file mode 100644
index 0000000..f7e6c3d
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/SteadyTargetVO.java
@@ -0,0 +1,25 @@
+package com.njcn.cloud.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @description:稳态越限指标
+ * @author gbl
+ *
+ */
+@Data
+public class SteadyTargetVO {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("指标编码")
+ private Integer typeCode;
+
+ @ApiModelProperty("指标名称")
+ private String typeName;
+
+ @ApiModelProperty("越线次数")
+ private Integer limitNum;
+
+}
\ No newline at end of file
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/UserVO.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/UserVO.java
new file mode 100644
index 0000000..856cb57
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/pojo/vo/UserVO.java
@@ -0,0 +1,31 @@
+package com.njcn.cloud.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Description:
+ * @Author: wr
+ * @Date: 2023/11/1 9:56
+ */
+@Data
+public class UserVO implements Serializable {
+
+ @ApiModelProperty("用户ID")
+ private String userId;
+
+ @ApiModelProperty("角色名称")
+ private String roleName;
+
+ @ApiModelProperty("角色码")
+ private String roleCode;
+
+ @ApiModelProperty("手机号")
+ private String phone;
+
+ @ApiModelProperty("用户名")
+ private String userName;
+
+}
diff --git a/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/utils/AESUtil.java b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/utils/AESUtil.java
new file mode 100644
index 0000000..478c9e9
--- /dev/null
+++ b/app-cloud/app-cloud-api/src/main/java/com/njcn/cloud/utils/AESUtil.java
@@ -0,0 +1,88 @@
+package com.njcn.cloud.utils;
+import org.apache.commons.codec.binary.Base64;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import java.security.Security;
+
+/**
+ * @author hongawen
+ * @date: 2019/10/28 14:37
+ */
+public class AESUtil {
+
+ private static final Logger logger = LoggerFactory.getLogger(AESUtil.class);
+
+ private static final String key ="f81804778c89c779";
+
+ private static final String EncryptAlg ="AES";
+
+ private static final String Cipher_Mode="AES/ECB/PKCS5Padding";
+
+ private static final String Encode="UTF-8";
+
+ private static final int Secret_Key_Size=16;
+
+ private static final String Key_Encode="UTF-8";
+
+ /**
+ * @param content 加密内容
+ * @return aes加密后 转base64
+ */
+ public static String aesPKCS5PaddingEncrypt(String content) throws Exception {
+ try {
+ Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
+ Cipher cipher = Cipher.getInstance(Cipher_Mode);
+ byte[] realKey=getSecretKey(key);
+ cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(realKey,EncryptAlg));
+ byte[] data=cipher.doFinal(content.getBytes(Encode));
+ String result=new Base64().encodeToString(data);
+ return result;
+ } catch (Exception e) {
+ throw new Exception("AES加密失败:content=" +content +" key="+key);
+ }
+ }
+
+ /**
+ * AES/ECB/PKCS7Padding 解密
+ * @param content 解密内容
+ * @return 先转base64 再解密
+ */
+ public static String aesPKCS5PaddingDecrypt(String content) throws Exception {
+ try {
+ byte[] decodeBytes=Base64.decodeBase64(content);
+ Cipher cipher = Cipher.getInstance(Cipher_Mode);
+ byte[] realKey=getSecretKey(key);
+ cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(realKey,EncryptAlg));
+ byte[] realBytes=cipher.doFinal(decodeBytes);
+ return new String(realBytes, Encode);
+ } catch (Exception e) {
+ throw new Exception("AES解密失败:Aescontent = " +e.fillInStackTrace(),e);
+ }
+ }
+
+ /**
+ * 对密钥key进行处理:如密钥长度不够位数的则 以指定paddingChar 进行填充;
+ * 此处用空格字符填充,也可以 0 填充,具体可根据实际项目需求做变更
+ * @param key
+ * @return
+ * @throws Exception
+ */
+ public static byte[] getSecretKey(String key) throws Exception{
+ final byte paddingChar=' ';
+
+ byte[] realKey = new byte[Secret_Key_Size];
+ byte[] byteKey = key.getBytes(Key_Encode);
+ for (int i =0;i listPic;
+ private XWPFDocument document;
+ private List eventDetailEigenvalue;
+ private EventInfoDetailVO eventInfoList;
+
+ public void setEventInfoList(EventInfoDetailVO eventInfoList) {
+ this.eventInfoList = eventInfoList == null ? new EventInfoDetailVO() : eventInfoList;
+ }
+
+ public void setEventDetailEigenvalue(List eventDetailEigenvalue) {
+ this.eventDetailEigenvalue = eventDetailEigenvalue == null ? new ArrayList<>() : eventDetailEigenvalue;
+ }
+
+ public XWPFDocument getDocument() {
+ return document;
+ }
+
+ public WordUtil() {
+ this.document = new XWPFDocument();
+ listPic = new ArrayList<>();
+ }
+
+ public void translate(String... strPic) {
+ BASE64Decoder decoder = new BASE64Decoder();
+
+ for (int i = 0; i < strPic.length; i++) {
+ try {
+ byte[] buffer = decoder.decodeBuffer(strPic[i]);
+ listPic.add(buffer);
+ } catch (Exception e) {
+ }
+ }
+ }
+
+ public void createReport() throws IOException, InvalidFormatException {
+ setHeadingStyle(this.document);
+
+ // 添加标题
+ XWPFParagraph titleParagraph = getCenterParagraph(this.document);
+ addLine(titleParagraph, 11);
+ // 设置段落居中
+ XWPFRun titleParagraphBigRun = titleParagraph.createRun();
+ addParagraph(titleParagraphBigRun, "宋体", 28, "000000", "暂降事件报告", true);
+ addLine(titleParagraph, 17);
+ XWPFRun titleParagraphDateRun = titleParagraph.createRun();
+ addParagraph(titleParagraphDateRun, "宋体", 16, "000000", "南京灿能电力自动化股份有限公司", false);
+ addLine(titleParagraph, 1);
+ titleParagraphDateRun = titleParagraph.createRun();
+ addParagraph(titleParagraphDateRun, "宋体", 14, "000000", "生成时间:" + getRightNow(), false);
+ addLine(titleParagraph, 8);
+ titleParagraph = getLeftParagraph(this.document);
+ titleParagraphDateRun = titleParagraph.createRun();
+ addParagraph(titleParagraphDateRun, "宋体", 10, "000000", "【申明】本公司保留对报告的修改权,恕不另行通知,敬请关注最新版本。", false);
+ createTitle(document, "1. 基本信息", "标题 1", 0, 15);
+ XWPFParagraph introductionContentParagraph = getLeftParagraph(document);
+ introductionContentParagraph.setIndentationFirstLine(200);
+ XWPFRun introductionContentRun = introductionContentParagraph.createRun();
+ String time = LocalDateTimeUtil.format(eventInfoList.getTimeID(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
+ addParagraph(introductionContentRun, "宋体", 11, "000000",
+ eventInfoList.getGdName() + "," + eventInfoList.getBdzName() + ",网络参数:" +
+ eventInfoList.getIp() + "," + eventInfoList.getLineName() + "于" + time + "发生暂降事件,特征幅值:"
+ + String.valueOf(eventInfoList.getEventValue()) + "%,持续时间:" + eventInfoList.getPersistTime() + "s。",
+ false);
+ createTitle(document, "2. 波形图", "标题 1", 0, 15);
+ if(listPic.size() == 2){
+ createTitle(document, "2.1 瞬时波形图", "标题 2", 200, 11);
+ createPic(document, "瞬时波形", listPic.get(0));
+ createTitle(document, "2.2 RMS波形图", "标题 2", 200, 11);
+ createPic(document, "RMS波形", listPic.get(1));
+ }else{
+ createTitle(document, "2.1 瞬时波形图", "标题 2", 200, 11);
+ createPic(document, "瞬时波形1", listPic.get(0));
+ createPic(document, "瞬时波形2", listPic.get(1));
+ createTitle(document, "2.2 RMS波形图", "标题 2", 200, 11);
+ createPic(document, "RMS波形3", listPic.get(2));
+ createPic(document, "RMS波形4", listPic.get(3));
+ }
+ createTitle(document, "3. 多特征值", "标题 1", 0, 15);
+
+ XWPFParagraph value = getLeftParagraph(document);
+ XWPFRun valuex = value.createRun();
+ addParagraph(valuex, "宋体", 11, "000000", "事件总分段数:" + this.eventDetailEigenvalue.size(),
+ false);
+ addLine(value, 1);
+
+ if (this.eventDetailEigenvalue.size() == 0) {
+ return;
+ }
+ valuex = value.createRun();
+ addParagraph(valuex, "宋体", 11, "000000", "暂降原因:" + this.eventDetailEigenvalue.get(0).getSagReason(),
+ false);
+ addLine(value, 1);
+
+ for (int i = 0; i < this.eventDetailEigenvalue.size(); i++) {
+ valuex = value.createRun();
+ addParagraph(valuex, "宋体", 11, "000000", "分段" + (i + 1) + "多特征值",
+ true);
+ addLine(value, 1);
+ valuex = value.createRun();
+ addParagraph(valuex, "宋体", 11, "000000", "波形起始点相位(°):" + (this.eventDetailEigenvalue.get(0).getPttype() == 0 ? "A" : "AB") + "相" + this.eventDetailEigenvalue.get(i).getPow_a()
+ + " " + (this.eventDetailEigenvalue.get(0).getPttype() == 0 ? "B" : "BC") + "相" + this.eventDetailEigenvalue.get(i).getPow_b() + " " + ((this.eventDetailEigenvalue.get(0).getPttype() == 2) ? "" : ((this.eventDetailEigenvalue.get(0).getPttype() == 0 ? "C" : "CA") + "相" + this.eventDetailEigenvalue.get(i).getPow_c())),
+ false);
+ addLine(value, 1);
+ valuex = value.createRun();
+ addParagraph(valuex, "宋体", 11, "000000", "跳变段电压变化率(V/ms):" + (this.eventDetailEigenvalue.get(0).getPttype() == 0 ? "A" : "AB") + "相" + this.eventDetailEigenvalue.get(i).getVoltagechange_Va()
+ + " " + (this.eventDetailEigenvalue.get(0).getPttype() == 0 ? "B" : "BC") + "相" + this.eventDetailEigenvalue.get(i).getVoltagechange_Vb() + " " + ((this.eventDetailEigenvalue.get(0).getPttype() == 2) ? "" : ((this.eventDetailEigenvalue.get(0).getPttype() == 0 ? "C" : "CA") + "相" + this.eventDetailEigenvalue.get(i).getVoltagechange_Vc())),
+ false);
+ addLine(value, 1);
+ valuex = value.createRun();
+ addParagraph(valuex, "宋体", 11, "000000", "相位跳变(°):" + (this.eventDetailEigenvalue.get(0).getPttype() == 0 ? "A" : "AB") + "相" + this.eventDetailEigenvalue.get(i).getAngle_diff_ap()
+ + " " + (this.eventDetailEigenvalue.get(0).getPttype() == 0 ? "B" : "BC") + "相" + this.eventDetailEigenvalue.get(i).getAngle_diff_bp() + " " + ((this.eventDetailEigenvalue.get(0).getPttype() == 2) ? "" : ((this.eventDetailEigenvalue.get(0).getPttype() == 0 ? "C" : "CA") + "相" + this.eventDetailEigenvalue.get(i).getAngle_diff_cp())),
+ false);
+ /*addLine(value, 1);
+ valuex = value.createRun();
+ addParagraph(valuex, "宋体", 11, "000000", "特征幅值(V):A相" + this.eventDetailEigenvalue.get(i).getUa_min()
+ + " B相" + this.eventDetailEigenvalue.get(i).getUb_min() + " C相" + this.eventDetailEigenvalue.get(i).getUc_min(),
+ false);*/
+ /*addLine(value, 1);
+ valuex = value.createRun();
+ addParagraph(valuex, "宋体", 11, "000000", "持续时间(ms):" + this.eventDetailEigenvalue.get(i).getHold_time_dq(),
+ false);*/
+ addLine(value, 1);
+ valuex = value.createRun();
+ addParagraph(valuex, "宋体", 11, "000000", "三相电压不平衡度(%):" + this.eventDetailEigenvalue.get(i).getBph_max_value(),
+ false);
+ addLine(value, 1);
+ valuex = value.createRun();
+ addParagraph(valuex, "宋体", 11, "000000", "暂降类型:" + this.eventDetailEigenvalue.get(i).getSagType(),
+ false);
+ addLine(value, 1);
+ }
+ }
+
+ public void createPic(XWPFDocument document, String name, byte[] base64Info) throws IOException, InvalidFormatException {
+ XWPFParagraph picParagraph = getCenterParagraph(document);
+ XWPFRun createRun = picParagraph.createRun();
+ InputStream in = new ByteArrayInputStream(base64Info);
+ createRun.addPicture(in, 5, name, Units.toEMU(410), Units.toEMU(400));
+ }
+
+ public void createTitle(XWPFDocument document, String message, String style, int line, int fontSize) {
+ XWPFParagraph summaeTableParagraph = getLeftParagraph(document);
+ summaeTableParagraph.setStyle(style);
+ summaeTableParagraph.setIndentationFirstLine(line);
+ XWPFRun summaeTableRun = summaeTableParagraph.createRun();
+ addParagraph(summaeTableRun, "宋体", fontSize, "000000", message, false);
+ }
+
+ public void setParagraphStyle(XWPFParagraph paragraph) {
+ paragraph.setSpacingBefore(100);
+ paragraph.setSpacingAfter(100);
+ }
+
+ /**
+ * 返回指定格式的段落 居中型
+ *
+ * @param document 文档对象
+ */
+ public XWPFParagraph getCenterParagraph(XWPFDocument document) {
+ XWPFParagraph paragraph = document.createParagraph();
+ setParagraphStyle(paragraph);
+ paragraph.setAlignment(ParagraphAlignment.CENTER);
+ paragraph.setVerticalAlignment(TextAlignment.CENTER);
+ return paragraph;
+ }
+
+ /**
+ * 返回指定格式的段落 居左型
+ *
+ * @param document 文档对象
+ */
+ public XWPFParagraph getLeftParagraph(XWPFDocument document) {
+ XWPFParagraph paragraph = document.createParagraph();
+ setParagraphStyle(paragraph);
+ paragraph.setAlignment(ParagraphAlignment.LEFT);
+ return paragraph;
+ }
+
+
+ /**
+ * 添加换行符
+ *
+ * @param paragraph 指定段落
+ * @param amount 行数
+ */
+ public void addLine(XWPFParagraph paragraph, Integer amount) {
+ XWPFRun run = paragraph.createRun();
+ run.setFontSize(11);
+ for (int i = 0; i < amount; i++) {
+ run.addCarriageReturn();
+ }
+ }
+
+
+ /**
+ * 添加段落文本
+ *
+ * @param run 文本执行对象
+ * @param fontFamily 字体类型
+ * @param fontSize 字体大小
+ * @param backgroundColor 字体颜色
+ * @param bold 是否加粗
+ */
+ public void addParagraph(XWPFRun run, String fontFamily, Integer fontSize, String backgroundColor, String message, boolean bold) {
+ run.setText(message);
+ run.setColor(backgroundColor);
+ run.setFontSize(fontSize);
+ run.setFontFamily(fontFamily);
+ run.setBold(bold);
+ }
+
+
+ /**
+ * 增加自定义标题样式。这里用的是stackoverflow的源码
+ *
+ * @param docxDocument 目标文档
+ * @param strStyleId 样式名称
+ * @param headingLevel 样式级别
+ */
+ public void addCustomHeadingStyle(XWPFDocument docxDocument, String strStyleId, int headingLevel) {
+
+ CTStyle ctStyle = CTStyle.Factory.newInstance();
+ ctStyle.setStyleId(strStyleId);
+
+ CTString styleName = CTString.Factory.newInstance();
+ styleName.setVal(strStyleId);
+ ctStyle.setName(styleName);
+
+ CTDecimalNumber indentNumber = CTDecimalNumber.Factory.newInstance();
+ indentNumber.setVal(BigInteger.valueOf(headingLevel));
+
+ // lower number > style is more prominent in the formats bar
+ ctStyle.setUiPriority(indentNumber);
+
+ CTOnOff onoffnull = CTOnOff.Factory.newInstance();
+ ctStyle.setUnhideWhenUsed(onoffnull);
+
+ // style shows up in the formats bar
+ ctStyle.setQFormat(onoffnull);
+
+ // style defines a heading of the given level
+ CTPPr ppr = CTPPr.Factory.newInstance();
+ ppr.setOutlineLvl(indentNumber);
+ ctStyle.setPPr(ppr);
+
+ XWPFStyle style = new XWPFStyle(ctStyle);
+
+ // is a null op if already defined
+ XWPFStyles styles = docxDocument.createStyles();
+
+ style.setType(STStyleType.PARAGRAPH);
+ styles.addStyle(style);
+
+ }
+
+ /**
+ * 设置文档中标题格式
+ */
+ public void setHeadingStyle(XWPFDocument document) {
+ addCustomHeadingStyle(document, "标题 1", 1);
+ addCustomHeadingStyle(document, "标题 2", 2);
+ addCustomHeadingStyle(document, "标题 3", 3);
+ addCustomHeadingStyle(document, "标题 4", 4);
+ addCustomHeadingStyle(document, "标题 5", 5);
+ addCustomHeadingStyle(document, "标题 6", 6);
+ addCustomHeadingStyle(document, "标题 7", 7);
+ }
+
+ /**
+ * 给表格添加一行数据
+ *
+ * @param paragraph 段落对象
+ * @param row 行对象
+ * @param data 不定长度的数据
+ */
+ public void setExcelContent(XWPFParagraph paragraph, XWPFTableRow row, String... data) {
+ for (int i = 0; i < data.length; i++) {
+ XWPFRun run = paragraph.createRun();
+ run.setFontFamily("宋体");
+ run.setText(data[i]);
+ row.getCell(i).setParagraph(paragraph);
+ paragraph.removeRun(0);
+ }
+ }
+
+
+ /**
+ * 添加表头标题一行数据
+ *
+ * @param paragraph 段落对象
+ * @param row 行对象
+ * @param data 不定长度的数据
+ */
+ public void setExcelHeadContent(XWPFParagraph paragraph, XWPFTableRow row, String... data) {
+ XWPFRun run = paragraph.createRun();
+ run.setFontFamily("宋体");
+ run.setBold(true);
+ run.setText(data[0]);
+ row.getCell(0).setParagraph(paragraph);
+ paragraph.removeRun(0);
+ for (int i = 1; i < data.length; i++) {
+ XWPFRun run1 = paragraph.createRun();
+ run1.setFontFamily("宋体");
+ run1.setBold(true);
+ run1.setText(data[i]);
+ row.addNewTableCell().setParagraph(paragraph);
+ paragraph.removeRun(0);
+ }
+ }
+
+ /**
+ * 获取当前的日期
+ *
+ * @return
+ */
+ public String getRightNow() {
+ Calendar rightNow = Calendar.getInstance();
+ Integer year = rightNow.get(Calendar.YEAR);
+ Integer month = rightNow.get(Calendar.MONTH) + 1;
+ Integer day = rightNow.get(rightNow.DAY_OF_MONTH);
+ return year + "年" + month + "月" + day + "日";
+ }
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/controller/information/EventMsgController.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/controller/information/EventMsgController.java
new file mode 100644
index 0000000..5a71476
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/controller/information/EventMsgController.java
@@ -0,0 +1,133 @@
+package com.njcn.cloud.controller.information;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.njcn.cloud.enums.app.EventMsgCodeEnum;
+import com.njcn.cloud.pojo.vo.EventEigDetailVO;
+import com.njcn.cloud.pojo.vo.EventInfoDetailVO;
+import com.njcn.cloud.pojo.vo.EventMsgDetailVO;
+import com.njcn.cloud.pojo.vo.EventWaveDetailVO;
+import com.njcn.cloud.service.user.IAppEventInfoService;
+import com.njcn.cloud.service.user.IAppEventMsgService;
+import com.njcn.common.pojo.enums.response.CommonResponseEnum;
+import com.njcn.common.pojo.exception.BusinessException;
+import com.njcn.common.pojo.response.HttpResult;
+import com.njcn.common.utils.HttpResultUtil;
+import com.njcn.web.controller.BaseController;
+import com.njcn.web.pojo.param.BaseParam;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+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;
+
+
+
+/**
+ * @description: 暂态消息业务层
+ * @author: denghuajun
+ * @time: 2019-10-17 14:33:55
+ **/
+@RestController
+@RequestMapping("/eventmsg")
+@Api(tags = "暂态消息接口")
+@RequiredArgsConstructor
+@Slf4j
+public class EventMsgController extends BaseController {
+
+ private final IAppEventMsgService eventMsgService;
+ private final IAppEventInfoService eventInfoService;
+
+ /**
+ * 暂态消息获取
+ */
+ @PostMapping("/eventDetailList")
+ @ApiOperation(value = "暂态消息获取入口", notes = "暂态消息")
+ public HttpResult> eventDetailList(@RequestBody BaseParam param) {
+ String methodDescribe = getMethodDescribe("eventDetailList");
+ if (StrUtil.isBlank(param.getSearchValue())) {
+ throw new BusinessException(EventMsgCodeEnum.USERID_WRONG.getMsg());
+ }
+ Page page = eventMsgService.eventMsgPage(param);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, page, methodDescribe);
+ }
+
+ /**
+ * 暂态事件基本信息获取
+ */
+ @PostMapping("/eventDetailBaseInfo")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "eventMsgIndex", value = "暂态消息id", required = true, paramType = "query"),
+ })
+ @ApiOperation(value = "暂态事件基本信息入口", notes = "暂态事件基本信息")
+ public HttpResult eventDetailBaseInfo(String eventMsgIndex) {
+ String methodDescribe = getMethodDescribe("eventDetailBaseInfo");
+ if (StrUtil.isBlank(eventMsgIndex)) {
+ throw new BusinessException(EventMsgCodeEnum.eventDetailIndex_WRONG.getMsg());
+ }
+ EventInfoDetailVO eventInfoList = eventMsgService.eventInfoDetail(eventMsgIndex);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, eventInfoList, methodDescribe);
+ }
+
+ /**
+ * 暂态事件特征幅值
+ */
+ @PostMapping("/eventDetailEigenvalue")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "eventDetailIndex", value = "暂降事件id", required = true, paramType = "query"),
+ })
+ @ApiOperation(value = "暂态事件特征幅值入口", notes = "暂态事件特征幅值")
+ public HttpResult eventDetailEigenvalue(String eventDetailIndex) {
+ String methodDescribe = getMethodDescribe("eventDetailEigenvalue");
+ if (StrUtil.isBlank(eventDetailIndex)) {
+ throw new BusinessException(EventMsgCodeEnum.eventDetailIndex_WRONG.getMsg());
+ }
+ EventEigDetailVO.Detail detail = eventInfoService.eventDetailEigenvalue(eventDetailIndex);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, detail, methodDescribe);
+
+
+ }
+
+ /**
+ * 暂态事件波形图
+ */
+ @PostMapping("/eventDetailWave")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "eventDetailIndex", value = "暂降事件id", required = true, paramType = "query"),
+ })
+ @ApiOperation(value = "暂态事件波形图入口", notes = "暂态事件波形图")
+ public HttpResult eventDetailWave(String eventDetailIndex) {
+ String methodDescribe = getMethodDescribe("eventDetailWave");
+ if (StrUtil.isBlank(eventDetailIndex)) {
+ throw new BusinessException(EventMsgCodeEnum.eventDetailIndex_WRONG.getMsg());
+ }
+ EventWaveDetailVO vo = eventInfoService.eventDetailWave(eventDetailIndex);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, vo, methodDescribe);
+ }
+
+ /**
+ * 暂态评价
+ */
+ @PostMapping("/eventDetailEvaluate")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "eventDetailIndex", value = "暂降事件id", required = true, paramType = "query"),
+ @ApiImplicitParam(name = "evaluate", value = "暂态评价", required = true, paramType = "query"),
+ @ApiImplicitParam(name = "userId", value = "用户ID", required = true, paramType = "query"),
+ })
+ @ApiOperation(value = "暂态评价入口", notes = "暂态评价获取")
+ public HttpResult eventDetailEvaluate(String eventDetailIndex, int evaluate, String userId) {
+ String methodDescribe = getMethodDescribe("eventDetailEvaluate");
+ if (StrUtil.isBlank(eventDetailIndex)) {
+ throw new BusinessException(EventMsgCodeEnum.eventDetailIndex_WRONG.getMsg());
+ }
+ Boolean aBoolean = eventInfoService.eventDetailEvaluate(eventDetailIndex, evaluate, userId);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, aBoolean, methodDescribe);
+ }
+
+
+}
\ No newline at end of file
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/controller/information/SteadyMsgController.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/controller/information/SteadyMsgController.java
new file mode 100644
index 0000000..dd2ece6
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/controller/information/SteadyMsgController.java
@@ -0,0 +1,153 @@
+package com.njcn.cloud.controller.information;
+
+import cn.hutool.core.util.StrUtil;
+import com.njcn.cloud.enums.app.EventMsgCodeEnum;
+import com.njcn.cloud.pojo.dto.AppSteadyUrl;
+import com.njcn.cloud.pojo.vo.AppSteadyMsgVO;
+import com.njcn.cloud.pojo.vo.SteadyMsgDetailVO;
+import com.njcn.cloud.pojo.vo.SteadyTargetVO;
+import com.njcn.cloud.service.user.IAppSteadyMsgService;
+import com.njcn.common.pojo.enums.response.CommonResponseEnum;
+import com.njcn.common.pojo.exception.BusinessException;
+import com.njcn.common.pojo.response.HttpResult;
+import com.njcn.common.utils.HttpResultUtil;
+import com.njcn.web.controller.BaseController;
+import com.njcn.web.pojo.param.BaseParam;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+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;
+
+
+/**
+ * @description: 稳态消息详情业务层
+ * @author: gbl
+ * @time: 2019-11-27
+ **/
+@RestController
+@RequestMapping("/steadymsg")
+@Api(tags = "稳态消息接口")
+@RequiredArgsConstructor
+public class SteadyMsgController extends BaseController {
+
+ private final IAppSteadyMsgService steadyAssService;
+
+ /**
+ * @Description: 稳态越限列表
+ * @param param
+ * @return: com.njcn.common.pojo.response.HttpResult
+ * @Author: wr
+ * @Date: 2023/11/3 15:02
+ */
+ @PostMapping("steadyState")
+ @ApiOperation(value = "稳态越限列表", notes = "稳态越限列表")
+ public HttpResult steadyState(@RequestBody BaseParam param) {
+ String methodDescribe = getMethodDescribe("eventDetailList");
+ if (StrUtil.isBlank(param.getSearchValue())) {
+ throw new BusinessException(EventMsgCodeEnum.USERID_WRONG.getMsg());
+ }
+ AppSteadyMsgVO steadyState = steadyAssService.getSteadyState(param);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, steadyState, methodDescribe);
+
+ }
+
+ /**
+ * @Description: 稳态越限列表详细信息
+ * @param steadyIndex 稳态越限列表ID
+ * @return:
+ * @Author: wr
+ * @Date: 2023/11/3 15:02
+ */
+ @PostMapping("steadyStateInfo")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "steadyIndex", value = "稳态越限列表ID", required = true, paramType = "query")
+ })
+ @ApiOperation(value = "稳态越限列表详细信息", notes = "稳态越限详细信息")
+ public HttpResult> steadyStateInfo(String steadyIndex) {
+ String methodDescribe = getMethodDescribe("steadyStateInfo");
+ List steadyDetail = steadyAssService.getSteadyDetail(steadyIndex);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, steadyDetail, methodDescribe);
+ }
+
+ /**
+ * @Description: 稳态越限涉及指标
+ * @param lineIndex
+ * @param timeID
+ * @return: ResponseData
+ * @Author: wr
+ * @Date: 2023/11/3 16:23
+ */
+ @PostMapping("/steadyTarget")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "lineIndex", value = "监测点ID", required = true, paramType = "query"),
+ @ApiImplicitParam(name = "timeID", value = "统计时间", required = true, paramType = "query")
+ })
+ @ApiOperation(value = "稳态越限涉及指标", notes = "稳态越限指标")
+ public HttpResult> steadyTarget(String lineIndex,String timeID) {
+ String methodDescribe = getMethodDescribe("steadyTarget");
+ List steadyTarget = steadyAssService.getSteadyTarget(lineIndex, timeID);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, steadyTarget, methodDescribe);
+
+
+ }
+
+ /**
+ * @Description: 稳态越限指标图形
+ * @param lineIndex
+ * @param timeID
+ * @param typeCode
+ * @return: com.njcn.common.pojo.response.HttpResult>
+ * @Author: wr
+ * @Date: 2023/11/3 16:25
+ */
+ @PostMapping("/steadyTargetUrl")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "lineIndex", value = "监测点ID", required = true, paramType = "query"),
+ @ApiImplicitParam(name = "timeID", value = "统计时间", required = true, paramType = "query"),
+ @ApiImplicitParam(name = "typeCode", value = "指标编码", required = true, paramType = "query")
+ })
+ @ApiOperation(value = "稳态越限指标图形", notes = "稳态越限图形")
+ public HttpResult steadyTargetUrl(String lineIndex,String timeID,Integer typeCode) {
+ String methodDescribe = getMethodDescribe("steadyTargetUrl");
+ AppSteadyUrl steadyTargetUrl = steadyAssService.getSteadyTargetUrl(lineIndex, timeID, typeCode);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, steadyTargetUrl, methodDescribe);
+
+ }
+//
+// /**
+// * @description: 生成稳态越限指标图形
+// * @author gbl
+// * @param lineIndex 监测点ID
+// * @param timeID 统计时间
+// * @param typeCode
+// */
+// @PostMapping("steadyImage")
+// @ApiImplicitParams({
+// @ApiImplicitParam(name = "lineIndex", value = "监测点ID", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "timeID", value = "统计时间", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "typeCode", value = "指标编码", required = true, paramType = "query")
+// })
+// @ApiOperation(value = "生成稳态越限指标图形", notes = "稳态越限图形", response = ResponseData.class)
+// public ResponseData steadyImage(int lineIndex,Long timeID,int typeCode, HttpServletRequest request) {
+// ResponseData responseData = new ResponseData();
+//
+// try {
+// SteadyUrl msgs = new SteadyUrl();
+// String dateTime = PubUtils.timeStamp3Date(timeID,"");
+// Date time = PubUtils.string2Date(dateTime, "yyyy-MM-dd");
+// msgs = steadyAssService.getUrl(request,lineIndex,time,typeCode);
+//
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_SUCCESS,SteadyMsgCodeEnum.GETTARGET_SUCCESS.getCode(), SteadyMsgCodeEnum.GETTARGET_SUCCESS.getMsg(), msgs);
+// } catch (Exception e) {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL,SteadyMsgCodeEnum.GETTARGET_FALL.getCode(), SteadyMsgCodeEnum.GETTARGET_FALL.getMsg(), null);
+// }
+// return responseData;
+// }
+}
\ No newline at end of file
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/controller/report/ShiningReportController.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/controller/report/ShiningReportController.java
new file mode 100644
index 0000000..2bd6268
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/controller/report/ShiningReportController.java
@@ -0,0 +1,59 @@
+package com.njcn.cloud.controller.report;
+
+import cn.hutool.core.util.StrUtil;
+import com.njcn.cloud.enums.app.EventMsgCodeEnum;
+import com.njcn.cloud.pojo.dto.AppEventInfo;
+import com.njcn.cloud.service.user.IAppReportService;
+import com.njcn.common.pojo.enums.response.CommonResponseEnum;
+import com.njcn.common.pojo.exception.BusinessException;
+import com.njcn.common.pojo.response.HttpResult;
+import com.njcn.common.utils.HttpResultUtil;
+import com.njcn.web.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+
+@RestController
+@RequestMapping("/report")
+@Api(tags = "报告查询接口")
+@RequiredArgsConstructor
+public class ShiningReportController extends BaseController {
+ private final IAppReportService shiningReportService;
+
+
+ @PostMapping("/eventDetailReportApply")
+ @ApiImplicitParams({@ApiImplicitParam(name = "userId", value = "用户ID", required = true, paramType = "query")
+ , @ApiImplicitParam(name = "eventDetailIndex", value = "暂降事件ID", required = true, paramType = "query")})
+ @ApiOperation(value = "暂降事件报告申请入口", notes = "暂降事件报告申请")
+ public HttpResult eventDetailReportApply(@RequestParam("userId") String userId, @RequestParam("eventDetailIndex") String eventDetailIndex) throws Exception {
+ String methodDescribe = getMethodDescribe("eventDetailReportApply");
+ if (StrUtil.isBlank(eventDetailIndex) && StrUtil.isBlank(userId)) {
+ throw new BusinessException(EventMsgCodeEnum.eventDetailIndex_WRONG.getMsg());
+ }
+ String result = shiningReportService.eventDetailReportApply(userId, eventDetailIndex);
+ if ("2".equals(result)) {
+ throw new BusinessException(EventMsgCodeEnum.EVENTDETAILREPORTAPPLY_NODATA.getMsg());
+ }
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
+ }
+
+ @PostMapping("/eventDetailReportDownLoad")
+ @ApiImplicitParams({@ApiImplicitParam(name = "userId", value = "用户ID", required = true, paramType = "query")
+ , @ApiImplicitParam(name = "eventDetailIndex", value = "暂降事件ID", required = true, paramType = "query")})
+ @ApiOperation(value = "暂降事件报告下载入口", notes = "暂降事件报告下载")
+ public HttpResult eventDetailReportDownLoad(@RequestParam("userId") String userId, @RequestParam("eventDetailIndex") String eventDetailIndex) {
+ String methodDescribe = getMethodDescribe("eventDetailReportDownLoad");
+ AppEventInfo downLoadPath = shiningReportService.getDownLoadPath(userId, eventDetailIndex);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, downLoadPath.getReportPath(), methodDescribe);
+
+
+ }
+
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/controller/user/UserController.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/controller/user/UserController.java
new file mode 100644
index 0000000..7936413
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/controller/user/UserController.java
@@ -0,0 +1,594 @@
+package com.njcn.cloud.controller.user;
+
+import cn.hutool.core.util.StrUtil;
+import com.njcn.cloud.enums.app.UserCodeEnum;
+import com.njcn.cloud.pojo.vo.UserVO;
+import com.njcn.cloud.service.user.IAppUserService;
+import com.njcn.cloud.utils.AESUtil;
+import com.njcn.cloud.utils.RedisDB;
+import com.njcn.common.pojo.response.HttpResult;
+import com.njcn.common.utils.HttpResultUtil;
+import com.njcn.redis.utils.RedisUtil;
+import com.njcn.web.controller.BaseController;
+import com.njcn.web.utils.RequestUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author hongawen
+ * @date: 2019/9/19 18:04
+ */
+@RestController
+@RequestMapping("/user")
+@Api(tags = "用户操作接口")
+@RequiredArgsConstructor
+public class UserController extends BaseController {
+
+ private static final Logger logger = LoggerFactory.getLogger(UserController.class);
+
+ private final IAppUserService appUserService;
+
+
+ private final RedisUtil redisUtil;
+
+ /**
+ * 获取(登录、注册、忘记密码、重新绑定手机)验证码
+ */
+ @PostMapping("authCode")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "phone", value = "手机号", required = true, paramType = "query"),
+ @ApiImplicitParam(name = "devCode", value = "设备码", required = true, paramType = "query"),
+ @ApiImplicitParam(name = "type", value = "验证码类型", required = true, paramType = "query"),
+ })
+ @ApiOperation(value = "获取验证码", notes = "获取验证码")
+ public HttpResult authCode(String phone, String devCode, String type, HttpServletRequest request) {
+ //判断是否为黑客攻击
+// if (judgeAttachInterface(devCode, request, phone)) {
+// return HttpResultUtil.assembleResult(UserCodeEnum.SEND_CODE_FAIL.getCode()+"", null, UserCodeEnum.SEND_CODE_FAIL.getMsg());
+// }
+ System.out.println("获取验证码的请求信息,手机号:" + phone + ",设备码为:" + devCode);
+ try {
+// devCode = AESUtil.aesPKCS5PaddingDecrypt(devCode);
+ appUserService.setMessage(phone, devCode, type);
+ return HttpResultUtil.assembleResult(UserCodeEnum.SEND_CODE_SUCCESS.getCode()+"", null, UserCodeEnum.SEND_CODE_SUCCESS.getMsg());
+ } catch (Exception e) {
+ logger.error("发送短信异常,异常为:" + e.getMessage());
+ if (e.getMessage().length() < 10) {
+ return HttpResultUtil.assembleResult(UserCodeEnum.getCodeByMsg(e.getMessage())+"", null, e.getMessage());
+ } else {
+ return HttpResultUtil.assembleResult(UserCodeEnum.SEND_CODE_FAIL.getCode()+"", null, UserCodeEnum.SEND_CODE_FAIL.getMsg());
+ }
+ }
+ }
+
+ /**
+ * 手机app登录入口
+ */
+ @PostMapping("login")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "phone", value = "手机号", required = true, paramType = "query"),
+ @ApiImplicitParam(name = "type", value = "登录类型", required = true, paramType = "query"),
+ @ApiImplicitParam(name = "key", value = "验证码/密码", required = true, paramType = "query"),
+ @ApiImplicitParam(name = "devCode", value = "设备码", required = true, paramType = "query"),
+ })
+ @ApiOperation(value = "登录入口", notes = "APP登录")
+ public HttpResult login(String phone, String type, String key, String devCode, HttpServletRequest request) {
+
+ if (StringUtils.isBlank(key)) {
+ return HttpResultUtil.assembleResult(UserCodeEnum.KEY_WRONG.getCode()+"", null, UserCodeEnum.KEY_WRONG.getMsg());
+ }
+ if (StringUtils.isBlank(devCode)) {
+ return HttpResultUtil.assembleResult(UserCodeEnum.DEVCODE_WRONG.getCode()+"", null, UserCodeEnum.DEVCODE_WRONG.getMsg());
+ }
+ UserVO userResult = new UserVO();
+ logger.info("controller更新手机id:" + devCode);
+ try {
+ devCode = AESUtil.aesPKCS5PaddingDecrypt(devCode);
+// TokenManager.appLogin(phone, type, key, devCode, ProjectEnum.APP.getItem());
+// AppUser appUser = (AppUser) SecurityUtils.getSubject().getPrincipal();
+// userResult.setPhone(appUser.getPhone());
+// userResult.setRoleCode(appUser.getUserLevel());
+// userResult.setUserName(StringUtils.isEmpty(appUser.getName()) ? null : appUser.getName());
+// userResult.setRoleName(UserLevelEnum.getMsgByCode(appUser.getUserLevel()));
+// userResult.setUserId(appUser.getUserIndex());
+ return HttpResultUtil.assembleResult(UserCodeEnum.LOGIN_SUCCESS.getCode()+"", userResult, UserCodeEnum.LOGIN_SUCCESS.getMsg());
+ } catch (Exception e) {
+ logger.error("app用户登录异常:" + e.toString());
+ if (e.getMessage().length() < 10) {
+ return HttpResultUtil.assembleResult(UserCodeEnum.getCodeByMsg(e.getMessage())+"", null, e.getMessage());
+ } else {
+ return HttpResultUtil.assembleResult(UserCodeEnum.LOGIN_FAIL.getCode()+"", null, UserCodeEnum.LOGIN_FAIL.getMsg());
+ }
+ }
+ }
+
+
+
+
+ /***
+ * 判断当前请求是否为黑客攻击
+ * @author hongawen
+ * @date 2023/8/25 11:07
+ * @return boolean
+ */
+ private boolean judgeAttachInterface(String devCode, HttpServletRequest request, String phone) {
+ boolean flag = false;
+ //针对设备码
+ if (judgeDevCode(devCode)) {
+ flag = true;
+ //判断手机号是否在黑名单
+ } else if (judgeSmsPhone(phone)) {
+ flag = true;
+ //针对ip限制,避免盗刷
+ } else if (judgeRequestIp(request)) {
+ flag = true;
+ }
+ return flag;
+ }
+
+ /***
+ * 紧急处理,后期app需要加上滑块移动验证
+ * @author hongawen
+ * 加上设备码限制,
+ * 如果同一设备码72小时内超过6次,则立即返回
+ * 如果72小时内超过30次,则彻底封杀该设备码
+ */
+ private boolean judgeDevCode(String devCode) {
+ boolean flag = true;
+ String valueByPhone = redisUtil.getStringByKey(RedisDB.CODE_DB,RedisDB.SMS_DEV_CODE.concat(devCode));
+ int times = StrUtil.isBlank(valueByPhone) ? 0 : Integer.parseInt(valueByPhone);
+ times++;
+ if (times < 6) {
+ //合理范围内,缓存
+ flag = false;
+ redisUtil.saveByKeyWithExpire(RedisDB.CODE_DB, RedisDB.SMS_DEV_CODE.concat(devCode), String.valueOf(times), RedisDB.THREE_DAYS);
+ } else if (times < 30) {
+ redisUtil.saveByKeyWithExpire(RedisDB.CODE_DB, RedisDB.SMS_DEV_CODE.concat(devCode), String.valueOf(times), RedisDB.THREE_DAYS);
+ } else {
+ redisUtil.saveByKeyWithExpire(RedisDB.CODE_DB, RedisDB.SMS_DEV_CODE.concat(devCode), String.valueOf(times), -1);
+ }
+ return flag;
+ }
+
+
+ public static void main(String[] args) {
+ for (int i = 0; i < 100; i++) {
+ testFloop(i);
+ }
+ }
+
+ private static void testFloop(int i) {
+ i++;
+ if (i < 6) {
+ System.out.println(i);
+ } else if (i > 30) {
+ System.out.println(i);
+ }
+ }
+
+ /***
+ * 判断手机号是否在黑名单
+ * @author hongawen
+ * @date 2023/8/24 20:06
+ * @param phone 手机号
+ * @return boolean
+ */
+ private boolean judgeSmsPhone(String phone) {
+ String valueByPhone = redisUtil.getStringByKey(RedisDB.CODE_DB, RedisDB.SMS_PHONE.concat(phone));
+ return !StrUtil.isBlank(valueByPhone);
+ }
+
+ /***
+ * 紧急处理,后期app需要加上滑块移动验证
+ * @author hongawen
+ * 加上ip限制,
+ * 如果同一ip72小时内超过6次,则立即返回
+ * 如果72小时内超过30次,则彻底封杀该ip
+ */
+ private boolean judgeRequestIp(HttpServletRequest request) {
+ boolean flag = true;
+ //获取过来的ip可能有多个,通过','分割后,取第一个,并且仅仅关心ip的前两个数据范围xxx.xxx.*.*;
+ String clientIpAddress = RequestUtil.getRealIp(request);
+ String ip = RedisDB.SMS_IP + clientIpAddress;
+ String ipValue = redisUtil.getStringByKey(RedisDB.CODE_DB, ip);
+ int times = StrUtil.isBlank(ipValue) ? 0 : Integer.parseInt(ipValue);
+ logger.error("{}来获取短信验证码,最近72小时内,已经请求了{}次", ip, times);
+ times++;
+ if (times < 6) {
+ //合理范围内,缓存
+ flag = false;
+ redisUtil.saveByKeyWithExpire(RedisDB.CODE_DB, ip, String.valueOf(times), RedisDB.THREE_DAYS);
+ } else if (times < 30) {
+ redisUtil.saveByKeyWithExpire(RedisDB.CODE_DB, ip, String.valueOf(times), RedisDB.THREE_DAYS);
+ }else {
+ redisUtil.saveByKeyWithExpire(RedisDB.CODE_DB, ip, String.valueOf(times), -1);
+ }
+ return flag;
+ }
+
+ /***
+ * 查找ip前2个255详细信息
+ * @author hongawen
+ * @date 2023/8/25 9:59
+ * @return int
+ */
+ public static int findNthCharacterIndex(String input, char targetChar, int n) {
+ int count = 0;
+ for (int i = 0; i < input.length(); i++) {
+ if (input.charAt(i) == targetChar) {
+ count++;
+ if (count == n) {
+ return i;
+ }
+ }
+ }
+ return -1;
+ }
+
+// /**
+// * 手机app注册
+// */
+// @PostMapping("register")
+// @ApiImplicitParams({
+// @ApiImplicitParam(name = "phone", value = "手机号", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "code", value = "验证码", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "devCode", value = "设备码", required = true, paramType = "query"),
+// })
+// @ApiOperation(value = "注册入口", notes = "用户注册", response = ResponseData.class)
+// public ResponseData register(String phone, String code, String devCode) {
+// ResponseData responseData;
+// //参数校验
+// if (!PubUtils.patternPhone(XssFilterUtil.dealString(phone))) {
+// return PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.PHONE_WRONG.getCode(), UserCodeEnum.PHONE_WRONG.getMsg(), null);
+// }
+// if (StringUtils.isBlank(devCode)) {
+// return PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.DEVCODE_WRONG.getCode(), UserCodeEnum.DEVCODE_WRONG.getMsg(), null);
+// }
+// UserResult userResult;
+// logger.info("controller更新手机id:" + devCode);
+// try {
+// devCode = AESUtil.aesPKCS5PaddingDecrypt(devCode);
+// userResult = appUserService.register(phone, code, devCode);
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_SUCCESS, UserCodeEnum.REGIST_SUCCESS.getCode(), UserCodeEnum.REGIST_SUCCESS.getMsg(), userResult);
+// } catch (Exception e) {
+// if (e.getMessage().length() < 10) {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.getCodeByMsg(e.getMessage()), e.getMessage(), null);
+// } else {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.REGIST_FAIL.getCode(), UserCodeEnum.REGIST_FAIL.getMsg(), null);
+// }
+// logger.error("app用户注册异常:" + e.toString());
+// }
+// return responseData;
+// }
+//
+//
+// /**
+// * 手机app密码设置
+// */
+// @PostMapping("setPsd")
+// @ApiImplicitParams({
+// @ApiImplicitParam(name = "userId", value = "用户索引", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "password", value = "密码", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "devCode", value = "设备码", required = true, paramType = "query"),
+// })
+// @ApiOperation(value = "设置密码", notes = "设置密码", response = ResponseData.class)
+// public ResponseData setPsd(String userId, String password, String devCode) {
+// ResponseData responseData;
+// //参数校验
+// if (StringUtils.isBlank(userId)) {
+// return PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.USERID_WRONG.getCode(), UserCodeEnum.USERID_WRONG.getMsg(), null);
+// }
+// if (!PubUtils.patternPasswordPhone(XssFilterUtil.dealString(password))) {
+// return PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.PASSWORD_WRONG.getCode(), UserCodeEnum.PASSWORD_WRONG.getMsg(), null);
+// }
+// if (StringUtils.isBlank(devCode)) {
+// return PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.DEVCODE_WRONG.getCode(), UserCodeEnum.DEVCODE_WRONG.getMsg(), null);
+// }
+// logger.info("controller更新手机id:" + devCode);
+// try {
+// devCode = AESUtil.aesPKCS5PaddingDecrypt(devCode);
+// appUserService.setPsd(userId, devCode, password);
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_SUCCESS, UserCodeEnum.SETPWD_SUCCESS.getCode(), UserCodeEnum.SETPWD_SUCCESS.getMsg(), null);
+// } catch (Exception e) {
+// logger.error("app用户设置密码异常:" + e.toString());
+// if (e.getMessage().length() < 10) {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.getCodeByMsg(e.getMessage()), e.getMessage(), null);
+// } else {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.SETPWD_FAIL.getCode(), UserCodeEnum.SETPWD_FAIL.getMsg(), null);
+// }
+// }
+// return responseData;
+// }
+//
+//
+// /**
+// * 手机app登录入口
+// */
+// @PostMapping("login")
+// @ApiImplicitParams({
+// @ApiImplicitParam(name = "phone", value = "手机号", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "type", value = "登录类型", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "key", value = "验证码/密码", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "devCode", value = "设备码", required = true, paramType = "query"),
+// })
+// @ApiOperation(value = "登录入口", notes = "APP登录", response = ResponseData.class)
+// public ResponseData login(String phone, String type, String key, String devCode, HttpServletRequest request) {
+// ResponseData responseData;
+// //参数校验
+// if (!PubUtils.patternPhone(XssFilterUtil.dealString(phone))) {
+// return PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.PHONE_WRONG.getCode(), UserCodeEnum.PHONE_WRONG.getMsg(), null);
+// }
+// if (StringUtils.isBlank(key)) {
+// return PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.KEY_WRONG.getCode(), UserCodeEnum.KEY_WRONG.getMsg(), null);
+// }
+// if (StringUtils.isBlank(devCode)) {
+// return PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.DEVCODE_WRONG.getCode(), UserCodeEnum.DEVCODE_WRONG.getMsg(), null);
+// }
+// UserResult userResult = new UserResult();
+// logger.info("controller更新手机id:" + devCode);
+// try {
+// devCode = AESUtil.aesPKCS5PaddingDecrypt(devCode);
+// TokenManager.appLogin(phone, type, key, devCode, ProjectEnum.APP.getItem());
+// AppUser appUser = (AppUser) SecurityUtils.getSubject().getPrincipal();
+// userResult.setPhone(appUser.getPhone());
+// userResult.setRoleCode(appUser.getUserLevel());
+// userResult.setUserName(StringUtils.isEmpty(appUser.getName()) ? null : appUser.getName());
+// userResult.setRoleName(UserLevelEnum.getMsgByCode(appUser.getUserLevel()));
+// userResult.setUserId(appUser.getUserIndex());
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_SUCCESS, UserCodeEnum.LOGIN_SUCCESS.getCode(), UserCodeEnum.LOGIN_SUCCESS.getMsg(), userResult);
+// } catch (Exception e) {
+// logger.error("app用户登录异常:" + e.toString());
+// if (e.getMessage().length() < 10) {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.getCodeByMsg(e.getMessage()), e.getMessage(), null);
+// } else {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.LOGIN_FAIL.getCode(), UserCodeEnum.LOGIN_FAIL.getMsg(), null);
+// }
+// }
+// return responseData;
+// }
+//
+// /**
+// * 手机app忘记密码-重置密码
+// */
+// @PostMapping("resetPsd")
+// @ApiImplicitParams({
+// @ApiImplicitParam(name = "phone", value = "手机号", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "code", value = "验证码", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "password", value = "密码", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "devCode", value = "设备码", required = true, paramType = "query"),
+// })
+// @ApiOperation(value = "重置密码", notes = "重置密码", response = ResponseData.class)
+// public ResponseData resetPsd(String phone, String code, String password, String devCode) {
+// ResponseData responseData;
+// //参数校验
+// if (!PubUtils.patternPhone(XssFilterUtil.dealString(phone))) {
+// return PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.PHONE_WRONG.getCode(), UserCodeEnum.PHONE_WRONG.getMsg(), null);
+// }
+// if (!PubUtils.patternPasswordPhone(XssFilterUtil.dealString(password))) {
+// return PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.PASSWORD_WRONG.getCode(), UserCodeEnum.PASSWORD_WRONG.getMsg(), null);
+// }
+// logger.info("controller更新手机id:" + devCode);
+// try {
+// devCode = AESUtil.aesPKCS5PaddingDecrypt(devCode);
+// appUserService.resetPsd(phone, code, password, devCode);
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_SUCCESS, UserCodeEnum.RESETPWD_SUCCESS.getCode(), UserCodeEnum.RESETPWD_SUCCESS.getMsg(), null);
+// } catch (Exception e) {
+// logger.error("忘记密码重置密码异常:" + e.toString());
+// if (e.getMessage().length() < 10) {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.getCodeByMsg(e.getMessage()), e.getMessage(), null);
+// } else {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.RESETPWD_FAIL.getCode(), UserCodeEnum.RESETPWD_FAIL.getMsg(), null);
+// }
+// }
+// return responseData;
+// }
+//
+//
+// /**
+// * 手机app已登录修改密码
+// */
+// @PostMapping("modifyPsd")
+// @ApiImplicitParams({
+// @ApiImplicitParam(name = "userId", value = "用户ID", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "phone", value = "手机号", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "code", value = "验证码", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "password", value = "密码", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "devCode", value = "设备码", required = true, paramType = "query"),
+// })
+// @ApiOperation(value = "修改密码", notes = "修改密码", response = ResponseData.class)
+// public ResponseData modifyPsd(String userId, String phone, String code, String password, String devCode) {
+// ResponseData responseData;
+// //参数校验
+// if (!PubUtils.patternPasswordPhone(XssFilterUtil.dealString(password))) {
+// return PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.PASSWORD_WRONG.getCode(), UserCodeEnum.PASSWORD_WRONG.getMsg(), null);
+// }
+// logger.info("controller更新手机id:" + devCode);
+// try {
+// devCode = AESUtil.aesPKCS5PaddingDecrypt(devCode);
+// appUserService.modifyPsd(userId, phone, code, password, devCode);
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_SUCCESS, UserCodeEnum.RESETPWD_SUCCESS.getCode(), UserCodeEnum.RESETPWD_SUCCESS.getMsg(), null);
+// } catch (Exception e) {
+// logger.error("修改密码异常:" + e.toString());
+// if (e.getMessage().length() < 10) {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.getCodeByMsg(e.getMessage()), e.getMessage(), null);
+// } else {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.RESETPWD_FAIL.getCode(), UserCodeEnum.RESETPWD_FAIL.getMsg(), null);
+// }
+// }
+// return responseData;
+// }
+//
+//
+// /**
+// * 手机app角色升级
+// */
+// @PostMapping("roleUpdate")
+// @ApiImplicitParams({
+// @ApiImplicitParam(name = "userId", value = "用户ID", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "referralCode", value = "推荐码", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "devCode", value = "设备码", required = true, paramType = "query"),
+// })
+// @ApiOperation(value = "角色升级", notes = "角色升级", response = ResponseData.class)
+// public ResponseData roleUpdate(String userId, String referralCode, String devCode) {
+// ResponseData responseData;
+// //参数校验
+// if (StringUtils.isEmpty(referralCode)) {
+// return PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.REFERRAL_CODE_ERROR.getCode(), UserCodeEnum.REFERRAL_CODE_ERROR.getMsg(), null);
+// }
+// logger.info("controller更新手机id:" + devCode);
+// UserResult userResult;
+// try {
+// devCode = AESUtil.aesPKCS5PaddingDecrypt(devCode);
+// userResult = appUserService.roleUpdate(userId, referralCode, devCode);
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_SUCCESS, UserCodeEnum.UPDATE_ROLE_SUCCESS.getCode(), UserCodeEnum.UPDATE_ROLE_SUCCESS.getMsg(), userResult);
+// } catch (Exception e) {
+// logger.error("角色升级异常:" + e.toString());
+// if (e.getMessage().length() < 10) {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.getCodeByMsg(e.getMessage()), e.getMessage(), null);
+// } else {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.UPDATE_ROLE_FAIL.getCode(), UserCodeEnum.UPDATE_ROLE_FAIL.getMsg(), null);
+// }
+// }
+// return responseData;
+// }
+//
+// /**
+// * 手机app确认旧手机验证码
+// */
+// @PostMapping("comfirmCode")
+// @ApiImplicitParams({
+// @ApiImplicitParam(name = "phone", value = "手机号码号码", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "code", value = "短信验证码", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "devCode", value = "设备码", required = true, paramType = "query"),
+// })
+// @ApiOperation(value = "确认旧手机验证码", notes = "确认旧手机验证码", response = ResponseData.class)
+// public ResponseData comfirmCode(String phone, String devCode, String code) {
+// ResponseData responseData;
+// //参数校验
+// if (!PubUtils.patternPhone(XssFilterUtil.dealString(phone))) {
+// return PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.PHONE_WRONG.getCode(), UserCodeEnum.PHONE_WRONG.getMsg(), null);
+// }
+// if (StringUtils.isBlank(devCode)) {
+// return PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.DEVCODE_WRONG.getCode(), UserCodeEnum.DEVCODE_WRONG.getMsg(), null);
+// }
+// logger.info("controller更新手机id:" + devCode);
+// try {
+// devCode = AESUtil.aesPKCS5PaddingDecrypt(devCode);
+// appUserService.comfirmCode(phone, devCode, code);
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_SUCCESS, UserCodeEnum.MESSAGE_CODE_RIGHT.getCode(), UserCodeEnum.MESSAGE_CODE_RIGHT.getMsg(), null);
+// } catch (Exception e) {
+// logger.error("确认旧手机验证码异常:" + e.toString());
+// if (e.getMessage().length() < 10) {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.getCodeByMsg(e.getMessage()), e.getMessage(), null);
+// } else {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.MESSAGE_CODE_WRONG.getCode(), UserCodeEnum.MESSAGE_CODE_WRONG.getMsg(), null);
+// }
+// }
+// return responseData;
+// }
+//
+//
+// /**
+// * 手机app重新绑定手机号
+// */
+// @PostMapping("rebindPhone")
+// @ApiImplicitParams({
+// @ApiImplicitParam(name = "userId", value = "用户ID", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "phoneNew", value = "新号码", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "code", value = "短信验证码", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "devCode", value = "设备码", required = true, paramType = "query"),
+// })
+// @ApiOperation(value = "重新绑定手机号", notes = "重新绑定手机号", response = ResponseData.class)
+// public ResponseData rebindPhone(String userId, String phoneNew, String devCode, String code) {
+// ResponseData responseData;
+// //参数校验
+// if (!PubUtils.patternPhone(XssFilterUtil.dealString(phoneNew))) {
+// return PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.PHONE_WRONG.getCode(), UserCodeEnum.PHONE_WRONG.getMsg(), null);
+// }
+// if (StringUtils.isBlank(devCode)) {
+// return PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.DEVCODE_WRONG.getCode(), UserCodeEnum.DEVCODE_WRONG.getMsg(), null);
+// }
+// try {
+// devCode = AESUtil.aesPKCS5PaddingDecrypt(devCode);
+// appUserService.rebindPhone(userId, phoneNew, devCode, code);
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_SUCCESS, UserCodeEnum.REST_PHONE_SUCCESS.getCode(), UserCodeEnum.REST_PHONE_SUCCESS.getMsg(), null);
+// } catch (Exception e) {
+// logger.error("重新绑定手机号异常:" + e.toString());
+// if (e.getMessage().length() < 10) {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.getCodeByMsg(e.getMessage()), e.getMessage(), null);
+// } else {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.REST_PHONE_FAIL.getCode(), UserCodeEnum.REST_PHONE_FAIL.getMsg(), null);
+// }
+// }
+// return responseData;
+// }
+//
+//
+// /**
+// * 手机app用户实时消息配置
+// */
+// @PostMapping("msgSet")
+// @ApiImplicitParams({
+// @ApiImplicitParam(name = "userId", value = "用户ID", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "eventInfo", value = "暂态消息模块", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "targetInfo", value = "稳态消息模块", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "deviceInfo", value = "终端消息模块", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "systemInfo", value = "系统消息消息模块", required = true, paramType = "query"),
+// })
+// @ApiOperation(value = "用户实时消息配置", notes = "用户实时消息配置", response = ResponseData.class)
+// public ResponseData msgSet(String userId, String eventInfo, String targetInfo, String deviceInfo, String systemInfo) {
+// ResponseData responseData;
+// try {
+// appUserService.msgSet(userId, eventInfo, targetInfo, deviceInfo, systemInfo);
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_SUCCESS, UserCodeEnum.SET_INFO_SUCCESS.getCode(), UserCodeEnum.SET_INFO_SUCCESS.getMsg(), null);
+// } catch (Exception e) {
+// logger.error("用户实时消息配置异常:" + e.toString());
+// if (e.getMessage().length() < 10) {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.getCodeByMsg(e.getMessage()), e.getMessage(), null);
+// } else {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.SET_INFO_FAIL.getCode(), UserCodeEnum.SET_INFO_FAIL.getMsg(), null);
+// }
+// }
+// return responseData;
+// }
+//
+// /**
+// * 手机app用户获取消息配置
+// */
+// @PostMapping("getMsg")
+// @ApiImplicitParams({
+// @ApiImplicitParam(name = "userId", value = "用户ID", required = true, paramType = "query"),
+// @ApiImplicitParam(name = "devCode", value = "设备ID", required = true, paramType = "query"),
+// })
+// @ApiOperation(value = "用户获取消息配置", notes = "用户获取消息配置", response = ResponseData.class)
+// public ResponseData getMsg(String userId, String devCode) {
+// ResponseData responseData;
+// MessageResult messageResult;
+// try {
+// devCode = AESUtil.aesPKCS5PaddingDecrypt(devCode);
+// messageResult = appUserService.getMsg(userId, devCode);
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_SUCCESS, UserCodeEnum.GET_MESSAGE_SUCCESS.getCode(), UserCodeEnum.GET_MESSAGE_SUCCESS.getMsg(), messageResult);
+// } catch (Exception e) {
+// logger.error("用户获取消息配置异常:" + e.toString());
+// if (e.getMessage().length() < 10) {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.getCodeByMsg(e.getMessage()), e.getMessage(), null);
+// } else {
+// responseData = PubUtils.assignmentAppResponse(ReturnCode.RETURN_FAIL, UserCodeEnum.GET_MESSAGE_FAIL.getCode(), UserCodeEnum.GET_MESSAGE_FAIL.getMsg(), null);
+// }
+// }
+// return responseData;
+// }
+
+
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppEventInfoMapper.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppEventInfoMapper.java
new file mode 100644
index 0000000..2d7f787
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppEventInfoMapper.java
@@ -0,0 +1,68 @@
+package com.njcn.cloud.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.njcn.cloud.pojo.dto.AppEventInfo;
+import com.njcn.cloud.pojo.dto.RMpEventDetail;
+import com.njcn.cloud.pojo.vo.EventInfoDetailVO;
+import com.njcn.cloud.pojo.vo.EventWaveDetailVO;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ *
+ * 暂态消息详情 Mapper 接口
+ *
+ *
+ * @author wr
+ * @since 2023-11-01
+ */
+public interface AppEventInfoMapper extends BaseMapper {
+
+ /**
+ * @Description: 暂态事件基本信息(暂态消息id)
+ * @param id
+ * @return: com.njcn.cloud.pojo.vo.EventInfoDetailVO
+ * @Author: wr
+ * @Date: 2023/11/1 14:43
+ */
+ EventInfoDetailVO selectEventInfoDetailByID(@Param("id") String id);
+
+ /**
+ * @Description: 获取监测点相别
+ * @param id 暂降事件id
+ * @return: java.lang.Integer
+ * @Author: wr
+ * @Date: 2023/11/1 14:45
+ */
+ Integer getLinePtType(@Param("id") String id);
+
+ /**
+ * @Description: 获取波形路径
+ * @param eventId 暂降事件id
+ * @return: java.lang.String
+ * @Author: wr
+ * @Date: 2023/11/1 15:55
+ */
+ EventWaveDetailVO.Detail selectWavePath(@Param("id")String eventId);
+
+ /**
+ * @Description: 获取暂态信息
+ * @param id
+ * @return: com.njcn.cloud.pojo.vo.EventInfoDetailVO
+ * @Author: wr
+ * @Date: 2023/11/1 14:43
+ */
+ RMpEventDetail selectByID(@Param("id") String id);
+
+
+ /**
+ * @Description: 暂态事件基本信息(暂态事件id)
+ * @param id
+ * @return: com.njcn.cloud.pojo.vo.EventInfoDetailVO
+ * @Author: wr
+ * @Date: 2023/11/1 14:43
+ */
+ EventInfoDetailVO selectEventDetailByID(@Param("id") String id);
+
+
+
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppEventMsgMapper.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppEventMsgMapper.java
new file mode 100644
index 0000000..089a8a0
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppEventMsgMapper.java
@@ -0,0 +1,33 @@
+package com.njcn.cloud.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.njcn.cloud.pojo.dto.AppEventMsg;
+import com.njcn.cloud.pojo.vo.EventMsgDetailVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ *
+ * app暂态消息表 Mapper 接口
+ *
+ *
+ * @author wr
+ * @since 2023-10-31
+ */
+public interface AppEventMsgMapper extends BaseMapper {
+
+ /**
+ * @Description: 获取暂态信息
+ * @param page
+ * @param ids
+ * @param userIndex
+ * @return: com.baomidou.mybatisplus.extension.plugins.pagination.Page
+ * @Author: wr
+ * @Date: 2023/11/1 10:21
+ */
+ Page selectEventMsgPage(Page page,
+ @Param("ids") List ids,
+ @Param("userIndex") String userIndex);
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppReportMapper.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppReportMapper.java
new file mode 100644
index 0000000..a697418
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppReportMapper.java
@@ -0,0 +1,16 @@
+package com.njcn.cloud.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.njcn.cloud.pojo.dto.AppReport;
+
+/**
+ *
+ * 报告信息 Mapper 接口
+ *
+ *
+ * @author wr
+ * @since 2023-11-02
+ */
+public interface AppReportMapper extends BaseMapper {
+
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppSendMsgMapper.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppSendMsgMapper.java
new file mode 100644
index 0000000..530c9d4
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppSendMsgMapper.java
@@ -0,0 +1,16 @@
+package com.njcn.cloud.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.njcn.cloud.pojo.dto.AppSendMsg;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author wr
+ * @since 2023-10-31
+ */
+public interface AppSendMsgMapper extends BaseMapper {
+
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppSteadyAssMapper.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppSteadyAssMapper.java
new file mode 100644
index 0000000..f7355c6
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppSteadyAssMapper.java
@@ -0,0 +1,16 @@
+package com.njcn.cloud.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.njcn.cloud.pojo.dto.AppSteadyAss;
+
+/**
+ *
+ * 稳态消息详情 Mapper 接口
+ *
+ *
+ * @author wr
+ * @since 2023-11-03
+ */
+public interface AppSteadyAssMapper extends BaseMapper {
+
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppSteadyMsgMapper.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppSteadyMsgMapper.java
new file mode 100644
index 0000000..c4d6426
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppSteadyMsgMapper.java
@@ -0,0 +1,16 @@
+package com.njcn.cloud.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.njcn.cloud.pojo.dto.AppSteadyMsg;
+
+/**
+ *
+ * 稳态消息 Mapper 接口
+ *
+ *
+ * @author wr
+ * @since 2023-11-03
+ */
+public interface AppSteadyMsgMapper extends BaseMapper {
+
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppSteadyUrlMapper.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppSteadyUrlMapper.java
new file mode 100644
index 0000000..c6c3c0d
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppSteadyUrlMapper.java
@@ -0,0 +1,16 @@
+package com.njcn.cloud.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.njcn.cloud.pojo.dto.AppSteadyUrl;
+
+/**
+ *
+ * 稳态图形信息 Mapper 接口
+ *
+ *
+ * @author wr
+ * @since 2023-11-03
+ */
+public interface AppSteadyUrlMapper extends BaseMapper {
+
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppUserMapper.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppUserMapper.java
new file mode 100644
index 0000000..0a71a2b
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/AppUserMapper.java
@@ -0,0 +1,39 @@
+package com.njcn.cloud.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.njcn.cloud.pojo.dto.AppUser;
+import com.njcn.cloud.pojo.dto.DeptLine;
+import com.njcn.user.pojo.po.User;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author wr
+ * @since 2023-10-31
+ */
+public interface AppUserMapper extends BaseMapper {
+
+ /**
+ * @Description: 根据app用户id获取app所管理的用户信息
+ * @param appUserID
+ * @return: com.njcn.user.pojo.po.User
+ * @Author: wr
+ * @Date: 2023/11/1 10:13
+ */
+ User getUserAndApp(@Param("userIndex") String appUserID);
+
+
+ /**
+ * @Description: 部门监测点关系表
+ * @param deptID
+ * @return: java.util.List
+ * @Author: wr
+ * @Date: 2023/11/1 10:33
+ */
+ List getUserLine(@Param("deptID") String deptID);
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/LineMapper.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/LineMapper.java
new file mode 100644
index 0000000..ba591c2
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/LineMapper.java
@@ -0,0 +1,23 @@
+package com.njcn.cloud.mapper;
+
+
+import com.njcn.cloud.pojo.vo.LineDetailVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @Description: 监测点信息
+ * @Author: wr
+ * @Date: 2023/11/3 14:38
+ */
+public interface LineMapper {
+
+ /**
+ * @Description: 获取监测点集合信息
+ * @Author: wr
+ * @Date: 2023/11/3 14:37
+ */
+ List selectByIds(@Param("ids") List ids);
+
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppEventInfoMapper.xml b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppEventInfoMapper.xml
new file mode 100644
index 0000000..b32a7bc
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppEventInfoMapper.xml
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppEventMsgMapper.xml b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppEventMsgMapper.xml
new file mode 100644
index 0000000..41f56e7
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppEventMsgMapper.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppReportMapper.xml b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppReportMapper.xml
new file mode 100644
index 0000000..4ec7749
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppReportMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppSendMsgMapper.xml b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppSendMsgMapper.xml
new file mode 100644
index 0000000..737d501
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppSendMsgMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppSteadyAssMapper.xml b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppSteadyAssMapper.xml
new file mode 100644
index 0000000..d8e3a01
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppSteadyAssMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppSteadyMsgMapper.xml b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppSteadyMsgMapper.xml
new file mode 100644
index 0000000..b1a153a
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppSteadyMsgMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppSteadyUrlMapper.xml b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppSteadyUrlMapper.xml
new file mode 100644
index 0000000..923d89b
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppSteadyUrlMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppUserMapper.xml b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppUserMapper.xml
new file mode 100644
index 0000000..c22370c
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/AppUserMapper.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/LineMapper.xml b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/LineMapper.xml
new file mode 100644
index 0000000..c5a70e0
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/mapper/mapping/LineMapper.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppEventInfoServiceImpl.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppEventInfoServiceImpl.java
new file mode 100644
index 0000000..293bd81
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppEventInfoServiceImpl.java
@@ -0,0 +1,161 @@
+package com.njcn.cloud.service.impl.user;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.njcn.advance.api.EventWaveAnalysisFeignClient;
+import com.njcn.advance.pojo.dto.waveAnalysis.EntityAdvancedData;
+import com.njcn.cloud.mapper.AppEventInfoMapper;
+import com.njcn.cloud.pojo.dto.AppEventInfo;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.njcn.cloud.pojo.vo.EventEigDetailVO;
+import com.njcn.cloud.pojo.vo.EventWaveDetailVO;
+import com.njcn.cloud.service.user.IAppEventInfoService;
+import com.njcn.common.pojo.exception.BusinessException;
+import com.njcn.common.utils.PubUtils;
+import com.njcn.event.file.component.WaveFileComponent;
+import com.njcn.event.file.component.WavePicComponent;
+import com.njcn.event.file.pojo.bo.WaveDataDetail;
+import com.njcn.event.file.pojo.dto.WaveDataDTO;
+import com.njcn.event.file.pojo.enums.WaveFileResponseEnum;
+import com.njcn.event.file.utils.WaveUtil;
+import com.njcn.oss.constant.GeneralConstant;
+import com.njcn.oss.constant.OssPath;
+import com.njcn.oss.utils.FileStorageUtil;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ *
+ * 暂态消息详情 服务实现类
+ *
+ *
+ * @author wr
+ * @since 2023-11-01
+ */
+@Service
+@RequiredArgsConstructor
+public class AppEventInfoServiceImpl extends ServiceImpl implements IAppEventInfoService {
+
+ private final EventWaveAnalysisFeignClient eventWaveAnalysisFeignClient;
+ private final FileStorageUtil fileStorageUtil;
+ private final WaveFileComponent waveFileComponent;
+ private final WavePicComponent wavePicComponent;
+ @Override
+ public EventEigDetailVO.Detail eventDetailEigenvalue(String eventDetailIndex) {
+ EventEigDetailVO.Detail detail=new EventEigDetailVO.Detail();
+
+ List eventInfoDetails = new ArrayList<>();
+ EntityAdvancedData entityAdvancedData = eventWaveAnalysisFeignClient.analysis(eventDetailIndex).getData();
+
+ //根据事件获取监测点接线方式
+ Integer ptType = this.getBaseMapper().getLinePtType(eventDetailIndex);
+ if (entityAdvancedData.backNumber != -1) {
+ detail.setBackNumber( entityAdvancedData.backNumber);
+ for (int i = 0; i < entityAdvancedData.backNumber; i++) {
+ EventEigDetailVO eventEigDetail = new EventEigDetailVO();
+ eventEigDetail.setHold_time_dq(entityAdvancedData.evt_buf[i].hold_time_dq * 1000);
+ eventEigDetail.setPow_a(PubUtils.floatRound(2, entityAdvancedData.evt_buf[i].POW_a));
+ eventEigDetail.setPow_b(PubUtils.floatRound(2, entityAdvancedData.evt_buf[i].POW_b));
+ eventEigDetail.setPow_c(PubUtils.floatRound(2, entityAdvancedData.evt_buf[i].POW_c));
+
+ eventEigDetail.setVoltagechange_Va(PubUtils.floatRound(2, entityAdvancedData.evt_buf[i].Voltagechange_Va / 1000));
+ eventEigDetail.setVoltagechange_Vb(PubUtils.floatRound(2, entityAdvancedData.evt_buf[i].Voltagechange_Vb / 1000));
+ eventEigDetail.setVoltagechange_Vc(PubUtils.floatRound(2, entityAdvancedData.evt_buf[i].Voltagechange_Vc / 1000));
+
+
+ eventEigDetail.setUa_min(PubUtils.floatRound(2, entityAdvancedData.evt_buf[i].ua_min[0]));
+ eventEigDetail.setUb_min(PubUtils.floatRound(2, entityAdvancedData.evt_buf[i].ub_min[0]));
+ eventEigDetail.setUc_min(PubUtils.floatRound(2, entityAdvancedData.evt_buf[i].ua_min[0]));
+
+ eventEigDetail.setAngle_diff_ap(PubUtils.floatRound(2, entityAdvancedData.evt_buf[i].angle_diff_ap[0]));
+ eventEigDetail.setAngle_diff_bp(PubUtils.floatRound(2, entityAdvancedData.evt_buf[i].angle_diff_bp[0]));
+ eventEigDetail.setAngle_diff_cp(PubUtils.floatRound(2, entityAdvancedData.evt_buf[i].angle_diff_cp[0]));
+
+ eventEigDetail.setBph_max_value(PubUtils.floatRound(2, entityAdvancedData.evt_buf[i].bph_max_value[0]));
+ eventEigDetail.setSagReason(entityAdvancedData.sagReason[0]);//暂降原因,暂降原因都一样
+ eventEigDetail.setSagType(entityAdvancedData.sagType[i]);//暂降类型
+ eventInfoDetails.add(eventEigDetail);
+ eventEigDetail.setPttype(ptType);
+ }
+ } else {
+ detail.setBackNumber(0);
+ }
+ detail.setList(eventInfoDetails);
+ return detail;
+ }
+
+ @Override
+ @Transactional(rollbackFor = {Exception.class})
+ public EventWaveDetailVO eventDetailWave(String eventDetailIndex) {
+ EventWaveDetailVO vo =new EventWaveDetailVO();
+ AppEventInfo byId = this.getById(eventDetailIndex);
+ vo.setEventDetailIndex(byId.getEventdetailIndex());
+ if(StrUtil.isBlank(byId.getInstantwavePath())){
+ //获取波形数据。然后绘图
+ WaveDataDTO waveDataDTO = this.analyseWave(eventDetailIndex, 2);
+ //数据筛选,如果是双路电压的话,会存在2个波形数据
+ List waveDataDetails = WaveUtil.filterWaveData(waveDataDTO);
+ String instantPath = wavePicComponent.generateImageShun(waveDataDTO,waveDataDetails);
+ byId.setInstantwavePath(instantPath);
+ if (StrUtil.isBlank(byId.getRmswavePath())) {
+ String rmsPath = wavePicComponent.generateImageRms(waveDataDTO,waveDataDetails);
+ byId.setRmswavePath(rmsPath);
+ }
+ this.updateById(byId);
+ }
+ vo.setInstantWaveUrl(byId.getInstantwavePath());
+ vo.setRmsWaveUrl(byId.getRmswavePath());
+ return vo;
+ }
+
+ @Override
+ @Transactional(rollbackFor = {Exception.class})
+ public Boolean eventDetailEvaluate(String eventDetailIndex, Integer evaluate, String userId) {
+ boolean fly = this.update(new LambdaUpdateWrapper()
+ .set(AppEventInfo::getEvaluate, evaluate)
+ .set(AppEventInfo::getUserIndex, userId)
+ .eq(AppEventInfo::getEventdetailIndex, eventDetailIndex)
+ );
+ return fly;
+ }
+
+ /**
+ * @Description: 获取波形数据
+ * @return: com.njcn.event.file.pojo.dto.WaveDataDTO
+ * @Author: wr
+ * @Date: 2023/11/1 15:51
+ */
+ @Override
+ public WaveDataDTO analyseWave(String eventId, int iType) {
+ WaveDataDTO waveDataDTO;
+ //获取暂降事件
+ EventWaveDetailVO.Detail eventDetail = this.baseMapper.selectWavePath(eventId);
+ String waveName = eventDetail.getWavePath();
+ if (StrUtil.isBlank(waveName)) {
+ throw new BusinessException(WaveFileResponseEnum.ANALYSE_WAVE_NOT_FOUND);
+ }
+ try (
+ InputStream cfgStream = fileStorageUtil.getFileStream(OssPath.WAVE_DIR + eventDetail.getIp() + StrUtil.SLASH + waveName + GeneralConstant.CFG);
+ InputStream datStream = fileStorageUtil.getFileStream(OssPath.WAVE_DIR + eventDetail.getIp() + StrUtil.SLASH + waveName + GeneralConstant.DAT)
+ ) {
+ if (Objects.isNull(cfgStream) || Objects.isNull(datStream)) {
+ throw new BusinessException(WaveFileResponseEnum.ANALYSE_WAVE_NOT_FOUND);
+ }
+ waveDataDTO = waveFileComponent.getComtrade(cfgStream, datStream, iType);
+ } catch (Exception e) {
+ throw new BusinessException(WaveFileResponseEnum.WAVE_DATA_INVALID);
+ }
+ waveDataDTO = waveFileComponent.getValidData(waveDataDTO);
+ waveDataDTO.setPtType(eventDetail.getPtType());
+ waveDataDTO.setPt(eventDetail.getPt());
+ waveDataDTO.setCt(eventDetail.getCt());
+ waveDataDTO.setMonitorName(eventDetail.getMeasurementPointName());
+ return waveDataDTO;
+ }
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppEventMsgServiceImpl.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppEventMsgServiceImpl.java
new file mode 100644
index 0000000..0574b4e
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppEventMsgServiceImpl.java
@@ -0,0 +1,67 @@
+package com.njcn.cloud.service.impl.user;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.njcn.cloud.enums.app.UserCodeEnum;
+import com.njcn.cloud.mapper.AppEventInfoMapper;
+import com.njcn.cloud.mapper.AppEventMsgMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.njcn.cloud.mapper.AppUserMapper;
+import com.njcn.cloud.pojo.dto.AppEventMsg;
+import com.njcn.cloud.pojo.dto.DeptLine;
+import com.njcn.cloud.pojo.vo.EventInfoDetailVO;
+import com.njcn.cloud.pojo.vo.EventMsgDetailVO;
+import com.njcn.cloud.service.user.IAppEventMsgService;
+import com.njcn.common.pojo.exception.BusinessException;
+import com.njcn.user.pojo.po.User;
+import com.njcn.web.pojo.param.BaseParam;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * app暂态消息表 服务实现类
+ *
+ *
+ * @author wr
+ * @since 2023-10-31
+ */
+@Service
+@RequiredArgsConstructor
+public class AppEventMsgServiceImpl extends ServiceImpl implements IAppEventMsgService {
+
+ private final AppUserMapper appUserMapper;
+ private final AppEventInfoMapper appEventInfoMapper;
+ @Override
+ public Page eventMsgPage(BaseParam param) {
+ String searchValue = param.getSearchValue();
+ //根据用户id获取用户部门
+ //todo 用户id
+ User userAndApp = appUserMapper.getUserAndApp(param.getSearchValue());
+ if(ObjectUtil.isNull(userAndApp)){
+ throw new BusinessException(UserCodeEnum.NO_USER.getMsg());
+ }
+ //根据所查询的部门查询出是部门下监测点信息
+ List userLine = appUserMapper.getUserLine(userAndApp.getDeptId());
+ List ids = userLine.stream().map(DeptLine::getLineId).collect(Collectors.toList());
+ ids.add("2ec9ef4a375b249abc5314e6b7461cab");
+ return this.getBaseMapper().selectEventMsgPage(new Page<>(param.getPageNum(),param.getPageSize()),ids,searchValue);
+ }
+
+ @Override
+ @Transactional(rollbackFor = {Exception.class})
+ public EventInfoDetailVO eventInfoDetail(String id) {
+ EventInfoDetailVO eventInfoDetailVO = appEventInfoMapper.selectEventInfoDetailByID(id);
+ this.update(new LambdaUpdateWrapper()
+ .set(AppEventMsg::getState,1)
+ .eq(AppEventMsg::getEventmsgIndex,id)
+
+ );
+ return eventInfoDetailVO;
+ }
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppReportServiceImpl.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppReportServiceImpl.java
new file mode 100644
index 0000000..117f7a7
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppReportServiceImpl.java
@@ -0,0 +1,166 @@
+package com.njcn.cloud.service.impl.user;
+
+import cn.hutool.core.codec.Base64;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.njcn.cloud.enums.app.EventMsgCodeEnum;
+import com.njcn.cloud.mapper.AppEventInfoMapper;
+import com.njcn.cloud.mapper.AppReportMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.njcn.cloud.pojo.dto.AppEventInfo;
+import com.njcn.cloud.pojo.dto.AppReport;
+import com.njcn.cloud.pojo.vo.EventEigDetailVO;
+import com.njcn.cloud.pojo.vo.EventInfoDetailVO;
+import com.njcn.cloud.service.user.IAppEventInfoService;
+import com.njcn.cloud.service.user.IAppReportService;
+import com.njcn.cloud.utils.WordUtil;
+import com.njcn.common.pojo.exception.BusinessException;
+import com.njcn.common.utils.FileUtil;
+import com.njcn.event.file.component.WavePicComponent;
+import com.njcn.event.file.pojo.bo.WaveDataDetail;
+import com.njcn.event.file.pojo.dto.WaveDataDTO;
+import com.njcn.event.file.utils.WaveUtil;
+import com.njcn.oss.constant.OssPath;
+import com.njcn.oss.utils.FileStorageUtil;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.*;
+import java.time.LocalDateTime;
+import java.util.*;
+
+
+/**
+ *
+ * 报告信息 服务实现类
+ *
+ *
+ * @author wr
+ * @since 2023-11-02
+ */
+@Service
+@RequiredArgsConstructor
+public class AppReportServiceImpl extends ServiceImpl implements IAppReportService {
+
+ private final IAppEventInfoService appEventInfoService;
+ private final AppEventInfoMapper appEventInfoMapper;
+ private final WavePicComponent wavePicComponent;
+ private final FileStorageUtil fileStorageUtil;
+
+ @Override
+ @Transactional(rollbackFor = {Exception.class})
+ public String eventDetailReportApply(String userId, String eventDetailIndex) {
+ AppEventInfo info=new AppEventInfo();
+ info.setEventdetailIndex(eventDetailIndex);
+ info.setEvaluate(0);
+ info.setUserIndex(userId);
+ info.setUpdateTime(LocalDateTime.now());
+
+ AppEventInfo one = appEventInfoService.getOne(new LambdaUpdateWrapper()
+ .eq(AppEventInfo::getEventdetailIndex, eventDetailIndex)
+ .ne(AppEventInfo::getReportState, 4)
+ );
+ if (ObjectUtil.isNull(one)||one.getReportState() != 1) {
+ try {
+ if(ObjectUtil.isNull(one)){
+ one=new AppEventInfo();
+ }
+ Map map = this.createEventDetailReport(eventDetailIndex,one);
+ if (map.containsKey("noData")) {
+ return map.get("noData");
+ }
+ info.setInstantwavePath(map.get("instantPath"));
+ info.setRmswavePath(map.get("rmsPath"));
+ info.setReportState(1);
+ info.setReportPath(map.get("reportPath"));
+ appEventInfoService.save(info);
+ return "0";
+ } catch (Exception e) {
+ e.printStackTrace();
+ info.setReportState(2);
+ appEventInfoService.save(info);
+ return "1";
+ }
+ }
+ return "0";
+ }
+
+ @Override
+ public AppEventInfo getDownLoadPath(String userId, String eventDetailIndex) {
+ AppEventInfo one = appEventInfoService.getOne(new LambdaQueryWrapper()
+ .eq(AppEventInfo::getUserIndex, userId)
+ .eq(AppEventInfo::getEventdetailIndex, eventDetailIndex)
+ );
+ if(ObjectUtil.isNull(one)){
+ throw new BusinessException(EventMsgCodeEnum.EVENTDETAILREPORTDOWNLOAD_NOT_FAIL.getMsg());
+ }
+ if(one.getReportState() == 3){
+ throw new BusinessException(EventMsgCodeEnum.EVENTDETAILREPORTDOWNLOAD_ERROR.getMsg());
+ }
+ return one;
+ }
+
+ /**
+ * @Description: 生成报告
+ * @param eventIndex
+ * @return: java.lang.String
+ * @Author: wr
+ * @Date: 2023/11/2 14:44
+ */
+ private Map createEventDetailReport(String eventIndex,AppEventInfo appEventInfo) throws Exception {
+ Map map=new HashMap<>();
+ WaveDataDTO waveData = appEventInfoService.analyseWave(eventIndex, 2);
+
+ if (waveData.getListWaveData().size() == 0) {
+ map.put("noData","2");
+ return map;
+ }
+ //数据筛选,如果是双路电压的话,会存在2个波形数据
+ List waveDataDetails = WaveUtil.filterWaveData(waveData);
+ WordUtil wordUtil = new WordUtil();
+ //获取瞬时波形
+ String instantPath=appEventInfo.getInstantwavePath();
+ if(StrUtil.isBlank(instantPath)){
+ instantPath = wavePicComponent.generateImageShun(waveData,waveDataDetails);
+ }
+ InputStream instantStream = fileStorageUtil.getFileStream(instantPath);
+ String imageShun64 = Base64.encode(instantStream);
+ //获取rms波形
+ String rmsPath =appEventInfo.getRmswavePath();
+ if(StrUtil.isBlank(rmsPath)){
+ rmsPath = wavePicComponent.generateImageRms(waveData,waveDataDetails);
+ }
+ InputStream rmsStream = fileStorageUtil.getFileStream(rmsPath);
+ String rmsShun64 = Base64.encode(rmsStream);
+
+ wordUtil.translate(imageShun64,rmsShun64);
+ List eventDetailEigenvalue =new ArrayList<>();
+ List tmpWaveTitle = waveData.getWaveTitle();
+ int picCounts =(tmpWaveTitle.size()-1)/waveData.getIPhasic();
+ if(picCounts == 3){
+ eventDetailEigenvalue = appEventInfoService.eventDetailEigenvalue(eventIndex).getList();
+
+ }
+ wordUtil.setEventDetailEigenvalue(eventDetailEigenvalue);
+ EventInfoDetailVO eventInfoList = appEventInfoMapper.selectEventDetailByID(eventIndex);
+ wordUtil.setEventInfoList(eventInfoList);
+ wordUtil.createReport();
+
+ //临时缓冲区
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ //创建临时文件
+ wordUtil.getDocument().write(out);
+ byte[] bookByteAry = out.toByteArray();
+ InputStream in = new ByteArrayInputStream(bookByteAry);
+ String reportPath = fileStorageUtil.uploadStream(in, OssPath.RESPONSIBILITY_APP_REPORT,
+ FileUtil.generateFileName("docx")
+ );
+ map.put("instantPath",instantPath);
+ map.put("rmsPath",rmsPath);
+ map.put("reportPath",reportPath);
+ return map;
+ }
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppSendMsgServiceImpl.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppSendMsgServiceImpl.java
new file mode 100644
index 0000000..19b2410
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppSendMsgServiceImpl.java
@@ -0,0 +1,20 @@
+package com.njcn.cloud.service.impl.user;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.njcn.cloud.mapper.AppSendMsgMapper;
+import com.njcn.cloud.pojo.dto.AppSendMsg;
+import com.njcn.cloud.service.user.IAppSendMsgService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 服务实现类
+ *
+ *
+ * @author wr
+ * @since 2023-10-31
+ */
+@Service
+public class AppSendMsgServiceImpl extends ServiceImpl implements IAppSendMsgService {
+
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppSteadyAssServiceImpl.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppSteadyAssServiceImpl.java
new file mode 100644
index 0000000..e669f52
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppSteadyAssServiceImpl.java
@@ -0,0 +1,20 @@
+package com.njcn.cloud.service.impl.user;
+
+import com.njcn.cloud.mapper.AppSteadyAssMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.njcn.cloud.pojo.dto.AppSteadyAss;
+import com.njcn.cloud.service.user.IAppSteadyAssService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 稳态消息详情 服务实现类
+ *
+ *
+ * @author wr
+ * @since 2023-11-03
+ */
+@Service
+public class AppSteadyAssServiceImpl extends ServiceImpl implements IAppSteadyAssService {
+
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppSteadyMsgServiceImpl.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppSteadyMsgServiceImpl.java
new file mode 100644
index 0000000..9d35ac5
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppSteadyMsgServiceImpl.java
@@ -0,0 +1,159 @@
+package com.njcn.cloud.service.impl.user;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.njcn.cloud.enums.app.TypeCodeEnum;
+import com.njcn.cloud.mapper.AppSteadyMsgMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.njcn.cloud.mapper.LineMapper;
+import com.njcn.cloud.pojo.dto.AppSteadyAss;
+import com.njcn.cloud.pojo.dto.AppSteadyMsg;
+import com.njcn.cloud.pojo.dto.AppSteadyUrl;
+import com.njcn.cloud.pojo.vo.AppSteadyMsgVO;
+import com.njcn.cloud.pojo.vo.LineDetailVO;
+import com.njcn.cloud.pojo.vo.SteadyMsgDetailVO;
+import com.njcn.cloud.pojo.vo.SteadyTargetVO;
+import com.njcn.cloud.service.user.IAppSteadyAssService;
+import com.njcn.cloud.service.user.IAppSteadyMsgService;
+import com.njcn.cloud.service.user.IAppSteadyUrlService;
+import com.njcn.web.pojo.param.BaseParam;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 稳态消息 服务实现类
+ *
+ *
+ * @author wr
+ * @since 2023-11-03
+ */
+@Service
+@RequiredArgsConstructor
+public class AppSteadyMsgServiceImpl extends ServiceImpl implements IAppSteadyMsgService {
+
+ private final IAppSteadyAssService appSteadyAssService;
+ private final IAppSteadyUrlService appSteadyUrlService;
+ private final LineMapper lineMapper;
+ @Override
+ public AppSteadyMsgVO getSteadyState(BaseParam param) {
+ AppSteadyMsgVO appSteadyMsgVO=new AppSteadyMsgVO();
+ Page page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), new LambdaQueryWrapper()
+ .eq(AppSteadyMsg::getUserIndex, param.getSearchValue())
+ .orderByDesc(AppSteadyMsg::getTimeId)
+ );
+ int count = this.count(new LambdaQueryWrapper()
+ .eq(AppSteadyMsg::getUserIndex, param.getSearchValue())
+ .eq(AppSteadyMsg::getState, 0)
+
+ );
+ appSteadyMsgVO.setPage(page);
+ appSteadyMsgVO.setUnstate(count);
+ return appSteadyMsgVO;
+ }
+
+ @Override
+ public List getSteadyDetail(String steadyIndex) {
+ //初始化集合
+ List msgDetailList = new ArrayList<>();
+ //获取暂态消息详细信息列表
+ List steadyAssList = appSteadyAssService.list(new LambdaQueryWrapper()
+ .eq(AppSteadyAss::getSteadyIndex, steadyIndex)
+ );
+ if(CollUtil.isEmpty(steadyAssList)){
+ return msgDetailList;
+ }
+ //获取监测点id集合
+ List lineIds = steadyAssList.stream().map(AppSteadyAss::getLineIndex).distinct().collect(Collectors.toList());
+ //获取统计时间集合
+ List times = steadyAssList.stream().map(AppSteadyAss::getTimeId).distinct().collect(Collectors.toList());
+
+ List lineDetail = appSteadyUrlService.list(new LambdaQueryWrapper()
+ .in(AppSteadyUrl::getLineIndex, lineIds)
+ .in(AppSteadyUrl::getTimeId, times)
+ .orderByAsc(AppSteadyUrl::getTypeCode)
+
+ );
+ Map> lineMap = lineDetail.stream()
+ .collect(Collectors.groupingBy(x->x.getLineIndex()+"_"+LocalDateTimeUtil.format(x.getTimeId(), DatePattern.UTC_SIMPLE_MS_PATTERN)));
+ List steadyLineIdList = lineMap.keySet().stream().map(x->x.split("_")[0]).collect(Collectors.toList());
+ List lineDetailVOS = lineMapper.selectByIds(steadyLineIdList);
+ lineMap.forEach((key,value)->{
+ String[] split = key.split("_");
+ List line = lineDetailVOS.stream().filter(x -> x.getLineId().equals(split[0])).collect(Collectors.toList());
+ if(CollUtil.isNotEmpty(line)){
+ SteadyMsgDetailVO detailVO=new SteadyMsgDetailVO();
+ detailVO.setLineName(line.get(0).getLineName());
+ detailVO.setSubName(line.get(0).getSubName());
+ detailVO.setSteadyIndex(steadyIndex);
+ detailVO.setLineIndex(line.get(0).getLineId());
+ detailVO.setTimeId(LocalDateTimeUtil.parse(split[1],DatePattern.UTC_SIMPLE_MS_PATTERN));
+ String describe = "";
+ Integer limitNum = 0;
+ for (AppSteadyUrl appSteadyUrl : value) {
+ String typename = TypeCodeEnum.getMsgByCode(appSteadyUrl.getTypeCode());
+ if(appSteadyUrl.getTypeCode()== 5){
+ describe = describe + typename + appSteadyUrl.getLimitNum() * 120 + "分钟,";
+ }else{
+ describe = describe + typename + appSteadyUrl.getLimitNum() * line.get(0).getTimeInterval() + "分钟,";
+ }
+ limitNum = limitNum + appSteadyUrl.getLimitNum();
+ }
+ if(describe.length() > 0){
+ describe = describe.substring(0, describe.length()-1);
+ }
+ detailVO.setLimitNum(limitNum);
+ detailVO.setDescribe(describe);
+ msgDetailList.add(detailVO);
+ }
+ });
+ this.update(new LambdaUpdateWrapper()
+ .set(AppSteadyMsg::getState,1)
+ .eq(AppSteadyMsg::getState,0)
+ .eq(AppSteadyMsg::getSteadyIndex,steadyIndex)
+ );
+ return msgDetailList;
+ }
+
+ @Override
+ public List getSteadyTarget(String lineIndex, String timeId) {
+ List info=new ArrayList<>();
+ SteadyTargetVO vo;
+ List list = appSteadyUrlService.list(new LambdaQueryWrapper()
+ .eq(AppSteadyUrl::getLineIndex, lineIndex)
+ .eq(AppSteadyUrl::getTimeId, timeId)
+ .orderByAsc(AppSteadyUrl::getTypeCode)
+ );
+ if(CollUtil.isNotEmpty(list)){
+ for (AppSteadyUrl appSteadyUrl : list) {
+ vo=new SteadyTargetVO();
+ vo.setTypeCode(appSteadyUrl.getTypeCode());
+ vo.setTypeName(TypeCodeEnum.getMsgByCode(appSteadyUrl.getTypeCode()));
+ vo.setLimitNum(appSteadyUrl.getLimitNum());
+ info.add(vo);
+ }
+
+ }
+ return info;
+ }
+
+ @Override
+ public AppSteadyUrl getSteadyTargetUrl(String lineIndex, String timeId,Integer typeCode) {
+ AppSteadyUrl one = appSteadyUrlService.getOne(new LambdaQueryWrapper()
+ .eq(AppSteadyUrl::getLineIndex, lineIndex)
+ .eq(AppSteadyUrl::getTimeId, timeId)
+ .eq(AppSteadyUrl::getTypeCode, typeCode)
+ );
+ return one;
+ }
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppSteadyUrlServiceImpl.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppSteadyUrlServiceImpl.java
new file mode 100644
index 0000000..8e553e3
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppSteadyUrlServiceImpl.java
@@ -0,0 +1,20 @@
+package com.njcn.cloud.service.impl.user;
+
+import com.njcn.cloud.mapper.AppSteadyUrlMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.njcn.cloud.pojo.dto.AppSteadyUrl;
+import com.njcn.cloud.service.user.IAppSteadyUrlService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 稳态图形信息 服务实现类
+ *
+ *
+ * @author wr
+ * @since 2023-11-03
+ */
+@Service
+public class AppSteadyUrlServiceImpl extends ServiceImpl implements IAppSteadyUrlService {
+
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppUserServiceImpl.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppUserServiceImpl.java
new file mode 100644
index 0000000..0bcae48
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/impl/user/AppUserServiceImpl.java
@@ -0,0 +1,129 @@
+package com.njcn.cloud.service.impl.user;
+
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.njcn.cloud.mapper.AppUserMapper;
+import com.njcn.cloud.enums.app.UserCodeEnum;
+import com.njcn.cloud.pojo.dto.AppSendMsg;
+import com.njcn.cloud.service.user.IAppSendMsgService;
+import com.njcn.cloud.service.user.IAppUserService;
+import com.njcn.cloud.utils.SmsUtil;
+import com.njcn.common.pojo.constant.PatternRegex;
+import com.njcn.common.pojo.exception.BusinessException;
+import com.njcn.common.utils.PubUtils;
+import com.njcn.redis.pojo.enums.RedisKeyEnum;
+import com.njcn.redis.utils.RedisUtil;
+import com.njcn.user.enums.MessageEnum;
+import com.njcn.user.enums.UserResponseEnum;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import com.njcn.cloud.pojo.dto.AppUser;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.Random;
+
+/**
+ * @author hongawen
+ * @date: 2019/10/17 11:37
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class AppUserServiceImpl extends ServiceImpl implements IAppUserService {
+
+ private final SmsUtil smsUtil;
+ private final RedisUtil redisUtil;
+ private final IAppSendMsgService appSendMsgService;
+
+
+ /**
+ * 发送短信
+ *
+ * @param phone 手机号
+ * @param devCode 设备ID
+ * @param type 短信类型
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void setMessage(String phone, String devCode, String type) {
+ if (!PubUtils.match(PatternRegex.PHONE_REGEX, phone)) {
+ throw new BusinessException(UserResponseEnum.REGISTER_PHONE_WRONG);
+ }
+ String msgTemplate = SmsUtil.getMessageTemplate(type);
+ String vCode = null;
+ SendSmsResponse sendSmsResponse = null;
+
+ //type为4,账号替换为新手机号
+ if (!msgTemplate.equalsIgnoreCase(MessageEnum.REGISTER.getTemplateCode())) {
+ AppUser appUser = this.getOne(new LambdaQueryWrapper()
+ .eq(AppUser::getPhone, phone)
+ .ne(AppUser::getState, 0)
+ );
+ if ("4".equalsIgnoreCase(type)) {
+ //注册,无需判断手机号与设备的匹配
+ if (appUser != null) {
+ throw new BusinessException(UserCodeEnum.REGIST_PHONE_FAIL.getMsg());
+ }
+ } else {
+ if (null == appUser) {
+ throw new BusinessException(UserCodeEnum.NO_USER.getMsg());
+ } else {
+ appUser.setDevCode(devCode);
+ this.updateById(appUser);
+ }
+ }
+ }
+ try {
+ //开始执行短信发送
+ vCode = getMessageCode();
+ sendSmsResponse=new SendSmsResponse();
+ sendSmsResponse.setCode("OK");
+// sendSmsResponse = smsUtil.sendSms(phone, msgTemplate, "code", vCode);
+ String key = RedisKeyEnum.SMS_LOGIN_KEY.getKey() + phone;
+ if (sendSmsResponse.getCode() != null && "OK".equals(sendSmsResponse.getCode())) {
+ //成功发送短信验证码后,保存进redis,验证码失效为5分钟
+ redisUtil.saveByKeyWithExpire(key, vCode, 300L);
+ } else {
+ throw new BusinessException(UserResponseEnum.SEND_CODE_FAIL);
+ }
+ //短信入库
+ addSendMessage(phone, vCode, sendSmsResponse);
+ } catch (Exception e) {
+ log.error("发送短信异常,异常为:" + e.getMessage());
+ //短信入库
+ addSendMessage(phone, vCode, sendSmsResponse);
+ throw new BusinessException(e.getMessage());
+ }
+ }
+
+ /**
+ * 自定义获取验证码,固定为字母和数字的组合
+ */
+ private String getMessageCode() {
+ String result = "";
+ char[] numbers = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
+ //填充数字
+ for (int i = 0; i < 6; i++) {
+ int numberIndex = new Random().nextInt(10);
+ result = result + numbers[numberIndex];
+ }
+ return result;
+ }
+
+ /**
+ * 验证码入库
+ */
+ public void addSendMessage(String phone, String vCode, SendSmsResponse sendSmsResponse) {
+ AppSendMsg appSendMsg = new AppSendMsg();
+ appSendMsg.setPhone(phone);
+ appSendMsg.setMessage(vCode);
+ appSendMsg.setSendTime(LocalDateTime.now());
+ appSendMsg.setSendStatus(sendSmsResponse.getCode() == null ? "无状态" : sendSmsResponse.getCode());
+ appSendMsgService.save(appSendMsg);
+ }
+}
+
+
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppEventInfoService.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppEventInfoService.java
new file mode 100644
index 0000000..3ba9ff6
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppEventInfoService.java
@@ -0,0 +1,59 @@
+package com.njcn.cloud.service.user;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.njcn.cloud.pojo.dto.AppEventInfo;
+import com.njcn.cloud.pojo.vo.EventEigDetailVO;
+import com.njcn.cloud.pojo.vo.EventWaveDetailVO;
+import com.njcn.event.file.pojo.dto.WaveDataDTO;
+
+
+
+/**
+ *
+ * 暂态消息详情 服务类
+ *
+ *
+ * @author wr
+ * @since 2023-11-01
+ */
+public interface IAppEventInfoService extends IService {
+
+ /**
+ * @Description: 暂态事件特征幅值
+ * @param eventDetailIndex
+ * @return: java.util.List
+ * @Author: wr
+ * @Date: 2023/11/1 14:44
+ */
+ EventEigDetailVO.Detail eventDetailEigenvalue(String eventDetailIndex);
+
+ /**
+ * @Description: 暂态事件波形图
+ * @param eventDetailIndex
+ * @return: com.njcn.cloud.pojo.vo.EventWaveDetailVO
+ * @Author: wr
+ * @Date: 2023/11/1 16:28
+ */
+ EventWaveDetailVO eventDetailWave(String eventDetailIndex) ;
+
+ /**
+ * @Description: 暂态评价
+ * @param eventDetailIndex
+ * @param evaluate
+ * @param userId
+ * @return: java.lang.Boolean
+ * @Author: wr
+ * @Date: 2023/11/2 14:45
+ */
+ Boolean eventDetailEvaluate(String eventDetailIndex, Integer evaluate, String userId);
+
+ /**
+ * @Description: 获取波形数据
+ * @param eventId
+ * @param iType
+ * @return: com.njcn.event.file.pojo.dto.WaveDataDTO
+ * @Author: wr
+ * @Date: 2023/11/2 14:46
+ */
+ WaveDataDTO analyseWave(String eventId, int iType);
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppEventMsgService.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppEventMsgService.java
new file mode 100644
index 0000000..328ed3f
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppEventMsgService.java
@@ -0,0 +1,37 @@
+package com.njcn.cloud.service.user;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.njcn.cloud.pojo.dto.AppEventMsg;
+import com.njcn.cloud.pojo.vo.EventInfoDetailVO;
+import com.njcn.cloud.pojo.vo.EventMsgDetailVO;
+import com.njcn.web.pojo.param.BaseParam;
+
+/**
+ *
+ * app暂态消息表 服务类
+ *
+ *
+ * @author wr
+ * @since 2023-10-31
+ */
+public interface IAppEventMsgService extends IService {
+
+ /**
+ * @Description: 暂态消息列表
+ * @param param
+ * @return: com.baomidou.mybatisplus.extension.plugins.pagination.Page
+ * @Author: wr
+ * @Date: 2023/11/1 13:36
+ */
+ Page eventMsgPage(BaseParam param);
+
+ /**
+ * @Description: 暂态事件基本信息
+ * @param id 暂态消息id
+ * @return: com.njcn.cloud.pojo.vo.EventInfoDetailVO
+ * @Author: wr
+ * @Date: 2023/11/1 13:35
+ */
+ EventInfoDetailVO eventInfoDetail(String id);
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppReportService.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppReportService.java
new file mode 100644
index 0000000..6647702
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppReportService.java
@@ -0,0 +1,37 @@
+package com.njcn.cloud.service.user;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.njcn.cloud.pojo.dto.AppEventInfo;
+import com.njcn.cloud.pojo.dto.AppReport;
+
+
+/**
+ *
+ * 报告信息 服务类
+ *
+ *
+ * @author wr
+ * @since 2023-11-02
+ */
+public interface IAppReportService extends IService {
+
+ /**
+ * @Description: 报告申请
+ * @param userId
+ * @param eventDetailIndex
+ * @return: int
+ * @Author: wr
+ * @Date: 2023/11/2 14:38
+ */
+ String eventDetailReportApply(String userId, String eventDetailIndex) throws Exception;
+
+ /**
+ * @Description: 报告下载入口
+ * @param userId
+ * @param eventDetailIndex
+ * @return: com.njcn.cloud.pojo.dto.AppEventInfo
+ * @Author: wr
+ * @Date: 2023/11/3 8:53
+ */
+ AppEventInfo getDownLoadPath(String userId, String eventDetailIndex);
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppSendMsgService.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppSendMsgService.java
new file mode 100644
index 0000000..ccf0721
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppSendMsgService.java
@@ -0,0 +1,16 @@
+package com.njcn.cloud.service.user;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.njcn.cloud.pojo.dto.AppSendMsg;
+
+/**
+ *
+ * 服务类
+ *
+ *
+ * @author wr
+ * @since 2023-10-31
+ */
+public interface IAppSendMsgService extends IService {
+
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppSteadyAssService.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppSteadyAssService.java
new file mode 100644
index 0000000..68cdb36
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppSteadyAssService.java
@@ -0,0 +1,16 @@
+package com.njcn.cloud.service.user;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.njcn.cloud.pojo.dto.AppSteadyAss;
+
+/**
+ *
+ * 稳态消息详情 服务类
+ *
+ *
+ * @author wr
+ * @since 2023-11-03
+ */
+public interface IAppSteadyAssService extends IService {
+
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppSteadyMsgService.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppSteadyMsgService.java
new file mode 100644
index 0000000..036ad9e
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppSteadyMsgService.java
@@ -0,0 +1,62 @@
+package com.njcn.cloud.service.user;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.njcn.cloud.pojo.dto.AppSteadyMsg;
+import com.njcn.cloud.pojo.dto.AppSteadyUrl;
+import com.njcn.cloud.pojo.vo.AppSteadyMsgVO;
+import com.njcn.cloud.pojo.vo.SteadyMsgDetailVO;
+import com.njcn.cloud.pojo.vo.SteadyTargetVO;
+import com.njcn.web.pojo.param.BaseParam;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ * 稳态消息 服务类
+ *
+ *
+ * @author wr
+ * @since 2023-11-03
+ */
+public interface IAppSteadyMsgService extends IService {
+
+ /**
+ * @Description: 稳态越线列表
+ * @param param
+ * @return: com.njcn.cloud.pojo.vo.AppSteadyMsgVO
+ * @Author: wr
+ * @Date: 2023/11/3 9:24
+ */
+ AppSteadyMsgVO getSteadyState(BaseParam param);
+
+ /**
+ * @Description: 稳态越限列表详细信息
+ * @param steadyIndex
+ * @return: java.util.List
+ * @Author: wr
+ * @Date: 2023/11/3 13:40
+ */
+ List getSteadyDetail(String steadyIndex);
+
+ /**
+ * @Description: 获取稳态越限指标
+ * @param lineIndex
+ * @param timeId
+ * @return: java.util.List
+ * @Author: wr
+ * @Date: 2023/11/3 16:08
+ */
+ List getSteadyTarget(String lineIndex, String timeId);
+
+ /**
+ * @Description: 获取稳态越限指标图形
+ * @param lineIndex
+ * @param timeId
+ * @param typeCode
+ * @return: com.njcn.cloud.pojo.dto.AppSteadyUrl
+ * @Author: wr
+ * @Date: 2023/11/3 16:20
+ */
+ AppSteadyUrl getSteadyTargetUrl(String lineIndex, String timeId,Integer typeCode);
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppSteadyUrlService.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppSteadyUrlService.java
new file mode 100644
index 0000000..18406cc
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppSteadyUrlService.java
@@ -0,0 +1,16 @@
+package com.njcn.cloud.service.user;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.njcn.cloud.pojo.dto.AppSteadyUrl;
+
+/**
+ *
+ * 稳态图形信息 服务类
+ *
+ *
+ * @author wr
+ * @since 2023-11-03
+ */
+public interface IAppSteadyUrlService extends IService {
+
+}
diff --git a/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppUserService.java b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppUserService.java
new file mode 100644
index 0000000..80fd949
--- /dev/null
+++ b/app-cloud/app-cloud-boot/src/main/java/com/njcn/cloud/service/user/IAppUserService.java
@@ -0,0 +1,14 @@
+package com.njcn.cloud.service.user;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.njcn.cloud.pojo.dto.AppUser;
+
+/**
+ * @author hongawen
+ * @date: 2019/10/17 11:36
+ */
+public interface IAppUserService extends IService {
+ void setMessage(String phone, String devCode, String type);
+
+}