commit 4335344af722e9f35b271e1c7e4673f9543b4b9a Author: zhangsz Date: Sun Sep 20 15:03:05 2026 +0800 feat: add core entities, controllers, services, and mappers across multi-module project diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9daeafb --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +test diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..ab2c32a --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000..ab62496 --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,19 @@ + + + + + mysql + true + com.mysql.jdbc.Driver + jdbc:mysql://139.9.2.195:3306/uni_ai_doctor + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..a2a2834 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/generator-config.xml b/.idea/generator-config.xml new file mode 100644 index 0000000..ca49699 --- /dev/null +++ b/.idea/generator-config.xml @@ -0,0 +1,102 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/git_toolbox_prj.xml b/.idea/git_toolbox_prj.xml new file mode 100644 index 0000000..02b915b --- /dev/null +++ b/.idea/git_toolbox_prj.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..106ba30 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..980588c --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..4b661a5 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/AI_Questioning.iml b/AI_Questioning.iml new file mode 100644 index 0000000..74f3f13 --- /dev/null +++ b/AI_Questioning.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/README.en.md b/README.en.md new file mode 100644 index 0000000..7251c98 --- /dev/null +++ b/README.en.md @@ -0,0 +1,36 @@ +# AI智能问诊 + +#### Description +尤尼智康-AI智能问诊项目 + +#### Software Architecture +Software architecture description + +#### Installation + +1. xxxx +2. xxxx +3. xxxx + +#### Instructions + +1. xxxx +2. xxxx +3. xxxx + +#### Contribution + +1. Fork the repository +2. Create Feat_xxx branch +3. Commit your code +4. Create Pull Request + + +#### Gitee Feature + +1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md +2. Gitee blog [blog.gitee.com](https://blog.gitee.com) +3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) +4. The most valuable open source project [GVP](https://gitee.com/gvp) +5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) +6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/README.md b/README.md new file mode 100644 index 0000000..a0132c4 --- /dev/null +++ b/README.md @@ -0,0 +1,37 @@ +# AI智能问诊 + +#### 介绍 +尤尼智康-AI智能问诊项目 + +#### 软件架构 +软件架构说明 + + +#### 安装教程 + +1. xxxx +2. xxxx +3. xxxx + +#### 使用说明 + +1. xxxx +2. xxxx +3. xxxx + +#### 参与贡献 + +1. Fork 本仓库 +2. 新建 Feat_xxx 分支 +3. 提交代码 +4. 新建 Pull Request + + +#### 特技 + +1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md +2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) +3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 +4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 +5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) +6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/admin/.mvn/jvm.config b/admin/.mvn/jvm.config new file mode 100644 index 0000000..e69de29 diff --git a/admin/.mvn/maven.config b/admin/.mvn/maven.config new file mode 100644 index 0000000..e69de29 diff --git a/admin/admin.iml b/admin/admin.iml new file mode 100644 index 0000000..74f3f13 --- /dev/null +++ b/admin/admin.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/admin/admin.log b/admin/admin.log new file mode 100644 index 0000000..b011331 --- /dev/null +++ b/admin/admin.log @@ -0,0 +1,12807 @@ +2026-03-12 00:00:00.000 [scheduling-1] INFO cn.unizk.task.DeviceTask - 时间:2026-03-12 00:00:00,执行设备可使用天数减一 +2026-03-12 00:00:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:00:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:00:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:00:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:00:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:00:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:01:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:01:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:01:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:01:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:01:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:01:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:02:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:02:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:02:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:02:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:02:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:02:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:03:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:03:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:03:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:03:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:03:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:03:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:04:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:04:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:04:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:04:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:04:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:04:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:05:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:05:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:05:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:05:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:05:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:05:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:06:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:06:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:06:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:06:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:06:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:06:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:07:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:07:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:07:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:07:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:07:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:07:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:08:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:08:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:08:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:08:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:08:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:08:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:09:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:09:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:09:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:09:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:09:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:09:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:10:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:10:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:10:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:10:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:10:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:10:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:11:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:11:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:11:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:11:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:11:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:11:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:12:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:12:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:12:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:12:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:12:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:12:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:13:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:13:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:13:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:13:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:13:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:13:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:14:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:14:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:14:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:14:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:14:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:14:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:15:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:15:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:15:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:15:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:15:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:15:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:16:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:16:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:16:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:16:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:16:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:16:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:17:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:17:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:17:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:17:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:17:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:17:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:18:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:18:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:18:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:18:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:18:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:18:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:19:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:19:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:19:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:19:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:19:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:19:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:20:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:20:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:20:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:20:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:20:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:20:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:21:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:21:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:21:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:21:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:21:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:21:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:22:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:22:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:22:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:22:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:22:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:22:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:23:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:23:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:23:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:23:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:23:40.515 [pool-4-thread-57] INFO TCP接收 - 来自 162.216.150.77 的数据 +2026-03-12 00:23:40.515 [pool-4-thread-57] INFO cn.unizk.config.TcpServerDSLConfig - 收到字节长度为:14 +2026-03-12 00:23:40.515 [pool-4-thread-57] INFO cn.unizk.config.TcpServerDSLConfig - 处理业务数据: GET / HTTP/1.0 +2026-03-12 00:23:40.516 [pool-4-thread-57] INFO TCP接收 - 来自 162.216.150.77 的数据 +2026-03-12 00:23:40.516 [pool-4-thread-57] INFO cn.unizk.config.TcpServerDSLConfig - 收到字节长度为:0 +2026-03-12 00:23:40.516 [pool-4-thread-57] INFO cn.unizk.config.TcpServerDSLConfig - 处理业务数据: +2026-03-12 00:23:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:23:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:24:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:24:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:24:26.543 [pool-4-thread-57] ERROR o.s.i.i.t.c.TcpNetConnection - Read exception 77.150.216.162.bc.googleusercontent.com:51188:55367:902c46e3-49fe-4cda-960d-309ea7664e55 SocketException:Connection reset +2026-03-12 00:24:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:24:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:24:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:24:51.938 [pool-4-thread-57] ERROR o.s.i.i.t.c.TcpNetConnection - Read exception 77.150.216.162.bc.googleusercontent.com:61458:55367:d6dff23f-4a97-42c8-8827-f16545e233e7 SocketException:Connection reset +2026-03-12 00:24:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:25:02.527 [pool-4-thread-57] ERROR o.s.i.i.t.c.TcpNetConnection - Read exception 77.150.216.162.bc.googleusercontent.com:57770:55367:2cdf7813-1c83-47a2-ab2f-2191219c65b2 SocketException:Connection reset +2026-03-12 00:25:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:25:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:25:23.368 [pool-4-thread-57] ERROR o.s.i.i.t.c.TcpNetConnection - Read exception 77.150.216.162.bc.googleusercontent.com:60504:55367:21c88af4-8573-4653-8717-90dc6b349ef0 SocketException:Connection reset +2026-03-12 00:25:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:25:34.093 [pool-4-thread-57] ERROR o.s.i.i.t.c.TcpNetConnection - Read exception 77.150.216.162.bc.googleusercontent.com:62888:55367:dd87141a-15bf-4110-9cc1-c69fdb582f1a SocketException:Connection reset +2026-03-12 00:25:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:25:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:25:51.635 [pool-4-thread-57] ERROR o.s.i.i.t.c.TcpNetConnection - Read exception 77.150.216.162.bc.googleusercontent.com:61898:55367:ff504e89-faa6-484b-8b79-fbcf91014369 SocketException:Connection reset +2026-03-12 00:25:59.023 [pool-4-thread-57] INFO TCP接收 - 来自 162.216.150.77 的数据 +2026-03-12 00:25:59.023 [pool-4-thread-57] INFO cn.unizk.config.TcpServerDSLConfig - 收到字节长度为:0 +2026-03-12 00:25:59.023 [pool-4-thread-57] INFO cn.unizk.config.TcpServerDSLConfig - 处理业务数据: +2026-03-12 00:25:59.023 [pool-4-thread-57] INFO TCP接收 - 来自 162.216.150.77 的数据 +2026-03-12 00:25:59.023 [pool-4-thread-57] INFO cn.unizk.config.TcpServerDSLConfig - 收到字节长度为:0 +2026-03-12 00:25:59.023 [pool-4-thread-57] INFO cn.unizk.config.TcpServerDSLConfig - 处理业务数据: +2026-03-12 00:25:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:26:05.430 [pool-4-thread-57] ERROR o.s.i.i.t.c.TcpNetConnection - Read exception 77.150.216.162.bc.googleusercontent.com:63278:55367:318fea74-3785-47b8-b990-5bd7b9365cce SocketException:Connection reset +2026-03-12 00:26:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:26:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:26:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:26:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:26:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:26:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:27:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:27:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:27:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:27:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:27:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:27:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:28:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:28:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:28:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:28:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:28:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:28:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:29:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:29:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:29:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:29:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:29:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:29:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:30:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:30:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:30:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:30:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:30:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:30:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:31:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:31:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:31:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:31:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:31:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:31:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:32:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:32:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:32:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:32:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:32:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:32:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:33:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:33:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:33:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:33:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:33:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:33:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:34:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:34:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:34:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:34:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:34:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:34:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:35:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:35:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:35:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:35:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:35:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:35:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:36:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:36:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:36:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:36:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:36:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:36:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:37:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:37:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:37:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:37:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:37:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:37:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:38:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:38:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:38:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:38:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:38:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:38:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:39:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:39:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:39:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:39:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:39:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:39:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:40:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:40:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:40:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:40:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:40:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:40:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:41:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:41:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:41:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:41:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:41:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:41:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:42:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:42:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:42:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:42:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:42:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:42:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:43:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:43:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:43:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:43:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:43:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:43:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:44:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:44:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:44:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:44:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:44:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:44:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:45:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:45:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:45:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:45:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:45:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:45:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:46:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:46:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:46:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:46:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:46:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:46:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:47:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:47:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:47:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:47:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:47:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:47:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:48:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:48:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:48:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:48:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:48:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:48:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:49:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:49:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:49:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:49:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:49:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:49:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:50:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:50:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:50:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:50:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:50:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:50:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:51:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:51:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:51:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:51:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:51:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:51:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:52:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:52:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:52:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:52:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:52:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:52:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:53:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:53:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:53:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:53:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:53:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:53:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:54:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:54:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:54:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:54:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:54:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:54:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:55:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:55:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:55:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:55:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:55:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:55:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:56:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:56:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:56:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:56:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:56:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:56:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:57:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:57:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:57:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:57:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:57:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:57:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:58:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:58:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:58:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:58:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:58:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:58:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:59:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:59:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:59:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:59:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:59:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 00:59:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:00:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:00:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:00:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:00:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:00:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:00:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:01:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:01:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:01:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:01:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:01:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:01:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:02:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:02:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:02:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:02:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:02:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:02:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:03:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:03:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:03:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:03:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:03:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:03:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:04:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:04:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:04:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:04:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:04:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:04:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:05:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:05:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:05:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:05:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:05:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:05:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:06:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:06:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:06:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:06:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:06:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:06:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:07:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:07:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:07:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:07:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:07:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:07:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:08:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:08:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:08:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:08:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:08:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:08:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:09:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:09:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:09:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:09:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:09:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:09:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:10:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:10:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:10:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:10:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:10:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:10:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:11:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:11:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:11:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:11:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:11:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:11:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:12:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:12:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:12:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:12:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:12:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:12:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:13:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:13:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:13:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:13:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:13:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:13:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:14:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:14:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:14:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:14:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:14:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:14:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:15:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:15:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:15:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:15:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:15:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:15:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:16:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:16:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:16:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:16:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:16:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:16:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:17:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:17:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:17:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:17:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:17:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:17:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:18:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:18:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:18:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:18:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:18:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:18:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:19:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:19:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:19:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:19:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:19:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:19:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:20:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:20:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:20:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:20:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:20:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:20:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:21:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:21:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:21:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:21:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:21:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:21:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:22:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:22:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:22:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:22:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:22:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:22:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:23:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:23:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:23:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:23:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:23:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:23:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:24:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:24:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:24:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:24:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:24:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:24:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:25:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:25:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:25:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:25:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:25:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:25:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:26:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:26:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:26:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:26:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:26:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:26:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:27:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:27:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:27:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:27:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:27:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:27:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:28:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:28:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:28:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:28:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:28:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:28:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:29:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:29:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:29:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:29:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:29:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:29:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:30:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:30:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:30:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:30:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:30:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:30:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:31:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:31:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:31:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:31:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:31:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:31:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:32:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:32:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:32:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:32:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:32:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:32:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:33:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:33:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:33:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:33:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:33:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:33:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:34:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:34:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:34:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:34:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:34:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:34:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:35:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:35:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:35:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:35:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:35:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:35:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:36:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:36:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:36:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:36:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:36:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:36:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:37:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:37:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:37:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:37:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:37:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:37:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:38:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:38:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:38:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:38:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:38:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:38:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:39:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:39:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:39:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:39:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:39:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:39:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:40:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:40:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:40:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:40:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:40:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:40:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:41:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:41:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:41:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:41:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:41:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:41:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:42:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:42:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:42:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:42:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:42:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:42:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:43:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:43:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:43:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:43:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:43:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:43:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:44:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:44:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:44:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:44:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:44:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:44:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:45:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:45:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:45:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:45:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:45:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:45:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:46:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:46:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:46:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:46:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:46:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:46:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:47:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:47:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:47:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:47:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:47:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:47:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:48:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:48:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:48:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:48:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:48:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:48:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:49:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:49:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:49:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:49:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:49:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:49:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:50:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:50:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:50:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:50:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:50:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:50:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:51:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:51:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:51:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:51:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:51:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:51:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:52:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:52:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:52:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:52:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:52:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:52:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:53:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:53:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:53:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:53:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:53:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:53:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:54:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:54:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:54:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:54:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:54:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:54:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:55:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:55:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:55:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:55:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:55:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:55:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:56:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:56:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:56:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:56:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:56:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:56:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:57:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:57:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:57:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:57:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:57:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:57:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:58:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:58:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:58:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:58:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:58:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:58:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:59:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:59:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:59:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:59:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:59:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 01:59:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:00:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:00:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:00:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:00:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:00:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:00:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:01:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:01:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:01:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:01:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:01:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:01:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:02:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:02:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:02:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:02:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:02:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:02:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:03:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:03:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:03:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:03:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:03:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:03:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:04:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:04:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:04:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:04:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:04:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:04:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:05:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:05:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:05:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:05:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:05:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:05:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:06:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:06:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:06:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:06:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:06:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:06:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:07:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:07:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:07:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:07:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:07:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:07:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:08:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:08:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:08:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:08:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:08:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:08:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:09:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:09:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:09:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:09:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:09:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:09:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:10:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:10:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:10:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:10:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:10:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:10:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:11:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:11:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:11:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:11:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:11:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:11:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:12:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:12:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:12:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:12:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:12:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:12:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:13:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:13:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:13:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:13:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:13:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:13:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:14:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:14:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:14:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:14:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:14:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:14:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:15:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:15:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:15:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:15:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:15:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:15:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:16:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:16:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:16:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:16:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:16:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:16:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:17:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:17:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:17:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:17:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:17:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:17:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:18:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:18:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:18:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:18:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:18:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:18:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:19:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:19:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:19:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:19:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:19:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:19:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:20:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:20:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:20:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:20:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:20:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:20:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:21:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:21:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:21:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:21:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:21:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:21:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:22:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:22:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:22:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:22:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:22:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:22:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:23:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:23:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:23:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:23:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:23:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:23:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:24:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:24:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:24:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:24:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:24:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:24:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:25:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:25:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:25:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:25:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:25:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:25:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:26:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:26:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:26:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:26:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:26:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:26:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:27:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:27:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:27:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:27:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:27:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:27:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:28:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:28:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:28:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:28:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:28:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:28:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:29:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:29:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:29:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:29:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:29:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:29:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:30:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:30:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:30:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:30:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:30:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:30:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:31:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:31:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:31:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:31:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:31:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:31:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:32:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:32:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:32:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:32:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:32:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:32:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:33:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:33:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:33:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:33:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:33:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:33:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:34:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:34:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:34:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:34:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:34:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:34:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:35:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:35:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:35:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:35:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:35:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:35:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:36:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:36:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:36:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:36:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:36:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:36:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:37:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:37:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:37:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:37:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:37:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:37:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:38:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:38:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:38:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:38:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:38:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:38:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:39:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:39:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:39:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:39:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:39:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:39:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:40:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:40:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:40:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:40:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:40:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:40:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:41:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:41:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:41:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:41:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:41:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:41:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:42:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:42:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:42:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:42:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:42:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:42:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:43:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:43:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:43:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:43:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:43:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:43:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:44:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:44:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:44:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:44:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:44:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:44:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:45:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:45:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:45:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:45:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:45:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:45:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:46:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:46:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:46:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:46:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:46:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:46:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:47:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:47:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:47:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:47:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:47:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:47:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:48:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:48:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:48:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:48:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:48:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:48:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:49:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:49:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:49:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:49:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:49:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:49:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:50:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:50:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:50:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:50:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:50:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:50:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:51:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:51:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:51:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:51:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:51:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:51:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:52:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:52:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:52:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:52:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:52:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:52:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:53:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:53:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:53:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:53:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:53:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:53:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:54:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:54:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:54:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:54:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:54:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:54:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:55:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:55:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:55:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:55:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:55:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:55:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:56:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:56:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:56:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:56:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:56:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:56:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:57:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:57:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:57:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:57:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:57:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:57:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:58:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:58:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:58:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:58:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:58:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:58:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:59:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:59:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:59:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:59:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:59:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 02:59:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:00:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:00:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:00:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:00:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:00:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:00:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:01:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:01:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:01:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:01:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:01:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:01:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:02:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:02:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:02:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:02:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:02:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:02:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:03:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:03:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:03:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:03:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:03:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:03:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:04:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:04:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:04:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:04:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:04:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:04:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:05:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:05:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:05:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:05:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:05:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:05:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:06:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:06:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:06:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:06:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:06:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:06:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:07:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:07:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:07:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:07:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:07:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:07:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:08:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:08:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:08:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:08:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:08:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:08:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:09:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:09:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:09:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:09:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:09:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:09:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:10:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:10:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:10:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:10:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:10:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:10:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:11:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:11:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:11:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:11:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:11:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:11:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:12:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:12:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:12:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:12:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:12:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:12:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:13:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:13:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:13:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:13:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:13:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:13:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:14:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:14:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:14:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:14:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:14:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:14:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:15:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:15:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:15:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:15:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:15:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:15:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:16:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:16:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:16:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:16:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:16:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:16:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:17:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:17:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:17:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:17:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:17:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:17:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:18:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:18:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:18:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:18:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:18:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:18:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:19:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:19:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:19:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:19:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:19:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:19:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:20:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:20:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:20:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:20:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:20:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:20:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:21:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:21:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:21:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:21:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:21:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:21:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:22:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:22:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:22:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:22:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:22:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:22:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:23:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:23:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:23:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:23:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:23:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:23:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:24:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:24:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:24:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:24:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:24:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:24:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:25:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:25:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:25:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:25:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:25:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:25:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:26:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:26:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:26:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:26:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:26:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:26:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:27:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:27:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:27:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:27:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:27:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:27:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:28:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:28:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:28:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:28:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:28:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:28:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:29:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:29:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:29:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:29:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:29:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:29:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:30:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:30:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:30:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:30:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:30:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:30:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:31:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:31:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:31:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:31:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:31:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:31:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:32:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:32:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:32:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:32:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:32:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:32:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:33:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:33:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:33:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:33:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:33:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:33:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:34:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:34:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:34:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:34:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:34:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:34:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:35:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:35:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:35:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:35:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:35:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:35:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:36:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:36:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:36:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:36:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:36:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:36:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:37:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:37:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:37:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:37:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:37:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:37:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:38:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:38:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:38:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:38:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:38:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:38:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:39:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:39:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:39:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:39:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:39:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:39:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:40:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:40:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:40:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:40:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:40:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:40:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:41:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:41:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:41:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:41:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:41:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:41:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:42:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:42:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:42:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:42:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:42:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:42:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:43:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:43:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:43:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:43:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:43:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:43:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:44:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:44:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:44:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:44:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:44:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:44:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:45:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:45:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:45:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:45:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:45:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:45:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:46:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:46:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:46:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:46:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:46:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:46:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:47:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:47:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:47:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:47:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:47:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:47:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:48:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:48:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:48:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:48:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:48:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:48:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:49:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:49:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:49:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:49:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:49:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:49:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:50:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:50:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:50:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:50:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:50:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:50:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:51:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:51:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:51:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:51:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:51:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:51:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:52:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:52:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:52:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:52:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:52:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:52:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:53:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:53:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:53:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:53:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:53:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:53:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:54:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:54:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:54:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:54:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:54:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:54:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:55:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:55:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:55:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:55:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:55:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:55:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:56:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:56:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:56:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:56:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:56:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:56:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:57:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:57:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:57:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:57:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:57:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:57:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:58:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:58:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:58:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:58:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:58:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:58:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:59:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:59:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:59:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:59:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:59:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 03:59:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:00:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:00:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:00:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:00:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:00:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:00:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:01:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:01:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:01:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:01:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:01:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:01:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:02:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:02:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:02:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:02:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:02:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:02:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:03:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:03:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:03:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:03:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:03:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:03:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:04:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:04:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:04:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:04:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:04:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:04:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:05:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:05:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:05:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:05:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:05:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:05:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:06:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:06:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:06:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:06:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:06:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:06:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:07:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:07:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:07:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:07:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:07:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:07:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:08:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:08:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:08:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:08:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:08:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:08:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:09:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:09:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:09:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:09:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:09:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:09:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:10:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:10:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:10:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:10:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:10:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:10:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:11:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:11:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:11:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:11:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:11:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:11:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:12:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:12:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:12:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:12:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:12:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:12:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:13:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:13:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:13:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:13:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:13:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:13:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:14:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:14:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:14:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:14:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:14:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:14:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:15:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:15:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:15:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:15:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:15:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:15:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:16:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:16:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:16:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:16:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:16:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:16:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:17:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:17:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:17:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:17:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:17:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:17:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:18:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:18:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:18:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:18:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:18:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:18:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:19:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:19:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:19:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:19:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:19:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:19:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:20:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:20:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:20:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:20:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:20:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:20:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:21:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:21:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:21:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:21:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:21:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:21:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:22:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:22:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:22:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:22:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:22:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:22:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:23:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:23:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:23:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:23:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:23:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:23:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:24:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:24:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:24:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:24:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:24:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:24:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:25:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:25:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:25:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:25:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:25:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:25:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:26:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:26:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:26:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:26:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:26:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:26:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:27:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:27:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:27:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:27:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:27:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:27:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:28:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:28:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:28:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:28:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:28:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:28:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:29:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:29:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:29:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:29:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:29:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:29:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:30:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:30:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:30:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:30:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:30:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:30:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:31:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:31:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:31:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:31:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:31:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:31:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:32:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:32:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:32:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:32:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:32:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:32:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:33:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:33:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:33:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:33:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:33:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:33:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:34:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:34:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:34:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:34:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:34:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:34:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:35:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:35:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:35:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:35:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:35:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:35:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:36:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:36:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:36:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:36:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:36:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:36:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:37:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:37:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:37:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:37:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:37:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:37:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:38:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:38:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:38:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:38:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:38:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:38:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:39:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:39:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:39:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:39:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:39:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:39:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:40:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:40:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:40:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:40:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:40:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:40:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:41:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:41:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:41:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:41:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:41:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:41:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:42:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:42:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:42:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:42:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:42:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:42:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:43:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:43:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:43:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:43:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:43:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:43:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:44:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:44:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:44:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:44:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:44:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:44:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:45:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:45:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:45:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:45:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:45:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:45:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:46:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:46:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:46:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:46:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:46:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:46:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:47:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:47:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:47:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:47:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:47:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:47:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:48:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:48:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:48:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:48:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:48:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:48:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:49:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:49:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:49:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:49:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:49:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:49:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:50:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:50:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:50:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:50:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:50:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:50:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:51:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:51:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:51:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:51:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:51:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:51:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:52:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:52:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:52:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:52:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:52:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:52:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:53:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:53:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:53:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:53:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:53:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:53:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:54:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:54:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:54:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:54:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:54:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:54:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:55:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:55:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:55:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:55:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:55:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:55:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:56:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:56:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:56:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:56:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:56:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:56:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:57:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:57:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:57:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:57:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:57:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:57:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:58:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:58:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:58:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:58:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:58:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:58:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:59:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:59:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:59:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:59:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:59:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 04:59:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:00:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:00:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:00:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:00:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:00:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:00:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:01:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:01:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:01:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:01:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:01:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:01:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:02:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:02:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:02:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:02:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:02:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:02:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:03:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:03:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:03:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:03:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:03:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:03:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:04:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:04:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:04:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:04:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:04:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:04:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:05:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:05:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:05:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:05:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:05:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:05:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:06:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:06:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:06:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:06:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:06:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:06:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:07:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:07:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:07:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:07:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:07:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:07:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:08:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:08:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:08:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:08:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:08:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:08:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:09:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:09:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:09:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:09:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:09:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:09:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:10:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:10:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:10:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:10:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:10:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:10:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:11:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:11:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:11:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:11:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:11:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:11:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:12:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:12:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:12:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:12:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:12:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:12:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:13:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:13:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:13:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:13:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:13:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:13:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:14:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:14:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:14:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:14:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:14:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:14:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:15:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:15:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:15:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:15:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:15:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:15:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:16:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:16:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:16:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:16:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:16:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:16:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:17:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:17:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:17:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:17:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:17:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:17:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:18:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:18:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:18:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:18:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:18:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:18:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:19:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:19:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:19:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:19:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:19:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:19:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:20:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:20:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:20:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:20:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:20:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:20:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:21:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:21:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:21:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:21:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:21:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:21:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:22:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:22:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:22:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:22:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:22:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:22:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:23:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:23:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:23:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:23:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:23:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:23:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:24:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:24:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:24:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:24:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:24:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:24:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:25:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:25:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:25:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:25:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:25:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:25:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:26:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:26:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:26:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:26:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:26:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:26:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:27:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:27:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:27:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:27:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:27:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:27:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:28:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:28:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:28:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:28:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:28:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:28:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:29:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:29:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:29:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:29:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:29:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:29:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:30:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:30:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:30:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:30:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:30:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:30:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:31:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:31:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:31:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:31:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:31:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:31:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:32:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:32:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:32:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:32:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:32:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:32:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:33:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:33:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:33:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:33:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:33:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:33:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:34:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:34:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:34:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:34:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:34:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:34:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:35:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:35:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:35:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:35:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:35:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:35:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:36:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:36:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:36:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:36:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:36:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:36:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:37:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:37:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:37:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:37:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:37:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:37:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:38:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:38:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:38:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:38:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:38:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:38:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:39:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:39:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:39:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:39:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:39:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:39:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:40:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:40:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:40:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:40:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:40:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:40:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:41:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:41:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:41:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:41:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:41:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:41:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:42:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:42:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:42:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:42:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:42:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:42:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:43:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:43:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:43:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:43:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:43:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:43:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:44:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:44:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:44:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:44:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:44:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:44:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:45:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:45:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:45:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:45:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:45:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:45:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:46:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:46:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:46:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:46:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:46:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:46:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:47:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:47:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:47:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:47:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:47:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:47:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:48:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:48:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:48:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:48:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:48:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:48:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:49:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:49:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:49:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:49:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:49:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:49:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:50:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:50:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:50:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:50:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:50:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:50:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:51:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:51:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:51:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:51:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:51:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:51:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:52:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:52:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:52:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:52:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:52:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:52:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:53:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:53:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:53:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:53:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:53:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:53:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:54:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:54:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:54:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:54:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:54:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:54:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:55:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:55:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:55:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:55:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:55:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:55:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:56:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:56:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:56:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:56:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:56:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:56:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:57:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:57:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:57:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:57:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:57:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:57:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:58:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:58:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:58:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:58:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:58:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:58:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:59:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:59:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:59:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:59:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:59:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 05:59:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:00:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:00:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:00:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:00:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:00:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:00:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:01:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:01:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:01:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:01:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:01:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:01:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:02:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:02:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:02:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:02:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:02:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:02:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:03:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:03:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:03:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:03:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:03:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:03:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:04:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:04:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:04:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:04:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:04:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:04:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:05:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:05:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:05:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:05:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:05:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:05:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:06:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:06:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:06:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:06:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:06:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:06:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:07:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:07:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:07:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:07:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:07:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:07:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:08:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:08:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:08:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:08:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:08:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:08:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:09:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:09:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:09:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:09:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:09:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:09:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:10:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:10:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:10:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:10:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:10:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:10:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:11:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:11:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:11:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:11:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:11:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:11:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:12:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:12:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:12:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:12:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:12:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:12:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:13:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:13:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:13:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:13:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:13:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:13:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:14:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:14:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:14:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:14:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:14:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:14:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:15:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:15:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:15:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:15:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:15:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:15:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:16:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:16:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:16:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:16:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:16:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:16:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:17:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:17:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:17:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:17:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:17:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:17:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:18:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:18:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:18:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:18:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:18:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:18:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:19:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:19:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:19:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:19:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:19:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:19:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:20:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:20:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:20:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:20:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:20:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:20:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:21:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:21:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:21:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:21:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:21:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:21:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:22:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:22:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:22:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:22:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:22:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:22:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:23:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:23:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:23:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:23:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:23:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:23:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:24:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:24:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:24:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:24:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:24:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:24:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:25:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:25:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:25:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:25:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:25:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:25:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:26:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:26:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:26:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:26:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:26:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:26:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:27:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:27:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:27:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:27:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:27:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:27:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:28:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:28:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:28:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:28:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:28:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:28:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:29:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:29:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:29:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:29:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:29:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:29:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:30:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:30:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:30:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:30:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:30:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:30:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:31:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:31:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:31:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:31:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:31:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:31:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:32:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:32:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:32:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:32:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:32:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:32:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:33:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:33:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:33:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:33:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:33:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:33:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:34:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:34:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:34:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:34:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:34:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:34:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:35:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:35:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:35:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:35:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:35:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:35:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:36:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:36:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:36:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:36:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:36:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:36:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:37:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:37:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:37:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:37:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:37:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:37:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:38:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:38:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:38:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:38:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:38:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:38:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:39:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:39:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:39:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:39:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:39:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:39:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:40:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:40:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:40:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:40:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:40:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:40:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:41:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:41:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:41:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:41:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:41:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:41:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:42:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:42:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:42:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:42:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:42:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:42:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:43:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:43:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:43:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:43:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:43:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:43:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:44:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:44:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:44:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:44:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:44:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:44:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:45:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:45:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:45:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:45:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:45:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:45:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:46:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:46:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:46:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:46:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:46:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:46:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:47:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:47:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:47:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:47:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:47:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:47:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:48:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:48:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:48:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:48:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:48:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:48:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:49:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:49:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:49:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:49:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:49:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:49:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:50:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:50:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:50:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:50:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:50:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:50:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:51:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:51:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:51:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:51:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:51:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:51:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:52:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:52:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:52:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:52:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:52:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:52:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:53:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:53:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:53:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:53:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:53:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:53:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:54:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:54:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:54:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:54:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:54:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:54:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:55:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:55:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:55:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:55:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:55:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:55:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:56:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:56:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:56:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:56:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:56:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:56:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:57:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:57:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:57:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:57:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:57:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:57:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:58:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:58:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:58:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:58:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:58:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:58:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:59:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:59:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:59:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:59:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:59:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 06:59:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:00:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:00:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:00:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:00:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:00:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:00:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:01:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:01:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:01:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:01:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:01:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:01:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:02:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:02:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:02:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:02:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:02:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:02:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:03:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:03:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:03:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:03:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:03:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:03:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:04:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:04:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:04:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:04:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:04:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:04:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:05:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:05:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:05:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:05:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:05:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:05:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:06:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:06:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:06:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:06:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:06:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:06:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:07:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:07:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:07:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:07:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:07:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:07:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:08:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:08:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:08:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:08:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:08:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:08:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:09:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:09:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:09:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:09:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:09:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:09:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:10:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:10:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:10:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:10:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:10:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:10:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:11:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:11:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:11:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:11:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:11:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:11:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:12:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:12:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:12:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:12:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:12:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:12:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:13:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:13:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:13:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:13:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:13:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:13:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:14:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:14:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:14:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:14:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:14:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:14:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:15:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:15:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:15:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:15:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:15:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:15:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:16:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:16:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:16:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:16:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:16:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:16:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:17:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:17:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:17:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:17:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:17:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:17:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:18:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:18:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:18:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:18:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:18:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:18:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:19:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:19:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:19:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:19:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:19:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:19:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:20:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:20:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:20:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:20:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:20:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:20:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:21:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:21:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:21:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:21:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:21:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:21:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:22:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:22:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:22:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:22:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:22:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:22:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:23:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:23:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:23:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:23:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:23:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:23:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:24:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:24:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:24:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:24:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:24:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:24:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:25:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:25:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:25:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:25:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:25:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:25:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:26:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:26:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:26:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:26:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:26:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:26:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:27:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:27:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:27:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:27:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:27:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:27:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:28:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:28:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:28:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:28:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:28:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:28:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:29:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:29:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:29:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:29:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:29:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:29:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:30:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:30:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:30:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:30:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:30:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:30:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:31:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:31:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:31:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:31:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:31:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:31:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:32:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:32:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:32:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:32:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:32:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:32:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:33:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:33:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:33:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:33:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:33:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:33:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:34:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:34:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:34:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:34:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:34:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:34:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:35:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:35:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:35:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:35:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:35:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:35:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:36:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:36:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:36:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:36:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:36:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:36:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:37:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:37:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:37:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:37:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:37:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:37:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:38:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:38:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:38:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:38:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:38:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:38:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:39:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:39:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:39:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:39:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:39:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:39:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:40:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:40:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:40:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:40:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:40:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:40:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:41:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:41:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:41:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:41:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:41:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:41:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:42:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:42:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:42:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:42:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:42:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:42:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:43:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:43:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:43:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:43:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:43:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:43:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:44:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:44:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:44:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:44:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:44:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:44:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:45:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:45:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:45:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:45:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:45:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:45:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:46:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:46:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:46:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:46:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:46:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:46:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:47:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:47:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:47:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:47:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:47:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:47:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:48:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:48:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:48:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:48:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:48:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:48:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:49:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:49:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:49:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:49:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:49:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:49:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:50:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:50:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:50:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:50:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:50:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:50:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:51:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:51:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:51:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:51:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:51:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:51:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:52:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:52:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:52:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:52:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:52:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:52:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:53:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:53:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:53:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:53:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:53:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:53:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:54:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:54:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:54:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:54:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:54:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:54:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:55:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:55:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:55:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:55:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:55:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:55:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:56:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:56:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:56:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:56:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:56:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:56:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:57:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:57:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:57:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:57:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:57:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:57:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:58:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:58:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:58:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:58:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:58:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:58:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:59:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:59:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:59:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:59:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:59:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 07:59:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:00:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:00:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:00:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:00:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:00:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:00:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:01:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:01:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:01:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:01:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:01:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:01:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:02:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:02:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:02:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:02:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:02:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:02:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:03:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:03:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:03:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:03:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:03:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:03:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:04:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:04:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:04:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:04:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:04:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:04:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:05:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:05:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:05:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:05:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:05:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:05:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:06:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:06:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:06:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:06:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:06:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:06:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:07:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:07:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:07:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:07:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:07:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:07:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:08:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:08:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:08:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:08:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:08:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:08:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:09:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:09:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:09:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:09:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:09:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:09:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:10:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:10:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:10:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:10:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:10:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:10:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:11:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:11:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:11:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:11:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:11:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:11:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:12:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:12:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:12:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:12:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:12:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:12:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:13:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:13:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:13:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:13:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:13:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:13:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:14:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:14:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:14:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:14:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:14:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:14:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:15:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:15:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:15:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:15:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:15:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:15:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:16:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:16:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:16:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:16:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:16:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:16:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:17:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:17:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:17:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:17:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:17:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:17:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:18:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:18:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:18:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:18:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:18:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:18:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:19:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:19:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:19:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:19:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:19:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:19:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:20:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:20:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:20:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:20:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:20:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:20:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:21:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:21:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:21:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:21:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:21:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:21:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:22:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:22:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:22:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:22:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:22:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:22:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:23:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:23:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:23:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:23:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:23:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:23:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:24:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:24:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:24:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:24:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:24:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:24:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:25:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:25:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:25:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:25:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:25:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:25:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:26:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:26:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:26:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:26:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:26:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:26:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:27:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:27:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:27:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:27:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:27:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:27:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:28:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:28:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:28:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:28:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:28:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:28:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:29:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:29:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:29:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:29:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:29:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:29:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:30:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:30:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:30:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:30:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:30:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:30:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:31:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:31:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:31:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:31:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:31:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:31:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:32:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:32:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:32:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:32:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:32:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:32:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:33:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:33:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:33:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:33:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:33:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:33:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:34:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:34:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:34:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:34:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:34:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:34:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:35:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:35:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:35:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:35:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:35:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:35:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:36:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:36:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:36:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:36:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:36:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:36:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:37:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:37:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:37:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:37:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:37:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:37:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:38:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:38:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:38:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:38:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:38:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:38:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:39:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:39:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:39:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:39:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:39:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:39:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:40:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:40:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:40:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:40:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:40:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:40:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:41:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:41:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:41:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:41:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:41:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:41:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:42:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:42:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:42:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:42:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:42:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:42:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:43:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:43:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:43:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:43:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:43:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:43:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:44:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:44:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:44:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:44:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:44:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:44:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:45:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:45:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:45:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:45:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:45:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:45:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:46:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:46:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:46:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:46:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:46:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:46:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:47:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:47:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:47:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:47:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:47:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:47:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:48:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:48:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:48:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:48:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:48:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:48:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:49:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:49:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:49:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:49:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:49:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:49:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:50:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:50:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:50:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:50:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:50:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:50:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:51:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:51:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:51:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:51:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:51:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:51:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:52:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:52:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:52:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:52:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:52:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:52:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:53:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:53:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:53:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:53:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:53:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:53:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:54:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:54:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:54:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:54:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:54:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:54:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:55:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:55:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:55:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:55:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:55:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:55:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:56:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:56:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:56:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:56:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:56:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:56:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:57:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:57:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:57:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:57:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:57:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:57:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:58:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:58:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:58:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:58:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:58:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:58:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:59:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:59:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:59:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:59:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:59:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 08:59:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:00:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:00:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:00:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:00:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:00:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:00:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:01:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:01:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:01:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:01:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:01:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:01:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:02:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:02:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:02:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:02:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:02:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:02:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:03:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:03:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:03:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:03:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:03:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:03:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:04:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:04:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:04:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:04:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:04:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:04:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:05:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:05:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:05:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:05:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:05:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:05:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:06:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:06:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:06:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:06:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:06:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:06:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:07:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:07:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:07:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:07:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:07:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:07:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:08:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:08:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:08:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:08:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:08:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:08:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:09:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:09:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:09:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:09:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:09:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:09:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:10:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:10:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:10:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:10:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:10:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:10:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:11:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:11:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:11:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:11:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:11:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:11:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:12:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:12:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:12:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:12:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:12:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:12:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:13:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:13:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:13:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:13:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:13:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:13:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:14:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:14:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:14:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:14:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:14:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:14:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:15:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:15:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:15:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:15:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:15:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:15:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:16:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:16:11.933 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:16:11.933 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:16:11.933 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:16:11.942 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:16:11.942 +2026-03-12 09:16:11.950 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:16:13.837 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:16:13.837 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:16:13.837 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:16:13.843 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:16:13.843 +2026-03-12 09:16:13.847 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:16:13.855 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:16:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:16:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:16:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:16:44.533 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:16:44.533 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:16:44.533 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:16:44.539 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:16:44.539 +2026-03-12 09:16:44.544 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:16:44.553 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:16:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:16:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:17:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:17:15.311 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:17:15.311 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:17:15.311 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:17:15.316 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:17:15.316 +2026-03-12 09:17:15.320 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:17:15.326 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:17:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:17:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:17:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:17:46.053 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:17:46.053 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:17:46.053 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:17:46.059 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:17:46.059 +2026-03-12 09:17:46.064 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:17:46.071 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:17:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:17:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:18:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:18:16.798 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:18:16.798 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:18:16.799 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:18:16.806 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:18:16.806 +2026-03-12 09:18:16.811 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:18:16.819 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:18:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:18:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:18:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:18:47.539 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:18:47.539 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:18:47.539 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:18:47.544 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:18:47.544 +2026-03-12 09:18:47.549 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:18:47.557 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:18:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:18:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:19:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:19:18.259 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:19:18.260 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:19:18.260 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:19:18.265 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:19:18.265 +2026-03-12 09:19:18.269 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:19:18.276 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:19:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:19:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:19:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:19:48.984 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:19:48.984 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:19:48.984 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:19:48.989 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:19:48.989 +2026-03-12 09:19:48.995 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:19:49.003 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:19:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:19:52.943 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:19:52.943 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:19:52.943 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:19:52.988 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:19:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:20:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:20:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:20:23.713 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:20:23.713 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:20:23.713 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:20:23.735 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:20:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:20:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:20:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:20:54.429 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:20:54.429 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:20:54.429 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:20:54.449 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:20:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:21:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:21:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:21:25.149 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:21:25.149 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:21:25.149 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:21:25.168 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:21:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:21:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:21:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:21:55.873 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:21:55.873 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:21:55.873 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:21:55.893 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:21:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:22:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:22:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:22:26.598 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:22:26.598 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:22:26.598 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:22:26.619 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:22:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:22:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:22:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:22:57.324 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:22:57.324 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:22:57.324 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:22:57.344 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:22:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:23:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:23:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:23:28.043 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:23:28.044 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:23:28.044 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:23:28.064 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:23:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:23:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:23:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:23:58.803 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:23:58.804 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:23:58.804 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:23:58.823 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:23:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:24:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:24:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:24:29.523 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:24:29.523 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:24:29.523 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:24:29.543 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:24:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:24:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:24:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:24:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:25:00.239 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:25:00.239 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:25:00.239 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:25:00.260 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:25:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:25:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:25:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:25:30.960 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:25:30.960 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:25:30.960 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:25:30.978 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:25:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:25:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:25:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:26:01.683 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:26:01.683 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:26:01.683 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:26:01.703 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:26:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:26:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:26:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:26:32.553 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:26:32.553 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:26:32.553 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:26:32.574 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:26:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:26:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:26:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:27:03.294 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:27:03.294 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:27:03.294 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:27:03.314 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:27:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:27:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:27:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:27:34.038 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:27:34.039 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:27:34.039 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:27:34.065 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:27:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:27:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:27:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:28:04.793 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:28:04.794 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:28:04.794 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:28:04.812 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:28:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:28:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:28:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:28:35.533 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:28:35.533 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:28:35.533 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:28:35.552 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:28:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:28:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:28:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:29:06.273 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:29:06.273 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:29:06.273 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:29:06.293 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:29:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:29:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:29:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:29:37.040 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:29:37.041 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:29:37.041 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:29:37.068 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:29:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:29:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:29:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:30:07.783 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:30:07.783 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:30:07.783 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:30:07.801 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:30:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:30:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:30:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:30:38.508 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:30:38.508 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:30:38.508 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:30:38.530 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:30:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:30:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:30:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:31:09.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:31:09.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:31:09.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:31:09.259 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:31:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:31:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:31:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:31:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:31:39.964 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:31:39.964 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:31:39.964 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:31:39.987 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:31:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:31:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:32:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:32:10.708 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:32:10.708 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:32:10.708 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:32:10.726 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:32:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:32:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:32:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:32:41.433 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:32:41.433 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:32:41.433 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:32:41.453 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:32:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:32:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:33:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:33:12.174 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:33:12.174 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:33:12.174 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:33:12.195 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:33:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:33:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:33:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:33:42.940 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:33:42.940 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:33:42.940 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:33:42.960 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:33:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:33:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:34:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:34:13.670 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:34:13.670 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:34:13.670 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:34:13.690 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:34:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:34:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:34:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:34:44.545 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:34:44.545 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:34:44.545 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:34:44.566 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:34:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:34:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:35:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:35:15.300 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:35:15.301 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:35:15.301 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:35:15.320 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:35:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:35:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:35:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:35:46.018 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:35:46.018 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:35:46.018 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:35:46.049 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:35:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:35:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:36:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:36:16.767 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:36:16.768 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:36:16.768 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:36:16.788 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:36:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:36:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:36:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:36:47.525 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:36:47.525 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:36:47.525 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:36:47.546 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:36:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:36:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:37:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:37:18.284 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:37:18.284 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:37:18.284 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:37:18.304 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:37:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:37:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:37:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:37:49.033 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:37:49.033 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:37:49.033 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:37:49.062 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:37:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:37:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:38:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:38:19.788 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:38:19.788 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:38:19.788 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:38:19.809 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:38:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:38:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:38:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:38:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:38:50.519 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:38:50.519 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:38:50.519 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:38:50.539 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:38:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:39:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:39:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:39:21.265 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:39:21.265 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:39:21.265 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:39:21.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:39:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:39:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:39:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:39:51.999 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:39:51.999 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:39:51.999 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:39:52.018 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:39:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:40:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:40:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:40:22.743 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:40:22.743 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:40:22.743 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:40:22.763 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:40:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:40:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:40:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:40:53.507 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:40:53.507 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:40:53.507 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:40:53.527 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:40:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:41:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:41:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:41:24.232 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:41:24.232 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:41:24.232 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:41:24.254 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:41:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:41:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:41:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:41:54.958 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:41:54.958 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:41:54.958 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:41:54.981 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:41:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:42:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:42:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:42:25.696 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:42:25.696 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:42:25.696 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:42:25.716 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:42:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:42:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:42:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:42:56.430 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:42:56.430 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:42:56.430 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:42:56.453 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:42:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:43:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:43:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:43:27.142 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:43:27.142 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:43:27.142 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:43:27.164 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:43:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:43:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:43:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:43:57.873 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:43:57.873 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:43:57.873 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:43:57.894 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:43:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:44:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:44:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:44:28.596 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:44:28.596 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:44:28.596 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:44:28.619 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:44:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:44:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:44:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:44:59.304 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:44:59.304 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:44:59.304 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:44:59.326 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:44:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:45:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:45:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:45:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:45:30.019 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:45:30.019 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:45:30.019 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:45:30.049 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:45:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:45:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:45:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:46:00.738 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:46:00.738 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:46:00.738 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:46:00.756 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:46:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:46:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:46:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:46:31.476 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:46:31.476 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:46:31.476 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:46:31.497 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:46:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:46:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:46:51.802 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:46:51.802 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:46:51.802 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:46:51.808 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:46:51.808 +2026-03-12 09:46:51.812 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:46:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:47:02.245 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:47:02.245 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:47:02.245 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:47:02.265 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:47:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:47:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:47:22.542 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:47:22.542 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:47:22.542 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:47:22.547 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:47:22.547 +2026-03-12 09:47:22.552 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:47:22.562 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:47:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:47:32.973 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:47:32.973 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:47:32.973 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:47:32.995 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:47:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:47:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:47:53.272 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:47:53.272 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:47:53.272 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:47:53.277 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:47:53.277 +2026-03-12 09:47:53.282 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:47:53.288 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:47:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:48:03.695 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:48:03.695 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:48:03.695 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:48:03.717 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:48:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:48:15.678 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:48:15.678 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:48:15.678 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:48:15.683 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:48:15.683 +2026-03-12 09:48:15.688 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:48:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:48:24.002 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:48:24.002 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:48:24.002 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:48:24.008 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:48:24.008 +2026-03-12 09:48:24.013 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:48:24.019 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:48:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:48:34.409 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:48:34.409 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:48:34.409 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:48:34.429 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:48:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:48:46.416 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:48:46.416 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:48:46.416 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:48:46.422 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:48:46.422 +2026-03-12 09:48:46.428 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:48:46.434 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:48:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:48:54.743 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:48:54.743 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:48:54.743 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:48:54.748 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:48:54.748 +2026-03-12 09:48:54.753 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:48:54.761 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:48:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:49:05.121 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:49:05.121 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:49:05.121 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:49:05.144 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:49:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:49:17.164 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:49:17.164 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:49:17.164 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:49:17.169 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:49:17.169 +2026-03-12 09:49:17.173 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:49:17.180 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:49:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:49:25.474 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:49:25.474 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:49:25.474 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:49:25.479 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:49:25.479 +2026-03-12 09:49:25.483 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:49:25.490 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:49:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:49:35.833 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:49:35.833 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:49:35.833 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 09:49:35.853 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:49:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:49:47.903 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:49:47.904 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:49:47.904 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:49:47.909 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:49:47.909 +2026-03-12 09:49:47.913 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:49:47.920 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:49:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:49:51.548 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:49:51.548 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 09:49:51.548 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 09:49:51.549 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备状态为4,关机,并且startCount为true +2026-03-12 09:49:56.209 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:49:56.209 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:49:56.209 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:49:56.214 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:49:56.214 +2026-03-12 09:49:56.218 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:49:56.225 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:49:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:50:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:50:18.633 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:50:18.633 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:50:18.633 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:50:18.638 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:50:18.638 +2026-03-12 09:50:18.642 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:50:18.650 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:50:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:50:26.944 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:50:26.944 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:50:26.944 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:50:26.949 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:50:26.949 +2026-03-12 09:50:26.953 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:50:26.960 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:50:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:50:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:50:49.363 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:50:49.363 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:50:49.363 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:50:49.368 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:50:49.368 +2026-03-12 09:50:49.373 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:50:49.380 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:50:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:50:57.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:50:57.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:50:57.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:50:57.687 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:50:57.687 +2026-03-12 09:50:57.691 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:50:57.697 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:50:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:51:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:51:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:51:20.097 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:51:20.097 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:51:20.097 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:51:20.104 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:51:20.104 +2026-03-12 09:51:20.111 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:51:20.120 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:51:28.412 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:51:28.413 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:51:28.413 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:51:28.419 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:51:28.419 +2026-03-12 09:51:28.424 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:51:28.432 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:51:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:51:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:51:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:51:50.844 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:51:50.844 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:51:50.844 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:51:50.849 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:51:50.849 +2026-03-12 09:51:50.854 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:51:50.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:51:59.147 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:51:59.147 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:51:59.147 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:51:59.154 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:51:59.154 +2026-03-12 09:51:59.159 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:51:59.169 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:51:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:52:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:52:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:52:21.578 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:52:21.578 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:52:21.578 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:52:21.583 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:52:21.583 +2026-03-12 09:52:21.588 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:52:21.596 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:52:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:52:29.883 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:52:29.884 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:52:29.884 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:52:29.888 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:52:29.888 +2026-03-12 09:52:29.893 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:52:29.899 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:52:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:52:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:52:52.319 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:52:52.319 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:52:52.319 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:52:52.324 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:52:52.324 +2026-03-12 09:52:52.329 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:52:52.336 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:52:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:53:00.642 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:53:00.642 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:53:00.642 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:53:00.648 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:53:00.648 +2026-03-12 09:53:00.654 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:53:00.662 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:53:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:53:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:53:23.049 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:53:23.049 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:53:23.049 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:53:23.056 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:53:23.056 +2026-03-12 09:53:23.063 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:53:23.072 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:53:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:53:31.389 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:53:31.389 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:53:31.389 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:53:31.394 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:53:31.394 +2026-03-12 09:53:31.398 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:53:31.405 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:53:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:53:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:53:53.792 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:53:53.792 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:53:53.792 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:53:53.798 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:53:53.798 +2026-03-12 09:53:53.802 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:53:53.811 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:53:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:54:02.117 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:54:02.117 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:54:02.117 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:54:02.125 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:54:02.125 +2026-03-12 09:54:02.131 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:54:02.141 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:54:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:54:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:54:24.527 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:54:24.527 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:54:24.527 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:54:24.532 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:54:24.532 +2026-03-12 09:54:24.537 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:54:24.544 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:54:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:54:32.863 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:54:32.863 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:54:32.863 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:54:32.869 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:54:32.869 +2026-03-12 09:54:32.874 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:54:32.880 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:54:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:54:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:54:55.258 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:54:55.259 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:54:55.259 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:54:55.264 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:54:55.264 +2026-03-12 09:54:55.268 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:54:55.277 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:54:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:55:03.612 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:55:03.612 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:55:03.612 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:55:03.617 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:55:03.617 +2026-03-12 09:55:03.622 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:55:03.629 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:55:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:55:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:55:25.992 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:55:25.992 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:55:25.992 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:55:25.997 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:55:25.997 +2026-03-12 09:55:26.002 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:55:26.010 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:55:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:55:34.353 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:55:34.353 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:55:34.353 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:55:34.359 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:55:34.359 +2026-03-12 09:55:34.363 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:55:34.371 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:55:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:55:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:55:56.722 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:55:56.722 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:55:56.722 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:55:56.729 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:55:56.729 +2026-03-12 09:55:56.733 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:55:56.739 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:55:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:56:05.094 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:56:05.094 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:56:05.094 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:56:05.101 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:56:05.101 +2026-03-12 09:56:05.107 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:56:05.116 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:56:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:56:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:56:27.452 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:56:27.452 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:56:27.452 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:56:27.458 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:56:27.458 +2026-03-12 09:56:27.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:56:27.469 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:56:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:56:35.830 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:56:35.830 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:56:35.830 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:56:35.835 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:56:35.835 +2026-03-12 09:56:35.839 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:56:35.846 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:56:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:56:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:56:58.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:56:58.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:56:58.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:56:58.187 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:56:58.187 +2026-03-12 09:56:58.192 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:56:58.198 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:56:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:57:06.708 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:57:06.708 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:57:06.708 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:57:06.713 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:57:06.713 +2026-03-12 09:57:06.718 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:57:06.724 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:57:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:57:18.257 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:57:18.257 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:57:18.257 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:57:18.262 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:57:18.262 +2026-03-12 09:57:18.266 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:57:18.273 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:57:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:57:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:57:37.457 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:57:37.457 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:57:37.457 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:57:37.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:57:37.462 +2026-03-12 09:57:37.468 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:57:37.475 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:57:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:57:49.013 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:57:49.013 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:57:49.013 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:57:49.018 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:57:49.018 +2026-03-12 09:57:49.022 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:57:49.029 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:57:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:57:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:58:08.208 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:58:08.208 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:58:08.208 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:58:08.213 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:58:08.213 +2026-03-12 09:58:08.217 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:58:08.225 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:58:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:58:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:58:19.917 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:58:19.917 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:58:19.917 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:58:19.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:58:19.922 +2026-03-12 09:58:19.927 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:58:19.933 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:58:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:58:38.963 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:58:38.963 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:58:38.963 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:58:38.968 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:58:38.968 +2026-03-12 09:58:38.972 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:58:38.978 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:58:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:58:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:58:50.642 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:58:50.642 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:58:50.642 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:58:50.647 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:58:50.647 +2026-03-12 09:58:50.651 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:58:50.658 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:58:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:59:09.702 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:59:09.702 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:59:09.702 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:59:09.708 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:59:09.708 +2026-03-12 09:59:09.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:59:09.719 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:59:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:59:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:59:21.372 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:59:21.373 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:59:21.373 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:59:21.378 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:59:21.378 +2026-03-12 09:59:21.383 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:59:21.390 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:59:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:59:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:59:40.438 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:59:40.438 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 09:59:40.438 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:59:40.443 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:59:40.443 +2026-03-12 09:59:40.449 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:59:40.457 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:59:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 09:59:52.108 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 09:59:52.108 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 09:59:52.108 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 09:59:52.115 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T09:59:52.115 +2026-03-12 09:59:52.121 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 09:59:52.131 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 09:59:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:00:08.382 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:00:08.382 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:00:08.383 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 10:00:08.388 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T10:00:08.388 +2026-03-12 10:00:08.393 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 10:00:08.402 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:00:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:00:10.522 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:00:10.522 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:00:10.522 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:00:10.552 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:00:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:00:22.547 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:00:22.547 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:00:22.547 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 10:00:22.553 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T10:00:22.553 +2026-03-12 10:00:22.557 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 10:00:22.842 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:00:22.842 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:00:22.842 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 10:00:22.848 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T10:00:22.848 +2026-03-12 10:00:22.852 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 10:00:22.860 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:00:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:00:30.969 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:00:30.969 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:00:30.969 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 10:00:30.974 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T10:00:30.974 +2026-03-12 10:00:30.978 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 10:00:30.985 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:00:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:00:41.275 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:00:41.275 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:00:41.275 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:00:41.301 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:00:48.408 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:00:48.409 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:00:48.409 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:00:48.434 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:00:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:00:53.578 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:00:53.578 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:00:53.578 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 10:00:53.583 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T10:00:53.583 +2026-03-12 10:00:53.588 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 10:00:53.595 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:00:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:01:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:01:12.017 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:01:12.018 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:01:12.018 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:01:12.041 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:01:19.132 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:01:19.132 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:01:19.132 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:01:19.154 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:01:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:01:24.313 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:01:24.313 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:01:24.313 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 10:01:24.318 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T10:01:24.318 +2026-03-12 10:01:24.323 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 10:01:24.331 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:01:27.022 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:01:27.022 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:01:27.022 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:01:27.042 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:01:29.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:01:29.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:01:29.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:01:29.205 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:01:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:01:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:01:42.764 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:01:42.764 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:01:42.764 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:01:42.784 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:01:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:01:55.044 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:01:55.044 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:01:55.044 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 10:01:55.052 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T10:01:55.052 +2026-03-12 10:01:55.060 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 10:01:55.069 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:01:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:01:59.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:01:59.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:01:59.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:01:59.960 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:02:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:02:13.503 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:02:13.503 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:02:13.503 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:02:13.524 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:02:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:02:25.777 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:02:25.777 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:02:25.777 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 10:02:25.783 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T10:02:25.783 +2026-03-12 10:02:25.788 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 10:02:25.795 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:02:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:02:30.707 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:02:30.707 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:02:30.707 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:02:30.726 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:02:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:02:44.223 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:02:44.224 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:02:44.224 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:02:44.245 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:02:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:02:56.508 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:02:56.509 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:02:56.509 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 10:02:56.515 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T10:02:56.515 +2026-03-12 10:02:56.521 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 10:02:56.528 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:02:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:03:01.432 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:03:01.432 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:03:01.432 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:03:01.452 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:03:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:03:14.964 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:03:14.964 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:03:14.964 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:03:14.985 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:03:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:03:27.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:03:27.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:03:27.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 10:03:27.244 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T10:03:27.244 +2026-03-12 10:03:27.249 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 10:03:27.256 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:03:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:03:32.168 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:03:32.168 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:03:32.168 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:03:32.188 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:03:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:03:45.699 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:03:45.699 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:03:45.699 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:03:45.720 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:03:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:03:53.612 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:03:53.612 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:03:53.612 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:03:53.637 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:03:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:04:02.914 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:04:02.914 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:04:02.914 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:04:02.932 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:04:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:04:16.423 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:04:16.423 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:04:16.423 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:04:16.444 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:04:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:04:24.353 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:04:24.353 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:04:24.353 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:04:24.374 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:04:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:04:33.652 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:04:33.652 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:04:33.652 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:04:33.674 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:04:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:04:47.174 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:04:47.174 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:04:47.174 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:04:47.198 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:04:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:04:55.114 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:04:55.114 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:04:55.114 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:04:55.135 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:04:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:05:04.392 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:05:04.392 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:05:04.392 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:05:04.414 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:05:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:05:17.918 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:05:17.918 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:05:17.918 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:05:17.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:05:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:05:25.855 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:05:25.855 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:05:25.855 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:05:25.879 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:05:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:05:35.147 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:05:35.147 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:05:35.147 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:05:35.168 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:05:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:05:48.664 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:05:48.664 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:05:48.664 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:05:48.685 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:05:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:05:56.592 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:05:56.592 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:05:56.592 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:05:56.614 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:05:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:06:05.882 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:06:05.883 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:06:05.883 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:06:05.904 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:06:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:06:19.398 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:06:19.398 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:06:19.398 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:06:19.418 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:06:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:06:27.357 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:06:27.357 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:06:27.357 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:06:27.381 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:06:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:06:36.607 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:06:36.607 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:06:36.607 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:06:36.627 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:06:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:06:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:06:50.137 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:06:50.138 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:06:50.138 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:06:50.163 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:06:58.104 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:06:58.104 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:06:58.104 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:06:58.135 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:06:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:07:07.327 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:07:07.327 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:07:07.327 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:07:07.347 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:07:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:07:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:07:20.992 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:07:20.992 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:07:20.992 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:07:21.013 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:07:28.867 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:07:28.867 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:07:28.867 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:07:28.886 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:07:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:07:38.072 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:07:38.072 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:07:38.072 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:07:38.100 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:07:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:07:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:07:51.733 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:07:51.733 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:07:51.733 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:07:51.756 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:07:59.619 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:07:59.619 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:07:59.619 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:07:59.641 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:07:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:08:08.802 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:08:08.802 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:08:08.802 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:08:08.823 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:08:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:08:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:08:22.488 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:08:22.488 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:08:22.488 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:08:22.510 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:08:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:08:30.489 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:08:30.489 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:08:30.489 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:08:30.508 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:08:39.527 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:08:39.527 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:08:39.527 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:08:39.551 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:08:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:08:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:08:53.232 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:08:53.233 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:08:53.233 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:08:53.253 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:08:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:09:01.243 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:09:01.243 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:09:01.243 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:09:01.265 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:09:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:09:10.252 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:09:10.252 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:09:10.252 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:09:10.273 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:09:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:09:23.993 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:09:23.993 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:09:23.993 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:09:24.011 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:09:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:09:31.978 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:09:31.978 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:09:31.978 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:09:31.998 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:09:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:09:40.982 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:09:40.983 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:09:40.983 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:09:41.005 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:09:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:09:54.757 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:09:54.757 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:09:54.757 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:09:54.777 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:09:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:10:02.722 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:10:02.722 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:10:02.722 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:10:02.743 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:10:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:10:11.737 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:10:11.737 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:10:11.737 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:10:11.757 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:10:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:10:25.519 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:10:25.519 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:10:25.519 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:10:25.541 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:10:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:10:33.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:10:33.463 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:10:33.463 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:10:33.484 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:10:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:10:42.508 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:10:42.508 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:10:42.508 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:10:42.528 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:10:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:10:56.242 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:10:56.242 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:10:56.242 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:10:56.264 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:10:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:11:04.198 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:11:04.198 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:11:04.198 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:11:04.222 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:11:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:11:13.227 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:11:13.227 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:11:13.227 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:11:13.251 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:11:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:11:26.992 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:11:26.993 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:11:26.993 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:11:27.014 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:11:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:11:34.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:11:34.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:11:34.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:11:34.958 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:11:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:11:43.957 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:11:43.957 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:11:43.957 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:11:43.979 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:11:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:11:57.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:11:57.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:11:57.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:11:57.734 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:11:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:12:05.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:12:05.683 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:12:05.683 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:12:05.706 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:12:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:12:14.677 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:12:14.677 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:12:14.677 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:12:14.701 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:12:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:12:28.447 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:12:28.447 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:12:28.447 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:12:28.470 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:12:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:12:36.432 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:12:36.432 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:12:36.432 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:12:36.454 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:12:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:12:44.683 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:12:44.683 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:12:44.683 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:12:44.704 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:12:45.407 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:12:45.407 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:12:45.407 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:12:45.428 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:12:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:12:53.652 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:12:53.652 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:12:53.652 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:12:53.673 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:12:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:13:07.172 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:13:07.173 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:13:07.173 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:13:07.199 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:13:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:13:16.132 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:13:16.132 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:13:16.132 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:13:16.162 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:13:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:13:24.392 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:13:24.392 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:13:24.392 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:13:24.413 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:13:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:13:37.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:13:37.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:13:37.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:13:37.943 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:13:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:13:46.888 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:13:46.888 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:13:46.888 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:13:46.907 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:13:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:13:55.129 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:13:55.129 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:13:55.129 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:13:55.159 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:13:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:14:08.662 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:14:08.662 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:14:08.663 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:14:08.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:14:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:14:17.619 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:14:17.619 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:14:17.619 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:14:17.638 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:14:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:14:25.879 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:14:25.880 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:14:25.880 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:14:25.899 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:14:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:14:39.397 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:14:39.397 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:14:39.397 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:14:39.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:14:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:14:48.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:14:48.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:14:48.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:14:48.361 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:14:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:14:56.603 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:14:56.603 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:14:56.603 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:14:56.623 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:14:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:15:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:15:10.133 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:15:10.134 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:15:10.134 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:15:10.162 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:15:14.418 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:15:14.418 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:15:14.418 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:15:14.436 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:15:19.077 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:15:19.077 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:15:19.077 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:15:19.098 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:15:19.502 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:15:19.502 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:15:19.502 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:15:19.521 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:15:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:15:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:15:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:15:40.882 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:15:40.882 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:15:40.882 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:15:40.902 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:15:49.822 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:15:49.822 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:15:49.822 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:15:49.844 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:15:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:15:50.243 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:15:50.243 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:15:50.243 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:15:50.263 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:15:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:16:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:16:11.632 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:16:11.632 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:16:11.632 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:16:11.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:16:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:16:20.542 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:16:20.542 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:16:20.542 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:16:20.563 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:16:20.983 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:16:20.983 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:16:20.983 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:16:21.005 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:16:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:16:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:16:42.393 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:16:42.394 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:16:42.394 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:16:42.412 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:16:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:16:51.274 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:16:51.274 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:16:51.274 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:16:51.295 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:16:51.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:16:51.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:16:51.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:16:51.732 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:16:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:17:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:17:13.147 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:17:13.148 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:17:13.148 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:17:13.175 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:17:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:17:21.992 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:17:21.992 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:17:21.992 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:17:22.015 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:17:22.493 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:17:22.493 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:17:22.493 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:17:22.511 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:17:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:17:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:17:43.902 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:17:43.902 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:17:43.902 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:17:43.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:17:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:17:52.787 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:17:52.787 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:17:52.787 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:17:52.809 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:17:53.232 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:17:53.232 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:17:53.232 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:17:53.251 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:17:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:18:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:18:14.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:18:14.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:18:14.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:18:14.679 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:18:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:18:23.509 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:18:23.509 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:18:23.509 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:18:23.533 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:18:23.953 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:18:23.953 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:18:23.953 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:18:23.974 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:18:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:18:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:18:45.444 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:18:45.444 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:18:45.444 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:18:45.466 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:18:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:18:54.267 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:18:54.267 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:18:54.267 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:18:54.288 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:18:54.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:18:54.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:18:54.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:18:54.695 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:18:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:19:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:19:16.177 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:19:16.177 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:19:16.177 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:19:16.204 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:19:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:19:25.017 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:19:25.017 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:19:25.017 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:19:25.038 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:19:25.412 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:19:25.413 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:19:25.413 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:19:25.431 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:19:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:19:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:19:46.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:19:46.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:19:46.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:19:46.942 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:19:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:19:55.762 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:19:55.762 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:19:55.762 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:19:55.783 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:19:56.147 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:19:56.147 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:19:56.147 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:19:56.172 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:19:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:20:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:20:17.644 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:20:17.644 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:20:17.644 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:20:17.662 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:20:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:20:26.502 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:20:26.503 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:20:26.503 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:20:26.523 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:20:26.912 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:20:26.912 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:20:26.912 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:20:26.932 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:20:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:20:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:20:48.377 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:20:48.377 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:20:48.377 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:20:48.396 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:20:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:20:57.282 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:20:57.282 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:20:57.282 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:20:57.303 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:20:57.653 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:20:57.653 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:20:57.653 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:20:57.673 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:20:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:21:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:21:11.108 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:21:11.108 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:21:11.108 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:21:11.139 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:21:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:21:28.017 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:21:28.017 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:21:28.017 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:21:28.038 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:21:28.412 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:21:28.412 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:21:28.412 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:21:28.436 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:21:29.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:21:29.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:21:29.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:21:29.485 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:21:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:21:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:21:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:21:58.757 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:21:58.757 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:21:58.757 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:21:58.780 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:21:59.173 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:21:59.173 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:21:59.173 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:21:59.204 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:21:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:22:00.197 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:22:00.197 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:22:00.197 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:22:00.227 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:22:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:22:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:22:29.527 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:22:29.527 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:22:29.527 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:22:29.549 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:22:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:22:29.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:22:29.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:22:29.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:22:29.958 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:22:30.947 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:22:30.947 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:22:30.947 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:22:30.966 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:22:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:22:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:22:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:23:00.267 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:23:00.267 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:23:00.267 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:23:00.286 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:23:00.697 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:23:00.697 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:23:00.697 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:23:00.718 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:23:01.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:23:01.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:23:01.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:23:01.702 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:23:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:23:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:23:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:23:30.992 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:23:30.992 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:23:30.992 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:23:31.010 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:23:31.453 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:23:31.453 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:23:31.453 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:23:31.475 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:23:32.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:23:32.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:23:32.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:23:32.439 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:23:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:23:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:23:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:24:01.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:24:01.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:24:01.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:24:01.733 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:24:02.187 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:24:02.187 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:24:02.187 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:24:02.212 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:24:03.162 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:24:03.162 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:24:03.162 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:24:03.190 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:24:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:24:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:24:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:24:32.447 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:24:32.447 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:24:32.447 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:24:32.470 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:24:32.938 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:24:32.938 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:24:32.938 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:24:32.960 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:24:33.912 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:24:33.912 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:24:33.912 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:24:33.933 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:24:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:24:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:24:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:25:03.177 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:25:03.177 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:25:03.177 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:25:03.207 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:25:03.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:25:03.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:25:03.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:25:03.703 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:25:04.647 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:25:04.647 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:25:04.647 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:25:04.668 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:25:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:25:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:25:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:25:33.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:25:33.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:25:33.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:25:33.957 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:25:34.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:25:34.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:25:34.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:25:34.438 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:25:35.387 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:25:35.387 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:25:35.387 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:25:35.407 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:25:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:25:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:25:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:26:04.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:26:04.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:26:04.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:26:04.680 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:26:05.158 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:26:05.158 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:26:05.158 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:26:05.188 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:26:06.127 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:26:06.127 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:26:06.127 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:26:06.153 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:26:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:26:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:26:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:26:35.394 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:26:35.394 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:26:35.394 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:26:35.412 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:26:35.893 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:26:35.893 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:26:35.893 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:26:35.912 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:26:36.872 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:26:36.872 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:26:36.872 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:26:36.893 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:26:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:26:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:26:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:27:06.112 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:27:06.112 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:27:06.112 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:27:06.140 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:27:06.632 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:27:06.632 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:27:06.632 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:27:06.654 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:27:07.627 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:27:07.627 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:27:07.627 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:27:07.649 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:27:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:27:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:27:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:27:36.852 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:27:36.852 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:27:36.852 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:27:36.875 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:27:37.517 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:27:37.517 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:27:37.517 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:27:37.538 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:27:38.387 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:27:38.387 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:27:38.387 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:27:38.411 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:27:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:27:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:27:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:28:07.572 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:28:07.572 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:28:07.572 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:28:07.597 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:28:08.242 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:28:08.242 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:28:08.242 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:28:08.261 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:28:09.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:28:09.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:28:09.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:28:09.176 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:28:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:28:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:28:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:28:38.312 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:28:38.312 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:28:38.312 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:28:38.330 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:28:38.983 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:28:38.983 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:28:38.983 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:28:39.002 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:28:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:28:39.907 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:28:39.907 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:28:39.907 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:28:39.927 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:28:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:28:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:29:09.063 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:29:09.064 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:29:09.064 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:29:09.083 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:29:09.702 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:29:09.702 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:29:09.702 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:29:09.720 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:29:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:29:10.692 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:29:10.692 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:29:10.692 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:29:10.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:29:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:29:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:29:39.795 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:29:39.795 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:29:39.795 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:29:39.816 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:29:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:29:40.443 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:29:40.443 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:29:40.443 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:29:40.466 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:29:41.432 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:29:41.432 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:29:41.432 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:29:41.452 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:29:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:29:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:30:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:30:10.517 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:30:10.518 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:30:10.518 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:30:10.540 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:30:11.187 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:30:11.187 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:30:11.187 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:30:11.207 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:30:12.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:30:12.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:30:12.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:30:12.177 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:30:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:30:22.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:30:22.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:30:22.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 10:30:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:30:35.142 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:30:35.142 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:30:35.142 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:30:35.170 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:30:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:30:41.237 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:30:41.237 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:30:41.237 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:30:41.264 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:30:44.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:30:44.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:30:44.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 10:30:44.678 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T10:30:44.678 +2026-03-12 10:30:44.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 10:30:46.251 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:30:46.251 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:30:46.251 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 10:30:46.258 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T10:30:46.258 +2026-03-12 10:30:46.263 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 10:30:46.269 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:30:47.887 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:30:47.887 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001ECA +2026-03-12 10:30:47.887 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 10:30:47.888 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备状态为4,关机,并且startCount为true +2026-03-12 10:30:48.192 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:30:48.192 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:30:48.192 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:30:48.216 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:30:49.807 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:30:49.807 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:30:49.807 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:30:49.830 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:30:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:30:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:31:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:31:18.943 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:31:18.943 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:31:18.943 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:31:18.963 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:31:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:31:20.552 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:31:20.552 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:31:20.552 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:31:20.572 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:31:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:31:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:31:49.678 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:31:49.679 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:31:49.679 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:31:49.698 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:31:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:31:51.312 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:31:51.312 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:31:51.312 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:31:51.331 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:31:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:32:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:32:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:32:20.413 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:32:20.413 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:32:20.413 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:32:20.433 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:32:22.067 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:32:22.067 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:32:22.067 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:32:22.087 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:32:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:32:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:32:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:32:51.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:32:51.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:32:51.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:32:51.181 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:32:52.812 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:32:52.812 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:32:52.812 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:32:52.835 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:32:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:33:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:33:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:33:21.882 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:33:21.882 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:33:21.882 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:33:21.901 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:33:23.542 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:33:23.542 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:33:23.542 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:33:23.564 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:33:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:33:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:33:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:33:52.618 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:33:52.618 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:33:52.618 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:33:52.639 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:33:54.262 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:33:54.262 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:33:54.262 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:33:54.281 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:33:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:34:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:34:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:34:23.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:34:23.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:34:23.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:34:23.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:34:25.003 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:34:25.003 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:34:25.003 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 10:34:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:34:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:34:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:34:51.161 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:34:51.161 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:34:51.161 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 10:34:51.168 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T10:34:51.168 +2026-03-12 10:34:51.176 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 10:34:54.096 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:34:54.097 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:34:54.097 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:34:54.116 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:34:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:35:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:35:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:35:21.895 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:35:21.896 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:35:21.896 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 10:35:21.900 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T10:35:21.900 +2026-03-12 10:35:21.906 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 10:35:21.912 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:35:24.847 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:35:24.847 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:35:24.847 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:35:24.868 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:35:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:35:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:35:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:35:52.632 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:35:52.632 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:35:52.632 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 10:35:52.638 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T10:35:52.638 +2026-03-12 10:35:52.643 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 10:35:52.649 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:35:55.598 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:35:55.599 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:35:55.599 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:35:55.620 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:35:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:36:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:36:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:36:21.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:36:21.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:36:21.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 10:36:21.717 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T10:36:21.717 +2026-03-12 10:36:21.722 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 10:36:21.728 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:36:24.992 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:36:24.992 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:36:24.992 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:36:25.020 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:36:26.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:36:26.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:36:26.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:36:26.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:36:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:36:30.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:36:30.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:36:30.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:36:30.214 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:36:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:36:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:36:53.217 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:36:53.217 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:36:53.217 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:36:53.249 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:36:57.097 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:36:57.097 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:36:57.097 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:36:57.117 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:36:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:37:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:37:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:37:23.977 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:37:23.977 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:37:23.977 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:37:23.997 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:37:27.847 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:37:27.847 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:37:27.847 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:37:27.868 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:37:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:37:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:37:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:37:54.742 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:37:54.742 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:37:54.742 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:37:54.763 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:37:56.728 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:37:56.728 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:37:56.728 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:37:56.748 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:37:58.607 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:37:58.607 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:37:58.607 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:37:58.628 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:37:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:38:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:38:13.463 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:38:13.463 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:38:13.463 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:38:13.482 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:38:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:38:29.372 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:38:29.372 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:38:29.372 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:38:29.391 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:38:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:38:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:38:44.197 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:38:44.197 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:38:44.197 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:38:44.226 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:38:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:38:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:39:00.108 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:39:00.108 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:39:00.108 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:39:00.128 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:39:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:39:14.952 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:39:14.952 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:39:14.952 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:39:14.973 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:39:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:39:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:39:30.843 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:39:30.843 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:39:30.843 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:39:30.864 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:39:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:39:45.692 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:39:45.692 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:39:45.692 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:39:45.713 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:39:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:39:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:40:01.579 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:40:01.579 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:40:01.579 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:40:01.598 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:40:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:40:16.433 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:40:16.433 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:40:16.433 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:40:16.455 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:40:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:40:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:40:32.324 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:40:32.324 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:40:32.324 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:40:32.344 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:40:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:40:47.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:40:47.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:40:47.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:40:47.173 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:40:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:40:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:41:03.112 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:41:03.112 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:41:03.112 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:41:03.131 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:41:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:41:17.872 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:41:17.872 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:41:17.872 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:41:17.891 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:41:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:41:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:41:32.981 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:41:32.982 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:41:32.982 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:41:33.003 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:41:33.847 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:41:33.847 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:41:33.847 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:41:33.867 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:41:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:41:42.132 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:41:42.132 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:41:42.132 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:41:42.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:41:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:41:58.957 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:41:58.957 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:41:58.957 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:41:58.978 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:41:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:42:06.868 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:42:06.868 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:42:06.868 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:42:06.888 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:42:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:42:12.872 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:42:12.872 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:42:12.872 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:42:12.891 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:42:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:42:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:42:37.638 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:42:37.638 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:42:37.638 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:42:37.658 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:42:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:42:43.607 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:42:43.607 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:42:43.607 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:42:43.628 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:42:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:42:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:43:08.393 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:43:08.393 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:43:08.393 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:43:08.413 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:43:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:43:14.352 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:43:14.352 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:43:14.352 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:43:14.375 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:43:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:43:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:43:39.127 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:43:39.127 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:43:39.127 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:43:39.146 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:43:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:43:45.073 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:43:45.073 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:43:45.073 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:43:45.094 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:43:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:43:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:44:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:44:09.867 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:44:09.867 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:44:09.867 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:44:09.885 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:44:15.807 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:44:15.807 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:44:15.807 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:44:15.827 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:44:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:44:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:44:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:44:40.597 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:44:40.597 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:44:40.597 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:44:40.617 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:44:46.562 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:44:46.562 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:44:46.562 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:44:46.582 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:44:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:44:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:45:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:45:11.339 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:45:11.339 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:45:11.339 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:45:11.359 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:45:17.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:45:17.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:45:17.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:45:17.361 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:45:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:45:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:45:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:45:42.084 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:45:42.084 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:45:42.084 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:45:42.104 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:45:48.088 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:45:48.089 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:45:48.089 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:45:48.110 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:45:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:45:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:46:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:46:12.828 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:46:12.828 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:46:12.828 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:46:12.849 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:46:18.832 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:46:18.832 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:46:18.832 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:46:18.853 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:46:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:46:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:46:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:46:43.569 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:46:43.569 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:46:43.569 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:46:43.589 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:46:49.582 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:46:49.582 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:46:49.582 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:46:49.605 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:46:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:46:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:47:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:47:14.307 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:47:14.307 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:47:14.307 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:47:14.334 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:47:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:47:20.322 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:47:20.322 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:47:20.322 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:47:20.348 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:47:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:47:36.755 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:47:36.755 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:47:36.755 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:47:36.774 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:47:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:47:45.060 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:47:45.060 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:47:45.060 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:47:45.082 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:47:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:47:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:48:01.478 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:48:01.478 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:48:01.478 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:48:01.498 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:48:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:48:15.803 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:48:15.803 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:48:15.803 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:48:15.823 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:48:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:48:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:48:32.237 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:48:32.237 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:48:32.237 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:48:32.256 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:48:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:48:46.536 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:48:46.537 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:48:46.537 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:48:46.559 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:48:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:48:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:49:02.987 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:49:02.987 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:49:02.987 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:49:03.008 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:49:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:49:17.317 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:49:17.317 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:49:17.317 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:49:17.344 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:49:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:49:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:49:33.725 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:49:33.725 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:49:33.725 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:49:33.747 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:49:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:49:48.062 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:49:48.062 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:49:48.062 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:49:48.082 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:49:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:49:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:50:04.483 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:50:04.483 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:50:04.483 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:50:04.503 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:50:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:50:18.797 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:50:18.797 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:50:18.797 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:50:18.816 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:50:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:50:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:50:35.217 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:50:35.217 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:50:35.217 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:50:35.237 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:50:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:50:49.538 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:50:49.538 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:50:49.538 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:50:49.558 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:50:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:50:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:51:05.961 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:51:05.962 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:51:05.962 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:51:05.981 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:51:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:51:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:51:20.317 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:51:20.317 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:51:20.317 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:51:20.347 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:51:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:51:36.702 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:51:36.702 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:51:36.702 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:51:36.721 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:51:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:51:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:51:51.077 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:51:51.077 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:51:51.077 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:51:51.097 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:51:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:52:07.442 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:52:07.442 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:52:07.442 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:52:07.463 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:52:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:52:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:52:21.822 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:52:21.822 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:52:21.822 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:52:21.842 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:52:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:52:38.183 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:52:38.183 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:52:38.183 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:52:38.206 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:52:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:52:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:52:52.582 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:52:52.582 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:52:52.582 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:52:52.605 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:52:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:53:08.932 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:53:08.932 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:53:08.932 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:53:08.952 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:53:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:53:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:53:23.322 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:53:23.322 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:53:23.322 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:53:23.343 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:53:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:53:39.667 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:53:39.667 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:53:39.667 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:53:39.689 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:53:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:53:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:53:54.077 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:53:54.077 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:53:54.077 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:53:54.098 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:53:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:54:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:54:10.407 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:54:10.407 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:54:10.407 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:54:10.430 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:54:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:54:24.837 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:54:24.837 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:54:24.837 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:54:24.859 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:54:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:54:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:54:41.157 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:54:41.157 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:54:41.157 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:54:41.179 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:54:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:54:55.602 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:54:55.602 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:54:55.602 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:54:55.625 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:54:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:55:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:55:11.882 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:55:11.882 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:55:11.882 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:55:11.903 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:55:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:55:26.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:55:26.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:55:26.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:55:26.373 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:55:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:55:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:55:42.667 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:55:42.667 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:55:42.667 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:55:42.686 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:55:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:55:57.072 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:55:57.072 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:55:57.072 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:55:57.093 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:55:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:56:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:56:13.412 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:56:13.412 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:56:13.412 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:56:13.437 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:56:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:56:27.812 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:56:27.812 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:56:27.812 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:56:27.834 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:56:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:56:32.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:56:32.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:56:32.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:56:32.371 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:56:39.332 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:56:39.332 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:56:39.332 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:56:39.356 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:56:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:56:44.157 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:56:44.157 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:56:44.157 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:56:44.178 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:56:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:56:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:57:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:57:10.066 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:57:10.067 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:57:10.067 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:57:10.088 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:57:14.902 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:57:14.902 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:57:14.902 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:57:14.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:57:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:57:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:57:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:57:40.817 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:57:40.817 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:57:40.817 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:57:40.839 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:57:45.648 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:57:45.648 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:57:45.648 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:57:45.667 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:57:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:57:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:58:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:58:11.572 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:58:11.572 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:58:11.572 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:58:11.591 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:58:16.392 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:58:16.392 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:58:16.392 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:58:16.420 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:58:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:58:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:58:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:58:42.312 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:58:42.312 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:58:42.312 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:58:42.332 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:58:47.162 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:58:47.162 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:58:47.162 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:58:47.180 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:58:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:58:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:59:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:59:13.052 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:59:13.052 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:59:13.052 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:59:13.074 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:59:17.917 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:59:17.917 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:59:17.917 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:59:17.938 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:59:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:59:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:59:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:59:43.782 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:59:43.782 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 10:59:43.782 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:59:43.803 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:59:48.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 10:59:48.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 10:59:48.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 10:59:48.695 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 10:59:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 10:59:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:00:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:00:14.502 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:00:14.502 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:00:14.502 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:00:14.522 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:00:19.412 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:00:19.412 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:00:19.412 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:00:19.444 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:00:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:00:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:00:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:00:45.242 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:00:45.242 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:00:45.242 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:00:45.266 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:00:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:00:50.162 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:00:50.162 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:00:50.162 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:00:50.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:00:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:01:02.961 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:01:02.962 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:01:02.962 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 11:01:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:01:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:01:20.917 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:01:20.917 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:01:20.917 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:01:20.940 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:01:25.652 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:01:25.652 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:01:25.652 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 11:01:25.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T11:01:25.657 +2026-03-12 11:01:25.663 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 11:01:28.986 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:01:28.986 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:01:28.986 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 11:01:28.991 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T11:01:28.991 +2026-03-12 11:01:28.995 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 11:01:29.002 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:01:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:01:31.197 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:01:31.197 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:01:31.197 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:01:31.227 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:01:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:01:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:01:51.662 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:01:51.662 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:01:51.662 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:01:51.684 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:01:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:02:01.952 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:02:01.952 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:02:01.952 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:02:01.973 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:02:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:02:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:02:22.397 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:02:22.397 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:02:22.397 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:02:22.418 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:02:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:02:32.687 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:02:32.687 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:02:32.687 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:02:32.707 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:02:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:02:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:02:53.142 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:02:53.142 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:02:53.142 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:02:53.165 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:02:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:03:03.416 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:03:03.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:03:03.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:03:03.440 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:03:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:03:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:03:23.882 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:03:23.882 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:03:23.882 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:03:23.900 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:03:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:03:34.162 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:03:34.162 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:03:34.162 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:03:34.184 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:03:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:03:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:03:54.622 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:03:54.623 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:03:54.623 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:03:54.643 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:03:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:04:04.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:04:04.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:04:04.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:04:04.902 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:04:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:04:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:04:25.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:04:25.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:04:25.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:04:25.382 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:04:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:04:35.622 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:04:35.622 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:04:35.622 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:04:35.645 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:04:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:04:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:04:56.092 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:04:56.092 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:04:56.092 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:04:56.117 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:04:59.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:04:59.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:04:59.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:04:59.735 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:04:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:05:06.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:05:06.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:05:06.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:05:06.385 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:05:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:05:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:05:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:05:30.472 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:05:30.472 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:05:30.472 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:05:30.497 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:05:37.107 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:05:37.107 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:05:37.107 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:05:37.129 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:05:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:05:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:05:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:06:01.347 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:06:01.347 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:06:01.347 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:06:01.366 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:06:07.852 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:06:07.852 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:06:07.852 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:06:07.872 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:06:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:06:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:06:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:06:32.077 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:06:32.077 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:06:32.077 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:06:32.097 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:06:38.572 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:06:38.572 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:06:38.572 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:06:38.591 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:06:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:06:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:06:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:07:02.812 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:07:02.812 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:07:02.812 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:07:02.831 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:07:09.306 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:07:09.306 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:07:09.306 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:07:09.327 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:07:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:07:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:07:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:07:33.552 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:07:33.552 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:07:33.552 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:07:33.572 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:07:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:07:40.051 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:07:40.052 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:07:40.052 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:07:40.073 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:07:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:07:50.321 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:07:50.322 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:07:50.322 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:07:50.344 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:07:56.951 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:07:56.951 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:07:56.951 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:07:56.977 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:07:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:08:04.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:08:04.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:08:04.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:08:04.308 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:08:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:08:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:08:27.722 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:08:27.722 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:08:27.722 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:08:27.744 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:08:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:08:35.027 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:08:35.027 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:08:35.027 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:08:35.045 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:08:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:08:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:08:58.492 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:08:58.492 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:08:58.492 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:08:58.516 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:08:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:09:05.762 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:09:05.762 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:09:05.762 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:09:05.783 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:09:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:09:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:09:29.232 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:09:29.232 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:09:29.232 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:09:29.252 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:09:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:09:36.512 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:09:36.512 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:09:36.512 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:09:36.557 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:09:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:09:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:09:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:09:59.972 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:09:59.972 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:09:59.972 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:09:59.991 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:10:07.262 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:10:07.262 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:10:07.262 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:10:07.280 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:10:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:10:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:10:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:10:30.707 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:10:30.707 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:10:30.707 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:10:30.728 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:10:37.997 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:10:37.997 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:10:37.997 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:10:38.018 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:10:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:10:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:10:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:11:01.447 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:11:01.447 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:11:01.447 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:11:01.468 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:11:08.722 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:11:08.722 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:11:08.722 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:11:08.743 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:11:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:11:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:11:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:11:32.306 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:11:32.306 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:11:32.306 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:11:32.325 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:11:39.457 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:11:39.457 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:11:39.457 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:11:39.479 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:11:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:11:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:11:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:12:03.047 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:12:03.047 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:12:03.047 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:12:03.068 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:12:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:12:10.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:12:10.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:12:10.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:12:10.203 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:12:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:12:27.097 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:12:27.097 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:12:27.097 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:12:27.117 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:12:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:12:33.792 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:12:33.792 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:12:33.792 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:12:33.811 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:12:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:12:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:12:57.857 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:12:57.857 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:12:57.857 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:12:57.875 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:12:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:13:04.511 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:13:04.511 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:13:04.511 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:13:04.556 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:13:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:13:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:13:28.607 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:13:28.607 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:13:28.607 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:13:28.627 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:13:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:13:35.261 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:13:35.262 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:13:35.262 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:13:35.281 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:13:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:13:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:13:59.332 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:13:59.332 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:13:59.332 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:13:59.352 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:13:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:14:05.997 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:14:05.997 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:14:05.997 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:14:06.018 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:14:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:14:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:14:22.361 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:14:22.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:14:22.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:14:22.380 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:14:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:14:30.072 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:14:30.072 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:14:30.072 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:14:30.093 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:14:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:14:40.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:14:40.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:14:40.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:14:40.731 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:14:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:14:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:15:00.812 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:15:00.812 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:15:00.812 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:15:00.836 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:15:05.454 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:15:05.454 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:15:05.454 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 11:15:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:15:11.466 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:15:11.467 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:15:11.467 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:15:11.486 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:15:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:15:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:15:33.158 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:15:33.158 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:15:33.158 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 11:15:33.164 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T11:15:33.164 +2026-03-12 11:15:33.169 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 11:15:33.244 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:15:33.244 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:15:33.244 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 11:15:33.248 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T11:15:33.248 +2026-03-12 11:15:33.253 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 11:15:33.262 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:15:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:15:42.212 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:15:42.212 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:15:42.212 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:15:42.231 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:15:46.007 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:15:46.007 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:15:46.007 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:15:46.033 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:15:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:15:55.153 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:15:55.153 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:15:55.153 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:15:55.174 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:15:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:16:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:16:12.951 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:16:12.952 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:16:12.952 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:16:12.974 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:16:17.727 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:16:17.727 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:16:17.727 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:16:17.748 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:16:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:16:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:16:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:16:43.707 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:16:43.707 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:16:43.707 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:16:43.728 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:16:48.457 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:16:48.458 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:16:48.458 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:16:48.478 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:16:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:16:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:17:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:17:14.481 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:17:14.481 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:17:14.481 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:17:14.501 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:17:19.183 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:17:19.183 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:17:19.183 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:17:19.203 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:17:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:17:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:17:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:17:45.217 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:17:45.217 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:17:45.217 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:17:45.239 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:17:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:17:49.903 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:17:49.903 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:17:49.903 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:17:49.921 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:17:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:18:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:18:15.817 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:18:15.817 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:18:15.817 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:18:15.837 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:18:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:18:20.642 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:18:20.642 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:18:20.642 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:18:20.663 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:18:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:18:30.067 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:18:30.067 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:18:30.067 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:18:30.087 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:18:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:18:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:18:51.383 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:18:51.383 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:18:51.383 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:18:51.405 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:18:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:19:00.807 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:19:00.807 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:19:00.807 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:19:00.828 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:19:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:19:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:19:22.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:19:22.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:19:22.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:19:22.144 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:19:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:19:31.551 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:19:31.552 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:19:31.552 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:19:31.587 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:19:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:19:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:19:52.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:19:52.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:19:52.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:19:52.885 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:19:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:20:02.307 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:20:02.307 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:20:02.307 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:20:02.330 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:20:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:20:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:20:23.583 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:20:23.583 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:20:23.583 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:20:23.610 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:20:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:20:33.052 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:20:33.052 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:20:33.052 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:20:33.072 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:20:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:20:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:20:54.328 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:20:54.328 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:20:54.328 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:20:54.349 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:20:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:21:03.782 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:21:03.782 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:21:03.782 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:21:03.802 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:21:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:21:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:21:25.062 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:21:25.062 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:21:25.062 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:21:25.082 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:21:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:21:34.636 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:21:34.636 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:21:34.636 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:21:34.659 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:21:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:21:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:21:55.803 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:21:55.804 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:21:55.804 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:21:55.823 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:21:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:22:05.382 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:22:05.382 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:22:05.382 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:22:05.404 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:22:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:22:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:22:26.537 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:22:26.538 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:22:26.538 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:22:26.571 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:22:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:22:36.121 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:22:36.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:22:36.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:22:36.141 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:22:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:22:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:22:57.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:22:57.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:22:57.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:22:57.306 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:22:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:23:06.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:23:06.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:23:06.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:23:06.885 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:23:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:23:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:23:28.023 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:23:28.024 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:23:28.024 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:23:28.046 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:23:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:23:37.612 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:23:37.612 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:23:37.612 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:23:37.632 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:23:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:23:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:23:58.743 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:23:58.743 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:23:58.743 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:23:58.764 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:23:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:24:08.367 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:24:08.367 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:24:08.367 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:24:08.388 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:24:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:24:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:24:29.483 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:24:29.483 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:24:29.483 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:24:29.502 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:24:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:24:39.131 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:24:39.132 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:24:39.132 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:24:39.156 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:24:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:24:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:24:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:25:00.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:25:00.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:25:00.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:25:00.260 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:25:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:25:09.901 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:25:09.901 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:25:09.901 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:25:09.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:25:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:25:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:25:30.993 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:25:30.993 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:25:30.993 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:25:31.015 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:25:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:25:40.673 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:25:40.673 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:25:40.673 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:25:40.692 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:25:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:25:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:26:01.814 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:26:01.814 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:26:01.814 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:26:01.834 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:26:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:26:11.427 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:26:11.427 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:26:11.427 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:26:11.447 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:26:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:26:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:26:32.572 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:26:32.572 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:26:32.572 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:26:32.601 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:26:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:26:42.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:26:42.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:26:42.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:26:42.174 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:26:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:26:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:27:03.338 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:27:03.338 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:27:03.338 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:27:03.359 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:27:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:27:12.892 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:27:12.892 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:27:12.892 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:27:12.912 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:27:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:27:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:27:34.077 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:27:34.078 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:27:34.078 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:27:34.096 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:27:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:27:43.633 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:27:43.633 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:27:43.633 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:27:43.653 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:27:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:27:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:28:04.831 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:28:04.831 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:28:04.831 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:28:04.849 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:28:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:28:14.367 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:28:14.367 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:28:14.367 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:28:14.387 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:28:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:28:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:28:35.574 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:28:35.575 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:28:35.575 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:28:35.604 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:28:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:28:45.111 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:28:45.112 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:28:45.112 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:28:45.131 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:28:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:28:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:29:06.318 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:29:06.318 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:29:06.318 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:29:06.338 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:29:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:29:15.852 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:29:15.852 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:29:15.852 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:29:15.874 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:29:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:29:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:29:37.047 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:29:37.048 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:29:37.048 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:29:37.067 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:29:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:29:46.592 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:29:46.592 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:29:46.592 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:29:46.621 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:29:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:29:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:30:07.778 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:30:07.778 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:30:07.778 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:30:07.799 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:30:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:30:17.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:30:17.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:30:17.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:30:17.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:30:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:30:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:30:38.517 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:30:38.518 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:30:38.518 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:30:38.537 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:30:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:30:42.071 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:30:42.072 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:30:42.072 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:30:42.092 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:30:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:30:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:31:09.252 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:31:09.252 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:31:09.252 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:31:09.271 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:31:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:31:12.832 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:31:12.832 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:31:12.832 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:31:12.851 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:31:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:31:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:31:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:31:39.993 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:31:39.993 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:31:39.993 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:31:40.016 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:31:43.622 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:31:43.622 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:31:43.622 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:31:43.642 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:31:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:31:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:32:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:32:10.727 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:32:10.728 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:32:10.728 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:32:10.748 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:32:14.341 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:32:14.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:32:14.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:32:14.363 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:32:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:32:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:32:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:32:41.483 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:32:41.483 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:32:41.483 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:32:41.504 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:32:45.082 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:32:45.082 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:32:45.082 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:32:45.101 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:32:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:32:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:33:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:33:12.222 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:33:12.222 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:33:12.222 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:33:12.243 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:33:15.823 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:33:15.823 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:33:15.823 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:33:15.842 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:33:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:33:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:33:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:33:42.963 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:33:42.963 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:33:42.963 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:33:42.983 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:33:46.556 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:33:46.556 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:33:46.556 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:33:46.582 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:33:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:33:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:34:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:34:13.697 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:34:13.697 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:34:13.697 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:34:13.720 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:34:17.301 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:34:17.301 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:34:17.302 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:34:17.321 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:34:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:34:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:34:37.767 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:34:37.767 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:34:37.767 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:34:37.786 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:34:38.576 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:34:38.576 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:34:38.576 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:34:38.604 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:34:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:34:44.422 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:34:44.422 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:34:44.422 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:34:44.442 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:34:46.038 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:34:46.038 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:34:46.038 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:34:46.058 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:34:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:34:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:35:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:35:15.143 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:35:15.143 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:35:15.143 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:35:15.164 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:35:16.782 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:35:16.782 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:35:16.782 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:35:16.802 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:35:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:35:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:35:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:35:45.893 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:35:45.893 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:35:45.893 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:35:45.914 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:35:47.522 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:35:47.522 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:35:47.522 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:35:47.542 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:35:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:35:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:36:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:36:11.261 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:36:11.261 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:36:11.261 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 11:36:16.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:36:16.683 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:36:16.683 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:36:16.704 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:36:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:36:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:36:31.361 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:36:31.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:36:31.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 11:36:31.367 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T11:36:31.367 +2026-03-12 11:36:31.372 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 11:36:32.282 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:36:32.282 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:36:32.282 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 11:36:32.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T11:36:32.287 +2026-03-12 11:36:32.291 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 11:36:32.297 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:36:34.831 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:36:34.831 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:36:34.831 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:36:34.854 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:36:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:36:47.442 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:36:47.442 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:36:47.442 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:36:47.463 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:36:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:36:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:37:05.551 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:37:05.551 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:37:05.551 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:37:05.572 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:37:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:37:18.183 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:37:18.183 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:37:18.183 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:37:18.202 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:37:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:37:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:37:36.286 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:37:36.286 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:37:36.286 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:37:36.308 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:37:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:37:48.940 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:37:48.940 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:37:48.940 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:37:48.962 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:37:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:37:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:38:07.038 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:38:07.038 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:38:07.038 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:38:07.061 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:38:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:38:19.687 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:38:19.687 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:38:19.687 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:38:19.709 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:38:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:38:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:38:37.782 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:38:37.782 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:38:37.782 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:38:37.802 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:38:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:38:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:38:50.441 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:38:50.441 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:38:50.441 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:38:50.463 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:38:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:39:08.501 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:39:08.501 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:39:08.501 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:39:08.521 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:39:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:39:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:39:21.204 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:39:21.204 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:39:21.204 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:39:21.224 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:39:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:39:39.236 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:39:39.236 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:39:39.236 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:39:39.257 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:39:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:39:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:39:51.962 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:39:51.963 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:39:51.963 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:39:51.982 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:39:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:40:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:40:09.986 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:40:09.987 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:40:09.987 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:40:10.007 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:40:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:40:22.697 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:40:22.698 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:40:22.698 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:40:22.719 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:40:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:40:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:40:40.731 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:40:40.731 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:40:40.731 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:40:40.753 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:40:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:40:53.438 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:40:53.438 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:40:53.438 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:40:53.457 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:40:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:41:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:41:11.472 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:41:11.472 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:41:11.472 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:41:11.491 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:41:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:41:24.177 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:41:24.178 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:41:24.178 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:41:24.199 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:41:24.818 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:41:24.818 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:41:24.818 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:41:24.840 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:41:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:41:34.102 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:41:34.102 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:41:34.102 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:41:34.123 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:41:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:41:42.206 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:41:42.206 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:41:42.206 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:41:42.229 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:41:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:41:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:42:05.063 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:42:05.063 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:42:05.063 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:42:05.082 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:42:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:42:12.951 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:42:12.951 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:42:12.951 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:42:12.973 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:42:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:42:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:42:35.817 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:42:35.817 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:42:35.817 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:42:35.836 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:42:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:42:43.698 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:42:43.698 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:42:43.698 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:42:43.729 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:42:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:42:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:43:06.552 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:43:06.552 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:43:06.552 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:43:06.572 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:43:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:43:14.451 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:43:14.452 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:43:14.452 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:43:14.472 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:43:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:43:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:43:37.293 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:43:37.293 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:43:37.293 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:43:37.312 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:43:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:43:45.186 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:43:45.187 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:43:45.187 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:43:45.208 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:43:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:43:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:44:08.013 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:44:08.013 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:44:08.013 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:44:08.032 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:44:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:44:15.913 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:44:15.913 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:44:15.913 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:44:15.934 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:44:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:44:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:44:38.752 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:44:38.752 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:44:38.752 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:44:38.773 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:44:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:44:46.647 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:44:46.647 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:44:46.647 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:44:46.673 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:44:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:44:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:45:09.488 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:45:09.488 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:45:09.488 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:45:09.510 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:45:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:45:17.386 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:45:17.386 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:45:17.386 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:45:17.406 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:45:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:45:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:45:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:45:40.232 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:45:40.233 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:45:40.233 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:45:40.253 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:45:48.112 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:45:48.112 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:45:48.112 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:45:48.132 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:45:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:45:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:46:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:46:10.968 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:46:10.968 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:46:10.968 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:46:10.989 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:46:16.598 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:46:16.598 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:46:16.598 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 11:46:18.831 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:46:18.831 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:46:18.831 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:46:18.852 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:46:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:46:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:46:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:46:43.108 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:46:43.108 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:46:43.108 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 11:46:43.113 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T11:46:43.113 +2026-03-12 11:46:43.118 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 11:46:49.616 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:46:49.617 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:46:49.617 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:46:49.638 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:46:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:46:53.821 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:46:53.821 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:46:53.821 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 11:46:53.826 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T11:46:53.826 +2026-03-12 11:46:53.830 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 11:46:53.837 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:46:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:47:00.150 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:47:00.150 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:47:00.150 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:47:00.181 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:47:06.511 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:47:06.511 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:47:06.511 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:47:06.531 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:47:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:47:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:47:20.381 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:47:20.381 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:47:20.381 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:47:20.403 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:47:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:47:37.260 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:47:37.261 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:47:37.261 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:47:37.280 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:47:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:47:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:47:51.141 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:47:51.141 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:47:51.141 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:47:51.161 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:47:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:48:08.001 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:48:08.001 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:48:08.001 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:48:08.025 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:48:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:48:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:48:21.896 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:48:21.896 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:48:21.896 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:48:21.916 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:48:24.120 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:48:24.121 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:48:24.121 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:48:24.141 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:48:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:48:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:48:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:48:52.651 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:48:52.652 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:48:52.652 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:48:52.673 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:48:54.861 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:48:54.861 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:48:54.861 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:48:54.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:48:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:49:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:49:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:49:23.406 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:49:23.407 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:49:23.407 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:49:23.428 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:49:25.595 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:49:25.595 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:49:25.595 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:49:25.617 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:49:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:49:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:49:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:49:54.166 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:49:54.166 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:49:54.166 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:49:54.193 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:49:56.311 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:49:56.311 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:49:56.311 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:49:56.333 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:49:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:50:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:50:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:50:24.893 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:50:24.893 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:50:24.893 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:50:24.913 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:50:27.046 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:50:27.046 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:50:27.046 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:50:27.067 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:50:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:50:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:50:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:50:55.628 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:50:55.628 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:50:55.628 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:50:55.648 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:50:57.780 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:50:57.780 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:50:57.780 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:50:57.800 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:50:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:51:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:51:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:51:26.371 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:51:26.372 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:51:26.372 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:51:26.390 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:51:28.521 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:51:28.521 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:51:28.521 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:51:28.539 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:51:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:51:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:51:43.801 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:51:43.801 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:51:43.801 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:51:43.821 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:51:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:51:57.111 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:51:57.112 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:51:57.112 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:51:57.132 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:51:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:52:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:52:14.535 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:52:14.536 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:52:14.536 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:52:14.557 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:52:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:52:27.847 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:52:27.847 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:52:27.847 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:52:27.870 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:52:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:52:31.025 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:52:31.026 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:52:31.026 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:52:31.049 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:52:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:52:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:52:58.586 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:52:58.587 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:52:58.587 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:52:58.609 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:52:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:53:01.771 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:53:01.771 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:53:01.771 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:53:01.801 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:53:08.098 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:53:08.098 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:53:08.098 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:53:08.119 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:53:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:53:13.096 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:53:13.096 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:53:13.096 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:53:13.117 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:53:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:53:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:53:32.521 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:53:32.521 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:53:32.521 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:53:32.541 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:53:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:53:43.861 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:53:43.861 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:53:43.861 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:53:43.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:53:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:53:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:54:03.261 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:54:03.261 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:54:03.261 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:54:03.282 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:54:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:54:14.622 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:54:14.622 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:54:14.622 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:54:14.641 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:54:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:54:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:54:34.010 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:54:34.010 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:54:34.010 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:54:34.030 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:54:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:54:45.382 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:54:45.382 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:54:45.382 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:54:45.405 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:54:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:54:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:55:04.746 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:55:04.746 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:55:04.746 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:55:04.775 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:55:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:55:16.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:55:16.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:55:16.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:55:16.143 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:55:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:55:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:55:35.486 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:55:35.486 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:55:35.486 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:55:35.507 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:55:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:55:46.857 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:55:46.857 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:55:46.857 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:55:46.879 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:55:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:55:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:56:06.216 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:56:06.216 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:56:06.216 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:56:06.235 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:56:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:56:17.596 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:56:17.597 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:56:17.597 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:56:17.617 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:56:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:56:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:56:36.932 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:56:36.932 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:56:36.932 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:56:36.952 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:56:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:56:48.336 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:56:48.336 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:56:48.336 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:56:48.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:56:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:56:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:57:07.781 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:57:07.781 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:57:07.781 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:57:07.808 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:57:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:57:16.531 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:57:16.531 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:57:16.531 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:57:16.551 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:57:19.137 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:57:19.138 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:57:19.138 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:57:19.157 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:57:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:57:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:57:34.705 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:57:34.706 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:57:34.706 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:57:34.726 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:57:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:57:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:57:49.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:57:49.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:57:49.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:57:49.900 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:57:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:58:05.422 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:58:05.422 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:58:05.422 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:58:05.444 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:58:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:58:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:58:20.616 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:58:20.617 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:58:20.617 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:58:20.639 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:58:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:58:36.167 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:58:36.167 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:58:36.167 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:58:36.188 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:58:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:58:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:58:51.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:58:51.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:58:51.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:58:51.382 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:58:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:59:06.906 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:59:06.906 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:59:06.906 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:59:06.927 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:59:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:59:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:59:22.096 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:59:22.096 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:59:22.096 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:59:22.118 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:59:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:59:37.640 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:59:37.640 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 11:59:37.640 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:59:37.661 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:59:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:59:42.061 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 11:59:42.061 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 11:59:42.061 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 11:59:42.081 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 11:59:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 11:59:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:00:08.396 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:00:08.396 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:00:08.396 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:00:08.415 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:00:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:00:12.821 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:00:12.821 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:00:12.821 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:00:12.860 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:00:15.281 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:00:15.281 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:00:15.281 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:00:15.303 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:00:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:00:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:00:39.151 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:00:39.151 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:00:39.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:00:39.172 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:00:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:00:46.001 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:00:46.001 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:00:46.001 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:00:46.021 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:00:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:00:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:01:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:01:09.905 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:01:09.906 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:01:09.906 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:01:09.927 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:01:16.742 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:01:16.742 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:01:16.742 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:01:16.762 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:01:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:01:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:01:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:01:40.655 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:01:40.655 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:01:40.655 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:01:40.675 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:01:47.478 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:01:47.478 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:01:47.478 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:01:47.497 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:01:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:01:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:02:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:02:11.406 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:02:11.406 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:02:11.406 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:02:11.428 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:02:18.226 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:02:18.226 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:02:18.226 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:02:18.247 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:02:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:02:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:02:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:02:42.156 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:02:42.156 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:02:42.156 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:02:42.178 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:02:48.991 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:02:48.991 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:02:48.991 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:02:49.014 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:02:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:02:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:03:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:03:12.891 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:03:12.891 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:03:12.891 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:03:12.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:03:19.762 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:03:19.762 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:03:19.762 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:03:19.782 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:03:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:03:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:03:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:03:43.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:03:43.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:03:43.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:03:43.677 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:03:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:03:50.502 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:03:50.502 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:03:50.502 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:03:50.523 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:03:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:04:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:04:14.401 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:04:14.401 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:04:14.401 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:04:14.423 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:04:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:04:21.256 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:04:21.256 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:04:21.256 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:04:21.277 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:04:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:04:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:04:45.140 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:04:45.140 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:04:45.140 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:04:45.164 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:04:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:04:52.006 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:04:52.006 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:04:52.006 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:04:52.028 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:04:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:05:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:05:15.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:05:15.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:05:15.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:05:15.899 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:05:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:05:22.766 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:05:22.767 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:05:22.767 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:05:22.788 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:05:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:05:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:05:46.615 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:05:46.616 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:05:46.616 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:05:46.634 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:05:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:05:53.516 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:05:53.516 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:05:53.516 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:05:53.535 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:05:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:06:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:06:17.346 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:06:17.346 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:06:17.346 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:06:17.367 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:06:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:06:24.247 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:06:24.247 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:06:24.247 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:06:24.266 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:06:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:06:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:06:48.076 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:06:48.076 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:06:48.076 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:06:48.096 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:06:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:06:54.988 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:06:54.988 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:06:54.988 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:06:55.012 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:06:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:07:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:07:10.741 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:07:10.741 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:07:10.741 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 12:07:18.840 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:07:18.841 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:07:18.841 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:07:18.874 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:07:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:07:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:07:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:07:49.571 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:07:49.571 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:07:49.571 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:07:49.595 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:07:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:07:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:08:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:08:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:08:20.312 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:08:20.313 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:08:20.313 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:08:20.332 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:08:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:08:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:08:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:08:51.030 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:08:51.031 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:08:51.031 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:08:51.053 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:08:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:09:01.516 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:09:01.516 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:09:01.516 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:09:01.536 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:09:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:09:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:09:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:09:32.266 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:09:32.266 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:09:32.266 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:09:32.291 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:09:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:09:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:09:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:10:02.901 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:10:02.901 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:10:02.901 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:10:02.933 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:10:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:10:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:10:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:10:33.666 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:10:33.666 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:10:33.666 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:10:33.687 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:10:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:10:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:10:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:11:04.431 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:11:04.431 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:11:04.431 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:11:04.450 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:11:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:11:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:11:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:11:35.176 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:11:35.176 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:11:35.176 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:11:35.195 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:11:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:11:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:11:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:12:05.925 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:12:05.926 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:12:05.926 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:12:05.958 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:12:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:12:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:12:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:12:36.671 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:12:36.671 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:12:36.671 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:12:36.691 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:12:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:12:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:12:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:13:07.430 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:13:07.431 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:13:07.431 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:13:07.452 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:13:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:13:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:13:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:13:38.187 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:13:38.187 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:13:38.187 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:13:38.208 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:13:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:13:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:13:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:14:08.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:14:08.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:14:08.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:14:08.967 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:14:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:14:11.115 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:14:11.115 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:14:11.115 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:14:11.135 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:14:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:14:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:14:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:14:41.852 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:14:41.852 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:14:41.852 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:14:41.872 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:14:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:14:51.972 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:14:51.972 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:14:51.972 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:14:51.999 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:14:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:15:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:15:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:15:22.721 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:15:22.721 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:15:22.721 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:15:22.740 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:15:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:15:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:15:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:15:53.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:15:53.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:15:53.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:15:53.484 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:15:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:16:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:16:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:16:24.210 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:16:24.211 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:16:24.211 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:16:24.231 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:16:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:16:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:16:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:16:54.930 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:16:54.931 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:16:54.931 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:16:54.960 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:16:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:17:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:17:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:17:25.710 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:17:25.710 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:17:25.710 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:17:25.730 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:17:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:17:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:17:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:17:56.452 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:17:56.452 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:17:56.453 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:17:56.472 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:17:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:18:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:18:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:18:27.191 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:18:27.191 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:18:27.191 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:18:27.211 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:18:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:18:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:18:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:18:57.931 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:18:57.931 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:18:57.931 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:18:57.957 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:18:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:19:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:19:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:19:28.681 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:19:28.681 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:19:28.681 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:19:28.704 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:19:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:19:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:19:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:19:59.440 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:19:59.440 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:19:59.440 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:19:59.463 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:19:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:20:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:20:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:20:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:20:30.181 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:20:30.181 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:20:30.181 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:20:30.199 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:20:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:20:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:20:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:21:00.936 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:21:00.936 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:21:00.936 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:21:00.977 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:21:03.596 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:21:03.596 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EA2 +2026-03-12 12:21:03.596 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 12:21:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:21:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:21:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:21:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:21:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:21:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:22:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:22:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:22:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:22:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:22:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:22:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:23:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:23:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:23:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:23:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:23:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:23:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:24:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:24:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:24:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:24:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:24:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:24:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:25:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:25:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:25:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:25:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:25:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:25:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:26:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:26:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:26:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:26:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:26:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:26:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:27:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:27:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:27:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:27:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:27:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:27:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:28:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:28:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:28:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:28:35.757 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:28:35.757 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:28:35.757 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 12:28:35.764 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T12:28:35.764 +2026-03-12 12:28:35.769 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 12:28:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:28:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:28:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:29:06.522 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:29:06.523 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:29:06.523 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 12:29:06.528 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T12:29:06.528 +2026-03-12 12:29:06.532 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 12:29:06.540 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:29:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:29:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:29:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:29:37.271 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:29:37.271 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:29:37.271 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 12:29:37.276 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T12:29:37.276 +2026-03-12 12:29:37.281 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 12:29:37.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:29:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:29:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:29:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:30:08.012 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:30:08.012 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:30:08.012 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 12:30:08.021 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T12:30:08.021 +2026-03-12 12:30:08.029 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 12:30:08.041 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:30:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:30:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:30:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:30:38.762 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:30:38.762 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:30:38.762 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 12:30:38.767 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T12:30:38.767 +2026-03-12 12:30:38.772 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 12:30:38.781 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:30:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:30:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:30:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:31:09.521 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:31:09.521 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:31:09.521 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 12:31:09.527 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T12:31:09.527 +2026-03-12 12:31:09.531 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 12:31:09.538 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:31:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:31:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:31:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:31:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:31:40.277 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:31:40.277 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:31:40.277 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 12:31:40.282 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T12:31:40.282 +2026-03-12 12:31:40.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 12:31:40.295 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:31:42.926 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:31:42.926 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:31:42.926 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 12:31:42.932 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T12:31:42.932 +2026-03-12 12:31:42.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 12:31:42.946 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:31:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:31:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:32:01.086 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:32:01.086 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:32:01.086 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 12:32:01.093 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T12:32:01.093 +2026-03-12 12:32:01.100 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 12:32:01.110 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:32:04.652 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:32:04.652 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:32:04.652 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 12:32:04.658 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T12:32:04.658 +2026-03-12 12:32:04.662 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 12:32:04.669 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:32:06.328 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:32:06.328 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:32:06.328 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:32:06.353 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:32:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:32:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:32:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:32:37.066 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:32:37.066 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:32:37.066 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:32:37.089 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:32:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:32:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:32:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:33:07.811 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:33:07.812 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:33:07.812 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:33:07.834 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:33:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:33:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:33:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:33:38.546 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:33:38.546 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:33:38.546 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:33:38.568 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:33:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:33:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:33:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:34:09.316 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:34:09.316 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:34:09.316 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:34:09.337 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:34:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:34:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:34:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:34:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:34:40.086 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:34:40.086 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:34:40.086 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:34:40.118 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:34:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:34:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:35:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:35:10.858 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:35:10.858 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:35:10.858 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:35:10.878 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:35:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:35:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:35:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:35:41.621 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:35:41.621 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:35:41.621 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:35:41.641 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:35:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:35:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:36:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:36:12.376 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:36:12.376 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:36:12.376 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:36:12.399 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:36:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:36:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:36:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:36:43.136 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:36:43.136 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:36:43.136 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:36:43.158 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:36:45.441 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:36:45.441 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:36:45.441 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:36:45.464 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:36:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:36:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:37:09.046 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:37:09.046 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:37:09.046 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:37:09.073 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:37:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:37:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:37:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:37:39.786 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:37:39.786 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:37:39.786 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:37:39.805 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:37:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:37:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:37:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:38:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:38:10.527 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:38:10.527 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:38:10.527 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:38:10.549 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:38:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:38:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:38:32.407 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:38:32.407 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:38:32.407 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:38:32.428 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:38:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:38:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:38:54.181 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:38:54.181 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:38:54.181 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:38:54.201 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:38:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:39:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:39:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:39:24.931 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:39:24.931 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:39:24.931 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:39:24.952 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:39:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:39:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:39:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:39:55.696 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:39:55.696 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:39:55.696 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:39:55.715 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:39:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:40:07.138 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:40:07.138 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:40:07.138 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:40:07.166 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:40:07.915 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:40:07.915 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:40:07.915 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:40:07.936 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:40:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:40:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:40:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:40:38.677 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:40:38.677 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:40:38.677 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:40:38.697 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:40:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:40:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:40:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:41:09.421 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:41:09.421 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:41:09.421 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:41:09.443 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:41:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:41:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:41:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:41:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:41:40.166 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:41:40.166 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:41:40.166 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:41:40.187 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:41:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:41:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:42:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:42:10.961 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:42:10.961 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:42:10.961 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:42:10.983 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:42:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:42:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:42:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:42:41.711 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:42:41.711 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:42:41.711 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:42:41.730 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:42:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:42:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:43:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:43:12.452 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:43:12.452 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:43:12.452 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:43:12.476 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:43:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:43:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:43:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:43:43.196 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:43:43.196 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:43:43.196 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:43:43.215 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:43:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:43:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:44:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:44:13.941 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:44:13.941 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:44:13.941 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:44:13.961 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:44:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:44:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:44:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:44:44.691 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:44:44.691 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:44:44.691 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:44:44.711 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:44:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:44:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:45:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:45:15.426 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:45:15.426 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:45:15.426 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:45:15.447 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:45:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:45:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:45:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:45:46.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:45:46.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:45:46.154 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:45:46.179 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:45:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:45:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:46:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:46:16.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:46:16.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:46:16.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:46:16.901 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:46:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:46:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:46:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:46:47.621 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:46:47.621 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:46:47.621 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:46:47.643 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:46:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:46:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:47:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:47:18.356 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:47:18.356 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:47:18.356 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:47:18.376 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:47:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:47:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:47:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:47:49.101 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:47:49.101 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:47:49.101 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:47:49.121 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:47:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:47:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:48:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:48:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:48:19.859 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:48:19.859 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:48:19.859 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:48:19.879 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:48:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:48:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:48:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:48:50.626 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:48:50.626 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:48:50.626 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:48:50.647 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:48:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:49:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:49:18.731 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:49:18.732 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:49:18.732 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:49:18.753 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:49:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:49:24.601 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:49:24.601 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:49:24.601 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:49:24.621 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:49:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:49:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:49:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:49:55.361 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:49:55.361 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:49:55.361 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:49:55.384 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:49:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:50:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:50:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:50:26.141 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:50:26.141 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:50:26.141 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:50:26.167 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:50:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:50:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:50:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:50:56.886 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:50:56.886 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:50:56.886 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:50:56.906 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:50:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:51:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:51:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:51:27.626 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:51:27.626 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:51:27.626 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:51:27.647 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:51:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:51:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:51:43.923 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:51:43.923 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:51:43.923 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:51:43.944 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:51:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:51:59.495 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:51:59.496 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:51:59.496 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:51:59.517 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:51:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:52:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:52:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:52:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:52:30.286 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:52:30.286 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:52:30.286 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:52:30.309 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:52:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:52:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:52:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:53:01.047 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:53:01.047 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:53:01.047 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:53:01.077 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:53:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:53:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:53:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:53:31.816 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:53:31.816 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:53:31.816 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:53:31.836 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:53:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:53:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:53:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:54:02.542 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:54:02.542 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:54:02.542 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:54:02.565 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:54:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:54:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:54:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:54:33.276 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:54:33.276 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:54:33.276 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:54:33.296 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:54:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:54:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:54:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:55:04.016 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:55:04.016 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:55:04.016 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:55:04.034 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:55:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:55:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:55:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:55:34.761 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:55:34.761 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:55:34.761 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:55:34.783 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:55:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:55:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:55:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:56:05.497 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:56:05.497 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:56:05.497 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:56:05.516 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:56:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:56:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:56:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:56:36.235 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:56:36.236 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:56:36.236 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:56:36.257 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:56:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:56:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:56:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:57:06.972 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:57:06.972 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:57:06.972 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:57:06.993 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:57:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:57:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:57:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:57:37.692 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:57:37.692 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:57:37.692 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:57:37.713 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:57:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:57:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:57:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:58:08.426 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:58:08.426 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:58:08.426 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:58:08.446 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:58:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:58:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:58:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:58:39.172 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:58:39.172 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:58:39.172 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:58:39.193 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:58:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:58:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:58:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:59:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:59:09.911 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:59:09.911 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:59:09.911 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:59:09.929 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:59:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:59:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:59:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:59:40.651 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 12:59:40.651 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 12:59:40.651 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 12:59:40.675 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 12:59:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 12:59:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:00:02.795 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:00:02.796 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:00:02.796 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:00:02.816 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:00:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:00:14.616 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:00:14.616 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:00:14.616 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:00:14.637 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:00:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:00:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:00:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:00:45.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:00:45.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:00:45.342 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:00:45.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:00:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:00:58.316 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:00:58.316 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:00:58.316 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:00:58.336 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:00:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:01:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:01:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:01:29.070 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:01:29.070 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:01:29.070 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:01:29.109 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:01:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:01:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:01:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:01:59.846 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:01:59.846 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:01:59.846 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:01:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:01:59.871 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:02:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:02:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:02:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:02:30.661 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:02:30.661 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:02:30.661 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:02:30.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:02:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:02:44.171 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:02:44.171 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:02:44.171 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 13:02:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:02:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:03:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:03:15.590 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:03:15.590 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:03:15.590 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 13:03:15.595 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T13:03:15.595 +2026-03-12 13:03:15.599 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 13:03:19.479 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:03:19.479 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:03:19.479 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 13:03:19.485 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T13:03:19.485 +2026-03-12 13:03:19.489 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 13:03:19.496 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:03:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:03:21.620 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:03:21.620 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:03:21.620 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:03:21.649 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:03:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:03:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:03:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:03:51.042 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:03:51.042 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:03:51.042 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 13:03:51.048 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T13:03:51.048 +2026-03-12 13:03:51.053 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 13:03:52.371 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:03:52.371 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:03:52.371 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:03:52.392 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:03:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:04:00.322 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:04:00.322 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:04:00.322 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 13:04:00.327 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T13:04:00.327 +2026-03-12 13:04:00.331 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 13:04:00.339 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:04:02.854 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:04:02.854 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:04:02.854 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:04:02.877 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:04:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:04:15.923 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:04:15.923 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:04:15.923 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:04:15.943 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:04:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:04:23.491 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:04:23.491 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:04:23.491 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:04:23.510 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:04:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:04:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:04:46.643 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:04:46.643 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:04:46.643 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:04:46.662 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:04:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:04:54.233 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:04:54.233 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:04:54.233 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:04:54.256 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:04:58.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:04:58.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:04:58.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:04:58.483 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:04:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:05:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:05:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:05:24.996 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:05:24.996 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:05:24.996 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:05:25.017 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:05:29.190 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:05:29.190 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:05:29.190 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:05:29.209 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:05:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:05:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:05:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:05:55.710 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:05:55.710 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:05:55.710 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:05:55.731 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:05:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:05:59.879 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:05:59.879 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:05:59.879 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:05:59.898 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:06:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:06:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:06:26.460 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:06:26.460 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:06:26.460 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:06:26.479 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:06:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:06:30.619 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:06:30.619 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:06:30.619 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:06:30.638 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:06:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:06:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:06:57.191 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:06:57.191 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:06:57.191 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:06:57.210 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:06:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:07:01.324 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:07:01.324 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:07:01.324 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:07:01.346 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:07:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:07:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:07:26.729 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:07:26.729 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:07:26.729 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:07:26.747 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:07:27.945 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:07:27.946 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:07:27.946 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:07:27.966 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:07:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:07:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:07:45.438 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:07:45.438 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:07:45.438 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:07:45.459 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:07:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:07:58.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:07:58.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:07:58.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:07:58.700 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:07:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:08:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:08:16.158 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:08:16.158 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:08:16.158 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:08:16.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:08:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:08:29.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:08:29.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:08:29.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:08:29.483 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:08:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:08:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:08:40.605 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:08:40.605 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:08:40.605 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:08:40.624 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:08:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:08:56.602 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:08:56.602 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:08:56.602 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:08:56.621 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:08:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:09:00.211 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:09:00.211 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:09:00.211 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:09:00.230 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:09:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:09:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:09:27.320 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:09:27.320 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:09:27.320 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:09:27.341 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:09:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:09:30.982 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:09:30.982 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:09:30.982 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:09:31.003 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:09:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:09:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:09:58.056 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:09:58.056 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:09:58.056 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:09:58.074 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:09:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:10:01.729 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:10:01.730 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:10:01.730 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:10:01.755 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:10:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:10:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:10:28.809 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:10:28.809 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:10:28.809 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:10:28.831 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:10:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:10:32.485 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:10:32.485 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:10:32.485 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:10:32.506 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:10:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:10:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:10:59.551 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:10:59.551 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:10:59.552 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:10:59.573 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:10:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:11:03.242 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:11:03.242 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:11:03.242 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:11:03.263 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:11:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:11:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:11:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:11:30.294 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:11:30.294 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:11:30.294 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:11:30.313 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:11:34.000 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:11:34.000 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:11:34.000 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:11:34.021 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:11:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:11:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:11:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:12:01.004 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:12:01.004 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:12:01.004 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:12:01.026 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:12:04.735 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:12:04.735 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:12:04.735 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:12:04.754 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:12:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:12:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:12:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:12:31.771 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:12:31.771 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:12:31.771 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:12:31.793 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:12:35.466 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:12:35.466 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:12:35.466 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:12:35.488 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:12:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:12:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:12:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:13:01.415 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:13:01.415 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:13:01.415 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:13:01.437 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:13:06.201 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:13:06.201 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:13:06.201 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:13:06.223 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:13:06.794 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:13:06.794 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:13:06.794 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:13:06.813 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:13:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:13:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:13:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:13:36.970 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:13:36.970 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:13:36.970 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:13:36.989 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:13:37.482 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:13:37.483 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:13:37.483 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:13:37.501 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:13:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:13:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:13:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:14:07.705 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:14:07.705 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:14:07.705 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:14:07.725 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:14:08.315 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:14:08.315 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:14:08.315 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:14:08.337 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:14:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:14:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:14:21.735 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:14:21.735 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:14:21.735 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:14:21.756 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:14:25.564 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:14:25.564 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:14:25.564 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:14:25.584 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:14:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:14:38.437 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:14:38.437 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:14:38.437 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:14:38.457 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:14:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:14:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:14:56.284 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:14:56.284 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:14:56.284 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:14:56.307 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:14:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:15:09.170 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:15:09.171 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:15:09.171 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:15:09.194 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:15:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:15:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:15:26.998 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:15:26.998 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:15:26.998 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:15:27.019 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:15:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:15:34.046 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:15:34.046 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:15:34.046 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:15:34.065 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:15:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:15:39.907 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:15:39.907 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:15:39.907 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:15:39.927 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:15:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:15:49.936 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:15:49.936 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:15:49.936 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:15:49.958 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:15:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:16:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:16:10.643 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:16:10.643 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:16:10.643 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:16:10.662 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:16:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:16:20.630 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:16:20.630 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:16:20.630 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:16:20.650 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:16:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:16:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:16:41.382 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:16:41.382 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:16:41.382 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:16:41.401 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:16:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:16:51.328 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:16:51.328 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:16:51.328 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:16:51.346 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:16:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:17:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:17:12.100 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:17:12.100 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:17:12.100 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:17:12.132 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:17:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:17:22.069 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:17:22.069 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:17:22.069 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:17:22.091 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:17:28.715 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:17:28.715 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 13:17:28.715 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 13:17:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:17:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:17:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:17:52.803 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:17:52.803 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:17:52.803 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:17:52.822 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:17:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:18:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:18:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:18:23.571 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:18:23.571 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:18:23.571 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:18:23.595 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:18:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:18:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:18:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:18:54.275 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:18:54.275 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:18:54.275 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:18:54.296 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:18:55.477 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:18:55.477 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:18:55.477 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:18:55.497 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:18:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:19:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:19:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:19:26.194 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:19:26.194 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:19:26.194 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:19:26.215 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:19:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:19:31.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:19:31.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:19:31.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:19:31.437 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:19:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:19:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:19:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:20:02.119 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:20:02.119 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:20:02.119 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:20:02.151 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:20:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:20:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:20:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:20:32.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:20:32.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:20:32.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:20:32.880 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:20:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:20:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:20:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:21:03.594 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:21:03.594 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:21:03.594 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:21:03.613 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:21:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:21:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:21:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:21:34.313 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:21:34.313 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:21:34.313 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:21:34.334 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:21:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:21:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:21:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:22:05.042 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:22:05.043 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:22:05.043 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:22:05.065 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:22:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:22:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:22:23.836 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:22:23.836 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:22:23.836 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:22:23.857 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:22:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:22:30.103 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:22:30.103 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:22:30.103 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:22:30.131 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:22:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:22:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:22:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:23:00.840 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:23:00.840 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:23:00.840 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:23:00.861 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:23:06.112 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:23:06.112 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:23:06.112 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:23:06.133 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:23:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:23:11.310 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:23:11.310 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:23:11.310 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:23:11.331 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:23:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:23:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:23:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:23:42.049 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:23:42.049 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:23:42.049 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:23:42.070 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:23:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:23:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:24:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:24:12.880 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:24:12.880 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:24:12.880 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:24:12.900 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:24:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:24:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:24:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:24:43.613 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:24:43.613 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:24:43.613 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:24:43.636 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:24:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:24:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:25:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:25:14.326 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:25:14.326 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:25:14.326 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:25:14.345 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:25:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:25:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:25:33.892 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:25:33.892 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:25:33.892 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:25:33.912 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:25:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:25:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:25:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:26:04.633 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:26:04.633 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:26:04.633 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:26:04.654 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:26:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:26:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:26:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:26:35.377 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:26:35.378 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:26:35.378 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:26:35.397 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:26:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:26:44.909 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:26:44.909 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:26:44.909 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:26:44.931 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:26:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:26:52.468 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:26:52.468 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:26:52.468 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:26:52.489 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:26:56.429 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:26:56.429 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:26:56.429 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:26:56.451 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:26:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:27:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:27:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:27:27.168 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:27:27.168 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:27:27.168 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:27:27.212 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:27:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:27:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:27:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:27:57.905 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:27:57.905 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:27:57.905 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:27:57.925 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:27:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:28:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:28:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:28:28.636 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:28:28.636 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:28:28.636 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:28:28.656 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:28:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:28:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:28:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:28:59.375 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:28:59.375 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:28:59.375 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:28:59.397 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:28:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:29:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:29:17.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:29:17.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:29:17.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:29:17.259 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:29:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:29:25.898 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:29:25.898 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:29:25.898 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:29:25.918 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:29:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:29:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:29:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:29:56.637 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:29:56.637 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:29:56.637 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:29:56.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:29:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:30:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:30:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:30:27.350 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:30:27.350 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:30:27.350 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:30:27.369 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:30:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:30:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:30:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:30:58.079 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:30:58.079 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:30:58.079 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:30:58.098 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:30:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:31:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:31:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:31:28.800 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:31:28.800 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:31:28.800 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:31:28.822 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:31:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:31:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:31:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:31:59.531 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:31:59.531 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:31:59.531 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:31:59.554 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:31:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:32:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:32:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:32:27.546 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:32:27.546 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:32:27.546 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:32:27.565 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:32:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:32:36.616 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:32:36.616 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:32:36.616 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:32:36.636 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:32:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:32:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:32:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:33:07.334 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:33:07.334 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:33:07.334 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:33:07.355 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:33:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:33:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:33:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:33:38.062 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:33:38.062 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:33:38.062 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:33:38.082 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:33:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:33:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:33:54.883 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:33:54.883 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:33:54.883 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:33:54.905 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:33:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:34:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:34:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:34:25.736 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:34:25.736 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:34:25.736 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:34:25.757 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:34:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:34:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:34:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:34:56.321 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:34:56.321 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:34:56.321 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:34:56.340 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:34:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:35:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:35:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:35:27.094 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:35:27.094 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:35:27.094 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:35:27.114 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:35:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:35:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:35:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:35:57.821 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:35:57.821 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:35:57.821 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:35:57.843 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:35:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:36:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:36:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:36:28.556 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:36:28.556 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:36:28.556 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:36:28.577 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:36:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:36:35.094 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:36:35.094 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:36:35.094 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:36:35.113 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:36:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:36:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:36:54.569 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:36:54.569 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:36:54.569 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:36:54.591 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:36:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:37:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:37:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:37:25.291 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:37:25.291 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:37:25.291 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:37:25.312 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:37:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:37:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:37:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:37:56.004 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:37:56.005 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:37:56.005 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:37:56.025 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:37:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:38:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:38:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:38:26.731 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:38:26.731 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:38:26.731 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:38:26.751 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:38:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:38:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:38:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:38:57.471 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:38:57.471 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:38:57.472 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:38:57.492 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:38:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:39:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:39:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:39:26.199 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:39:26.199 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:39:26.199 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 13:39:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:39:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:39:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:39:50.268 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:39:50.268 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:39:50.268 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 13:39:50.276 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T13:39:50.276 +2026-03-12 13:39:50.283 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 13:39:51.154 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:39:51.154 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:39:51.154 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 13:39:51.159 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T13:39:51.159 +2026-03-12 13:39:51.163 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 13:39:51.170 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:39:53.147 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:39:53.147 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:39:53.147 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:39:53.173 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:39:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:40:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:40:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:40:23.893 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:40:23.893 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:40:23.893 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:40:23.914 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:40:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:40:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:40:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:40:54.635 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:40:54.635 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:40:54.635 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:40:54.655 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:40:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:41:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:41:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:41:25.373 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:41:25.373 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:41:25.373 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:41:25.393 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:41:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:41:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:41:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:41:56.098 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:41:56.099 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:41:56.099 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:41:56.120 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:41:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:42:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:42:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:42:26.818 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:42:26.818 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:42:26.818 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:42:26.839 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:42:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:42:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:42:46.807 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:42:46.807 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:42:46.807 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:42:46.826 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:42:48.873 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:42:48.873 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:42:48.873 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:42:48.893 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:42:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:42:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:43:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:43:19.613 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:43:19.613 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:43:19.613 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:43:19.632 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:43:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:43:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:43:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:43:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:43:50.344 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:43:50.344 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:43:50.344 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:43:50.365 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:43:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:44:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:44:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:44:21.063 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:44:21.063 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:44:21.063 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:44:21.084 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:44:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:44:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:44:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:44:51.793 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:44:51.793 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:44:51.793 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:44:51.814 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:44:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:45:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:45:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:45:22.515 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:45:22.515 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:45:22.515 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:45:22.533 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:45:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:45:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:45:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:45:53.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:45:53.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:45:53.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:45:53.274 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:45:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:46:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:46:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:46:21.470 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:46:21.470 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:46:21.470 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:46:21.489 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:46:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:46:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:46:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:46:52.198 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:46:52.198 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:46:52.198 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:46:52.218 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:46:52.828 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:46:52.828 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:46:52.828 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:46:52.854 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:46:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:47:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:47:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:47:23.553 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:47:23.553 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:47:23.553 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:47:23.570 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:47:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:47:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:47:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:47:54.283 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:47:54.283 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:47:54.283 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:47:54.312 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:47:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:48:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:48:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:48:25.038 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:48:25.038 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:48:25.038 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:48:25.060 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:48:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:48:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:48:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:48:55.768 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:48:55.768 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:48:55.768 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:48:55.789 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:48:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:49:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:49:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:49:26.488 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:49:26.488 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:49:26.488 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:49:26.510 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:49:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:49:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:49:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:49:57.273 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:49:57.273 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:49:57.273 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:49:57.301 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:49:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:50:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:50:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:50:28.063 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:50:28.063 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:50:28.063 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:50:28.083 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:50:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:50:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:50:46.398 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:50:46.398 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:50:46.398 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:50:46.419 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:50:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:50:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:51:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:51:17.158 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:51:17.158 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:51:17.158 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:51:17.180 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:51:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:51:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:51:36.188 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:51:36.188 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:51:36.188 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:51:36.209 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:51:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:51:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:51:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:52:06.923 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:52:06.923 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:52:06.923 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:52:06.945 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:52:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:52:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:52:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:52:37.663 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:52:37.663 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:52:37.663 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:52:37.686 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:52:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:52:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:52:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:53:08.413 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:53:08.413 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:53:08.413 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:53:08.435 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:53:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:53:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:53:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:53:39.168 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:53:39.168 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:53:39.169 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:53:39.190 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:53:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:53:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:53:59.093 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:53:59.093 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:53:59.093 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:53:59.112 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:53:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:54:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:54:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:54:29.813 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:54:29.813 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:54:29.813 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:54:29.834 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:54:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:54:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:54:43.773 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:54:43.773 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:54:43.773 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:54:43.794 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:54:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:54:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:55:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:55:14.523 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:55:14.523 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:55:14.523 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:55:14.542 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:55:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:55:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:55:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:55:45.240 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:55:45.240 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:55:45.240 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:55:45.259 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:55:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:55:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:56:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:56:15.985 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:56:15.985 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:56:15.985 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:56:16.005 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:56:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:56:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:56:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:56:46.718 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:56:46.718 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:56:46.718 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:56:46.738 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:56:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:56:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:57:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:57:17.455 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:57:17.455 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:57:17.455 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:57:17.475 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:57:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:57:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:57:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:57:48.189 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:57:48.189 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:57:48.189 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:57:48.210 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:57:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:57:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:58:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:58:18.932 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:58:18.933 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:58:18.933 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:58:18.951 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:58:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:58:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:58:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:58:49.655 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:58:49.655 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:58:49.655 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:58:49.676 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:58:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:58:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:59:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:59:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:59:20.363 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:59:20.363 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:59:20.363 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:59:20.382 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:59:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:59:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:59:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 13:59:51.101 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:59:51.101 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:59:51.101 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:59:51.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:59:51.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 13:59:51.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 13:59:51.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 13:59:51.732 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 13:59:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:00:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:00:11.895 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:00:11.895 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:00:11.895 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 14:00:11.901 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T14:00:11.901 +2026-03-12 14:00:11.905 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 14:00:15.815 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:00:15.815 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:00:15.815 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:00:15.833 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:00:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:00:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:00:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:00:42.615 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:00:42.615 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:00:42.615 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 14:00:42.622 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T14:00:42.622 +2026-03-12 14:00:42.627 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 14:00:42.636 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:00:46.594 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:00:46.594 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:00:46.594 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:00:46.613 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:00:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:00:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:01:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:01:13.374 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:01:13.374 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:01:13.374 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 14:01:13.380 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T14:01:13.380 +2026-03-12 14:01:13.385 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 14:01:13.391 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:01:14.109 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:01:14.109 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:01:14.109 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 14:01:14.115 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T14:01:14.115 +2026-03-12 14:01:14.119 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 14:01:14.127 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:01:17.396 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:01:17.396 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:01:17.396 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:01:17.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:01:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:01:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:01:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:01:44.819 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:01:44.819 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:01:44.819 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 14:01:44.824 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T14:01:44.824 +2026-03-12 14:01:44.829 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 14:01:44.836 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:01:48.193 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:01:48.193 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:01:48.193 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:01:48.214 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:01:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:01:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:02:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:02:15.546 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:02:15.546 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:02:15.546 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 14:02:15.551 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T14:02:15.551 +2026-03-12 14:02:15.555 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 14:02:15.562 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:02:18.988 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:02:18.988 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:02:18.988 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:02:19.009 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:02:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:02:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:02:39.566 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:02:39.566 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:02:39.566 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:02:39.586 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:02:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:02:46.266 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:02:46.266 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:02:46.266 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 14:02:46.274 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T14:02:46.274 +2026-03-12 14:02:46.282 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 14:02:46.293 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:02:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:02:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:03:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:03:10.290 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:03:10.290 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:03:10.290 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:03:10.317 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:03:17.011 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:03:17.011 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:03:17.011 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 14:03:17.016 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T14:03:17.016 +2026-03-12 14:03:17.020 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 14:03:17.030 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:03:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:03:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:03:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:03:41.023 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:03:41.024 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:03:41.024 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:03:41.044 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:03:47.739 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:03:47.739 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:03:47.739 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 14:03:47.744 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T14:03:47.744 +2026-03-12 14:03:47.749 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 14:03:47.759 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:03:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:03:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:04:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:04:11.760 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:04:11.760 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:04:11.760 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:04:11.779 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:04:18.464 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:04:18.465 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:04:18.465 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 14:04:18.470 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T14:04:18.470 +2026-03-12 14:04:18.475 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 14:04:18.484 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:04:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:04:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:04:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:04:42.473 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:04:42.473 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:04:42.473 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:04:42.494 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:04:49.189 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:04:49.189 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:04:49.189 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 14:04:49.194 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T14:04:49.194 +2026-03-12 14:04:49.198 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 14:04:49.207 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:04:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:04:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:05:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:05:13.213 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:05:13.213 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:05:13.213 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:05:13.233 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:05:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:05:19.949 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:05:19.949 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:05:19.949 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 14:05:19.955 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T14:05:19.955 +2026-03-12 14:05:19.959 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 14:05:19.966 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:05:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:05:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:05:43.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:05:43.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:05:43.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:05:43.943 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:05:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:05:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:06:03.521 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:06:03.521 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:06:03.521 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:06:03.540 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:06:08.790 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:06:08.790 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:06:08.790 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 14:06:08.795 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T14:06:08.795 +2026-03-12 14:06:08.800 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 14:06:08.807 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:06:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:06:11.255 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:06:11.255 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:06:11.255 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 14:06:11.262 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T14:06:11.262 +2026-03-12 14:06:11.268 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 14:06:11.277 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:06:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:06:22.605 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:06:22.605 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:06:22.605 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:06:22.629 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:06:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:06:34.264 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:06:34.265 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:06:34.265 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:06:34.293 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:06:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:06:42.788 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:06:42.788 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:06:42.788 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:06:42.808 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:06:49.391 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:06:49.391 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:06:49.391 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:06:49.412 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:06:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:06:53.350 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:06:53.350 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:06:53.350 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:06:53.372 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:06:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:07:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:07:15.469 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:07:15.469 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:07:15.469 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:07:15.490 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:07:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:07:24.086 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:07:24.086 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:07:24.086 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:07:24.106 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:07:27.835 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:07:27.835 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:07:27.835 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:07:27.857 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:07:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:07:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:07:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:07:54.805 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:07:54.805 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:07:54.805 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:07:54.826 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:07:58.592 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:07:58.592 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:07:58.592 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:07:58.613 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:07:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:08:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:08:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:08:25.532 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:08:25.532 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:08:25.532 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:08:25.556 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:08:29.334 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:08:29.335 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:08:29.335 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:08:29.361 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:08:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:08:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:08:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:08:56.255 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:08:56.256 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:08:56.256 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:08:56.276 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:08:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:09:00.086 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:09:00.087 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:09:00.087 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:09:00.106 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:09:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:09:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:09:26.985 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:09:26.985 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:09:26.986 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:09:27.005 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:09:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:09:30.807 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:09:30.807 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:09:30.807 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:09:30.826 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:09:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:09:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:09:57.721 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:09:57.721 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:09:57.721 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:09:57.741 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:09:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:10:01.538 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:10:01.538 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:10:01.538 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:10:01.561 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:10:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:10:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:10:28.445 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:10:28.446 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:10:28.446 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:10:28.466 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:10:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:10:32.269 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:10:32.269 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:10:32.269 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:10:32.289 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:10:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:10:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:10:59.195 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:10:59.195 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:10:59.195 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:10:59.218 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:10:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:11:00.257 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:11:00.257 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:11:00.257 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:11:00.277 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:11:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:11:17.268 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:11:17.268 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:11:17.268 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:11:17.289 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:11:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:11:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:11:29.926 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:11:29.926 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:11:29.926 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:11:29.948 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:11:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:11:48.015 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:11:48.015 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:11:48.015 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:11:48.036 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:11:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:11:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:12:00.665 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:12:00.665 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:12:00.665 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:12:00.683 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:12:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:12:18.789 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:12:18.789 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:12:18.789 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:12:18.807 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:12:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:12:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:12:31.416 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:12:31.416 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:12:31.416 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:12:31.437 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:12:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:12:49.553 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:12:49.553 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:12:49.553 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:12:49.571 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:12:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:12:50.186 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:12:50.186 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:12:50.186 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:12:50.207 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:12:54.932 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:12:54.933 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:12:54.933 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:12:54.953 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:12:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:13:02.155 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:13:02.155 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:13:02.155 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:13:02.177 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:13:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:13:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:13:25.680 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:13:25.680 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:13:25.680 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:13:25.703 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:13:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:13:32.925 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:13:32.925 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:13:32.925 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:13:32.949 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:13:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:13:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:13:56.425 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:13:56.425 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:13:56.425 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:13:56.449 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:13:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:14:03.695 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:14:03.695 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:14:03.695 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:14:03.715 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:14:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:14:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:14:27.181 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:14:27.181 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:14:27.181 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:14:27.203 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:14:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:14:34.465 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:14:34.465 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:14:34.465 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:14:34.486 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:14:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:14:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:14:57.916 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:14:57.916 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:14:57.916 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:14:57.935 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:14:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:15:05.240 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:15:05.240 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:15:05.240 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:15:05.261 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:15:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:15:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:15:28.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:15:28.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:15:28.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:15:28.676 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:15:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:15:35.965 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:15:35.965 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:15:35.965 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:15:35.986 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:15:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:15:48.892 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:15:48.892 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:15:48.892 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:15:48.911 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:15:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:15:54.804 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:15:54.804 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:15:54.804 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:15:54.824 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:15:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:16:06.686 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:16:06.686 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:16:06.686 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:16:06.707 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:16:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:16:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:16:25.551 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:16:25.551 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:16:25.551 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:16:25.573 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:16:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:16:33.163 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:16:33.163 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:16:33.163 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 14:16:37.445 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:16:37.445 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:16:37.445 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:16:37.470 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:16:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:16:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:16:58.667 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:16:58.667 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:16:58.667 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 14:16:58.673 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T14:16:58.673 +2026-03-12 14:16:58.677 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 14:16:59.427 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:16:59.427 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:16:59.427 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 14:16:59.433 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T14:16:59.433 +2026-03-12 14:16:59.438 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 14:16:59.446 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:16:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:17:01.892 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:17:01.892 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:17:01.892 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:17:01.916 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:17:08.175 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:17:08.175 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:17:08.175 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:17:08.194 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:17:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:17:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:17:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:17:32.650 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:17:32.650 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:17:32.650 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:17:32.671 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:17:38.900 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:17:38.900 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:17:38.900 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:17:38.920 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:17:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:17:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:17:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:18:03.445 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:18:03.445 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:18:03.445 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:18:03.470 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:18:09.635 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:18:09.635 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:18:09.635 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:18:09.655 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:18:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:18:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:18:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:18:34.207 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:18:34.207 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:18:34.207 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:18:34.226 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:18:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:18:40.367 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:18:40.367 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:18:40.367 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:18:40.390 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:18:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:18:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:19:04.925 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:19:04.925 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:19:04.925 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:19:04.946 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:19:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:19:11.101 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:19:11.101 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:19:11.101 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:19:11.120 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:19:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:19:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:19:35.669 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:19:35.669 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:19:35.669 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:19:35.690 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:19:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:19:41.825 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:19:41.826 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:19:41.826 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:19:41.846 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:19:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:19:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:20:06.407 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:20:06.407 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:20:06.407 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:20:06.433 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:20:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:20:12.580 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:20:12.580 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:20:12.580 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:20:12.601 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:20:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:20:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:20:37.136 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:20:37.136 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:20:37.136 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:20:37.156 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:20:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:20:43.306 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:20:43.306 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:20:43.306 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:20:43.325 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:20:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:20:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:21:07.864 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:21:07.864 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:21:07.864 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:21:07.883 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:21:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:21:14.100 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:21:14.100 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:21:14.100 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:21:14.123 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:21:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:21:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:21:38.582 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:21:38.582 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:21:38.582 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:21:38.601 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:21:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:21:44.836 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:21:44.836 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:21:44.836 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:21:44.855 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:21:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:21:55.017 [http-nio-8082-exec-10] INFO o.a.coyote.http11.Http11Processor - Error parsing HTTP request header + Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level. +java.lang.IllegalArgumentException: Invalid character found in method name [0x160x030x030x010xa40x010x000x010xa00x030x03;0xdb0xf10x8c0xf20x1eG+0xed0x1d0xf1?0xebp=0xaf0xef0xb40xda0x08*0xa020xca0xde0xfe0xfb+0xd30x1f0xbd0x8e ]. HTTP method names must be tokens + at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:419) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:271) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.lang.Thread.run(Thread.java:750) +2026-03-12 14:21:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:22:09.310 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:22:09.311 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:22:09.311 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:22:09.332 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:22:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:22:15.565 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:22:15.565 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:22:15.565 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:22:15.587 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:22:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:22:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:22:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:22:40.050 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:22:40.050 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:22:40.050 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:22:40.071 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:22:43.470 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:22:43.470 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:22:43.470 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:22:43.493 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:22:46.305 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:22:46.305 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:22:46.305 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:22:46.327 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:22:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:22:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:23:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:23:14.184 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:23:14.184 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:23:14.184 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:23:14.205 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:23:17.031 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:23:17.031 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:23:17.031 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:23:17.050 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:23:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:23:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:23:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:23:44.921 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:23:44.921 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:23:44.921 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:23:44.941 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:23:46.490 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:23:46.490 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:23:46.490 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:23:46.508 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:23:47.755 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:23:47.756 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:23:47.756 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:23:47.776 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:23:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:23:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:24:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:24:17.243 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:24:17.243 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:24:17.243 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:24:17.264 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:24:18.470 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:24:18.470 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:24:18.470 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:24:18.496 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:24:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:24:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:24:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:24:47.968 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:24:47.968 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:24:47.969 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:24:47.990 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:24:49.195 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:24:49.195 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:24:49.195 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:24:49.216 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:24:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:24:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:25:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:25:18.699 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:25:18.699 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:25:18.699 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:25:18.721 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:25:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:25:19.921 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:25:19.921 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:25:19.921 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:25:19.940 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:25:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:25:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:25:43.034 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:25:43.034 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:25:43.034 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:25:43.056 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:25:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:25:50.671 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:25:50.671 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:25:50.671 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:25:50.691 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:25:54.987 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:25:54.987 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:25:54.987 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:25:55.007 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:25:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:26:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:26:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:26:21.405 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:26:21.405 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001E25 +2026-03-12 14:26:21.405 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 14:26:25.746 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:26:25.746 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:26:25.746 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:26:25.769 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:26:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:26:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:26:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:26:56.486 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:26:56.486 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:26:56.486 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:26:56.506 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:26:57.117 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:26:57.117 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:26:57.117 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:26:57.140 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:26:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:27:09.073 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:27:09.073 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:27:09.073 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:27:09.092 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:27:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:27:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:27:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:27:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:27:39.871 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:27:39.871 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:27:39.871 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:27:39.890 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:27:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:27:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:28:04.039 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:28:04.039 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:28:04.039 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:28:04.060 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:28:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:28:14.759 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:28:14.759 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:28:14.759 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:28:14.781 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:28:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:28:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:28:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:28:45.503 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:28:45.503 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:28:45.503 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:28:45.523 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:28:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:28:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:29:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:29:16.224 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:29:16.224 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:29:16.224 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:29:16.244 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:29:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:29:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:29:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:29:46.945 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:29:46.945 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:29:46.945 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:29:46.965 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:29:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:29:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:30:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:30:17.681 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:30:17.681 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:30:17.681 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:30:17.702 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:30:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:30:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:30:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:30:48.431 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:30:48.431 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:30:48.431 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:30:48.461 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:30:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:30:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:31:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:31:19.184 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:31:19.184 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:31:19.184 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:31:19.206 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:31:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:31:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:31:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:31:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:31:49.910 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:31:49.910 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:31:49.910 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:31:49.932 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:31:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:32:02.774 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:32:02.774 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:32:02.774 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:32:02.795 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:32:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:32:16.048 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:32:16.048 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:32:16.048 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:32:16.071 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:32:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:32:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:32:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:32:46.775 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:32:46.775 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:32:46.775 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:32:46.796 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:32:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:32:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:33:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:33:17.669 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:33:17.669 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:33:17.669 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:33:17.688 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:33:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:33:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:33:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:33:48.403 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:33:48.403 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:33:48.403 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:33:48.426 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:33:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:33:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:34:04.132 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:34:04.132 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:34:04.132 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:34:04.153 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:34:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:34:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:34:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:34:34.864 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:34:34.864 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:34:34.864 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:34:34.883 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:34:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:34:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:34:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:35:05.602 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:35:05.602 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:35:05.602 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:35:05.623 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:35:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:35:16.177 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:35:16.177 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:35:16.177 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:35:16.197 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:35:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:35:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:35:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:35:46.908 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:35:46.908 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:35:46.908 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:35:46.927 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:35:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:35:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:36:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:36:17.683 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:36:17.683 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:36:17.683 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:36:17.704 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:36:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:36:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:36:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:36:48.414 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:36:48.414 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:36:48.414 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:36:48.435 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:36:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:36:52.606 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:36:52.607 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:36:52.607 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:36:52.625 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:36:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:37:05.931 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:37:05.931 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:37:05.931 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:37:05.952 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:37:07.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:37:07.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:37:07.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:37:07.142 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:37:08.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:37:08.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:37:08.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:37:08.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:37:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:37:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:37:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:37:39.648 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:37:39.648 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:37:39.648 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:37:39.669 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:37:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:37:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:37:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:38:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:38:10.441 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:38:10.441 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:38:10.441 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:38:10.461 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:38:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:38:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:38:35.431 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:38:35.431 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:38:35.431 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:38:35.452 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:38:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:38:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:38:53.217 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:38:53.217 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:38:53.217 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:38:53.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:38:57.234 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:38:57.235 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:38:57.235 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:38:57.254 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:38:57.873 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:38:57.873 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:38:57.873 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:38:57.895 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:38:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:39:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:39:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:39:28.619 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:39:28.619 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:39:28.619 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:39:28.639 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:39:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:39:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:39:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:39:59.349 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:39:59.349 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:39:59.349 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:39:59.370 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:39:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:40:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:40:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:40:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:40:30.074 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:40:30.074 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:40:30.074 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:40:30.098 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:40:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:40:49.403 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:40:49.403 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:40:49.403 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:40:49.423 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:40:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:40:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:41:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:41:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:41:20.145 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:41:20.145 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:41:20.145 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:41:20.166 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:41:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:41:34.726 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:41:34.726 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:41:34.726 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:41:34.748 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:41:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:41:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:41:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:42:05.463 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:42:05.463 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:42:05.463 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:42:05.482 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:42:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:42:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:42:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:42:36.230 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:42:36.230 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:42:36.230 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:42:36.252 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:42:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:42:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:42:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:43:06.959 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:43:06.960 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:43:06.960 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:43:06.979 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:43:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:43:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:43:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:43:37.700 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:43:37.700 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:43:37.700 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:43:37.725 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:43:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:43:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:43:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:44:08.453 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:44:08.453 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:44:08.453 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:44:08.479 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:44:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:44:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:44:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:44:39.191 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:44:39.191 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:44:39.191 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:44:39.211 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:44:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:44:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:44:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:45:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:45:09.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:45:09.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:45:09.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:45:09.960 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:45:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:45:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:45:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:45:40.680 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:45:40.681 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:45:40.681 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:45:40.702 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:45:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:45:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:46:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:46:11.434 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:46:11.434 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:46:11.434 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:46:11.453 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:46:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:46:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:46:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:46:42.157 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:46:42.157 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:46:42.157 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:46:42.179 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:46:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:46:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:47:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:47:12.919 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:47:12.919 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:47:12.919 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:47:12.941 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:47:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:47:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:47:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:47:43.669 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:47:43.669 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:47:43.669 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:47:43.688 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:47:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:47:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:48:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:48:14.471 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:48:14.471 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:48:14.471 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:48:14.492 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:48:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:48:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:48:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:48:45.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:48:45.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:48:45.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:48:45.307 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:48:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:48:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:49:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:49:16.125 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:49:16.125 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:49:16.125 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:49:16.145 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:49:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:49:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:49:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:49:46.923 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:49:46.923 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:49:46.923 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:49:46.943 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:49:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:49:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:50:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:50:17.729 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:50:17.729 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:50:17.729 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:50:17.749 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:50:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:50:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:50:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:50:48.465 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:50:48.465 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:50:48.465 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:50:48.487 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:50:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:50:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:51:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:51:19.206 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:51:19.206 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:51:19.206 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:51:19.228 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:51:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:51:23.854 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:51:23.854 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:51:23.854 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 14:51:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:51:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:51:48.358 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:51:48.359 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:51:48.359 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 14:51:48.363 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T14:51:48.363 +2026-03-12 14:51:48.368 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 14:51:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:51:52.444 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:51:52.445 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:51:52.445 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 14:51:52.450 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T14:51:52.450 +2026-03-12 14:51:52.454 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 14:51:52.463 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:51:54.465 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:51:54.465 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:51:54.465 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:51:54.490 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:51:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:52:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:52:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:52:25.219 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:52:25.219 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:52:25.219 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:52:25.239 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:52:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:52:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:52:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:52:55.957 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:52:55.957 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:52:55.957 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:52:55.977 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:52:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:53:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:53:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:53:26.674 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:53:26.674 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:53:26.674 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:53:26.693 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:53:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:53:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:53:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:53:57.430 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:53:57.430 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:53:57.430 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:53:57.452 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:53:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:54:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:54:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:54:28.145 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:54:28.146 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:54:28.146 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:54:28.165 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:54:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:54:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:54:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:54:58.869 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:54:58.870 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:54:58.870 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:54:58.888 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:54:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:55:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:55:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:55:29.603 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:55:29.603 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:55:29.603 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:55:29.639 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:55:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:55:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:55:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:55:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:56:00.346 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:56:00.346 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:56:00.346 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:56:00.368 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:56:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:56:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:56:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:56:31.187 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:56:31.187 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:56:31.187 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:56:31.206 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:56:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:56:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:56:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:57:01.925 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:57:01.925 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:57:01.925 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:57:01.947 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:57:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:57:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:57:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:57:32.678 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:57:32.678 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:57:32.678 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:57:32.699 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:57:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:57:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:57:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:58:03.423 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:58:03.423 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:58:03.423 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:58:03.443 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:58:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:58:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:58:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:58:34.159 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:58:34.159 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:58:34.159 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:58:34.179 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:58:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:58:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:58:57.910 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:58:57.910 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:58:57.910 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:58:57.935 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:58:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:59:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:59:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:59:28.651 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:59:28.652 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:59:28.652 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:59:28.688 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:59:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:59:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:59:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 14:59:59.404 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 14:59:59.404 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 14:59:59.404 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 14:59:59.426 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 14:59:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:00:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:00:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:00:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:00:30.198 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:00:30.199 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:00:30.199 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:00:30.221 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:00:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:00:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:00:55.024 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:00:55.024 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:00:55.024 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:00:55.046 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:00:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:01:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:01:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:01:25.879 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:01:25.879 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:01:25.879 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:01:25.900 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:01:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:01:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:01:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:01:56.649 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:01:56.649 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:01:56.649 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:01:56.679 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:01:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:02:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:02:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:02:27.419 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:02:27.419 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:02:27.419 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:02:27.439 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:02:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:02:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:02:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:02:58.194 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:02:58.194 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:02:58.196 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:02:58.216 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:02:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:03:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:03:11.379 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:03:11.379 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:03:11.379 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:03:11.401 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:03:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:03:21.209 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:03:21.209 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:03:21.209 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:03:21.233 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:03:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:03:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:03:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:03:51.950 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:03:51.950 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:03:51.950 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:03:51.972 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:03:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:04:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:04:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:04:22.689 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:04:22.689 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:04:22.689 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:04:22.725 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:04:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:04:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:04:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:04:53.439 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:04:53.439 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:04:53.439 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:04:53.461 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:04:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:05:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:05:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:05:24.154 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:05:24.154 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:05:24.154 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:05:24.175 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:05:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:05:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:05:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:05:54.879 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:05:54.879 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:05:54.879 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:05:54.899 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:05:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:06:08.659 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:06:08.659 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:06:08.659 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:06:08.695 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:06:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:06:14.299 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:06:14.299 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:06:14.299 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:06:14.320 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:06:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:06:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:06:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:06:45.039 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:06:45.039 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:06:45.039 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:06:45.060 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:06:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:06:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:07:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:07:15.774 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:07:15.774 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:07:15.774 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:07:15.794 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:07:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:07:23.974 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:07:23.974 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:07:23.974 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:07:23.994 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:07:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:07:31.374 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:07:31.374 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:07:31.374 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:07:31.392 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:07:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:07:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:07:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:08:02.113 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:08:02.113 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:08:02.113 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:08:02.135 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:08:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:08:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:08:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:08:32.826 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:08:32.826 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:08:32.826 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:08:32.848 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:08:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:08:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:08:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:09:03.554 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:09:03.554 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:09:03.554 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:09:03.576 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:09:05.564 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:09:05.564 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:09:05.564 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:09:05.583 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:09:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:09:18.445 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:09:18.445 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:09:18.445 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:09:18.469 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:09:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:09:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:09:36.419 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:09:36.419 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:09:36.419 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:09:36.439 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:09:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:09:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:09:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:10:01.979 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:10:01.979 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:10:01.979 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:10:02.001 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:10:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:10:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:10:26.365 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:10:26.365 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:10:26.365 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:10:26.383 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:10:26.984 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:10:26.984 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:10:26.984 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:10:27.002 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:10:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:10:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:10:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:10:57.759 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:10:57.759 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:10:57.759 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:10:57.781 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:10:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:11:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:11:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:11:28.614 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:11:28.615 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:11:28.615 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:11:28.634 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:11:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:11:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:11:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:11:59.405 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:11:59.405 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:11:59.405 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:11:59.424 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:11:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:12:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:12:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:12:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:12:30.210 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:12:30.210 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:12:30.210 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:12:30.230 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:12:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:12:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:12:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:13:00.994 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:13:00.994 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:13:00.994 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:13:01.015 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:13:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:13:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:13:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:13:31.724 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:13:31.724 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:13:31.724 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:13:31.750 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:13:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:13:42.824 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:13:42.825 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:13:42.825 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 15:13:42.846 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 15:13:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:13:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:14:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:14:12.796 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 15:14:12.796 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001DDF +2026-03-12 15:14:12.796 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 15:14:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:14:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:14:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:14:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:14:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:15:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:15:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:15:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:15:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:15:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:15:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:16:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:16:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:16:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:16:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:16:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:16:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:17:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:17:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:17:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:17:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:17:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:17:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:18:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:18:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:18:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:18:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:18:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:18:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:19:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:19:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:19:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:19:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:19:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:19:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:20:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:20:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:20:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:20:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:20:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:20:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:21:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:21:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:21:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:21:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:21:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:21:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:22:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:22:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:22:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:22:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:22:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:22:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:23:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:23:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:23:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:23:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:23:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:23:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:24:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:24:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:24:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:24:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:24:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:24:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:25:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:25:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:25:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:25:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:25:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:25:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:26:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:26:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:26:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:26:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:26:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:26:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:27:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:27:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:27:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:27:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:27:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:27:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:28:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:28:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:28:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:28:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:28:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:28:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:29:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:29:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:29:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:29:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:29:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:29:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:30:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:30:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:30:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:30:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:30:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:30:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:31:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:31:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:31:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:31:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:31:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:31:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:32:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:32:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:32:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:32:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:32:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:32:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:33:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:33:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:33:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:33:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:33:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:33:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:34:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:34:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:34:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:34:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:34:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:34:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:35:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:35:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:35:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:35:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:35:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:35:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:36:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:36:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:36:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:36:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:36:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:36:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:37:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:37:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:37:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:37:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:37:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:37:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:38:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:38:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:38:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:38:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:38:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:38:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:39:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:39:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:39:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:39:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:39:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:39:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:40:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:40:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:40:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:40:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:40:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:40:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:41:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:41:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:41:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:41:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:41:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:41:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:42:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:42:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:42:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:42:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:42:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:42:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:43:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:43:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:43:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:43:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:43:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:43:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:44:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:44:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:44:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:44:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:44:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:44:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:45:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:45:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:45:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:45:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:45:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:45:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:46:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:46:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:46:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:46:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:46:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:46:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:47:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:47:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:47:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:47:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:47:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:47:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:48:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:48:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:48:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:48:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:48:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:48:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:49:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:49:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:49:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:49:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:49:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:49:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:50:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:50:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:50:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:50:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:50:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:50:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:51:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:51:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:51:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:51:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:51:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:51:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:52:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:52:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:52:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:52:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:52:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:52:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:53:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:53:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:53:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:53:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:53:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:53:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:54:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:54:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:54:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:54:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:54:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:54:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:55:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:55:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:55:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:55:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:55:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:55:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:56:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:56:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:56:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:56:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:56:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:56:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:57:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:57:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:57:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:57:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:57:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:57:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:58:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:58:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:58:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:58:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:58:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:58:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:59:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:59:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:59:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:59:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:59:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 15:59:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:00:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:00:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:00:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:00:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:00:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:00:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:01:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:01:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:01:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:01:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:01:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:01:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:02:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:02:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:02:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:02:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:02:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:02:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:03:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:03:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:03:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:03:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:03:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:03:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:04:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:04:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:04:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:04:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:04:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:04:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:05:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:05:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:05:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:05:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:05:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:05:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:06:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:06:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:06:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:06:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:06:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:06:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:07:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:07:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:07:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:07:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:07:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:07:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:08:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:08:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:08:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:08:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:08:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:08:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:09:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:09:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:09:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:09:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:09:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:09:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:10:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:10:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:10:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:10:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:10:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:10:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:11:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:11:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:11:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:11:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:11:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:11:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:12:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:12:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:12:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:12:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:12:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:12:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:13:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:13:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:13:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:13:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:13:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:13:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:14:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:14:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:14:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:14:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:14:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:14:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:15:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:15:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:15:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:15:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:15:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:15:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:16:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:16:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:16:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:16:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:16:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:16:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:17:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:17:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:17:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:17:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:17:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:17:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:18:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:18:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:18:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:18:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:18:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:18:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:19:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:19:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:19:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:19:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:19:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:19:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:20:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:20:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:20:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:20:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:20:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:20:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:21:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:21:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:21:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:21:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:21:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:21:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:22:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:22:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:22:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:22:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:22:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:22:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:23:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:23:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:23:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:23:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:23:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:23:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:24:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:24:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:24:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:24:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:24:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:24:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:25:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:25:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:25:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:25:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:25:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:25:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:26:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:26:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:26:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:26:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:26:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:26:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:27:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:27:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:27:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:27:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:27:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:27:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:28:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:28:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:28:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:28:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:28:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:28:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:29:06.227 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:29:06.228 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:29:06.228 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:29:06.233 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:29:06.233 +2026-03-12 16:29:06.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:29:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:29:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:29:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:29:36.966 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:29:36.966 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:29:36.966 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:29:36.975 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:29:36.975 +2026-03-12 16:29:36.983 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:29:36.998 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:29:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:29:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:29:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:30:07.706 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:30:07.706 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:30:07.706 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:30:07.713 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:30:07.713 +2026-03-12 16:30:07.718 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:30:07.726 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:30:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:30:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:30:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:30:38.460 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:30:38.461 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:30:38.461 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:30:38.467 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:30:38.467 +2026-03-12 16:30:38.473 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:30:38.482 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:30:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:30:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:30:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:31:09.197 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:31:09.197 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:31:09.197 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:31:09.203 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:31:09.203 +2026-03-12 16:31:09.209 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:31:09.218 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:31:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:31:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:31:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:31:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:31:39.977 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:31:39.977 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:31:39.977 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:31:39.984 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:31:39.984 +2026-03-12 16:31:39.990 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:31:40.000 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:31:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:31:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:32:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:32:10.707 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:32:10.707 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:32:10.707 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:32:10.713 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:32:10.713 +2026-03-12 16:32:10.717 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:32:10.724 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:32:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:32:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:32:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:32:41.437 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:32:41.437 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:32:41.437 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:32:41.442 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:32:41.442 +2026-03-12 16:32:41.447 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:32:41.454 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:32:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:32:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:33:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:33:12.167 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:33:12.167 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:33:12.167 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:33:12.172 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:33:12.172 +2026-03-12 16:33:12.177 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:33:12.185 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:33:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:33:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:33:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:33:42.897 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:33:42.898 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:33:42.898 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:33:42.903 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:33:42.903 +2026-03-12 16:33:42.907 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:33:42.914 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:33:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:33:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:34:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:34:13.627 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:34:13.627 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:34:13.627 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:34:13.633 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:34:13.633 +2026-03-12 16:34:13.637 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:34:13.643 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:34:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:34:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:34:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:34:44.357 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:34:44.357 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:34:44.357 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:34:44.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:34:44.362 +2026-03-12 16:34:44.367 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:34:44.374 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:34:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:34:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:35:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:35:15.092 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:35:15.092 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:35:15.092 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:35:15.098 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:35:15.098 +2026-03-12 16:35:15.103 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:35:15.109 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:35:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:35:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:35:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:35:45.827 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:35:45.827 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:35:45.827 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:35:45.832 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:35:45.832 +2026-03-12 16:35:45.836 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:35:45.843 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:35:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:35:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:36:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:36:16.562 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:36:16.562 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:36:16.562 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:36:16.567 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:36:16.567 +2026-03-12 16:36:16.575 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:36:16.584 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:36:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:36:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:36:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:36:47.302 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:36:47.302 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:36:47.302 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:36:47.309 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:36:47.309 +2026-03-12 16:36:47.314 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:36:47.321 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:36:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:36:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:37:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:37:18.042 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:37:18.042 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:37:18.042 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:37:18.049 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:37:18.049 +2026-03-12 16:37:18.054 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:37:18.062 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:37:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:37:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:37:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:37:48.772 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:37:48.772 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:37:48.772 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:37:48.777 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:37:48.777 +2026-03-12 16:37:48.781 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:37:48.788 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:37:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:37:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:38:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:38:19.508 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:38:19.508 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:38:19.508 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:38:19.513 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:38:19.513 +2026-03-12 16:38:19.518 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:38:19.525 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:38:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:38:28.817 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:38:28.817 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:38:28.817 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:38:28.822 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:38:28.822 +2026-03-12 16:38:28.827 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:38:28.833 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:38:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:38:31.556 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:38:31.557 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:38:31.557 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:38:31.581 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:38:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:38:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:38:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:39:02.297 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:39:02.297 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:39:02.297 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:39:02.317 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:39:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:39:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:39:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:39:33.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:39:33.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:39:33.152 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:39:33.174 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:39:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:39:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:39:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:40:03.912 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:40:03.912 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:40:03.912 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:40:03.933 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:40:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:40:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:40:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:40:34.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:40:34.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:40:34.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:40:34.694 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:40:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:40:40.617 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:40:40.617 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:40:40.618 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:40:40.626 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:40:40.626 +2026-03-12 16:40:40.631 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:40:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:40:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:41:05.427 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:41:05.427 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:41:05.427 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:41:05.448 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:41:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:41:11.447 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:41:11.447 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:41:11.447 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:41:11.452 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:41:11.452 +2026-03-12 16:41:11.456 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:41:11.463 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:41:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:41:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:41:36.178 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:41:36.178 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:41:36.178 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:41:36.198 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:41:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:41:42.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:41:42.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:41:42.238 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:41:42.243 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:41:42.243 +2026-03-12 16:41:42.248 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:41:42.256 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:41:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:41:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:42:06.942 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:42:06.942 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:42:06.942 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:42:06.965 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:42:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:42:12.972 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:42:12.972 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:42:12.972 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:42:12.980 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:42:12.980 +2026-03-12 16:42:12.987 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:42:12.998 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:42:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:42:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:42:37.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:42:37.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:42:37.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:42:37.703 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:42:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:42:43.722 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:42:43.722 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:42:43.722 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:42:43.728 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:42:43.728 +2026-03-12 16:42:43.734 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:42:43.740 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:42:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:42:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:43:08.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:43:08.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:43:08.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:43:08.437 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:43:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:43:14.454 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:43:14.454 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:43:14.454 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:43:14.460 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:43:14.460 +2026-03-12 16:43:14.464 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:43:14.472 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:43:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:43:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:43:39.144 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:43:39.144 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:43:39.144 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:43:39.164 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:43:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:43:45.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:43:45.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:43:45.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:43:45.188 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:43:45.188 +2026-03-12 16:43:45.194 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:43:45.201 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:43:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:43:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:44:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:44:09.883 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:44:09.883 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:44:09.883 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:44:09.903 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:44:15.919 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:44:15.919 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:44:15.919 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:44:15.924 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:44:15.924 +2026-03-12 16:44:15.931 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:44:15.938 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:44:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:44:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:44:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:44:40.617 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:44:40.617 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:44:40.617 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:44:40.637 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:44:46.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:44:46.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:44:46.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:44:46.662 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:44:46.662 +2026-03-12 16:44:46.666 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:44:46.673 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:44:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:44:55.379 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:44:55.379 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:44:55.379 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 16:44:55.385 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T16:44:55.385 +2026-03-12 16:44:55.389 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 16:44:55.395 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:44:57.137 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:44:57.137 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:44:57.137 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:44:57.164 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:44:58.197 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:44:58.197 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:44:58.197 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:44:58.217 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:44:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:45:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:45:11.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:45:11.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:45:11.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:45:11.382 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:45:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:45:28.908 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:45:28.909 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:45:28.909 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:45:28.929 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:45:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:45:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:45:42.098 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:45:42.098 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:45:42.098 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:45:42.118 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:45:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:45:59.658 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:45:59.658 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:45:59.658 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:45:59.677 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:45:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:46:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:46:12.842 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:46:12.842 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:46:12.842 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:46:12.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:46:13.727 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:46:13.727 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:46:13.727 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:46:13.747 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:46:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:46:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:46:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:46:43.582 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:46:43.582 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:46:43.582 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:46:43.604 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:46:44.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:46:44.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:46:44.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:46:44.481 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:46:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:46:56.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:46:56.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:46:56.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:46:56.693 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:46:58.840 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:46:58.840 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:46:58.840 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:46:58.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:46:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:47:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:47:14.357 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:47:14.357 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:47:14.357 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:47:14.377 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:47:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:47:29.585 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:47:29.585 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:47:29.585 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:47:29.605 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:47:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:47:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:47:45.072 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:47:45.072 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:47:45.072 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:47:45.099 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:47:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:47:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:48:01.177 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:48:01.177 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:48:01.177 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:48:01.196 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:48:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:48:14.382 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:48:14.382 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:48:14.382 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:48:14.406 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:48:15.803 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:48:15.803 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:48:15.803 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:48:15.822 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:48:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:48:24.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:48:24.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:48:24.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:48:24.307 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:48:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:48:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:48:46.538 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:48:46.538 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:48:46.538 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:48:46.559 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:48:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:48:55.607 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:48:55.607 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:48:55.607 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:48:55.627 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:48:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:49:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:49:17.278 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:49:17.278 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:49:17.278 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:49:17.299 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:49:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:49:26.352 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:49:26.352 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:49:26.352 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:49:26.371 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:49:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:49:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:49:48.168 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:49:48.168 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:49:48.168 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:49:48.190 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:49:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:49:57.056 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:49:57.056 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:49:57.056 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:49:57.091 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:49:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:50:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:50:18.924 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:50:18.924 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:50:18.924 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:50:18.944 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:50:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:50:27.810 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:50:27.810 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:50:27.810 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:50:27.831 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:50:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:50:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:50:49.677 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:50:49.677 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:50:49.677 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:50:49.699 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:50:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:50:58.603 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:50:58.603 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:50:58.603 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:50:58.623 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:50:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:51:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:51:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:51:20.443 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:51:20.443 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:51:20.443 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:51:20.463 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:51:29.391 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:51:29.391 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:51:29.391 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:51:29.410 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:51:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:51:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:51:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:51:51.199 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:51:51.199 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:51:51.199 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:51:51.219 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:51:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:52:00.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:52:00.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:52:00.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:52:00.143 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:52:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:52:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:52:21.988 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:52:21.988 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:52:21.988 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:52:22.008 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:52:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:52:30.862 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:52:30.863 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:52:30.863 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:52:30.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:52:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:52:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:52:52.727 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:52:52.727 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:52:52.727 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:52:52.746 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:52:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:53:01.593 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:53:01.594 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:53:01.594 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:53:01.614 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:53:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:53:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:53:23.442 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:53:23.442 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:53:23.442 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:53:23.462 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:53:28.094 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:53:28.094 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:53:28.094 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:53:28.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:53:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:53:39.474 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:53:39.474 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:53:39.474 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:53:39.495 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:53:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:53:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:53:54.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:53:54.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:53:54.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:53:54.204 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:53:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:54:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:54:10.209 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:54:10.209 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:54:10.209 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:54:10.228 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:54:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:54:24.917 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:54:24.917 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:54:24.917 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:54:24.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:54:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:54:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:54:40.943 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:54:40.943 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:54:40.943 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:54:40.963 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:54:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:54:55.669 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:54:55.669 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:54:55.669 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:54:55.688 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:54:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:55:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:55:11.688 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:55:11.688 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:55:11.688 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:55:11.708 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:55:19.441 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:55:19.442 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:55:19.442 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:55:19.463 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:55:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:55:25.163 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:55:25.163 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:55:25.163 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:55:25.185 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:55:26.412 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:55:26.412 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:55:26.412 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:55:26.434 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:55:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:55:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:55:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:55:55.908 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:55:55.908 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:55:55.908 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:55:55.926 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:55:57.153 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:55:57.153 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:55:57.153 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:55:57.172 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:55:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:56:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:56:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:56:26.645 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:56:26.645 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:56:26.645 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:56:26.665 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:56:27.907 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:56:27.907 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:56:27.907 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:56:27.926 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:56:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:56:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:56:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:56:52.335 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:56:52.335 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:56:52.335 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:56:52.353 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:56:58.637 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:56:58.637 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:56:58.637 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:56:58.656 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:56:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:57:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:57:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:57:23.065 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:57:23.066 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:57:23.066 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:57:23.093 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:57:27.260 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:57:27.260 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:57:27.260 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:57:27.278 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:57:29.377 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:57:29.377 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:57:29.377 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:57:29.397 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:57:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:57:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:57:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:57:58.027 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:57:58.027 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:57:58.027 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:57:58.045 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:57:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:58:00.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:58:00.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:58:00.122 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:58:00.148 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:58:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:58:18.396 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:58:18.396 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:58:18.396 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:58:18.418 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:58:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:58:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:58:30.852 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:58:30.852 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:58:30.852 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:58:30.871 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:58:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:58:40.001 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:58:40.001 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:58:40.001 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:58:40.022 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:58:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:58:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:59:01.587 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:59:01.587 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:59:01.587 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:59:01.610 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:59:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:59:10.733 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:59:10.733 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:59:10.733 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:59:10.754 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:59:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:59:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:59:32.332 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:59:32.332 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 16:59:32.332 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:59:32.352 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:59:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:59:41.482 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 16:59:41.482 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 16:59:41.482 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 16:59:41.503 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 16:59:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 16:59:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:00:03.172 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:00:03.172 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:00:03.172 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:00:03.195 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:00:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:00:12.217 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:00:12.217 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:00:12.217 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:00:12.236 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:00:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:00:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:00:33.907 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:00:33.908 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:00:33.908 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:00:33.926 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:00:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:00:42.938 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:00:42.939 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:00:42.939 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:00:42.960 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:00:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:00:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:01:04.643 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:01:04.643 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:01:04.643 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:01:04.663 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:01:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:01:13.723 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:01:13.724 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:01:13.724 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:01:13.744 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:01:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:01:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:01:35.402 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:01:35.402 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:01:35.402 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:01:35.423 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:01:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:01:44.512 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:01:44.512 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:01:44.512 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:01:44.532 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:01:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:01:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:02:06.162 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:02:06.162 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:02:06.162 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:02:06.184 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:02:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:02:15.232 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:02:15.232 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:02:15.232 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:02:15.253 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:02:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:02:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:02:36.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:02:36.922 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:02:36.923 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:02:36.945 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:02:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:02:45.957 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:02:45.957 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:02:45.957 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:02:45.978 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:02:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:02:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:03:07.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:03:07.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:03:07.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:03:07.692 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:03:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:03:16.692 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:03:16.692 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:03:16.692 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:03:16.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:03:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:03:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:03:38.414 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:03:38.414 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:03:38.414 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:03:38.434 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:03:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:03:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:03:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:04:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:04:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:04:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:04:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:04:47.472 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:04:47.472 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:04:47.472 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:04:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:04:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:05:07.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:05:07.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:05:07.287 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:05:07.306 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:05:09.243 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:05:09.244 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:05:09.244 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:05:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:05:15.927 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:05:15.927 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:05:15.927 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:05:15.948 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:05:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:05:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:05:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:05:40.084 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:05:40.084 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:05:40.085 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:05:40.105 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:05:46.666 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:05:46.666 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:05:46.666 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:05:46.684 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:05:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:05:52.142 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:05:52.142 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:05:52.142 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:05:52.179 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:05:56.337 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:05:56.337 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:05:56.337 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:05:56.361 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:05:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:06:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:06:10.822 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:06:10.822 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:06:10.822 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:06:10.843 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:06:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:06:27.072 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:06:27.073 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:06:27.073 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:06:27.094 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:06:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:06:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:06:41.562 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:06:41.562 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:06:41.562 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:06:41.583 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:06:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:06:57.824 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:06:57.824 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:06:57.824 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:06:57.850 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:06:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:07:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:07:12.282 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:07:12.282 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:07:12.282 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:07:12.303 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:07:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:07:28.577 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:07:28.577 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:07:28.577 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:07:28.600 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:07:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:07:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:07:43.012 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:07:43.012 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:07:43.012 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:07:43.031 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:07:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:07:59.322 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:07:59.322 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:07:59.322 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:07:59.340 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:07:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:08:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:08:13.732 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:08:13.732 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:08:13.732 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:08:13.751 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:08:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:08:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:08:30.042 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:08:30.042 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:08:30.042 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:08:30.063 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:08:30.442 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:08:30.442 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:08:30.442 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 17:08:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:08:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:08:52.791 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:08:52.791 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:08:52.791 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 17:08:52.796 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T17:08:52.796 +2026-03-12 17:08:52.801 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 17:08:55.406 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:08:55.406 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:08:55.406 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 17:08:55.411 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T17:08:55.411 +2026-03-12 17:08:55.415 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 17:08:55.422 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:08:57.966 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:08:57.966 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:08:57.966 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:08:57.990 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:08:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:09:00.757 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:09:00.757 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:09:00.757 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:09:00.778 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:09:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:09:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:09:28.691 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:09:28.691 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:09:28.691 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:09:28.712 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:09:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:09:31.467 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:09:31.467 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:09:31.467 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:09:31.489 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:09:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:09:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:09:59.414 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:09:59.414 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:09:59.414 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:09:59.433 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:09:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:10:02.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:10:02.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:10:02.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:10:02.214 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:10:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:10:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:10:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:10:30.158 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:10:30.158 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:10:30.158 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:10:30.190 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:10:32.907 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:10:32.907 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:10:32.907 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:10:32.927 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:10:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:10:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:10:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:11:00.915 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:11:00.915 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:11:00.915 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:11:00.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:11:03.643 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:11:03.643 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:11:03.643 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:11:03.663 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:11:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:11:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:11:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:11:31.646 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:11:31.646 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:11:31.646 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:11:31.664 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:11:34.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:11:34.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:11:34.417 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:11:34.436 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:11:35.097 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:11:35.097 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:11:35.097 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:11:35.116 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:11:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:11:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:11:55.104 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:11:55.105 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:11:55.105 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:11:55.125 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:11:57.282 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:11:57.282 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:11:57.282 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:11:57.302 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:11:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:12:02.376 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:12:02.376 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:12:02.376 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:12:02.399 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:12:02.472 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:12:02.472 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:12:02.472 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:12:02.493 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:12:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:12:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:12:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:12:33.126 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:12:33.126 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:12:33.126 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:12:33.161 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:12:33.207 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:12:33.207 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:12:33.207 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:12:33.227 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:12:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:12:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:12:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:13:03.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:13:03.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:13:03.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:13:03.901 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:13:03.947 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:13:03.947 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:13:03.947 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:13:03.966 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:13:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:13:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:13:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:13:34.633 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:13:34.633 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:13:34.633 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:13:34.654 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:13:34.668 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:13:34.668 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:13:34.668 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:13:34.689 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:13:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:13:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:13:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:14:05.366 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:14:05.366 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:14:05.366 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:14:05.385 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:14:05.398 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:14:05.398 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:14:05.398 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:14:05.424 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:14:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:14:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:14:20.253 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:14:20.253 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:14:20.253 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:14:20.276 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:14:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:14:36.102 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:14:36.102 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:14:36.102 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:14:36.121 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:14:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:14:49.732 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:14:49.733 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:14:49.733 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:14:49.754 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:14:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:14:53.635 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:14:53.636 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:14:53.636 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:14:53.657 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:14:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:14:59.897 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:14:59.897 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:14:59.897 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:14:59.921 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:15:06.837 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:15:06.838 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:15:06.838 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:15:06.857 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:15:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:15:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:15:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:15:30.636 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:15:30.636 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:15:30.636 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:15:30.659 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:15:37.575 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:15:37.575 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:15:37.575 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:15:37.596 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:15:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:15:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:15:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:16:01.376 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:16:01.376 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:16:01.376 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:16:01.399 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:16:08.326 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:16:08.326 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:16:08.326 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:16:08.347 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:16:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:16:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:16:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:16:32.087 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:16:32.088 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:16:32.088 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:16:32.111 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:16:39.086 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:16:39.086 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:16:39.086 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:16:39.110 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:16:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:16:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:16:58.054 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:16:58.054 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:16:58.054 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:16:58.072 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:16:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:17:09.846 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:17:09.847 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:17:09.847 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:17:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:17:09.868 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:17:14.889 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:17:14.889 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:17:14.889 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:17:14.910 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:17:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:17:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:17:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:17:40.606 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:17:40.606 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:17:40.606 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:17:40.627 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:17:45.635 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:17:45.635 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:17:45.635 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:17:45.654 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:17:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:17:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:18:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:18:11.341 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:18:11.341 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:18:11.341 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:18:11.362 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:18:16.370 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:18:16.370 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:18:16.370 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:18:16.390 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:18:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:18:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:18:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:18:42.106 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:18:42.106 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:18:42.106 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:18:42.125 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:18:47.104 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:18:47.104 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:18:47.104 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:18:47.123 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:18:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:18:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:19:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:19:12.967 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:19:12.967 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:19:12.967 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:19:12.988 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:19:17.834 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:19:17.834 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:19:17.834 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:19:17.855 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:19:19.572 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:19:19.573 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:19:19.573 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:19:19.594 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:19:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:19:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:19:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:19:43.669 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:19:43.669 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:19:43.669 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:19:43.690 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:19:43.711 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:19:43.711 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:19:43.711 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:19:43.731 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:19:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:19:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:20:08.376 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:20:08.376 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EF5 +2026-03-12 17:20:08.376 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 17:20:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:20:14.450 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:20:14.451 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:20:14.451 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:20:14.470 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:20:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:20:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:20:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:20:45.186 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:20:45.186 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:20:45.186 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:20:45.222 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:20:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:20:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:21:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:21:15.942 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:21:15.942 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:21:15.942 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:21:15.962 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:21:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:21:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:21:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:21:46.686 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:21:46.686 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:21:46.686 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:21:46.707 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:21:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:21:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:22:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:22:17.426 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:22:17.426 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:22:17.426 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:22:17.448 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:22:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:22:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:22:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:22:48.166 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:22:48.166 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:22:48.166 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:22:48.186 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:22:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:22:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:23:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:23:18.917 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:23:18.917 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:23:18.917 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:23:18.937 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:23:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:23:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:23:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:23:49.656 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:23:49.656 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:23:49.656 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:23:49.677 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:23:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:23:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:24:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:24:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:24:20.418 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:24:20.418 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:24:20.418 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:24:20.440 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:24:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:24:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:24:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:24:51.140 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:24:51.141 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:24:51.141 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:24:51.163 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:24:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:25:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:25:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:25:21.876 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:25:21.876 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:25:21.876 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:25:21.895 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:25:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:25:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:25:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:25:52.615 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:25:52.616 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:25:52.616 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:25:52.637 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:25:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:26:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:26:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:26:23.361 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:26:23.361 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:26:23.361 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:26:23.383 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:26:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:26:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:26:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:26:54.117 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:26:54.117 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:26:54.117 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:26:54.137 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:26:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:27:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:27:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:27:24.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:27:24.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:27:24.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:27:24.899 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:27:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:27:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:27:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:27:55.636 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:27:55.636 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:27:55.636 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:27:55.659 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:27:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:28:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:28:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:28:26.397 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:28:26.398 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:28:26.399 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:28:26.419 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:28:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:28:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:28:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:28:57.161 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:28:57.161 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:28:57.161 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:28:57.182 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:28:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:29:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:29:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:29:27.966 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:29:27.966 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:29:27.966 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:29:27.988 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:29:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:29:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:29:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:29:58.706 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:29:58.706 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:29:58.706 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:29:58.729 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:29:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:30:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:30:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:30:29.446 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:30:29.446 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:30:29.446 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:30:29.466 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:30:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:30:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:30:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:30:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:31:00.191 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:31:00.191 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:31:00.191 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:31:00.211 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:31:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:31:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:31:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:31:30.931 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:31:30.931 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:31:30.931 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:31:30.951 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:31:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:31:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:31:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:32:01.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:32:01.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:32:01.672 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:32:01.693 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:32:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:32:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:32:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:32:32.416 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:32:32.416 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:32:32.416 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:32:32.437 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:32:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:32:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:32:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:33:03.141 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:33:03.141 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:33:03.141 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:33:03.162 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:33:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:33:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:33:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:33:33.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:33:33.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:33:33.881 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:33:33.901 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:33:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:33:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:33:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:34:04.602 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:34:04.602 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:34:04.602 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:34:04.624 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:34:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:34:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:34:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:34:35.346 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:34:35.346 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:34:35.346 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:34:35.365 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:34:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:34:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:34:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:35:06.092 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:35:06.092 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:35:06.092 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:35:06.113 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:35:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:35:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:35:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:35:36.811 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:35:36.811 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:35:36.811 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:35:36.831 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:35:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:35:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:35:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:36:07.547 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:36:07.547 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:36:07.547 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:36:07.568 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:36:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:36:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:36:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:36:38.292 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:36:38.293 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:36:38.293 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:36:38.315 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:36:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:36:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:36:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:37:09.037 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:37:09.037 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:37:09.037 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:37:09.058 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:37:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:37:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:37:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:37:39.777 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:37:39.778 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:37:39.778 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:37:39.797 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:37:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:37:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:37:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:38:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:38:10.516 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:38:10.516 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:38:10.516 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:38:10.535 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:38:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:38:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:38:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:38:41.259 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:38:41.259 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:38:41.259 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 17:38:41.282 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 17:38:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:38:56.007 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 17:38:56.007 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001EC8 +2026-03-12 17:38:56.008 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 17:38:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:39:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:39:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:39:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:39:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:39:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:39:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:40:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:40:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:40:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:40:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:40:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:40:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:41:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:41:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:41:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:41:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:41:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:41:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:42:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:42:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:42:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:42:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:42:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:42:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:43:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:43:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:43:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:43:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:43:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:43:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:44:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:44:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:44:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:44:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:44:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:44:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:45:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:45:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:45:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:45:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:45:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:45:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:46:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:46:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:46:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:46:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:46:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:46:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:47:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:47:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:47:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:47:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:47:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:47:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:48:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:48:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:48:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:48:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:48:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:48:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:49:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:49:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:49:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:49:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:49:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:49:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:50:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:50:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:50:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:50:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:50:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:50:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:51:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:51:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:51:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:51:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:51:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:51:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:52:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:52:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:52:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:52:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:52:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:52:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:53:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:53:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:53:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:53:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:53:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:53:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:54:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:54:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:54:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:54:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:54:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:54:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:55:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:55:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:55:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:55:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:55:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:55:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:56:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:56:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:56:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:56:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:56:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:56:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:57:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:57:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:57:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:57:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:57:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:57:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:58:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:58:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:58:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:58:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:58:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:58:59.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:59:09.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:59:19.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:59:29.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:59:39.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 17:59:49.851 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:00:17.931 [main] INFO cn.unizk.AdminApp - Starting AdminApp using Java 1.8.0_421 on flexusx-20885 with PID 1282852 (/opt/jkadmin/admin-1.0.0.jar started by root in /opt/jkadmin) +2026-03-12 18:00:17.933 [main] INFO cn.unizk.AdminApp - The following 1 profile is active: "prod" +2026-03-12 18:00:17.940 [background-preinit] INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 6.2.3.Final +2026-03-12 18:00:18.914 [main] DEBUG org.apache.ibatis.logging.LogFactory - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter. +2026-03-12 18:00:18.931 [main] INFO o.s.i.c.DefaultConfiguringBeanFactoryPostProcessor - No bean named 'errorChannel' has been explicitly defined. Therefore, a default PublishSubscribeChannel will be created. +2026-03-12 18:00:18.947 [main] INFO o.s.i.c.DefaultConfiguringBeanFactoryPostProcessor - No bean named 'integrationHeaderChannelRegistry' has been explicitly defined. Therefore, a default DefaultHeaderChannelRegistry will be created. +2026-03-12 18:00:19.594 [main] INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8082"] +2026-03-12 18:00:19.595 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2026-03-12 18:00:19.595 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.62] +2026-03-12 18:00:19.675 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2026-03-12 18:00:20.188 [main] INFO c.a.d.s.b.a.DruidDataSourceAutoConfigure - Init DruidDataSource +2026-03-12 18:00:20.326 [main] INFO c.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited +2026-03-12 18:00:21.500 [main] INFO cn.unizk.service.UdpServerService2 - UDP Server started on port: 61100 +2026-03-12 18:00:21.502 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 持续接收UDP数据包,false +2026-03-12 18:00:22.324 [main] INFO c.b.m.e.s.MybatisPlusApplicationContextAware - Register ApplicationContext instances org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@65f095f8 +2026-03-12 18:00:22.837 [main] INFO o.s.i.endpoint.EventDrivenConsumer - Adding {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel +2026-03-12 18:00:22.837 [main] INFO o.s.i.c.PublishSubscribeChannel - Channel 'unizk-admin.errorChannel' has 1 subscriber(s). +2026-03-12 18:00:22.838 [main] INFO o.s.i.endpoint.EventDrivenConsumer - started bean '_org.springframework.integration.errorLogger' +2026-03-12 18:00:22.838 [main] INFO o.s.i.i.t.c.TcpNetServerConnectionFactory - started bean 'serverConnectionFactory'; defined in: 'class path resource [cn/unizk/config/TcpServerDSLConfig.class]'; from source: 'cn.unizk.config.TcpServerDSLConfig.serverConnectionFactory()', port=55367 +2026-03-12 18:00:22.838 [main] INFO o.s.i.endpoint.EventDrivenConsumer - Adding {transformer} as a subscriber to the 'tcpServerFlow.channel#0' channel +2026-03-12 18:00:22.838 [main] INFO o.s.i.channel.DirectChannel - Channel 'unizk-admin.tcpServerFlow.channel#0' has 1 subscriber(s). +2026-03-12 18:00:22.838 [main] INFO o.s.i.endpoint.EventDrivenConsumer - started bean 'tcpServerFlow.org.springframework.integration.config.ConsumerEndpointFactoryBean#0'; defined in: 'class path resource [cn/unizk/config/TcpServerDSLConfig.class]'; from source: 'bean method tcpServerFlow' +2026-03-12 18:00:22.838 [main] INFO o.s.i.endpoint.EventDrivenConsumer - Adding {transformer} as a subscriber to the 'tcpServerFlow.channel#2' channel +2026-03-12 18:00:22.838 [main] INFO o.s.i.channel.DirectChannel - Channel 'unizk-admin.tcpServerFlow.channel#2' has 1 subscriber(s). +2026-03-12 18:00:22.838 [main] INFO o.s.i.endpoint.EventDrivenConsumer - started bean 'tcpServerFlow.org.springframework.integration.config.ConsumerEndpointFactoryBean#1'; defined in: 'class path resource [cn/unizk/config/TcpServerDSLConfig.class]'; from source: 'bean method tcpServerFlow' +2026-03-12 18:00:22.838 [main] INFO o.s.i.endpoint.EventDrivenConsumer - Adding {transformer} as a subscriber to the 'tcpServerFlow.channel#3' channel +2026-03-12 18:00:22.838 [main] INFO o.s.i.channel.DirectChannel - Channel 'unizk-admin.tcpServerFlow.channel#3' has 1 subscriber(s). +2026-03-12 18:00:22.838 [main] INFO o.s.i.endpoint.EventDrivenConsumer - started bean 'tcpServerFlow.org.springframework.integration.config.ConsumerEndpointFactoryBean#2'; defined in: 'class path resource [cn/unizk/config/TcpServerDSLConfig.class]'; from source: 'bean method tcpServerFlow' +2026-03-12 18:00:22.838 [main] INFO o.s.i.endpoint.EventDrivenConsumer - Adding {service-activator} as a subscriber to the 'tcpServerFlow.channel#4' channel +2026-03-12 18:00:22.838 [main] INFO o.s.i.channel.DirectChannel - Channel 'unizk-admin.tcpServerFlow.channel#4' has 1 subscriber(s). +2026-03-12 18:00:22.838 [main] INFO o.s.i.endpoint.EventDrivenConsumer - started bean 'tcpServerFlow.org.springframework.integration.config.ConsumerEndpointFactoryBean#3'; defined in: 'class path resource [cn/unizk/config/TcpServerDSLConfig.class]'; from source: 'bean method tcpServerFlow' +2026-03-12 18:00:22.839 [main] INFO o.s.i.i.t.c.TcpNetServerConnectionFactory - started bean 'serverConnectionFactory'; defined in: 'class path resource [cn/unizk/config/TcpServerDSLConfig.class]'; from source: 'cn.unizk.config.TcpServerDSLConfig.serverConnectionFactory()', port=55367 +2026-03-12 18:00:22.839 [pool-4-thread-1] INFO o.s.i.i.t.c.TcpNetServerConnectionFactory - bean 'serverConnectionFactory'; defined in: 'class path resource [cn/unizk/config/TcpServerDSLConfig.class]'; from source: 'cn.unizk.config.TcpServerDSLConfig.serverConnectionFactory()', port=55367 Listening +2026-03-12 18:00:22.839 [main] INFO o.s.i.ip.tcp.TcpInboundGateway - started bean 'tcpServerFlow.ip:tcp-inbound-gateway#0'; defined in: 'class path resource [cn/unizk/config/TcpServerDSLConfig.class]'; from source: 'bean method tcpServerFlow' +2026-03-12 18:00:22.839 [main] INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8082"] +2026-03-12 18:00:22.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:00:22.865 [main] INFO cn.unizk.AdminApp - Started AdminApp in 5.348 seconds (JVM running for 5.669) +2026-03-12 18:00:32.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:00:42.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:00:52.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:01:02.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:01:12.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:01:22.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:01:32.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:01:42.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:01:52.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:02:02.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:02:12.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:02:18.209 [http-nio-8082-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2026-03-12 18:02:18.479 [http-nio-8082-exec-1] INFO cn.unizk.service.PasswordService - encode=$2a$10$46B/3qoDoGzS9tRc.lbNXOrjH8yMdcbTHNuMd4ug9X0syBob8ilNK +2026-03-12 18:02:22.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:02:32.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:02:42.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:02:52.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:03:02.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:03:12.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:03:22.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:03:32.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:03:42.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:03:52.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:04:02.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:04:12.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:04:22.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:04:32.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:04:42.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:04:52.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:05:02.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:05:12.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:05:16.223 [http-nio-8082-exec-5] INFO cn.unizk.service.PasswordService - encode=$2a$10$2zdTPuY3u4uLWgmjxzf5ueM8Srpw29YPcSGpOsUjr6SGlQNQ6epuG +2026-03-12 18:05:22.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:05:32.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:05:42.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:05:52.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:06:02.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:06:12.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:06:22.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:06:32.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:06:42.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:06:47.474 [http-nio-8082-exec-10] INFO cn.unizk.service.TokenService - token解析异常 +2026-03-12 18:06:47.549 [http-nio-8082-exec-10] INFO cn.unizk.service.PasswordService - encode=$2a$10$8JboFO.zJpZtcoFQsGT1weLFI4fvxSXb2zvITz0xP0ocUIbsGYgWW +2026-03-12 18:06:52.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:07:02.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:07:12.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:07:22.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:07:32.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:07:42.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:07:52.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:08:02.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:08:12.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:08:15.605 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 18:08:15.606 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001F97 +2026-03-12 18:08:15.606 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 18:08:15.609 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - deviceMap缓存中没有000B57020457D4B100001F97这个设备 +2026-03-12 18:08:15.618 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T18:08:15.618 +2026-03-12 18:08:15.625 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 18:08:15.711 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 18:08:15.711 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001F97 +2026-03-12 18:08:15.711 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 18:08:15.718 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T18:08:15.718 +2026-03-12 18:08:15.723 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 18:08:15.734 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 18:08:22.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:08:32.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:08:37.175 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 18:08:37.175 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001F97 +2026-03-12 18:08:37.175 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 18:08:37.219 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 18:08:42.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:08:52.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:09:02.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:09:07.949 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 18:09:07.949 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001F97 +2026-03-12 18:09:07.949 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 18:09:07.976 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 18:09:12.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:09:22.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:09:27.541 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 18:09:27.541 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001F97 +2026-03-12 18:09:27.541 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 18:09:27.571 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 18:09:29.253 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 18:09:29.253 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001F97 +2026-03-12 18:09:29.253 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 18:09:29.280 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 18:09:30.153 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 18:09:30.153 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001F97 +2026-03-12 18:09:30.153 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 18:09:30.179 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 18:09:32.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:09:38.155 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 18:09:38.155 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001F97 +2026-03-12 18:09:38.155 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:4 +2026-03-12 18:09:42.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:09:52.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:10:02.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:10:03.640 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 18:10:03.640 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001F97 +2026-03-12 18:10:03.640 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 18:10:03.648 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T18:10:03.648 +2026-03-12 18:10:03.653 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 18:10:12.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:10:18.525 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 18:10:18.525 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001F97 +2026-03-12 18:10:18.525 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:1 +2026-03-12 18:10:18.533 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 服务器上的LocalDateTime.now()=========2026-03-12T18:10:18.533 +2026-03-12 18:10:18.539 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=pr=0 +2026-03-12 18:10:18.549 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 18:10:22.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:10:32.183 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 18:10:32.183 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001F97 +2026-03-12 18:10:32.184 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 18:10:32.215 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 18:10:32.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:10:42.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:10:52.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:11:02.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:11:02.920 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 18:11:02.920 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001F97 +2026-03-12 18:11:02.920 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 18:11:02.945 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 18:11:12.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:11:22.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:11:32.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:11:33.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 处理接收到的数据包 +2026-03-12 18:11:33.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的muid=000B57020457D4B100001F97 +2026-03-12 18:11:33.682 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 解析得到的状态码是:2 +2026-03-12 18:11:33.713 [pool-1-thread-1] INFO cn.unizk.service.UdpServerService2 - 设备正在运行 +2026-03-12 18:11:42.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... +2026-03-12 18:11:52.863 [scheduling-1] INFO cn.unizk.task.DeviceTask - 执行非正常关机的设备巡查...... diff --git a/admin/pom.xml b/admin/pom.xml new file mode 100644 index 0000000..13c251e --- /dev/null +++ b/admin/pom.xml @@ -0,0 +1,124 @@ + + + + AI_Questioning + cn.unizk + 1.0.0 + + 4.0.0 + + admin + + admin + + http://www.example.com + + + UTF-8 + 17 + + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-validation + + + + + org.springframework.boot + spring-boot-starter-security + + + + + + io.jsonwebtoken + jjwt-api + 0.11.5 + + + + io.jsonwebtoken + jjwt-impl + 0.11.5 + runtime + + + + io.jsonwebtoken + jjwt-jackson + 0.11.5 + runtime + + + + + com.github.davidcarboni + encrypted- + + + + + cn.unizk + common + + + + org.springframework.boot + spring-boot-starter-integration + + + org.springframework.integration + spring-integration-ip + + + org.springframework.integration + spring-integration-core + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.1.1.RELEASE + + true + + + + + repackage + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + + diff --git a/admin/src/main/java/cn/unizk/AdminApp.java b/admin/src/main/java/cn/unizk/AdminApp.java new file mode 100644 index 0000000..360b797 --- /dev/null +++ b/admin/src/main/java/cn/unizk/AdminApp.java @@ -0,0 +1,17 @@ +package cn.unizk; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; + +@SpringBootApplication +@EnableWebSecurity +@MapperScan("cn.unizk.mapper") +@EnableScheduling +public class AdminApp { + public static void main(String[] args) { + SpringApplication.run(AdminApp.class,args); + } +} diff --git a/admin/src/main/java/cn/unizk/annotation/Anonymous.java b/admin/src/main/java/cn/unizk/annotation/Anonymous.java new file mode 100644 index 0000000..4478dd2 --- /dev/null +++ b/admin/src/main/java/cn/unizk/annotation/Anonymous.java @@ -0,0 +1,10 @@ +package cn.unizk.annotation; + +import java.lang.annotation.*; + +@Target({ ElementType.METHOD, ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Anonymous +{ +} diff --git a/admin/src/main/java/cn/unizk/config/HuiFuVendorProperties.java b/admin/src/main/java/cn/unizk/config/HuiFuVendorProperties.java new file mode 100644 index 0000000..0c46023 --- /dev/null +++ b/admin/src/main/java/cn/unizk/config/HuiFuVendorProperties.java @@ -0,0 +1,32 @@ +package cn.unizk.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Author hao + * @Date 2026/3/13 15:34 + * @Version 1.0 + **/ +@ConfigurationProperties(prefix = "huifu-vendor") +@Component +@Getter +@Setter +public class HuiFuVendorProperties { + + private String sysId; + + private String huifuId; + + private String publicKey; + + private String privateKey; + + private String refundApi; + + private String productId; + + private String notifyUrl; +} diff --git a/admin/src/main/java/cn/unizk/config/ResourcesConfig.java b/admin/src/main/java/cn/unizk/config/ResourcesConfig.java new file mode 100644 index 0000000..b89a9da --- /dev/null +++ b/admin/src/main/java/cn/unizk/config/ResourcesConfig.java @@ -0,0 +1,36 @@ +package cn.unizk.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * @Author hao + * @Date 2025/8/25 18:30 + * @Version 1.0 + **/ +@Configuration +public class ResourcesConfig { + + @Bean + public CorsFilter corsFilter() + { + CorsConfiguration config = new CorsConfiguration(); + config.setAllowCredentials(true); + // 设置访问源地址 + config.addAllowedOriginPattern("*"); + // 设置访问源请求头 + config.addAllowedHeader("*"); + // 设置访问源请求方法 + config.addAllowedMethod("*"); + // 有效期 1800秒 + config.setMaxAge(1800L); + // 添加映射路径,拦截一切请求 + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", config); + // 返回新的CorsFilter + return new CorsFilter(source); + } +} diff --git a/admin/src/main/java/cn/unizk/config/SecurityConfig.java b/admin/src/main/java/cn/unizk/config/SecurityConfig.java new file mode 100644 index 0000000..6ea6d6a --- /dev/null +++ b/admin/src/main/java/cn/unizk/config/SecurityConfig.java @@ -0,0 +1,150 @@ +package cn.unizk.config; + +import cn.unizk.security.filter.JwtAuthenticationTokenFilter; +import cn.unizk.properties.PermitAllUrlProperties; +import cn.unizk.security.handler.AuthenticationEntryPointImpl; +import cn.unizk.security.handler.LogoutSuccessHandlerImpl; +import cn.unizk.security.handler.UserAccessDeniedHandler; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpMethod; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.ProviderManager; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.authentication.logout.LogoutFilter; +import org.springframework.web.filter.CorsFilter; + +/** + * @Author hao + * @Date 2025/8/25 10:55 + * @Version 1.0 + **/ +@SuppressWarnings("all") +@EnableMethodSecurity(prePostEnabled = true, securedEnabled = true) +@Configuration +public class SecurityConfig { + + /** + * 自定义用户认证逻辑 + */ + @Autowired + private UserDetailsService userDetailsService; + + /** + * 认证失败处理类 + */ + @Autowired + private AuthenticationEntryPointImpl unauthorizedHandler; + + @Autowired + private UserAccessDeniedHandler userAccessDeniedHandler; + + /** + * 退出处理类 + */ + @Autowired + private LogoutSuccessHandlerImpl logoutSuccessHandler; + + /** + * token认证过滤器 + */ + @Autowired + private JwtAuthenticationTokenFilter authenticationTokenFilter; + + + /** + * 跨域过滤器 + */ + @Autowired + private CorsFilter corsFilter; + + + /** + * 允许匿名访问的地址 + */ + @Autowired + private PermitAllUrlProperties permitAllUrl; + + /** + * 身份验证实现 + */ + @Bean + public AuthenticationManager authenticationManager() { + DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider(); + daoAuthenticationProvider.setUserDetailsService(userDetailsService); + daoAuthenticationProvider.setPasswordEncoder(bCryptPasswordEncoder()); + return new ProviderManager(daoAuthenticationProvider); + } + + /** + * anyRequest | 匹配所有请求路径 + * access | SpringEl表达式结果为true时可以访问 + * anonymous | 匿名可以访问 + * denyAll | 用户不能访问 + * fullyAuthenticated | 用户完全认证可以访问(非remember-me下自动登录) + * hasAnyAuthority | 如果有参数,参数表示权限,则其中任何一个权限可以访问 + * hasAnyRole | 如果有参数,参数表示角色,则其中任何一个角色可以访问 + * hasAuthority | 如果有参数,参数表示权限,则其权限可以访问 + * hasIpAddress | 如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问 + * hasRole | 如果有参数,参数表示角色,则其角色可以访问 + * permitAll | 用户可以任意访问 + * rememberMe | 允许通过remember-me登录的用户访问 + * authenticated | 用户登录后可访问 + */ + @Bean + protected SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { + return httpSecurity + // CSRF禁用,因为不使用session + .csrf(csrf -> csrf.disable()) + // 禁用HTTP响应标头 + .headers((headersCustomizer) -> { + headersCustomizer.cacheControl(cache -> cache.disable()).frameOptions(options -> options.sameOrigin()); + }) + // 认证失败处理类 + .exceptionHandling(exception -> exception + .authenticationEntryPoint(unauthorizedHandler) + .accessDeniedHandler(userAccessDeniedHandler)) + // 基于token,所以不需要session + .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) + // 注解标记允许匿名访问的url + .authorizeHttpRequests((requests) -> { + permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll()); + // 对于登录login 注册register 验证码captchaImage 允许匿名访问 + requests.antMatchers("/pc/loginByUsername", "/register", "/captchaImage", "/wx/**","/h5/**","/pc/test","/satoken/ajaxlogin", + "/equipment/warehousing","/pc/userTreat/**").permitAll() + .antMatchers("/pc/admin/**").hasRole("ADMIN") + // 静态资源,可匿名访问 + .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() + .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll() + // 除上面外的所有请求全部需要鉴权认证 + .anyRequest().authenticated(); + }) + // 添加Logout filter + .logout(logout -> logout.logoutUrl("/pc/logout").logoutSuccessHandler(logoutSuccessHandler)) + // 添加JWT filter + .addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class) + // 添加CORS filter + /*.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class) + .addFilterBefore(corsFilter, LogoutFilter.class)*/ + .build(); + } + + /** + * 强散列哈希加密实现 + */ + @Bean + public BCryptPasswordEncoder bCryptPasswordEncoder() { + return new BCryptPasswordEncoder(); + } +} + diff --git a/admin/src/main/java/cn/unizk/config/TcpServerDSLConfig.java b/admin/src/main/java/cn/unizk/config/TcpServerDSLConfig.java new file mode 100644 index 0000000..cb52885 --- /dev/null +++ b/admin/src/main/java/cn/unizk/config/TcpServerDSLConfig.java @@ -0,0 +1,253 @@ +package cn.unizk.config; + +import cn.unizk.entity.po.DeviceUpgrade; +import cn.unizk.mapper.DeviceUpgradeMapper; +import cn.unizk.service.FileService; +import cn.unizk.utils.FixedLengthSerializer; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.integration.dsl.IntegrationFlow; +import org.springframework.integration.dsl.IntegrationFlows; +import org.springframework.integration.handler.LoggingHandler; +import org.springframework.integration.ip.dsl.Tcp; +import org.springframework.integration.ip.tcp.connection.TcpNetServerConnectionFactory; +import org.springframework.integration.ip.tcp.serializer.ByteArrayCrLfSerializer; +import org.springframework.integration.support.MessageBuilder; + +import javax.annotation.Resource; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Objects; + + +/** + * @Author hao + * @Date 2025/11/18 11:55 + * @Version 1.0 + **/ +//@Configuration +public class TcpServerDSLConfig { + + private static final Logger logger = LoggerFactory.getLogger(TcpServerDSLConfig.class); +// private static final String UPGRADE_PACKAGE_ROOT_PATH = "/opt/jkadmin/upgrade/"; + private static final String UPGRADE_PACKAGE_ROOT_PATH = "E:\\opt\\"; + + @Resource + private FileService fileService; + @Resource + private DeviceUpgradeMapper deviceUpgradeMapper; + + @Bean + public TcpNetServerConnectionFactory serverConnectionFactory() { + TcpNetServerConnectionFactory factory = new TcpNetServerConnectionFactory(55367); + factory.setSingleUse(false); + factory.setSoTimeout(60_000); + factory.setSoKeepAlive(true); + factory.setSoLinger(3); + factory.setSoReceiveBufferSize(64 * 1024); + factory.setSoSendBufferSize(64* 1024); + factory.setSoTcpNoDelay(true); + ByteArrayCrLfSerializer deserializer = new ByteArrayCrLfSerializer(); + deserializer.setMaxMessageSize(8192); + /*ByteArrayLengthHeaderSerializer ser = new ByteArrayLengthHeaderSerializer(); + ser.setMaxMessageSize(1024 * 1024);*/ +// factory.setSerializer(new FixedLengthSerializer()); + factory.setDeserializer(deserializer); + return factory; + } + + @Bean + public IntegrationFlow tcpServerFlow(){ + return IntegrationFlows + .from(Tcp.inboundGateway(serverConnectionFactory())) + .log(LoggingHandler.Level.INFO, "TCP接收", + message -> "来自 " + + message.getHeaders().get("ip_address") + + " 的数据") + .transform(payload -> { + logger.info("收到字节长度为:{}",payload.length); + return payload; + }) + .transform(payload -> + new String(payload,StandardCharsets.UTF_8)) + .transform(this::processBusinessLogic) + .handle(((payload, headers) -> { + /*return MessageBuilder.withPayload(payload.toString().getBytes()) + .copyHeaders(headers) + .build();*/ + if (payload instanceof byte[]) { + return MessageBuilder.withPayload((byte[]) payload) + .copyHeaders(headers) + .build(); + } else { + return MessageBuilder.withPayload(payload.toString().getBytes()) + .copyHeaders(headers) + .build(); + } + })) + .get(); + } + + /** + * 构建数据包响应 + * @param packageIndex 分包索引(00-31) + * @param data 1024字节数据 + * @return 完整的响应数据包 + */ + private byte[] buildDataPacket(String packageIndex, byte[] data) { + if (data.length != 1024){ + logger.error("数据包大小不正确: {}, 应该是1024", data.length); + return new byte[0]; + } + try { + // 协议格式:$|PN{index}|DA{1024字节二进制数据}|{CRC}\r\n + String crc = calculateCRC(data); + String header = String.format("$|PN%s|DA", packageIndex); + byte[] headerBytes = header.getBytes(StandardCharsets.US_ASCII); + + // CRC部分:|{CRC} + String crcPart = "|" + crc; + byte[] crcBytes = crcPart.getBytes(StandardCharsets.US_ASCII); + + // 完整数据包 = 协议头 + 1024字节文件数据 + CRC + byte[] response = new byte[headerBytes.length + data.length + crcBytes.length]; + + // 组装 + System.arraycopy(headerBytes, 0, response, 0, headerBytes.length); + System.arraycopy(data, 0, response, headerBytes.length, data.length); + System.arraycopy(crcBytes, 0, response, headerBytes.length + data.length, crcBytes.length); + logger.info("构建数据包:索引={}, 总长度={}, CRC={}", + packageIndex, response.length, crc); + logger.info("========== 发送数据包详细信息 =========="); + logger.info("包索引: {}", packageIndex); + logger.info("协议头字符串: {}", header); + logger.info("协议头字节数: {}", headerBytes.length); + logger.info("数据字节数: {}", data.length); + logger.info("CRC字符串: {}", crc); + logger.info("CRC字节数: {}", crcBytes.length); + logger.info("总长度: {}", response.length); + // 打印完整十六进制(前200字节和后50字节) + StringBuilder hexFull = new StringBuilder(); + int printLen = Math.min(1036, response.length); + for (int i = 0; i < printLen; i++) { + hexFull.append(String.format("%02X ", response[i])); + if ((i + 1) % 16 == 0) { + hexFull.append("\n"); + } + } + logger.info("前{}字节十六进制:\n{}", printLen, hexFull.toString()); + + // 打印协议头部分的ASCII + byte[] headerOnly = new byte[headerBytes.length]; + System.arraycopy(response, 0, headerOnly, 0, headerBytes.length); + logger.info("协议头ASCII: {}", new String(headerOnly, StandardCharsets.US_ASCII)); + + // 打印数据部分的前20字节 + StringBuilder dataHex = new StringBuilder(); + for (int i = 0; i < Math.min(20, data.length); i++) { + dataHex.append(String.format("%02X ", data[i])); + } + logger.info("数据部分前20字节: {}", dataHex.toString()); + + // 打印CRC部分 + byte[] crcOnly = new byte[crcBytes.length]; + System.arraycopy(response, headerBytes.length + data.length, crcOnly, 0, crcBytes.length); + logger.info("CRC部分ASCII: {}", new String(crcOnly, StandardCharsets.US_ASCII)); + logger.info("======================================"); + + return response; + } catch (Exception e) { + logger.error("构建数据包失败", e); + return new byte[0]; + } + } + + private String calculateCRC(byte[] data) { + byte crc = 0; + for (byte b : data) { + crc ^= b; + } + return String.format("%02X", crc & 0xFF); + } + + private Object processBusinessLogic(String input) { + //解析$|MUxxxx|HWxxxx|SWxxxx|UPxx|UQyy|*CRC\r\n + /** + * 去查software_upgrade表的当前版本的软件硬件号,如果和input解析不一致则升级 + *去/opt/jkadmin/upgrade下面拿到升级包,调fileService拆包 + * List packages = fileService.splitFileWithNIO("/opt/jkadmin/upgrade/filename.bin") + * byte[] pack = packages.get(0) + * String s = new String(pack) + * 发送:$|PN00|DA{s}|{CRC} + */ + logger.info("处理业务数据: {}", input); + if (StringUtils.isBlank(input)){ + return ""; + } + DeviceUpgrade deviceUpgrade = deviceUpgradeMapper.selectOne(new LambdaQueryWrapper().eq(DeviceUpgrade::getBeCurrentVersion, 1)); + if (Objects.isNull(deviceUpgrade)){ + return input; + } + String fileUrl = UPGRADE_PACKAGE_ROOT_PATH + deviceUpgrade.getFileName(); + List packages = null; + try { + packages = fileService.splitFileWithNIO(fileUrl); + } catch (IOException e) { + logger.error("分包发生异常",e); + return input; + } + if (CollectionUtils.isEmpty(packages)){ + return input; + } + String[] items = input.split("\\|"); + if (input.contains("HW") && input.contains("SW")){ + logger.info("集线器回复包含HW和SW,回复第一个数据包"); + //解析拿到硬件版本号和软件版本号,与device_upgrade表的当前版本对比,如果一致则不用升级,看这个逻辑需不需要吧,目前不加 + String msg = "$|PN00|DA{s}|{CRC}"; + byte[] bytes = packages.get(0); + //这里我是打算将bytes拼到msg上然后发送给硬件,不知道可不可行?crcHex是1024个字节的异或和 + + return buildDataPacket("00",bytes); + }else if (input.contains("ST")){ + String msg = "$|PN{i}|DA{s}|{CRC}"; + String i = null; + String st = null; + String pn = null; + for (String item : items) { + if (item.startsWith("UP")){ + i = item.substring(2); + } + if (item.startsWith("ST")){ + st = item.substring(2); + } + if (item.startsWith("PN")){ + pn = item.substring(2); + } + } + if ("0".equals(st) && i != null){ + if ("00".equals(i)){ + //表示升级数据传输完成,是否需要断开连接 + logger.info("升级数据传输完成"); + return ""; + }else { + byte[] bytes = packages.get(Integer.parseInt(i)); + //这里我是打算将bytes拼到msg上然后发送给硬件,不知道可不可行?crcHex是1024个字节的异或和 + return buildDataPacket(i,bytes); + } + }else if ("1".equals(st) && pn != null){ + logger.info("集线器回复数据接收错误,重发第{}个数据包",pn); + byte[] bytes = packages.get(Integer.parseInt(pn)); + //这里我是打算将bytes拼到msg上然后发送给硬件,不知道可不可行?crcHex是1024个字节的异或和 + return buildDataPacket(pn,bytes); + } + } + return input; + } + +} diff --git a/admin/src/main/java/cn/unizk/config/TcpServerDSLConfig2.java b/admin/src/main/java/cn/unizk/config/TcpServerDSLConfig2.java new file mode 100644 index 0000000..c941793 --- /dev/null +++ b/admin/src/main/java/cn/unizk/config/TcpServerDSLConfig2.java @@ -0,0 +1,254 @@ +package cn.unizk.config; + +import cn.unizk.entity.po.DeviceUpgrade; +import cn.unizk.mapper.DeviceUpgradeMapper; +import cn.unizk.service.FileService; +import cn.unizk.utils.Crc16Util; +import cn.unizk.utils.XorUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.integration.dsl.IntegrationFlow; +import org.springframework.integration.dsl.IntegrationFlows; +import org.springframework.integration.handler.LoggingHandler; +import org.springframework.integration.ip.dsl.Tcp; +import org.springframework.integration.ip.tcp.connection.TcpNetServerConnectionFactory; +import org.springframework.integration.ip.tcp.serializer.ByteArrayCrLfSerializer; +import org.springframework.integration.ip.tcp.serializer.ByteArrayRawSerializer; +import org.springframework.integration.support.MessageBuilder; + +import javax.annotation.Resource; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Objects; + +/** + * @Author hao + * @Date 2025/10/30 14:58 + * @Version 1.0 + **/ +@Configuration +public class TcpServerDSLConfig2 { + + private static final Logger logger = LoggerFactory.getLogger(TcpServerDSLConfig.class); + private static final String UPGRADE_PACKAGE_ROOT_PATH = "/opt/jkadmin/upgrade/"; +// private static final String UPGRADE_PACKAGE_ROOT_PATH = "E:\\opt\\"; + + @Resource + private FileService fileService; + @Resource + private DeviceUpgradeMapper deviceUpgradeMapper; + + @Bean + public TcpNetServerConnectionFactory serverConnectionFactory() { + TcpNetServerConnectionFactory factory = new TcpNetServerConnectionFactory(55367); + factory.setSingleUse(false); + factory.setSoTimeout(60_000); + factory.setSoKeepAlive(true); + factory.setSoLinger(3); + factory.setSoReceiveBufferSize(64 * 1024); + factory.setSoSendBufferSize(64* 1024); + factory.setSoTcpNoDelay(true); + ByteArrayCrLfSerializer deserializer = new ByteArrayCrLfSerializer(); + deserializer.setMaxMessageSize(8192); + /*ByteArrayLengthHeaderSerializer ser = new ByteArrayLengthHeaderSerializer(); + ser.setMaxMessageSize(1024 * 1024);*/ + factory.setSerializer(new ByteArrayRawSerializer()); + factory.setDeserializer(deserializer); + return factory; + } + + @Bean + public IntegrationFlow tcpServerFlow(){ + return IntegrationFlows + .from(Tcp.inboundAdapter(serverConnectionFactory())) + .log(LoggingHandler.Level.INFO, "TCP接收", + message -> "来自 " + + message.getHeaders().get("ip_address") + + " 的数据") + .transform(payload -> { + logger.info("收到字节长度为:{}",payload.length); + return payload; + }) + .transform(this::processBusinessLogic) + .handle(Tcp.outboundAdapter(serverConnectionFactory())) + .get(); + } + + /** + * 构建数据包响应 + * @param packageIndex 分包索引(00-31) + * @param data 1024字节数据 + * @return 完整的响应数据包 + */ + private byte[] buildDataPacket(String packageIndex, byte[] data) { + + if (data.length != 1024){ + logger.error("数据包大小不正确: {}, 应该是1024", data.length); + return new byte[0]; + } + try { + // 协议格式:$|PN{index}|DA{1024字节数据}|{CRC}\r\n + String crc = XorUtil.calculateCRC(data); + String header = String.format("$|PN%s|DA", packageIndex); + byte[] headerBytes = header.getBytes(StandardCharsets.US_ASCII); + + // CRC部分:|{CRC} + String shuxian = "|"; + byte[] shuxianBytes = shuxian.getBytes(StandardCharsets.US_ASCII); + byte[] crc16ToBytes = crc.getBytes(StandardCharsets.US_ASCII); + // 完整数据包 = 协议头 + 1024字节文件数据 + CRC + byte[] response = new byte[headerBytes.length + data.length + shuxianBytes.length + crc16ToBytes.length]; + int destPos = 0; + + // 组装 + System.arraycopy(headerBytes, 0, response, destPos, headerBytes.length); + destPos += headerBytes.length; + System.arraycopy(data, 0, response, destPos, data.length); + destPos += data.length; + System.arraycopy(shuxianBytes, 0, response, destPos, shuxianBytes.length); + destPos += shuxianBytes.length; + System.arraycopy(crc16ToBytes,0,response,destPos,crc16ToBytes.length); + logger.info("构建数据包:索引={}, 总长度={}, CRC={},{}", + packageIndex, response.length, crc16ToBytes[0],crc16ToBytes[1]); + logger.info("========== 发送数据包详细信息 =========="); + logger.info("包索引: {}", packageIndex); + logger.info("协议头字符串: {}", header); + logger.info("协议头字节数: {}", headerBytes.length); + logger.info("数据字节数: {}", data.length); + logger.info("CRC字符串: {}", crc); + logger.info("CRC字节数: {}", crc16ToBytes.length); + logger.info("总长度: {}", response.length); + // 打印完整十六进制(前200字节和后50字节) + StringBuilder hexFull = new StringBuilder(); + int printLen = Math.min(1036, response.length); + for (int i = 0; i < printLen; i++) { + hexFull.append(String.format("%02X ", response[i])); + if ((i + 1) % 16 == 0) { + hexFull.append("\n"); + } + } + logger.info("前{}字节十六进制:\n{}", printLen, hexFull.toString()); + + // 打印协议头部分的ASCII + byte[] headerOnly = new byte[headerBytes.length]; + System.arraycopy(response, 0, headerOnly, 0, headerBytes.length); + logger.info("协议头ASCII: {}", new String(headerOnly, StandardCharsets.US_ASCII)); + + // 打印数据部分的前20字节 + StringBuilder dataHex = new StringBuilder(); + for (int i = 0; i < Math.min(20, data.length); i++) { + dataHex.append(String.format("%02X ", data[i])); + } + logger.info("数据部分前20字节: {}", dataHex.toString()); + + // 打印CRC部分 + byte[] crcOnly = new byte[crc16ToBytes.length]; + System.arraycopy(response, headerBytes.length + data.length, crcOnly, 0, crc16ToBytes.length); + logger.info("CRC部分ASCII: {}", new String(crcOnly, StandardCharsets.US_ASCII)); + logger.info("======================================"); + + return response; + } catch (Exception e) { + logger.error("构建数据包失败", e); + return new byte[0]; + } + } + + + private byte[] processBusinessLogic(byte[] message) { + //解析$|MUxxxx|HWxxxx|SWxxxx|UPxx|UQyy|*CRC\r\n + /** + * 去查software_upgrade表的当前版本的软件硬件号,如果和input解析不一致则升级 + *去/opt/jkadmin/upgrade下面拿到升级包,调fileService拆包 + * List packages = fileService.splitFileWithNIO("/opt/jkadmin/upgrade/filename.bin") + * byte[] pack = packages.get(0) + * String s = new String(pack) + * 发送:$|PN00|DA{s}|{CRC} + */ + String input = new String(message,StandardCharsets.US_ASCII); + logger.info("处理业务数据: {}", input); + if (StringUtils.isBlank(input)){ + return new byte[0]; + } + DeviceUpgrade deviceUpgrade = deviceUpgradeMapper.selectOne(new LambdaQueryWrapper().eq(DeviceUpgrade::getBeCurrentVersion, 1)); + if (Objects.isNull(deviceUpgrade)){ + return new byte[0]; + } + String fileUrl = UPGRADE_PACKAGE_ROOT_PATH + deviceUpgrade.getFileName(); + List packages = null; + try { + packages = fileService.splitFileWithNIO(fileUrl); + } catch (IOException e) { + logger.error("分包发生异常",e); + return new byte[0]; + } + if (CollectionUtils.isEmpty(packages)){ + return new byte[0]; + } + String[] items = input.split("\\|"); + if (input.contains("HW") && input.contains("SW")){ + logger.info("集线器回复包含HW和SW,回复第一个数据包"); + //解析拿到硬件版本号和软件版本号,与device_upgrade表的当前版本对比,如果一致则不用升级,看这个逻辑需不需要吧,目前不加 + String msg = "$|PN00|DA{s}|{CRC}"; + byte[] bytes = packages.get(0); + //这里我是打算将bytes拼到msg上然后发送给硬件,不知道可不可行?crcHex是1024个字节的异或和 + + return buildDataPacket("01",bytes); + }else if (input.contains("ST")){ + String msg = "$|PN{i}|DA{s}|{CRC}"; + String i = null; + String st = null; + String pn = null; + for (String item : items) { + if (item.startsWith("UP")){ + i = item.substring(2); + } + if (item.startsWith("ST")){ + st = item.substring(2); + } + if (item.startsWith("PN")){ + pn = item.substring(2); + } + } + if ("0".equals(st) && i != null){ + if ("00".equals(i)){ + //表示升级数据传输完成,是否需要断开连接 + logger.info("升级数据传输完成"); + return new byte[0]; + }else { + byte[] bytes = packages.get(Integer.parseInt(i)-1); + //这里我是打算将bytes拼到msg上然后发送给硬件,不知道可不可行?crcHex是1024个字节的异或和 + return buildDataPacket(i,bytes); + } + }else if ("1".equals(st) && pn != null){ + logger.info("集线器回复数据接收错误,重发第{}个数据包",pn); + byte[] bytes = packages.get(Integer.parseInt(pn)); + //这里我是打算将bytes拼到msg上然后发送给硬件,不知道可不可行?crcHex是1024个字节的异或和 + return buildDataPacket(pn,bytes); + } + }else { + String up = null; + String pn = null; + for (String item : items) { + if (item.startsWith("UP")){ + up = item.substring(2); + } + if (item.startsWith("PN")){ + pn = item.substring(2); + } + } + if ("00".equals(up) && "00".equals(pn)){ + logger.info("升级数据传输完成"); + return new byte[0]; + } + } + return new byte[0]; + } + +} diff --git a/admin/src/main/java/cn/unizk/constants/CacheConstant.java b/admin/src/main/java/cn/unizk/constants/CacheConstant.java new file mode 100644 index 0000000..2d88a42 --- /dev/null +++ b/admin/src/main/java/cn/unizk/constants/CacheConstant.java @@ -0,0 +1,10 @@ +package cn.unizk.constants; + +/** + * @Author hao + * @Date 2025/8/22 18:52 + * @Version 1.0 + **/ +public class CacheConstant { + public static final String LOGIN_TOKEN_KEY = "login_tokens"; +} diff --git a/admin/src/main/java/cn/unizk/constants/Constants.java b/admin/src/main/java/cn/unizk/constants/Constants.java new file mode 100644 index 0000000..150c583 --- /dev/null +++ b/admin/src/main/java/cn/unizk/constants/Constants.java @@ -0,0 +1,22 @@ +package cn.unizk.constants; + +/** + * @Author hao + * @Date 2025/8/22 18:51 + * @Version 1.0 + **/ +public class Constants { + public static final String JWT_TOKEN_KEY = "login_client_key"; + + public static final String TOKEN_PREFIX = "Bearer"; + + public static final Integer MAX_USERNAME_LENGTH = 15; + + public static final String ALL_PERMISSION = "*:*:*"; + + public static final Integer MIN_PASSWORD_LENGTH = 6; + + public static final Integer MAX_PASSWORD_LENGTH = 15; + + public static final String DEVICE_UPGRADE_PACKAGE_ROOT_PATH = "/opt/jkadmin/upgrade/"; +} diff --git a/admin/src/main/java/cn/unizk/controller/AdminOrderController.java b/admin/src/main/java/cn/unizk/controller/AdminOrderController.java new file mode 100644 index 0000000..c64ff62 --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/AdminOrderController.java @@ -0,0 +1,193 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.*; +import cn.unizk.enums.OrderAfterSaleStatus; +import cn.unizk.enums.OrderStatus; +import cn.unizk.enums.PlatformType; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.MobileAppUserMapper; +import cn.unizk.mapper.MobileOrderItemMapper; +import cn.unizk.mapper.OrderReviewMapper; +import cn.unizk.service.ComboService; +import cn.unizk.service.ProductService; +import cn.unizk.service.SysOrderService; +import cn.unizk.utils.BeanCopyUtils; +import cn.unizk.utils.SecurityUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.*; + +/** + * @Author hao + * @Date 2025/9/4 18:16 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/pc/admin") +public class AdminOrderController { + + @Resource + private SysOrderService sysOrderService; + @Resource + private ComboService comboService; + @Resource + private MobileOrderItemMapper mobileOrderItemMapper; + @Resource + private ProductService productService; + @Resource + private MobileAppUserMapper mobileAppUserMapper; + @Resource + private OrderReviewMapper reviewMapper; + + @PostMapping("/orders") + public Page orders(@RequestBody UniPage uniPage) { + return sysOrderService.orderList(uniPage); + + } + + @PostMapping("/editOrder") + @Transactional(rollbackFor = Exception.class) + public ResultData editOrder(@RequestParam("orderId") String orderId, @RequestParam("optionType") Integer optionType) { + + MobileOrder wxOrder = sysOrderService.getById(orderId); + if (Objects.isNull(wxOrder)) { + throw new ServiceException("该订单不存在"); + } + if (optionType == 1) { + //发货 + if (!OrderStatus.paid.name().equals(wxOrder.getStatus())) { + throw new ServiceException(String.format("%s状态订单不支持发货", OrderStatus.valueOf(wxOrder.getStatus()).getValue())); + } + if (wxOrder.getProductId() == null) { + throw new ServiceException("该订单商品为非实体商品,不支持发货"); + } + wxOrder.setStatus(OrderStatus.shipped.name()); + sysOrderService.updateById(wxOrder); + } + if (optionType == 2) { + //核销 + if (!OrderStatus.paid.name().equals(wxOrder.getStatus()) && !OrderStatus.unverified.name().equals(wxOrder.getStatus())) { + throw new ServiceException(String.format("%s状态订单不支持核销", OrderStatus.valueOf(wxOrder.getStatus()).getValue())); + } + if (wxOrder.getComboId() == null) { + throw new ServiceException("该订单商品为实体商品,不支持核销"); + } + wxOrder.setStatus(OrderStatus.verified.name()); + sysOrderService.updateById(wxOrder); + } + /*if (optionType == 3){ + if (!OrderStatus.request_refund.name().equals(wxOrder.getStatus())){ + throw new ServiceException("该订单非申请退款,不能做退款操作!"); + } + if (OrderStatus.refunded.name().equals(wxOrder.getStatus())){ + throw new ServiceException("该订单已做退款处理"); + } + wxOrder.setStatus(OrderStatus.refunded.name()); + sysOrderService.updateById(wxOrder); + }*/ + return ResultData.success(); + } + + @GetMapping("/getOrderStatistics") + public Map getOrderStatistics() { + List wxOrders = sysOrderService.getBaseMapper().selectList(null); + Map map = new HashMap<>(); + map.put("A", (long) wxOrders.size()); + long p = wxOrders.stream().filter(o -> o.getStoreId() == null).count(); + map.put("P", p); + long s = wxOrders.stream().filter(o -> o.getStoreId() != null).count(); + map.put("S", s); + return map; + } + + @GetMapping("/orderDetail") + public MobileOrderDetailVO detail(@RequestParam("orderId") String orderId) { + MobileOrderDetailVO vo = new MobileOrderDetailVO(); + MobileOrder wxOrder = sysOrderService.getById(orderId); + BeanUtils.copyProperties(wxOrder, vo); + if (vo.getComboId() != null) { + List list = new ArrayList<>(); + Combo combo = comboService.getById(vo.getComboId()); + MobileOrderItemVO product = new MobileOrderItemVO(); + product.setImage(combo.getImage()); + product.setProductName(combo.getComboName()); + product.setSingleProductPrice(combo.getComboPrice()); + list.add(product); + vo.setOrderItemVOS(list); + } else { + List wxOrderItems = mobileOrderItemMapper.selectList(new LambdaQueryWrapper().eq(MobileOrderItem::getMobileOrderId, vo.getOrderId())); + if (CollectionUtils.isNotEmpty(wxOrderItems)){ + Collection itemVOS = BeanCopyUtils.copyArrays(wxOrderItems, MobileOrderItemVO::new); + for (MobileOrderItemVO itemVO : itemVOS) { + if (itemVO.getProductId() == null) { + continue; + } + JkProduct jkProduct = productService.getById(itemVO.getProductId()); + itemVO.setProductName(jkProduct.getProductName()); + itemVO.setImage(jkProduct.getProductImage()); + itemVO.setSingleProductPrice(jkProduct.getProductPrice()); + } + vo.setOrderItemVOS((List) itemVOS); + } + } + MobileAppUser one = mobileAppUserMapper.selectById(vo.getMobileUserId()); + vo.setMobileAppUser(one); + return vo; + } + + @PostMapping("/agreeRefund") + public ResultData refund(@RequestParam("orderId") String orderId,@RequestParam("platformType") String platformType) { + if (!PlatformType.WECHAT_MP.name().equals(platformType) && !PlatformType.APP.name().equals(platformType)){ + throw new ServiceException("未知的平台类型"); + } + return sysOrderService.agreeRefund(orderId,platformType); + } + + @PostMapping("/afterSales") + public Page afterSales(@RequestBody UniPage uniPage) { + return sysOrderService.afterSale(uniPage); + } + + @GetMapping("/getDeliveryTotal") + public Map getDeliveryTotal() { + SysUser sysUser = SecurityUtils.getSysUser(); + Map map = new HashMap<>(); + Long ps = sysOrderService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(MobileOrder::getDeliveryWay, "配送") + .eq(MobileOrder::getAfterSaleStatus, 0)); + map.put("配送", ps); + Long zt = sysOrderService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(MobileOrder::getDeliveryWay, "自提") + .eq(MobileOrder::getAfterSaleStatus, 0)); + map.put("核销", zt); + return map; + } + + @PostMapping("/refundRefusal") + public boolean refundRefusal(@RequestBody MobileOrder order) { + MobileOrder wxOrder = sysOrderService.getById(order.getOrderId()); + if (Objects.isNull(wxOrder)) { + throw new ServiceException("无此订单"); + } + wxOrder.setRejectReason(order.getRejectReason()); + wxOrder.setAfterSaleStatus(OrderAfterSaleStatus.REJECT_TUI_KUAN.getKey()); + return sysOrderService.updateById(wxOrder); + } + + @GetMapping("/getOrderReview") + public List getOrderReview(@RequestParam("orderId") String orderId) { + return reviewMapper.selectList(new LambdaQueryWrapper().eq(OrderReview::getOrderId, orderId)); + } + +/* @PostMapping("/appOrders") + public Page appOrders(@RequestBody UniPage uniPage) { + Page page = (Page) uniPage.getPage(); + return page; + }*/ + +} diff --git a/admin/src/main/java/cn/unizk/controller/ChildDeviceController.java b/admin/src/main/java/cn/unizk/controller/ChildDeviceController.java new file mode 100644 index 0000000..8baed5f --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/ChildDeviceController.java @@ -0,0 +1,76 @@ +package cn.unizk.controller; + +import cn.unizk.entity.dto.LoginUser; +import cn.unizk.entity.po.Device; +import cn.unizk.entity.po.SysUser; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.exception.ServiceException; +import cn.unizk.service.DeviceService; +import cn.unizk.utils.SecurityUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Objects; + +/** + * @Author hao + * @Date 2025/9/26 16:48 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/pc/store/device") +public class ChildDeviceController { + + @Resource + private DeviceService deviceService; + + @GetMapping("/page") + public Page page(@RequestParam(value = "keyword",required = false) String keyword, + UniPage uniPage){ + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (Objects.isNull(loginUser) || Objects.isNull(loginUser.getSysUser())){ + throw new ServiceException(401,"登录已过期"); + } + if (loginUser.getSysUser().getStoreId() == null){ + return new Page<>(); + } + Page page = new Page<>(uniPage.getCurrentPage(),uniPage.getPageSize()); + return deviceService.page(page,new LambdaQueryWrapper() + .eq(Device::getStoreId,loginUser.getSysUser().getStoreId()) + .and(StringUtils.isNotBlank(keyword),wrapper -> { + wrapper.eq(StringUtils.isNotBlank(keyword),Device::getMuid,keyword) + .or() + .eq(StringUtils.isNotBlank(keyword),Device::getDeviceId,keyword); + })); + } + + @GetMapping("/getTotal") + public long getTotal(){ + SysUser sysUser = SecurityUtils.getSysUser(); + if (Objects.isNull(sysUser) || sysUser.getStoreId() == null){ + return 0; + } + return deviceService.count(new LambdaQueryWrapper().eq(Device::getStoreId,sysUser.getStoreId())); + } + + @PostMapping("/forcePaySwitch") + public ResultData forcePaySwitch(@RequestParam("deviceId") String deviceId,@RequestParam("forcePay") Integer forcePay){ + if (forcePay != 0 && forcePay != 1){ + throw new ServiceException("参数不合法"); + } + Device device = new Device(); + device.setDeviceId(deviceId); + device.setForcePay(forcePay); + if (forcePay == 1){ + device.setStatus("0"); + }else { + device.setStatus("1"); + } + return deviceService.updateById(device) ? ResultData.success() : ResultData.failure(); + } + +} diff --git a/admin/src/main/java/cn/unizk/controller/ChildStoreController.java b/admin/src/main/java/cn/unizk/controller/ChildStoreController.java new file mode 100644 index 0000000..c5f2174 --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/ChildStoreController.java @@ -0,0 +1,468 @@ +package cn.unizk.controller; + +import cn.hutool.core.date.DateUtil; +import cn.unizk.entity.dto.CashOutDTO; +import cn.unizk.entity.dto.CashOutResponse; +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.*; +import cn.unizk.enums.OrderAfterSaleStatus; +import cn.unizk.enums.OrderStatus; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.CashOutRecordMapper; +import cn.unizk.mapper.DeviceUsageRecordMapper; +import cn.unizk.mapper.StoreAccountMapper; +import cn.unizk.service.*; +import cn.unizk.utils.HttpUtil; +import cn.unizk.utils.QRcodeUtil; +import cn.unizk.utils.SecurityUtils; +import cn.unizk.utils.ServletUtils; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.util.*; + +/** + * @Author hao + * @Date 2025/9/26 10:46 + * @Version 1.0 + **/ +@RestController +@Slf4j +@RequestMapping("/pc/store") +public class ChildStoreController { + + @Resource + private DeviceService deviceService; + @Resource + private WxAuthService wxAuthService; + @Resource + private BusinessChannelService businessChannelService; + @Resource + private StoreService storeService; + @Resource + private ChildStoreService childStoreService; + @Resource + private DeviceUsageRecordMapper deviceUsageRecordMapper; + @Resource + private SysOrderService orderService; + @Resource + private PhysioService physioService; + @Resource + private StoreAccountMapper storeAccountMapper; + @Resource + private CashOutRecordMapper cashOutRecordMapper; + + @PostMapping("/addAccountData") + public ResultData addAccountData(@Valid @RequestBody XunfuAccountVO vo){ + if (Objects.isNull(vo)){ + throw new ServiceException("参数不正确"); + } + List images = vo.getImages(); + List imageTypes = Lists.newArrayList("idCardFront","idCardBack","personWithIdCard","bankCard", + "license","openAccountLicenses"); + + return null; + } + + @GetMapping("/getAppletQrCode") + public void getAppletQrCode(HttpServletResponse response, @RequestParam(value = "type",required = false) String type){ + SysUser sysUser = SecurityUtils.getSysUser(); + JkStore jkStore = storeService.getById(sysUser.getStoreId()); + if (Objects.isNull(jkStore)){ + log.error("无此门店:storeId={}",sysUser.toString()); + throw new ServiceException("服务异常"); + } + String accessToken = wxAuthService.getAccessToken(); + String url = String.format("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=%s",accessToken); + log.info("url={}",url); + JSONObject jsonBody = JSONObject.of(); + Integer channelId = jkStore.getChannelId(); + jsonBody.put("scene",channelId); +// jsonBody.put("check_path",false); +// jsonBody.put("env_version","trial"); + jsonBody.put("width",280); + byte[] bytes = HttpUtil.postRtnBytes(url, null, jsonBody); + if (bytes == null || bytes.length == 0){ + ServletUtils.renderString(response,"qrcode res is empty"); + return; + } + String fileName = ""; + if (channelId != null){ + BusinessChannel businessChannel = businessChannelService.getById(channelId); + fileName = Objects.nonNull(businessChannel) ? businessChannel.getChannelName() : ""; + } +// response.setContentType("image/jpeg"); + response.setContentLength(bytes.length); + if ("download".equals(type)){ + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + response.setHeader("Content-Disposition", "attachment; filename=渠道商-"+channelId+now+".png"); + } + try (OutputStream os = response.getOutputStream()) { + os.write(bytes); + os.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @GetMapping("/devicePage") + public Page devicePage(UniPage uniPage,@RequestParam(value = "keyword",required = false) String keyword){ + + Page page = new Page<>(uniPage.getCurrentPage(),uniPage.getPageSize()); + if (StringUtils.isNotBlank(keyword)){ + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Device::getDeviceId,keyword).or().eq(Device::getMuid,keyword); + return deviceService.page(page,wrapper); + }else { + return deviceService.page(page); + } + } + + @GetMapping("/usageRecord") + public Page usageRecord(@RequestParam("deviceId") String deviceId,UniPage uniPage){ + Page page = new Page<>(uniPage.getCurrentPage(),uniPage.getPageSize()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DeviceUsageRecord::getDeviceId,deviceId).orderByDesc(DeviceUsageRecord::getStartTime); + Page recordPage = deviceUsageRecordMapper.selectPage(page, wrapper); + List records = recordPage.getRecords(); + List voList = new ArrayList<>(); + for (DeviceUsageRecord record : records) { + DeviceUsageRecordVO vo = new DeviceUsageRecordVO(); + BeanUtils.copyProperties(record,vo); + long minutes = Duration.between(record.getStartTime(), record.getEndTime()).toMinutes(); + vo.setUseDuration(minutes); + voList.add(vo); + } + Page voPage = new Page<>(); + voPage.setRecords(voList); + voPage.setCurrent(recordPage.getCurrent()); + voPage.setSize(recordPage.getSize()); + voPage.setTotal(recordPage.getTotal()); + return voPage; + } + + @PostMapping("/agreeRefund") + public ResultData refund(@RequestParam("orderId") String orderId){ + SysUser sysUser = SecurityUtils.getSysUser(); + MobileOrder wxOrder = orderService.getById(orderId); + if (Objects.isNull(wxOrder)){ + throw new ServiceException(String.format("订单不存在,订单号:%s",orderId)); + } + if (wxOrder.getStoreId() == null || !sysUser.getStoreId().equals(wxOrder.getStoreId())){ + throw new ServiceException("警告:越权操作!"); + } + return orderService.refund(wxOrder); + } + + @PostMapping("/orderPage") + public Page orders(@RequestBody UniPage uniPage){ + SysUser sysUser = SecurityUtils.getSysUser(); + if (sysUser.getStoreId() == null){ + throw new ServiceException("请求不合法"); + } + OrderReqVO queryBody = uniPage.getQueryBody(); + if (queryBody == null){ + queryBody = new OrderReqVO(); + } + queryBody.setStoreId(sysUser.getStoreId()); + return orderService.orderList(uniPage); + } + + @PostMapping("/editOrder") + @Transactional(rollbackFor = Exception.class) + public ResultData editOrder(@RequestParam("orderId") String orderId,@RequestParam("optionType") Integer optionType){ + + SysUser sysUser = SecurityUtils.getSysUser(); + MobileOrder wxOrder = orderService.getById(orderId); + if (Objects.isNull(wxOrder)){ + throw new ServiceException("该订单不存在"); + } + if (sysUser == null || !sysUser.getStoreId().equals(wxOrder.getStoreId())){ + throw new ServiceException("非法请求"); + } + if (optionType == 1){ + //发货 + if (!OrderStatus.paid.name().equals(wxOrder.getStatus())){ + throw new ServiceException(String.format("%s状态订单不支持发货",OrderStatus.valueOf(wxOrder.getStatus()).getValue())); + } + if (wxOrder.getProductId() == null) { + throw new ServiceException("该订单商品为非实体商品,不支持发货"); + } + wxOrder.setStatus(OrderStatus.shipped.name()); + orderService.updateById(wxOrder); + } + if (optionType == 2){ + //核销 + if (!OrderStatus.paid.name().equals(wxOrder.getStatus()) && !OrderStatus.unverified.name().equals(wxOrder.getStatus())){ + throw new ServiceException(String.format("%s状态订单不支持核销",OrderStatus.valueOf(wxOrder.getStatus()).getValue())); + } + if (wxOrder.getComboId() == null){ + throw new ServiceException("该订单商品为实体商品,不支持核销"); + } + wxOrder.setStatus(OrderStatus.verified.name()); + orderService.updateById(wxOrder); + } + /*if (optionType == 3){ + if (!OrderStatus.request_refund.name().equals(wxOrder.getStatus())){ + throw new ServiceException("该订单非申请退款,不能做退款操作!"); + } + if (OrderStatus.refunded.name().equals(wxOrder.getStatus())){ + throw new ServiceException("该订单已做退款处理"); + } + wxOrder.setStatus(OrderStatus.refunded.name()); + orderService.updateById(wxOrder); + }*/ + return ResultData.success(); + } + + @GetMapping("/getDeliveryTotal") + public Map getDeliveryTotal(){ + SysUser sysUser = SecurityUtils.getSysUser(); + Map map = new HashMap<>(); + Long ps = orderService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(MobileOrder::getDeliveryWay, "配送").eq(MobileOrder::getStoreId,sysUser.getStoreId())); + map.put("配送",ps); + Long zt = orderService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(MobileOrder::getDeliveryWay, "自提").eq(MobileOrder::getStoreId,sysUser.getStoreId())); + map.put("核销",zt); + return map; + } + + @PostMapping("/afterSales") + public Page afterSale(@RequestBody UniPage uniPage){ + SysUser sysUser = SecurityUtils.getSysUser(); + if (sysUser.getStoreId() == null){ + throw new ServiceException("请求不合法"); + } + OrderReqVO queryBody = uniPage.getQueryBody(); + if (queryBody == null){ + queryBody = new OrderReqVO(); + } + queryBody.setStoreId(sysUser.getStoreId()); + return orderService.afterSale(uniPage); + } + + @PostMapping("/refundRefusal") + public boolean refundRefusal(@RequestBody MobileOrder order){ + SysUser sysUser = SecurityUtils.getSysUser(); + MobileOrder wxOrder = orderService.getById(order.getOrderId()); + if (Objects.isNull(wxOrder)){ + throw new ServiceException("无此订单"); + } + if (sysUser.getStoreId() == null || !sysUser.getStoreId().equals(wxOrder.getStoreId())){ + throw new ServiceException("非法请求"); + } + wxOrder.setRejectReason(order.getRejectReason()); + wxOrder.setAfterSaleStatus(OrderAfterSaleStatus.REJECT_TUI_KUAN.getKey()); + return orderService.updateById(wxOrder); + } + + @PostMapping("/addPhysio") + public boolean addPhysio(@RequestBody JkPhysio jkPhysio){ + return physioService.save(jkPhysio); + } + + @PostMapping("/physioList") + public Page physioList(@RequestBody UniPage uniPage){ + Integer storeId = authVerify(); + Page page = (Page) uniPage.getPage(); + LambdaQueryWrapper queryWrapper = uniPage.buildQueryWrapper(q -> { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(JkPhysio::getStoreId, storeId); + wrapper.and(StringUtils.isNotBlank(q.getKeyword()), r -> { + r.eq(JkPhysio::getIdcard, q.getKeyword()) + .or() + .eq(JkPhysio::getPhysioTel, q.getKeyword()) + .or() + .eq(JkPhysio::getPhysioName, q.getKeyword()); + }); + wrapper.between(q.getCreateTime() != null, JkPhysio::getCreateTime, q.getSearchStartTime(), q.getSearchEndTime()); + wrapper.eq(q.getAudit() != null, JkPhysio::getAudit, q.getAudit()); + return wrapper; + }); + return physioService.page(page,queryWrapper); + } + + @PostMapping("/editPhysio") + public Boolean editPhysio(@RequestBody JkPhysio jkPhysio){ + jkPhysio.setAudit(0); + return physioService.updateById(jkPhysio); + } + + @PostMapping("/deletePhysio") + public boolean deletePhysio(@RequestParam("id") Integer id){ + Integer storeId = authVerify(); + JkPhysio byId = physioService.getById(id); + if (Objects.isNull(byId) || !storeId.equals(byId.getStoreId())){ + throw new ServiceException(403,"非法访问"); + } + return physioService.removeById(id); + } + + private Integer authVerify(){ + Integer storeId = SecurityUtils.getSysUser().getStoreId(); + if (storeId == null){ + throw new ServiceException(403,"非法访问"); + } + return storeId; + } + + @GetMapping("/getAppScanPayQRCode") + public void getAppScanPayQRCode(HttpServletResponse response,@RequestParam("deviceId") String deviceId, + @RequestParam("route") String route){ + SysUser sysUser = SecurityUtils.getSysUser(); + if (sysUser.getStoreId() == null){ + throw new ServiceException(403,"非法访问"); + } + if (StringUtils.isBlank(deviceId)){ + throw new ServiceException("deviceId cannot be empty!"); + } + Device device = deviceService.getById(deviceId); + if (Objects.isNull(device)){ + throw new ServiceException("ID->"+deviceId + "not exist"); + } + String url = "uri=" + route + "&deviceId=" + deviceId + "&storeId=" + sysUser.getStoreId(); + QRcodeUtil.generateQrcode(response,url,null); + + } + + @GetMapping("/getScanPayQRCode") + public void getScanPayQRCode(HttpServletResponse response,@RequestParam("deviceId") String deviceId) throws UnsupportedEncodingException { + SysUser sysUser = SecurityUtils.getSysUser(); + if (sysUser.getStoreId() == null){ + throw new ServiceException(403,"非法访问"); + } + if (StringUtils.isBlank(deviceId)){ + throw new ServiceException("deviceId cannot be empty!"); + } + Device device = deviceService.getById(deviceId); + if (Objects.isNull(device)){ + throw new ServiceException("ID->"+deviceId + "not exist"); + } + String accessToken = wxAuthService.getAccessToken(); + String url = String.format("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=%s",accessToken); + log.info("url={}",url); + JSONObject jsonBody = JSONObject.of(); + String scene = sysUser.getStoreId() + "$" + deviceId; + jsonBody.put("scene",scene); + if (device.getForcePay() == 0){ + deviceId = "0"; + }else { + jsonBody.put("page","pages/order/devicePayOnce"); + } + jsonBody.put("width",280); + byte[] bytes = HttpUtil.postRtnBytes(url, null, jsonBody); + if (bytes == null || bytes.length == 0){ + ServletUtils.renderString(response,"qrcode res is empty"); + return; + } + response.setContentLength(bytes.length); + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String fileName = "设备ID-" + deviceId + "-" + now + ".png"; + String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()) + .replaceAll("\\+", "%20"); + + response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName); + try (OutputStream os = response.getOutputStream()) { + os.write(bytes); + os.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @GetMapping("/getGrfScanPayQRCode") + public void getGrfScanPayQRCode(HttpServletResponse response,@RequestParam("deviceId") String deviceId) throws UnsupportedEncodingException { + SysUser sysUser = SecurityUtils.getSysUser(); + if (sysUser.getStoreId() == null){ + throw new ServiceException(403,"非法访问"); + } + if (StringUtils.isBlank(deviceId)){ + throw new ServiceException("deviceId cannot be empty!"); + } + Device device = deviceService.getById(deviceId); + if (Objects.isNull(device)){ + throw new ServiceException("ID->"+deviceId + "not exist"); + } + String accessToken = wxAuthService.getAccessToken(); + String url = String.format("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=%s",accessToken); + log.info("url={}",url); + JSONObject jsonBody = JSONObject.of(); + String scene = sysUser.getStoreId() + "$" + deviceId; + jsonBody.put("scene",scene); + if (device.getForcePay() == 0){ + deviceId = "0"; + }else { + jsonBody.put("page","pages/memberRecharge/index"); + } + jsonBody.put("width",280); + byte[] bytes = HttpUtil.postRtnBytes(url, null, jsonBody); + if (bytes == null || bytes.length == 0){ + ServletUtils.renderString(response,"qrcode res is empty"); + return; + } + response.setContentLength(bytes.length); + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String fileName = "设备ID-" + deviceId + "-" + now + ".png"; + String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()) + .replaceAll("\\+", "%20"); + + response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName); + try (OutputStream os = response.getOutputStream()) { + os.write(bytes); + os.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @GetMapping("/accounts") + public List accounts(){ + SysUser sysUser = SecurityUtils.getSysUser(); + if (sysUser.getStoreId() == null){ + throw new ServiceException(403,"权限不足"); + } + List storeAccounts = storeAccountMapper.selectList(new LambdaQueryWrapper().eq(StoreAccount::getStoreId,sysUser.getStoreId())); + List vos = new ArrayList<>(); + for (StoreAccount storeAccount : storeAccounts) { + StoreAccountVO accountVO = new StoreAccountVO(); + BeanUtils.copyProperties(storeAccount,accountVO); + JkStore jkStore = storeService.getById(storeAccount.getStoreId()); + if (jkStore != null){ + accountVO.setAccountName(jkStore.getStoreName()); + } + vos.add(accountVO); + } + return vos; + } + + @PostMapping("/cashOut") + public CashOutResponse cashOut(@RequestBody CashOutDTO dto){ + return childStoreService.profitSharingPay(dto); + } + + @PostMapping("/cashOutRecord") + public Page cashOutRecordPage(@RequestBody UniPage uniPage){ + SysUser sysUser = SecurityUtils.getSysUser(); + if (sysUser.getStoreId() == null){ + throw new ServiceException(403,"权限不足"); + } + Page page = (Page) uniPage.getPage(); + return cashOutRecordMapper.selectPage(page,new LambdaQueryWrapper().eq(CashOutRecord::getStoreId,sysUser.getStoreId())); + } + +} diff --git a/admin/src/main/java/cn/unizk/controller/H5ComboController.java b/admin/src/main/java/cn/unizk/controller/H5ComboController.java new file mode 100644 index 0000000..9dbfba8 --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/H5ComboController.java @@ -0,0 +1,155 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.Combo; +import cn.unizk.entity.po.SubHealthDietaryRegulation; +import cn.unizk.entity.vo.ComboVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.enums.OrderStatus; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.SubHealthDietaryRegulationMapper; +import cn.unizk.service.ComboService; +import cn.unizk.service.SysOrderService; +import cn.unizk.utils.AESUtil; +import cn.unizk.utils.SendSmsUtil; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; + +/** + * @Author hao + * @Date 2025/9/11 12:00 + * @Version 1.0 + **/ +@Slf4j +@RestController +@RequestMapping("/h5") +public class H5ComboController { + + @Resource + private SysOrderService orderService; + @Resource + private ComboService comboService; + /*@Resource + private WxUserService wxUserService;*/ + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + @Resource + private SubHealthDietaryRegulationMapper regulationMapper; + + /* @GetMapping("/getCombos") + public List getCombos(HttpServletRequest request, @RequestParam("deviceId") String deviceId, @RequestParam("phoneNumber") String phoneNumber, + @RequestParam("code") String code){ + validatePhoneCode(phoneNumber,code); + WxUser one = wxUserService.getOne(new LambdaQueryWrapper().eq(WxUser::getPhoneNumber, phoneNumber)); + if (Objects.isNull(one)){ + throw new ServiceException("您不是吉客中医微信小程序的用户"); + } + List wxOrders = orderService.getBaseMapper().selectList(new LambdaQueryWrapper() + .eq(WxOrder::getOpenid, one.getOpenid()) + .eq(WxOrder::getDeviceId, deviceId)); + if (CollectionUtils.isEmpty(wxOrders)){ + throw new ServiceException("抱歉,您在此设备上没有购买套餐"); + } + String encrypt = phoneNumber; + try { + encrypt = AESUtil.encrypt(phoneNumber); + } catch (Exception e) { + log.error("手机号加密异常",e); + } + request.getSession().setAttribute("session",encrypt); + List list = new ArrayList<>(); + for (WxOrder wxOrder : wxOrders) { + Combo combo = comboService.getById(wxOrder.getComboId()); + ComboVO vo = new ComboVO(); + BeanUtils.copyProperties(combo,vo); + vo.setOrderId(wxOrder.getOrderId()); + list.add(vo); + } + return list; + } + + @GetMapping("/sendPhoneCode") + public ResultData sendPhoneCode(@RequestParam("phoneNumber") String phoneNumber){ + String code = RandomStringUtils.randomNumeric(6); + try { + String s = SendSmsUtil.sendPhoneCode(phoneNumber, code); + JSONObject res = JSONObject.parseObject(s); + Integer statusCode = res.getInteger("statusCode"); + if (statusCode != null && statusCode == 200){ + redisTemplate.opsForValue().set("h5:"+phoneNumber,code,300, TimeUnit.SECONDS); + return ResultData.success(); + } + return ResultData.failure(500,"验证码发送失败"); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + throw new ServiceException("验证码发送失败"); + } + } + + @GetMapping("/writeOff") + public boolean writeOff(HttpServletRequest request,@RequestParam("orderId") String orderId){ + String encrypt = (String) request.getSession().getAttribute("session"); + if (StringUtils.isBlank(encrypt)){ + throw new ServiceException("No permission"); + } + String decrypt = encrypt; + try { + decrypt = AESUtil.decrypt(encrypt); + } catch (Exception e) { + log.error("手机号解密异常",e); + } + WxOrder wxOrder = orderService.getOrderByIdAndPhone(orderId, decrypt); + if (Objects.isNull(wxOrder)){ + throw new ServiceException("No permission"); + } + wxOrder.setStatus(OrderStatus.verified.name()); + return orderService.updateById(wxOrder); + } + + @GetMapping("/getAuthQrcode") + public void getAuthQrcode(HttpServletResponse response){ +// QRcodeUtil.generateQrcode(response); + } + + private void validatePhoneCode(String phone,String code){ + String cacheCode = (String) redisTemplate.opsForValue().get("h5:"+phone); + if (StringUtils.isBlank(cacheCode) || !cacheCode.equals(code)){ + throw new ServiceException("验证码错误"); + } + } + + @GetMapping("/checkSubHealth") + public String checkSub(){ + List num = new ArrayList<>(); + int i = 1; + while (i < 123){ + num.add(String.valueOf(i)); + i++; + } + for (String s : num) { + SubHealthDietaryRegulation regulation = regulationMapper.selectById(s); + if (Objects.isNull(regulation)){ + return s; + } + } + return "none"; + }*/ +} diff --git a/admin/src/main/java/cn/unizk/controller/HuaWeiYunController.java b/admin/src/main/java/cn/unizk/controller/HuaWeiYunController.java new file mode 100644 index 0000000..97930a4 --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/HuaWeiYunController.java @@ -0,0 +1,80 @@ +package cn.unizk.controller; + +import cn.unizk.constant.VideoUploadConstants; +import cn.unizk.entity.po.Course; +import cn.unizk.entity.vo.CourseVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.exception.ServiceException; +import cn.unizk.service.HuaWeiYunService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; + +/** + * @Author hao + * @Date 2026/3/6 15:09 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/pc/admin/obs") +@Slf4j +public class HuaWeiYunController { + + @Resource + private HuaWeiYunService huaWeiYunService; + + /** + * 自定义场景生成临时url文档地址:https://support.huaweicloud.com/sdk-java-devg-obs/obs_21_0901.html#obs_21_0901__section11191986541 + * @param file + * @param objName + * @return + */ + + @PostMapping("/uploadVideo") + public ResultData uploadVideo(@RequestParam("file")MultipartFile file,@RequestParam("objName") String objName + ){ + if (file == null || file.isEmpty()){ + throw new ServiceException("上传文件不能为空!"); + } + String originalFilename = file.getOriginalFilename(); + if (originalFilename == null){ + throw new ServiceException("无法获取文件名!"); + } + if (StringUtils.isBlank(objName)){ + throw new ServiceException("objName cannot be null"); + } + String extension = ""; + int dotIndex = originalFilename.lastIndexOf("."); + if (dotIndex > 0) { + extension = originalFilename.substring(dotIndex + 1).toLowerCase(); + } + + if (!"mp4".equals(extension)) { + throw new ServiceException("不支持的文件格式: " + extension + ",仅支持 .mp4"); + } + String contentType = file.getContentType(); + if (contentType == null || !isAllowedMimeType(contentType)) { + throw new ServiceException("文件内容类型不合法:"+contentType); + } + long maxSize = 500 * 1024 * 1024; + if (file.getSize() > maxSize) { + throw new ServiceException("文件大小超过最大限制500MB"); + } + String objectKey = objName + "/" + originalFilename; + String s = huaWeiYunService.uploadVideo(file, objectKey); + ResultData resultData = new ResultData(); + resultData.setData(s); + resultData.setCode(200); + return resultData; + } + + private boolean isAllowedMimeType(String contentType) { + // 标准化 contentType (去除 charset 等参数) + String mainType = contentType.split(";")[0].trim().toLowerCase(); + return VideoUploadConstants.ALLOWED_MIME_TYPES.contains(mainType); + } +} diff --git a/admin/src/main/java/cn/unizk/controller/IsoController.java b/admin/src/main/java/cn/unizk/controller/IsoController.java new file mode 100644 index 0000000..ba0cb6f --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/IsoController.java @@ -0,0 +1,220 @@ +package cn.unizk.controller; + +import cn.hutool.core.date.DateUtil; +import cn.unizk.entity.dto.IsoDTO; +import cn.unizk.entity.po.Device; +import cn.unizk.mapper.DeviceMapper; +import cn.unizk.mapper.SysDictMapper; +import cn.unizk.utils.AESUtil; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.time.Clock; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2025/10/20 18:21 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/") +@Slf4j +public class IsoController { + + @Resource + private DeviceMapper deviceMapper; + @Resource + private SysDictMapper sysDictMapper; + + + @RequestMapping("/satoken/ajaxlogin") + public IsoDTO test() { + log.info("satoken----ajaxlogin---ajaxlogin-ajaxlogin---ajaxlogin"); + IsoDTO dto = new IsoDTO(); + dto.setRescode(200); + JSONObject data = new JSONObject(); + JSONObject o = new JSONObject(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("yhid", "yhid"); + jsonObject.put("yhxm", "yhxm"); + jsonObject.put("yhzh", "yhzh"); + o.put("userBase", jsonObject); + data.put("user", o); + data.put("tokenname", "abcde"); + data.put("tokenvalue", "eyJhbGciOiJIUzI1NiJ9"); + data.put("tokentimeout", 10000000); + dto.setData(data); + return dto; + } + +/* @RequestMapping("/manage/device/submitputstore") + public IsoDTO isoDTO(@RequestParam(value = "un",required = false) String un, + @RequestParam(value = "mu",required = false) String mu, + @RequestParam(value = "hw",required = false) String hw, + @RequestParam(value = "sw",required = false) String sw, + @RequestParam(value = "bt",required = false) String bt){ + + log.info("un={};mu={};hw={};sw={};bt={}",un,mu,hw,sw,bt); + Device one = deviceMapper.selectOne(new LambdaQueryWrapper().eq(Device::getMuid, mu)); + String deviceId; + if (Objects.isNull(one)){ + int year = DateUtil.year(new Date()); + String s = String.valueOf(year); + String substring = s.substring(2); + Integer count = deviceMapper.selectCurrentYearDeviceCount(); + int i = count + 1; + deviceId = un + "-" + substring + "-" + i; + Device device = new Device(); + device.setDeviceId(deviceId); + device.setMuid(mu); + device.setWarehousingTime(LocalDateTime.now(Clock.systemDefaultZone())); + deviceMapper.insert(device); + }else { + deviceId = one.getDeviceId(); + } + IsoDTO dto = new IsoDTO(); + JSONObject data = new JSONObject(); + data.put("sbxlh",deviceId); + data.put("muid",mu); + dto.setData(data); + return dto; + }*/ + +/* @RequestMapping("/manage/device/submitputstore") + public IsoDTO isoDTO(@RequestParam(value = "un", required = false) String un, + @RequestParam(value = "mu", required = false) String mu, + @RequestParam(value = "hw", required = false) String hw, + @RequestParam(value = "sw", required = false) String sw, + @RequestParam(value = "bt", required = false) String bt) { + + log.info("un={};mu={};hw={};sw={};bt={}", un, mu, hw, sw, bt); + Device one = deviceMapper.selectOne(new LambdaQueryWrapper().eq(Device::getMuid, mu)); + String deviceId; + if (Objects.isNull(one)) { + int year = DateUtil.year(new Date()); + String s = String.valueOf(year); + String substring = s.substring(2); + Integer count = deviceMapper.selectCurrentYearDeviceCount(); + int i = count + 1; + String buqi = buqi(i); + deviceId = un + "-" + substring + "-" + buqi; + Device device = new Device(); + device.setDeviceId(deviceId); + device.setMuid(mu); + device.setWarehousingTime(LocalDateTime.now(Clock.systemDefaultZone())); + deviceMapper.insert(device); + } else { + if (one.getDeviceId().length() < 5){ + int year = DateUtil.year(new Date()); + String s = String.valueOf(year); + String substring = s.substring(2); + Integer count = deviceMapper.selectCurrentYearDeviceCount(); + int i = count + 1; + String buqi = buqi(i); + deviceId = un + "-" + substring + "-" + buqi; + deviceMapper.modifyDeviceId(deviceId,one.getDeviceId()); + }else { + deviceId = one.getDeviceId(); + } + } + IsoDTO dto = new IsoDTO(); + JSONObject data = new JSONObject(); + data.put("sbxlh", deviceId); + data.put("muid", mu); + dto.setData(data); + return dto; + }*/ + + @GetMapping("/equipment/warehousing") + public IsoDTO isoDTO2(HttpServletRequest request, @RequestParam(value = "un", required = false) String un, + @RequestParam(value = "mu", required = false) String mu) throws Exception { + + log.info("mu={},un={}",mu,un); + String sKey = request.getHeader("s-key"); + String decrypt = AESUtil.decrypt(sKey); + IsoDTO isoDTO = new IsoDTO(); + if (!decrypt.equals(mu)){ + isoDTO.setRescode(500); + isoDTO.setResmsg("数据校验不通过!"); + isoDTO.setSuccess(false); + return isoDTO; + } + + Device one = deviceMapper.selectOne(new LambdaQueryWrapper().eq(Device::getMuid, mu)); + String deviceId; + if (Objects.isNull(one)){ + int year = DateUtil.year(new Date()); + String s = String.valueOf(year); + String substring = s.substring(2); + List deviceList = deviceMapper.selectCurrentYearDevice(substring); + int max; + if (CollectionUtils.isNotEmpty(deviceList)){ + List integerList = deviceList.stream() + .map(t -> { + String su = t.getDeviceId().substring(8); + String num = su.replaceFirst("^0+", ""); + return Integer.parseInt(num); + }) + .collect(Collectors.toList()); + max = integerList.stream().mapToInt(Integer::intValue) + .max() + .orElseThrow(RuntimeException::new); + }else { + max = 0; + } + int fid = max + 1; + String buqi = buqi(fid); + deviceId = un + "-" + substring + "-" + buqi; + Device device = new Device(); + device.setDeviceId(deviceId); + device.setMuid(mu); + device.setWarehousingTime(LocalDateTime.now(Clock.systemDefaultZone())); + deviceMapper.insert(device); + }else { + String oneDeviceId = one.getDeviceId(); + String fs = oneDeviceId.substring(8); + if (!fs.startsWith("0")){ + String buqi = buqi(Integer.parseInt(fs)); + String substring = oneDeviceId.substring(5,7); + deviceId = un + "-" + substring + "-" + buqi; + deviceMapper.modifyDeviceId(deviceId,one.getDeviceId()); + }else { + deviceId = one.getDeviceId(); + } + } + IsoDTO dto = new IsoDTO(); + JSONObject data = new JSONObject(); + data.put("deviceId", deviceId); + data.put("muid", mu); + dto.setData(data); + dto.setRescode(200); + dto.setResmsg("success"); + return dto; + } + + private String buqi(int i) { + String str = String.valueOf(i); + int len = 5 - str.length(); + String zero = ""; + while (len > 0) { + zero += "0"; + len--; + } + return zero + str; + } + + +} diff --git a/admin/src/main/java/cn/unizk/controller/LoginController.java b/admin/src/main/java/cn/unizk/controller/LoginController.java new file mode 100644 index 0000000..7c49c2d --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/LoginController.java @@ -0,0 +1,63 @@ +package cn.unizk.controller; + +import cn.unizk.entity.dto.IsoDTO; +import cn.unizk.entity.vo.SysUserVO; +import cn.unizk.entity.vo.SysUserVO2; +import cn.unizk.service.LoginService; +import cn.unizk.utils.HttpUtil; +import com.google.gson.Gson; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +/** + * @Author hao + * @Date 2025/8/22 11:32 + * @Version 1.0 + **/ +@RequestMapping("/pc") +@RestController +public class LoginController { + + @Resource + private LoginService loginService; + + @PostMapping("/loginByUsername") + public SysUserVO loginByUsername(@RequestBody SysUserVO sysUserVO){ + return loginService.loginByUsername(sysUserVO); + } + + @PostMapping("/test") + public String test(@RequestParam("file") MultipartFile file){ + /*byte[] fileHeader = new byte[16]; + InputStream is = null; + try { + is = file.getInputStream(); + int bytesRead = is.read(fileHeader); + is.close(); + if (bytesRead < 4) { + throw new ServiceException("文件太小,无法识别"); + } + FileMagicNumber magicNumber = FileMagicNumber.getMagicNumber(fileHeader); + return magicNumber.getMimeType(); + } catch (IOException e) { + e.printStackTrace(); + } + return null;*/ + Map params = new HashMap<>(); + params.put("un","un"); + params.put("mu","mu"); + params.put("hw","hw"); + params.put("sw","sw"); + params.put("bt","bt"); + String s = HttpUtil.doGet("http://localhost:8083/device/submitputstore", null, params); + Gson gson = new Gson(); + IsoDTO isoDTO = gson.fromJson(s, IsoDTO.class); + System.out.println(isoDTO.toString()); + return "success"; + } + +} diff --git a/admin/src/main/java/cn/unizk/controller/MenuController.java b/admin/src/main/java/cn/unizk/controller/MenuController.java new file mode 100644 index 0000000..fd5585e --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/MenuController.java @@ -0,0 +1,36 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.Menu; +import cn.unizk.entity.vo.TreeMenu; +import cn.unizk.service.MenuService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author hao + * @Date 2025/8/26 11:29 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/pc") +public class MenuController { + + @Resource + private MenuService menuService; + + @GetMapping("/admin/menuList") + @PreAuthorize("hasRole('ADMIN')") + public List getAllMenus(){ + return menuService.getAllMenus(); + } + + @GetMapping("/store/menuList") + public List getStoreMenus(){ + return menuService.getStoreMenus(); + } +} diff --git a/admin/src/main/java/cn/unizk/controller/RunningController.java b/admin/src/main/java/cn/unizk/controller/RunningController.java new file mode 100644 index 0000000..efb5592 --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/RunningController.java @@ -0,0 +1,74 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.RunConsultation; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.RunConsultationMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author hao + * @Date 2026/7/15 11:33 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/pc/admin/running") +public class RunningController { + + @Resource + private RunConsultationMapper runConsultationMapper; + + @PostMapping("/getConsults") + public Page page(@RequestBody UniPage uniPage){ + Page page = (Page) uniPage.getPage(); + LambdaQueryWrapper queryWrapper = uniPage.buildQueryWrapper(query -> { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.like(StringUtils.isNotBlank(query.getLesion()), RunConsultation::getLesion, query.getLesion()); + return lambdaQueryWrapper; + }); + return runConsultationMapper.selectPage(page,queryWrapper); + } + + + @PostMapping("/addOrUpdate") + public ResultData addOrUpdate(@RequestBody RunConsultation runConsultation){ + List msgs = new ArrayList<>(); + if (StringUtils.isBlank(runConsultation.getLesion())){ + msgs.add("lesion不能为空"); + } + if (StringUtils.isBlank(runConsultation.getConclusion())){ + msgs.add("conclusion不能为空"); + } + if (StringUtils.isBlank(runConsultation.getQuestion())){ + msgs.add("question不能为空"); + } + if (StringUtils.isBlank(runConsultation.getPlan())){ + msgs.add("plan不能为空"); + } + if (CollectionUtils.isNotEmpty(msgs)){ + String msg = String.join(";", msgs); + throw new ServiceException(msg); + } + if (runConsultation.getId() == null){ + runConsultationMapper.insert(runConsultation); + }else { + runConsultationMapper.updateById(runConsultation); + } + return ResultData.success(); + } + + @PostMapping("/delete") + public ResultData delete(@RequestParam("id") Integer id){ + runConsultationMapper.deleteById(id); + return ResultData.success(); + } +} diff --git a/admin/src/main/java/cn/unizk/controller/SysAppointmentController.java b/admin/src/main/java/cn/unizk/controller/SysAppointmentController.java new file mode 100644 index 0000000..d6dc21c --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/SysAppointmentController.java @@ -0,0 +1,140 @@ +package cn.unizk.controller; + +import cn.hutool.core.date.DateUtil; +import cn.unizk.entity.dto.AppointmentDTO; +import cn.unizk.entity.po.DailySchedules; +import cn.unizk.entity.po.JkPhysio; +import cn.unizk.entity.po.MobileAppointments; +import cn.unizk.entity.vo.DailySchedulesVO; +import cn.unizk.entity.vo.RosterVO; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.mapper.DailySchedulesMapper; +import cn.unizk.mapper.JkPhysioMapper; +import cn.unizk.mapper.MobileAppointmentsMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2026/9/15 11:37 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/pc/admin/appointment") +public class SysAppointmentController { + + @Resource + private DailySchedulesMapper dailySchedulesMapper; + @Resource + private JkPhysioMapper jkPhysioMapper; + @Resource + private MobileAppointmentsMapper mobileAppointmentsMapper; + + + @GetMapping("/roster") + public RosterVO roster(@RequestParam("physioId") Integer physioId){ + /*List dailySchedulesVOS = dailySchedulesMapper.selectRosterList(physioId); + dailySchedulesVOS.forEach(vo -> vo.setScheduleDateStr(vo.getScheduleDate().toString())); + dailySchedulesVOS.sort(((o1, o2) -> o1.getScheduleDate().compareTo(o2.getScheduleDate()))); + Map> collect = dailySchedulesVOS.stream() + .collect(Collectors.groupingBy( + DailySchedulesVO::getScheduleDateStr, + LinkedHashMap::new, + Collectors.toList() + )); + Map> rosterVO = new LinkedHashMap<>(); + for (Map.Entry> entry : collect.entrySet()) { + String s = DateUtil.dayOfWeekEnum(DateUtil.parseDate(entry.getKey())).toChinese(); + rosterVO.put(entry.getKey() + " " + s,entry.getValue()); + } + return rosterVO;*/ + + + List list = dailySchedulesMapper.selectRosterList(physioId); + list.forEach(vo -> vo.setScheduleDateStr(vo.getScheduleDate().toString())); + +// 2) 全局日期列(去重 + 排序) + List dates = list.stream() + .map(DailySchedulesVO::getScheduleDate) + .distinct() + .sorted() + .map(d -> { + RosterVO.DateColumnVO c = new RosterVO.DateColumnVO(); + c.setDate(d.toString()); + c.setWeekday(DateUtil.dayOfWeekEnum(DateUtil.parseDate(d.toString())).toChinese()); + c.setLabel(d + " " + c.getWeekday()); + return c; + }) + .collect(Collectors.toList()); + +// 3) 全局时段行(去重 + 按开始时间排序,保证所有日期行序一致) + List slots = list.stream() + .collect(Collectors.toMap( + DailySchedulesVO::getSlotCode, + vo -> new RosterVO.SlotVO(vo.getSlotCode(), vo.getSlotName(), vo.getStartTime(), vo.getEndTime()), + (a, b) -> a, + LinkedHashMap::new)) + .values().stream() + .sorted(Comparator.comparing(RosterVO.SlotVO::getStartTime)) + .collect(Collectors.toList()); + + // 建立索引:date + slotCode -> VO + Map index = list.stream() + .collect(Collectors.toMap( + vo -> vo.getScheduleDateStr() + "|" + vo.getSlotCode(), + Function.identity(), + (a, b) -> a)); + + List rows = new ArrayList<>(); + for (RosterVO.SlotVO slot : slots) { + RosterVO.RosterRowVO row = new RosterVO.RosterRowVO(); + row.setSlot(slot); + List cells = new ArrayList<>(); + for (RosterVO.DateColumnVO date : dates) { + DailySchedulesVO vo = index.get(date.getDate() + "|" + slot.getSlotCode()); + RosterVO.RosterCellVO cell = new RosterVO.RosterCellVO(); + cell.setDate(date.getDate()); + if (vo == null) { + cell.setStatus("not_scheduled"); // 未排班 + } else { + cell.setId(vo.getId()); + cell.setStatus(vo.getStatus()); + cell.setMaxBookings(vo.getMaxBookings()); + cell.setBookedCount(vo.getBookedCount()); + cell.setAvailableCount(vo.getAvailableCount()); + } + cells.add(cell); + } + row.setCells(cells); + rows.add(row); + } + RosterVO vo = new RosterVO(); + vo.setDates(dates); + vo.setSlots(slots); + vo.setRows(rows); + return vo; + } + + @GetMapping("/getAllPhysio") + public List getAllPhysio(@RequestParam(value = "physioName",required = false) String physioName){ + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(JkPhysio::getAudit,1).eq(JkPhysio::getStatus,"启用"); + if (StringUtils.isNotBlank(physioName)){ + wrapper.eq(JkPhysio::getPhysioName,physioName); + } + return jkPhysioMapper.selectList(wrapper); + } + + @PostMapping("/appointmentList") + public Page page(@RequestBody UniPage uniPage){ + return null; + } +} diff --git a/admin/src/main/java/cn/unizk/controller/SysBusinessChannelController.java b/admin/src/main/java/cn/unizk/controller/SysBusinessChannelController.java new file mode 100644 index 0000000..2a42de4 --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/SysBusinessChannelController.java @@ -0,0 +1,101 @@ +package cn.unizk.controller; + +import cn.hutool.core.date.DateUtil; +import cn.unizk.entity.po.BusinessChannel; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.exception.ServiceException; +import cn.unizk.service.BusinessChannelService; +import cn.unizk.service.WxAuthService; +import cn.unizk.utils.HttpUtil; +import cn.unizk.utils.ServletUtils; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + * @Author hao + * @Date 2025/10/9 14:33 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/pc/channel") +@Slf4j +public class SysBusinessChannelController { + + @Resource + private BusinessChannelService businessChannelService; + @Resource + private WxAuthService wxAuthService; + + @PostMapping("/page") + public Page page(@RequestBody UniPage page){ + Page pagePage = (Page) page.getPage(); + LambdaQueryWrapper queryWrapper = page.buildQueryWrapper(wrapper -> { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.like(StringUtils.isNotBlank(wrapper.getChannelName()), BusinessChannel::getChannelName, wrapper.getChannelName()); + return lambdaQueryWrapper; + }); + return businessChannelService.page(pagePage,queryWrapper); + } + + @PostMapping("/delete") + public boolean delete(@RequestParam("channelId") Integer channelId){ + return businessChannelService.removeById(channelId); + } + + @PostMapping("/addChannel") + public boolean addChannel(@RequestBody BusinessChannel channel){ + List channelList = businessChannelService.list(new LambdaQueryWrapper().eq(BusinessChannel::getChannelName, channel.getChannelName())); + if (CollectionUtils.isNotEmpty(channelList)){ + throw new ServiceException(String.format("渠道商名称:%s已存在",channel.getChannelName())); + } + return businessChannelService.save(channel); + } + + @GetMapping("/getAppletQrCode") + public void getAppletQrCode(HttpServletResponse response,@RequestParam(value = "channelId",required = false) Integer channelId,@RequestParam(value = "type",required = false) String type){ + String accessToken = wxAuthService.getAccessToken(); + String url = String.format("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=%s",accessToken); + log.info("url={}",url); + JSONObject jsonBody = JSONObject.of(); + jsonBody.put("scene",channelId); +// jsonBody.put("check_path",false); +// jsonBody.put("env_version","trial"); + jsonBody.put("width",280); + byte[] bytes = HttpUtil.postRtnBytes(url, null, jsonBody); + if (bytes == null || bytes.length == 0){ + ServletUtils.renderString(response,"qrcode res is empty"); + return; + } + String fileName = ""; + if (channelId != null){ + BusinessChannel businessChannel = businessChannelService.getById(channelId); + fileName = Objects.nonNull(businessChannel) ? businessChannel.getChannelName() : ""; + } +// response.setContentType("image/jpeg"); + response.setContentLength(bytes.length); + if ("download".equals(type)){ + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + response.setHeader("Content-Disposition", "attachment; filename=渠道商-"+channelId+now+".png"); + } + try (OutputStream os = response.getOutputStream()) { + os.write(bytes); + os.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/admin/src/main/java/cn/unizk/controller/SysComboController.java b/admin/src/main/java/cn/unizk/controller/SysComboController.java new file mode 100644 index 0000000..5c73879 --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/SysComboController.java @@ -0,0 +1,73 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.Combo; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.service.ComboService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.lang3.StringUtils; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author hao + * @Date 2025/9/18 10:42 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/pc/combo") +public class SysComboController { + + @Resource + private ComboService comboService; + + @PostMapping("/comboPage") + @PreAuthorize("hasRole('ADMIN')") + public Page page(@RequestBody UniPage uniPage){ + Page page = (Page) uniPage.getPage(); + LambdaQueryWrapper lambdaQueryWrapper = uniPage.buildQueryWrapper(query -> { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(StringUtils.isNotBlank(query.getDeviceId()), Combo::getDeviceId, query.getDeviceId()) + .like(StringUtils.isNotBlank(query.getComboName()), Combo::getComboName, query.getComboName()); + return wrapper; + }); + return comboService.page(page,lambdaQueryWrapper); + } + + @PostMapping("/editCombo") + @PreAuthorize("hasRole('ADMIN')") + public boolean editCombo(@RequestBody Combo combo){ + return comboService.updateById(combo); + } + + @PostMapping("/addCombo") + @PreAuthorize("hasRole('ADMIN')") + public boolean addCombo(@RequestBody Combo combo){ + if (StringUtils.isNotBlank(combo.getDeviceId()) && combo.getDeviceId().contains(",")){ + String[] split = combo.getDeviceId().split(","); + List list = new ArrayList<>(); + for (String s : split) { + Combo c = new Combo(); + c.setChannelId(combo.getChannelId()); + c.setComboDuration(combo.getComboDuration()); + c.setComboName(combo.getComboName()); + c.setComboPrice(combo.getComboPrice()); + c.setDeviceId(s); + c.setImage(combo.getImage()); + list.add(c); + } + return comboService.saveBatch(list); + } + return comboService.save(combo); + } + + @PostMapping("/delete") + @PreAuthorize("hasRole('ADMIN')") + public boolean delete(@RequestParam("comboId") Integer comboId){ + return comboService.removeById(comboId); + } +} diff --git a/admin/src/main/java/cn/unizk/controller/SysCourseController.java b/admin/src/main/java/cn/unizk/controller/SysCourseController.java new file mode 100644 index 0000000..4bc628a --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/SysCourseController.java @@ -0,0 +1,114 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.Chapter; +import cn.unizk.entity.po.Course; +import cn.unizk.entity.po.MobileUserVideoProgress; +import cn.unizk.entity.vo.CourseVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.ChapterMapper; +import cn.unizk.mapper.CourseMapper; +import cn.unizk.mapper.MobileUserVideoProgressMapper; +import cn.unizk.utils.BeanCopyUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.List; + +/** + * @Author hao + * @Date 2026/3/9 11:17 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/pc/admin/course") +@Slf4j +public class SysCourseController { + + private static final String OSS_DOMAIN = "http://oss.peaktcm.com/"; + + @Resource + private CourseMapper courseMapper; + @Resource + private ChapterMapper chapterMapper; + /*@Resource + private WxUserVideoProgressMapper wxUserVideoProgressMapper;*/ + @Resource + private MobileUserVideoProgressMapper mobileUserVideoProgressMapper; + + @PostMapping("/addCourse") + public ResultData addCourse(@Validated @RequestBody Course course){ + course.setCreateTime(LocalDateTime.now()); + return courseMapper.insert(course) > 0 ? ResultData.success() : ResultData.failure(500,"新增课程失败"); + } + + @PostMapping("/addChapter") + public ResultData addChapter(@Validated @RequestBody Chapter chapter){ + chapter.setCreateTime(LocalDateTime.now()); + chapter.setVideoUrl(OSS_DOMAIN + chapter.getVideoUrl()); + return chapterMapper.insert(chapter) > 0 ? ResultData.success() : ResultData.failure(500,"新增章节失败"); + } + + @PostMapping("/courseList") + public Page coursePage(@RequestBody UniPage uniPage){ + Page page = (Page) uniPage.getPage(); + LambdaQueryWrapper buildQueryWrapper = uniPage.buildQueryWrapper(wrapper -> { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.like(StringUtils.isNotBlank(wrapper.getTitle()), Course::getTitle, wrapper.getTitle()); + return queryWrapper; + }); + Page coursePage = courseMapper.selectPage(page, buildQueryWrapper); + Page voPage = new Page<>(page.getCurrent(),page.getSize()); + List records = coursePage.getRecords(); + if (CollectionUtils.isEmpty(records)){ + return new Page<>(); + } + Collection courseVOS = BeanCopyUtils.copyArrays(records, CourseVO::new); + for (CourseVO courseVO : courseVOS) { + List chapters = chapterMapper.selectList(new LambdaQueryWrapper().eq(Chapter::getCourseId, courseVO.getCourseId())); + courseVO.setChapterTotal(chapters.size()); + } + voPage.setRecords((List) courseVOS); + voPage.setTotal(coursePage.getTotal()); + return voPage; + } + + @PostMapping("/chapterList") + public Page chapterPage(@RequestBody UniPage uniPage){ + Page page = (Page) uniPage.getPage(); + LambdaQueryWrapper queryWrapper = uniPage.buildQueryWrapper(wr -> { + if (wr.getCourseId() == null){ + throw new ServiceException("courseId必传"); + } + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Chapter::getCourseId,wr.getCourseId()).like(StringUtils.isNotBlank(wr.getTitle()), Chapter::getTitle, wr.getTitle()); + return wrapper; + }); + return chapterMapper.selectPage(page,queryWrapper); + } + + @PostMapping("/deleteCourse") + public ResultData deleteCourse(@RequestParam("courseId") Integer courseId){ + List chapters = chapterMapper.selectList(new LambdaQueryWrapper().eq(Chapter::getCourseId, courseId)); + if (CollectionUtils.isNotEmpty(chapters)){ + throw new ServiceException("此课程有内容,请先删除课程章节"); + } + return courseMapper.deleteById(courseId) > 0 ? ResultData.success() : ResultData.failure(); + } + + @PostMapping("/deleteChapter") + public ResultData deleteChapter(@RequestParam("chapterId") Integer chapterId){ + mobileUserVideoProgressMapper.delete(new LambdaQueryWrapper().eq(MobileUserVideoProgress::getChapterId,chapterId)); + mobileUserVideoProgressMapper.delete(new LambdaQueryWrapper().eq(MobileUserVideoProgress::getChapterId,chapterId)); + return chapterMapper.deleteById(chapterId) > 0 ? ResultData.success() : ResultData.failure(); + } +} diff --git a/admin/src/main/java/cn/unizk/controller/SysDeviceController.java b/admin/src/main/java/cn/unizk/controller/SysDeviceController.java new file mode 100644 index 0000000..e7d0961 --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/SysDeviceController.java @@ -0,0 +1,669 @@ +package cn.unizk.controller; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.unizk.constants.Constants; +import cn.unizk.entity.dto.DeviceExcelDTO; +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.*; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.*; +import cn.unizk.service.*; +import cn.unizk.utils.BeanCopyUtils; +import cn.unizk.utils.QRcodeUtil; +import cn.unizk.utils.XorUtil; +import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.batch.MybatisBatch; +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 lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.session.SqlSessionFactory; +import org.springframework.beans.BeanUtils; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.time.Clock; +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.*; +import java.util.concurrent.Executor; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2025/9/12 10:46 + * @Version 1.0 + **/ +@RestController +@Slf4j +@RequestMapping("/pc/admin/device") +public class SysDeviceController { + + @Resource + private DeviceService deviceService; + @Resource + private UdpClientService udpClientService; + @Resource + private UdpServerService2 udpServerService; + @Resource + private StoreService storeService; + @Resource + private SqlSessionFactory sqlSessionFactory; + /*@Resource + private WxUserService wxUserService;*/ + @Resource + private MobileAppUserMapper mobileAppUserMapper; + @Resource + private ComboService comboService; + @Resource + private Executor udpRetryExecutor; + @Resource + private DeviceUsageRecordMapper deviceUsageRecordMapper; + @Resource + private DeviceRechargeRecordMapper rechargeRecordMapper; + @Resource + private DeviceUsageDetailMapper usageDetailMapper; + @Resource + private DeviceUpgradeMapper upgradeMapper; + @Resource + private WxAuthService wxAuthService; + @Resource + private TreatParameterMapper treatParameterMapper; + + private static final Path UPLOAD = Paths.get(Constants.DEVICE_UPGRADE_PACKAGE_ROOT_PATH); + + private static final String SAFE_FILENAME_REGEX = "^[\\w\\u4e00-\\u9fa5.-]+$"; + + private static String power_on_off_command = "$02|MU{uid}|DT{date}|ON{1}|SN{2}|*{CRC}\r\n"; + + private static final String OPEN01 = "$01|MU{uid}|DT{date}|ON{1}|CF1|WM1|TC000|*{CRC}\r\n"; + + @PostMapping("/onResponse") + public boolean onResponse(@RequestParam("deviceId") String deviceId){ + return true; + } + + @PostMapping("/closeOrOpen") + public boolean closeOrOpen(@RequestParam("deviceId") String deviceId, + @RequestParam("status") String status){ + + Device device = deviceService.getById(deviceId); + if (Objects.isNull(device)){ + throw new ServiceException("设备不存在"); + } + if ("1".equals(status) && device.getSurplus() < 1){ + throw new ServiceException("此设备无剩余使用次数,无法启用,请先充值!"); + } + UdpServerService2.DeviceInfo deviceInfo = udpServerService.getDeviceInfo(device.getMuid()); + if (Objects.isNull(deviceInfo)){ + device.setStatus(status); + return deviceService.updateById(device); + } + udpRetryExecutor.execute(() -> retryUdp(device, status)); + return true; + /*Device device = deviceService.getById(deviceId); + device.setStatus(status); + deviceService.updateById(device); + //发送UDP协议 + UdpServerService.DeviceInfo deviceInfo = udpServerService.getDeviceInfo(device.getMuid()); + if (Objects.isNull(deviceInfo)){ + log.info("deviceInfo is null+++++++"); + return false; + } + if ("1".equals(deviceInfo.getStatus())){ + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String replace = OPEN01.replace("{uid}", device.getMuid()).replace("{date}", now).replace("{1}", status); + String crc = replace.substring(1, replace.lastIndexOf("*")); + String asciiHex = XorUtil.xorAsciiHex(crc); + String msg = replace.replace("{CRC}", asciiHex); + log.info("传输的数据是:{}",msg); + return udpClientService.sendCommand(deviceInfo,msg); + } + if ("2".equals(deviceInfo.getStatus())){ + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + power_on_off_command = power_on_off_command.replace("{uid}",device.getMuid()) + .replace("{date}",now).replace("{1}",status).replace("{2}","000"); + String crc = power_on_off_command.substring(1, power_on_off_command.lastIndexOf("*")); + String asciiHex = XorUtil.xorAsciiHex(crc); + power_on_off_command = power_on_off_command.replace("{CRC}",asciiHex); + log.info("传输的数据是:{}",power_on_off_command); + return udpClientService.sendCommand(deviceInfo,power_on_off_command); + } + return false;*/ + } + + private void retryUdp(Device device, String status) { + int left = 10; + while (left-- > 0) { + if (udpServerService.reply(device, status)) { + return; + } + try { + Thread.sleep(10_000); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return; + } + } + log.warn("UDP 回复重试耗尽,deviceId={}", device.getDeviceId()); + } + + @PostMapping("/openStatus") + public boolean openStatus(@RequestParam("deviceId") String deviceId, + @RequestParam("status") String status){ + Device device = deviceService.getById(deviceId); + if (Objects.isNull(device)){ + throw new ServiceException("设备不存在"); + } + device.setStatus(status); + deviceService.updateById(device); + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String replace = OPEN01.replace("{uid}", device.getMuid()).replace("{date}", now).replace("{1}", status); + String crc = replace.substring(1, replace.lastIndexOf("*")); + String asciiHex = XorUtil.xorAsciiHex(crc); + String msg = replace.replace("{CRC}", asciiHex); + UdpServerService2.DeviceInfo deviceInfo = udpServerService.getDeviceInfo(device.getMuid()); +// return udpClientService.sendCommand(deviceInfo,msg); + return true; + } + + @PostMapping("/list") + public Page list(@RequestBody UniPage uniPage){ + return deviceService.listPage(uniPage); + } + + @PostMapping("/exportDevices") + public void exportDevices(@RequestBody UniPage uniPage,HttpServletResponse response){ + List records; + uniPage.setPageSize(-1); + DeviceVO queryBody = uniPage.getQueryBody(); + if (CollectionUtils.isEmpty(queryBody.getDeviceIds())){ + Page page = deviceService.listPage(uniPage); + records = page.getRecords(); + }else { + records = deviceService.listByIds(queryBody.getDeviceIds()); + } + Collection deviceExcelDTOS = BeanCopyUtils.copyArrays(records, DeviceExcelDTO::new); + deviceExcelDTOS.forEach(deviceExcelDTO -> { + if (deviceExcelDTO.getOutboundTime() == null){ + deviceExcelDTO.setOutboundType("未出库"); + }else { + deviceExcelDTO.setOutboundType("已出库"); + } + }); + try { + String fileName = URLEncoder.encode("设备信息", "UTF-8").replaceAll("\\+", "%20"); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + response.addHeader("Content-disposition","attachment;filename="+fileName+".xlsx"); + EasyExcel.write(response.getOutputStream(),DeviceExcelDTO.class).sheet("设备信息").doWrite(deviceExcelDTOS); + } catch (Exception e) { + throw new ServiceException("服务异常"); + } + } + + @PostMapping("/remark") + public boolean remark(@RequestBody Device device){ + Device dv = new Device(); + dv.setDeviceId(device.getDeviceId()); + String remark = device.getRemark(); + if (remark == null){ + remark = ""; + } + dv.setRemark(remark); + return deviceService.updateById(dv); + } + + @PostMapping("/outbound") + public ResultData outbound(@RequestBody DeviceOutboundVO vo){ + if (vo.getStoreId() == null && StringUtils.isBlank(vo.getPhoneNumber())){ + throw new ServiceException("请输入门店id或个人手机号"); + } + List deviceIds = vo.getDeviceIds(); + List devices = deviceService.listByIds(deviceIds); + boolean b = devices.stream().allMatch(device -> device.getOutboundTime() == null); + if (!b){ + throw new ServiceException("该批次出库设备中存在已出库的设备!"); + } + if (vo.getStoreId() != null){ + JkStore jkStore = storeService.getById(vo.getStoreId()); + if (Objects.isNull(jkStore)){ + throw new ServiceException("查无此店!"); + } + //出库到门店 + devices.forEach(device -> { + device.setStoreId(vo.getStoreId()); + device.setAffiliatedWith(jkStore.getStoreName()); + device.setOutboundTime(LocalDateTime.now(Clock.systemDefaultZone())); + }); +// batchUpdate(devices); + deviceService.updateBatchById(devices); + }else if (StringUtils.isNotBlank(vo.getPhoneNumber())){ + //出库到个人 + MobileAppUser wxUser = mobileAppUserMapper.selectOne(new LambdaQueryWrapper().eq(MobileAppUser::getPhoneNumber, vo.getPhoneNumber())); + if (Objects.isNull(wxUser)){ + throw new ServiceException("该手机号未注册!"); + } + devices.forEach(device -> { + device.setUserId(wxUser.getId()); + device.setAffiliatedWith(wxUser.getNickname()); + device.setOutboundTime(LocalDateTime.now()); + }); +// batchUpdate(devices); + deviceService.updateBatchById(devices); + }else if (vo.getAgentId() != null){ + //出库到代理商 + log.info("出库到代理商--------"); + } + return ResultData.success(); + } + + @GetMapping("/getOne") + public Device getOne(@RequestParam("deviceId") String deviceId){ + Device device = deviceService.getById(deviceId); + if (Objects.isNull(device)){ + throw new ServiceException("设备不存在"); + } + return device; + } + + @GetMapping("/getQRCode") + public void downloadQRcode(HttpServletResponse response,@RequestParam("deviceId") String deviceId, + @RequestParam(value = "optionType",required = false) String optionType){ + QRcodeUtil.getDeviceQrCode(response,deviceId,optionType); + } + + private void batchUpdate(List devices){ + MybatisBatch mybatisBatch = new MybatisBatch<>(sqlSessionFactory,devices); + MybatisBatch.Method method = new MybatisBatch.Method<>(DeviceMapper.class); + mybatisBatch.execute(method.insert()); + } + + @GetMapping("/getCztc") + public List getCztc(){ + return comboService.list(); + } + + @PostMapping("/cz") + public boolean cz(@RequestBody Device device){ + Device deviceServiceById = deviceService.getById(device.getDeviceId()); + deviceServiceById.setBalance(device.getBalance()); + return deviceService.updateById(deviceServiceById); + } + + @GetMapping("/getDeviceByChannel") + public List getDeviceByChannel(@RequestParam(value = "channelId",required = false) Integer channelId,@RequestParam(value = "deviceId",required = false) String deviceId){ + if (channelId != null){ + List list = storeService.list(new LambdaQueryWrapper().eq(JkStore::getChannelId, channelId)); + List storeIds = list.stream().map(JkStore::getId).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(storeIds)){ + return new ArrayList<>(); + } + return deviceService.list(new LambdaQueryWrapper().in(Device::getStoreId,storeIds).like(StringUtils.isNotBlank(deviceId),Device::getDeviceId,deviceId)); + } + return deviceService.list(); + } + + @PostMapping("/recharge") + @Transactional(rollbackFor = Exception.class) + public boolean recharge(@RequestBody Device device){ + Device deviceServiceById = deviceService.getById(device.getDeviceId()); +// deviceServiceById.setPaymentMethod(device.getPaymentMethod()); + Integer surplus = deviceServiceById.getSurplus(); +// deviceServiceById.setSurplus(surplus + device.getSurplus()); + deviceServiceById.setBalance(deviceServiceById.getBalance().add(device.getBalance())); + if (device.getPaymentMethod() == 1){ + if (deviceServiceById.getPaymentMethod() != null && deviceServiceById.getPaymentMethod() == 1){ + DateTime dateTime = DateUtil.offsetDay(new Date(), device.getSurplus() + surplus); + String s = DateUtil.formatDate(dateTime); + deviceServiceById.setExpireTime(DateUtil.formatDateTime(DateUtil.parseDate(s))); + deviceServiceById.setSurplus(surplus + device.getSurplus()); + }else { + DateTime dateTime = DateUtil.offsetDay(new Date(), device.getSurplus()); + String s = DateUtil.formatDate(dateTime); + deviceServiceById.setExpireTime(DateUtil.formatDateTime(DateUtil.parseDate(s))); + deviceServiceById.setSurplus(device.getSurplus()); + } + } + if (device.getPaymentMethod() == 2){ + if (deviceServiceById.getPaymentMethod() != null && deviceServiceById.getPaymentMethod() == 2){ + deviceServiceById.setExpireTime(String.valueOf(device.getSurplus() + surplus)); + deviceServiceById.setSurplus(device.getSurplus() + surplus); + }else { + deviceServiceById.setExpireTime(String.valueOf(device.getSurplus())); + deviceServiceById.setSurplus(device.getSurplus()); + } + } + deviceServiceById.setRechargeCount(deviceServiceById.getRechargeCount() + 1); + deviceServiceById.setPaymentMethod(device.getPaymentMethod()); + DeviceRechargeRecord rechargeRecord = new DeviceRechargeRecord(); + rechargeRecord.setQuantity(device.getSurplus()); + rechargeRecord.setDeviceId(device.getDeviceId()); + rechargeRecord.setMoney(device.getBalance()); + rechargeRecord.setRechargeType(device.getPaymentMethod()); + rechargeRecord.setCreateTime(LocalDateTime.now()); + rechargeRecordMapper.insert(rechargeRecord); + return deviceService.updateById(deviceServiceById); + } + + @PostMapping("/rechargeRecord") + public Page page(@RequestBody UniPage uniPage){ + Page page = (Page) uniPage.getPage(); + DeviceRechargeRecord queryBody = uniPage.getQueryBody(); + return rechargeRecordMapper.selectPage(page,new LambdaQueryWrapper().eq(DeviceRechargeRecord::getDeviceId,queryBody.getDeviceId())); + } + + + @PostMapping("/usageRecord") + public Page usageRecord(@RequestBody UniPage uniPage){ + Page page = new Page<>(uniPage.getCurrentPage(),uniPage.getPageSize()); + UsageDetailVO queryBody = uniPage.getQueryBody(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(StringUtils.isNotBlank(queryBody.getDeviceId()),DeviceUsageRecord::getDeviceId,queryBody.getDeviceId()); + if (queryBody.getStoreId() != null){ + List devices = deviceService.list(new LambdaQueryWrapper().eq(Device::getStoreId, queryBody.getStoreId())); + List deviceIds = devices.stream().map(Device::getDeviceId).collect(Collectors.toList()); + wrapper.in(DeviceUsageRecord::getDeviceId,deviceIds); + } + if (queryBody.getStartTime() != null && queryBody.getEndTime() != null){ + wrapper.between(DeviceUsageRecord::getStartTime,queryBody.getStartTime(),queryBody.getEndTime()); + } + wrapper.and(StringUtils.isNotBlank(queryBody.getKeyword()),r -> { + r.eq(DeviceUsageRecord::getDeviceId,queryBody.getKeyword()) + .or() + .eq(DeviceUsageRecord::getMuid,queryBody.getKeyword()); + }); + wrapper.orderByDesc(DeviceUsageRecord::getStartTime); + Page recordPage = deviceUsageRecordMapper.selectPage(page, wrapper); + List records = recordPage.getRecords(); + List voList = new ArrayList<>(); + for (DeviceUsageRecord record : records) { + DeviceUsageRecordVO vo = new DeviceUsageRecordVO(); + BeanUtils.copyProperties(record,vo); + if (record.getStartTime() != null && record.getEndTime() != null){ + long minutes = Duration.between(record.getStartTime(), record.getEndTime()).toMinutes(); + vo.setUseDuration(minutes); + } + voList.add(vo); + } + Page voPage = new Page<>(); + voPage.setRecords(voList); + voPage.setCurrent(recordPage.getCurrent()); + voPage.setSize(recordPage.getSize()); + voPage.setTotal(recordPage.getTotal()); + return voPage; + } + + @PostMapping("/changeConfig") + public boolean changeConfig(@RequestBody DeviceConfigVO vo){ + List deviceIds = vo.getDeviceIds(); + if (CollectionUtils.isEmpty(deviceIds)){ + return false; + } + List deviceList = new ArrayList<>(); + deviceIds.forEach(id -> { + Device device = new Device(); + device.setDeviceId(id); + device.setCf(vo.getCf()); + device.setStatus(vo.getCanUse()); + device.setUpgradeSwitch(vo.getUpgradeSwitch()); + deviceList.add(device); + }); + deviceService.updateBatchById(deviceList); + return true; + } + + @PostMapping("/upgrade") + public ResultData upgrade(@RequestParam(value = "id",required = false) Integer id, + @RequestParam(value = "file",required = false) MultipartFile file, + @RequestParam String sVersion, + @RequestParam String hVersion, + @RequestParam String fileName, + @RequestParam(value = "releaseNotes",required = false) String releaseNotes, + @RequestParam Integer beCurrentVersion){ + validateFile(id,file); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + if (id == null){ + wrapper.eq(DeviceUpgrade::getHVersion, hVersion).eq(DeviceUpgrade::getSVersion, sVersion); + DeviceUpgrade deviceUpgrade = upgradeMapper.selectOne(wrapper); + if (Objects.nonNull(deviceUpgrade)){ + throw new ServiceException("已存在相同版本的硬件号和软件号"); + } + if (beCurrentVersion == 1){ + upgradeMapper.updateCurrentVersion(); + } + createFile(file); + DeviceUpgrade upgrade = new DeviceUpgrade(); + upgrade.setBeCurrentVersion(beCurrentVersion); + upgrade.setFileName(fileName); + upgrade.setHVersion(hVersion); + upgrade.setSVersion(sVersion); + upgrade.setReleaseNotes(releaseNotes); + upgrade.setCreateTime(LocalDateTime.now()); + return ResultData.success(upgradeMapper.insert(upgrade)); + }else { + wrapper.eq(DeviceUpgrade::getHVersion, hVersion).eq(DeviceUpgrade::getSVersion, sVersion).ne(DeviceUpgrade::getId,id); + DeviceUpgrade deviceUpgrade = upgradeMapper.selectOne(wrapper); + if (Objects.nonNull(deviceUpgrade)){ + throw new ServiceException("已存在相同版本的硬件号和软件号"); + } + if (beCurrentVersion == 1){ + upgradeMapper.updateCurrentVersion(); + } + if (file != null && !file.isEmpty()){ + DeviceUpgrade selectById = upgradeMapper.selectById(id); + if (Objects.nonNull(selectById)){ + deleteFile(selectById.getFileName()); + } + createFile(file); + } + DeviceUpgrade upgrade = new DeviceUpgrade(); + upgrade.setId(id); + upgrade.setBeCurrentVersion(beCurrentVersion); + upgrade.setFileName(fileName); + upgrade.setHVersion(hVersion); + upgrade.setSVersion(sVersion); + upgrade.setReleaseNotes(releaseNotes); + upgrade.setUpdateTime(LocalDateTime.now()); + return ResultData.success(upgradeMapper.updateById(upgrade)); + } + } + + private void createFile(MultipartFile file){ + String originalFilename = file.getOriginalFilename(); + try { + Files.createDirectories(UPLOAD); + Path dest = UPLOAD.resolve(originalFilename); + file.transferTo(dest); + } catch (IOException e) { + log.error("文件上传失败",e); + } + } + + @PostMapping("/uploadUpgradeFile") + public ResultData uploadUpgradeFile(@RequestParam("file")MultipartFile file,@RequestParam(value = "id",required = false) Integer id) throws IOException { + if (file == null || file.isEmpty()){ + throw new ServiceException("请上传文件"); + } + String originalFilename = file.getOriginalFilename(); + if (StringUtils.isBlank(originalFilename) || originalFilename.endsWith(".bin")){ + throw new ServiceException("文件类型不正确,请重新上传"); + } + if (originalFilename.startsWith(".") || !Pattern.matches(SAFE_FILENAME_REGEX,originalFilename)){ + throw new ServiceException("文件名不合法!"); + } +// validateFile(id,originalFilename,true); + Files.createDirectories(UPLOAD); + Path dest = UPLOAD.resolve(originalFilename); + file.transferTo(dest); + ResultData data = new ResultData<>(); + data.setData(originalFilename); + data.setMessage("上传成功"); + data.setCode(200); + return data; + } + + @PostMapping("/revokeUpgradeFile") + public void revokeUpgradeFile(@RequestParam("filename") String filename){ + DeviceUpgrade deviceUpgrade = upgradeMapper.selectOne(new LambdaQueryWrapper().eq(DeviceUpgrade::getFileName, filename)); + if (Objects.nonNull(deviceUpgrade)){ + return; + } + deleteFile(filename); + } + + private void validateFile(Integer id,MultipartFile file){ + if ((file == null || file.isEmpty()) && id == null){ + throw new ServiceException("请上传文件"); + } + if (file != null && !file.isEmpty()){ + final long maxLen = 1024 * 32; + if (file.getSize() > maxLen){ + throw new ServiceException("文件太大,请重新上传"); + } + String originalFilename = file.getOriginalFilename(); + if (StringUtils.isBlank(originalFilename) || !originalFilename.endsWith(".bin")){ + throw new ServiceException("文件类型不正确,请重新上传"); + } + if (originalFilename.startsWith(".") || !Pattern.matches(SAFE_FILENAME_REGEX,originalFilename)){ + throw new ServiceException("文件名不合法!"); + } + } + if (id == null){ + String originalFilename = file.getOriginalFilename(); + DeviceUpgrade deviceUpgrade = upgradeMapper.selectOne(new LambdaQueryWrapper().eq(DeviceUpgrade::getFileName, originalFilename)); + if (Objects.nonNull(deviceUpgrade)){ + throw new ServiceException(String.format("已存在文件名为%s的文件!",originalFilename)); + } + }else { + if (file != null && !file.isEmpty()){ + String originalFilename = file.getOriginalFilename(); + DeviceUpgrade deviceUpgrade = upgradeMapper.selectOne(new LambdaQueryWrapper().eq(DeviceUpgrade::getFileName, originalFilename).ne(DeviceUpgrade::getId, id)); + if (Objects.nonNull(deviceUpgrade)){ + throw new ServiceException(String.format("已存在文件名为%s的文件!",originalFilename)); + } + DeviceUpgrade upgrade = upgradeMapper.selectById(id); + if (Objects.isNull(upgrade)){ + throw new ServiceException(String.format("id为%d的文件不存在!",id)); + } + } + /*if (isUpload){ + deleteFile(upgrade.getFileName()); + }*/ + } + } + + private void deleteFile(String filename){ + Path path = Paths.get(Constants.DEVICE_UPGRADE_PACKAGE_ROOT_PATH + filename); + try { + Files.deleteIfExists(path); + } catch (IOException e) { + log.error("{}删除失败!",filename,e); + } + } + + @PostMapping("/zeroClearing") + public boolean zeroClearing(@RequestBody List deviceIds){ + for (String deviceId : deviceIds) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(Device::getDeviceId,deviceId) + .set(Device::getPaymentMethod,null) + .set(Device::getSurplus,0) + .set(Device::getExpireTime,"0"); + deviceService.update(updateWrapper); + } + return true; + } + + @PostMapping("/addDevice") + public void addDevice(@RequestBody Device device){ + deviceService.save(device); + } + + @GetMapping("/usageDetail") + public Page page(@RequestParam("usageRecordId") Integer usageRecordId,UniPage uniPage){ + Page page = new Page<>(uniPage.getCurrentPage(),uniPage.getPageSize()); + return usageDetailMapper.selectPage(page,new LambdaQueryWrapper().eq(DeviceUsageDetail::getUsageRecordId,usageRecordId)); + } + + @PostMapping("/reset") + public boolean reset(@RequestBody List deviceIds){ + if (CollectionUtils.isEmpty(deviceIds)){ + return false; + } + return deviceService.lambdaUpdate() + .set(Device::getStoreId, null) + .set(Device::getAffiliatedWith, null) + .set(Device::getOutboundTime, null) + .set(Device::getExpireTime, null) + .set(Device::getSurplus, 0) + .set(Device::getBalance, 0) + .set(Device::getPaymentMethod, null) + .set(Device::getUserId, null) + .set(Device::getAgentId, null) + .set(Device::getForcePay,0) + .in(Device::getDeviceId, deviceIds) + .update(); + } + + @GetMapping("/software") + public Page page(UniPage uniPage,@RequestParam(value = "keyword",required = false) String keyword){ + Page page = new Page<>(uniPage.getCurrentPage(),uniPage.getPageSize()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.and(StringUtils.isNotBlank(keyword),r -> { + r.eq(DeviceUpgrade::getHVersion,keyword) + .or() + .eq(DeviceUpgrade::getSVersion,keyword); + }); + return upgradeMapper.selectPage(page,wrapper); + } + + @PostMapping("/deleteSoftware") + public Integer deleteSoftware(@RequestParam("id") Integer id){ + DeviceUpgrade deviceUpgrade = upgradeMapper.selectById(id); + if (deviceUpgrade == null){ + return 0; + } + deleteFile(deviceUpgrade.getFileName()); + return upgradeMapper.deleteById(id); + } + + @GetMapping("/getTopThree") + public ResultData> getTopThree(@RequestParam("usageRecordId") Integer usageRecordId){ + List deviceUsageDetails = usageDetailMapper.selectTopThree(usageRecordId); + List plList = deviceUsageDetails.stream().map(DeviceUsageDetail::getPl).distinct().collect(Collectors.toList()); + List detailList = new ArrayList<>(); + for (String s : plList) { + DeviceUsageDetail maxTime = deviceUsageDetails.stream().filter(detail -> detail.getPl().equals(s)).max((o1, o2) -> o1.getCreateTime().compareTo(o2.getCreateTime())).get(); + DeviceUsageDetail minTime = deviceUsageDetails.stream().filter(detail -> detail.getPl().equals(s)).min((o1, o2) -> o1.getCreateTime().compareTo(o2.getCreateTime())).get(); + long seconds = Duration.between(minTime.getCreateTime(), maxTime.getCreateTime()).getSeconds(); + DeviceUsageDetailVO vo = new DeviceUsageDetailVO(); + BeanUtils.copyProperties(maxTime,vo); + vo.setSustainTime(seconds); + detailList.add(vo); + } + MobileAppUser wxUser = mobileAppUserMapper.selectById(9); + TreatParameter treatParameter = treatParameterMapper.selectById(wxUser.getPainNumber()); + detailList.forEach(detail -> { + detail.setUl(treatParameter.getUl()); + detail.setPw(treatParameter.getPw()); + detail.setFr(treatParameter.getFr()); +// detail.setCreateTime(null); + }); + detailList.sort((o1, o2) -> (int) (o2.getSustainTime() - o1.getSustainTime())); + return ResultData.success(detailList); + } + +} diff --git a/admin/src/main/java/cn/unizk/controller/SysFileController.java b/admin/src/main/java/cn/unizk/controller/SysFileController.java new file mode 100644 index 0000000..ee9821f --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/SysFileController.java @@ -0,0 +1,58 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.SysFile; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.enums.FileType; +import cn.unizk.exception.ServiceException; +import cn.unizk.service.SysFileService; +import com.google.common.collect.ImmutableSet; +import org.apache.commons.lang3.StringUtils; +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; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Set; + +/** + * @Author hao + * @Date 2025/8/27 18:06 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/pc") +public class SysFileController { + + @Resource + private SysFileService sysFileService; + + @PostMapping("/uploadFile") + public ResultData uploadFile(@RequestParam("file") MultipartFile file) { + String originalFilename = file.getOriginalFilename(); + if (StringUtils.isBlank(originalFilename) || originalFilename.lastIndexOf(".") == -1){ + throw new ServiceException("文件格式不正确"); + } + String fileType = originalFilename.substring(originalFilename.lastIndexOf(".")); + Set types = ImmutableSet.of(".png",".jpg",".jpeg",".ico"); + /*if (!types.contains(fileType)){ + throw new ServiceException("目前只支持上传png,jpg,jpeg,ico类型文件"); + }*/ + String bucketName = FileType.getMinioBucketName(file.getContentType()).getBucketName(); + return sysFileService.simpleUpload(file, bucketName); + } + + @PostMapping("/editFile") + public boolean editFile(){ + List sysFiles = sysFileService.list(); + sysFiles.forEach(sysFile -> { + String fileUrl = sysFile.getFileUrl(); + String replace = fileUrl.replace("http://139.9.2.195:8002/", "https://peaktcm.com:8000/"); + sysFile.setFileUrl(replace); + }); + return sysFileService.updateBatchById(sysFiles); + } + +} diff --git a/admin/src/main/java/cn/unizk/controller/SysPhysioController.java b/admin/src/main/java/cn/unizk/controller/SysPhysioController.java new file mode 100644 index 0000000..af22c8d --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/SysPhysioController.java @@ -0,0 +1,318 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.PhysioExamVO; +import cn.unizk.entity.vo.PhysioVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.*; +import cn.unizk.poi.SubHealthReadListener; +import cn.unizk.service.PhysioService; +import cn.unizk.service.StoreService; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.read.listener.PageReadListener; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.io.File; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + * @Author hao + * @Date 2025/9/9 14:45 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/pc/admin") +public class SysPhysioController { + + @Resource + private PhysioService physioService; + @Resource + private StoreService storeService; + @Resource + private ReportTemplateMapper reportTemplateMapper; + @Resource + private MobileAppUserMapper mobileAppUserMapper; + @Resource + private TreatParameterMapper treatParameterMapper; + @Resource + private SubHealthDietaryRegulationMapper subHealthDietaryRegulationMapper; + @Resource + private PhysioExamMapper examMapper; + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + + private static final String CACHE_TOKEN_KEY = "jk-applet-"; + private static final String CACHE_TOKEN_PREFIX = "mobile-t:"; + + @PostMapping("/listExamTitle") + public Page listExamTitle(@RequestBody UniPage uniPage ){ + Page page = (Page) uniPage.getPage(); + LambdaQueryWrapper lambdaQueryWrapper = uniPage.buildQueryWrapper(q -> { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.like(StringUtils.isNotBlank(q.getTitle()),PhysioExam::getTitle, q.getTitle()); + wrapper.orderByAsc(PhysioExam::getSubject); + return wrapper; + }); + Page physioExamPage = examMapper.selectPage(page, lambdaQueryWrapper); + List records = physioExamPage.getRecords(); + if (CollectionUtils.isEmpty(records)){ + return new Page<>(); + } + List vos = new ArrayList<>(); + for (PhysioExam exam : records) { + PhysioExamVO vo = new PhysioExamVO(); + String answer = exam.getAnswer(); + List answers = Arrays.asList(answer.split("&")); + vo.setTitle(exam.getTitle()); + vo.setAnswers(answers); + vo.setCorrectAnswer(exam.getCorrectAnswer()); + vo.setType(exam.getType()); + vo.setId(exam.getId()); + vo.setSubject(exam.getSubject()); + vos.add(vo); + } + Page voPage = new Page<>(); + voPage.setRecords(vos); + voPage.setTotal(physioExamPage.getTotal()); + voPage.setCurrent(physioExamPage.getCurrent()); + voPage.setSize(physioExamPage.getSize()); + return voPage; + } + + @PostMapping("/saveOrUpdate") + public Integer saveOrUpdate(@RequestBody PhysioExam exam){ + if (exam.getAnswer() == null || !exam.getAnswer().contains("&")){ + throw new ServiceException("选项格式不正确"); + } + if (exam.getSubject() == null){ + throw new ServiceException("subject必填"); + } + if (exam.getId() == null){ + return examMapper.insert(exam); + }else { + return examMapper.updateById(exam); + } + } + + @PostMapping("/deleteExamTitle") + public Integer deleteExamTitle(@RequestParam(value = "id",required = true) Integer id){ + return examMapper.deleteById(id); + } + + @PostMapping("/addPhysio") + public boolean addPhysio(@RequestBody JkPhysio jkPhysio){ + JkPhysio one = physioService.getOne(new LambdaQueryWrapper().eq(JkPhysio::getPhysioTel, jkPhysio.getPhysioTel())); + if (Objects.nonNull(one)){ + throw new ServiceException("该手机号已被其他理疗师注册"); + } + jkPhysio.setAudit(1); + return physioService.save(jkPhysio); + } + + @PostMapping("/physioList") + public Page page(@RequestBody UniPage uniPage){ + Page page = (Page) uniPage.getPage(); + LambdaQueryWrapper queryWrapper = uniPage.buildQueryWrapper(query -> { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + if (query.getAudit() == null){ + wrapper.eq(JkPhysio::getAudit,1); + }else { + wrapper.eq(JkPhysio::getAudit,query.getAudit()); + } + boolean hasKeyword = StringUtils.isNotBlank(query.getKeyword()); + wrapper.eq(query.getStoreId() != null, JkPhysio::getStoreId, query.getStoreId()) + .and(hasKeyword,w -> { + w.eq(hasKeyword, JkPhysio::getId, query.getId()) + .or() + .eq(hasKeyword, JkPhysio::getPhysioTel, query.getKeyword()) + .or() + .eq(hasKeyword, JkPhysio::getIdcard, query.getKeyword()) + .or() + .like(hasKeyword, JkPhysio::getPhysioName, query.getKeyword()); + }); + return wrapper; + }); + Page physioPage = physioService.page(page, queryWrapper); + List records = physioPage.getRecords(); + List list = new ArrayList<>(); + records.forEach(jkPhysio -> { + PhysioVO vo = new PhysioVO(); + BeanUtils.copyProperties(jkPhysio,vo); + JkStore jkStore = storeService.getById(jkPhysio.getStoreId()); + vo.setStoreName(jkStore.getStoreName()); + list.add(vo); + }); + Page physioVOPage = new Page<>(); + physioVOPage.setRecords(list); + physioVOPage.setCurrent(physioPage.getCurrent()); + physioVOPage.setSize(physioPage.getSize()); + physioVOPage.setTotal(physioPage.getTotal()); + return physioVOPage; + } + + @PostMapping("/editPhysioStatus") + public boolean editStatus(@RequestParam("id") Integer id,@RequestParam("status") String status){ + JkPhysio jkPhysio = new JkPhysio(); + jkPhysio.setId(id); + jkPhysio.setStatus(status); + return physioService.updateById(jkPhysio); + } + + @PostMapping("/editPhysio") + public boolean editPhysio(@RequestBody JkPhysio jkPhysio){ + JkPhysio one = physioService.getOne(new LambdaQueryWrapper().eq(JkPhysio::getPhysioTel, jkPhysio.getPhysioTel()).ne(JkPhysio::getId, jkPhysio.getId())); + if (Objects.nonNull(one)){ + throw new ServiceException("该手机号已被其他理疗师注册"); + } + JkPhysio physio = physioService.getById(jkPhysio.getId()); + if (!jkPhysio.getPhysioTel().equals(physio.getPhysioTel())){ + MobileAppUser user = mobileAppUserMapper.selectOne(new LambdaQueryWrapper().eq(MobileAppUser::getPhoneNumber, physio.getPhysioTel())); + if (Objects.nonNull(user) && user.getUserType().equals("P")){ + user.setUserType("C"); + mobileAppUserMapper.updateById(user); + redisTemplate.delete(CACHE_TOKEN_KEY + physio.getPhysioTel()); + redisTemplate.delete(CACHE_TOKEN_PREFIX + physio.getPhysioTel()); + } + } + return physioService.updateById(jkPhysio); + } + + @GetMapping("/reports") + public List list(){ + return reportTemplateMapper.selectList(null); + } + + @PostMapping("/addReportTemplate") + public int addReportTemplate(@RequestBody ReportTemplate template){ + if (template.getId() == null){ + return 0; + } + ReportTemplate reportTemplate = reportTemplateMapper.selectById(template.getId()); + if (Objects.nonNull(reportTemplate)){ + reportTemplate.setText(template.getText()); + reportTemplate.setUpdateTime(LocalDateTime.now()); + return reportTemplateMapper.updateById(reportTemplate); + } + template.setCreateTime(LocalDateTime.now()); + return reportTemplateMapper.insert(template); + } + + @PostMapping("/review") + public Boolean review(@RequestParam("status") Integer status,@RequestBody JkPhysio physio){ + Integer id = physio.getId(); + JkPhysio jkPhysio = new JkPhysio(); + if (status == 1){ + jkPhysio.setId(id); + jkPhysio.setAudit(1); + return physioService.updateById(jkPhysio); + } + if (status == 2){ + jkPhysio.setId(id); + jkPhysio.setAudit(2); + jkPhysio.setRejectReason(physio.getRejectReason()); + return physioService.updateById(jkPhysio); + } + return false; + } + + @GetMapping("/treatParameter") + public List treatParameters(@RequestParam(value = "name",required = false) String name){ + return treatParameterMapper.selectList(new LambdaQueryWrapper() + .like(StringUtils.isNotBlank(name),TreatParameter::getSymptomsName,name)); + } + + @PostMapping("/addOrUpdateTreatParameter") + public Integer addOrUpdateTreatParameter(@RequestBody TreatParameter parameter){ + if (parameter.getId() == null){ + return 0; + }else { + parameter.setFr(together(parameter.getFr(),true)); + parameter.setPl(together(parameter.getPl(),true)); + parameter.setPw(together(parameter.getPw(),true)); + parameter.setUl(together(parameter.getUl(),true)); + parameter.setTl(together(parameter.getTl(),false)); + return treatParameterMapper.updateById(parameter); + } + } + + private String together(String p,boolean f){ + if (StringUtils.isBlank(p)){ + throw new ServiceException("参数不能为空"); + } + if (f){ + if (p.length() > 1){ + return p; + }else { + return "0" + p; + } + }else { + if (p.length() > 2){ + return p; + }else if (p.length() > 1){ + return "0" + p; + }else { + return "00" + p; + } + } + } + + @PostMapping("/addDietaryRegulation") + public ResultData getPhysio(@Validated @RequestBody SubHealthDietaryRegulation regulation){ + SubHealthDietaryRegulation subHealthDietaryRegulation = subHealthDietaryRegulationMapper.selectById(regulation.getSymptomNumber()); + if (Objects.nonNull(subHealthDietaryRegulation)){ + throw new ServiceException(String.format("已存在【%s】症状编号",regulation.getSymptomNumber())); + } + return ResultData.success(subHealthDietaryRegulationMapper.insert(regulation)); + } + + @PostMapping("/editDietaryRegulation") + public ResultData editDietaryRegulation(@Validated @RequestBody SubHealthDietaryRegulation regulation){ + return ResultData.success(subHealthDietaryRegulationMapper.updateById(regulation)); + } + + @PostMapping("/deleteDietary") + public ResultData deleteDietary(@RequestParam("symptomNumber") String symptomNumber){ + return ResultData.success(subHealthDietaryRegulationMapper.deleteById(symptomNumber)); + } + + @PostMapping("/listDietary") + public IPage listDietary(@RequestBody UniPage uniPage){ + IPage page = (IPage) uniPage.getPage(); + SubHealthDietaryRegulation queryBody = uniPage.getQueryBody(); + String number = null,description=number; + if (queryBody != null){ + number = queryBody.getSymptomNumber(); + description = queryBody.getSymptomDescription(); + } + List regulations = subHealthDietaryRegulationMapper.selectSubHealth(page, number, description); + page.setRecords(regulations); + return page; + } + + @GetMapping("/readDietaryExcel") + public void readDietaryExcel(){ + File file = new File("E:\\document\\unizk2\\112.xlsx"); + EasyExcel.read(file,SubHealthDietaryRegulation.class,new SubHealthReadListener(subHealthDietaryRegulationMapper)).sheet().doRead(); + } + + +} diff --git a/admin/src/main/java/cn/unizk/controller/SysPhysioPaiBanController.java b/admin/src/main/java/cn/unizk/controller/SysPhysioPaiBanController.java new file mode 100644 index 0000000..bda2891 --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/SysPhysioPaiBanController.java @@ -0,0 +1,30 @@ +package cn.unizk.controller; + +import cn.unizk.mapper.DailySchedulesMapper; +import cn.unizk.mapper.JkPhysioMapper; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @Author hao + * @Date 2026/5/19 17:30 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/pc/scheduling") +public class SysPhysioPaiBanController { + + @Resource + private DailySchedulesMapper dailySchedulesMapper; + @Resource + private JkPhysioMapper jkPhysioMapper; + + + @GetMapping("/getScheduling") + public void getScheduling(){} + + +} diff --git a/admin/src/main/java/cn/unizk/controller/SysProductController.java b/admin/src/main/java/cn/unizk/controller/SysProductController.java new file mode 100644 index 0000000..9584333 --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/SysProductController.java @@ -0,0 +1,257 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.JkProduct; +import cn.unizk.entity.po.ProductCarousel; +import cn.unizk.entity.po.SysDict; +import cn.unizk.entity.vo.*; +import cn.unizk.enums.DictType; +import cn.unizk.enums.ProductType; +import cn.unizk.exception.ServiceException; +import cn.unizk.service.ProductCarouselService; +import cn.unizk.service.ProductService; +import cn.unizk.service.SysDictService; +import cn.unizk.validatedGroup.DefaultGroup; +import cn.unizk.validatedGroup.UpdateGroup; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * @Author hao + * @Date 2025/9/3 11:51 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/pc/product") +public class SysProductController { + + @Resource + private SysDictService dictService; + @Resource + private ProductService productService; + @Resource + private ProductCarouselService carouselService; + + + @PostMapping("/list") + @PreAuthorize("hasRole('ADMIN')") + public Page list(@RequestBody UniPage uniPage) { + Page page = new Page<>(); + page.setCurrent(uniPage.getCurrentPage()); + page.setSize(uniPage.getPageSize()); + ProductReqVO queryBody = uniPage.getQueryBody(); + if (Objects.isNull(queryBody)) { + return productService.page(page, null); + } + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(StringUtils.isNotBlank(queryBody.getProductType()), JkProduct::getProductType, queryBody.getProductType()) + .eq(StringUtils.isNotBlank(queryBody.getStatus()), JkProduct::getProductStatus, queryBody.getStatus()) + .eq("0".equals(queryBody.getStockType()), JkProduct::getProductStock, 0) + .gt("1".equals(queryBody.getStockType()), JkProduct::getProductStock, 0) + .lt("2".equals(queryBody.getStockType()), JkProduct::getProductStock, 100) + .like(StringUtils.isNotBlank(queryBody.getProductName()), JkProduct::getProductName, queryBody.getProductName()); + return productService.page(page, wrapper); + } + + + @PostMapping("/addProduct") + @PreAuthorize("hasRole('ADMIN')") + public boolean addProduct(@Validated(DefaultGroup.class) @RequestBody JkProductVO productVO) { + SysDict one = dictService.getOne(new LambdaQueryWrapper() + .eq(SysDict::getDictType, DictType.product.name()) + .eq(SysDict::getDictValue, productVO.getProductType())); + if (Objects.isNull(one)) { + throw new ServiceException("不存在此商品类型"); + } + JkProduct product = new JkProduct(); + BeanUtils.copyProperties(productVO,product); + List productCarousels = productVO.getProductCarousels(); + if (CollectionUtils.isNotEmpty(productCarousels)){ + product.setProductImage(productCarousels.get(0).getImageUrl()); + } + productService.save(product); + if (CollectionUtils.isNotEmpty(productCarousels)){ + productCarousels.forEach(s -> { + s.setProductId(product.getProductId()); + s.setType("inner"); + }); + carouselService.saveBatch(productCarousels); + } + return true; + } + + @PostMapping("/editProduct") + @PreAuthorize("hasRole('ADMIN')") + public boolean editPorduct(@Validated(UpdateGroup.class) @RequestBody JkProductVO vo) { + SysDict one = dictService.getOne(new LambdaQueryWrapper() + .eq(SysDict::getDictType, DictType.product.name()) + .eq(SysDict::getDictValue, vo.getProductType())); + if (Objects.isNull(one)) { + throw new ServiceException("不存在此商品类型"); + } + JkProduct product = new JkProduct(); + BeanUtils.copyProperties(vo,product); + List productCarousels = vo.getProductCarousels(); + if (CollectionUtils.isNotEmpty(productCarousels)){ + product.setProductImage(productCarousels.get(0).getImageUrl()); + } + productService.updateById(product); + if (CollectionUtils.isNotEmpty(productCarousels)){ + carouselService.remove(new LambdaQueryWrapper() + .eq(ProductCarousel::getProductId,product.getProductId())); + productCarousels.forEach(s -> { + s.setProductId(product.getProductId()); + s.setType("inner"); + }); + carouselService.saveBatch(productCarousels); + } + return true; + } + + @PostMapping("/echoEditProduct") + @PreAuthorize("hasRole('ADMIN')") + public JkProductVO echoEditProduct(@RequestParam("id") Integer id){ + return productService.echo(id); + } + + + @GetMapping("/listType") + @PreAuthorize("hasRole('ADMIN')") + public Page listType(UniPage uniPage, @RequestParam(value = "status", required = false) String status, + @RequestParam(value = "typeName", required = false) String typeName) { + Page page = new Page<>(); + page.setSize(uniPage.getPageSize()); + page.setCurrent(uniPage.getCurrentPage()); + Page dictPage = dictService.page(page, new LambdaQueryWrapper() + .eq(SysDict::getDictType, DictType.product.name()) + .eq(StringUtils.isNotBlank(status), SysDict::getStatus, status) + .like(StringUtils.isNotBlank(typeName), SysDict::getDictValue, typeName)); + List list = dictPage.getRecords(); + List productTypeVOS = new ArrayList<>(); + list.forEach(sysDict -> { + ProductTypeVO vo = new ProductTypeVO(); + vo.setDictCode(sysDict.getDictCode()); + vo.setPcDisplayImage(sysDict.getPcDisplayImage()); + vo.setStatus(sysDict.getStatus()); + vo.setTypeName(sysDict.getDictValue()); + productTypeVOS.add(vo); + }); + Page productTypeVOPage = new Page<>(); + productTypeVOPage.setCurrent(dictPage.getCurrent()); + productTypeVOPage.setSize(dictPage.getSize()); + productTypeVOPage.setRecords(productTypeVOS); + productTypeVOPage.setTotal(dictPage.getTotal()); + return productTypeVOPage; + } + + @PostMapping("/addType") + @PreAuthorize("hasRole('ADMIN')") + public ResultData addType(@RequestBody ProductTypeVO vo) { + if (StringUtils.isBlank(vo.getTypeName()) || StringUtils.isBlank(vo.getStatus())) { + return ResultData.success(); + } + SysDict one = dictService.getOne(new LambdaQueryWrapper() + .eq(SysDict::getDictType, DictType.product.name()) + .eq(SysDict::getDictValue, vo.getTypeName())); + if (Objects.nonNull(one)) { + return ResultData.failure(500, "已存在该商品类型"); + } + SysDict sysDict = new SysDict(); + sysDict.setDictType(DictType.product.name()); + sysDict.setDictValue(vo.getTypeName()); + sysDict.setPcDisplayImage(vo.getPcDisplayImage()); + sysDict.setStatus(vo.getStatus()); + dictService.save(sysDict); + return ResultData.success(); + } + + @PostMapping("/editProductType") + @PreAuthorize("hasRole('ADMIN')") + public ResultData editProductType(@Valid @RequestBody ProductTypeVO vo) { + SysDict one = dictService.getOne(new LambdaQueryWrapper() + .eq(SysDict::getDictType, DictType.product.name()) + .eq(SysDict::getDictValue, vo.getTypeName()) + .ne(SysDict::getDictCode, vo.getDictCode())); + if (Objects.nonNull(one)) { + throw new ServiceException("已存在该商品类型"); + } + SysDict sysDict = new SysDict(); + sysDict.setDictValue(vo.getTypeName()); + sysDict.setDictCode(vo.getDictCode()); + sysDict.setPcDisplayImage(vo.getPcDisplayImage()); + sysDict.setStatus(vo.getStatus()); + sysDict.setDictType(DictType.product.name()); + dictService.updateById(sysDict); + return ResultData.success(); + + } + + @PostMapping("/deleteProductType/{dictCode}") + @PreAuthorize("hasRole('ADMIN')") + public boolean deleteType(@PathVariable("dictCode") Integer dictCode){ + SysDict sysDict = dictService.getById(dictCode); + List products = productService.list(new LambdaQueryWrapper().eq(JkProduct::getProductType, sysDict.getDictValue())); + if (CollectionUtils.isNotEmpty(products)){ + throw new ServiceException("存在此类型的商品,请先删除商品"); + } + return dictService.remove(new LambdaQueryWrapper() + .eq(SysDict::getDictType,DictType.product.name()).eq(SysDict::getDictCode,dictCode)); + } + + @PostMapping("/deleteProducts") + @PreAuthorize("hasRole('ADMIN')") + public boolean deleteProducts(@RequestBody List productIds){ + if (CollectionUtils.isEmpty(productIds)){ + return false; + } + return productService.removeBatchByIds(productIds); + } + + @PostMapping("/setUpCarousel") + public boolean setUpCarousel(@RequestParam("productId") Integer productId,@RequestParam("isCarousel") Integer isCarousel){ + if (isCarousel == 1){ + List products = productService.list(new LambdaQueryWrapper().eq(JkProduct::getProductStatus, "上架") + .eq(JkProduct::getWhetherCarousel, 1)); + if (products != null && products.size() >= 3){ + throw new ServiceException("首页轮播图最多设置3张,请先移除一张再设置"); + } + JkProduct jkProduct = productService.getById(productId); + if (Objects.isNull(jkProduct)){ + throw new ServiceException("此商品不存在"); + } + jkProduct.setWhetherCarousel(1); + productService.updateById(jkProduct); +// carouselService.remove(new LambdaQueryWrapper().eq(ProductCarousel::getType, "outer")); + ProductCarousel carousel = new ProductCarousel(); + carousel.setProductId(productId); + carousel.setImageUrl(jkProduct.getProductImage()); + carousel.setType("outer"); + return carouselService.save(carousel); + }else if (isCarousel == 0){ + List products = productService.list(new LambdaQueryWrapper().eq(JkProduct::getProductStatus, "上架") + .eq(JkProduct::getWhetherCarousel, 1)); + if (products == null || products.size() < 2){ + throw new ServiceException("至少保留一张轮播图"); + } + JkProduct jkProduct = productService.getById(productId); + jkProduct.setWhetherCarousel(0); + productService.updateById(jkProduct); + return carouselService.remove(new LambdaQueryWrapper() + .eq(ProductCarousel::getProductId,productId) + .eq(ProductCarousel::getType,"outer")); + } + return false; + } + +} diff --git a/admin/src/main/java/cn/unizk/controller/SysStoreController.java b/admin/src/main/java/cn/unizk/controller/SysStoreController.java new file mode 100644 index 0000000..7b778bd --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/SysStoreController.java @@ -0,0 +1,184 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.BusinessChannel; +import cn.unizk.entity.po.Device; +import cn.unizk.entity.po.JkStore; +import cn.unizk.entity.po.SysUser; +import cn.unizk.entity.vo.JkStoreReqVO; +import cn.unizk.entity.vo.JkStoreResVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.DeviceMapper; +import cn.unizk.service.BusinessChannelService; +import cn.unizk.service.StoreService; +import cn.unizk.service.SysUserService; +import cn.unizk.utils.BeanCopyUtils; +import cn.unizk.utils.MapUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.List; +import java.util.Objects; + +/** + * @Author hao + * @Date 2025/9/8 11:58 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/pc/admin") +public class SysStoreController { + + @Resource + private StoreService storeService; + @Resource + private SysUserService userService; + @Resource + private BCryptPasswordEncoder bCryptPasswordEncoder; + @Resource + private BusinessChannelService businessChannelService; + @Resource + private DeviceMapper deviceMapper; + + @PostMapping("/storeList") + public Page list(@RequestBody UniPage uniPage){ + Page page = (Page) uniPage.getPage(); + LambdaQueryWrapper lambdaQueryWrapper = uniPage.buildQueryWrapper(query -> { + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + String keyword = query.getKeyword(); + boolean hasKeyword = StringUtils.isNotBlank(keyword); + w.eq(StringUtils.isNotBlank(query.getStatus()),JkStore::getStatus,query.getStatus()); + w.and(hasKeyword, wrapper -> + wrapper.like(hasKeyword, JkStore::getStoreName, keyword) + .or() + .like(hasKeyword, JkStore::getAddress, keyword) + .or() + .eq(hasKeyword, JkStore::getContactTel, keyword) + ); + return w; + }); + + Page jkStorePage = storeService.page(page, lambdaQueryWrapper); + Page resVOPage = new Page<>(); + resVOPage.setCurrent(jkStorePage.getCurrent()); + resVOPage.setSize(jkStorePage.getSize()); + resVOPage.setTotal(jkStorePage.getTotal()); + List records = jkStorePage.getRecords(); + Collection jkStoreResVOS = BeanCopyUtils.copyArrays(records, JkStoreResVO::new); + for (JkStoreResVO vo : jkStoreResVOS) { + Integer channelId = vo.getChannelId(); + if (channelId == null){ + continue; + } + BusinessChannel businessChannel = businessChannelService.getById(channelId); + vo.setBusinessChannel(businessChannel); + } + resVOPage.setRecords((List) jkStoreResVOS); + return resVOPage; + } + + @GetMapping("/echoAccount") + public JkStoreResVO echoAccount(@RequestParam("storeId") Integer storeId){ + SysUser one = userService.getOne(new LambdaQueryWrapper().eq(SysUser::getStoreId, storeId)); + JkStore byId = storeService.getById(storeId); + JkStoreResVO vo = new JkStoreResVO(); + vo.setContactTel(byId.getContactTel()); + if (Objects.nonNull(one)){ + vo.setSysUser(one); + } + vo.setId(storeId); + return vo; + } + + @PostMapping("/initAccount") + public ResultData initAccount(@RequestBody JkStoreReqVO vo){ + if (vo.getId() == null){ + throw new ServiceException("门店id必传"); + } + if (StringUtils.isBlank(vo.getUsername()) || StringUtils.isBlank(vo.getPassword())){ + throw new ServiceException("账号密码必传"); + } + JkStore jkStore = storeService.getById(vo.getId()); + if (Objects.isNull(jkStore)){ + throw new ServiceException("无此门店,请核对信息"); + } + if (StringUtils.isNotBlank(vo.getContactTel())){ + jkStore.setContactTel(vo.getContactTel()); + } + SysUser one = userService.getOne(new LambdaQueryWrapper() + .eq(SysUser::getStoreId, vo.getId())); + storeService.updateById(jkStore); + String encode = bCryptPasswordEncoder.encode(vo.getPassword()); + if (Objects.isNull(one)){ + SysUser user = new SysUser(); + user.setPassword(encode); + user.setCreateTime(LocalDateTime.now()); + user.setUsername(vo.getUsername()); + userService.save(user); + }else { + one.setUsername(vo.getUsername()); + one.setPassword(encode); + one.setStoreId(vo.getId()); + one.setUpdateTime(LocalDateTime.now()); + userService.updateById(one); + } + return ResultData.success(); + } + + @PostMapping("/closeOrOpen") + public ResultData closed(@RequestParam("storeId") Integer storeId,@RequestParam("status") String status){ + JkStore jkStore = storeService.getById(storeId); + if (Objects.isNull(jkStore)){ + return ResultData.success(); + } + jkStore.setStatus(status); + storeService.updateById(jkStore); + return ResultData.success(); + } + + @PostMapping("/addStore") + public ResultData addStore(@RequestBody JkStoreReqVO vo){ + JkStore loLa = MapUtil.getLoLa(vo.getAddress()); + JkStore jkStore = new JkStore(); + BeanUtils.copyProperties(vo,jkStore); + if (loLa != null){ + jkStore.setLatitude(loLa.getLatitude()); + jkStore.setLongitude(loLa.getLongitude()); + } + storeService.save(jkStore); + SysUser user = new SysUser(); + user.setStoreId(jkStore.getId()); + user.setUsername(vo.getUsername()); + user.setPassword(bCryptPasswordEncoder.encode(vo.getPassword())); + user.setCreateTime(LocalDateTime.now()); + userService.save(user); + return ResultData.success(); + } + + @PostMapping("/editStore") + public boolean editStore(@RequestBody JkStore jkStore){ + List deviceList = deviceMapper.selectList(new LambdaQueryWrapper().eq(Device::getStoreId, jkStore.getId())); + if (CollectionUtils.isNotEmpty(deviceList)){ + deviceList.forEach(device -> { + device.setAffiliatedWith(jkStore.getStoreName()); + }); + deviceMapper.updateById(deviceList); + } + JkStore loLa = MapUtil.getLoLa(jkStore.getAddress()); + if (loLa != null){ + jkStore.setLongitude(loLa.getLongitude()); + jkStore.setLatitude(loLa.getLatitude()); + } + return storeService.updateById(jkStore); + } + +} diff --git a/admin/src/main/java/cn/unizk/controller/SysUserController.java b/admin/src/main/java/cn/unizk/controller/SysUserController.java new file mode 100644 index 0000000..4227138 --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/SysUserController.java @@ -0,0 +1,114 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.SysUser; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.SysUserVO2; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.exception.ServiceException; +import cn.unizk.service.SysUserService; +import cn.unizk.utils.SecurityUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/6/6 17:30 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/pc/admin/sysUser") +public class SysUserController { + + @Resource + private SysUserService sysUserService; + @Resource + private BCryptPasswordEncoder bCryptPasswordEncoder; + + @PostMapping("/getSysUsers") + public Page getSysUser(@RequestBody UniPage uniPage){ + Page page = (Page) uniPage.getPage(); + LambdaQueryWrapper queryWrapper = uniPage.buildQueryWrapper(wrapper -> { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(StringUtils.isNotBlank(wrapper.getUsername()), SysUser::getUsername, wrapper.getUsername()) + .eq(StringUtils.isNotBlank(wrapper.getStatus()), SysUser::getStatus, wrapper.getStatus()) + .eq(SysUser::getRole,"ROLE_ADMIN"); + return lambdaQueryWrapper; + }); + return sysUserService.page(page,queryWrapper); + } + + @PostMapping("/editPwd") + public ResultData addOrUpdate(@RequestBody SysUserVO2 sysUserVO2){ + SysUser currentUser = SecurityUtils.getSysUser(); + SysUser user = sysUserService.getById(currentUser.getId()); + if (!currentUser.getUsername().equals("admin") && !bCryptPasswordEncoder.matches(sysUserVO2.getOriginalPassword(),user.getPassword())){ + throw new ServiceException("您输入的原始密码不正确!"); + } + /*if (!"admin".equals(currentUser.getUsername())){ + if (!user.getId().equals(sysUserVO2.getId())){ + throw new ServiceException("您无权修改他人的账户密码"); + } + }*/ + SysUser byId = sysUserService.getById(sysUserVO2.getId()); + if (Objects.isNull(byId)) throw new ServiceException("用户不存在"); + if (byId.getUsername().equals("admin")){ + throw new ServiceException("无权修改admin账户"); + } + SysUser sysUser = new SysUser(); + + sysUser.setId(sysUserVO2.getId()); + sysUser.setPassword(bCryptPasswordEncoder.encode(sysUserVO2.getNewPassword())); + sysUser.setRole("ROLE_ADMIN"); + sysUser.setUpdateTime(LocalDateTime.now()); + sysUserService.updateById(sysUser); + return ResultData.success(); + } + + @PostMapping("/editSysUser") + public ResultData editSysUser(@RequestBody SysUser sysUser){ + SysUser user = SecurityUtils.getSysUser(); + /*if (!user.getUsername().equals("admin") && !user.getId().equals(sysUser.getId())){ + throw new ServiceException("您无权修改他人的账户密码!"); + }*/ + SysUser byId = sysUserService.getById(sysUser.getId()); + if (Objects.isNull(byId)) throw new ServiceException("用户不存在"); + if (byId.getUsername().equals("admin") && !user.getUsername().equals("admin")) throw new ServiceException("无权修改admin账户"); + sysUser.setPassword(null); + sysUser.setUpdateTime(LocalDateTime.now()); + sysUserService.updateById(sysUser); + return ResultData.success(); + } + + @PostMapping("/addSysUser") + public ResultData addSysUser(@RequestBody SysUser sysUser){ + if ("admin".equals(sysUser.getDept())){ + sysUser.setDept(null); + } + SysUser one = sysUserService.getOne(new LambdaQueryWrapper().eq(SysUser::getUsername, sysUser.getUsername())); + if (Objects.nonNull(one)){ + throw new ServiceException(String.format("【%s】用户名已存在",one.getUsername())); + } + sysUser.setId(null); + String encode = bCryptPasswordEncoder.encode(sysUser.getPassword()); + sysUser.setPassword(encode); + sysUser.setRole("ROLE_ADMIN"); + sysUser.setCreateTime(LocalDateTime.now()); + return sysUserService.save(sysUser) ? ResultData.success() : ResultData.failure(); + } + + @GetMapping("/deleteSysUser") + public ResultData delete(@RequestParam("id") Integer id){ + SysUser sysUser = SecurityUtils.getSysUser(); + if (!sysUser.getId().equals(id) && !sysUser.getUsername().equals("admin")) throw new ServiceException("您无权删除他人账号!"); + sysUserService.removeById(id); + return ResultData.success(); + } +} diff --git a/admin/src/main/java/cn/unizk/controller/UserTreatController.java b/admin/src/main/java/cn/unizk/controller/UserTreatController.java new file mode 100644 index 0000000..92661b8 --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/UserTreatController.java @@ -0,0 +1,34 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.UserTreatmentParameters; +import cn.unizk.mapper.UserTreatmentParametersMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author hao + * @Date 2026/5/8 11:50 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/pc/userTreat") +public class UserTreatController { + + @Resource + private UserTreatmentParametersMapper userTreatmentParametersMapper; + + @GetMapping("/lookTreat") + public List lookTreat(@RequestParam(value = "deviceId",required = false) String deviceId){ + if (StringUtils.isBlank(deviceId)){ + return new ArrayList<>(); + } + return userTreatmentParametersMapper.selectList(new LambdaQueryWrapper() + .eq(UserTreatmentParameters::getStatus,1).eq(UserTreatmentParameters::getDeviceId,deviceId)); + } + +} diff --git a/admin/src/main/java/cn/unizk/controller/WxAuthLoginController.java b/admin/src/main/java/cn/unizk/controller/WxAuthLoginController.java new file mode 100644 index 0000000..7c51b68 --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/WxAuthLoginController.java @@ -0,0 +1,68 @@ +package cn.unizk.controller; + +import cn.unizk.exception.ServiceException; +import cn.unizk.properties.SysWxProperties; +import cn.unizk.service.SysOrderService; +import cn.unizk.service.WxAuthLoginService; +import cn.unizk.utils.HttpUtil; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; +import java.util.Objects; + +/** + * @Author hao + * @Date 2025/9/11 10:39 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/wx") +public class WxAuthLoginController { + + @Resource + private WxAuthLoginService wxAuthLoginService; + @Resource + private SysWxProperties wxProperties; + /*@Resource + private WxUserService userService;*/ + @Resource + private SysOrderService orderService; + + private static String getTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=${1}&secret=${2}&code=${3}&grant_type=authorization_code"; + + @GetMapping("/auth") + public void auth(HttpServletResponse response,@RequestParam("deviceId") String deviceId) throws IOException { + wxAuthLoginService.auth(response,deviceId); + } + +/* @GetMapping("/authCallback") + public void authCallback(HttpServletResponse response,@RequestParam("code") String code,@RequestParam("state") String state) throws IOException { + getTokenUrl = getTokenUrl.replace("${1}",wxProperties.getAppid()).replace("${2}",wxProperties.getSecret()) + .replace("${3}",code); + + String s = HttpUtil.doGet(getTokenUrl, null, null); + JSONObject res = JSONObject.parseObject(s); + String openid = res.getString("openid"); + WxUser wxUser = userService.getOne(new LambdaQueryWrapper().eq(WxUser::getOpenid, openid)); + if (Objects.isNull(wxUser)){ + throw new ServiceException("您不是吉客中医微信小程序的用户"); + } + List wxOrders = orderService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(WxOrder::getOpenid, openid) + .eq(WxOrder::getDeviceId, state)); + if (CollectionUtils.isEmpty(wxOrders)){ + throw new ServiceException("抱歉,您在此设备上没有购买套餐"); + } + //重定向到h5页面,携带openid和deviceId + String redirectUrl = "http://369.peaktcm.com:9000/combo.html?deviceId=" + state + "&openid=" + openid; + response.sendRedirect(redirectUrl); + }*/ +} diff --git a/admin/src/main/java/cn/unizk/controller/WxUserController.java b/admin/src/main/java/cn/unizk/controller/WxUserController.java new file mode 100644 index 0000000..0460bcd --- /dev/null +++ b/admin/src/main/java/cn/unizk/controller/WxUserController.java @@ -0,0 +1,111 @@ +package cn.unizk.controller; + + +import cn.unizk.entity.po.JkPhysio; +import cn.unizk.entity.po.JkStore; +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.entity.po.UserFreeTrialInfo; +import cn.unizk.entity.vo.AppUserDetailsVO; +import cn.unizk.entity.vo.MobileAppUserVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.JkPhysioMapper; +import cn.unizk.mapper.MobileAppUserMapper; +import cn.unizk.mapper.StoreMapper; +import cn.unizk.mapper.UserFreeTrialInfoMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.lang3.StringUtils; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** + * @Author hao + * @Date 2025/9/8 11:25 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/pc/wxUser") +public class WxUserController { + + /* @Resource + private WxUserService wxUserService; +*/ + @Resource + private MobileAppUserMapper mobileAppUserMapper; + @Resource + private UserFreeTrialInfoMapper userFreeTrialInfoMapper; + @Resource + private JkPhysioMapper jkPhysioMapper; + @Resource + private StoreMapper storeMapper; + + + @PostMapping("/list") + @PreAuthorize("hasRole('ADMIN')") + public Page list(@RequestBody UniPage uniPage){ + Page page = (Page) uniPage.getPage(); + LambdaQueryWrapper queryWrapper = uniPage.buildQueryWrapper(query -> { + boolean hasKeyword = StringUtils.isNotBlank(query.getKeyword()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(query.getId() != null, MobileAppUser::getId, query.getId()) + .and(hasKeyword,w -> { + w.eq(hasKeyword, MobileAppUser::getPhoneNumber, query.getKeyword()) + .or() + .like(hasKeyword, MobileAppUser::getNickname, query.getKeyword()); + }); + return wrapper; + }); + return mobileAppUserMapper.selectPage(page,queryWrapper); + } + + @GetMapping("/getUserDetails") + public AppUserDetailsVO getUserDetails(@RequestParam("appUserId") Integer appUserId){ + UserFreeTrialInfo userFreeTrialInfo = userFreeTrialInfoMapper.selectOne(new LambdaQueryWrapper() + .eq(UserFreeTrialInfo::getUserId, appUserId)); + MobileAppUser user = mobileAppUserMapper.selectById(appUserId); + AppUserDetailsVO vo = new AppUserDetailsVO(); + if (user.getFirstPhysioId() != null && user.getFirstStoreId() != null){ + JkPhysio jkPhysio = jkPhysioMapper.selectById(user.getFirstPhysioId()); + JkStore jkStore = storeMapper.selectById(user.getFirstStoreId()); + vo.setFirstPhysioName(jkPhysio.getPhysioName()); + vo.setFirstStoreName(jkStore.getStoreName()); + } + if (Objects.isNull(userFreeTrialInfo)){ + return vo; + } + vo.setSymptomPosition(userFreeTrialInfo.getSymptomPosition()); + Map castLevelMap = new HashMap<>(); + castLevelMap.put(1,"轻度"); + castLevelMap.put(2,"中度"); + castLevelMap.put(3,"重度"); + vo.setStrainLevel(castLevelMap.get(userFreeTrialInfo.getStrainLevel())); + vo.setRestrict(castLevelMap.get(userFreeTrialInfo.getRestrictedDegree())); + castLevelMap.clear(); + castLevelMap.put(1,"低"); + castLevelMap.put(2,"中"); + castLevelMap.put(3,"高"); + vo.setConsumptionLevel(castLevelMap.get(userFreeTrialInfo.getConsumptionLevel())); + return vo; + } + + @PostMapping("/writeOff") + public ResultData writeOff(@RequestParam("appUserId") Integer appUserId){ + UserFreeTrialInfo userFreeTrialInfo = userFreeTrialInfoMapper.selectOne(new LambdaQueryWrapper() + .eq(UserFreeTrialInfo::getUserId, appUserId)); + if (Objects.isNull(userFreeTrialInfo)){ + throw new ServiceException("用户尚未填写首次免费体验信息,无法核销!"); + } + MobileAppUser user = new MobileAppUser(); + user.setId(appUserId); + user.setFreeTrial(0); + mobileAppUserMapper.updateById(user); + return ResultData.success(); + } +} diff --git a/admin/src/main/java/cn/unizk/entity/dto/AppointmentDTO.java b/admin/src/main/java/cn/unizk/entity/dto/AppointmentDTO.java new file mode 100644 index 0000000..78b4e08 --- /dev/null +++ b/admin/src/main/java/cn/unizk/entity/dto/AppointmentDTO.java @@ -0,0 +1,26 @@ +package cn.unizk.entity.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; + +/** + * @Author hao + * @Date 2026/9/17 11:55 + * @Version 1.0 + **/ +@Data +public class AppointmentDTO { + + private String physioName; + + private String patientName; + + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8") + private LocalDate visitDate; + + private String status; +} diff --git a/admin/src/main/java/cn/unizk/entity/dto/LoginUser.java b/admin/src/main/java/cn/unizk/entity/dto/LoginUser.java new file mode 100644 index 0000000..8fb4d68 --- /dev/null +++ b/admin/src/main/java/cn/unizk/entity/dto/LoginUser.java @@ -0,0 +1,91 @@ +package cn.unizk.entity.dto; + +import cn.unizk.entity.po.JkStore; +import cn.unizk.entity.po.SysUser; +import lombok.Getter; +import lombok.Setter; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Collection; +import java.util.Collections; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2025/8/22 18:37 + * @Version 1.0 + **/ +@Getter +@Setter +public class LoginUser implements UserDetails { + + private Integer id; + + private String token; + + private SysUser sysUser; + + private Long loginTime; + + private Long expireTime; + + /** + * 权限列表 + */ + private Set permissions; + + public LoginUser(){} + + public LoginUser(Integer userId,SysUser sysUser,Set permissions){ + this.id = userId; + this.sysUser = sysUser; + this.permissions = permissions; + } + + public LoginUser(SysUser sysUser){ + this.sysUser = sysUser; + } + + @Override + public Collection getAuthorities() { + if (this.permissions == null) { + return Collections.emptyList(); + } + return permissions.stream() + .map(SimpleGrantedAuthority::new) + .collect(Collectors.toList()); + } + + @Override + public String getPassword() { + return sysUser.getPassword(); + } + + @Override + public String getUsername() { + return sysUser.getUsername(); + } + + @Override + public boolean isAccountNonExpired() { + return true; + } + + @Override + public boolean isAccountNonLocked() { + return true; + } + + @Override + public boolean isCredentialsNonExpired() { + return true; + } + + @Override + public boolean isEnabled() { + return true; + } +} diff --git a/admin/src/main/java/cn/unizk/entity/vo/InStockVO.java b/admin/src/main/java/cn/unizk/entity/vo/InStockVO.java new file mode 100644 index 0000000..f539a51 --- /dev/null +++ b/admin/src/main/java/cn/unizk/entity/vo/InStockVO.java @@ -0,0 +1,19 @@ +package cn.unizk.entity.vo; + +import com.alibaba.fastjson2.JSONObject; + +/** + * @Author hao + * @Date 2025/10/20 18:31 + * @Version 1.0 + **/ +public class InStockVO { + + private Integer rescode; + + private Boolean success = true; + + private String resmsg = "success_"; + + private JSONObject data; +} diff --git a/admin/src/main/java/cn/unizk/entity/vo/PhysioScheduleVO.java b/admin/src/main/java/cn/unizk/entity/vo/PhysioScheduleVO.java new file mode 100644 index 0000000..e09e583 --- /dev/null +++ b/admin/src/main/java/cn/unizk/entity/vo/PhysioScheduleVO.java @@ -0,0 +1,18 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +/** + * @Author hao + * @Date 2026/5/19 17:33 + * @Version 1.0 + **/ +@Data +public class PhysioScheduleVO { + + private String m1; + + private String m2; + + +} diff --git a/admin/src/main/java/cn/unizk/entity/vo/ProductTypeVO.java b/admin/src/main/java/cn/unizk/entity/vo/ProductTypeVO.java new file mode 100644 index 0000000..7d4796b --- /dev/null +++ b/admin/src/main/java/cn/unizk/entity/vo/ProductTypeVO.java @@ -0,0 +1,23 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * @Author hao + * @Date 2025/9/3 11:56 + * @Version 1.0 + **/ +@Data +public class ProductTypeVO { + + @NotNull(message = "dictCode cannot be null") + private Integer dictCode; + @NotBlank(message = "typeName cannot be null") + private String typeName; + private String pcDisplayImage; + @NotBlank(message = "status cannot be null") + private String status; +} diff --git a/admin/src/main/java/cn/unizk/entity/vo/SysUserVO.java b/admin/src/main/java/cn/unizk/entity/vo/SysUserVO.java new file mode 100644 index 0000000..07c2f80 --- /dev/null +++ b/admin/src/main/java/cn/unizk/entity/vo/SysUserVO.java @@ -0,0 +1,21 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.SysUser; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2025/8/25 15:04 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class SysUserVO extends SysUser { + + private String token; + + private String storeName; + + private String storeImage; +} diff --git a/admin/src/main/java/cn/unizk/mapper/JkPhysioMapper.java b/admin/src/main/java/cn/unizk/mapper/JkPhysioMapper.java new file mode 100644 index 0000000..e2f8e79 --- /dev/null +++ b/admin/src/main/java/cn/unizk/mapper/JkPhysioMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.JkPhysio; + +public interface JkPhysioMapper extends UniBaseMapper { + +} diff --git a/admin/src/main/java/cn/unizk/mapper/JkProductMapper.java b/admin/src/main/java/cn/unizk/mapper/JkProductMapper.java new file mode 100644 index 0000000..14cf3e7 --- /dev/null +++ b/admin/src/main/java/cn/unizk/mapper/JkProductMapper.java @@ -0,0 +1,10 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.JkProduct; +import cn.unizk.entity.vo.JkProductVO; +import org.apache.ibatis.annotations.Param; + +public interface JkProductMapper extends UniBaseMapper { + + JkProductVO selectProductVO(@Param("id") Integer id); +} diff --git a/admin/src/main/java/cn/unizk/mapper/MenuMapper.java b/admin/src/main/java/cn/unizk/mapper/MenuMapper.java new file mode 100644 index 0000000..a5f4c88 --- /dev/null +++ b/admin/src/main/java/cn/unizk/mapper/MenuMapper.java @@ -0,0 +1,12 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.Menu; + +import java.util.List; + +public interface MenuMapper extends UniBaseMapper { + + List selectAdminMenuList(); + + List selectStoreMenuList(); +} diff --git a/admin/src/main/java/cn/unizk/mapper/ProductCarouselMapper.java b/admin/src/main/java/cn/unizk/mapper/ProductCarouselMapper.java new file mode 100644 index 0000000..ca0edc0 --- /dev/null +++ b/admin/src/main/java/cn/unizk/mapper/ProductCarouselMapper.java @@ -0,0 +1,6 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.ProductCarousel; + +public interface ProductCarouselMapper extends UniBaseMapper { +} diff --git a/admin/src/main/java/cn/unizk/mapper/StoreMapper.java b/admin/src/main/java/cn/unizk/mapper/StoreMapper.java new file mode 100644 index 0000000..d818766 --- /dev/null +++ b/admin/src/main/java/cn/unizk/mapper/StoreMapper.java @@ -0,0 +1,6 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.JkStore; + +public interface StoreMapper extends UniBaseMapper { +} diff --git a/admin/src/main/java/cn/unizk/mapper/SysDictMapper.java b/admin/src/main/java/cn/unizk/mapper/SysDictMapper.java new file mode 100644 index 0000000..1b6f9da --- /dev/null +++ b/admin/src/main/java/cn/unizk/mapper/SysDictMapper.java @@ -0,0 +1,6 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.SysDict; + +public interface SysDictMapper extends UniBaseMapper { +} diff --git a/admin/src/main/java/cn/unizk/mapper/SysFileMapper.java b/admin/src/main/java/cn/unizk/mapper/SysFileMapper.java new file mode 100644 index 0000000..1da78eb --- /dev/null +++ b/admin/src/main/java/cn/unizk/mapper/SysFileMapper.java @@ -0,0 +1,6 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.SysFile; + +public interface SysFileMapper extends UniBaseMapper { +} diff --git a/admin/src/main/java/cn/unizk/mapper/SysUserMapper.java b/admin/src/main/java/cn/unizk/mapper/SysUserMapper.java new file mode 100644 index 0000000..ebe0e61 --- /dev/null +++ b/admin/src/main/java/cn/unizk/mapper/SysUserMapper.java @@ -0,0 +1,6 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.SysUser; + +public interface SysUserMapper extends UniBaseMapper { +} diff --git a/admin/src/main/java/cn/unizk/mapper/UniBaseMapper.java b/admin/src/main/java/cn/unizk/mapper/UniBaseMapper.java new file mode 100644 index 0000000..f824b1d --- /dev/null +++ b/admin/src/main/java/cn/unizk/mapper/UniBaseMapper.java @@ -0,0 +1,6 @@ +package cn.unizk.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface UniBaseMapper extends BaseMapper { +} diff --git a/admin/src/main/java/cn/unizk/mapper/WxOrderMapper.java b/admin/src/main/java/cn/unizk/mapper/WxOrderMapper.java new file mode 100644 index 0000000..b580891 --- /dev/null +++ b/admin/src/main/java/cn/unizk/mapper/WxOrderMapper.java @@ -0,0 +1,18 @@ +/* +package cn.unizk.mapper; + +import cn.unizk.entity.po.WxOrder; +import cn.unizk.entity.vo.OrderReqVO; +import cn.unizk.entity.vo.WxOrderVO; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; + +public interface WxOrderMapper extends UniBaseMapper { + + Page selectOrders(Page page, @Param("vo") OrderReqVO vo); + + WxOrder selectOrderByIdAndPhone(@Param("orderId") String orderId,@Param("phone") String phone); + + Page selectAfterSaleOrders(Page page, @Param("vo") OrderReqVO vo); +} +*/ diff --git a/admin/src/main/java/cn/unizk/mapper/WxUserMapper.java b/admin/src/main/java/cn/unizk/mapper/WxUserMapper.java new file mode 100644 index 0000000..a29fdf0 --- /dev/null +++ b/admin/src/main/java/cn/unizk/mapper/WxUserMapper.java @@ -0,0 +1,15 @@ +/* +package cn.unizk.mapper; + +import cn.unizk.entity.po.WxUser; + +*/ +/** + * @Author hao + * @Date 2025/9/8 11:27 + * @Version 1.0 + **//* + +public interface WxUserMapper extends UniBaseMapper { +} +*/ diff --git a/admin/src/main/java/cn/unizk/properties/PermitAllUrlProperties.java b/admin/src/main/java/cn/unizk/properties/PermitAllUrlProperties.java new file mode 100644 index 0000000..51ba34a --- /dev/null +++ b/admin/src/main/java/cn/unizk/properties/PermitAllUrlProperties.java @@ -0,0 +1,70 @@ +package cn.unizk.properties; + +import cn.unizk.annotation.Anonymous; +import org.apache.commons.lang3.RegExUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.mvc.method.RequestMappingInfo; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; + +import java.util.*; +import java.util.regex.Pattern; + +/** + * @Author hao + * @Date 2025/8/22 19:21 + * @Version 1.0 + **/ +@Configuration +public class PermitAllUrlProperties implements InitializingBean, ApplicationContextAware +{ + private static final Pattern PATTERN = Pattern.compile("\\{(.*?)}"); + + private ApplicationContext applicationContext; + + private List urls = new ArrayList<>(); + + public String ASTERISK = "*"; + + @Override + public void afterPropertiesSet() + { + RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class); + Map map = mapping.getHandlerMethods(); + + map.keySet().forEach(info -> { + HandlerMethod handlerMethod = map.get(info); + + // 获取方法上边的注解 替代path variable 为 * + Anonymous method = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Anonymous.class); + Optional.ofNullable(method).ifPresent(anonymous -> Objects.requireNonNull(info.getPatternsCondition().getPatterns()) + .forEach(url -> urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK)))); + + // 获取类上边的注解, 替代path variable 为 * + Anonymous controller = AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), Anonymous.class); + Optional.ofNullable(controller).ifPresent(anonymous -> Objects.requireNonNull(info.getPatternsCondition().getPatterns()) + .forEach(url -> urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK)))); + }); + } + + @Override + public void setApplicationContext(ApplicationContext context) throws BeansException + { + this.applicationContext = context; + } + + public List getUrls() + { + return urls; + } + + public void setUrls(List urls) + { + this.urls = urls; + } +} diff --git a/admin/src/main/java/cn/unizk/properties/SysWxProperties.java b/admin/src/main/java/cn/unizk/properties/SysWxProperties.java new file mode 100644 index 0000000..236d4ee --- /dev/null +++ b/admin/src/main/java/cn/unizk/properties/SysWxProperties.java @@ -0,0 +1,24 @@ +package cn.unizk.properties; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Author hao + * @Date 2025/9/11 10:12 + * @Version 1.0 + **/ +@Component +@ConfigurationProperties(prefix = "wx") +@Getter +@Setter +public class SysWxProperties { + + private String appid; + + private String secret; + + private String redirectUrl; +} diff --git a/admin/src/main/java/cn/unizk/security/context/AuthenticationContextHolder.java b/admin/src/main/java/cn/unizk/security/context/AuthenticationContextHolder.java new file mode 100644 index 0000000..caf4985 --- /dev/null +++ b/admin/src/main/java/cn/unizk/security/context/AuthenticationContextHolder.java @@ -0,0 +1,25 @@ +package cn.unizk.security.context; + +import org.springframework.security.core.Authentication; + +/** + * @Author hao + * @Date 2025/8/25 14:49 + * @Version 1.0 + **/ +public class AuthenticationContextHolder { + + private static final ThreadLocal AUTHENTICATION_THREAD_LOCAL = new ThreadLocal<>(); + + public static Authentication getContext(){ + return AUTHENTICATION_THREAD_LOCAL.get(); + } + + public static void setContext(Authentication authentication){ + AUTHENTICATION_THREAD_LOCAL.set(authentication); + } + + public static void removeContext(){ + AUTHENTICATION_THREAD_LOCAL.remove(); + } +} diff --git a/admin/src/main/java/cn/unizk/security/filter/JwtAuthenticationTokenFilter.java b/admin/src/main/java/cn/unizk/security/filter/JwtAuthenticationTokenFilter.java new file mode 100644 index 0000000..0086909 --- /dev/null +++ b/admin/src/main/java/cn/unizk/security/filter/JwtAuthenticationTokenFilter.java @@ -0,0 +1,46 @@ +package cn.unizk.security.filter; + +import cn.unizk.entity.dto.LoginUser; +import cn.unizk.service.TokenService; +import cn.unizk.utils.SecurityUtils; +import org.jetbrains.annotations.NotNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Objects; + +/** + * @Author hao + * @Date 2025/8/22 18:54 + * @Version 1.0 + **/ +@Component +public class JwtAuthenticationTokenFilter extends OncePerRequestFilter +{ + @Autowired + private TokenService tokenService; + + @Override + protected void doFilterInternal(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull FilterChain chain) + throws ServletException, IOException + { + LoginUser loginUser = tokenService.getLoginUser(request); + if (Objects.nonNull(loginUser) && Objects.isNull(SecurityUtils.getAuthentication())) + { + tokenService.verifyToken(loginUser); + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities()); + authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); + SecurityContextHolder.getContext().setAuthentication(authenticationToken); + } + chain.doFilter(request, response); + } +} diff --git a/admin/src/main/java/cn/unizk/security/handler/AuthenticationEntryPointImpl.java b/admin/src/main/java/cn/unizk/security/handler/AuthenticationEntryPointImpl.java new file mode 100644 index 0000000..2d7d7e3 --- /dev/null +++ b/admin/src/main/java/cn/unizk/security/handler/AuthenticationEntryPointImpl.java @@ -0,0 +1,57 @@ +package cn.unizk.security.handler; + +import cn.unizk.entity.vo.ResultData; +import cn.unizk.utils.ServletUtils; +import com.alibaba.fastjson2.JSON; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.Serializable; + +/** + * @Author hao + * @Date 2025/8/22 18:23 + * @Version 1.0 + **/ +@Component +public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, Serializable { + private static final long serialVersionUID = -8970718410437077606L; + + @Autowired + private RequestMappingHandlerMapping handlerMapping; + + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) + throws IOException { + /* + 该写法能让用户未登录的情况下访问不存在的路径返回404而非401,但springsecurity会让所有非放行路径名单里的路径(包括 + 不存在的路径)都需要登录认证。这是合乎逻辑的,所以我认为没有必要这样写. + 而且,如果是登录后并且有权限的情况下,访问不存在的路径,是正常返回404的。 + */ + + /*HandlerExecutionChain chain = null; + ServletRequestPathUtils.parseAndCache(request); + try { + chain = handlerMapping.getHandler(request); + } catch (Exception e1) { + e1.printStackTrace(); + } + if (chain == null){ + String msg = String.format("请求访问:%s,资源路径不存在", request.getRequestURI()); + ServletUtils.renderString(response, JSON.toJSONString(ResultData.failure(404, msg))); + }else { + String msg = String.format("请求访问:%s,认证失败,无法访问系统资源", request.getRequestURI()); + ServletUtils.renderString(response, JSON.toJSONString(ResultData.failure(401, msg))); + }*/ + + String msg = String.format("请求访问:%s,认证失败,无法访问系统资源", request.getRequestURI()); + ServletUtils.renderString(response, JSON.toJSONString(ResultData.failure(401, msg))); + + } +} diff --git a/admin/src/main/java/cn/unizk/security/handler/LogoutSuccessHandlerImpl.java b/admin/src/main/java/cn/unizk/security/handler/LogoutSuccessHandlerImpl.java new file mode 100644 index 0000000..03c15bd --- /dev/null +++ b/admin/src/main/java/cn/unizk/security/handler/LogoutSuccessHandlerImpl.java @@ -0,0 +1,50 @@ +package cn.unizk.security.handler; + +import cn.unizk.entity.dto.LoginUser; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.service.TokenService; +import cn.unizk.utils.ServletUtils; +import com.alibaba.fastjson2.JSON; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Objects; + +/** + * @Author hao + * @Date 2025/8/22 18:27 + * @Version 1.0 + **/ +@Configuration +public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler +{ + @Autowired + private TokenService tokenService; + + /** + * 退出处理 + * + * @return + */ + @Override + public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) + throws IOException, ServletException + { + LoginUser loginUser = tokenService.getLoginUser(request); + if (Objects.nonNull(loginUser)) + { + String userName = loginUser.getUsername(); + // 删除用户缓存记录 + tokenService.delLoginUser(loginUser.getToken()); + // 记录用户退出日志 +// AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, MessageUtils.message("user.logout.success"))); + } + ServletUtils.renderString(response, JSON.toJSONString(ResultData.success("user.logout.success"))); + } +} diff --git a/admin/src/main/java/cn/unizk/security/handler/SecurityExceptionHandler.java b/admin/src/main/java/cn/unizk/security/handler/SecurityExceptionHandler.java new file mode 100644 index 0000000..cb321a4 --- /dev/null +++ b/admin/src/main/java/cn/unizk/security/handler/SecurityExceptionHandler.java @@ -0,0 +1,22 @@ +package cn.unizk.security.handler; + +import cn.unizk.entity.vo.ResultData; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.web.access.AccessDeniedHandler; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * @Author hao + * @Date 2025/8/26 17:54 + * @Version 1.0 + **/ +/*@RestControllerAdvice +public class SecurityExceptionHandler { + + @ExceptionHandler(AccessDeniedException.class) + public ResultData handlerAccessDeniedException(AccessDeniedException e){ + e.printStackTrace(); + return ResultData.failure(403,"无权限访问该资源"); + } +}*/ diff --git a/admin/src/main/java/cn/unizk/security/handler/UserAccessDeniedHandler.java b/admin/src/main/java/cn/unizk/security/handler/UserAccessDeniedHandler.java new file mode 100644 index 0000000..17e7546 --- /dev/null +++ b/admin/src/main/java/cn/unizk/security/handler/UserAccessDeniedHandler.java @@ -0,0 +1,29 @@ +package cn.unizk.security.handler; + +import cn.unizk.entity.vo.ResultData; +import cn.unizk.utils.ServletUtils; +import com.alibaba.fastjson2.JSON; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.web.access.AccessDeniedHandler; +import org.springframework.stereotype.Component; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.Serializable; + +/** + * @Author hao + * @Date 2025/8/26 17:02 + * @Version 1.0 + **/ +@Component +public class UserAccessDeniedHandler implements AccessDeniedHandler, Serializable { + private static final long serialVersionUID = 1922706320435419878L; + + @Override + public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException { + ServletUtils.renderString(response, JSON.toJSONString(ResultData.failure(403,"权限不足,无法访问该资源"))); + } +} diff --git a/admin/src/main/java/cn/unizk/service/BusinessChannelService.java b/admin/src/main/java/cn/unizk/service/BusinessChannelService.java new file mode 100644 index 0000000..4844f9a --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/BusinessChannelService.java @@ -0,0 +1,8 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.BusinessChannel; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface BusinessChannelService extends IService { + +} diff --git a/admin/src/main/java/cn/unizk/service/ChildStoreService.java b/admin/src/main/java/cn/unizk/service/ChildStoreService.java new file mode 100644 index 0000000..787ca6a --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/ChildStoreService.java @@ -0,0 +1,138 @@ +package cn.unizk.service; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.unizk.config.HuiFuVendorProperties; +import cn.unizk.entity.dto.CashOutDTO; +import cn.unizk.entity.dto.CashOutResponse; +import cn.unizk.entity.po.CashOutRecord; +import cn.unizk.entity.po.JkStore; +import cn.unizk.entity.po.StoreAccount; +import cn.unizk.entity.po.SysUser; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.CashOutRecordMapper; +import cn.unizk.mapper.StoreAccountMapper; +import cn.unizk.mapper.StoreMapper; +import cn.unizk.utils.HttpUtil; +import cn.unizk.utils.HuifuSignUtil; +import cn.unizk.utils.SecurityUtils; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/3/13 15:31 + * @Version 1.0 + **/ +@Service +@Slf4j +public class ChildStoreService { + + @Resource + private HuiFuVendorProperties vendorProperties; + @Resource + private StoreMapper jkStoreMapper; + @Resource + private CashOutRecordMapper cashOutRecordMapper; + @Resource + private StoreAccountMapper storeAccountMapper; + + + private static final String YUE_PAY_API = "https://api.huifu.com/v2/trade/acctpayment/pay"; + + + /** + * 门店提现接口 + * + * @param dto + * @return + */ + @Transactional(rollbackFor = Exception.class) + public CashOutResponse profitSharingPay(CashOutDTO dto) { + SysUser sysUser = SecurityUtils.getSysUser(); + if (sysUser.getStoreId() == null || !sysUser.getStoreId().equals(dto.getStoreId())){ + throw new ServiceException(403,"非法访问"); + } + JSONObject data = JSONObject.of(); + String snowId = IdUtil.getSnowflakeNextIdStr(); + data.put("req_seq_id", snowId); + String now = DateUtil.format(new Date(), "yyyyMMdd"); + data.put("req_date", now); + data.put("out_huifu_id", vendorProperties.getHuifuId()); + BigDecimal bd = new BigDecimal(dto.getAmount()); + bd = bd.setScale(2, RoundingMode.DOWN); + data.put("ord_amt", bd.toString()); + JkStore jkStore = jkStoreMapper.selectById(dto.getStoreId()); + if (Objects.isNull(jkStore)) { + return new CashOutResponse(500,String.format("门店ID【%d】不存在",dto.getStoreId())); + } + StoreAccount storeAccount = storeAccountMapper.selectOne(new LambdaQueryWrapper().eq(StoreAccount::getStoreId, dto.getStoreId())); + if (Objects.isNull(storeAccount) || storeAccount.getAvailableBalance().compareTo(bd) < 0){ + throw new ServiceException("提现金额不能大于账户可用余额!"); + } + JSONObject acct_split_bunch = JSONObject.of(); + JSONArray acct_infos = new JSONArray(); + JSONObject accInfo = new JSONObject(); + accInfo.put("div_amt",bd.toString()); + accInfo.put("huifu_id", jkStore.getHuifuId()); + accInfo.put("percentage_div", "100.00"); + acct_infos.add(accInfo); + acct_split_bunch.put("acct_infos", acct_infos); + acct_split_bunch.put("percentage_flag", "Y"); + data.put("acct_split_bunch", acct_split_bunch); + String sign = HuifuSignUtil.sign(data, vendorProperties.getPrivateKey()); + JSONObject commonParams = new JSONObject(); + commonParams.put("sys_id", vendorProperties.getSysId()); + commonParams.put("product_id", vendorProperties.getProductId()); + commonParams.put("sign", sign); + commonParams.put("data", data); + log.info("参数:{}", commonParams); + String res = HttpUtil.doPostJson(YUE_PAY_API, null, commonParams); + log.info("余额支付接口返回数据:{}", res); + JSONObject response = JSONObject.parseObject(res); + if (response == null) { + return new CashOutResponse(300,"提现失败!"); + } + JSONObject responseData = response.getJSONObject("data"); + String resp_code = responseData.getString("resp_code"); + String req_seq_id = responseData.getString("req_seq_id"); + String req_date = responseData.getString("req_date"); + String out_huifu_id = responseData.getString("out_huifu_id"); + String ord_amt = responseData.getString("ord_amt"); + if ("00000000".equals(resp_code)) { + log.info("提现成功,流水号:{}", snowId); + CashOutRecord cashOutRecord = new CashOutRecord(); + cashOutRecord.setAmount(bd); + cashOutRecord.setOutHuifuId(vendorProperties.getHuifuId()); + cashOutRecord.setStoreId(dto.getStoreId()); + cashOutRecord.setCreateTime(LocalDateTime.now()); + cashOutRecordMapper.insert(cashOutRecord); + BigDecimal supBalance = storeAccount.getBalance().subtract(bd).setScale(2, RoundingMode.DOWN); + BigDecimal supAvaBalance = storeAccount.getAvailableBalance().subtract(bd).setScale(2, RoundingMode.DOWN); + storeAccount.setBalance(supBalance); + storeAccount.setAvailableBalance(supAvaBalance); + storeAccountMapper.updateById(storeAccount); + return new CashOutResponse(200,"success"); + } + throw new ServiceException(String.format("余额支付接口返回状态码:%s,提现失败!",resp_code)); + } + + /** + * 主动取现,从商户账户提现到银行卡 + * https://paas.huifu.com/open/doc/api/#/jyjs/qx/api_qx + */ + public void realWithdrawCash(){ + + } +} diff --git a/admin/src/main/java/cn/unizk/service/ComboService.java b/admin/src/main/java/cn/unizk/service/ComboService.java new file mode 100644 index 0000000..55505d9 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/ComboService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.Combo; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface ComboService extends IService { +} diff --git a/admin/src/main/java/cn/unizk/service/DeviceService.java b/admin/src/main/java/cn/unizk/service/DeviceService.java new file mode 100644 index 0000000..30adb12 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/DeviceService.java @@ -0,0 +1,12 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.Device; +import cn.unizk.entity.vo.DeviceVO; +import cn.unizk.entity.vo.UniPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface DeviceService extends IService { + + Page listPage(UniPage uniPage); +} diff --git a/admin/src/main/java/cn/unizk/service/FileService.java b/admin/src/main/java/cn/unizk/service/FileService.java new file mode 100644 index 0000000..c93c06e --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/FileService.java @@ -0,0 +1,105 @@ +package cn.unizk.service; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @Author hao + * @Date 2025/11/3 18:36 + * @Version 1.0 + **/ +@Service +@Slf4j +public class FileService { + + private static final int CHUNK_SIZE = 1024; + + public List splitFile(String filePath) throws IOException { + File file = new File(filePath); + return splitFile(file); + } + + public List splitFileWithNIO(String filePath) throws IOException { + File file = new File(filePath); + Path path = file.toPath(); + log.info("开始分包,文件路径: {}, 文件大小: {} 字节", filePath, file.length()); + return splitFileWithNIO(path); + } + + public List splitFile(File file) throws IOException { + List chunks = new ArrayList<>(); + + try (FileInputStream fis = new FileInputStream(file); + BufferedInputStream bis = new BufferedInputStream(fis)) { + + byte[] buffer = new byte[CHUNK_SIZE]; + int bytesRead; + + while ((bytesRead = bis.read(buffer)) != -1) { + // 如果读取的字节数不足1024,创建正确大小的数组 + if (bytesRead < CHUNK_SIZE) { + byte[] lastChunk = new byte[bytesRead]; + System.arraycopy(buffer, 0, lastChunk, 0, bytesRead); + chunks.add(lastChunk); + } else { + chunks.add(buffer.clone()); + } + buffer = new byte[CHUNK_SIZE]; + } + } + + return chunks; + } + + public List splitFileWithNIO(Path filePath) throws IOException { + List chunks = new ArrayList<>(); + + try (FileChannel fileChannel = FileChannel.open(filePath, StandardOpenOption.READ)) { + ByteBuffer buffer = ByteBuffer.allocate(CHUNK_SIZE); + + int chunkIndex = 0; + while (fileChannel.read(buffer) != -1) { + buffer.flip(); // 切换为读模式 + + byte[] chunk = new byte[buffer.remaining()]; + buffer.get(chunk); + log.info("第{}块,实际大小: {} 字节", chunkIndex, chunk.length); + chunks.add(chunk); + + buffer.clear(); // 清空缓冲区,准备下一次读取 + chunkIndex++; + } + } + + log.info("分包完成,总块数: {}", chunks.size()); + int lastIndex = chunks.size() - 1; + byte[] lastPackage = chunks.get(lastIndex); + if (lastPackage.length < 1024) { + // 最后一个包不足1024字节,用0xFF填充 + byte[] paddedPackage = new byte[1024]; + System.arraycopy(lastPackage, 0, paddedPackage, 0, lastPackage.length); + Arrays.fill(paddedPackage, lastPackage.length, 1024, (byte) 0xFF); + chunks.set(lastIndex, paddedPackage); + log.info("最后一个包从{}字节填充到1024字节", lastPackage.length); + } + + // 打印每块的大小 + /*for (int i = 0; i < chunks.size(); i++) { + log.debug("块{}: {}字节", i, chunks.get(i).length); + }*/ + return chunks; + } + +} diff --git a/admin/src/main/java/cn/unizk/service/GeneratePrService.java b/admin/src/main/java/cn/unizk/service/GeneratePrService.java new file mode 100644 index 0000000..6cae5af --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/GeneratePrService.java @@ -0,0 +1,68 @@ +package cn.unizk.service; + +import cn.unizk.entity.dto.PrDTO; +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.entity.po.TreatParameter; +import cn.unizk.mapper.MobileAppUserMapper; +import cn.unizk.mapper.TreatParameterMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author hao + * @Date 2025/12/18 17:00 + * @Version 1.0 + **/ +@Service +public class GeneratePrService { + @Resource + private MobileAppUserMapper mobileAppUserMapper; + @Resource + private TreatParameterMapper treatParameterMapper; + + public PrDTO generatePr(Integer userId){ + if (userId == null){ + return null; + } + MobileAppUser user = mobileAppUserMapper.selectById(userId); + if (user == null || StringUtils.isBlank(user.getPainNumber())){ + return null; + } + PrDTO prDTO = new PrDTO(); + String uuid = RandomStringUtils.randomNumeric(16); + prDTO.setId(uuid); + List prItems = new ArrayList<>(); + String painNumber = user.getPainNumber(); + if (painNumber.contains(",")){ + String[] split = painNumber.split(","); + for (String s : split) { + PrDTO.PrItem prItem = fill(s); + prItems.add(prItem); + } + prDTO.setPrItems(prItems); + }else { + PrDTO.PrItem prItem = fill(painNumber); + prItems.add(prItem); + prDTO.setPrItems(prItems); + } + return prDTO; + } + + private PrDTO.PrItem fill(String painNumber){ + TreatParameter treatParameter = treatParameterMapper.selectById(Integer.parseInt(painNumber)); + PrDTO.PrItem prItem = new PrDTO.PrItem(); + prItem.setFr(treatParameter.getFr()); + prItem.setPl(treatParameter.getPl()); + prItem.setPw(treatParameter.getPw()); + prItem.setUl(treatParameter.getUl()); + prItem.setTl(treatParameter.getTl()); + return prItem; + } +} diff --git a/admin/src/main/java/cn/unizk/service/LoginService.java b/admin/src/main/java/cn/unizk/service/LoginService.java new file mode 100644 index 0000000..b54da11 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/LoginService.java @@ -0,0 +1,9 @@ +package cn.unizk.service; + +import cn.unizk.entity.vo.SysUserVO; +import cn.unizk.entity.vo.SysUserVO2; + +public interface LoginService { + + SysUserVO loginByUsername(SysUserVO sysUserVO); +} diff --git a/admin/src/main/java/cn/unizk/service/MenuService.java b/admin/src/main/java/cn/unizk/service/MenuService.java new file mode 100644 index 0000000..a98ffd8 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/MenuService.java @@ -0,0 +1,14 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.Menu; +import cn.unizk.entity.vo.TreeMenu; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +public interface MenuService extends IService { + + List getAllMenus(); + + List getStoreMenus(); +} diff --git a/admin/src/main/java/cn/unizk/service/PasswordService.java b/admin/src/main/java/cn/unizk/service/PasswordService.java new file mode 100644 index 0000000..57ded66 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/PasswordService.java @@ -0,0 +1,34 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.SysUser; +import cn.unizk.exception.ServiceException; +import cn.unizk.security.context.AuthenticationContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.Authentication; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2025/8/25 14:47 + * @Version 1.0 + **/ +@Service +@Slf4j +public class PasswordService { + + public void validate(SysUser sysUser){ + Authentication context = AuthenticationContextHolder.getContext(); + String rawPassword = (String) context.getCredentials(); + if (!matchPwd(sysUser,rawPassword)){ + throw new ServiceException("密码错误!"); + } + } + + public boolean matchPwd(SysUser sysUser,String rawPassword){ + BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); + String encode = bCryptPasswordEncoder.encode(rawPassword); + log.info("encode={}",encode); + return bCryptPasswordEncoder.matches(rawPassword,sysUser.getPassword()); + } +} diff --git a/admin/src/main/java/cn/unizk/service/PhysioService.java b/admin/src/main/java/cn/unizk/service/PhysioService.java new file mode 100644 index 0000000..abb6696 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/PhysioService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.JkPhysio; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface PhysioService extends IService { +} diff --git a/admin/src/main/java/cn/unizk/service/ProductCarouselService.java b/admin/src/main/java/cn/unizk/service/ProductCarouselService.java new file mode 100644 index 0000000..b51ef49 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/ProductCarouselService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.ProductCarousel; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface ProductCarouselService extends IService { +} diff --git a/admin/src/main/java/cn/unizk/service/ProductService.java b/admin/src/main/java/cn/unizk/service/ProductService.java new file mode 100644 index 0000000..5bdf940 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/ProductService.java @@ -0,0 +1,10 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.JkProduct; +import cn.unizk.entity.vo.JkProductVO; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface ProductService extends IService { + + JkProductVO echo(Integer id); +} diff --git a/admin/src/main/java/cn/unizk/service/StoreService.java b/admin/src/main/java/cn/unizk/service/StoreService.java new file mode 100644 index 0000000..ae1b443 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/StoreService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.JkStore; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface StoreService extends IService { +} diff --git a/admin/src/main/java/cn/unizk/service/SysDictService.java b/admin/src/main/java/cn/unizk/service/SysDictService.java new file mode 100644 index 0000000..b4a97bf --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/SysDictService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.SysDict; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface SysDictService extends IService { +} diff --git a/admin/src/main/java/cn/unizk/service/SysFileService.java b/admin/src/main/java/cn/unizk/service/SysFileService.java new file mode 100644 index 0000000..6e0a83c --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/SysFileService.java @@ -0,0 +1,16 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.SysFile; +import cn.unizk.entity.vo.MinioRespVO; +import cn.unizk.entity.vo.ResultData; +import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.web.multipart.MultipartFile; + +public interface SysFileService extends IService { + + ResultData simpleUpload(MultipartFile file, String bucketName); + + void deleteFile(String bucketName,String fileName) throws Exception; + + void deleteFileById(Integer fileId) throws Exception; +} diff --git a/admin/src/main/java/cn/unizk/service/SysOrderService.java b/admin/src/main/java/cn/unizk/service/SysOrderService.java new file mode 100644 index 0000000..437ebc0 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/SysOrderService.java @@ -0,0 +1,22 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.MobileOrder; +import cn.unizk.entity.vo.MobileOrderVO; +import cn.unizk.entity.vo.OrderReqVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.UniPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface SysOrderService extends IService { + + Page orderList(UniPage uniPage); + + MobileOrder getOrderByIdAndPhone(String orderId,String phone); + + ResultData refund(MobileOrder wxOrder); + + Page afterSale(UniPage uniPage); + + ResultData agreeRefund(String orderId,String platformType); +} diff --git a/admin/src/main/java/cn/unizk/service/SysUserService.java b/admin/src/main/java/cn/unizk/service/SysUserService.java new file mode 100644 index 0000000..25ccebf --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/SysUserService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.SysUser; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface SysUserService extends IService { +} diff --git a/admin/src/main/java/cn/unizk/service/TokenService.java b/admin/src/main/java/cn/unizk/service/TokenService.java new file mode 100644 index 0000000..1538cc5 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/TokenService.java @@ -0,0 +1,139 @@ +package cn.unizk.service; + +import cn.unizk.constants.CacheConstant; +import cn.unizk.constants.Constants; +import cn.unizk.entity.dto.LoginUser; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import io.jsonwebtoken.security.Keys; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import javax.crypto.SecretKey; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * @Author hao + * @Date 2025/8/22 18:47 + * @Version 1.0 + **/ +@Service +@Slf4j +public class TokenService { + + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + + @Value("${token.header}") + private String tokenHeader; + + private SecretKey secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS256); + + + @Value("${token.expireTime}") + private Integer expireTime; + + private static final long TWENTY_MINUTES = 20 * 60 * 1000L; + + private static final long MINUTE_CAST_MILLISECOND_UNIT = 60 * 1000L; + + + public LoginUser getLoginUser(HttpServletRequest request){ + String token = getToken(request); + if (StringUtils.isNotBlank(token)){ + try { + Claims claims = parseToken(token); + String uuid = (String) claims.get(Constants.JWT_TOKEN_KEY); + String redisTokenKey = getRedisTokenKey(uuid); + LoginUser loginUser = (LoginUser) redisTemplate.opsForValue().get(redisTokenKey); + if (Objects.isNull(loginUser)){ + return loginUser; + } + verifyToken(loginUser); + return loginUser; + //在这里调用verifyToken(),不然1小时会过期 + }catch (Exception e){ +// e.printStackTrace(); + log.info("token解析异常"); + } + } + return null; + } + + public String createToken(LoginUser user) { + String uuid = RandomStringUtils.randomAlphanumeric(16); + user.setToken(uuid); + user.setLoginTime(System.currentTimeMillis()); + refreshToken(user, true); + Map claims = new HashMap<>(); + claims.put(Constants.JWT_TOKEN_KEY, uuid); + return createToken(claims); + } + + private String createToken(Map claims) { + + return Jwts.builder() + .setClaims(claims) + .signWith(secretKey) + .compact(); + + } + + private Claims parseToken(String token) { + + return Jwts.parserBuilder() + .setSigningKey(secretKey) + .build() + .parseClaimsJws(token) + .getBody(); + } + + public void verifyToken(LoginUser user) { + Long expireTime = user.getExpireTime(); + long currentTime = System.currentTimeMillis(); + if (expireTime - currentTime <= TWENTY_MINUTES) { + refreshToken(user, false); + } + } + + private void refreshToken(LoginUser user, Boolean refreshLoginTime) { + long currentTimeMillis = System.currentTimeMillis(); + if (refreshLoginTime) { + user.setLoginTime(currentTimeMillis); + } + user.setExpireTime(currentTimeMillis + expireTime * MINUTE_CAST_MILLISECOND_UNIT); + String tokenKey = getRedisTokenKey(user.getToken()); + redisTemplate.opsForValue().set(tokenKey, user,expireTime, TimeUnit.MINUTES); + } + + private String getRedisTokenKey(String uuid) { + return CacheConstant.LOGIN_TOKEN_KEY + uuid; + } + + public String getToken(HttpServletRequest request){ + String token = request.getHeader(tokenHeader); + if (StringUtils.isNotBlank(token) && token.startsWith(Constants.TOKEN_PREFIX)){ + token = token.replace(Constants.TOKEN_PREFIX,""); + } + return token; + } + + public void delLoginUser(String token){ + if (StringUtils.isNotBlank(token)){ + String redisTokenKey = getRedisTokenKey(token); + redisTemplate.delete(redisTokenKey); + } + } +} diff --git a/admin/src/main/java/cn/unizk/service/UdpClientService.java b/admin/src/main/java/cn/unizk/service/UdpClientService.java new file mode 100644 index 0000000..a7de62a --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/UdpClientService.java @@ -0,0 +1,60 @@ +package cn.unizk.service; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.nio.charset.StandardCharsets; + +/** + * @Author hao + * @Date 2025/9/10 16:54 + * @Version 1.0 + **/ +@Service +@Slf4j +public class UdpClientService { + + /** + * 向指定设备发送UDP指令 + * @param deviceIp 设备IP地址 + * @param devicePort 设备端口 + * @param command 要发送的指令 + * @return 发送是否成功 + */ + public boolean sendCommand(String deviceIp, int devicePort, String command) { + try (DatagramSocket clientSocket = new DatagramSocket(9999)) { // 创建临时socket + InetAddress address = InetAddress.getByName(deviceIp); + byte[] sendData = command.getBytes(StandardCharsets.UTF_8); + + DatagramPacket sendPacket = new DatagramPacket( + sendData, + sendData.length, + address, + devicePort + ); + clientSocket.setSoTimeout(3000); + clientSocket.send(sendPacket); + System.out.printf("Command sent to %s:%d - %s%n", deviceIp, devicePort, command); + return true; + + } catch (IOException e) { + System.err.printf("Failed to send command to %s:%d: %s%n", + deviceIp, devicePort, e.getMessage()); + return false; + } + } + + public boolean sendCommand(UdpServerService.DeviceInfo deviceInfo, String command) { + if (deviceInfo == null) { + System.err.println("DeviceInfo is null, cannot send command."); + return false; + } + return sendCommand(deviceInfo.getIp(), deviceInfo.getPort(), command); + } + +} + diff --git a/admin/src/main/java/cn/unizk/service/UdpServerService.java b/admin/src/main/java/cn/unizk/service/UdpServerService.java new file mode 100644 index 0000000..e2dd1b8 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/UdpServerService.java @@ -0,0 +1,718 @@ +package cn.unizk.service; + +import cn.hutool.core.date.DateUtil; +import cn.unizk.constant.UniConstant; +import cn.unizk.entity.po.Device; +import cn.unizk.entity.po.DeviceUpgrade; +import cn.unizk.entity.po.DeviceUsageDetail; +import cn.unizk.entity.po.DeviceUsageRecord; +import cn.unizk.mapper.DeviceMapper; +import cn.unizk.mapper.DeviceUpgradeMapper; +import cn.unizk.mapper.DeviceUsageDetailMapper; +import cn.unizk.mapper.DeviceUsageRecordMapper; +import cn.unizk.task.DeviceTask; +import cn.unizk.utils.XorUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.redis.core.RedisTemplate; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import javax.annotation.Resource; +import java.io.IOException; +import java.net.*; +import java.nio.charset.StandardCharsets; +import java.time.Clock; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @Author hao + * @Date 2025/9/10 16:17 + * @Version 1.0 + **/ +//@Service +@Slf4j +public class UdpServerService { + private ConcurrentHashMap deviceMap = new ConcurrentHashMap<>(); + + private DatagramSocket serverSocket; + private volatile boolean running = false; + private ExecutorService executorService = Executors.newSingleThreadExecutor(); + private static final int LISTEN_PORT = 61100; + private static final long SESSION_TIMEOUT = 60_000; + @Resource + private UdpClientService udpClientService; + @Resource + private DeviceMapper deviceMapper; + @Resource + private DeviceUsageRecordMapper deviceUsageRecordMapper; + @Resource + private DeviceTask deviceTask; + @Resource + private DeviceUsageDetailMapper usageDetailMapper; + @Resource + private DeviceUpgradeMapper upgradeMapper; + @Resource + private FileService fileService; + @Resource(name = "kryoRedisTemplate") + private RedisTemplate redisTemplate; + + private static final String UPGRADE_PACKAGE_ROOT_PATH = "/opt/jkadmin/upgrade/"; + + @Getter + @Setter + public static class DeviceInfo { + private String muid; + private String status; + private String ip; + private int port; + private Boolean startCount = false; + private final long lastActiveTime; + +// DeviceInfo(){} + + /*public boolean getStartCount(){ + return this.startCount; + }*/ + + DeviceInfo(String muid, String status, String ip, int port){ + this.muid = muid; + this.status = status; + this.ip = ip; + this.port = port; + this.startCount = false; + this.lastActiveTime = System.currentTimeMillis(); + } + + DeviceInfo(String muid, String status, String ip, int port,boolean startCount){ + this.muid = muid; + this.status = status; + this.ip = ip; + this.port = port; + this.startCount = startCount; + this.lastActiveTime = System.currentTimeMillis(); + } + } + + @PostConstruct + public void startServer() { + try { + serverSocket = new DatagramSocket(LISTEN_PORT); + running = true; + log.info("UDP Server started on port: {}",LISTEN_PORT); + + executorService.execute(this::receivePackets); + + } catch (SocketException e) { + log.error("Failed to start UDP server on port: {}" ,LISTEN_PORT , e); + } + } + + @PreDestroy + public void stopServer() { + running = false; + if (serverSocket != null && !serverSocket.isClosed()) { + serverSocket.close(); + } + executorService.shutdown(); + log.info("UDP Server stopped."); + } + + private void receivePackets() { + byte[] receiveBuffer = new byte[1024]; // 缓冲区 + + log.info("持续接收UDP数据包,{}",serverSocket.isClosed()); + + while (running && !serverSocket.isClosed()) { + try { + DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, receiveBuffer.length); + serverSocket.receive(receivePacket); // 阻塞等待接收数据 + log.info("处理接收到的数据包"); + // 处理接收到的数据包(可以在新线程中处理,避免阻塞接收) + handlePacket(receivePacket); + } catch (Exception e) { + if (running) { // 只有在运行状态下的异常才打印 + log.error("Error receiving packet: " , e); + } + } + } + } + + private void handlePacket(DatagramPacket packet) { + + String deviceIp = packet.getAddress().getHostAddress(); + int devicePort = packet.getPort(); + + String receivedMessage = new String(packet.getData(), 0, packet.getLength()); + + System.out.printf("Received from %s:%d - Message: %s%n", + deviceIp, devicePort, receivedMessage); + + if (StringUtils.isBlank(receivedMessage)){ + log.info("接收到的数据包为空"); + return; + } + + + // 需要根据实际协议格式进行解析 + String muid = parsemuid(receivedMessage); // 需要实现此方法 + String status = receivedMessage.substring(2, 3); + log.info("解析得到的muid={}",muid); + log.info("解析得到的状态码是:{}",status); + + if (muid != null && !muid.isEmpty()) { + Device device = deviceMapper.selectOne(new LambdaQueryWrapper().eq(Device::getMuid, muid)); + // 将设备信息存入Map + System.out.println("Device registered: " + muid + " at " + deviceIp + ":" + devicePort); + + if (Objects.isNull(device)){ + log.info("数据库不存在该设备,muid={}",muid); + }else { + DeviceInfo deviceInfo = deviceMap.get(muid); + if ("1".equals(status)){ + if (Objects.isNull(deviceInfo)){ + log.info("deviceMap缓存中没有{}这个设备",muid); + deviceMap.put(muid, new DeviceInfo(muid,status, deviceIp, devicePort)); + }else { + if (deviceInfo.getStartCount() && device.getSurplus() > 0){ + log.info("设备状态为01开机,开始计数startCount为true"); + int count = device.getSurplus() - 1; + device.setSurplus(count); + device.setExpireTime(String.valueOf(count)); + deviceMapper.updateById(device); + } + deviceMap.put(muid, new DeviceInfo(muid,status, deviceIp, devicePort)); + } + String lo = null, la = null; + String[] items = receivedMessage.split("\\|"); + for (String item : items) { + if (item.startsWith("LO")){ + lo = item.substring(2); + } + if (item.startsWith("LA")){ + la = item.substring(2); + } + } + if (lo != null && la != null){ + device.setLo(lo); + device.setLa(la); + deviceMapper.updateById(device); + } + parseDeviceInfo(device,receivedMessage); + /** + * 拿device的硬件版本和软件版本去查device_upgrade表,如果跟当前版本不一致则升级 + */ + if ("000B57020457D4B100001F98".equals(muid)){ + log.info("muid=***F97,回复升级心跳"); + replyUpgradeHeartbeat(deviceMap.get(muid),packet); + }else { + replyHeartbeat(deviceMap.get(muid),packet); + } + DeviceUsageDetail detail = new DeviceUsageDetail(); + detail.setStatus(status); + recordUse(device,detail); + if (device.getOperatingStatus() == 0){ + changeDeviceOperatingStatus(device.getDeviceId(),2); + } + } + if ("1".equals(status) && device.getSurplus() < 1){ + log.info("设备状态为1,无剩余使用次数,马上停"); + String c1 = "$01|MU{uid}|DT{date}|ON{1}|CF1|WM1|TC000|*{CRC}\r\n"; + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String replace = c1.replace("{uid}", muid).replace("{date}", now).replace("{1}", "0"); + String crc = replace.substring(1, replace.lastIndexOf("*")); + String asciiHex = XorUtil.xorAsciiHex(crc); + String s = replace.replace("{CRC}", asciiHex); + byte[] sendData = s.getBytes(StandardCharsets.UTF_8); + + DatagramPacket sendPacket = new DatagramPacket( + sendData, + sendData.length, + packet.getSocketAddress() + ); + try { + serverSocket.send(sendPacket); + } catch (IOException e) { + e.printStackTrace(); + } + deviceMapper.updateStatus(device.getDeviceId(),"0"); + } + if ("2".equals(status)){ + updateLastRunTime(device); + String mo = parseMo(device, receivedMessage); + if (device.getSurplus() < 1) { + log.info("设备状态为2,五剩余使用次数,马上听"); + //马上停 + String c2 = "$02|MU{uid}|DT{date}|ON{1}|SN{2}|*{CRC}\r\n"; + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String replace = c2.replace("{uid}", muid) + .replace("{date}", now).replace("{1}", "0").replace("{2}", "000"); + String crc = replace.substring(1, replace.lastIndexOf("*")); + String asciiHex = XorUtil.xorAsciiHex(crc); + String s = replace.replace("{CRC}", asciiHex); + byte[] sendData = s.getBytes(StandardCharsets.UTF_8); + + DatagramPacket sendPacket = new DatagramPacket( + sendData, + sendData.length, + packet.getSocketAddress() + ); + try { + serverSocket.send(sendPacket); + } catch (IOException e) { + e.printStackTrace(); + } + deviceMap.put(muid, new DeviceInfo(muid,status, deviceIp, devicePort)); + deviceMapper.updateStatus(device.getDeviceId(),"0"); + }else { + try { + Device dvie = toLiliao(device.getDeviceId()); + DeviceUsageDetail detail = parseMsgToDetail(receivedMessage); + detail.setStatus(status); + recordUse(dvie,detail); + }catch (Exception e){ + log.error("记录设备使用发生异常",e); + } + if (device.getPaymentMethod() == 1){ + deviceMap.put(muid, new DeviceInfo(muid,status, deviceIp, devicePort)); + }else { + deviceMap.put(muid, new DeviceInfo(muid,status, deviceIp, devicePort,true)); + } + replyHeartbeat(deviceMap.get(muid),packet); + } + } + if (Objects.isNull(deviceInfo)){ + deviceMap.put(muid, new DeviceInfo(muid,status, deviceIp, devicePort)); + deviceInfo = deviceMap.get(muid); + } + if ("4".equals(status) && deviceInfo.getStartCount()){ + log.info("设备状态为4,关机,并且startCount为true"); + int count = device.getSurplus() - 1; + device.setSurplus(count); + device.setExpireTime(String.valueOf(count)); + deviceMapper.updateById(device); + deviceMap.put(muid, new DeviceInfo(muid,status, deviceIp, devicePort)); + } + if ("4".equals(status)){ + try { + changeDeviceOperatingStatus(device.getDeviceId(),1); + updateRecord(device.getDeviceId()); + }catch (Exception e){ + log.error("更新设备使用记录发生异常",e); + } + } + } + } + //马上回 + /*log.info("马上回------"); +// udpClientService.sendCommand(deviceIp,devicePort,"$01|MU000B57020457D4B100001F97|DT20251011163826|ON0|CF1|WM1|TC000|*7E\r\n"); + InetAddress address = null; + try { + address = InetAddress.getByName(deviceIp); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + String c01 = "$01|MU{uid}|DT{date}|ON{1}|CF1|WM1|TC000|*{CRC}\r\n"; + String c02 = "$02|MU{uid}|DT{date}|ON{1}|SN{2}|*{CRC}\r\n"; + String command = "$01|MU000B57020457D4B100001F97|DT20251011163826|ON0|CF1|WM1|TC000|*7E\r\n"; + if ("1".equals(status)){ + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String replace = c01.replace("{uid}", muid).replace("{date}", now).replace("{1}", "0"); + String crc = replace.substring(1, replace.lastIndexOf("*")); + String asciiHex = XorUtil.xorAsciiHex(crc); + command = replace.replace("{CRC}", asciiHex); + } + if ("2".equals(status)){ + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String replace = c02.replace("{uid}", muid) + .replace("{date}", now).replace("{1}", "0").replace("{2}", "000"); + String crc = replace.substring(1, replace.lastIndexOf("*")); + String asciiHex = XorUtil.xorAsciiHex(crc); + command = replace.replace("{CRC}", asciiHex); + } + byte[] sendData = command.getBytes(StandardCharsets.UTF_8); + + DatagramPacket sendPacket = new DatagramPacket( + sendData, + sendData.length, + packet.getSocketAddress() + ); + try { + serverSocket.send(sendPacket); + } catch (IOException e) { + e.printStackTrace(); + }*/ + } + + private void replyHeartbeat(DeviceInfo info,DatagramPacket packet){ + if (Objects.isNull(info)){ + log.info("method->replyHeartbeat,DeviceInfo is null"); + return; + } + String status = info.getStatus(); + String muid = info.getMuid(); + switch (status){ + case "1": + String c01 = "$01|MU{uid}|DT{date}|ON{1}|CF{2}|WM1|TC000|*{CRC}\r\n"; + Device device = deviceMapper.selectOne(new LambdaQueryWrapper().eq(Device::getMuid, muid)); + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String replace = c01.replace("{uid}", muid).replace("{date}", now).replace("{1}", device.getStatus()).replace("{2}",device.getCf()); + String crc = replace.substring(1, replace.lastIndexOf("*")); + String asciiHex = XorUtil.xorAsciiHex(crc); + String message = replace.replace("{CRC}", asciiHex); + byte[] sendData = message.getBytes(StandardCharsets.UTF_8); + + DatagramPacket sendPacket = new DatagramPacket( + sendData, + sendData.length, + packet.getSocketAddress() + ); + try { + serverSocket.send(sendPacket); + } catch (IOException e) { + e.printStackTrace(); + } + break; + + case "2": + String c02 = "$02|MU{uid}|DT{date}|ON{1}|SN{2}|*{CRC}\r\n"; + Device device2 = deviceMapper.selectOne(new LambdaQueryWrapper().eq(Device::getMuid, muid)); + String now2 = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String replace2 = c02.replace("{uid}", muid) + .replace("{date}", now2).replace("{1}", device2.getStatus()).replace("{2}", "000"); + String crc2 = replace2.substring(1, replace2.lastIndexOf("*")); + String asciiHex2 = XorUtil.xorAsciiHex(crc2); + String msg = replace2.replace("{CRC}", asciiHex2); + byte[] sendData2 = msg.getBytes(StandardCharsets.UTF_8); + + DatagramPacket sendPacket2 = new DatagramPacket( + sendData2, + sendData2.length, + packet.getSocketAddress() + ); + try { + serverSocket.send(sendPacket2); + } catch (IOException e) { + e.printStackTrace(); + } + break; + } + } + + private void parseDeviceInfo(Device device,String msg){ + String[] items = msg.split("\\|"); + String hw = null,sw = null,ic = null,cf = null,wm = null,cr = null; + for (String item : items) { + if (item.startsWith("HW")){ + hw = item.substring(2); + } + if (item.startsWith("SW")){ + sw = item.substring(2); + } + if (item.startsWith("IC")){ + ic = item.substring(2); + } + if (item.startsWith("CF")){ + cf = item.substring(2); + } + if (item.startsWith("WM")){ + wm = item.substring(2); + } + if (item.startsWith("CR")){ + cr = item.substring(2); + } + } + device.setHw(hw); + device.setSw(sw); + device.setIccid(ic); + if (StringUtils.isBlank(device.getCf())){ + device.setCf(cf); + } + device.setWm(wm); + device.setCr(cr); + device.setOperatingStatus(3); + device.setLastRunTime(LocalDateTime.now()); + log.info("服务器上的LocalDateTime.now()========={}",LocalDateTime.now()); + deviceMapper.updateDeviceInfo(device); + } + + private String parseMo(Device device,String msg){ + String[] items = msg.split("\\|"); + String mo = null; + for (String item : items) { + if (item.startsWith("MO")){ + mo = item.substring(2); + break; + } + } + device.setMo(mo); + Device dv = new Device(); + dv.setDeviceId(device.getDeviceId()); + dv.setMo(mo); + deviceMapper.updateById(dv); + return mo; + } + + private DeviceUsageDetail parseMsgToDetail(String msg){ + String[] items = msg.split("\\|"); + String fr = null,pw = null,pl = null,ul = null,wt = null; + for (String item : items) { + if (item.startsWith("FR")){ + fr = item.substring(2); + } + if (item.startsWith("PW")){ + pw = item.substring(2); + } + if (item.startsWith("PL")){ + pl = item.substring(2); + } + if (item.startsWith("UL")){ + ul = item.substring(2); + } + if (item.startsWith("WT")){ + wt = item.substring(2); + } + } + DeviceUsageDetail detail = new DeviceUsageDetail(); + detail.setFr(fr); + detail.setPw(pw); + detail.setPl(pl); + detail.setUl(ul); + detail.setWt(wt); + return detail; + } + + private void updateLastRunTime(Device device){ + Device d = new Device(); + d.setDeviceId(device.getDeviceId()); + d.setLastRunTime(LocalDateTime.now()); + deviceMapper.updateById(d); + } + + private Device toLiliao(String deviceId){ + Device device = deviceMapper.selectById(deviceId); + if (Objects.nonNull(device) && device.getOperatingStatus() != 0){ + device.setOperatingStatus(0); + deviceMapper.updateById(device); + deviceTask.addAbnormalDeviceTask(deviceId); + } + return device; + } + + private void recordUse(Device device, DeviceUsageDetail detail){ + if (Objects.isNull(device)){ + log.info("设备使用记录recordUse->device is null"); + return; + } + device.setLastRunTime(LocalDateTime.now()); + deviceMapper.updateById(device); + DeviceUsageRecord record = deviceUsageRecordMapper.selectOne(new LambdaQueryWrapper() + .eq(DeviceUsageRecord::getDeviceId, device.getDeviceId()) + .eq(DeviceUsageRecord::getStartUseFlag, "true")); + if (Objects.nonNull(record)){ + if ("2".equals(detail.getStatus())){ + detail.setUsageRecordId(record.getId()); + detail.setCreateTime(LocalDateTime.now()); + usageDetailMapper.insert(detail); + } + log.info("设备正在运行"); + return; + } + DeviceUsageRecord deviceUsageRecord = new DeviceUsageRecord(); + deviceUsageRecord.setStartTime(LocalDateTime.now(Clock.systemDefaultZone())); + deviceUsageRecord.setDeviceId(device.getDeviceId()); + deviceUsageRecord.setStartUseFlag(UniConstant.CONST_TRUE); + deviceUsageRecord.setWm(device.getWm()); + deviceUsageRecord.setBelong(device.getAffiliatedWith()); + deviceUsageRecord.setMuid(device.getMuid()); + deviceUsageRecordMapper.insert(deviceUsageRecord); + detail.setCreateTime(LocalDateTime.now()); + detail.setUsageRecordId(deviceUsageRecord.getId()); + /* + 如果真要记录待机状态,那么把status=1的recordUse()放开,在这里加上根据deviceUsageRecord.getId()和status=1去查DeviceUsageDetail表, + 如果不为空则不插入数据,即只记录一条状态为待机的数据 + */ + List usageDetails = usageDetailMapper.selectList(new LambdaQueryWrapper().eq(DeviceUsageDetail::getUsageRecordId, deviceUsageRecord.getId()) + .eq(DeviceUsageDetail::getStatus, "1")); + if (CollectionUtils.isEmpty(usageDetails)){ + usageDetailMapper.insert(detail); + } + } + + private void updateRecord(String deviceId){ + DeviceUsageRecord deviceUsageRecord = deviceUsageRecordMapper.selectOne(new LambdaQueryWrapper() + .eq(DeviceUsageRecord::getDeviceId, deviceId) + .eq(DeviceUsageRecord::getStartUseFlag, UniConstant.CONST_TRUE)); + if (Objects.isNull(deviceUsageRecord)){ + return; + } + deviceUsageRecord.setEndTime(LocalDateTime.now(Clock.systemDefaultZone())); + deviceUsageRecord.setStartUseFlag(UniConstant.CONST_FALSE); + deviceUsageRecordMapper.updateById(deviceUsageRecord); + DeviceUsageDetail detail = new DeviceUsageDetail(); + detail.setStatus("4"); + detail.setCreateTime(LocalDateTime.now()); + detail.setUsageRecordId(deviceUsageRecord.getId()); + usageDetailMapper.insert(detail); + } + + private void changeDeviceOperatingStatus(String deviceId,Integer status){ + Device device = deviceMapper.selectById(deviceId); + if (Objects.isNull(device)){ + return; + } + device.setOperatingStatus(status); + deviceMapper.updateById(device); + } + + + public boolean reply(Device device,String status){ + String muid = device.getMuid(); + DeviceInfo deviceInfo = getDeviceInfo(muid); + if (deviceInfo == null){ + log.info("设备会话已过期,请设备先上报一次数据"); + return false; + } + String message = ""; + String c01 = "$01|MU{uid}|DT{date}|ON{1}|CF{2}|WM1|TC000|*{CRC}\r\n"; + String c02 = "$02|MU{uid}|DT{date}|ON{1}|SN{2}|*{CRC}\r\n"; + if ("1".equals(deviceInfo.getStatus())){ + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String replace = c01.replace("{uid}", muid).replace("{date}", now).replace("{1}", status).replace("{2}",device.getCf()); + String crc = replace.substring(1, replace.lastIndexOf("*")); + String asciiHex = XorUtil.xorAsciiHex(crc); + message = replace.replace("{CRC}", asciiHex); + }else if ("2".equals(deviceInfo.getStatus())){ + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String replace = c02.replace("{uid}", muid) + .replace("{date}", now).replace("{1}", status).replace("{2}", "000"); + String crc = replace.substring(1, replace.lastIndexOf("*")); + String asciiHex = XorUtil.xorAsciiHex(crc); + message = replace.replace("{CRC}", asciiHex); + }else if ("4".equals(deviceInfo.getStatus())){ + log.info("设备为关机状态"); + return true; + } + try { + log.info("最终发送的数据为:{}",message); + byte[] data = message.getBytes(StandardCharsets.UTF_8); + InetAddress address = InetAddress.getByName(deviceInfo.getIp()); + DatagramPacket packet = new DatagramPacket(data, data.length, address, deviceInfo.getPort()); + serverSocket.send(packet); + System.out.printf("UDP Reply sent to %s:%d -> %s%n", deviceInfo.getIp(), deviceInfo.getPort(), message); + device.setStatus(status); + deviceMapper.updateById(device); + return true; + } catch (IOException e) { + log.info("回复设备UDP消息发送异常"); + e.printStackTrace(); + return true; + } + } + + /** + * 根据实际协议解析设备ID + * 这是一个示例,您需要根据硬件数据包的实际格式重写此方法 + * @param message 收到的原始消息 + * @return 解析出的设备ID + */ + private String parsemuid(String message) { + Pattern p = Pattern.compile("^[^|]*\\|([^|]+)\\|"); + Matcher matcher = p.matcher(message); + if (matcher.find()){ + return matcher.group(1).substring(2); + } + // 如果协议里没有ID,也可以用IP:端口作为唯一标识 + return null; + } + + /** + * 获取设备信息 + * @param muid 设备ID + * @return 设备信息,如果不存在则返回null + */ + public DeviceInfo getDeviceInfo(String muid) { + DeviceInfo deviceInfo = deviceMap.get(muid); + if (Objects.nonNull(deviceInfo) && System.currentTimeMillis() - deviceInfo.getLastActiveTime() < SESSION_TIMEOUT){ + return deviceInfo; + }else { + if (Objects.isNull(deviceInfo)){ + deviceMap.remove(muid); + return null; + } + if (!deviceInfo.getStartCount()){ + deviceMap.remove(muid); + } + return null; + } + } + + /** + * 获取所有在线设备 + */ + public ConcurrentHashMap getOnlineDevices() { + return new ConcurrentHashMap<>(deviceMap); + } + + private void replyUpgradeHeartbeat(DeviceInfo info,DatagramPacket packet){ + if (Objects.isNull(info)){ + log.info("method->replyHeartbeat,DeviceInfo is null"); + return; + } + String c01 = "$01|MU{uid}|DT{date}|ON{1}|CF{2}|UP{3}|WM1|TC000|*{CRC}\r\n"; + /* + 查device_upgrade表拿到当前版本升级包名称,然后去/opt/jkadmin/upgrade下面拿到升级包 + 调fileService拆包,得到包数量,替换{3},然后回复 + */ + DeviceUpgrade deviceUpgrade = upgradeMapper.selectOne(new LambdaQueryWrapper().eq(DeviceUpgrade::getBeCurrentVersion, 1)); + if (Objects.isNull(deviceUpgrade)){ + replyHeartbeat(info,packet); + }else { + String fileUrl = UPGRADE_PACKAGE_ROOT_PATH + deviceUpgrade.getFileName(); + List packages = null; + try { + packages = fileService.splitFileWithNIO(fileUrl); + } catch (IOException e) { + log.error("拆包发生异常-.-.-.-.-.-.-.-.-.",e); + } + if (CollectionUtils.isNotEmpty(packages) && packages.size() <= 32){ + String muid = info.getMuid(); + Device device = deviceMapper.selectOne(new LambdaQueryWrapper().eq(Device::getMuid, muid)); + if (Objects.isNull(device)){ + return; + } + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String r = c01.replace("{uid}", muid).replace("{date}", now).replace("{1}", device.getStatus()) + .replace("{2}", device.getCf()).replace("{3}", String.valueOf(packages.size())); + String crc = r.substring(1, r.lastIndexOf("*")); + String xorAsciiHex = XorUtil.xorAsciiHex(crc); + String msg = r.replace("{CRC}", xorAsciiHex); + log.info("回复升级心跳数据:{}",msg); + byte[] bytes = msg.getBytes(StandardCharsets.UTF_8); + DatagramPacket sendPacket = new DatagramPacket(bytes,bytes.length,packet.getSocketAddress()); + try { + serverSocket.send(sendPacket); + } catch (IOException e) { + log.error("回复升级心跳包发生异常",e); + } + }else { + log.info("升级包为空或升级包大小超过1024*32"); + replyHeartbeat(info, packet); + } + } + } + +} + diff --git a/admin/src/main/java/cn/unizk/service/UdpServerService2.java b/admin/src/main/java/cn/unizk/service/UdpServerService2.java new file mode 100644 index 0000000..91d3470 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/UdpServerService2.java @@ -0,0 +1,920 @@ +package cn.unizk.service; + +import cn.hutool.core.date.DateUtil; +import cn.unizk.constant.UniConstant; +import cn.unizk.entity.dto.PrDTO; +import cn.unizk.entity.po.*; +import cn.unizk.mapper.*; +import cn.unizk.task.DeviceTask; +import cn.unizk.utils.XorUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import javax.annotation.Resource; +import java.io.IOException; +import java.net.*; +import java.nio.charset.StandardCharsets; +import java.time.Clock; +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @Author hao + * @Date 2025/9/10 16:17 + * @Version 1.0 + **/ +@Service +@Slf4j +public class UdpServerService2 { + // 存储设备地址的Map,Key可以是设备ID,Value是设备的IP和端口 + private ConcurrentHashMap deviceMap = new ConcurrentHashMap<>(); + + private DatagramSocket serverSocket; + private volatile boolean running = false; + private ExecutorService executorService = Executors.newSingleThreadExecutor(); + private static final int LISTEN_PORT = 61100; // 监听的端口 + private static final long SESSION_TIMEOUT = 60_000; + @Resource + private UdpClientService udpClientService; + @Resource + private DeviceMapper deviceMapper; + @Resource + private DeviceUsageRecordMapper deviceUsageRecordMapper; + @Resource + private DeviceTask deviceTask; + @Resource + private DeviceUsageDetailMapper usageDetailMapper; + @Resource + private DeviceUpgradeMapper upgradeMapper; + @Resource + private FileService fileService; + @Resource(name = "kryoRedisTemplate") + private RedisTemplate redisTemplate; + @Resource + private GeneratePrService generatePrService; + @Resource + private UserTreatmentParametersMapper userTreatmentParametersMapper; + + + private static final String UPGRADE_PACKAGE_ROOT_PATH = "/opt/jkadmin/upgrade/"; + + @Getter + @Setter + public static class DeviceInfo { + private String muid; + private String status; + private String ip; + private int port; + private Boolean startCount = false; + private final long lastActiveTime; + +// DeviceInfo(){} + + /*public boolean getStartCount(){ + return this.startCount; + }*/ + + DeviceInfo(String muid, String status, String ip, int port) { + this.muid = muid; + this.status = status; + this.ip = ip; + this.port = port; + this.startCount = false; + this.lastActiveTime = System.currentTimeMillis(); + } + + DeviceInfo(String muid, String status, String ip, int port, boolean startCount) { + this.muid = muid; + this.status = status; + this.ip = ip; + this.port = port; + this.startCount = startCount; + this.lastActiveTime = System.currentTimeMillis(); + } + } + + @PostConstruct + public void startServer() { + try { + serverSocket = new DatagramSocket(LISTEN_PORT); + running = true; + log.info("UDP Server started on port: {}", LISTEN_PORT); + + // 启动一个线程来持续接收消息 + executorService.execute(this::receivePackets); + + } catch (SocketException e) { + log.error("Failed to start UDP server on port: {}", LISTEN_PORT, e); + } + } + + @PreDestroy + public void stopServer() { + running = false; + if (serverSocket != null && !serverSocket.isClosed()) { + serverSocket.close(); + } + executorService.shutdown(); + log.info("UDP Server stopped."); + } + + /** + * 持续接收UDP数据包的方法 + */ + private void receivePackets() { + byte[] receiveBuffer = new byte[1024]; // 缓冲区 + + log.info("持续接收UDP数据包,{}", serverSocket.isClosed()); + + while (running && !serverSocket.isClosed()) { + try { + DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, receiveBuffer.length); + serverSocket.receive(receivePacket); // 阻塞等待接收数据 + log.info("处理接收到的数据包"); + // 处理接收到的数据包(可以在新线程中处理,避免阻塞接收) + handlePacket(receivePacket); + } catch (Exception e) { + if (running) { // 只有在运行状态下的异常才打印 + log.error("Error receiving packet: ", e); + } + } + } + } + + /** + * 处理接收到的UDP数据包 + * + * @param packet 接收到的数据包 + */ + private void handlePacket(DatagramPacket packet) { + // 获取发送方的IP和端口 + String deviceIp = packet.getAddress().getHostAddress(); + int devicePort = packet.getPort(); + + // 获取数据内容并转换为字符串 + String receivedMessage = new String(packet.getData(), 0, packet.getLength()); + + log.info("Received from {}:{} - Message: {}", + deviceIp, devicePort, receivedMessage); + + if (StringUtils.isBlank(receivedMessage)) { + log.info("接收到的数据包为空"); + return; + } + + // 关键步骤:解析数据包,获取设备ID并注册设备地址 + // 假设数据包格式为: "muid:XXXXX;Status:Online;" + // 您需要根据硬件同事提供的实际协议格式进行解析 + String muid = parsemuid(receivedMessage); // 需要实现此方法 + String status = receivedMessage.substring(2, 3); + String status2 = receivedMessage.substring(1, 3); + if ("30".equals(status2)) { + status = "9"; + } + log.info("解析得到的muid={}", muid); + log.info("解析得到的状态码是:{}", status); + + if (muid != null && !muid.isEmpty()) { + Device device = deviceMapper.selectOne(new LambdaQueryWrapper().eq(Device::getMuid, muid)); + // 将设备信息存入Map + System.out.println("Device registered: " + muid + " at " + deviceIp + ":" + devicePort); + + if (Objects.isNull(device)) { + log.info("数据库不存在该设备,muid={}", muid); + } else { + DeviceInfo deviceInfo = deviceMap.get(muid); + if ("1".equals(status)) { + if (Objects.isNull(deviceInfo)) { + log.info("deviceMap缓存中没有{}这个设备", muid); + deviceMap.put(muid, new DeviceInfo(muid, status, deviceIp, devicePort)); + } else { + /*if (deviceInfo.getStartCount() && device.getSurplus() > 0 && device.getPaymentMethod() != null && device.getPaymentMethod() == 2){ + log.info("设备状态为01开机,开始计数startCount为true"); + int count = device.getSurplus() - 1; + device.setSurplus(count); + device.setExpireTime(String.valueOf(count)); + deviceMapper.updateById(device); + }*/ + deviceMap.put(muid, new DeviceInfo(muid, status, deviceIp, devicePort)); + } + String lo = null, la = null; + String[] items = receivedMessage.split("\\|"); + for (String item : items) { + if (item.startsWith("LO")) { + lo = item.substring(2); + } + if (item.startsWith("LA")) { + la = item.substring(2); + } + } + if (lo != null && la != null) { + device.setLo(lo); + device.setLa(la); + deviceMapper.updateById(device); + } + parseDeviceInfo(device, receivedMessage); + /** + * 拿device的硬件版本和软件版本去查device_upgrade表,如果跟当前版本不一致则升级 + */ + DeviceUpgrade upgrade = upgradeMapper.selectOne(new LambdaQueryWrapper().eq(DeviceUpgrade::getBeCurrentVersion, 1)); + Device nDevice = deviceMapper.selectOne(new LambdaQueryWrapper().eq(Device::getMuid, muid)); + if (Objects.nonNull(upgrade) && upgrade.getHVersion().equals(nDevice.getHw()) && !upgrade.getSVersion().equals(nDevice.getSw()) && nDevice.getUpgradeSwitch() == 1) { + log.info("回复升级心跳,回复升级心跳回复升级心跳,回复升级心跳,回复升级心跳"); + replyUpgradeHeartbeat(deviceMap.get(muid), packet); + } else { + /*String o = (String) redisTemplate.opsForValue().get(UniConstant.REDIS_CURRENT_DEVICE_USER + device.getDeviceId()); + PrDTO prDTO = generatePrService.generatePr(o); + PrDTO cachePrdto = (PrDTO) redisTemplate.opsForValue().get(o + device.getDeviceId());*/ + replyHeartbeat(deviceMap.get(muid), packet, null, null); + } + DeviceUsageDetail detail = new DeviceUsageDetail(); + detail.setStatus(status); + recordUse(device, detail); + if (device.getOperatingStatus() == 0) { + changeDeviceOperatingStatus(device.getDeviceId(), 2); + } + } + if ((("1".equals(status) && device.getSurplus() < 1) || device.getForcePay() == 1) && device.getFreeCount() < 1) { + log.info("设备状态为1,无剩余使用次数,马上停,强制付费"); + String c1 = "$01|MU{uid}|DT{date}|ON{1}|CF1|WM1|TC000|*{CRC}\r\n"; + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String replace = c1.replace("{uid}", muid).replace("{date}", now).replace("{1}", "0"); + String crc = replace.substring(1, replace.lastIndexOf("*")); + String asciiHex = XorUtil.xorAsciiHex(crc); + String s = replace.replace("{CRC}", asciiHex); + byte[] sendData = s.getBytes(StandardCharsets.UTF_8); + + DatagramPacket sendPacket = new DatagramPacket( + sendData, + sendData.length, + packet.getSocketAddress() + ); + try { + serverSocket.send(sendPacket); + } catch (IOException e) { + e.printStackTrace(); + } + deviceMapper.updateStatus(device.getDeviceId(), "0"); + } + if ("2".equals(status)) { + updateLastRunTime(device); + String mo = parseMo(device, receivedMessage); + if ((device.getSurplus() < 1 || device.getForcePay() == 1) && device.getFreeCount() < 1) { + log.info("设备状态为2,五剩余使用次数,马上听"); + //马上停 + String c2 = "$02|MU{uid}|DT{date}|ON{1}|SN{2}|*{CRC}\r\n"; + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String replace = c2.replace("{uid}", muid) + .replace("{date}", now).replace("{1}", "0").replace("{2}", "000"); + String crc = replace.substring(1, replace.lastIndexOf("*")); + String asciiHex = XorUtil.xorAsciiHex(crc); + String s = replace.replace("{CRC}", asciiHex); + byte[] sendData = s.getBytes(StandardCharsets.UTF_8); + + DatagramPacket sendPacket = new DatagramPacket( + sendData, + sendData.length, + packet.getSocketAddress() + ); + try { + serverSocket.send(sendPacket); + } catch (IOException e) { + e.printStackTrace(); + } + deviceMap.put(muid, new DeviceInfo(muid, status, deviceIp, devicePort)); + deviceMapper.updateStatus(device.getDeviceId(), "0"); + } else { + try { + Device dvie = toLiliao(device.getDeviceId()); + DeviceUsageDetail detail = parseMsgToDetail(receivedMessage); + detail.setStatus(status); + recordUse(dvie, detail); + } catch (Exception e) { + log.error("记录设备使用发生异常", e); + } + if (device.getPaymentMethod() == 1) { + deviceMap.put(muid, new DeviceInfo(muid, status, deviceIp, devicePort)); + } else { + deviceMap.put(muid, new DeviceInfo(muid, status, deviceIp, devicePort, true)); + } + replyHeartbeat(deviceMap.get(muid), packet, null, null); + } + } + if ("3".equals(status)) { + deviceMap.put(muid, new DeviceInfo(muid, status, deviceIp, devicePort)); + +// String o = (String) redisTemplate.opsForValue().get(UniConstant.REDIS_CURRENT_DEVICE_USER + device.getDeviceId()); +// PrDTO o1 = (PrDTO) redisTemplate.opsForValue().get(o + device.getDeviceId()); + //openid是扫码开机的时候放到redis的 +// String openid = (String) redisTemplate.opsForValue().get(UniConstant.DEVICE_ID + device.getDeviceId()); +// String openid = "oATNGvnMbu6tbNgbnFZPWtJBGvFM"; + Integer appUserId = 9; + PrDTO prDTO = generatePrService.generatePr(appUserId); + if (Objects.nonNull(prDTO)){ + List prItems = prDTO.getPrItems(); + if (CollectionUtils.isNotEmpty(prItems)){ + List list = new ArrayList<>(); + for (PrDTO.PrItem prItem : prItems) { + UserTreatmentParameters userTreatmentParameters = new UserTreatmentParameters(); + userTreatmentParameters.setAppUserId(appUserId); + userTreatmentParameters.setDeviceId(device.getDeviceId()); + userTreatmentParameters.setFr(prItem.getFr()); + userTreatmentParameters.setPl(prItem.getPl()); + userTreatmentParameters.setPw(prItem.getPw()); + userTreatmentParameters.setUl(prItem.getUl()); + userTreatmentParameters.setTl(prItem.getTl()); + userTreatmentParameters.setCreateTime(LocalDateTime.now()); + userTreatmentParameters.setStatus(1); + list.add(userTreatmentParameters); + } + List userTreatmentParametersList = userTreatmentParametersMapper.selectList(new LambdaQueryWrapper().eq(UserTreatmentParameters::getAppUserId, appUserId)); + if (CollectionUtils.isEmpty(userTreatmentParametersList)){ + userTreatmentParametersMapper.insert(list); + } + } + } + replyHeartbeat(deviceMap.get(muid), packet, prDTO, null); + } + if (Objects.isNull(deviceInfo)) { + deviceMap.put(muid, new DeviceInfo(muid, status, deviceIp, devicePort)); + deviceInfo = deviceMap.get(muid); + } + if ("9".equals(status)) { + deviceMap.put(muid, new DeviceInfo(muid,status, deviceIp, devicePort)); + /*String o = (String) redisTemplate.opsForValue().get(UniConstant.REDIS_CURRENT_DEVICE_USER + device.getDeviceId()); + PrDTO prDTO = (PrDTO) redisTemplate.opsForValue().get(o + device.getDeviceId());*/ + String prId = null,tn = null; + String[] items = receivedMessage.split("\\|"); + for (String item : items) { + if (item.startsWith("CI")){ + prId = item.substring(2); + } + if (item.startsWith("TN")){ + tn = item.substring(2); + } + } + PrDTO prDTO = prId == null ? null : (PrDTO) redisTemplate.opsForValue().get(prId); + if (Objects.isNull(prDTO)) { + log.info("status=9,proDTO is null;status=9,proDTO is null;"); + log.info("status=9,proDTO is null;status=9,proDTO is null;"); + log.info("status=9,proDTO is null;status=9,proDTO is null;"); + log.info("status=9,proDTO is null;status=9,proDTO is null;"); + log.info("status=9,proDTO is null;status=9,proDTO is null;"); + } + + deviceInfo = deviceMap.get(muid); + replyHeartbeat(deviceInfo, packet, prDTO, tn); + } + /*if ("4".equals(status) && deviceInfo.getStartCount() && device.getPaymentMethod() != null && device.getPaymentMethod() == 2){ + log.info("设备状态为4,关机,并且startCount为true"); + int count = device.getSurplus() - 1; + device.setSurplus(count); + device.setExpireTime(String.valueOf(count)); + deviceMapper.updateById(device); + deviceMap.put(muid, new DeviceInfo(muid,status, deviceIp, devicePort)); + }*/ + if ("4".equals(status)) { + try { + Device selectById = deviceMapper.selectById(device.getDeviceId()); + if (selectById.getForcePay() == 2) { + Device dce = new Device(); + dce.setDeviceId(device.getDeviceId()); + dce.setForcePay(1); + dce.setStatus("0"); + deviceMapper.updateById(dce); + } + if (selectById.getFreeCount() > 0) { + Device device5 = new Device(); + device5.setDeviceId(device.getDeviceId()); + device5.setFreeCount(selectById.getFreeCount() - 1); + deviceMapper.updateById(device5); + } + changeDeviceOperatingStatus(device.getDeviceId(), 1); + updateRecord(device.getDeviceId()); + deleteUserTreatParam(device.getDeviceId()); + } catch (Exception e) { + log.error("更新设备使用记录发生异常", e); + } + } + } + } + //马上回 + /*log.info("马上回------"); +// udpClientService.sendCommand(deviceIp,devicePort,"$01|MU000B57020457D4B100001F97|DT20251011163826|ON0|CF1|WM1|TC000|*7E\r\n"); + InetAddress address = null; + try { + address = InetAddress.getByName(deviceIp); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + String c01 = "$01|MU{uid}|DT{date}|ON{1}|CF1|WM1|TC000|*{CRC}\r\n"; + String c02 = "$02|MU{uid}|DT{date}|ON{1}|SN{2}|*{CRC}\r\n"; + String command = "$01|MU000B57020457D4B100001F97|DT20251011163826|ON0|CF1|WM1|TC000|*7E\r\n"; + if ("1".equals(status)){ + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String replace = c01.replace("{uid}", muid).replace("{date}", now).replace("{1}", "0"); + String crc = replace.substring(1, replace.lastIndexOf("*")); + String asciiHex = XorUtil.xorAsciiHex(crc); + command = replace.replace("{CRC}", asciiHex); + } + if ("2".equals(status)){ + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String replace = c02.replace("{uid}", muid) + .replace("{date}", now).replace("{1}", "0").replace("{2}", "000"); + String crc = replace.substring(1, replace.lastIndexOf("*")); + String asciiHex = XorUtil.xorAsciiHex(crc); + command = replace.replace("{CRC}", asciiHex); + } + byte[] sendData = command.getBytes(StandardCharsets.UTF_8); + + DatagramPacket sendPacket = new DatagramPacket( + sendData, + sendData.length, + packet.getSocketAddress() + ); + try { + serverSocket.send(sendPacket); + } catch (IOException e) { + e.printStackTrace(); + }*/ + } + + private void getPR(DeviceInfo info, DatagramPacket packet) { + if (Objects.isNull(info)) { + log.info("method->replyHeartbeat,DeviceInfo is null"); + return; + } + String c01 = "$01|MU{uid}|DT{date}|ON{1}|CF{2}|WM1|TC000|PR1|*{CRC}\r\n"; + + } + + private void replyHeartbeat(DeviceInfo info, DatagramPacket packet, PrDTO prDTO, String tn) { + if (Objects.isNull(info)) { + log.info("method->replyHeartbeat,DeviceInfo is null"); + return; + } + String status = info.getStatus(); + String muid = info.getMuid(); + switch (status) { + case "1": + String c01 = "$01|MU{uid}|DT{date}|ON{1}|CF{2}|WM1|TC000|*{CRC}\r\n"; + Device device = deviceMapper.selectOne(new LambdaQueryWrapper().eq(Device::getMuid, muid)); + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String replace = c01.replace("{uid}", muid).replace("{date}", now) + .replace("{1}", device.getStatus()).replace("{2}", device.getCf()); + String crc = replace.substring(1, replace.lastIndexOf("*")); + String asciiHex = XorUtil.xorAsciiHex(crc); + String message = replace.replace("{CRC}", asciiHex); + byte[] sendData = message.getBytes(StandardCharsets.UTF_8); + + DatagramPacket sendPacket = new DatagramPacket( + sendData, + sendData.length, + packet.getSocketAddress() + ); + try { + serverSocket.send(sendPacket); + } catch (IOException e) { + e.printStackTrace(); + } + break; + + case "2": + String c02 = "$02|MU{uid}|DT{date}|ON{1}|SN{2}|*{CRC}\r\n"; + Device device2 = deviceMapper.selectOne(new LambdaQueryWrapper().eq(Device::getMuid, muid)); + String now2 = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String replace2 = c02.replace("{uid}", muid) + .replace("{date}", now2).replace("{1}", device2.getStatus()).replace("{2}", "000"); + String crc2 = replace2.substring(1, replace2.lastIndexOf("*")); + String asciiHex2 = XorUtil.xorAsciiHex(crc2); + String msg = replace2.replace("{CRC}", asciiHex2); + byte[] sendData2 = msg.getBytes(StandardCharsets.UTF_8); + + DatagramPacket sendPacket2 = new DatagramPacket( + sendData2, + sendData2.length, + packet.getSocketAddress() + ); + try { + serverSocket.send(sendPacket2); + } catch (IOException e) { + e.printStackTrace(); + } + break; + + case "3": + String defaultDm = "$03|MU{uid}|CI00|CN00|*{CRC}\r\n"; + String dm = "$03|MU{uid}|CI{1}|CN{2}|*{CRC}\r\n"; + if (prDTO == null) { + log.info("status==3;prDTO=====null;===null"); + defaultDm = defaultDm.replace("{uid}", muid); + String substring = defaultDm.substring(1, defaultDm.lastIndexOf("*")); + String xorAsciiHex = XorUtil.xorAsciiHex(substring); + String s = defaultDm.replace("{CRC}", xorAsciiHex); + byte[] sendData3 = s.getBytes(StandardCharsets.UTF_8); + DatagramPacket datagramPacket = new DatagramPacket(sendData3, sendData3.length, packet.getSocketAddress()); + try { + serverSocket.send(datagramPacket); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + log.info("prDTO========={}", prDTO.toString()); + redisTemplate.opsForValue().set(prDTO.getId(),prDTO,2,TimeUnit.HOURS); + List prItems = prDTO.getPrItems(); + String cn = prItems.size() > 9 ? String.valueOf(prItems.size()) : "0"+prItems.size(); + dm = dm.replace("{uid}", muid).replace("{1}", prDTO.getId()).replace("{2}", cn); + String substring = dm.substring(1, dm.lastIndexOf("*")); + String xorAsciiHex = XorUtil.xorAsciiHex(substring); + String s = dm.replace("{CRC}", xorAsciiHex); + log.info("回传给硬件的数据:{}",s); + byte[] sendData3 = s.getBytes(StandardCharsets.UTF_8); + DatagramPacket datagramPacket = new DatagramPacket(sendData3, sendData3.length, packet.getSocketAddress()); + try { + serverSocket.send(datagramPacket); + } catch (IOException e) { + e.printStackTrace(); + } + } + break; + + case "9": + if (prDTO == null) { + log.info("case=9,prDTO=null;case=9,prDTO=null;case=9,prDTO=null;case=9,prDTO=null;case=9,prDTO=null;case=9,prDTO=null"); + String defaultDm9 = "$03|MU{uid}|CI123456790123456|TN01|FR03|PW50|PL08|UL01|TL017|*{CRC}\r\n"; + String substring = defaultDm9.substring(1, defaultDm9.lastIndexOf("*")); + String xorAsciiHex = XorUtil.xorAsciiHex(substring); + String s = defaultDm9.replace("{CRC}", xorAsciiHex); + byte[] sendData3 = s.getBytes(StandardCharsets.UTF_8); + DatagramPacket datagramPacket = new DatagramPacket(sendData3, sendData3.length, packet.getSocketAddress()); + try { + serverSocket.send(datagramPacket); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + List prItems = prDTO.getPrItems(); +// String tn1 = tn.substring(1); + PrDTO.PrItem prItem = prItems.get(Integer.parseInt(tn)-1); + String cm9 = "$30|MU{uid}|CI{1}|TN{2}|FR{3}|PW{4}|PL{5}|UL{6}|TL{7}|*{CRC}\r\n"; + cm9 = cm9.replace("{uid}", muid).replace("{1}", prDTO.getId()).replace("{2}", tn) + .replace("{3}", prItem.getFr()).replace("{4}", prItem.getPw()).replace("{5}", prItem.getPl()) + .replace("{6}", prItem.getUl()).replace("{7}", prItem.getTl()); + String substring = cm9.substring(1, cm9.lastIndexOf("*")); + String xorAsciiHex = XorUtil.xorAsciiHex(substring); + String s = cm9.replace("{CRC}", xorAsciiHex); + log.info("status=9,远程下参数数据是:{}",s); + byte[] sendData3 = s.getBytes(StandardCharsets.UTF_8); + DatagramPacket datagramPacket = new DatagramPacket(sendData3, sendData3.length, packet.getSocketAddress()); + try { + serverSocket.send(datagramPacket); + } catch (IOException e) { + e.printStackTrace(); + } + } + + } + } + + private void parseDeviceInfo(Device device, String msg) { + String[] items = msg.split("\\|"); + String hw = null, sw = null, ic = null, cf = null, wm = null, cr = null; + for (String item : items) { + if (item.startsWith("HW")) { + hw = item.substring(2); + } + if (item.startsWith("SW")) { + sw = item.substring(2); + } + if (item.startsWith("IC")) { + ic = item.substring(2); + } + if (item.startsWith("CF")) { + cf = item.substring(2); + } + if (item.startsWith("WM")) { + wm = item.substring(2); + } + if (item.startsWith("CR")) { + cr = item.substring(2); + } + } + device.setHw(hw); + device.setSw(sw); + device.setIccid(ic); + if (StringUtils.isBlank(device.getCf())) { + device.setCf(cf); + } + device.setWm(wm); + device.setCr(cr); + device.setOperatingStatus(3); + device.setLastRunTime(LocalDateTime.now()); + log.info("解析设备回复的数据得到的硬件版本为:{},软件版本为:{}",hw,sw); + log.info("服务器上的LocalDateTime.now()========={}", LocalDateTime.now()); + deviceMapper.updateDeviceInfo(device); + } + + private String parseMo(Device device, String msg) { + String[] items = msg.split("\\|"); + String mo = null; + for (String item : items) { + if (item.startsWith("MO")) { + mo = item.substring(2); + break; + } + } + device.setMo(mo); + Device dv = new Device(); + dv.setDeviceId(device.getDeviceId()); + dv.setMo(mo); + deviceMapper.updateById(dv); + return mo; + } + + private void deleteUserTreatParam(String deviceId){ + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.set(UserTreatmentParameters::getStatus,0).eq(UserTreatmentParameters::getDeviceId,deviceId); + userTreatmentParametersMapper.update(updateWrapper); + } + + private DeviceUsageDetail parseMsgToDetail(String msg) { + String[] items = msg.split("\\|"); + String fr = null, pw = null, pl = null, ul = null, wt = null; + for (String item : items) { + if (item.startsWith("FR")) { + fr = item.substring(2); + } + if (item.startsWith("PW")) { + pw = item.substring(2); + } + if (item.startsWith("PL")) { + pl = item.substring(2); + } + if (item.startsWith("UL")) { + ul = item.substring(2); + } + if (item.startsWith("WT")) { + wt = item.substring(2); + } + } + DeviceUsageDetail detail = new DeviceUsageDetail(); + detail.setFr(fr); + detail.setPw(pw); + detail.setPl(pl); + detail.setUl(ul); + detail.setWt(wt); + return detail; + } + + private void updateLastRunTime(Device device) { + Device d = new Device(); + d.setDeviceId(device.getDeviceId()); + d.setLastRunTime(LocalDateTime.now()); + deviceMapper.updateById(d); + } + + private Device toLiliao(String deviceId) { + Device device = deviceMapper.selectById(deviceId); + if (Objects.nonNull(device) && device.getOperatingStatus() != 0) { + device.setOperatingStatus(0); + deviceMapper.updateById(device); + deviceTask.addAbnormalDeviceTask(deviceId); + } + return device; + } + + private void recordUse(Device device, DeviceUsageDetail detail) { + if (Objects.isNull(device)) { + log.info("设备使用记录recordUse->device is null"); + return; + } + device.setLastRunTime(LocalDateTime.now()); + deviceMapper.updateById(device); + DeviceUsageRecord record = deviceUsageRecordMapper.selectOne(new LambdaQueryWrapper() + .eq(DeviceUsageRecord::getDeviceId, device.getDeviceId()) + .eq(DeviceUsageRecord::getStartUseFlag, "true")); + if (Objects.nonNull(record)) { + DeviceUsageDetail selectOne = usageDetailMapper.selectOne(new LambdaQueryWrapper(). + eq(DeviceUsageDetail::getUsageRecordId, record.getId()).orderByDesc(DeviceUsageDetail::getCreateTime).last("limit 1")); + long seconds = Duration.between(selectOne.getCreateTime(), LocalDateTime.now()).getSeconds(); + if ("2".equals(detail.getStatus()) && seconds > 30) { + detail.setUsageRecordId(record.getId()); + detail.setCreateTime(LocalDateTime.now()); + usageDetailMapper.insert(detail); + } + log.info("设备正在运行"); + return; + } + DeviceUsageRecord deviceUsageRecord = new DeviceUsageRecord(); + deviceUsageRecord.setStartTime(LocalDateTime.now(Clock.systemDefaultZone())); + deviceUsageRecord.setDeviceId(device.getDeviceId()); + deviceUsageRecord.setStartUseFlag(UniConstant.CONST_TRUE); + deviceUsageRecord.setWm(device.getWm()); + deviceUsageRecord.setBelong(device.getAffiliatedWith()); + deviceUsageRecord.setMuid(device.getMuid()); + deviceUsageRecordMapper.insert(deviceUsageRecord); + if (device.getPaymentMethod() != null && device.getPaymentMethod() == 2 && device.getSurplus() > 0) { + int count = device.getSurplus() - 1; + device.setSurplus(count); + device.setExpireTime(String.valueOf(count)); + deviceMapper.updateById(device); + } + detail.setCreateTime(LocalDateTime.now()); + detail.setUsageRecordId(deviceUsageRecord.getId()); + /* + 如果真要记录待机状态,那么把status=1的recordUse()放开,在这里加上根据deviceUsageRecord.getId()和status=1去查DeviceUsageDetail表, + 如果不为空则不插入数据,即只记录一条状态为待机的数据 + */ + List usageDetails = usageDetailMapper.selectList(new LambdaQueryWrapper().eq(DeviceUsageDetail::getUsageRecordId, deviceUsageRecord.getId()) + .eq(DeviceUsageDetail::getStatus, "1")); + if (CollectionUtils.isEmpty(usageDetails)) { + usageDetailMapper.insert(detail); + } + } + + private void updateRecord(String deviceId) { + DeviceUsageRecord deviceUsageRecord = deviceUsageRecordMapper.selectOne(new LambdaQueryWrapper() + .eq(DeviceUsageRecord::getDeviceId, deviceId) + .eq(DeviceUsageRecord::getStartUseFlag, UniConstant.CONST_TRUE)); + if (Objects.isNull(deviceUsageRecord)) { + return; + } + deviceUsageRecord.setEndTime(LocalDateTime.now(Clock.systemDefaultZone())); + deviceUsageRecord.setStartUseFlag(UniConstant.CONST_FALSE); + deviceUsageRecordMapper.updateById(deviceUsageRecord); + DeviceUsageDetail detail = new DeviceUsageDetail(); + detail.setStatus("4"); + detail.setCreateTime(LocalDateTime.now()); + detail.setUsageRecordId(deviceUsageRecord.getId()); + usageDetailMapper.insert(detail); + } + + private void changeDeviceOperatingStatus(String deviceId, Integer status) { + Device device = deviceMapper.selectById(deviceId); + if (Objects.isNull(device)) { + return; + } + device.setOperatingStatus(status); + deviceMapper.updateById(device); + } + + + public boolean reply(Device device, String status) { + String muid = device.getMuid(); + DeviceInfo deviceInfo = getDeviceInfo(muid); + if (deviceInfo == null) { + log.info("设备会话已过期,请设备先上报一次数据"); + return false; + } + String message = ""; + String c01 = "$01|MU{uid}|DT{date}|ON{1}|CF{2}|WM1|TC000|*{CRC}\r\n"; + String c02 = "$02|MU{uid}|DT{date}|ON{1}|SN{2}|*{CRC}\r\n"; + if ("1".equals(deviceInfo.getStatus())) { + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String replace = c01.replace("{uid}", muid).replace("{date}", now).replace("{1}", status).replace("{2}", device.getCf()); + String crc = replace.substring(1, replace.lastIndexOf("*")); + String asciiHex = XorUtil.xorAsciiHex(crc); + message = replace.replace("{CRC}", asciiHex); + } else if ("2".equals(deviceInfo.getStatus())) { + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String replace = c02.replace("{uid}", muid) + .replace("{date}", now).replace("{1}", status).replace("{2}", "000"); + String crc = replace.substring(1, replace.lastIndexOf("*")); + String asciiHex = XorUtil.xorAsciiHex(crc); + message = replace.replace("{CRC}", asciiHex); + } else if ("4".equals(deviceInfo.getStatus())) { + log.info("设备为关机状态"); + return true; + } + try { + log.info("最终发送的数据为:{}", message); + byte[] data = message.getBytes(StandardCharsets.UTF_8); + InetAddress address = InetAddress.getByName(deviceInfo.getIp()); + DatagramPacket packet = new DatagramPacket(data, data.length, address, deviceInfo.getPort()); + serverSocket.send(packet); + System.out.printf("UDP Reply sent to %s:%d -> %s%n", deviceInfo.getIp(), deviceInfo.getPort(), message); + device.setStatus(status); + deviceMapper.updateById(device); + return true; + } catch (IOException e) { + log.info("回复设备UDP消息发送异常"); + e.printStackTrace(); + return true; + } + } + + /** + * 根据实际协议解析设备ID + * 这是一个示例,您需要根据硬件数据包的实际格式重写此方法 + * + * @param message 收到的原始消息 + * @return 解析出的设备ID + */ + private String parsemuid(String message) { + Pattern p = Pattern.compile("^[^|]*\\|([^|]+)\\|"); + Matcher matcher = p.matcher(message); + if (matcher.find()) { + return matcher.group(1).substring(2); + } + // 如果协议里没有ID,也可以用IP:端口作为唯一标识 + return null; + } + + /** + * 获取设备信息 + * + * @param muid 设备ID + * @return 设备信息,如果不存在则返回null + */ + public DeviceInfo getDeviceInfo(String muid) { + DeviceInfo deviceInfo = deviceMap.get(muid); + if (Objects.nonNull(deviceInfo) && System.currentTimeMillis() - deviceInfo.getLastActiveTime() < SESSION_TIMEOUT) { + return deviceInfo; + } else { + if (Objects.isNull(deviceInfo)) { + deviceMap.remove(muid); + return null; + } + if (!deviceInfo.getStartCount()) { + deviceMap.remove(muid); + } + return null; + } + } + + /** + * 获取所有在线设备 + */ + public ConcurrentHashMap getOnlineDevices() { + return new ConcurrentHashMap<>(deviceMap); + } + + private void replyUpgradeHeartbeat(DeviceInfo info, DatagramPacket packet) { + if (Objects.isNull(info)) { + log.info("method->replyHeartbeat,DeviceInfo is null"); + return; + } + String c01 = "$01|MU{uid}|DT{date}|ON{1}|CF{2}|UP{3}|WM1|TC000|*{CRC}\r\n"; + /* + 查device_upgrade表拿到当前版本升级包名称,然后去/opt/jkadmin/upgrade下面拿到升级包 + 调fileService拆包,得到包数量,替换{3},然后回复 + */ + DeviceUpgrade deviceUpgrade = upgradeMapper.selectOne(new LambdaQueryWrapper().eq(DeviceUpgrade::getBeCurrentVersion, 1)); + if (Objects.isNull(deviceUpgrade)) { + replyHeartbeat(info, packet, null, null); + } else { + String fileUrl = UPGRADE_PACKAGE_ROOT_PATH + deviceUpgrade.getFileName(); + List packages = null; + try { + packages = fileService.splitFileWithNIO(fileUrl); + } catch (IOException e) { + log.error("拆包发生异常-.-.-.-.-.-.-.-.-.", e); + } + if (CollectionUtils.isNotEmpty(packages) && packages.size() <= 32) { + String muid = info.getMuid(); + Device device = deviceMapper.selectOne(new LambdaQueryWrapper().eq(Device::getMuid, muid)); + if (Objects.isNull(device)) { + return; + } + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String r = c01.replace("{uid}", muid).replace("{date}", now).replace("{1}", device.getStatus()) + .replace("{2}", device.getCf()).replace("{3}", String.valueOf(packages.size())); + String crc = r.substring(1, r.lastIndexOf("*")); + String xorAsciiHex = XorUtil.xorAsciiHex(crc); + String msg = r.replace("{CRC}", xorAsciiHex); + log.info("回复升级心跳数据:{}", msg); + byte[] bytes = msg.getBytes(StandardCharsets.UTF_8); + DatagramPacket sendPacket = new DatagramPacket(bytes, bytes.length, packet.getSocketAddress()); + try { + serverSocket.send(sendPacket); + } catch (IOException e) { + log.error("回复升级心跳包发生异常", e); + } + } else { + log.info("升级包为空或升级包大小超过1024*32"); + replyHeartbeat(info, packet, null, null); + } + } + } + +} + diff --git a/admin/src/main/java/cn/unizk/service/WxAuthLoginService.java b/admin/src/main/java/cn/unizk/service/WxAuthLoginService.java new file mode 100644 index 0000000..a1282e6 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/WxAuthLoginService.java @@ -0,0 +1,34 @@ +package cn.unizk.service; + +import cn.unizk.properties.SysWxProperties; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +/** + * @Author hao + * @Date 2025/9/11 10:04 + * @Version 1.0 + **/ +@Service +@Slf4j +public class WxAuthLoginService { + + @Resource + private SysWxProperties wxProperties; + + private static String authUrl = "https://open.weixin.qq.com/connect/qrconnect?appid=${1}&redirect_uri=${2}&response_type=code&scope=snsapi_login&state=${3}#wechat_redirect"; + + public void auth(HttpServletResponse response,String deviceId) throws IOException { + log.info("deviceId={}",deviceId); + String redirectUrl = URLEncoder.encode(wxProperties.getRedirectUrl(), StandardCharsets.UTF_8.name()); + authUrl = authUrl.replace("${1}",wxProperties.getAppid()).replace("${2}",redirectUrl) + .replace("${3}",deviceId); + response.sendRedirect(authUrl); + } +} diff --git a/admin/src/main/java/cn/unizk/service/WxUserService.java b/admin/src/main/java/cn/unizk/service/WxUserService.java new file mode 100644 index 0000000..491eae4 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/WxUserService.java @@ -0,0 +1,9 @@ +/* +package cn.unizk.service; + +import cn.unizk.entity.po.WxUser; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface WxUserService extends IService { +} +*/ diff --git a/admin/src/main/java/cn/unizk/service/impl/BusinessChannelServiceImpl.java b/admin/src/main/java/cn/unizk/service/impl/BusinessChannelServiceImpl.java new file mode 100644 index 0000000..470caf5 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/impl/BusinessChannelServiceImpl.java @@ -0,0 +1,16 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.BusinessChannel; +import cn.unizk.mapper.BusinessChannelMapper; +import cn.unizk.service.BusinessChannelService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2025/10/9 14:48 + * @Version 1.0 + **/ +@Service +public class BusinessChannelServiceImpl extends ServiceImpl implements BusinessChannelService { +} diff --git a/admin/src/main/java/cn/unizk/service/impl/ComboServiceImpl.java b/admin/src/main/java/cn/unizk/service/impl/ComboServiceImpl.java new file mode 100644 index 0000000..50a5622 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/impl/ComboServiceImpl.java @@ -0,0 +1,16 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.Combo; +import cn.unizk.mapper.ComboMapper; +import cn.unizk.service.ComboService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2025/9/11 11:58 + * @Version 1.0 + **/ +@Service +public class ComboServiceImpl extends ServiceImpl implements ComboService { +} diff --git a/admin/src/main/java/cn/unizk/service/impl/DeviceServiceImpl.java b/admin/src/main/java/cn/unizk/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..face7bb --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/impl/DeviceServiceImpl.java @@ -0,0 +1,105 @@ +package cn.unizk.service.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.unizk.entity.po.Device; +import cn.unizk.entity.po.JkStore; +import cn.unizk.entity.vo.DeviceVO; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.mapper.DeviceMapper; +import cn.unizk.mapper.StoreMapper; +import cn.unizk.service.DeviceService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; + +/** + * @Author hao + * @Date 2025/9/12 11:24 + * @Version 1.0 + **/ +@Service +@Slf4j +public class DeviceServiceImpl extends ServiceImpl implements DeviceService { + + @Resource + private DeviceMapper deviceMapper; + @Resource + private StoreMapper storeMapper; + + @Override + public Page listPage(UniPage uniPage) { + Page page = (Page) uniPage.getPage(); + LambdaQueryWrapper queryWrapper = uniPage.buildQueryWrapper(query -> { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + boolean hasKeyword = StringUtils.isNotBlank(query.getKeyword()); + wrapper.eq(query.getStoreId() != null, Device::getStoreId, query.getStoreId()) + .eq(StringUtils.isNotBlank(query.getStatus()), Device::getStatus, query.getStatus()); + if (query.getOutboundStatus() != null && query.getOutboundStatus() == 1) { + wrapper.isNotNull(Device::getOutboundTime); + } + if (query.getOutboundStatus() != null && query.getOutboundStatus() == 0) { + wrapper.isNull(Device::getOutboundTime); + } + if (query.getOperatingStatus() != null){ + wrapper.eq(Device::getOperatingStatus,query.getOperatingStatus()); + } + wrapper.eq(StringUtils.isNotBlank(query.getCf()),Device::getCf,query.getCf()); + wrapper.eq(StringUtils.isNotBlank(query.getWm()),Device::getWm,query.getWm()); + wrapper.eq(StringUtils.isNotBlank(query.getHw()),Device::getHw,query.getHw()); + wrapper.eq(StringUtils.isNotBlank(query.getSw()),Device::getSw,query.getSw()); + wrapper.eq(StringUtils.isNotBlank(query.getCr()),Device::getCr,query.getCr()); + wrapper.eq(query.getUpgradeSwitch() != null,Device::getUpgradeSwitch,query.getUpgradeSwitch()); + wrapper.and(hasKeyword, w -> { + w.eq(hasKeyword, Device::getMuid, query.getKeyword()) + .or() + .eq(hasKeyword, Device::getDeviceId, query.getKeyword()); + }); + if (StringUtils.isNotBlank(query.getSort())){ + if (query.getSort().equals("i")){ + if (query.getBeDesc().equals("1")){ + wrapper.orderByDesc(Device::getIccid); + }else { + wrapper.orderByAsc(Device::getIccid); + } + }else if (query.getSort().equals("r")){ + if (query.getBeDesc().equals("1")){ + wrapper.orderByDesc(Device::getRechargeCount); + }else { + wrapper.orderByAsc(Device::getRechargeCount); + } + } + } + return wrapper; + }); + Page devicePage = deviceMapper.selectPage(page, queryWrapper); + List records = devicePage.getRecords(); + for (Device record : records) { + if (record == null){ + continue; + } + if (record.getPaymentMethod() != null && record.getPaymentMethod() == 1){ + if (record.getSurplus() != null && record.getSurplus() > 0){ + DateTime dateTime = DateUtil.offsetDay(new Date(), record.getSurplus()); + String date = DateUtil.formatDate(dateTime); + DateTime parseDate = DateUtil.parseDate(date); + String time = DateUtil.formatDateTime(parseDate); + record.setExpireTime(time); + } + } + if (record.getStoreId() == null){ + continue; + } + JkStore store = storeMapper.selectById(record.getStoreId()); + record.setAffiliatedWith(store.getStoreName()); + } + return devicePage; + } +} diff --git a/admin/src/main/java/cn/unizk/service/impl/LoginServiceImpl.java b/admin/src/main/java/cn/unizk/service/impl/LoginServiceImpl.java new file mode 100644 index 0000000..5c444fc --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/impl/LoginServiceImpl.java @@ -0,0 +1,92 @@ +package cn.unizk.service.impl; + +import cn.unizk.constants.Constants; +import cn.unizk.entity.dto.LoginUser; +import cn.unizk.entity.po.JkStore; +import cn.unizk.entity.vo.SysUserVO; +import cn.unizk.entity.vo.SysUserVO2; +import cn.unizk.exception.ServiceException; +import cn.unizk.security.context.AuthenticationContextHolder; +import cn.unizk.service.LoginService; +import cn.unizk.service.StoreService; +import cn.unizk.service.TokenService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.InternalAuthenticationServiceException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * @Author hao + * @Date 2025/8/25 15:14 + * @Version 1.0 + **/ +@Service +public class LoginServiceImpl implements LoginService { + + @Resource + private AuthenticationManager authenticationManager; + @Resource + private TokenService tokenService; + @Resource + private StoreService storeService; + + @Override + public SysUserVO loginByUsername(SysUserVO sysUserVO) { + loginParamsCheck(sysUserVO); + Authentication authentication = null; + try { + UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(sysUserVO.getUsername(),sysUserVO.getPassword()); + AuthenticationContextHolder.setContext(usernamePasswordAuthenticationToken); + authentication = authenticationManager.authenticate(usernamePasswordAuthenticationToken); + }catch (Exception e){ + if (e instanceof BadCredentialsException){ + throw new ServiceException("username password not match"); + } + if (e instanceof UsernameNotFoundException){ + throw new ServiceException(e.getMessage()); + } + if (e instanceof InternalAuthenticationServiceException){ + throw new ServiceException(e.getMessage()); + } + if (e instanceof ServiceException){ + throw e; + } + else { + e.printStackTrace(); + throw new ServiceException("认证异常"); + } + }finally { + AuthenticationContextHolder.removeContext(); + } + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + String token = tokenService.createToken(loginUser); + sysUserVO.setToken(token); + sysUserVO.setRole(loginUser.getSysUser().getRole()); + sysUserVO.setId(loginUser.getSysUser().getId()); + sysUserVO.setStatus(loginUser.getSysUser().getStatus()); + sysUserVO.setStoreId(loginUser.getSysUser().getStoreId()); + sysUserVO.setAvatar(loginUser.getSysUser().getAvatar()); + if (loginUser.getSysUser().getStoreId() != null){ + JkStore jkStore = storeService.getById(loginUser.getSysUser().getStoreId()); + sysUserVO.setStoreName(jkStore.getStoreName()); + sysUserVO.setStoreImage(jkStore.getStoreImage()); + } + sysUserVO.setCreateTime(loginUser.getSysUser().getCreateTime()); + return sysUserVO; + } + + protected void loginParamsCheck(SysUserVO sysUserVO){ + if (StringUtils.isBlank(sysUserVO.getUsername()) || StringUtils.isBlank(sysUserVO.getPassword())){ + throw new ServiceException("请输入用户名和密码"); + } + if (sysUserVO.getUsername().length() > Constants.MAX_USERNAME_LENGTH){ + throw new ServiceException("用户名过长"); + } + } +} diff --git a/admin/src/main/java/cn/unizk/service/impl/MenuServiceImpl.java b/admin/src/main/java/cn/unizk/service/impl/MenuServiceImpl.java new file mode 100644 index 0000000..a5dce21 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/impl/MenuServiceImpl.java @@ -0,0 +1,38 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.Menu; +import cn.unizk.entity.vo.TreeMenu; +import cn.unizk.mapper.MenuMapper; +import cn.unizk.service.MenuService; +import cn.unizk.utils.MenuTreeUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author hao + * @Date 2025/8/26 16:11 + * @Version 1.0 + **/ +@Service +@Slf4j +public class MenuServiceImpl extends ServiceImpl implements MenuService { + + @Resource + private MenuMapper menuMapper; + + @Override + public List getAllMenus() { + List menus = menuMapper.selectAdminMenuList(); + return MenuTreeUtil.buildTree(menus); + } + + @Override + public List getStoreMenus() { + List menus = menuMapper.selectStoreMenuList(); + return MenuTreeUtil.buildTree(menus); + } +} diff --git a/admin/src/main/java/cn/unizk/service/impl/PhysioServiceImpl.java b/admin/src/main/java/cn/unizk/service/impl/PhysioServiceImpl.java new file mode 100644 index 0000000..69f9b47 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/impl/PhysioServiceImpl.java @@ -0,0 +1,17 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.JkPhysio; +import cn.unizk.mapper.JkPhysioMapper; +import cn.unizk.mapper.JkProductMapper; +import cn.unizk.service.PhysioService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2025/9/9 15:13 + * @Version 1.0 + **/ +@Service +public class PhysioServiceImpl extends ServiceImpl implements PhysioService { +} diff --git a/admin/src/main/java/cn/unizk/service/impl/ProductCarouselServiceImpl.java b/admin/src/main/java/cn/unizk/service/impl/ProductCarouselServiceImpl.java new file mode 100644 index 0000000..4820fc6 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/impl/ProductCarouselServiceImpl.java @@ -0,0 +1,16 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.ProductCarousel; +import cn.unizk.mapper.ProductCarouselMapper; +import cn.unizk.service.ProductCarouselService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2025/9/5 18:19 + * @Version 1.0 + **/ +@Service +public class ProductCarouselServiceImpl extends ServiceImpl implements ProductCarouselService { +} diff --git a/admin/src/main/java/cn/unizk/service/impl/ProductServiceImpl.java b/admin/src/main/java/cn/unizk/service/impl/ProductServiceImpl.java new file mode 100644 index 0000000..8cb834d --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/impl/ProductServiceImpl.java @@ -0,0 +1,29 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.JkProduct; +import cn.unizk.entity.vo.JkProductVO; +import cn.unizk.mapper.JkProductMapper; +import cn.unizk.service.ProductService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * @Author hao + * @Date 2025/9/3 16:25 + * @Version 1.0 + **/ +@Service +@Slf4j +public class ProductServiceImpl extends ServiceImpl implements ProductService { + + @Resource + private JkProductMapper productMapper; + + @Override + public JkProductVO echo(Integer id) { + return productMapper.selectProductVO(id); + } +} diff --git a/admin/src/main/java/cn/unizk/service/impl/StoreServiceImpl.java b/admin/src/main/java/cn/unizk/service/impl/StoreServiceImpl.java new file mode 100644 index 0000000..e5cf34d --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/impl/StoreServiceImpl.java @@ -0,0 +1,16 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.JkStore; +import cn.unizk.mapper.StoreMapper; +import cn.unizk.service.StoreService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2025/9/8 12:00 + * @Version 1.0 + **/ +@Service +public class StoreServiceImpl extends ServiceImpl implements StoreService { +} diff --git a/admin/src/main/java/cn/unizk/service/impl/SysDictServiceImpl.java b/admin/src/main/java/cn/unizk/service/impl/SysDictServiceImpl.java new file mode 100644 index 0000000..b36862d --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/impl/SysDictServiceImpl.java @@ -0,0 +1,16 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.SysDict; +import cn.unizk.mapper.SysDictMapper; +import cn.unizk.service.SysDictService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2025/9/3 12:02 + * @Version 1.0 + **/ +@Service +public class SysDictServiceImpl extends ServiceImpl implements SysDictService { +} diff --git a/admin/src/main/java/cn/unizk/service/impl/SysFileServiceImpl.java b/admin/src/main/java/cn/unizk/service/impl/SysFileServiceImpl.java new file mode 100644 index 0000000..d8f7d3d --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/impl/SysFileServiceImpl.java @@ -0,0 +1,97 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.SysFile; +import cn.unizk.entity.vo.MinioRespVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.SysFileMapper; +import cn.unizk.service.SysFileService; +import cn.unizk.utils.MinioUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.ImmutableSet; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.time.Clock; +import java.time.LocalDateTime; +import java.util.Objects; +import java.util.Set; + +/** + * @Author hao + * @Date 2025/8/27 18:37 + * @Version 1.0 + **/ +@Service +@Slf4j +public class SysFileServiceImpl extends ServiceImpl implements SysFileService { + + @Resource + private MinioUtil minioUtil; + @Resource + private SysFileMapper sysFileMapper; + + private static final Set WHITE_SET = ImmutableSet.of("image/png","image/jpeg","image/x-icon", + "application/zip", + "application/pdf"); + + @Override + public ResultData simpleUpload(MultipartFile file, String bucketName) { + /*try { + // 1. 读取文件前几个字节(建议至少读 8~16 字节) + byte[] fileHeader = new byte[16]; + InputStream is = file.getInputStream(); + int bytesRead = is.read(fileHeader); + is.close(); + if (bytesRead < 4) { + throw new ServiceException("文件太小,无法识别"); + } + String mimeType = FileMagicNumber.getMagicNumber(fileHeader).getMimeType(); + if (!WHITE_SET.contains(mimeType)){ + throw new ServiceException("目前只支持上传png,jpg,jpeg,txt类型文件"); + } + log.info("mimeType={}",mimeType); + } catch (IOException e) { + e.printStackTrace(); + }*/ + MinioRespVO resp = null; + try { + resp = minioUtil.uploadFile(file, bucketName); + } catch (Exception e) { + e.printStackTrace(); + throw new ServiceException("文件上传异常"); + } + if (Objects.isNull(resp)){ + throw new ServiceException("文件上传失败"); + } + String fileUrl = resp.getMinIoUrl(); + String fileName = resp.getFileName(); + SysFile sysFile = new SysFile(); + sysFile.setFileUrl(fileUrl); + sysFile.setFileName(fileName); + sysFile.setBucketName(bucketName); + sysFile.setFileType(file.getContentType()); + sysFile.setCreateTime(LocalDateTime.now(Clock.systemDefaultZone())); + int insert = sysFileMapper.insert(sysFile); + resp.setFileId(sysFile.getFileId()); + return insert > 0 ? ResultData.success(resp) : ResultData.failure(ResultData.FAIL_CODE,"上传失败"); + } + + @Override + public void deleteFile(String bucketName, String fileName) throws Exception { + + } + + @Override + public void deleteFileById(Integer fileId) throws Exception { + SysFile sysFile = sysFileMapper.selectById(fileId); + //强删 + minioUtil.deleteFile(sysFile.getBucketName(),sysFile.getFileName()); + sysFileMapper.deleteById(sysFile); + //软删 + /*sysFile.setStatus(1); + sysFileDao.updateById(sysFile);*/ + } +} diff --git a/admin/src/main/java/cn/unizk/service/impl/SysOrderServiceImpl.java b/admin/src/main/java/cn/unizk/service/impl/SysOrderServiceImpl.java new file mode 100644 index 0000000..cb876ce --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/impl/SysOrderServiceImpl.java @@ -0,0 +1,273 @@ +package cn.unizk.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.unizk.config.HuiFuVendorProperties; +import cn.unizk.config.properties.HfProperties; +import cn.unizk.entity.dto.CommonRequestDTO; +import cn.unizk.entity.dto.HuifuSyncRefundResDTO; +import cn.unizk.entity.dto.ProfitSharingRefundDTO; +import cn.unizk.entity.dto.RefundDTO; +import cn.unizk.entity.po.MobileOrder; +import cn.unizk.entity.vo.MobileOrderVO; +import cn.unizk.entity.vo.OrderReqVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.enums.OrderAfterSaleStatus; +import cn.unizk.enums.OrderStatus; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.MobileOrderMapper; +import cn.unizk.mapper.StoreMapper; +import cn.unizk.service.SysOrderService; +import cn.unizk.utils.HttpUtil; +import cn.unizk.utils.HuifuSignUtil; +import cn.unizk.utils.HuifuUtil; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.gson.Gson; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +/** + * @Author hao + * @Date 2025/9/4 18:36 + * @Version 1.0 + **/ +@Service +@Slf4j +public class SysOrderServiceImpl extends ServiceImpl implements SysOrderService { + + /* @Resource + private WxOrderMapper orderMapper;*/ + @Resource + private MobileOrderMapper mobileOrderMapper; + /*@Resource + private HfProperties hfProperties;*/ + @Resource + private StoreMapper storeMapper; + @Resource + private HuiFuVendorProperties huiFuVendorProperties; + + @Override + public Page orderList(UniPage uniPage) { + Page page = new Page<>(); + page.setSize(uniPage.getPageSize()); + page.setCurrent(uniPage.getCurrentPage()); + OrderReqVO queryBody = uniPage.getQueryBody(); + if (StringUtils.isNotBlank(queryBody.getSearchStartTime())) { + queryBody.setSearchStartTimeDt(DateUtil.parse(queryBody.getSearchStartTime())); + } + if (StringUtils.isNotBlank(queryBody.getSearchEndTime())) { + queryBody.setSearchEndTimeDt(DateUtil.parse(queryBody.getSearchEndTime())); + } + return mobileOrderMapper.selectOrders(page, queryBody); + } + + @Override + public MobileOrder getOrderByIdAndPhone(String orderId, String phone) { + return mobileOrderMapper.selectOrderByIdAndPhone(orderId, phone); + } + + @Override + public ResultData refund(MobileOrder wxOrder) { + CommonRequestDTO commonRequestDTO = new CommonRequestDTO<>(); + ProfitSharingRefundDTO profitSharingRefundDTO = new ProfitSharingRefundDTO(); + String req_date = DateUtil.format(new Date(), "yyyyMMdd"); + profitSharingRefundDTO.setReq_date(req_date); + profitSharingRefundDTO.setReq_seq_id(wxOrder.getOutTradeNo()); + profitSharingRefundDTO.setOrd_amt(wxOrder.getTotalPrice().toString()); + String org_req_date = DateUtil.format(wxOrder.getCreateTime(), "yyyyMMdd"); + profitSharingRefundDTO.setOrg_req_date(org_req_date); +// profitSharingRefundDTO.setOrg_hf_seq_id(wxOrder.getHfSeqId()); + /*if (wxOrder.getStoreId() != null) { + ProfitSharingRefundDTO.AcctSplitBunch acctSplitBunch = new ProfitSharingRefundDTO.AcctSplitBunch(); + List acctInfos = new ArrayList<>(); + ProfitSharingRefundDTO.AcctSplitBunch.AcctInfos acctInfo = new ProfitSharingRefundDTO.AcctSplitBunch.AcctInfos(); + acctInfo.setDiv_amt(wxOrder.getTotalPrice().toString()); + JkStore jkStore = storeMapper.selectById(wxOrder.getStoreId()); + acctInfo.setHuifu_id(jkStore.getHuifuId()); + acctInfos.add(acctInfo); + acctSplitBunch.setAcct_infos(acctInfos); + profitSharingRefundDTO.setAcct_split_bunch(acctSplitBunch); + }*/ + String sign = HuifuUtil.sign(JSONObject.from(profitSharingRefundDTO), huiFuVendorProperties.getPrivateKey()); + commonRequestDTO.setSign(sign); + commonRequestDTO.setData(profitSharingRefundDTO); + log.info("退款接口请求参数:{}",commonRequestDTO); + String res = HttpUtil.doPostJson(huiFuVendorProperties.getRefundApi(), null, JSONObject.from(commonRequestDTO)); + log.info("调汇付退款接口返回:{}", res); + Gson gson = new Gson(); + HuifuSyncRefundResDTO huifuSyncRefundResDTO = gson.fromJson(res, HuifuSyncRefundResDTO.class); + if ("00000000".equals(huifuSyncRefundResDTO.getData().getResp_code())){ + if ("S".equals(huifuSyncRefundResDTO.getData().getTrans_stat())){ + wxOrder.setStatus(OrderStatus.refunded.name()); + wxOrder.setRefundFinishTime(LocalDateTime.now()); + wxOrder.setAfterSaleStatus(OrderAfterSaleStatus.AGREE_TUI_KUAN.getKey()); + mobileOrderMapper.updateById(wxOrder); + }else if ("F".equals(huifuSyncRefundResDTO.getData().getTrans_stat())){ + log.info("退款失败,原因:{}",huifuSyncRefundResDTO.getData().getResp_desc()); + throw new ServiceException("退款失败!"); + }else if ("P".equals(huifuSyncRefundResDTO.getData().getTrans_stat())){ + ResultData resultData = new ResultData(); + resultData.setMessage("退款处理中..."); + resultData.setCode(200); + return resultData; + } + }else if ("00000100".equals(huifuSyncRefundResDTO.getData().getResp_code())){ + log.info("交易处理中"); + ResultData resultData = new ResultData(); + resultData.setMessage("退款处理中..."); + resultData.setCode(200); + return resultData; + + }else { + log.info("退款失败2,原因2:{}",huifuSyncRefundResDTO.getData().getResp_desc()); + throw new ServiceException("退款失败!"); + } + throw new ServiceException("未知异常"); + } + + @Override + public Page afterSale(UniPage uniPage) { + Page page = (Page) uniPage.getPage(); + OrderReqVO queryBody = uniPage.getQueryBody(); + if (StringUtils.isNotBlank(queryBody.getSearchStartTime())) { + queryBody.setSearchStartTimeDt(DateUtil.parse(queryBody.getSearchStartTime())); + } + if (StringUtils.isNotBlank(queryBody.getSearchEndTime())) { + queryBody.setSearchEndTimeDt(DateUtil.parse(queryBody.getSearchEndTime())); + } + List afterSaleStatusList = queryBody.getAfterSaleStatusList(); + if (queryBody.getAfterSaleStatus() != null && queryBody.getAfterSaleStatus() == 5){ + afterSaleStatusList.add(5); + afterSaleStatusList.add(6); + }else if (queryBody.getAfterSaleStatus() != null){ + afterSaleStatusList.add(queryBody.getAfterSaleStatus()); + } + return mobileOrderMapper.selectAfterSaleOrders(page,queryBody); + } + + @Override + public ResultData agreeRefund(String orderId,String platformType) { + String reqSeqId = HuifuUtil.getReqSeqId(); + if ("WECHAT_MP".equals(platformType)){ + MobileOrder wxOrder = mobileOrderMapper.selectById(orderId); + if (OrderStatus.refunded.name().equals(wxOrder.getStatus())){ + throw new ServiceException("该订单已退款!"); + } + CommonRequestDTO commonRequestDTO = new CommonRequestDTO<>(); + commonRequestDTO.setSys_id(huiFuVendorProperties.getSysId()); + commonRequestDTO.setProduct_id(huiFuVendorProperties.getProductId()); + RefundDTO refundDTO = new RefundDTO(); + String now = DateUtil.format(new Date(), "yyyyMMdd"); + refundDTO.setReq_date(now); + refundDTO.setReq_seq_id(reqSeqId); + refundDTO.setHuifu_id(huiFuVendorProperties.getHuifuId()); + refundDTO.setOrd_amt(wxOrder.getTotalPrice().toString()); + String org_req_date = DateUtil.format(wxOrder.getCreateTime(), "yyyyMMdd"); + refundDTO.setOrg_req_date(org_req_date); + refundDTO.setOrg_req_seq_id(wxOrder.getOutTradeNo()); + commonRequestDTO.setData(refundDTO); + String sign = HuifuUtil.sign(JSONObject.from(refundDTO), huiFuVendorProperties.getPrivateKey()); + commonRequestDTO.setSign(sign); + String res = HttpUtil.doPostJson(huiFuVendorProperties.getRefundApi(), null, JSONObject.from(commonRequestDTO)); + log.info("调汇付退款接口返回:{}", res); + Gson gson = new Gson(); + HuifuSyncRefundResDTO huifuSyncRefundResDTO = gson.fromJson(res, HuifuSyncRefundResDTO.class); + if ("00000000".equals(huifuSyncRefundResDTO.getData().getResp_code())){ + if ("S".equals(huifuSyncRefundResDTO.getData().getTrans_stat())){ + wxOrder.setRefundReqSeqId(reqSeqId); + wxOrder.setStatus(OrderStatus.refunded.name()); + wxOrder.setRefundFinishTime(LocalDateTime.now()); + wxOrder.setAfterSaleStatus(OrderAfterSaleStatus.AGREE_TUI_KUAN.getKey()); + mobileOrderMapper.updateById(wxOrder); + }else if ("F".equals(huifuSyncRefundResDTO.getData().getTrans_stat())){ + log.info("退款失败,原因:{}",huifuSyncRefundResDTO.getData().getResp_desc()); + throw new ServiceException("退款失败!"); + }else if ("P".equals(huifuSyncRefundResDTO.getData().getTrans_stat())){ + wxOrder.setRefundReqSeqId(reqSeqId); + mobileOrderMapper.updateById(wxOrder); + ResultData resultData = new ResultData(); + resultData.setMessage("退款处理中..."); + resultData.setCode(200); + return resultData; + } + }else if ("00000100".equals(huifuSyncRefundResDTO.getData().getResp_code())){ + wxOrder.setRefundReqSeqId(reqSeqId); + mobileOrderMapper.updateById(wxOrder); + log.info("交易处理中"); + ResultData resultData = new ResultData(); + resultData.setMessage("退款处理中..."); + resultData.setCode(200); + return resultData; + + }else { + log.info("退款失败2,原因2:{}",huifuSyncRefundResDTO.getData().getResp_desc()); + throw new ServiceException("退款失败!"); + } + } + if ("APP".equals(platformType)){ + MobileOrder mobileOrder = mobileOrderMapper.selectById(orderId); + if (OrderStatus.refunded.name().equals(mobileOrder.getStatus())){ + throw new ServiceException("该订单已退款!"); + } + CommonRequestDTO commonRequestDTO = new CommonRequestDTO<>(); + commonRequestDTO.setSys_id(huiFuVendorProperties.getSysId()); + commonRequestDTO.setProduct_id(huiFuVendorProperties.getProductId()); + RefundDTO refundDTO = new RefundDTO(); + String now = DateUtil.format(new Date(), "yyyyMMdd"); + refundDTO.setReq_date(now); + refundDTO.setReq_seq_id(reqSeqId); + refundDTO.setHuifu_id(huiFuVendorProperties.getHuifuId()); + refundDTO.setOrd_amt(mobileOrder.getTotalPrice().toString()); + String org_req_date = DateUtil.format(mobileOrder.getCreateTime(), "yyyyMMdd"); + refundDTO.setOrg_req_date(org_req_date); + refundDTO.setOrg_req_seq_id(mobileOrder.getOutTradeNo()); + commonRequestDTO.setData(refundDTO); + String sign = HuifuUtil.sign(JSONObject.from(refundDTO), huiFuVendorProperties.getPrivateKey()); + commonRequestDTO.setSign(sign); + String res = HttpUtil.doPostJson(huiFuVendorProperties.getRefundApi(), null, JSONObject.from(commonRequestDTO)); + log.info("调汇付退款接口返回:{}", res); + Gson gson = new Gson(); + HuifuSyncRefundResDTO huifuSyncRefundResDTO = gson.fromJson(res, HuifuSyncRefundResDTO.class); + if ("00000000".equals(huifuSyncRefundResDTO.getData().getResp_code())){ + if ("S".equals(huifuSyncRefundResDTO.getData().getTrans_stat())){ + mobileOrder.setRefundReqSeqId(reqSeqId); + mobileOrder.setStatus(OrderStatus.refunded.name()); + mobileOrder.setRefundFinishTime(LocalDateTime.now()); + mobileOrder.setAfterSaleStatus(OrderAfterSaleStatus.AGREE_TUI_KUAN.getKey()); + mobileOrderMapper.updateById(mobileOrder); + }else if ("F".equals(huifuSyncRefundResDTO.getData().getTrans_stat())){ + log.info("退款失败,原因:{}",huifuSyncRefundResDTO.getData().getResp_desc()); + throw new ServiceException("退款失败!"); + }else if ("P".equals(huifuSyncRefundResDTO.getData().getTrans_stat())){ + mobileOrder.setRefundReqSeqId(reqSeqId); + mobileOrderMapper.updateById(mobileOrder); + ResultData resultData = new ResultData(); + resultData.setMessage("退款处理中..."); + resultData.setCode(200); + return resultData; + } + }else if ("00000100".equals(huifuSyncRefundResDTO.getData().getResp_code())){ + mobileOrder.setRefundReqSeqId(reqSeqId); + mobileOrderMapper.updateById(mobileOrder); + log.info("交易处理中"); + ResultData resultData = new ResultData(); + resultData.setMessage("退款处理中..."); + resultData.setCode(200); + return resultData; + + }else { + log.info("退款失败2,原因2:{}",huifuSyncRefundResDTO.getData().getResp_desc()); + throw new ServiceException("退款失败!"); + } + } + throw new ServiceException("退款失败"); + } +} diff --git a/admin/src/main/java/cn/unizk/service/impl/SysUserServiceImpl.java b/admin/src/main/java/cn/unizk/service/impl/SysUserServiceImpl.java new file mode 100644 index 0000000..678812d --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/impl/SysUserServiceImpl.java @@ -0,0 +1,16 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.SysUser; +import cn.unizk.mapper.SysUserMapper; +import cn.unizk.service.SysUserService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2025/9/8 14:52 + * @Version 1.0 + **/ +@Service +public class SysUserServiceImpl extends ServiceImpl implements SysUserService { +} diff --git a/admin/src/main/java/cn/unizk/service/impl/UserDetailsServiceImpl.java b/admin/src/main/java/cn/unizk/service/impl/UserDetailsServiceImpl.java new file mode 100644 index 0000000..e6b5b15 --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/impl/UserDetailsServiceImpl.java @@ -0,0 +1,49 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.dto.LoginUser; +import cn.unizk.entity.po.SysUser; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.SysUserMapper; +import cn.unizk.service.PasswordService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; + +/** + * @Author hao + * @Date 2025/8/25 14:39 + * @Version 1.0 + **/ +@Service +public class UserDetailsServiceImpl implements UserDetailsService { + + @Resource + private SysUserMapper sysUserMapper; + @Resource + private PasswordService passwordService; + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + SysUser sysUser = sysUserMapper.selectOne(new LambdaQueryWrapper().eq(SysUser::getUsername, username)); + if (Objects.isNull(sysUser)){ + throw new ServiceException(String.format("用户名【%s】不存在",username)); + }else if ("disable".equals(sysUser.getStatus())){ + throw new ServiceException("账号被禁用"); + } + passwordService.validate(sysUser); + return createUser(sysUser); + } + + public UserDetails createUser(SysUser sysUser){ + Set permissions = new HashSet<>(); + permissions.add(sysUser.getRole()); + return new LoginUser(sysUser.getId(),sysUser,permissions); + } +} diff --git a/admin/src/main/java/cn/unizk/service/impl/WxUserServiceImpl.java b/admin/src/main/java/cn/unizk/service/impl/WxUserServiceImpl.java new file mode 100644 index 0000000..155df7d --- /dev/null +++ b/admin/src/main/java/cn/unizk/service/impl/WxUserServiceImpl.java @@ -0,0 +1,20 @@ +/* +package cn.unizk.service.impl; + +import cn.unizk.entity.po.WxUser; +import cn.unizk.mapper.WxUserMapper; +import cn.unizk.service.WxUserService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +*/ +/** + * @Author hao + * @Date 2025/9/8 11:27 + * @Version 1.0 + **//* + +@Service +public class WxUserServiceImpl extends ServiceImpl implements WxUserService { +} +*/ diff --git a/admin/src/main/java/cn/unizk/task/DeviceTask.java b/admin/src/main/java/cn/unizk/task/DeviceTask.java new file mode 100644 index 0000000..f4769f7 --- /dev/null +++ b/admin/src/main/java/cn/unizk/task/DeviceTask.java @@ -0,0 +1,125 @@ +package cn.unizk.task; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.unizk.constant.UniConstant; +import cn.unizk.entity.po.Device; +import cn.unizk.entity.po.DeviceUsageRecord; +import cn.unizk.entity.po.UserDeviceTreatRecord; +import cn.unizk.entity.vo.DeviceUsageRecordVO2; +import cn.unizk.mapper.DeviceMapper; +import cn.unizk.mapper.DeviceUsageRecordMapper; +import cn.unizk.mapper.UserDeviceTreatRecordMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2025/10/13 17:42 + * @Version 1.0 + **/ +@Component +@Slf4j +@SuppressWarnings("unchecked") +public class DeviceTask { + @Resource + private DeviceMapper deviceMapper; + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + @Resource + private DeviceUsageRecordMapper usageRecordMapper; + @Resource + private UserDeviceTreatRecordMapper treatRecordMapper; + @Value("${spring.profiles.active}") + private String active; + + private static final String QUEUE_KEY = "device:status:delay"; + private static final long DELAY_TIME = 60 * 60 * 1000; + + + @Scheduled(cron = "0 0 0 * * *") + public void stopDevice(){ + if (active != null && active.equals("dev")){ + return; + } + log.info("时间:{},执行设备可使用天数减一", DateUtil.now()); + deviceMapper.reduceDay(); + } + + public void addAbnormalDeviceTask(String deviceId){ + redisTemplate.opsForZSet().add(QUEUE_KEY,deviceId,System.currentTimeMillis() + DELAY_TIME); + } + +// @Scheduled(fixedRate = 60000) + public void processAbnormalDeviceTask(){ + long now = System.currentTimeMillis(); + Set abnormalDevices = redisTemplate.opsForZSet().rangeByScore(QUEUE_KEY,0,now,0,50); + if (CollectionUtils.isEmpty(abnormalDevices)){ + return; + } + for (String abnormalDevice : abnormalDevices) { + Device device = deviceMapper.selectById(abnormalDevice); + if (Objects.isNull(device) || device.getOperatingStatus() != 0 || "4".equals(device.getMo())){ + redisTemplate.opsForZSet().remove(QUEUE_KEY,abnormalDevice); + continue; + } + device.setOperatingStatus(2); + deviceMapper.updateById(device); + redisTemplate.opsForZSet().remove(QUEUE_KEY,abnormalDevice); + } + } + + @Scheduled(fixedRate = 10_000) + public void updateDeviceTask(){ + if (active != null && active.equals("dev")){ + return; + } + log.info("执行非正常关机的设备巡查......"); + List deviceList = deviceMapper.selectAbnormalDevice(); + List deviceIds = deviceList.stream().map(Device::getDeviceId).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(deviceIds)){ + usageRecordMapper.closeAbnormalRecord(deviceIds); + } + deviceMapper.updateAbnormalDevice(); + + } + + @Scheduled(fixedRate = 120_000) + public void updateTreatDevice(){ + if (active != null && active.equals("dev")){ + return; + } + try { + DateTime dateTime = DateUtil.offsetMinute(new Date(), -30); + List userDeviceTreatRecords = treatRecordMapper.selectList(new LambdaQueryWrapper() + .lt(UserDeviceTreatRecord::getCreateTime, dateTime)); + List collect = userDeviceTreatRecords.stream().map(UserDeviceTreatRecord::getDeviceId) + .distinct() + .collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(collect)){ + for (String s : collect) { + Device device = new Device(); + device.setDeviceId(s); + device.setTreatStatus(0); + deviceMapper.updateById(device); + } + } + }catch (Exception e){ + log.error("更新设备治疗状态发生异常",e); + } + } + +} diff --git a/admin/src/main/java/cn/unizk/task/PhysioDailySchedulesTask.java b/admin/src/main/java/cn/unizk/task/PhysioDailySchedulesTask.java new file mode 100644 index 0000000..3bed006 --- /dev/null +++ b/admin/src/main/java/cn/unizk/task/PhysioDailySchedulesTask.java @@ -0,0 +1,38 @@ +package cn.unizk.task; + +import cn.unizk.mapper.DailySchedulesMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * @Author hao + * @Date 2026/5/18 17:00 + * @Version 1.0 + **/ +@Component +@Slf4j +@SuppressWarnings("unchecked") +public class PhysioDailySchedulesTask { + + @Resource + private DailySchedulesMapper dailySchedulesMapper; + @Value("${spring.profiles.active}") + private String active; + + @Scheduled(cron = "0 0 2 * * ?") + public void generateDailySchedules(){ + if (active != null && active.equals("dev")){ + return; + } + log.info("开始执行生成排班定时任务"); + try { + dailySchedulesMapper.batchInsertDailySchedules(); + }catch (Exception e){ + log.error("生成排班定时任务执行失败", e); + } + } +} diff --git a/admin/src/main/java/cn/unizk/task/UserTreatTask.java b/admin/src/main/java/cn/unizk/task/UserTreatTask.java new file mode 100644 index 0000000..0e088a4 --- /dev/null +++ b/admin/src/main/java/cn/unizk/task/UserTreatTask.java @@ -0,0 +1,26 @@ +package cn.unizk.task; + +import cn.unizk.mapper.UserTreatmentParametersMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * @Author hao + * @Date 2026/5/8 11:19 + * @Version 1.0 + **/ +@Component +@Slf4j +@SuppressWarnings("unchecked") +public class UserTreatTask { + @Resource + private UserTreatmentParametersMapper userTreatmentParametersMapper; + + @Scheduled(fixedRate = 60000) + public void deleteUserTreat(){ + userTreatmentParametersMapper.deleteTreat(); + } +} diff --git a/admin/src/main/java/cn/unizk/utils/FixedLengthSerializer.java b/admin/src/main/java/cn/unizk/utils/FixedLengthSerializer.java new file mode 100644 index 0000000..0049f82 --- /dev/null +++ b/admin/src/main/java/cn/unizk/utils/FixedLengthSerializer.java @@ -0,0 +1,27 @@ +package cn.unizk.utils; + +import org.springframework.integration.ip.tcp.serializer.AbstractByteArraySerializer; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +/** + * @Author hao + * @Date 2026/3/31 11:56 + * @Version 1.0 + **/ +public class FixedLengthSerializer extends AbstractByteArraySerializer { + @Override + public byte[] deserialize(InputStream inputStream) throws IOException { + throw new UnsupportedOperationException("FixedLengthSerializer is only for serialization"); + } + + @Override + public void serialize(byte[] bytes, OutputStream outputStream) throws IOException { + if (bytes != null && bytes.length > 0) { + outputStream.write(bytes); + outputStream.flush(); + } + } +} diff --git a/admin/src/main/java/cn/unizk/utils/HuifuSignUtil.java b/admin/src/main/java/cn/unizk/utils/HuifuSignUtil.java new file mode 100644 index 0000000..f561945 --- /dev/null +++ b/admin/src/main/java/cn/unizk/utils/HuifuSignUtil.java @@ -0,0 +1,70 @@ +package cn.unizk.utils; + +import cn.unizk.exception.ServiceException; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.security.KeyFactory; +import java.security.PrivateKey; +import java.security.Signature; +import java.security.spec.PKCS8EncodedKeySpec; +import java.util.Base64; +import java.util.TreeMap; + +/** + * @Author hao + * @Date 2026/3/13 15:33 + * @Version 1.0 + **/ +@Slf4j +public class HuifuSignUtil { + + /** + * RSA私钥签名:签名方式SHA256WithRSA + * @param data 待签名字符串 + * @param privateKeyBase64 私钥(Base64编码) + * @return 签名byte[] + * @throws ServiceException + */ + public static String sign(String data, String privateKeyBase64) { + // Base64 --> Key + try { + byte[] bytes = Base64.getDecoder().decode(privateKeyBase64); + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes); + KeyFactory keyFactory; + keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(keySpec); + // Sign + Signature signature = Signature.getInstance("SHA256WithRSA"); + signature.initSign(privateKey); + signature.update(data.getBytes(StandardCharsets.UTF_8)); + return Base64.getEncoder().encodeToString(signature.sign()); + } catch (Exception e) { + log.error("签名异常",e); + throw new ServiceException("签名异常"); + } + } + + public static String sign(JSONObject object, String privateKeyStr) { + TreeMap treeMap = JSONObject.parseObject(object.toString(), TreeMap.class); + JSONObject signBody = new JSONObject(treeMap); + // Base64 --> Key + try { + byte[] bytes = Base64.getDecoder().decode(privateKeyStr); + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes); + KeyFactory keyFactory; + keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(keySpec); + // Sign + Signature signature = Signature.getInstance("SHA256WithRSA"); + signature.initSign(privateKey); + signature.update(signBody.toString().getBytes(StandardCharsets.UTF_8)); + return Base64.getEncoder().encodeToString(signature.sign()); + } catch (Exception e) { + log.error("签名异常",e); + throw new ServiceException("签名异常"); + } + } +} + diff --git a/admin/src/main/java/cn/unizk/utils/SecurityUtils.java b/admin/src/main/java/cn/unizk/utils/SecurityUtils.java new file mode 100644 index 0000000..12d016d --- /dev/null +++ b/admin/src/main/java/cn/unizk/utils/SecurityUtils.java @@ -0,0 +1,47 @@ +package cn.unizk.utils; + +import cn.unizk.entity.dto.LoginUser; +import cn.unizk.entity.po.SysUser; +import cn.unizk.exception.ServiceException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.util.PatternMatchUtils; + +import java.util.Collection; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2025/8/22 18:57 + * @Version 1.0 + **/ +@Slf4j +public class SecurityUtils { + + public static LoginUser getLoginUser(){ + try { + return (LoginUser) getAuthentication().getPrincipal(); + }catch (Exception e){ + e.printStackTrace(); + log.info("获取用户信息异常"); + } + return null; + } + + public static SysUser getSysUser(){ + LoginUser loginUser = getLoginUser(); + if (Objects.isNull(loginUser)){ + throw new ServiceException(401,"登录已过期"); + } + return loginUser.getSysUser(); + } + + public static Authentication getAuthentication(){ + return SecurityContextHolder.getContext().getAuthentication(); + } +} + diff --git a/admin/src/main/resources/application-dev.yml b/admin/src/main/resources/application-dev.yml new file mode 100644 index 0000000..0b3d21e --- /dev/null +++ b/admin/src/main/resources/application-dev.yml @@ -0,0 +1,88 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + druid: +# url: jdbc:mysql://localhost:3306/uni_ai_doctor?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true +# username: dba1 +# password: 123456 + url: jdbc:mysql://139.9.2.195:3306/uni_ai_doctor?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true + username: unizk + password: Unizk@2025 + + redis: + port: 6379 + host: 139.9.2.195 + username: + password: Unizk@2025.Jkzy + database: 0 + timeout: 5000 + lettuce: + pool: + max-active: 8 + max-idle: 6 + min-idle: 2 + max-wait: -1ms + shutdown-timeout: 360 + + +token: + header: jkzy-auth + expireTime: 60 + +security: + enabled: false + + +minio: + endpoint: http://139.9.2.195:8002 + accessKey: MAldjJY2RlKABa0qZnjU + secretKey: mEO0mUVaEDNdltVKXdQXxBFGKlbe13BxiX12ekgy + username: jkzy + password: jkzy@2025 + nginxHost: + + +xf: + appid: 3fa7b7a0 + long-sound: + keySecret: b44d730380dcfae02313dcea7101efc8 + instant: + host: https://iat-api.xfyun.cn/v2/iat + APISecret: N2Q5Y2NiOTZmNThhODZjYTgxMjg1NjA4 + apiKey: da390c58ef0f2ad8424c3dccc6d458c7 + + +aliyun: + accessKeyId: LTAI5tBQGeqmhe6yhfqupaZD + accessKeySecret: YM2lsEtpjCLOF2kJGdsCBcwRHLX8aa + + +wx: + appid: wx71e559ade446f09a + secret: 00b7f3cff0f4bde07daacd0dea7548c9 + redirectUrl: http://369.peaktcm.com/wx/authCallback + +hf: + huifuId: 6666000179463008 + payApi: https://api.huifu.com/v3/trade/payment/jspay + refundApi: https://api.huifu.com/v3/trade/payment/scanpay/refund + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3IcOEDMBOiHaa5dLsPWVVx+9yE/VEGjRSVZFUAospbCEhGDimE7UEL8ecXwbG9AN5k8yX+Ltj6zaeLIt3KgxbX5/4pnrOoPqFhtaoNuQrwl8/9/rkgGkoksH9e//mRan2+TjbHLKXWZKUduksaoWw4VehOx0nxE+wx7Bk7/VQAegnrDz4z/8zEd2Mcm51THceHJ5wVoMoXvo5e8nhUUAFJeHtlI5jxC85lK6kz2UNhGQ7Kutc7sBzK1U/mi29j/iStN3Z0fzND7+nRfgWPu4b0cKNnNwlIaGiabFTbpVZyV8LTg1BandmHJLNUUJyrc/s3W72VFUdp+BwgoERDcEwwIDAQAB + privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDchw4QMwE6Idprl0uw9ZVXH73IT9UQaNFJVkVQCiylsISEYOKYTtQQvx5xfBsb0A3mTzJf4u2PrNp4si3cqDFtfn/imes6g+oWG1qg25CvCXz/3+uSAaSiSwf17/+ZFqfb5ONscspdZkpR26SxqhbDhV6E7HSfET7DHsGTv9VAB6CesPPjP/zMR3YxybnVMdx4cnnBWgyhe+jl7yeFRQAUl4e2UjmPELzmUrqTPZQ2EZDsq61zuwHMrVT+aLb2P+JK03dnR/M0Pv6dF+BY+7hvRwo2c3CUhoaJpsVNulVnJXwtODUFqd2Ycks1RQnKtz+zdbvZUVR2n4HCCgRENwTDAgMBAAECggEAbFWAaB7WVHt69G3fxi/uzF0Qe04UijojzhYueLJ22nKLtwhtaIsZDJ0G1JM2MgSUP3badVZig7lTngVSGFsb5QFGy8f3Ucip/3AypmEWg5ZyrLSQ4ioieYPIhl3/P3Jsxc58lrMRjK6KhgoTrx+yjRyAoWYTqGztWydJy05q8UekdbIn9K2Dq0294hHbarCjB3C/3SXX4xniEbDtVBTdjP81731gxnM2HJ98GDrvUf5MDrX4SdExvCYV0P0mU8uaRPK8ylWCmtsEuMxKupFUFePJNZdyG+P/RZs6CbgUgJyYUzKlOyeWH8KwQF1FLntipkIPlJ+uVkdwK2eDD6bzWQKBgQDylFiSnlFy0fwXSpWHDnDgukaLYxm2GNWaPyg0f2IqK/368o/Xu4TWOPuknR6ngeiJZz3SVA/kFeCz3+UxtDlbUheoSkkbo0cZg8PaKx875gE97oCHgRkaPS4l44kmu1ZwOMgfZDQPrLZMEbAfjqvMEa7ci5kXk1quOGeSJRIg3QKBgQDoumM2dZ+RxYxtxB2k1kJJIndZX3hhVyMfDIh5TwHHKNml1poa/s+aoT27BZgiM8snLR55xk4cQ59kr9Yic9Oa4seECsrAgP8mbB6eC/y7lRDZDFjJvHXl6a1ePo+hBlYarL83AUMIE1/SfZrdyM5yRmp3+cwHkKVpAQuiEXOSHwKBgEDkpn0ylR9eRU4FydKDbnbv3gdTz4EDS8EjvCGvIheeBSeo1AomQ/b673auAZFWE1sOn18w1b9yitYTw0B0shNX9rQyizQ1jcOpmC848fYYJaTntMKLKqf2Te4c3Ifb/devmPms2LCIx4u5/5+xjwvcfybIwX+pD80jkbFq8VqRAoGBAKulTKdN+XK6EOikTHjWzezCzuPL1i105yJvS/isnNMW/e+iZ+ahKN0TL0RQy/Pt31f1nxSRfeq6tUS9q2Gdq+QAfsaUbxWsDoN4GtzWWoC/YL20rYecyBfaUVPBMI3C7p6d6inXdGjwYSwOF7qb8Ce4Z641PpYVyOm5K6tM08BhAoGBALNkfH3ZPImRKN19bGcHAtrzoDMFAAQrhjyMr9aUpMGLoAjxh1U2pYbj1y0e03ArUT/TRzOXNbHuST82tDZEarVSF8RmU8DNUAHSI9dmtXPtgeKpG8TNyP5q3VnJEHdSRZVLb5pGfZuo3tegsHwZF/oCGK+GHD/fhmSFB04GPJon + notifyUrl: https://peaktcm.com/applet/huifuPay/callback + productId: EDUSTD + configureAppletCallbackUrl: https://peaktcm.com/applet/huifuPay/configureAppletCallback + + +huifu-vendor: + sysId: 6666000188069628 + huifuId: 6666000188735389 + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0uJDRMFj1xoQCJbReVaNdiqjL9vdKolMzWKe2vMhZwkBlgQMpaqtHqNKNCn3DPL/7ugPUNzj4PLr3PSR4DK+TBOOa3xRuKLt3s2x6wouVNpiRRglUzh5OgciXXYPPl7QGu2YlJZ9F7ikiaD7KG9PJI7oidbA7lQ4qMcIGlSBUF4l3TeoOpad0zLs41IRJJPIMKPf5Jj9HS/1Tggcn7f36h1l4JWpTRyfB8HyF66IHzA3mQa5yskUHf1LLuO0hxtIfy9Ua+xJYqEWD334xaMzauZQsLM98d1Pj7I1YRvzNohabpCJqO1wF6PDB3rqdLarAZagN/JhYIHHGXMBGfQZxwIDAQAB + privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDS4kNEwWPXGhAIltF5Vo12KqMv290qiUzNYp7a8yFnCQGWBAylqq0eo0o0KfcM8v/u6A9Q3OPg8uvc9JHgMr5ME45rfFG4ou3ezbHrCi5U2mJFGCVTOHk6ByJddg8+XtAa7ZiUln0XuKSJoPsob08kjuiJ1sDuVDioxwgaVIFQXiXdN6g6lp3TMuzjUhEkk8gwo9/kmP0dL/VOCByft/fqHWXglalNHJ8HwfIXrogfMDeZBrnKyRQd/Usu47SHG0h/L1Rr7ElioRYPffjFozNq5lCwsz3x3U+PsjVhG/M2iFpukImo7XAXo8MHeup0tqsBlqA38mFggccZcwEZ9BnHAgMBAAECggEABRZaQxVbQDwruNlSklfJL9mVeDkYm8cWKDpB1MxauO6ZsDHG0FROutd7mciNYi2WiP/mJrA9exbBI+JuhncS6ijqnaMxIYAktuRFb4MeXQOrrTkI5XoOSp0Tcie/9GQ7JvsmXCdJO0JEDeHpTS9qPFqKN5ELtHQprcCnbGMvf23KyqOFx71Sbe4JxDqV4j0MeJJ/ZEOnLHJAhJ/o/0Gw+2cAVBxOq/xDTiSzKQaR4Cy7h3HMlDXnBXlAwKLb7x/F6efFyBv3RGZjtTgt8G7319icRJUHyXa3JPk/UbKTHrZ3saCj0ByAPpCwSVx6uNxhVeEOFqi3VwtV8s4ClAJtUQKBgQDwEGA1Shr2klTnM1VN+R3YkgaG8QtkZQQG77vCR1q3uMPKpWUQOi/2wQs3SbTAr7ZX+8CHNb8M3KGVAEFR2PDEFok/LA0snFTwdL6dLkXkmOxmNyR2wmXIUimMBogQIc4bI11EpPoocbrzuJ3q48fDIAr7Hc4d/0HasEAQHvAdfwKBgQDg4gCr5M7atD4XdKqmNs5kltjw36EeSig2cajfQb7aARmHS+1F9cn1cpgTvqMBHxBZBx5cW1ETLTxDEq8/ONHHAtmgCVgrc0lgch+Dph1Nt4Jl/aNxxaZjLpLQtcHnFR4/7RGuJMUTAzAUcOer9XiCJskE2EVLrT53pE665Se3uQKBgFcXmc+7cszBicvW87u2BP3s/DE4gcmKXEun7ZYuDNtaTK3YEzIv6fa7UjZcpxbAqIaC7vYeqZEg+f30eb4X1kFNa71fXegxTx9tOzoK75BfamQq3S+4lvR12lzSgcpYeU2fJtcggyDpIcoJ0EDHIlHH7jPsPDrlwB52ksdGchZBAoGBAM49dvAuf6cD9o38aSTWzqJh1cPS1Ci7SfXkd0OJQEcfCxKSB6FJsVZxKhexljzJCG0dojKBbPFxYvsAf8gzi/BAJOYoq7vtlzXkdBKAng9QZT60Rtlosxfy9qKCjronG/70pGpZPoQZQFb+1PlXvpVejKzsy2CEGe4PukSdNLfBAoGATUJ7FGVmG2Ym8UHcP0bMeWwS7XROuiquliLtamWwpZTByZaLO1nK2FtC1oVj3il4Wox6/In1bBbdtqxmRmKcD9q1JExr1PHxXQTUbIoWb4GXNHq7h5kOhpra1uVRmNIewfJUYTCEzzHTrJe8dADBc7lGpsibwk174YD2343Aupw= + productId: PAYUN + notifyUrl: https://peaktcm.com/hf/webhook/vendorPaySuccess + refundApi: https://api.huifu.com/v3/trade/payment/scanpay/refund + +huaweiyun: + accessKey: HPUACMRQ2NKQNOXNCFNO + secretKey: KC3yEw7ARoL0oxcmXy7vE3hyMBPKjLsG1LCSQdYh diff --git a/admin/src/main/resources/application-prod.yml b/admin/src/main/resources/application-prod.yml new file mode 100644 index 0000000..79c3f6a --- /dev/null +++ b/admin/src/main/resources/application-prod.yml @@ -0,0 +1,84 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + druid: + url: jdbc:mysql://localhost:3306/uni_ai_doctor?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true + username: unizk + password: Unizk@2025 + + redis: + port: 6379 + host: localhost + username: + password: Unizk@2025.Jkzy + database: 0 + timeout: 5000 + lettuce: + pool: + max-active: 8 + max-idle: 6 + min-idle: 2 + max-wait: -1ms + shutdown-timeout: 360 + + +token: + header: jkzy-auth + expireTime: 90 + +security: + enabled: true + + +minio: + endpoint: http://localhost:8002 + accessKey: YIh5PhIEHXEiJgPTlCSc + secretKey: 07becv7RNMI1wHyPPFtq3rlCPC6cyF0WrV5LNHYN + username: jkzy + password: jkzy@2025 + nginxHost: + + +xf: + appid: 3fa7b7a0 + long-sound: + keySecret: b44d730380dcfae02313dcea7101efc8 + instant: + host: https://iat-api.xfyun.cn/v2/iat + APISecret: N2Q5Y2NiOTZmNThhODZjYTgxMjg1NjA4 + apiKey: da390c58ef0f2ad8424c3dccc6d458c7 + + +aliyun: + accessKeyId: LTAI5tBQGeqmhe6yhfqupaZD + accessKeySecret: YM2lsEtpjCLOF2kJGdsCBcwRHLX8aa + +wx: + appid: wx71e559ade446f09a + secret: 00b7f3cff0f4bde07daacd0dea7548c9 + redirectUrl: http://369.peaktcm.com/wx/authCallback + +hf: + huifuId: 6666000179463008 + payApi: https://api.huifu.com/v3/trade/payment/jspay + refundApi: https://api.huifu.com/v3/trade/payment/scanpay/refund + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3IcOEDMBOiHaa5dLsPWVVx+9yE/VEGjRSVZFUAospbCEhGDimE7UEL8ecXwbG9AN5k8yX+Ltj6zaeLIt3KgxbX5/4pnrOoPqFhtaoNuQrwl8/9/rkgGkoksH9e//mRan2+TjbHLKXWZKUduksaoWw4VehOx0nxE+wx7Bk7/VQAegnrDz4z/8zEd2Mcm51THceHJ5wVoMoXvo5e8nhUUAFJeHtlI5jxC85lK6kz2UNhGQ7Kutc7sBzK1U/mi29j/iStN3Z0fzND7+nRfgWPu4b0cKNnNwlIaGiabFTbpVZyV8LTg1BandmHJLNUUJyrc/s3W72VFUdp+BwgoERDcEwwIDAQAB + privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDchw4QMwE6Idprl0uw9ZVXH73IT9UQaNFJVkVQCiylsISEYOKYTtQQvx5xfBsb0A3mTzJf4u2PrNp4si3cqDFtfn/imes6g+oWG1qg25CvCXz/3+uSAaSiSwf17/+ZFqfb5ONscspdZkpR26SxqhbDhV6E7HSfET7DHsGTv9VAB6CesPPjP/zMR3YxybnVMdx4cnnBWgyhe+jl7yeFRQAUl4e2UjmPELzmUrqTPZQ2EZDsq61zuwHMrVT+aLb2P+JK03dnR/M0Pv6dF+BY+7hvRwo2c3CUhoaJpsVNulVnJXwtODUFqd2Ycks1RQnKtz+zdbvZUVR2n4HCCgRENwTDAgMBAAECggEAbFWAaB7WVHt69G3fxi/uzF0Qe04UijojzhYueLJ22nKLtwhtaIsZDJ0G1JM2MgSUP3badVZig7lTngVSGFsb5QFGy8f3Ucip/3AypmEWg5ZyrLSQ4ioieYPIhl3/P3Jsxc58lrMRjK6KhgoTrx+yjRyAoWYTqGztWydJy05q8UekdbIn9K2Dq0294hHbarCjB3C/3SXX4xniEbDtVBTdjP81731gxnM2HJ98GDrvUf5MDrX4SdExvCYV0P0mU8uaRPK8ylWCmtsEuMxKupFUFePJNZdyG+P/RZs6CbgUgJyYUzKlOyeWH8KwQF1FLntipkIPlJ+uVkdwK2eDD6bzWQKBgQDylFiSnlFy0fwXSpWHDnDgukaLYxm2GNWaPyg0f2IqK/368o/Xu4TWOPuknR6ngeiJZz3SVA/kFeCz3+UxtDlbUheoSkkbo0cZg8PaKx875gE97oCHgRkaPS4l44kmu1ZwOMgfZDQPrLZMEbAfjqvMEa7ci5kXk1quOGeSJRIg3QKBgQDoumM2dZ+RxYxtxB2k1kJJIndZX3hhVyMfDIh5TwHHKNml1poa/s+aoT27BZgiM8snLR55xk4cQ59kr9Yic9Oa4seECsrAgP8mbB6eC/y7lRDZDFjJvHXl6a1ePo+hBlYarL83AUMIE1/SfZrdyM5yRmp3+cwHkKVpAQuiEXOSHwKBgEDkpn0ylR9eRU4FydKDbnbv3gdTz4EDS8EjvCGvIheeBSeo1AomQ/b673auAZFWE1sOn18w1b9yitYTw0B0shNX9rQyizQ1jcOpmC848fYYJaTntMKLKqf2Te4c3Ifb/devmPms2LCIx4u5/5+xjwvcfybIwX+pD80jkbFq8VqRAoGBAKulTKdN+XK6EOikTHjWzezCzuPL1i105yJvS/isnNMW/e+iZ+ahKN0TL0RQy/Pt31f1nxSRfeq6tUS9q2Gdq+QAfsaUbxWsDoN4GtzWWoC/YL20rYecyBfaUVPBMI3C7p6d6inXdGjwYSwOF7qb8Ce4Z641PpYVyOm5K6tM08BhAoGBALNkfH3ZPImRKN19bGcHAtrzoDMFAAQrhjyMr9aUpMGLoAjxh1U2pYbj1y0e03ArUT/TRzOXNbHuST82tDZEarVSF8RmU8DNUAHSI9dmtXPtgeKpG8TNyP5q3VnJEHdSRZVLb5pGfZuo3tegsHwZF/oCGK+GHD/fhmSFB04GPJon + notifyUrl: https://peaktcm.com/applet/huifuPay/callback + productId: EDUSTD + configureAppletCallbackUrl: https://peaktcm.com/applet/huifuPay/configureAppletCallback + + +huifu-vendor: + sysId: 6666000188069628 + huifuId: 6666000188735389 + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0uJDRMFj1xoQCJbReVaNdiqjL9vdKolMzWKe2vMhZwkBlgQMpaqtHqNKNCn3DPL/7ugPUNzj4PLr3PSR4DK+TBOOa3xRuKLt3s2x6wouVNpiRRglUzh5OgciXXYPPl7QGu2YlJZ9F7ikiaD7KG9PJI7oidbA7lQ4qMcIGlSBUF4l3TeoOpad0zLs41IRJJPIMKPf5Jj9HS/1Tggcn7f36h1l4JWpTRyfB8HyF66IHzA3mQa5yskUHf1LLuO0hxtIfy9Ua+xJYqEWD334xaMzauZQsLM98d1Pj7I1YRvzNohabpCJqO1wF6PDB3rqdLarAZagN/JhYIHHGXMBGfQZxwIDAQAB + privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDS4kNEwWPXGhAIltF5Vo12KqMv290qiUzNYp7a8yFnCQGWBAylqq0eo0o0KfcM8v/u6A9Q3OPg8uvc9JHgMr5ME45rfFG4ou3ezbHrCi5U2mJFGCVTOHk6ByJddg8+XtAa7ZiUln0XuKSJoPsob08kjuiJ1sDuVDioxwgaVIFQXiXdN6g6lp3TMuzjUhEkk8gwo9/kmP0dL/VOCByft/fqHWXglalNHJ8HwfIXrogfMDeZBrnKyRQd/Usu47SHG0h/L1Rr7ElioRYPffjFozNq5lCwsz3x3U+PsjVhG/M2iFpukImo7XAXo8MHeup0tqsBlqA38mFggccZcwEZ9BnHAgMBAAECggEABRZaQxVbQDwruNlSklfJL9mVeDkYm8cWKDpB1MxauO6ZsDHG0FROutd7mciNYi2WiP/mJrA9exbBI+JuhncS6ijqnaMxIYAktuRFb4MeXQOrrTkI5XoOSp0Tcie/9GQ7JvsmXCdJO0JEDeHpTS9qPFqKN5ELtHQprcCnbGMvf23KyqOFx71Sbe4JxDqV4j0MeJJ/ZEOnLHJAhJ/o/0Gw+2cAVBxOq/xDTiSzKQaR4Cy7h3HMlDXnBXlAwKLb7x/F6efFyBv3RGZjtTgt8G7319icRJUHyXa3JPk/UbKTHrZ3saCj0ByAPpCwSVx6uNxhVeEOFqi3VwtV8s4ClAJtUQKBgQDwEGA1Shr2klTnM1VN+R3YkgaG8QtkZQQG77vCR1q3uMPKpWUQOi/2wQs3SbTAr7ZX+8CHNb8M3KGVAEFR2PDEFok/LA0snFTwdL6dLkXkmOxmNyR2wmXIUimMBogQIc4bI11EpPoocbrzuJ3q48fDIAr7Hc4d/0HasEAQHvAdfwKBgQDg4gCr5M7atD4XdKqmNs5kltjw36EeSig2cajfQb7aARmHS+1F9cn1cpgTvqMBHxBZBx5cW1ETLTxDEq8/ONHHAtmgCVgrc0lgch+Dph1Nt4Jl/aNxxaZjLpLQtcHnFR4/7RGuJMUTAzAUcOer9XiCJskE2EVLrT53pE665Se3uQKBgFcXmc+7cszBicvW87u2BP3s/DE4gcmKXEun7ZYuDNtaTK3YEzIv6fa7UjZcpxbAqIaC7vYeqZEg+f30eb4X1kFNa71fXegxTx9tOzoK75BfamQq3S+4lvR12lzSgcpYeU2fJtcggyDpIcoJ0EDHIlHH7jPsPDrlwB52ksdGchZBAoGBAM49dvAuf6cD9o38aSTWzqJh1cPS1Ci7SfXkd0OJQEcfCxKSB6FJsVZxKhexljzJCG0dojKBbPFxYvsAf8gzi/BAJOYoq7vtlzXkdBKAng9QZT60Rtlosxfy9qKCjronG/70pGpZPoQZQFb+1PlXvpVejKzsy2CEGe4PukSdNLfBAoGATUJ7FGVmG2Ym8UHcP0bMeWwS7XROuiquliLtamWwpZTByZaLO1nK2FtC1oVj3il4Wox6/In1bBbdtqxmRmKcD9q1JExr1PHxXQTUbIoWb4GXNHq7h5kOhpra1uVRmNIewfJUYTCEzzHTrJe8dADBc7lGpsibwk174YD2343Aupw= + productId: PAYUN + notifyUrl: https://peaktcm.com/hf/webhook/vendorPaySuccess + refundApi: https://api.huifu.com/v3/trade/payment/scanpay/refund + +huaweiyun: + accessKey: HPUACMRQ2NKQNOXNCFNO + secretKey: KC3yEw7ARoL0oxcmXy7vE3hyMBPKjLsG1LCSQdYh diff --git a/admin/src/main/resources/application.yml b/admin/src/main/resources/application.yml new file mode 100644 index 0000000..b39802c --- /dev/null +++ b/admin/src/main/resources/application.yml @@ -0,0 +1,36 @@ +spring: + application: + name: unizk-admin + profiles: + active: dev + servlet: + multipart: + enabled: true + max-file-size: 500MB + max-request-size: 1000MB + +server: + port: 8082 + tomcat: + max-swallow-size: 1000MB + connection-timeout: 600000 + max-keep-alive-requests: 600000 + max-connections: 600000 + + servlet: + session: + timeout: 30m + + + +logging: + level: + cn.unizk.mapper: debug + org.springframework: warn + org.apache.ibatis.logging: debug + org.springframework.integration: INFO + # org.springframework.web.servlet.DispatcherServlet: DEBUG + +mybatis-plus: + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl diff --git a/admin/src/main/resources/logback-spring.xml b/admin/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..b5d93a3 --- /dev/null +++ b/admin/src/main/resources/logback-spring.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + ${LOG_FILE} + + ${LOG_PATH}/admin.%d{yyyy-MM-dd}.%i.log + 30MB + 30 + 3GB + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/admin/src/main/resources/mapper/DeviceMapper.xml b/admin/src/main/resources/mapper/DeviceMapper.xml new file mode 100644 index 0000000..488123e --- /dev/null +++ b/admin/src/main/resources/mapper/DeviceMapper.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + update device set status = #{status} where device_id = #{deviceId} + + + + update device set surplus = surplus - 1 where payment_method = 1 and surplus > 0 + + + + + + + + + + + update device set operating_status = 2 where last_run_time < DATE_SUB(NOW(), INTERVAL 1 MINUTE ) and operating_status not in(1,2); + + + + update device set free_count = free_count -1 where free_count > 0 and last_run_time < DATE_SUB(NOW(), INTERVAL 1 MINUTE ) and operating_status not in(1,2); + + + + UPDATE user + SET treat_status = 0 + WHERE create_time < NOW() - INTERVAL 30 MINUTE; + + + + + update device set cf = #{dv.cf},wm = #{dv.wm},hw = #{dv.hw},sw = #{dv.sw},iccid = #{dv.iccid} ,cr = #{dv.cr}, + operating_status = #{dv.operatingStatus},last_run_time = #{dv.lastRunTime} + where device_id = #{dv.deviceId} + + + + update device set device_id = #{ndeviceId} where device_id = #{odeviceId} + + + diff --git a/admin/src/main/resources/mapper/MenuMapper.xml b/admin/src/main/resources/mapper/MenuMapper.xml new file mode 100644 index 0000000..002f6a6 --- /dev/null +++ b/admin/src/main/resources/mapper/MenuMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/admin/src/main/resources/mapper/ProductMapper.xml b/admin/src/main/resources/mapper/ProductMapper.xml new file mode 100644 index 0000000..a6aee40 --- /dev/null +++ b/admin/src/main/resources/mapper/ProductMapper.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/admin/src/main/resources/mapper/WxOrderItemMapper.xml b/admin/src/main/resources/mapper/WxOrderItemMapper.xml new file mode 100644 index 0000000..d55c352 --- /dev/null +++ b/admin/src/main/resources/mapper/WxOrderItemMapper.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/admin/src/main/resources/mapper/WxUserMapper.xml b/admin/src/main/resources/mapper/WxUserMapper.xml new file mode 100644 index 0000000..48b18c3 --- /dev/null +++ b/admin/src/main/resources/mapper/WxUserMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/admin/src/main/resources/mapper/XunfuAccountMapper.xml b/admin/src/main/resources/mapper/XunfuAccountMapper.xml new file mode 100644 index 0000000..587cff5 --- /dev/null +++ b/admin/src/main/resources/mapper/XunfuAccountMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/admin/src/main/resources/mapper/YnzkSystemDeviceMapper.xml b/admin/src/main/resources/mapper/YnzkSystemDeviceMapper.xml new file mode 100644 index 0000000..79681bd --- /dev/null +++ b/admin/src/main/resources/mapper/YnzkSystemDeviceMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/admin/target/admin-1.0.0.jar b/admin/target/admin-1.0.0.jar new file mode 100644 index 0000000..2311ee7 Binary files /dev/null and b/admin/target/admin-1.0.0.jar differ diff --git a/admin/target/admin-1.0.0.jar.original b/admin/target/admin-1.0.0.jar.original new file mode 100644 index 0000000..f814b0f Binary files /dev/null and b/admin/target/admin-1.0.0.jar.original differ diff --git a/admin/target/classes/application-dev.yml b/admin/target/classes/application-dev.yml new file mode 100644 index 0000000..0b3d21e --- /dev/null +++ b/admin/target/classes/application-dev.yml @@ -0,0 +1,88 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + druid: +# url: jdbc:mysql://localhost:3306/uni_ai_doctor?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true +# username: dba1 +# password: 123456 + url: jdbc:mysql://139.9.2.195:3306/uni_ai_doctor?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true + username: unizk + password: Unizk@2025 + + redis: + port: 6379 + host: 139.9.2.195 + username: + password: Unizk@2025.Jkzy + database: 0 + timeout: 5000 + lettuce: + pool: + max-active: 8 + max-idle: 6 + min-idle: 2 + max-wait: -1ms + shutdown-timeout: 360 + + +token: + header: jkzy-auth + expireTime: 60 + +security: + enabled: false + + +minio: + endpoint: http://139.9.2.195:8002 + accessKey: MAldjJY2RlKABa0qZnjU + secretKey: mEO0mUVaEDNdltVKXdQXxBFGKlbe13BxiX12ekgy + username: jkzy + password: jkzy@2025 + nginxHost: + + +xf: + appid: 3fa7b7a0 + long-sound: + keySecret: b44d730380dcfae02313dcea7101efc8 + instant: + host: https://iat-api.xfyun.cn/v2/iat + APISecret: N2Q5Y2NiOTZmNThhODZjYTgxMjg1NjA4 + apiKey: da390c58ef0f2ad8424c3dccc6d458c7 + + +aliyun: + accessKeyId: LTAI5tBQGeqmhe6yhfqupaZD + accessKeySecret: YM2lsEtpjCLOF2kJGdsCBcwRHLX8aa + + +wx: + appid: wx71e559ade446f09a + secret: 00b7f3cff0f4bde07daacd0dea7548c9 + redirectUrl: http://369.peaktcm.com/wx/authCallback + +hf: + huifuId: 6666000179463008 + payApi: https://api.huifu.com/v3/trade/payment/jspay + refundApi: https://api.huifu.com/v3/trade/payment/scanpay/refund + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3IcOEDMBOiHaa5dLsPWVVx+9yE/VEGjRSVZFUAospbCEhGDimE7UEL8ecXwbG9AN5k8yX+Ltj6zaeLIt3KgxbX5/4pnrOoPqFhtaoNuQrwl8/9/rkgGkoksH9e//mRan2+TjbHLKXWZKUduksaoWw4VehOx0nxE+wx7Bk7/VQAegnrDz4z/8zEd2Mcm51THceHJ5wVoMoXvo5e8nhUUAFJeHtlI5jxC85lK6kz2UNhGQ7Kutc7sBzK1U/mi29j/iStN3Z0fzND7+nRfgWPu4b0cKNnNwlIaGiabFTbpVZyV8LTg1BandmHJLNUUJyrc/s3W72VFUdp+BwgoERDcEwwIDAQAB + privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDchw4QMwE6Idprl0uw9ZVXH73IT9UQaNFJVkVQCiylsISEYOKYTtQQvx5xfBsb0A3mTzJf4u2PrNp4si3cqDFtfn/imes6g+oWG1qg25CvCXz/3+uSAaSiSwf17/+ZFqfb5ONscspdZkpR26SxqhbDhV6E7HSfET7DHsGTv9VAB6CesPPjP/zMR3YxybnVMdx4cnnBWgyhe+jl7yeFRQAUl4e2UjmPELzmUrqTPZQ2EZDsq61zuwHMrVT+aLb2P+JK03dnR/M0Pv6dF+BY+7hvRwo2c3CUhoaJpsVNulVnJXwtODUFqd2Ycks1RQnKtz+zdbvZUVR2n4HCCgRENwTDAgMBAAECggEAbFWAaB7WVHt69G3fxi/uzF0Qe04UijojzhYueLJ22nKLtwhtaIsZDJ0G1JM2MgSUP3badVZig7lTngVSGFsb5QFGy8f3Ucip/3AypmEWg5ZyrLSQ4ioieYPIhl3/P3Jsxc58lrMRjK6KhgoTrx+yjRyAoWYTqGztWydJy05q8UekdbIn9K2Dq0294hHbarCjB3C/3SXX4xniEbDtVBTdjP81731gxnM2HJ98GDrvUf5MDrX4SdExvCYV0P0mU8uaRPK8ylWCmtsEuMxKupFUFePJNZdyG+P/RZs6CbgUgJyYUzKlOyeWH8KwQF1FLntipkIPlJ+uVkdwK2eDD6bzWQKBgQDylFiSnlFy0fwXSpWHDnDgukaLYxm2GNWaPyg0f2IqK/368o/Xu4TWOPuknR6ngeiJZz3SVA/kFeCz3+UxtDlbUheoSkkbo0cZg8PaKx875gE97oCHgRkaPS4l44kmu1ZwOMgfZDQPrLZMEbAfjqvMEa7ci5kXk1quOGeSJRIg3QKBgQDoumM2dZ+RxYxtxB2k1kJJIndZX3hhVyMfDIh5TwHHKNml1poa/s+aoT27BZgiM8snLR55xk4cQ59kr9Yic9Oa4seECsrAgP8mbB6eC/y7lRDZDFjJvHXl6a1ePo+hBlYarL83AUMIE1/SfZrdyM5yRmp3+cwHkKVpAQuiEXOSHwKBgEDkpn0ylR9eRU4FydKDbnbv3gdTz4EDS8EjvCGvIheeBSeo1AomQ/b673auAZFWE1sOn18w1b9yitYTw0B0shNX9rQyizQ1jcOpmC848fYYJaTntMKLKqf2Te4c3Ifb/devmPms2LCIx4u5/5+xjwvcfybIwX+pD80jkbFq8VqRAoGBAKulTKdN+XK6EOikTHjWzezCzuPL1i105yJvS/isnNMW/e+iZ+ahKN0TL0RQy/Pt31f1nxSRfeq6tUS9q2Gdq+QAfsaUbxWsDoN4GtzWWoC/YL20rYecyBfaUVPBMI3C7p6d6inXdGjwYSwOF7qb8Ce4Z641PpYVyOm5K6tM08BhAoGBALNkfH3ZPImRKN19bGcHAtrzoDMFAAQrhjyMr9aUpMGLoAjxh1U2pYbj1y0e03ArUT/TRzOXNbHuST82tDZEarVSF8RmU8DNUAHSI9dmtXPtgeKpG8TNyP5q3VnJEHdSRZVLb5pGfZuo3tegsHwZF/oCGK+GHD/fhmSFB04GPJon + notifyUrl: https://peaktcm.com/applet/huifuPay/callback + productId: EDUSTD + configureAppletCallbackUrl: https://peaktcm.com/applet/huifuPay/configureAppletCallback + + +huifu-vendor: + sysId: 6666000188069628 + huifuId: 6666000188735389 + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0uJDRMFj1xoQCJbReVaNdiqjL9vdKolMzWKe2vMhZwkBlgQMpaqtHqNKNCn3DPL/7ugPUNzj4PLr3PSR4DK+TBOOa3xRuKLt3s2x6wouVNpiRRglUzh5OgciXXYPPl7QGu2YlJZ9F7ikiaD7KG9PJI7oidbA7lQ4qMcIGlSBUF4l3TeoOpad0zLs41IRJJPIMKPf5Jj9HS/1Tggcn7f36h1l4JWpTRyfB8HyF66IHzA3mQa5yskUHf1LLuO0hxtIfy9Ua+xJYqEWD334xaMzauZQsLM98d1Pj7I1YRvzNohabpCJqO1wF6PDB3rqdLarAZagN/JhYIHHGXMBGfQZxwIDAQAB + privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDS4kNEwWPXGhAIltF5Vo12KqMv290qiUzNYp7a8yFnCQGWBAylqq0eo0o0KfcM8v/u6A9Q3OPg8uvc9JHgMr5ME45rfFG4ou3ezbHrCi5U2mJFGCVTOHk6ByJddg8+XtAa7ZiUln0XuKSJoPsob08kjuiJ1sDuVDioxwgaVIFQXiXdN6g6lp3TMuzjUhEkk8gwo9/kmP0dL/VOCByft/fqHWXglalNHJ8HwfIXrogfMDeZBrnKyRQd/Usu47SHG0h/L1Rr7ElioRYPffjFozNq5lCwsz3x3U+PsjVhG/M2iFpukImo7XAXo8MHeup0tqsBlqA38mFggccZcwEZ9BnHAgMBAAECggEABRZaQxVbQDwruNlSklfJL9mVeDkYm8cWKDpB1MxauO6ZsDHG0FROutd7mciNYi2WiP/mJrA9exbBI+JuhncS6ijqnaMxIYAktuRFb4MeXQOrrTkI5XoOSp0Tcie/9GQ7JvsmXCdJO0JEDeHpTS9qPFqKN5ELtHQprcCnbGMvf23KyqOFx71Sbe4JxDqV4j0MeJJ/ZEOnLHJAhJ/o/0Gw+2cAVBxOq/xDTiSzKQaR4Cy7h3HMlDXnBXlAwKLb7x/F6efFyBv3RGZjtTgt8G7319icRJUHyXa3JPk/UbKTHrZ3saCj0ByAPpCwSVx6uNxhVeEOFqi3VwtV8s4ClAJtUQKBgQDwEGA1Shr2klTnM1VN+R3YkgaG8QtkZQQG77vCR1q3uMPKpWUQOi/2wQs3SbTAr7ZX+8CHNb8M3KGVAEFR2PDEFok/LA0snFTwdL6dLkXkmOxmNyR2wmXIUimMBogQIc4bI11EpPoocbrzuJ3q48fDIAr7Hc4d/0HasEAQHvAdfwKBgQDg4gCr5M7atD4XdKqmNs5kltjw36EeSig2cajfQb7aARmHS+1F9cn1cpgTvqMBHxBZBx5cW1ETLTxDEq8/ONHHAtmgCVgrc0lgch+Dph1Nt4Jl/aNxxaZjLpLQtcHnFR4/7RGuJMUTAzAUcOer9XiCJskE2EVLrT53pE665Se3uQKBgFcXmc+7cszBicvW87u2BP3s/DE4gcmKXEun7ZYuDNtaTK3YEzIv6fa7UjZcpxbAqIaC7vYeqZEg+f30eb4X1kFNa71fXegxTx9tOzoK75BfamQq3S+4lvR12lzSgcpYeU2fJtcggyDpIcoJ0EDHIlHH7jPsPDrlwB52ksdGchZBAoGBAM49dvAuf6cD9o38aSTWzqJh1cPS1Ci7SfXkd0OJQEcfCxKSB6FJsVZxKhexljzJCG0dojKBbPFxYvsAf8gzi/BAJOYoq7vtlzXkdBKAng9QZT60Rtlosxfy9qKCjronG/70pGpZPoQZQFb+1PlXvpVejKzsy2CEGe4PukSdNLfBAoGATUJ7FGVmG2Ym8UHcP0bMeWwS7XROuiquliLtamWwpZTByZaLO1nK2FtC1oVj3il4Wox6/In1bBbdtqxmRmKcD9q1JExr1PHxXQTUbIoWb4GXNHq7h5kOhpra1uVRmNIewfJUYTCEzzHTrJe8dADBc7lGpsibwk174YD2343Aupw= + productId: PAYUN + notifyUrl: https://peaktcm.com/hf/webhook/vendorPaySuccess + refundApi: https://api.huifu.com/v3/trade/payment/scanpay/refund + +huaweiyun: + accessKey: HPUACMRQ2NKQNOXNCFNO + secretKey: KC3yEw7ARoL0oxcmXy7vE3hyMBPKjLsG1LCSQdYh diff --git a/admin/target/classes/application-prod.yml b/admin/target/classes/application-prod.yml new file mode 100644 index 0000000..79c3f6a --- /dev/null +++ b/admin/target/classes/application-prod.yml @@ -0,0 +1,84 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + druid: + url: jdbc:mysql://localhost:3306/uni_ai_doctor?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true + username: unizk + password: Unizk@2025 + + redis: + port: 6379 + host: localhost + username: + password: Unizk@2025.Jkzy + database: 0 + timeout: 5000 + lettuce: + pool: + max-active: 8 + max-idle: 6 + min-idle: 2 + max-wait: -1ms + shutdown-timeout: 360 + + +token: + header: jkzy-auth + expireTime: 90 + +security: + enabled: true + + +minio: + endpoint: http://localhost:8002 + accessKey: YIh5PhIEHXEiJgPTlCSc + secretKey: 07becv7RNMI1wHyPPFtq3rlCPC6cyF0WrV5LNHYN + username: jkzy + password: jkzy@2025 + nginxHost: + + +xf: + appid: 3fa7b7a0 + long-sound: + keySecret: b44d730380dcfae02313dcea7101efc8 + instant: + host: https://iat-api.xfyun.cn/v2/iat + APISecret: N2Q5Y2NiOTZmNThhODZjYTgxMjg1NjA4 + apiKey: da390c58ef0f2ad8424c3dccc6d458c7 + + +aliyun: + accessKeyId: LTAI5tBQGeqmhe6yhfqupaZD + accessKeySecret: YM2lsEtpjCLOF2kJGdsCBcwRHLX8aa + +wx: + appid: wx71e559ade446f09a + secret: 00b7f3cff0f4bde07daacd0dea7548c9 + redirectUrl: http://369.peaktcm.com/wx/authCallback + +hf: + huifuId: 6666000179463008 + payApi: https://api.huifu.com/v3/trade/payment/jspay + refundApi: https://api.huifu.com/v3/trade/payment/scanpay/refund + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3IcOEDMBOiHaa5dLsPWVVx+9yE/VEGjRSVZFUAospbCEhGDimE7UEL8ecXwbG9AN5k8yX+Ltj6zaeLIt3KgxbX5/4pnrOoPqFhtaoNuQrwl8/9/rkgGkoksH9e//mRan2+TjbHLKXWZKUduksaoWw4VehOx0nxE+wx7Bk7/VQAegnrDz4z/8zEd2Mcm51THceHJ5wVoMoXvo5e8nhUUAFJeHtlI5jxC85lK6kz2UNhGQ7Kutc7sBzK1U/mi29j/iStN3Z0fzND7+nRfgWPu4b0cKNnNwlIaGiabFTbpVZyV8LTg1BandmHJLNUUJyrc/s3W72VFUdp+BwgoERDcEwwIDAQAB + privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDchw4QMwE6Idprl0uw9ZVXH73IT9UQaNFJVkVQCiylsISEYOKYTtQQvx5xfBsb0A3mTzJf4u2PrNp4si3cqDFtfn/imes6g+oWG1qg25CvCXz/3+uSAaSiSwf17/+ZFqfb5ONscspdZkpR26SxqhbDhV6E7HSfET7DHsGTv9VAB6CesPPjP/zMR3YxybnVMdx4cnnBWgyhe+jl7yeFRQAUl4e2UjmPELzmUrqTPZQ2EZDsq61zuwHMrVT+aLb2P+JK03dnR/M0Pv6dF+BY+7hvRwo2c3CUhoaJpsVNulVnJXwtODUFqd2Ycks1RQnKtz+zdbvZUVR2n4HCCgRENwTDAgMBAAECggEAbFWAaB7WVHt69G3fxi/uzF0Qe04UijojzhYueLJ22nKLtwhtaIsZDJ0G1JM2MgSUP3badVZig7lTngVSGFsb5QFGy8f3Ucip/3AypmEWg5ZyrLSQ4ioieYPIhl3/P3Jsxc58lrMRjK6KhgoTrx+yjRyAoWYTqGztWydJy05q8UekdbIn9K2Dq0294hHbarCjB3C/3SXX4xniEbDtVBTdjP81731gxnM2HJ98GDrvUf5MDrX4SdExvCYV0P0mU8uaRPK8ylWCmtsEuMxKupFUFePJNZdyG+P/RZs6CbgUgJyYUzKlOyeWH8KwQF1FLntipkIPlJ+uVkdwK2eDD6bzWQKBgQDylFiSnlFy0fwXSpWHDnDgukaLYxm2GNWaPyg0f2IqK/368o/Xu4TWOPuknR6ngeiJZz3SVA/kFeCz3+UxtDlbUheoSkkbo0cZg8PaKx875gE97oCHgRkaPS4l44kmu1ZwOMgfZDQPrLZMEbAfjqvMEa7ci5kXk1quOGeSJRIg3QKBgQDoumM2dZ+RxYxtxB2k1kJJIndZX3hhVyMfDIh5TwHHKNml1poa/s+aoT27BZgiM8snLR55xk4cQ59kr9Yic9Oa4seECsrAgP8mbB6eC/y7lRDZDFjJvHXl6a1ePo+hBlYarL83AUMIE1/SfZrdyM5yRmp3+cwHkKVpAQuiEXOSHwKBgEDkpn0ylR9eRU4FydKDbnbv3gdTz4EDS8EjvCGvIheeBSeo1AomQ/b673auAZFWE1sOn18w1b9yitYTw0B0shNX9rQyizQ1jcOpmC848fYYJaTntMKLKqf2Te4c3Ifb/devmPms2LCIx4u5/5+xjwvcfybIwX+pD80jkbFq8VqRAoGBAKulTKdN+XK6EOikTHjWzezCzuPL1i105yJvS/isnNMW/e+iZ+ahKN0TL0RQy/Pt31f1nxSRfeq6tUS9q2Gdq+QAfsaUbxWsDoN4GtzWWoC/YL20rYecyBfaUVPBMI3C7p6d6inXdGjwYSwOF7qb8Ce4Z641PpYVyOm5K6tM08BhAoGBALNkfH3ZPImRKN19bGcHAtrzoDMFAAQrhjyMr9aUpMGLoAjxh1U2pYbj1y0e03ArUT/TRzOXNbHuST82tDZEarVSF8RmU8DNUAHSI9dmtXPtgeKpG8TNyP5q3VnJEHdSRZVLb5pGfZuo3tegsHwZF/oCGK+GHD/fhmSFB04GPJon + notifyUrl: https://peaktcm.com/applet/huifuPay/callback + productId: EDUSTD + configureAppletCallbackUrl: https://peaktcm.com/applet/huifuPay/configureAppletCallback + + +huifu-vendor: + sysId: 6666000188069628 + huifuId: 6666000188735389 + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0uJDRMFj1xoQCJbReVaNdiqjL9vdKolMzWKe2vMhZwkBlgQMpaqtHqNKNCn3DPL/7ugPUNzj4PLr3PSR4DK+TBOOa3xRuKLt3s2x6wouVNpiRRglUzh5OgciXXYPPl7QGu2YlJZ9F7ikiaD7KG9PJI7oidbA7lQ4qMcIGlSBUF4l3TeoOpad0zLs41IRJJPIMKPf5Jj9HS/1Tggcn7f36h1l4JWpTRyfB8HyF66IHzA3mQa5yskUHf1LLuO0hxtIfy9Ua+xJYqEWD334xaMzauZQsLM98d1Pj7I1YRvzNohabpCJqO1wF6PDB3rqdLarAZagN/JhYIHHGXMBGfQZxwIDAQAB + privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDS4kNEwWPXGhAIltF5Vo12KqMv290qiUzNYp7a8yFnCQGWBAylqq0eo0o0KfcM8v/u6A9Q3OPg8uvc9JHgMr5ME45rfFG4ou3ezbHrCi5U2mJFGCVTOHk6ByJddg8+XtAa7ZiUln0XuKSJoPsob08kjuiJ1sDuVDioxwgaVIFQXiXdN6g6lp3TMuzjUhEkk8gwo9/kmP0dL/VOCByft/fqHWXglalNHJ8HwfIXrogfMDeZBrnKyRQd/Usu47SHG0h/L1Rr7ElioRYPffjFozNq5lCwsz3x3U+PsjVhG/M2iFpukImo7XAXo8MHeup0tqsBlqA38mFggccZcwEZ9BnHAgMBAAECggEABRZaQxVbQDwruNlSklfJL9mVeDkYm8cWKDpB1MxauO6ZsDHG0FROutd7mciNYi2WiP/mJrA9exbBI+JuhncS6ijqnaMxIYAktuRFb4MeXQOrrTkI5XoOSp0Tcie/9GQ7JvsmXCdJO0JEDeHpTS9qPFqKN5ELtHQprcCnbGMvf23KyqOFx71Sbe4JxDqV4j0MeJJ/ZEOnLHJAhJ/o/0Gw+2cAVBxOq/xDTiSzKQaR4Cy7h3HMlDXnBXlAwKLb7x/F6efFyBv3RGZjtTgt8G7319icRJUHyXa3JPk/UbKTHrZ3saCj0ByAPpCwSVx6uNxhVeEOFqi3VwtV8s4ClAJtUQKBgQDwEGA1Shr2klTnM1VN+R3YkgaG8QtkZQQG77vCR1q3uMPKpWUQOi/2wQs3SbTAr7ZX+8CHNb8M3KGVAEFR2PDEFok/LA0snFTwdL6dLkXkmOxmNyR2wmXIUimMBogQIc4bI11EpPoocbrzuJ3q48fDIAr7Hc4d/0HasEAQHvAdfwKBgQDg4gCr5M7atD4XdKqmNs5kltjw36EeSig2cajfQb7aARmHS+1F9cn1cpgTvqMBHxBZBx5cW1ETLTxDEq8/ONHHAtmgCVgrc0lgch+Dph1Nt4Jl/aNxxaZjLpLQtcHnFR4/7RGuJMUTAzAUcOer9XiCJskE2EVLrT53pE665Se3uQKBgFcXmc+7cszBicvW87u2BP3s/DE4gcmKXEun7ZYuDNtaTK3YEzIv6fa7UjZcpxbAqIaC7vYeqZEg+f30eb4X1kFNa71fXegxTx9tOzoK75BfamQq3S+4lvR12lzSgcpYeU2fJtcggyDpIcoJ0EDHIlHH7jPsPDrlwB52ksdGchZBAoGBAM49dvAuf6cD9o38aSTWzqJh1cPS1Ci7SfXkd0OJQEcfCxKSB6FJsVZxKhexljzJCG0dojKBbPFxYvsAf8gzi/BAJOYoq7vtlzXkdBKAng9QZT60Rtlosxfy9qKCjronG/70pGpZPoQZQFb+1PlXvpVejKzsy2CEGe4PukSdNLfBAoGATUJ7FGVmG2Ym8UHcP0bMeWwS7XROuiquliLtamWwpZTByZaLO1nK2FtC1oVj3il4Wox6/In1bBbdtqxmRmKcD9q1JExr1PHxXQTUbIoWb4GXNHq7h5kOhpra1uVRmNIewfJUYTCEzzHTrJe8dADBc7lGpsibwk174YD2343Aupw= + productId: PAYUN + notifyUrl: https://peaktcm.com/hf/webhook/vendorPaySuccess + refundApi: https://api.huifu.com/v3/trade/payment/scanpay/refund + +huaweiyun: + accessKey: HPUACMRQ2NKQNOXNCFNO + secretKey: KC3yEw7ARoL0oxcmXy7vE3hyMBPKjLsG1LCSQdYh diff --git a/admin/target/classes/application.yml b/admin/target/classes/application.yml new file mode 100644 index 0000000..b39802c --- /dev/null +++ b/admin/target/classes/application.yml @@ -0,0 +1,36 @@ +spring: + application: + name: unizk-admin + profiles: + active: dev + servlet: + multipart: + enabled: true + max-file-size: 500MB + max-request-size: 1000MB + +server: + port: 8082 + tomcat: + max-swallow-size: 1000MB + connection-timeout: 600000 + max-keep-alive-requests: 600000 + max-connections: 600000 + + servlet: + session: + timeout: 30m + + + +logging: + level: + cn.unizk.mapper: debug + org.springframework: warn + org.apache.ibatis.logging: debug + org.springframework.integration: INFO + # org.springframework.web.servlet.DispatcherServlet: DEBUG + +mybatis-plus: + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl diff --git a/admin/target/classes/cn/unizk/AdminApp.class b/admin/target/classes/cn/unizk/AdminApp.class new file mode 100644 index 0000000..d47e149 Binary files /dev/null and b/admin/target/classes/cn/unizk/AdminApp.class differ diff --git a/admin/target/classes/cn/unizk/annotation/Anonymous.class b/admin/target/classes/cn/unizk/annotation/Anonymous.class new file mode 100644 index 0000000..612ea6a Binary files /dev/null and b/admin/target/classes/cn/unizk/annotation/Anonymous.class differ diff --git a/admin/target/classes/cn/unizk/config/HuiFuVendorProperties.class b/admin/target/classes/cn/unizk/config/HuiFuVendorProperties.class new file mode 100644 index 0000000..b7df97b Binary files /dev/null and b/admin/target/classes/cn/unizk/config/HuiFuVendorProperties.class differ diff --git a/admin/target/classes/cn/unizk/config/ResourcesConfig.class b/admin/target/classes/cn/unizk/config/ResourcesConfig.class new file mode 100644 index 0000000..1779694 Binary files /dev/null and b/admin/target/classes/cn/unizk/config/ResourcesConfig.class differ diff --git a/admin/target/classes/cn/unizk/config/SecurityConfig.class b/admin/target/classes/cn/unizk/config/SecurityConfig.class new file mode 100644 index 0000000..565319c Binary files /dev/null and b/admin/target/classes/cn/unizk/config/SecurityConfig.class differ diff --git a/admin/target/classes/cn/unizk/config/TcpServerDSLConfig.class b/admin/target/classes/cn/unizk/config/TcpServerDSLConfig.class new file mode 100644 index 0000000..0f82f48 Binary files /dev/null and b/admin/target/classes/cn/unizk/config/TcpServerDSLConfig.class differ diff --git a/admin/target/classes/cn/unizk/config/TcpServerDSLConfig2.class b/admin/target/classes/cn/unizk/config/TcpServerDSLConfig2.class new file mode 100644 index 0000000..2794ad0 Binary files /dev/null and b/admin/target/classes/cn/unizk/config/TcpServerDSLConfig2.class differ diff --git a/admin/target/classes/cn/unizk/constants/CacheConstant.class b/admin/target/classes/cn/unizk/constants/CacheConstant.class new file mode 100644 index 0000000..642e199 Binary files /dev/null and b/admin/target/classes/cn/unizk/constants/CacheConstant.class differ diff --git a/admin/target/classes/cn/unizk/constants/Constants.class b/admin/target/classes/cn/unizk/constants/Constants.class new file mode 100644 index 0000000..14a3711 Binary files /dev/null and b/admin/target/classes/cn/unizk/constants/Constants.class differ diff --git a/admin/target/classes/cn/unizk/controller/AdminOrderController.class b/admin/target/classes/cn/unizk/controller/AdminOrderController.class new file mode 100644 index 0000000..ce79b1e Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/AdminOrderController.class differ diff --git a/admin/target/classes/cn/unizk/controller/ChildDeviceController.class b/admin/target/classes/cn/unizk/controller/ChildDeviceController.class new file mode 100644 index 0000000..dd1e682 Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/ChildDeviceController.class differ diff --git a/admin/target/classes/cn/unizk/controller/ChildStoreController.class b/admin/target/classes/cn/unizk/controller/ChildStoreController.class new file mode 100644 index 0000000..56bd3c6 Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/ChildStoreController.class differ diff --git a/admin/target/classes/cn/unizk/controller/H5ComboController.class b/admin/target/classes/cn/unizk/controller/H5ComboController.class new file mode 100644 index 0000000..cdcab52 Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/H5ComboController.class differ diff --git a/admin/target/classes/cn/unizk/controller/HuaWeiYunController.class b/admin/target/classes/cn/unizk/controller/HuaWeiYunController.class new file mode 100644 index 0000000..ec48736 Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/HuaWeiYunController.class differ diff --git a/admin/target/classes/cn/unizk/controller/IsoController.class b/admin/target/classes/cn/unizk/controller/IsoController.class new file mode 100644 index 0000000..758e7b6 Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/IsoController.class differ diff --git a/admin/target/classes/cn/unizk/controller/LoginController.class b/admin/target/classes/cn/unizk/controller/LoginController.class new file mode 100644 index 0000000..f04679a Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/LoginController.class differ diff --git a/admin/target/classes/cn/unizk/controller/MenuController.class b/admin/target/classes/cn/unizk/controller/MenuController.class new file mode 100644 index 0000000..45bf0a8 Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/MenuController.class differ diff --git a/admin/target/classes/cn/unizk/controller/RunningController.class b/admin/target/classes/cn/unizk/controller/RunningController.class new file mode 100644 index 0000000..a0ed1f6 Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/RunningController.class differ diff --git a/admin/target/classes/cn/unizk/controller/SysAppointmentController.class b/admin/target/classes/cn/unizk/controller/SysAppointmentController.class new file mode 100644 index 0000000..835d1a9 Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/SysAppointmentController.class differ diff --git a/admin/target/classes/cn/unizk/controller/SysBusinessChannelController.class b/admin/target/classes/cn/unizk/controller/SysBusinessChannelController.class new file mode 100644 index 0000000..1e18d9a Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/SysBusinessChannelController.class differ diff --git a/admin/target/classes/cn/unizk/controller/SysComboController.class b/admin/target/classes/cn/unizk/controller/SysComboController.class new file mode 100644 index 0000000..fc2d473 Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/SysComboController.class differ diff --git a/admin/target/classes/cn/unizk/controller/SysCourseController.class b/admin/target/classes/cn/unizk/controller/SysCourseController.class new file mode 100644 index 0000000..916617d Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/SysCourseController.class differ diff --git a/admin/target/classes/cn/unizk/controller/SysDeviceController.class b/admin/target/classes/cn/unizk/controller/SysDeviceController.class new file mode 100644 index 0000000..e23cb53 Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/SysDeviceController.class differ diff --git a/admin/target/classes/cn/unizk/controller/SysFileController.class b/admin/target/classes/cn/unizk/controller/SysFileController.class new file mode 100644 index 0000000..78bb1a9 Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/SysFileController.class differ diff --git a/admin/target/classes/cn/unizk/controller/SysPhysioController.class b/admin/target/classes/cn/unizk/controller/SysPhysioController.class new file mode 100644 index 0000000..88fe12b Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/SysPhysioController.class differ diff --git a/admin/target/classes/cn/unizk/controller/SysPhysioPaiBanController.class b/admin/target/classes/cn/unizk/controller/SysPhysioPaiBanController.class new file mode 100644 index 0000000..2268b52 Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/SysPhysioPaiBanController.class differ diff --git a/admin/target/classes/cn/unizk/controller/SysProductController.class b/admin/target/classes/cn/unizk/controller/SysProductController.class new file mode 100644 index 0000000..b84067c Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/SysProductController.class differ diff --git a/admin/target/classes/cn/unizk/controller/SysStoreController.class b/admin/target/classes/cn/unizk/controller/SysStoreController.class new file mode 100644 index 0000000..34058ba Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/SysStoreController.class differ diff --git a/admin/target/classes/cn/unizk/controller/SysUserController.class b/admin/target/classes/cn/unizk/controller/SysUserController.class new file mode 100644 index 0000000..c53a455 Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/SysUserController.class differ diff --git a/admin/target/classes/cn/unizk/controller/UserTreatController.class b/admin/target/classes/cn/unizk/controller/UserTreatController.class new file mode 100644 index 0000000..c9f9b44 Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/UserTreatController.class differ diff --git a/admin/target/classes/cn/unizk/controller/WxAuthLoginController.class b/admin/target/classes/cn/unizk/controller/WxAuthLoginController.class new file mode 100644 index 0000000..07e31ff Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/WxAuthLoginController.class differ diff --git a/admin/target/classes/cn/unizk/controller/WxUserController.class b/admin/target/classes/cn/unizk/controller/WxUserController.class new file mode 100644 index 0000000..a0c3d48 Binary files /dev/null and b/admin/target/classes/cn/unizk/controller/WxUserController.class differ diff --git a/admin/target/classes/cn/unizk/entity/dto/AppointmentDTO.class b/admin/target/classes/cn/unizk/entity/dto/AppointmentDTO.class new file mode 100644 index 0000000..30ca6a3 Binary files /dev/null and b/admin/target/classes/cn/unizk/entity/dto/AppointmentDTO.class differ diff --git a/admin/target/classes/cn/unizk/entity/dto/LoginUser.class b/admin/target/classes/cn/unizk/entity/dto/LoginUser.class new file mode 100644 index 0000000..a03ed0e Binary files /dev/null and b/admin/target/classes/cn/unizk/entity/dto/LoginUser.class differ diff --git a/admin/target/classes/cn/unizk/entity/vo/InStockVO.class b/admin/target/classes/cn/unizk/entity/vo/InStockVO.class new file mode 100644 index 0000000..2e654da Binary files /dev/null and b/admin/target/classes/cn/unizk/entity/vo/InStockVO.class differ diff --git a/admin/target/classes/cn/unizk/entity/vo/PhysioScheduleVO.class b/admin/target/classes/cn/unizk/entity/vo/PhysioScheduleVO.class new file mode 100644 index 0000000..7b558df Binary files /dev/null and b/admin/target/classes/cn/unizk/entity/vo/PhysioScheduleVO.class differ diff --git a/admin/target/classes/cn/unizk/entity/vo/ProductTypeVO.class b/admin/target/classes/cn/unizk/entity/vo/ProductTypeVO.class new file mode 100644 index 0000000..19cc179 Binary files /dev/null and b/admin/target/classes/cn/unizk/entity/vo/ProductTypeVO.class differ diff --git a/admin/target/classes/cn/unizk/entity/vo/SysUserVO.class b/admin/target/classes/cn/unizk/entity/vo/SysUserVO.class new file mode 100644 index 0000000..7bb8e4b Binary files /dev/null and b/admin/target/classes/cn/unizk/entity/vo/SysUserVO.class differ diff --git a/admin/target/classes/cn/unizk/mapper/JkPhysioMapper.class b/admin/target/classes/cn/unizk/mapper/JkPhysioMapper.class new file mode 100644 index 0000000..247a20d Binary files /dev/null and b/admin/target/classes/cn/unizk/mapper/JkPhysioMapper.class differ diff --git a/admin/target/classes/cn/unizk/mapper/JkProductMapper.class b/admin/target/classes/cn/unizk/mapper/JkProductMapper.class new file mode 100644 index 0000000..6f15162 Binary files /dev/null and b/admin/target/classes/cn/unizk/mapper/JkProductMapper.class differ diff --git a/admin/target/classes/cn/unizk/mapper/MenuMapper.class b/admin/target/classes/cn/unizk/mapper/MenuMapper.class new file mode 100644 index 0000000..2cc30a5 Binary files /dev/null and b/admin/target/classes/cn/unizk/mapper/MenuMapper.class differ diff --git a/admin/target/classes/cn/unizk/mapper/ProductCarouselMapper.class b/admin/target/classes/cn/unizk/mapper/ProductCarouselMapper.class new file mode 100644 index 0000000..8edf9d3 Binary files /dev/null and b/admin/target/classes/cn/unizk/mapper/ProductCarouselMapper.class differ diff --git a/admin/target/classes/cn/unizk/mapper/StoreMapper.class b/admin/target/classes/cn/unizk/mapper/StoreMapper.class new file mode 100644 index 0000000..ee4deaa Binary files /dev/null and b/admin/target/classes/cn/unizk/mapper/StoreMapper.class differ diff --git a/admin/target/classes/cn/unizk/mapper/SysDictMapper.class b/admin/target/classes/cn/unizk/mapper/SysDictMapper.class new file mode 100644 index 0000000..913b204 Binary files /dev/null and b/admin/target/classes/cn/unizk/mapper/SysDictMapper.class differ diff --git a/admin/target/classes/cn/unizk/mapper/SysFileMapper.class b/admin/target/classes/cn/unizk/mapper/SysFileMapper.class new file mode 100644 index 0000000..8665174 Binary files /dev/null and b/admin/target/classes/cn/unizk/mapper/SysFileMapper.class differ diff --git a/admin/target/classes/cn/unizk/mapper/SysUserMapper.class b/admin/target/classes/cn/unizk/mapper/SysUserMapper.class new file mode 100644 index 0000000..1a46e04 Binary files /dev/null and b/admin/target/classes/cn/unizk/mapper/SysUserMapper.class differ diff --git a/admin/target/classes/cn/unizk/mapper/UniBaseMapper.class b/admin/target/classes/cn/unizk/mapper/UniBaseMapper.class new file mode 100644 index 0000000..9c465f1 Binary files /dev/null and b/admin/target/classes/cn/unizk/mapper/UniBaseMapper.class differ diff --git a/admin/target/classes/cn/unizk/properties/PermitAllUrlProperties.class b/admin/target/classes/cn/unizk/properties/PermitAllUrlProperties.class new file mode 100644 index 0000000..48c4cac Binary files /dev/null and b/admin/target/classes/cn/unizk/properties/PermitAllUrlProperties.class differ diff --git a/admin/target/classes/cn/unizk/properties/SysWxProperties.class b/admin/target/classes/cn/unizk/properties/SysWxProperties.class new file mode 100644 index 0000000..d6df213 Binary files /dev/null and b/admin/target/classes/cn/unizk/properties/SysWxProperties.class differ diff --git a/admin/target/classes/cn/unizk/security/context/AuthenticationContextHolder.class b/admin/target/classes/cn/unizk/security/context/AuthenticationContextHolder.class new file mode 100644 index 0000000..6989f04 Binary files /dev/null and b/admin/target/classes/cn/unizk/security/context/AuthenticationContextHolder.class differ diff --git a/admin/target/classes/cn/unizk/security/filter/JwtAuthenticationTokenFilter.class b/admin/target/classes/cn/unizk/security/filter/JwtAuthenticationTokenFilter.class new file mode 100644 index 0000000..66040ee Binary files /dev/null and b/admin/target/classes/cn/unizk/security/filter/JwtAuthenticationTokenFilter.class differ diff --git a/admin/target/classes/cn/unizk/security/handler/AuthenticationEntryPointImpl.class b/admin/target/classes/cn/unizk/security/handler/AuthenticationEntryPointImpl.class new file mode 100644 index 0000000..4d6a239 Binary files /dev/null and b/admin/target/classes/cn/unizk/security/handler/AuthenticationEntryPointImpl.class differ diff --git a/admin/target/classes/cn/unizk/security/handler/LogoutSuccessHandlerImpl.class b/admin/target/classes/cn/unizk/security/handler/LogoutSuccessHandlerImpl.class new file mode 100644 index 0000000..faf9a32 Binary files /dev/null and b/admin/target/classes/cn/unizk/security/handler/LogoutSuccessHandlerImpl.class differ diff --git a/admin/target/classes/cn/unizk/security/handler/UserAccessDeniedHandler.class b/admin/target/classes/cn/unizk/security/handler/UserAccessDeniedHandler.class new file mode 100644 index 0000000..f4b5da2 Binary files /dev/null and b/admin/target/classes/cn/unizk/security/handler/UserAccessDeniedHandler.class differ diff --git a/admin/target/classes/cn/unizk/service/BusinessChannelService.class b/admin/target/classes/cn/unizk/service/BusinessChannelService.class new file mode 100644 index 0000000..4d5bc3a Binary files /dev/null and b/admin/target/classes/cn/unizk/service/BusinessChannelService.class differ diff --git a/admin/target/classes/cn/unizk/service/ChildStoreService.class b/admin/target/classes/cn/unizk/service/ChildStoreService.class new file mode 100644 index 0000000..c7394d7 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/ChildStoreService.class differ diff --git a/admin/target/classes/cn/unizk/service/ComboService.class b/admin/target/classes/cn/unizk/service/ComboService.class new file mode 100644 index 0000000..9091e6c Binary files /dev/null and b/admin/target/classes/cn/unizk/service/ComboService.class differ diff --git a/admin/target/classes/cn/unizk/service/DeviceService.class b/admin/target/classes/cn/unizk/service/DeviceService.class new file mode 100644 index 0000000..c287874 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/DeviceService.class differ diff --git a/admin/target/classes/cn/unizk/service/FileService.class b/admin/target/classes/cn/unizk/service/FileService.class new file mode 100644 index 0000000..38a1570 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/FileService.class differ diff --git a/admin/target/classes/cn/unizk/service/GeneratePrService.class b/admin/target/classes/cn/unizk/service/GeneratePrService.class new file mode 100644 index 0000000..c78ea6e Binary files /dev/null and b/admin/target/classes/cn/unizk/service/GeneratePrService.class differ diff --git a/admin/target/classes/cn/unizk/service/LoginService.class b/admin/target/classes/cn/unizk/service/LoginService.class new file mode 100644 index 0000000..441d496 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/LoginService.class differ diff --git a/admin/target/classes/cn/unizk/service/MenuService.class b/admin/target/classes/cn/unizk/service/MenuService.class new file mode 100644 index 0000000..cae793b Binary files /dev/null and b/admin/target/classes/cn/unizk/service/MenuService.class differ diff --git a/admin/target/classes/cn/unizk/service/PasswordService.class b/admin/target/classes/cn/unizk/service/PasswordService.class new file mode 100644 index 0000000..263d06d Binary files /dev/null and b/admin/target/classes/cn/unizk/service/PasswordService.class differ diff --git a/admin/target/classes/cn/unizk/service/PhysioService.class b/admin/target/classes/cn/unizk/service/PhysioService.class new file mode 100644 index 0000000..6127bf2 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/PhysioService.class differ diff --git a/admin/target/classes/cn/unizk/service/ProductCarouselService.class b/admin/target/classes/cn/unizk/service/ProductCarouselService.class new file mode 100644 index 0000000..8fcca16 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/ProductCarouselService.class differ diff --git a/admin/target/classes/cn/unizk/service/ProductService.class b/admin/target/classes/cn/unizk/service/ProductService.class new file mode 100644 index 0000000..00ec519 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/ProductService.class differ diff --git a/admin/target/classes/cn/unizk/service/StoreService.class b/admin/target/classes/cn/unizk/service/StoreService.class new file mode 100644 index 0000000..67a8600 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/StoreService.class differ diff --git a/admin/target/classes/cn/unizk/service/SysDictService.class b/admin/target/classes/cn/unizk/service/SysDictService.class new file mode 100644 index 0000000..13bb002 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/SysDictService.class differ diff --git a/admin/target/classes/cn/unizk/service/SysFileService.class b/admin/target/classes/cn/unizk/service/SysFileService.class new file mode 100644 index 0000000..693bd79 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/SysFileService.class differ diff --git a/admin/target/classes/cn/unizk/service/SysOrderService.class b/admin/target/classes/cn/unizk/service/SysOrderService.class new file mode 100644 index 0000000..fc2908a Binary files /dev/null and b/admin/target/classes/cn/unizk/service/SysOrderService.class differ diff --git a/admin/target/classes/cn/unizk/service/SysUserService.class b/admin/target/classes/cn/unizk/service/SysUserService.class new file mode 100644 index 0000000..5c96ebf Binary files /dev/null and b/admin/target/classes/cn/unizk/service/SysUserService.class differ diff --git a/admin/target/classes/cn/unizk/service/TokenService.class b/admin/target/classes/cn/unizk/service/TokenService.class new file mode 100644 index 0000000..eb21cde Binary files /dev/null and b/admin/target/classes/cn/unizk/service/TokenService.class differ diff --git a/admin/target/classes/cn/unizk/service/UdpClientService.class b/admin/target/classes/cn/unizk/service/UdpClientService.class new file mode 100644 index 0000000..9a3ebc7 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/UdpClientService.class differ diff --git a/admin/target/classes/cn/unizk/service/UdpServerService$DeviceInfo.class b/admin/target/classes/cn/unizk/service/UdpServerService$DeviceInfo.class new file mode 100644 index 0000000..b0b28dd Binary files /dev/null and b/admin/target/classes/cn/unizk/service/UdpServerService$DeviceInfo.class differ diff --git a/admin/target/classes/cn/unizk/service/UdpServerService.class b/admin/target/classes/cn/unizk/service/UdpServerService.class new file mode 100644 index 0000000..381bdb2 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/UdpServerService.class differ diff --git a/admin/target/classes/cn/unizk/service/UdpServerService2$DeviceInfo.class b/admin/target/classes/cn/unizk/service/UdpServerService2$DeviceInfo.class new file mode 100644 index 0000000..a3d73bd Binary files /dev/null and b/admin/target/classes/cn/unizk/service/UdpServerService2$DeviceInfo.class differ diff --git a/admin/target/classes/cn/unizk/service/UdpServerService2.class b/admin/target/classes/cn/unizk/service/UdpServerService2.class new file mode 100644 index 0000000..18fd7ea Binary files /dev/null and b/admin/target/classes/cn/unizk/service/UdpServerService2.class differ diff --git a/admin/target/classes/cn/unizk/service/WxAuthLoginService.class b/admin/target/classes/cn/unizk/service/WxAuthLoginService.class new file mode 100644 index 0000000..a47965f Binary files /dev/null and b/admin/target/classes/cn/unizk/service/WxAuthLoginService.class differ diff --git a/admin/target/classes/cn/unizk/service/impl/BusinessChannelServiceImpl.class b/admin/target/classes/cn/unizk/service/impl/BusinessChannelServiceImpl.class new file mode 100644 index 0000000..c07f616 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/impl/BusinessChannelServiceImpl.class differ diff --git a/admin/target/classes/cn/unizk/service/impl/ComboServiceImpl.class b/admin/target/classes/cn/unizk/service/impl/ComboServiceImpl.class new file mode 100644 index 0000000..bb26d81 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/impl/ComboServiceImpl.class differ diff --git a/admin/target/classes/cn/unizk/service/impl/DeviceServiceImpl.class b/admin/target/classes/cn/unizk/service/impl/DeviceServiceImpl.class new file mode 100644 index 0000000..43f7ae2 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/impl/DeviceServiceImpl.class differ diff --git a/admin/target/classes/cn/unizk/service/impl/LoginServiceImpl.class b/admin/target/classes/cn/unizk/service/impl/LoginServiceImpl.class new file mode 100644 index 0000000..a6786f2 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/impl/LoginServiceImpl.class differ diff --git a/admin/target/classes/cn/unizk/service/impl/MenuServiceImpl.class b/admin/target/classes/cn/unizk/service/impl/MenuServiceImpl.class new file mode 100644 index 0000000..1e825be Binary files /dev/null and b/admin/target/classes/cn/unizk/service/impl/MenuServiceImpl.class differ diff --git a/admin/target/classes/cn/unizk/service/impl/PhysioServiceImpl.class b/admin/target/classes/cn/unizk/service/impl/PhysioServiceImpl.class new file mode 100644 index 0000000..334047d Binary files /dev/null and b/admin/target/classes/cn/unizk/service/impl/PhysioServiceImpl.class differ diff --git a/admin/target/classes/cn/unizk/service/impl/ProductCarouselServiceImpl.class b/admin/target/classes/cn/unizk/service/impl/ProductCarouselServiceImpl.class new file mode 100644 index 0000000..cc893c5 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/impl/ProductCarouselServiceImpl.class differ diff --git a/admin/target/classes/cn/unizk/service/impl/ProductServiceImpl.class b/admin/target/classes/cn/unizk/service/impl/ProductServiceImpl.class new file mode 100644 index 0000000..d0fbc56 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/impl/ProductServiceImpl.class differ diff --git a/admin/target/classes/cn/unizk/service/impl/StoreServiceImpl.class b/admin/target/classes/cn/unizk/service/impl/StoreServiceImpl.class new file mode 100644 index 0000000..bce6a9c Binary files /dev/null and b/admin/target/classes/cn/unizk/service/impl/StoreServiceImpl.class differ diff --git a/admin/target/classes/cn/unizk/service/impl/SysDictServiceImpl.class b/admin/target/classes/cn/unizk/service/impl/SysDictServiceImpl.class new file mode 100644 index 0000000..0f41b2a Binary files /dev/null and b/admin/target/classes/cn/unizk/service/impl/SysDictServiceImpl.class differ diff --git a/admin/target/classes/cn/unizk/service/impl/SysFileServiceImpl.class b/admin/target/classes/cn/unizk/service/impl/SysFileServiceImpl.class new file mode 100644 index 0000000..6897100 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/impl/SysFileServiceImpl.class differ diff --git a/admin/target/classes/cn/unizk/service/impl/SysOrderServiceImpl.class b/admin/target/classes/cn/unizk/service/impl/SysOrderServiceImpl.class new file mode 100644 index 0000000..390c867 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/impl/SysOrderServiceImpl.class differ diff --git a/admin/target/classes/cn/unizk/service/impl/SysUserServiceImpl.class b/admin/target/classes/cn/unizk/service/impl/SysUserServiceImpl.class new file mode 100644 index 0000000..a1f2861 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/impl/SysUserServiceImpl.class differ diff --git a/admin/target/classes/cn/unizk/service/impl/UserDetailsServiceImpl.class b/admin/target/classes/cn/unizk/service/impl/UserDetailsServiceImpl.class new file mode 100644 index 0000000..7754e57 Binary files /dev/null and b/admin/target/classes/cn/unizk/service/impl/UserDetailsServiceImpl.class differ diff --git a/admin/target/classes/cn/unizk/task/DeviceTask.class b/admin/target/classes/cn/unizk/task/DeviceTask.class new file mode 100644 index 0000000..449c4f1 Binary files /dev/null and b/admin/target/classes/cn/unizk/task/DeviceTask.class differ diff --git a/admin/target/classes/cn/unizk/task/PhysioDailySchedulesTask.class b/admin/target/classes/cn/unizk/task/PhysioDailySchedulesTask.class new file mode 100644 index 0000000..e30cacb Binary files /dev/null and b/admin/target/classes/cn/unizk/task/PhysioDailySchedulesTask.class differ diff --git a/admin/target/classes/cn/unizk/task/UserTreatTask.class b/admin/target/classes/cn/unizk/task/UserTreatTask.class new file mode 100644 index 0000000..3848441 Binary files /dev/null and b/admin/target/classes/cn/unizk/task/UserTreatTask.class differ diff --git a/admin/target/classes/cn/unizk/utils/FixedLengthSerializer.class b/admin/target/classes/cn/unizk/utils/FixedLengthSerializer.class new file mode 100644 index 0000000..ebcb1b4 Binary files /dev/null and b/admin/target/classes/cn/unizk/utils/FixedLengthSerializer.class differ diff --git a/admin/target/classes/cn/unizk/utils/HuifuSignUtil.class b/admin/target/classes/cn/unizk/utils/HuifuSignUtil.class new file mode 100644 index 0000000..7dcd948 Binary files /dev/null and b/admin/target/classes/cn/unizk/utils/HuifuSignUtil.class differ diff --git a/admin/target/classes/cn/unizk/utils/SecurityUtils.class b/admin/target/classes/cn/unizk/utils/SecurityUtils.class new file mode 100644 index 0000000..2aa2f6a Binary files /dev/null and b/admin/target/classes/cn/unizk/utils/SecurityUtils.class differ diff --git a/admin/target/classes/logback-spring.xml b/admin/target/classes/logback-spring.xml new file mode 100644 index 0000000..b5d93a3 --- /dev/null +++ b/admin/target/classes/logback-spring.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + ${LOG_FILE} + + ${LOG_PATH}/admin.%d{yyyy-MM-dd}.%i.log + 30MB + 30 + 3GB + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/admin/target/classes/mapper/DeviceMapper.xml b/admin/target/classes/mapper/DeviceMapper.xml new file mode 100644 index 0000000..488123e --- /dev/null +++ b/admin/target/classes/mapper/DeviceMapper.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + update device set status = #{status} where device_id = #{deviceId} + + + + update device set surplus = surplus - 1 where payment_method = 1 and surplus > 0 + + + + + + + + + + + update device set operating_status = 2 where last_run_time < DATE_SUB(NOW(), INTERVAL 1 MINUTE ) and operating_status not in(1,2); + + + + update device set free_count = free_count -1 where free_count > 0 and last_run_time < DATE_SUB(NOW(), INTERVAL 1 MINUTE ) and operating_status not in(1,2); + + + + UPDATE user + SET treat_status = 0 + WHERE create_time < NOW() - INTERVAL 30 MINUTE; + + + + + update device set cf = #{dv.cf},wm = #{dv.wm},hw = #{dv.hw},sw = #{dv.sw},iccid = #{dv.iccid} ,cr = #{dv.cr}, + operating_status = #{dv.operatingStatus},last_run_time = #{dv.lastRunTime} + where device_id = #{dv.deviceId} + + + + update device set device_id = #{ndeviceId} where device_id = #{odeviceId} + + + diff --git a/admin/target/classes/mapper/MenuMapper.xml b/admin/target/classes/mapper/MenuMapper.xml new file mode 100644 index 0000000..002f6a6 --- /dev/null +++ b/admin/target/classes/mapper/MenuMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/admin/target/classes/mapper/ProductMapper.xml b/admin/target/classes/mapper/ProductMapper.xml new file mode 100644 index 0000000..a6aee40 --- /dev/null +++ b/admin/target/classes/mapper/ProductMapper.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/admin/target/classes/mapper/WxOrderItemMapper.xml b/admin/target/classes/mapper/WxOrderItemMapper.xml new file mode 100644 index 0000000..d55c352 --- /dev/null +++ b/admin/target/classes/mapper/WxOrderItemMapper.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/admin/target/classes/mapper/WxUserMapper.xml b/admin/target/classes/mapper/WxUserMapper.xml new file mode 100644 index 0000000..48b18c3 --- /dev/null +++ b/admin/target/classes/mapper/WxUserMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/admin/target/classes/mapper/XunfuAccountMapper.xml b/admin/target/classes/mapper/XunfuAccountMapper.xml new file mode 100644 index 0000000..587cff5 --- /dev/null +++ b/admin/target/classes/mapper/XunfuAccountMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/admin/target/classes/mapper/YnzkSystemDeviceMapper.xml b/admin/target/classes/mapper/YnzkSystemDeviceMapper.xml new file mode 100644 index 0000000..79681bd --- /dev/null +++ b/admin/target/classes/mapper/YnzkSystemDeviceMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/admin/target/maven-archiver/pom.properties b/admin/target/maven-archiver/pom.properties new file mode 100644 index 0000000..260f1bd --- /dev/null +++ b/admin/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Tue Aug 25 11:33:16 CST 2026 +version=1.0.0 +groupId=cn.unizk +artifactId=admin diff --git a/admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..10977cb --- /dev/null +++ b/admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,97 @@ +cn\unizk\entity\vo\ProductTypeVO.class +cn\unizk\task\DeviceTask.class +cn\unizk\config\TcpServerDSLConfig.class +cn\unizk\service\SysUserService.class +cn\unizk\annotation\Anonymous.class +cn\unizk\service\UdpServerService.class +cn\unizk\controller\LoginController.class +cn\unizk\service\impl\BusinessChannelServiceImpl.class +cn\unizk\controller\SysPhysioController.class +cn\unizk\service\SysDictService.class +cn\unizk\service\UdpServerService2.class +cn\unizk\mapper\JkPhysioMapper.class +cn\unizk\service\MenuService.class +cn\unizk\controller\RunningController.class +cn\unizk\controller\WxUserController.class +cn\unizk\service\impl\SysUserServiceImpl.class +cn\unizk\service\UdpServerService2$DeviceInfo.class +cn\unizk\mapper\SysUserMapper.class +cn\unizk\service\DeviceService.class +cn\unizk\properties\PermitAllUrlProperties.class +cn\unizk\service\GeneratePrService.class +cn\unizk\properties\SysWxProperties.class +cn\unizk\mapper\SysDictMapper.class +cn\unizk\controller\WxAuthLoginController.class +cn\unizk\service\impl\SysDictServiceImpl.class +cn\unizk\controller\IsoController.class +cn\unizk\controller\MenuController.class +cn\unizk\AdminApp.class +cn\unizk\config\SecurityConfig.class +cn\unizk\service\impl\DeviceServiceImpl.class +cn\unizk\controller\SysComboController.class +cn\unizk\config\ResourcesConfig.class +cn\unizk\entity\vo\InStockVO.class +cn\unizk\service\impl\ProductCarouselServiceImpl.class +cn\unizk\utils\HuifuSignUtil.class +cn\unizk\service\impl\StoreServiceImpl.class +cn\unizk\task\UserTreatTask.class +cn\unizk\service\impl\UserDetailsServiceImpl.class +cn\unizk\entity\vo\PhysioScheduleVO.class +cn\unizk\mapper\ProductCarouselMapper.class +cn\unizk\service\SysOrderService.class +cn\unizk\controller\SysStoreController.class +cn\unizk\service\impl\LoginServiceImpl.class +cn\unizk\security\handler\AuthenticationEntryPointImpl.class +cn\unizk\constants\CacheConstant.class +cn\unizk\service\impl\ProductServiceImpl.class +cn\unizk\entity\dto\AppointmentDTO.class +cn\unizk\utils\FixedLengthSerializer.class +cn\unizk\controller\AdminOrderController.class +cn\unizk\controller\SysFileController.class +cn\unizk\service\WxAuthLoginService.class +cn\unizk\service\TokenService.class +cn\unizk\service\ProductService.class +cn\unizk\service\impl\SysFileServiceImpl.class +cn\unizk\security\filter\JwtAuthenticationTokenFilter.class +cn\unizk\service\PhysioService.class +cn\unizk\controller\SysPhysioPaiBanController.class +cn\unizk\service\ProductCarouselService.class +cn\unizk\entity\dto\LoginUser.class +cn\unizk\service\UdpClientService.class +cn\unizk\security\handler\LogoutSuccessHandlerImpl.class +cn\unizk\entity\vo\SysUserVO.class +cn\unizk\config\HuiFuVendorProperties.class +cn\unizk\controller\SysBusinessChannelController.class +cn\unizk\controller\SysDeviceController.class +cn\unizk\security\handler\UserAccessDeniedHandler.class +cn\unizk\service\PasswordService.class +cn\unizk\service\LoginService.class +cn\unizk\service\impl\SysOrderServiceImpl.class +cn\unizk\service\ChildStoreService.class +cn\unizk\security\context\AuthenticationContextHolder.class +cn\unizk\mapper\SysFileMapper.class +cn\unizk\controller\ChildDeviceController.class +cn\unizk\service\UdpServerService$DeviceInfo.class +cn\unizk\task\PhysioDailySchedulesTask.class +cn\unizk\mapper\JkProductMapper.class +cn\unizk\mapper\MenuMapper.class +cn\unizk\controller\SysProductController.class +cn\unizk\service\StoreService.class +cn\unizk\utils\SecurityUtils.class +cn\unizk\constants\Constants.class +cn\unizk\controller\ChildStoreController.class +cn\unizk\service\impl\PhysioServiceImpl.class +cn\unizk\mapper\UniBaseMapper.class +cn\unizk\service\ComboService.class +cn\unizk\service\impl\MenuServiceImpl.class +cn\unizk\mapper\StoreMapper.class +cn\unizk\service\BusinessChannelService.class +cn\unizk\service\SysFileService.class +cn\unizk\config\TcpServerDSLConfig2.class +cn\unizk\service\FileService.class +cn\unizk\service\impl\ComboServiceImpl.class +cn\unizk\controller\H5ComboController.class +cn\unizk\controller\HuaWeiYunController.class +cn\unizk\controller\SysUserController.class +cn\unizk\controller\UserTreatController.class +cn\unizk\controller\SysCourseController.class diff --git a/admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..b089740 --- /dev/null +++ b/admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,99 @@ +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\mapper\JkPhysioMapper.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\TokenService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\ChildStoreController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\mapper\SysDictMapper.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\SysDeviceController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\impl\BusinessChannelServiceImpl.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\mapper\JkProductMapper.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\SysPhysioPaiBanController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\utils\SecurityUtils.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\security\handler\LogoutSuccessHandlerImpl.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\impl\ProductCarouselServiceImpl.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\SysUserService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\constants\CacheConstant.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\mapper\MenuMapper.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\GeneratePrService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\SysCourseController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\security\handler\UserAccessDeniedHandler.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\mapper\ProductCarouselMapper.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\SysPhysioController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\UserTreatController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\RunningController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\mapper\SysUserMapper.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\ProductService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\SysFileService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\utils\HuifuSignUtil.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\impl\SysUserServiceImpl.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\SysProductController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\impl\SysOrderServiceImpl.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\config\SecurityConfig.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\constants\Constants.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\MenuService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\entity\vo\PhysioScheduleVO.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\PhysioService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\task\PhysioDailySchedulesTask.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\mapper\UniBaseMapper.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\impl\DeviceServiceImpl.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\impl\SysFileServiceImpl.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\impl\SysDictServiceImpl.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\WxAuthLoginService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\config\ResourcesConfig.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\UdpServerService2.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\entity\dto\LoginUser.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\FileService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\impl\LoginServiceImpl.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\WxUserService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\H5ComboController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\ChildDeviceController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\SysOrderService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\SysDictService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\SysBusinessChannelController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\impl\WxUserServiceImpl.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\WxUserController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\security\handler\SecurityExceptionHandler.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\properties\SysWxProperties.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\utils\FixedLengthSerializer.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\annotation\Anonymous.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\impl\PhysioServiceImpl.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\PasswordService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\AdminApp.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\WxAuthLoginController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\IsoController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\mapper\StoreMapper.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\StoreService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\DeviceService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\ChildStoreService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\config\TcpServerDSLConfig.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\security\filter\JwtAuthenticationTokenFilter.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\impl\ProductServiceImpl.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\UdpServerService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\task\DeviceTask.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\security\handler\AuthenticationEntryPointImpl.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\mapper\WxUserMapper.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\SysComboController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\config\HuiFuVendorProperties.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\SysFileController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\BusinessChannelService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\MenuController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\impl\MenuServiceImpl.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\SysUserController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\ComboService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\LoginController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\AdminOrderController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\impl\StoreServiceImpl.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\LoginService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\ProductCarouselService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\properties\PermitAllUrlProperties.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\HuaWeiYunController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\entity\vo\InStockVO.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\impl\UserDetailsServiceImpl.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\config\TcpServerDSLConfig2.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\controller\SysStoreController.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\security\context\AuthenticationContextHolder.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\mapper\SysFileMapper.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\task\UserTreatTask.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\entity\vo\ProductTypeVO.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\mapper\WxOrderMapper.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\impl\ComboServiceImpl.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\service\UdpClientService.java +E:\code\unizk\AI_Questioning\admin\src\main\java\cn\unizk\entity\vo\SysUserVO.java diff --git a/admin/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/admin/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..a13de1c --- /dev/null +++ b/admin/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst @@ -0,0 +1 @@ +Test01.class diff --git a/admin/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/admin/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..60bcb43 --- /dev/null +++ b/admin/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -0,0 +1 @@ +E:\code\unizk\AI_Questioning\admin\src\test\java\Test01.java diff --git a/admin/target/test-classes/Test01.class b/admin/target/test-classes/Test01.class new file mode 100644 index 0000000..1dae94e Binary files /dev/null and b/admin/target/test-classes/Test01.class differ diff --git a/applet/.mvn/jvm.config b/applet/.mvn/jvm.config new file mode 100644 index 0000000..e69de29 diff --git a/applet/.mvn/maven.config b/applet/.mvn/maven.config new file mode 100644 index 0000000..e69de29 diff --git a/applet/applet.iml b/applet/applet.iml new file mode 100644 index 0000000..74f3f13 --- /dev/null +++ b/applet/applet.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/applet/pom.xml b/applet/pom.xml new file mode 100644 index 0000000..5a4e47d --- /dev/null +++ b/applet/pom.xml @@ -0,0 +1,167 @@ + + + + AI_Questioning + cn.unizk + 1.0.0 + + 4.0.0 + + applet + + applet + + http://www.example.com + + + UTF-8 + 8 + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springframework.boot + spring-boot-configuration-processor + true + 2.6.7 + + + org.springframework.boot + spring-boot-starter-test + test + + + org.mockito + mockito-core + test + + + mysql + mysql-connector-java + + + com.alibaba + druid-spring-boot-starter + + + org.springframework.boot + spring-boot-starter-data-jdbc + + + org.apache.commons + commons-collections4 + + + + + io.jsonwebtoken + jjwt-api + 0.11.5 + + + + io.jsonwebtoken + jjwt-impl + 0.11.5 + runtime + + + + io.jsonwebtoken + jjwt-jackson + 0.11.5 + runtime + + + + com.github.wechatpay-apiv3 + wechatpay-java + 0.2.17 + + + + + org.bouncycastle + bcprov-jdk18on + + + + com.huifu.bspay.sdk + dg-java-sdk + + + + + org.java-websocket + Java-WebSocket + + + + + com.squareup.okio + okio + + + + com.volcengine + volcengine-java-sdk-ark-runtime + LATEST + + + + + cn.unizk + common + + + + + + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.1.1.RELEASE + + true + + + + + repackage + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + diff --git a/applet/src/main/java/cn/unizk/AIQuestioningApp.java b/applet/src/main/java/cn/unizk/AIQuestioningApp.java new file mode 100644 index 0000000..8e87fa2 --- /dev/null +++ b/applet/src/main/java/cn/unizk/AIQuestioningApp.java @@ -0,0 +1,16 @@ +package cn.unizk; + +import cn.unizk.config.WxProperties; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; + +@SpringBootApplication +@MapperScan(basePackages = {"cn.unizk.mapper"}) +@EnableScheduling +public class AIQuestioningApp { + public static void main(String[] args) { + SpringApplication.run(AIQuestioningApp.class,args); + } +} diff --git a/applet/src/main/java/cn/unizk/config/FilterConfig.java b/applet/src/main/java/cn/unizk/config/FilterConfig.java new file mode 100644 index 0000000..70e2f71 --- /dev/null +++ b/applet/src/main/java/cn/unizk/config/FilterConfig.java @@ -0,0 +1,50 @@ +/* +package cn.unizk.config; + +import cn.unizk.filter.JkCorsFilter; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.reactive.CorsWebFilter; +import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource; + +import java.util.ArrayList; +import java.util.List; + +*/ +/** + * @Author hao + * @Date 2025/9/13 17:09 + * @Version 1.0 + **//* + +@Configuration +public class FilterConfig { + + @Bean + public FilterRegistrationBean jkCorsFilter(){ + FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean<>(); + filterRegistrationBean.setFilter(new JkCorsFilter()); + filterRegistrationBean.addUrlPatterns("/h5/*"); + filterRegistrationBean.setOrder(1); + return filterRegistrationBean; + } + + @Bean + public CorsWebFilter corsFilter() { + CorsConfiguration config = new CorsConfiguration(); + config.addAllowedOrigin("http://369.peaktcm.com:9000"); + config.addExposedHeader("Authorization"); + config.addAllowedHeader("*"); + config.addAllowedMethod("*"); + config.setAllowCredentials(true); + + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", config); + + return new CorsWebFilter(source); + } + +} +*/ diff --git a/applet/src/main/java/cn/unizk/config/JkProperties.java b/applet/src/main/java/cn/unizk/config/JkProperties.java new file mode 100644 index 0000000..60cb8dc --- /dev/null +++ b/applet/src/main/java/cn/unizk/config/JkProperties.java @@ -0,0 +1,22 @@ +package cn.unizk.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Author hao + * @Date 2025/8/27 10:18 + * @Version 1.0 + **/ +@Getter +@Setter +@Component +@ConfigurationProperties(prefix = "jk") +public class JkProperties { + + private String secretKey; + private Integer tokenExpireTime; + +} diff --git a/applet/src/main/java/cn/unizk/config/ResourceConfig.java b/applet/src/main/java/cn/unizk/config/ResourceConfig.java new file mode 100644 index 0000000..a2471cc --- /dev/null +++ b/applet/src/main/java/cn/unizk/config/ResourceConfig.java @@ -0,0 +1,58 @@ +package cn.unizk.config; + +import cn.unizk.interceptor.AppletLoginInterceptor; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import javax.annotation.Resource; + +/** + * @Author hao + * @Date 2025/8/21 14:52 + * @Version 1.0 + **/ +@Configuration +public class ResourceConfig implements WebMvcConfigurer { + + @Resource + private AppletLoginInterceptor appletLoginInterceptor; + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(appletLoginInterceptor).addPathPatterns("/**") + .excludePathPatterns( + "/ai/saveConversation", + "/applet/login", + "/applet/jkLogin", + "/applet/sendPhoneCode", + "/applet/bindPhoneNumber", + "/applet/wxPay/paySuccessCallBack", + "/applet/test/**", + "/h5/**", + "/applet/dict/getDictByType", + "/applet/product/carousel", + "/applet/product/list", + "/applet/product/getExquisite", + "/applet/getStores", + "/applet/getStoreById", + "/applet/huifuPay/callback", + "/applet/huifuPay/configureAppletCallback", + "/applet/getAppletQrCode", + "/hf/webhook/**", + "/ai/getQustion/**", + "applet/getReportById/**", + "/applet/user/rememberDia", + "/applet/product/byId", + "/applet/combo/getCombos", + "/ai/**", + "/applet/doubao/**", + "/applet/golf/**", + "/applet/wechat/pay", + "/applet/module/**", + "/applet/loginByPhone", + "/applet/sendPhoneCode", + "/applet/oneClickLogin"); + + } +} diff --git a/applet/src/main/java/cn/unizk/config/WxProperties.java b/applet/src/main/java/cn/unizk/config/WxProperties.java new file mode 100644 index 0000000..ba63e2a --- /dev/null +++ b/applet/src/main/java/cn/unizk/config/WxProperties.java @@ -0,0 +1,43 @@ +package cn.unizk.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Author hao + * @Date 2025/7/9 17:14 + * @Version 1.0 + **/ +@Component +@ConfigurationProperties(prefix = "wx") +@Getter +@Setter +public class WxProperties { + private String appid; + private String secret; + private final PlaceOrder placeOrder = new PlaceOrder(); + private final Pay pay = new Pay(); + + @Getter + @Setter + public static class PlaceOrder { + private String notifyUrl; + private String placeOrderUrl; + private Long expireTime; //单位分钟 + } + + @Getter + @Setter + public static class Pay { + private String domain; + private String mchid; + private String serialNo; + private String closeOrderApi; + private String platformCertSerial; + private String apiV3Key; + private String orderSearchUri; + } + +} diff --git a/applet/src/main/java/cn/unizk/constant/WxConstant.java b/applet/src/main/java/cn/unizk/constant/WxConstant.java new file mode 100644 index 0000000..fac23f4 --- /dev/null +++ b/applet/src/main/java/cn/unizk/constant/WxConstant.java @@ -0,0 +1,16 @@ +package cn.unizk.constant; + +/** + * @Author hao + * @Date 2025/7/9 13:45 + * @Version 1.0 + **/ +public class WxConstant { + + public static final String GET_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/stable_token"; + public static final String APPLET_LOGIN_URL = "https://api.weixin.qq.com/sns/jscode2session"; + public static final String APPLET_LOGIN_SIGN = "applet-auth"; + public static final String CACHE_TOKEN_KEY = "jk-applet-"; + public static final String authorization_type = "WECHATPAY2-SHA256-RSA2048 "; + public static final String WX_ACCESS_TOKEN = "access_token"; +} diff --git a/applet/src/main/java/cn/unizk/controller/AIAdviceController.java b/applet/src/main/java/cn/unizk/controller/AIAdviceController.java new file mode 100644 index 0000000..28a148f --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/AIAdviceController.java @@ -0,0 +1,517 @@ +package cn.unizk.controller; + +import cn.unizk.cache.LocalCache; +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.*; +import cn.unizk.enums.ContentTypeEnum; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.DiagnosisTemplateMapper; +import cn.unizk.mapper.StoreAccountMapper; +import cn.unizk.mapper.TreatParameterMapper; +import cn.unizk.service.*; +import cn.unizk.utils.IatModelZh; +import cn.unizk.utils.WebIATWS; +import cn.unizk.utils.XfSpeechToTextUtil; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.WebSocket; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.io.InputStreamResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.math.BigDecimal; +import java.nio.file.Files; +import java.security.SignatureException; +import java.time.LocalDateTime; +import java.util.*; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2025/7/7 15:55 + * @Version 1.0 + **/ + +@RestController +@Slf4j +@RequestMapping({"/ai"}) +public class AIAdviceController { + + @Value("${xf.appid}") + private String appid; + @Value("${xf.long-sound.keySecret}") + private String longSoundKeySecret; + @Value("${xf.instant.host}") + private String hostUrl; + @Value("${xf.instant.APISecret}") + private String apiSecret; + @Value("${xf.instant.apiKey}") + private String apiKey; + @Resource + private WxUserSessionService userSessionService; + @Resource + private QuestionService questionService; + @Resource + private StoreAccountMapper accountMapper; + + @Resource + private AIAdviceService aiAdviceService; + @Value("${spring.profiles.active}") + private String active; + @Resource + private DiagnosisTemplateMapper diagnosisTemplateMapper; + @Resource + private TreatParameterMapper treatParameterMapper; + @Resource + private SysDictService sysDictService; + + + + @PostMapping("/askForAdvice") + public ReplyVo reply(@RequestBody ReplyVo vo){ + /** + * 如果下一条消息要展示图片,那么vo.setNextContentType(ContentTypeEnum.IMAGE.name()); + * 如果下一条消息要弹出性别选择,那么vo.setNextContentType(ContentTypeEnum.SEX.name()); + * 如果下一条消息要弹出年龄选择,那么vo.setNextContentType(ContentTypeEnum.AGE.name()); + * 如果下一条消息要弹出体重选择,那么vo.setNextContentType(ContentTypeEnum.WEIGHT.name()); + */ + vo.setType("AI"); + return aiAdviceService.reply(vo); + } + + + @PostMapping("/saveConversation") + public ReplyVo saveConversation(@RequestBody List>> conversation,@RequestParam("openid") String openid){ +// List> maps = new ArrayList<>(); +// for (Map> stringListMap : conversation) { +// for (Map.Entry> stringListEntry : stringListMap.entrySet()) { +// List value = stringListEntry.getValue(); +// Map map = new HashMap<>(); +// map.put(stringListEntry.getKey(),value.get(0)); +// maps.add(map); +// } +// } + + return aiAdviceService.saveConversation(conversation,openid); + } + + /* + * + * 获取诊疗报告 诊疗师,暂放 + * */ + + @PostMapping("/getTreatmentPlan") + public JSONObject getTreatmentPlan(@RequestBody String sessionId){ + + return aiAdviceService.getTreatmentPlan(sessionId); + } + + + + @GetMapping("/getQustion/{sort}") + public QuestionVo getQuestion(@PathVariable("sort") int sort){ + Question question = questionService.getOne(new LambdaQueryWrapper().eq(Question::getSort, sort)); + JSONObject options = JSONObject.parseObject(question.getOptions()); + List> optionValues = new ArrayList<>(); + options.forEach((k,v) -> { + Map item = new HashMap<>(); + item.put("value", (String) v); + item.put("text", (String) v); + optionValues.add(item); + }); + QuestionVo questionVo = new QuestionVo(); + BeanUtils.copyProperties(question,questionVo); + questionVo.setOptionValues(optionValues); + return questionVo; + } + + @PostMapping("/speechToText") + public String speechToText(@RequestParam("file") MultipartFile file) { + log.info("originalFilename:{}",file.getOriginalFilename()); + log.info("name={},size={}",file.getName(),file.getSize()); + try { + String s = XfSpeechToTextUtil.xfSpeechToText(file, appid, longSoundKeySecret); + JSONObject res = JSONObject.parseObject(s); + String orderId = res.getJSONObject("content").getString("orderId"); + String result = XfSpeechToTextUtil.getResult(orderId, appid, longSoundKeySecret); + String parseStr = newJavaLfasr(result).toString(); + log.info("解析后的内容:{}",parseStr); + return parseStr; + } catch (SignatureException | InterruptedException | IOException e) { + e.printStackTrace(); + throw new ServiceException("语音识别失败"); + } + } + + @PostMapping("/instantToText/{openid}") + public String instantToText(@RequestParam("file") MultipartFile file,@PathVariable("openid") String openid){ + try { + String authUrl = WebIATWS.getAuthUrl(hostUrl, apiKey, apiSecret); + OkHttpClient client = new OkHttpClient.Builder().build(); + //将url中的 schema http://和https://分别替换为ws:// 和 wss:// + String url = authUrl.toString().replace("http://", "ws://").replace("https://", "wss://"); + //System.out.println(url); + Request request = new Request.Builder().url(url).build(); + // System.out.println(client.newCall(request).execute()); + //System.out.println("url===>" + url); + WebSocket webSocket = client.newWebSocket(request, new WebIATWS(file,openid)); + long end = System.currentTimeMillis() + 5 * 1000; + while (true){ + String msg = LocalCache.MESSAGE_QUEUE.get(openid); + if (StringUtils.isNotBlank(msg)){ + LocalCache.MESSAGE_QUEUE.remove(openid); + return msg; + }else { + if (System.currentTimeMillis() > end){ + throw new ServiceException("翻译结果等待超时"); + } + log.info("等待翻译结果返回"); + Thread.sleep(1000); + } + } + }catch (Exception e){ + e.printStackTrace(); + throw new ServiceException("语音识别失败"); + } + } + + /** + * 中文识别大模型API + * @param file + * @param openid + * @return + */ + @PostMapping("/iatModelToText") + public String iatModelToText(@RequestParam("file") MultipartFile file,@RequestParam("openid") String openid){ + /*try { + String authUrl = IatModelZh.getAuthUrl(); + OkHttpClient client = new OkHttpClient.Builder().build(); + String url = authUrl.toString().replace("http://", "ws://").replace("https://", "wss://"); + Request request = new Request.Builder().url(url).build(); + InputStream inputStream = file.getInputStream(); + IatModelZh iatModelZh = new IatModelZh(file, openid); + WebSocket webSocket = client.newWebSocket(request, iatModelZh); + if (!iatModelZh.getLatch().await(10, TimeUnit.SECONDS)) { + throw new ServiceException("大模型听写 超时"); + } + String s = LocalCache.IAT_MODEL_MSG_QUEUE.get(openid); + LocalCache.IAT_MODEL_MSG_QUEUE.remove(openid); + return s; + }catch (Exception e){ + log.error("大模型语音识别失败",e); + throw new ServiceException("大模型语音识别失败"); + }*/ + return instantToText(file,openid); + } + + private static StringBuilder newJavaLfasr(String a){ + StringBuilder result= new StringBuilder(); + JSONObject jsonObject = JSON.parseObject(a); + String str = jsonObject.getJSONObject("content").getString("orderResult"); + JSONArray json = JSONObject.parseObject(str).getJSONArray("lattice2"); + int length = json.size(); + for(int i = 0;i sessions, @PathVariable("openid") String openid){ + Long maxSessionId = userSessionService.findMaxSessionId(openid); + sessions.forEach(userSession -> { + userSession.setOpenid(openid); +// userSession.setSessionId(maxSessionId == null ? 1 : maxSessionId+1); + userSession.setSessionTime(LocalDateTime.now()); + }); + userSessionService.saveBatch(sessions); + return ResultData.success(); + } + + @PostMapping("/manualAnswer") + public ResultData manualAnswer(@RequestBody ManualAnswerVO vo){ + ResultData data = new ResultData<>(); + data.setCode(200); + if (Objects.isNull(vo) || StringUtils.isBlank(vo.getMessage())){ + return ResultData.success(); + } + String message = vo.getMessage(); + if ("1".equals(vo.getNumber())){ + if (message.contains("膝")){ + data.setData("true"); + return data; + } + data.setData("false"); + return data; + }else if ("4".equals(vo.getNumber()) || "2".equals(vo.getNumber())){ + if (message.contains("不对")){ + data.setData("false"); + return data; + } + if (message.contains("不是")){ + data.setData("false"); + return data; + } + if (message.contains("对")){ + data.setData("true"); + return data; + } + if (message.contains("是")){ + data.setData("true"); + return data; + } + data.setData("false"); + return data; + }else if ("3".equals(vo.getNumber())){ + message = parseStrTen(message); + message = message.replace("和",",").replace("还有",",").replace("跟",",").replace("号",",").replace("区",","); + List list = new ArrayList<>(); + if (containsStandaloneOne(message)){ + list.add("1"); + } + if (containsStandaloneTwo(message)){ + list.add("2"); + } + if (containsStandaloneThree(message)){ + list.add("3"); + } + if (message.contains("4")){ + list.add("4"); + } + if (message.contains("5")){ + list.add("5"); + } + if (message.contains("6")){ + list.add("6"); + } + if ( message.contains("7")){ + list.add("7"); + } + if (message.contains("8")){ + list.add("8"); + } + if (message.contains("9")){ + list.add("9"); + } + if (message.contains("10")){ + list.add("10"); + } + if (message.contains("11")){ + list.add("11"); + } + if (message.contains("12")){ + list.add("12"); + } + if (message.contains("13")){ + list.add("13"); + } + if (CollectionUtils.isNotEmpty(list)){ + String collect = String.join(",", list); + data.setData(collect); + return data; + }else { + data.setData("false"); + return data; + } + }else { + List list = new ArrayList<>(); + if (message.contains("一") || message.contains("1")){ + list.add("1"); + } + if (message.contains("二") || message.contains("2")){ + list.add("2"); + } + if (message.contains("三") || message.contains("3")){ + list.add("3"); + } + if (message.contains("四") || message.contains("4")){ + list.add("4"); + } + if (message.contains("五") || message.contains("5")){ + list.add("5"); + } + if (message.contains("六") || message.contains("6")){ + list.add("6"); + } + if (CollectionUtils.isNotEmpty(list)){ + String join = String.join(",", list); + data.setData(join); + return data; + }else { + data.setData("false"); + return data; + } + } + } + + @PostMapping("/answer") + public ResultData answer(@RequestBody QuestionAnswerVO vo){ + ResultData data = new ResultData<>(); + data.setCode(200); + return data; + } + + private boolean containsStandaloneOne(String str) { + if (str == null) { + return false; + } + return Pattern.compile("\\b1\\b").matcher(str).find(); + } + private boolean containsStandaloneTwo(String str) { + if (str == null) { + return false; + } + return Pattern.compile("\\b2\\b").matcher(str).find(); + } + private boolean containsStandaloneThree(String str) { + if (str == null) { + return false; + } + return Pattern.compile("\\b3\\b").matcher(str).find(); + } + + private String parseStrTen(String msg){ + if (msg == null){ + return msg; + } + String s = msg; + + if (msg.contains("十一") || msg.contains("十二") || msg.contains("十三")){ + s = msg.replace("十一", "11").replace("十二", "12").replace("十三", "13"); + }else { + if (msg.contains("十")){ + s = msg.replace("十","10"); + } + } + if (msg.contains("一")){ + s = s.replace("一","1"); + } + if (msg.contains("二")){ + s = s.replace("二","2"); + } + if (msg.contains("三")){ + s = s.replace("三","3"); + } + if (msg.contains("四")){ + s = s.replace("四","4"); + } + if (msg.contains("五")){ + s = s.replace("五","5"); + } + if (msg.contains("六")){ + s = s.replace("六","6"); + } + if (msg.contains("七")){ + s = s.replace("七","7"); + } + if (msg.contains("八")){ + s = s.replace("八","8"); + } + if (msg.contains("九")){ + s = s.replace("九","9"); + } + return s; + } + + @GetMapping("/toVoice") + public ResponseEntity toVoice(@RequestParam("text") String text){ + SysDict sysDict = sysDictService.getOne(new LambdaQueryWrapper().eq(SysDict::getDictType, "xf_voice")); + if (sysDict == null || "0".equals(sysDict.getDictValue())){ + return ResponseEntity.ok(null); + } + File tempFile = null; + File dir; + try { + if ("dev".equals(active)){ + dir = new File("D:\\code\\temp"); + }else { + dir = new File("/opt/jkzyjava/temp"); + } + dir.mkdirs(); + tempFile = File.createTempFile("temp", ".mp3",dir); + String filePath = tempFile.getAbsolutePath(); + CountDownLatch latch = new CountDownLatch(1); + WebTtsWsService.tts(text,filePath,latch); + if (!latch.await(10, TimeUnit.SECONDS)) { + throw new ServiceException("TTS 超时"); + } + + byte[] audioData = Files.readAllBytes(tempFile.toPath()); + InputStreamResource resource = new InputStreamResource(new ByteArrayInputStream(audioData)); + return ResponseEntity.ok() + .contentType(MediaType.parseMediaType("audio/mpeg")) + .header(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=\"speech.mp3\"") + .body(resource); + } catch (Exception e) { + log.error("文字转语音发生异常",e); + throw new ServiceException("服务异常"); + }finally { + if (tempFile != null){ + File file = tempFile; + new Thread(() -> { + try { + Thread.sleep(5000); + log.info("删除临时文件"); + file.delete(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + log.warn("删除临时文件线程被中断"); + e.printStackTrace(); + } + }).start(); + } + } + } + + @GetMapping("/addTreat") + public boolean addTreat(){ + List diagnosisTemplates = diagnosisTemplateMapper.selectList(null); + for (DiagnosisTemplate diagnosisTemplate : diagnosisTemplates) { + TreatParameter treatParameter = new TreatParameter(); + treatParameter.setSymptomsName(diagnosisTemplate.getLocation()); + treatParameterMapper.insert(treatParameter); + } + return true; + } + + /*@GetMapping("/abcount") + public ResultData data(){ + StoreAccount account = new StoreAccount(); + account.setStoreId(3); + account.setAvailableBalance(BigDecimal.valueOf(1.00)); + account.setBalance(BigDecimal.valueOf(1.00)); + accountMapper.insert(account); + return ResultData.success(); + }*/ +} diff --git a/applet/src/main/java/cn/unizk/controller/ApplicationModuleController.java b/applet/src/main/java/cn/unizk/controller/ApplicationModuleController.java new file mode 100644 index 0000000..c5c3274 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/ApplicationModuleController.java @@ -0,0 +1,53 @@ +package cn.unizk.controller; + +import cn.unizk.constant.WxConstant; +import cn.unizk.entity.po.AppletModule; +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.entity.po.ModulePerms; +import cn.unizk.mapper.AppletModuleMapper; +import cn.unizk.mapper.MobileAppUserMapper; +import cn.unizk.utils.JkSecurityUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/8/6 10:27 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/module") +public class ApplicationModuleController { + + @Resource + private AppletModuleMapper appletModuleMapper; + @Resource + private MobileAppUserMapper mobileAppUserMapper; + + @GetMapping("/getModule") + public List getModule(HttpServletRequest request){ + String token = request.getHeader(WxConstant.APPLET_LOGIN_SIGN); + if (StringUtils.isBlank(token)){ + return appletModuleMapper.getModule("mp","C"); + } + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(token); + MobileAppUser user = mobileAppUserMapper.selectById(currentUser); + if (Objects.isNull(user)){ + return appletModuleMapper.getModule("mp","C"); + } + return appletModuleMapper.getModule("mp",user.getUserType()); + } + +/* @GetMapping("/getModule") + public List getM(){ + return appletModuleMapper.selectList(null); + }*/ +} diff --git a/applet/src/main/java/cn/unizk/controller/ClinicWorkLogController.java b/applet/src/main/java/cn/unizk/controller/ClinicWorkLogController.java new file mode 100644 index 0000000..bd5236c --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/ClinicWorkLogController.java @@ -0,0 +1,58 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.ClinicWorkLog; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.mapper.ClinicWorkLogMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.lang3.StringUtils; +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 javax.annotation.Resource; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2026/8/20 14:36 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/clinic") +public class ClinicWorkLogController { + + @Resource + private ClinicWorkLogMapper clinicWorkLogMapper; + + @PostMapping("/list") + public Page list(@RequestBody UniPage uniPage){ + Page page = (Page) uniPage.getPage(); + LambdaQueryWrapper queryWrapper = uniPage.buildQueryWrapper(query -> { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.like(StringUtils.isNotBlank(query.getName()), ClinicWorkLog::getName, query.getName()); + wrapper.like(StringUtils.isNotBlank(query.getPhoneNumber()), ClinicWorkLog::getPhoneNumber, query.getPhoneNumber()); + wrapper.orderByDesc(ClinicWorkLog::getCreateTime); + return wrapper; + }); + return clinicWorkLogMapper.selectPage(page,queryWrapper); + } + + @PostMapping("/addLog") + public ResultData addLog(@RequestBody ClinicWorkLog log){ + if (log.getCreateTime() == null){ + log.setCreateTime(LocalDate.now()); + } + clinicWorkLogMapper.insert(log); + return ResultData.success(); + } + + @PostMapping("/editLog") + public ResultData editLog(@RequestBody ClinicWorkLog log){ + clinicWorkLogMapper.updateById(log); + return ResultData.success(); + } +} diff --git a/applet/src/main/java/cn/unizk/controller/ComboController.java b/applet/src/main/java/cn/unizk/controller/ComboController.java new file mode 100644 index 0000000..4eaa580 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/ComboController.java @@ -0,0 +1,98 @@ +package cn.unizk.controller; + +import cn.unizk.constant.UniConstant; +import cn.unizk.entity.po.Combo; +import cn.unizk.entity.po.Device; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.exception.ServiceException; +import cn.unizk.service.ComboService; +import cn.unizk.service.DeviceService; +import cn.unizk.utils.JkSecurityUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2025/8/30 17:23 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/combo") +@Slf4j +public class ComboController { + + @Resource + private ComboService comboService; + @Resource + private DeviceService deviceService; + + @GetMapping("/listByDevice") + public Page list(UniPage uniPage, @RequestParam(value = "deviceId", required = false) String deviceId, HttpServletRequest request) { + String channelId = request.getHeader(UniConstant.CHANNEL_HEADER); + log.info("从请求体中获取到的channelId={}",channelId); + Page page = new Page<>(); + page.setCurrent(uniPage.getCurrentPage()); + page.setSize(uniPage.getPageSize()); + if (StringUtils.isNotBlank(channelId)) { + return comboService.page(page, new LambdaQueryWrapper() + .eq(Combo::getChannelId, channelId) + .and(w -> { + w.eq(StringUtils.isNotBlank(deviceId), Combo::getDeviceId, deviceId) + .or() + .isNull(Combo::getDeviceId) + .or() + .isNull(Combo::getChannelId); + }) + .orderByAsc(Combo::getComboPrice)); + } + return comboService.page(page, new LambdaQueryWrapper() + .isNull(Combo::getChannelId) + .and(w -> { + w.eq(StringUtils.isNotBlank(deviceId), Combo::getDeviceId, deviceId) + .or() + .isNull(Combo::getDeviceId); + }) + .orderByAsc(Combo::getComboPrice)); + } + + @GetMapping("/getCombos") + public Page getCombos(@RequestParam("storeId") Integer storeId, @RequestParam(value = "comboName", required = false) String comboName, UniPage uniPage, HttpServletRequest request) { + /*WxUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)) { + throw new ServiceException(401, "登录已过期"); + }*/ + String channelId = request.getHeader("channelId"); + log.info("从请求体中获取到的channelId={}",channelId); + Page page = new Page<>(uniPage.getCurrentPage(), uniPage.getPageSize()); + List devices = deviceService.list(new LambdaQueryWrapper().eq(Device::getStoreId, storeId)); + if (CollectionUtils.isNotEmpty(devices)) { + List deviceIds = devices.stream().map(Device::getDeviceId).collect(Collectors.toList()); + return comboService.page(page, new LambdaQueryWrapper() + .and(wrapper ->{ + wrapper.in(Combo::getDeviceId, deviceIds) + .or() + .isNull(Combo::getDeviceId); + }) + .like(StringUtils.isNotBlank(comboName), Combo::getComboName, comboName) + .and(wrapper -> { + wrapper.eq(StringUtils.isNotBlank(channelId), Combo::getChannelId, channelId) + .or() + .isNull(Combo::getChannelId); + })); + } + page.setRecords(new ArrayList<>()); + return page; + } + +} diff --git a/applet/src/main/java/cn/unizk/controller/ConsultationController.java b/applet/src/main/java/cn/unizk/controller/ConsultationController.java new file mode 100644 index 0000000..9ef34c9 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/ConsultationController.java @@ -0,0 +1,267 @@ +package cn.unizk.controller; + +import cn.hutool.core.date.DateUtil; +import cn.unizk.entity.dto.ElectronicSignatureDTO; +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.entity.vo.UserConsultationRecordVO; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.*; +import cn.unizk.service.impl.DoubaoServiceImpl; +import cn.unizk.utils.JkSecurityUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/8/18 11:22 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/consultation") +@Slf4j +public class ConsultationController { + + @Resource + private UserConsultationRecordMapper consultationRecordMapper; + @Resource + private DoubaoServiceImpl doubaoService; + @Resource + private TreatParameterMapper treatParameterMapper; + @Resource + private MobileAppUserMapper mobileAppUserMapper; + @Resource + private JkPhysioMapper jkPhysioMapper; + @Resource + private ClinicWorkLogMapper clinicWorkLogMapper; + + + @PostMapping("/electronicSignature") + public ResultData electronicSignature(@RequestBody ElectronicSignatureDTO dto){ + UserConsultationRecord consultationRecord = consultationRecordMapper.selectById(dto.getId()); + if ("electronicPrescriptionUrl".equals(dto.getName())){ + consultationRecord.setElectronicPrescriptionUrl(dto.getUrl()); + } + if ("coordinatorSignUrl".equals(dto.getName())){ + consultationRecord.setCoordinatorSignUrl(dto.getUrl()); + } + if ("proofreaderSignUrl".equals(dto.getName())){ + consultationRecord.setProofreaderSignUrl(dto.getUrl()); + } + consultationRecordMapper.updateById(consultationRecord); + return ResultData.success(); + } + + @PostMapping("/saveRecord") + public UserConsultationRecordVO saveRecord(HttpServletRequest request, @RequestBody UserConsultationRecordVO vo){ + if (vo.getPattern() == null){ + throw new ServiceException("pattern???"); + } + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + TreatParameter treatParameter = null; + StringBuilder part = new StringBuilder(); + StringBuilder syName = new StringBuilder(); + if (!vo.getPainAreaNo().contains(",")){ + treatParameter = treatParameterMapper.selectById(Integer.parseInt(vo.getPainAreaNo())); + part.append(treatParameter.getPart()); + syName.append(treatParameter.getSymptomsName()); + }else { + String[] split = vo.getPainAreaNo().split(","); + for (String s : split) { + TreatParameter parameter = treatParameterMapper.selectById(Integer.parseInt(s)); + part.append(parameter.getPart()).append(";"); + syName.append(parameter.getSymptomsName()).append(";"); + } + } + String s = RandomStringUtils.randomNumeric(10); + String yyyyMMdd = DateUtil.format(new Date(), "yyyyMMdd"); + UserConsultationRecord consultationRecord = new UserConsultationRecord(); + BeanUtils.copyProperties(vo,consultationRecord); + String number = "JK-" + yyyyMMdd + s; + consultationRecord.setBatchNumber(number); + consultationRecord.setUserId(currentUser.getId()); + consultationRecord.setPainArea(part.toString()); + Map cqs = vo.getCqs(); + String one = cqs.get(11); + String two = cqs.get(12); + String three = cqs.get(13); + String four = cqs.get(14); + StringBuilder cb = new StringBuilder(); + if (vo.getPattern() == 1){ + if (one.equals("怕冷,遇冷加重,热敷舒服") || two.equals("膝盖沉重肿胀,阴天积液加重")){ + cb.append("寒湿痹阻型,"); + } + if (one.equals("怕热,局部发热,冷敷舒服")){ + cb.append("湿热瘀阻型,"); + } + if (three.equals("走路、干活后疼得厉害,休息减轻") || four.equals("腰部腿脚无酸软乏力")){ + cb.append("筋脉瘀滞劳损型,"); + } + if (four.equals("经常腰酸腿软,上下楼无力打软腿") && (vo.getPainDuration().equals("一年以上") || vo.getPainDuration().equals("三年以上"))){ + cb.append("肝肾亏虚型"); + } + }else { + String input1 = "患者回答:" + one; + String input2 = "请判断患者回答的内容意思如果是怕冷,遇冷加重,热敷舒服则回复yes;如果是怕热,局部发热,冷敷舒服则回复no;如果都不是则回复false。不要回复其他多余文字"; + String drawConclusion = doubaoService.drawConclusion(input1, input2); + if (drawConclusion.equals("yes")){ + cb.append("寒湿痹阻型,"); + } + if (drawConclusion.equals("no")){ + cb.append("湿热瘀阻型,"); + } + input1 = "患者回答:" + two; + input2 = "请判断患者回答的内容意思如果是膝盖沉重肿胀,阴天积液加重则回复yes;如果不是则回复no。不要回复其他多余文字"; + String yy = doubaoService.drawConclusion(input1, input2); + if (yy.equals("yes")){ + cb.append("寒湿痹阻型,"); + } + input1 = "患者回答:" + three; + input2 = "请判断患者回答的内容意思如果是走路、干活后疼得厉害,休息减轻则回复yes;如果不是则回复no。不要回复其他多余文字"; + String a = doubaoService.drawConclusion(input1, input2); + if (a.equals("yes")){ + cb.append("筋脉瘀滞劳损型,"); + } + input1 = "患者回答:" + four; + input2 = "请判断患者回答的内容意思如果是腰部腿脚无酸软乏力则回复yes;如果是经常腰酸腿软,上下楼无力打软腿则回复no;如果都不是则回复false。不要回复其他多余文字"; + String n = doubaoService.drawConclusion(input1, input2); + if (n.equals("yes")){ + cb.append("筋脉瘀滞劳损型,"); + } + if (n.equals("no")){ + cb.append("肝肾亏虚型"); + } + } + StringBuilder desc = new StringBuilder(); + StringBuilder append = desc.append("患者姓名:").append(vo.getPatientName()).append(",").append("病因:").append(syName) + .append(",").append("疼痛等级:").append(vo.getLevel()).append(",").append("诱发动作:").append(vo.getInducedAction()) + .append(",").append("伴随症状:").append(vo.getSymptoms()).append(",").append("中医诊断:").append(cb); + String input2 = "上述是患者的病痛信息,请你给出禁忌与注意事项,50字左右"; + String taboo = doubaoService.drawConclusion(append.toString(), input2); + MobileAppUser user = mobileAppUserMapper.selectById(currentUser.getId()); + log.info("taboo:{}",taboo); + consultationRecord.setTaboo(taboo); + String drugPrice = getDrugPrice(); + consultationRecord.setDrugPrice(drugPrice); + consultationRecord.setChineseDiagnosis(cb.toString()); + consultationRecord.setWesternDiagnosis(syName.toString()); + consultationRecord.setDepartment("中医科"); + consultationRecord.setPhoneNumber(user.getPhoneNumber()); + consultationRecord.setCreateTime(LocalDate.now()); + consultationRecordMapper.insert(consultationRecord); + UserConsultationRecordVO recordVO = new UserConsultationRecordVO(); + BeanUtils.copyProperties(consultationRecord,recordVO); + recordVO.setClinicalDia(syName.toString()); + int month = DateUtil.month(new Date()) + 1; + int day = DateUtil.thisDayOfMonth(); + String yyyy = DateUtil.format(new Date(), "yyyy"); + String currentTime = yyyy + "年" + month + "月" + day + "日"; + recordVO.setCurrentTime(currentTime); + recordVO.setDrugPrice(drugPrice); + recordVO.setGender(user.getGender()); + recordVO.setAge(user.getAge()); + recordVO.setPhoneNumber(currentUser.getPhoneNumber()); + ClinicWorkLog clinicWorkLog = clinicWorkLogMapper.selectOne(new LambdaQueryWrapper().eq(ClinicWorkLog::getPhoneNumber, user.getPhoneNumber()) + .eq(ClinicWorkLog::getCreateTime, consultationRecord.getCreateTime()) + .orderByDesc(ClinicWorkLog::getId) + .last("limit 1")); + + if (Objects.nonNull(clinicWorkLog)){ + recordVO.setMedicalTreatment(clinicWorkLog.getMedicalTreatment()); + } + return recordVO; + } + + + @PostMapping("/getPrescriptionList") + public Page getPrescriptionList(HttpServletRequest request, @RequestBody UniPage uniPage){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + JkPhysio jkPhysio = jkPhysioMapper.selectOne(new LambdaQueryWrapper().eq(JkPhysio::getPhysioTel, currentUser.getPhoneNumber())); + if (Objects.isNull(jkPhysio)){ + throw new ServiceException("暂无理疗师身份信息!"); + } + LambdaQueryWrapper lambdaQueryWrapper = uniPage.buildQueryWrapper(query -> { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(StringUtils.isNotBlank(query.getPatientName()), UserConsultationRecord::getPatientName, query.getPatientName()); + wrapper.orderByDesc(UserConsultationRecord::getCreateTime); + return wrapper; + }); + Page page = (Page) uniPage.getPage(); + return consultationRecordMapper.selectPage(page,lambdaQueryWrapper); + } + + + @GetMapping("/getPrescription") + public UserConsultationRecordVO prescription(@RequestParam("id") Integer id){ + UserConsultationRecord consultationRecord = consultationRecordMapper.selectById(id); + MobileAppUser user = mobileAppUserMapper.selectById(consultationRecord.getUserId()); + ClinicWorkLog clinicWorkLog = clinicWorkLogMapper.selectOne(new LambdaQueryWrapper().eq(ClinicWorkLog::getPhoneNumber, consultationRecord.getPhoneNumber()) + .eq(ClinicWorkLog::getCreateTime, consultationRecord.getCreateTime()) + .orderByDesc(ClinicWorkLog::getId) + .last("limit 1")); + UserConsultationRecordVO vo = new UserConsultationRecordVO(); + BeanUtils.copyProperties(consultationRecord,vo); + LocalDate createTime = consultationRecord.getCreateTime(); + int yyyy = DateUtil.year(DateUtil.date(createTime)); + int month = DateUtil.month(DateUtil.date(createTime)) + 1; + int day = DateUtil.dayOfMonth(DateUtil.date(createTime)); + String currentTime = yyyy + "年" + month + "月" + day + "日"; + vo.setCurrentTime(currentTime); + vo.setAge(user.getAge()); + vo.setGender(user.getGender()); + vo.setClinicalDia(consultationRecord.getWesternDiagnosis()); + if (Objects.nonNull(clinicWorkLog)){ + vo.setMedicalTreatment(clinicWorkLog.getMedicalTreatment()); + } + return vo; + } + + + @PostMapping("/getOwnPrescriptionList") + public Page getOwnPrescriptionList(HttpServletRequest request,@RequestBody UniPage uniPage){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + Page page = (Page) uniPage.getPage(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(UserConsultationRecord::getUserId,currentUser.getId()); + wrapper.orderByDesc(UserConsultationRecord::getCreateTime); + return consultationRecordMapper.selectPage(page,wrapper); + } + + /*@GetMapping("/getOwnPrescription") + public UserConsultationRecordVO getOwnPrescription(@RequestParam("id") Integer id){ + + }*/ + + private String getDrugPrice(){ + while (true){ + String s = RandomStringUtils.randomNumeric(3); + if (!s.startsWith("0")){ + return s; + } + } + } +} diff --git a/applet/src/main/java/cn/unizk/controller/CourseStudyController.java b/applet/src/main/java/cn/unizk/controller/CourseStudyController.java new file mode 100644 index 0000000..2628043 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/CourseStudyController.java @@ -0,0 +1,210 @@ +package cn.unizk.controller; + +import cn.unizk.constant.UniConstant; +import cn.unizk.entity.po.Chapter; +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.entity.po.MobileUserHaveCourse; +import cn.unizk.entity.po.MobileUserVideoProgress; +import cn.unizk.entity.vo.*; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.*; +import cn.unizk.utils.BeanCopyUtils; +import cn.unizk.utils.JkSecurityUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2026/3/9 17:43 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/course") +public class CourseStudyController { + + @Resource + private CourseMapper courseMapper; + @Resource + private MobileUserHaveCourseMapper mobileUserHaveCourseMapper; + @Resource + private MobileUserVideoProgressMapper mobileUserVideoProgressMapper; + @Resource + private ChapterMapper chapterMapper; + @Resource(name = "kryoRedisTemplate") + private RedisTemplate redisTemplate; + + @GetMapping("/coursePage") + public Page courseVOPage(@RequestParam(value = "currentPage", required = false, defaultValue = "1") int currentPage, + @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize, + @RequestParam(value = "title", required = false) String title, HttpServletRequest request) { + + /*MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)) { + throw new ServiceException(401, "登录已过期,请重新登录"); + }*/ +// List userHaveCourses = mobileUserHaveCourseMapper.selectList(new LambdaQueryWrapper().eq(MobileUserHaveCourse::getMobileUserId, currentUser.getId())); + Page page = new Page<>(currentPage, pageSize); + List courseVOS = courseMapper.voPage(page, title); + courseVOS.forEach(vo -> vo.setUnlock(1)); +/* if (CollectionUtils.isEmpty(userHaveCourses)) { + courseVOS.forEach(vo -> { + vo.setUnlock(0); + }); + } else { + List courseIds = userHaveCourses.stream().map(MobileUserHaveCourse::getCourseId).collect(Collectors.toList()); + for (CourseVO courseVO : courseVOS) { + if (courseIds.contains(courseVO.getCourseId())) { + courseVO.setUnlock(1); + List chapters = chapterMapper.selectList(new LambdaQueryWrapper().eq(Chapter::getCourseId, courseVO.getCourseId())); + if (CollectionUtils.isEmpty(chapters)){ + continue; + } + List collect = chapters.stream().map(Chapter::getChapterId).collect(Collectors.toList()); + List wxUserVideoProgresses = mobileUserVideoProgressMapper.selectList(new LambdaQueryWrapper().eq(MobileUserVideoProgress::getMobileUserId, currentUser.getId()) + .in(MobileUserVideoProgress::getChapterId, collect)); + if (CollectionUtils.isEmpty(wxUserVideoProgresses)) { + courseVO.setProgress(0); + } else { + List progresses = wxUserVideoProgresses.stream().map(MobileUserVideoProgress::getProgress).collect(Collectors.toList()); + int sum = 0; + for (Integer progress : progresses) { + sum += progress; + } + int i = sum / progresses.size(); + courseVO.setProgress(i); + } + } else { + courseVO.setUnlock(0); + } + } + }*/ + page.setRecords(courseVOS); + return page; + } + + @GetMapping("/chapters") + public Page voPage(@RequestParam(value = "currentPage", required = false, defaultValue = "1") int currentPage, + @RequestParam(value = "pageSize", required = false, defaultValue = "50") int pageSize, + @RequestParam("courseId") Integer courseId, HttpServletRequest request) { + +/* MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401, "登录已过期,请重新登录"); + } + MobileUserHaveCourse userHaveCourse = mobileUserHaveCourseMapper.selectOne(new LambdaQueryWrapper().eq(MobileUserHaveCourse::getMobileUserId, currentUser.getId()) + .eq(MobileUserHaveCourse::getCourseId, courseId)); + if (Objects.isNull(userHaveCourse)){ + return new Page<>(); + } + Page page = new Page<>(currentPage,pageSize); + Page chapterPage = chapterMapper.selectPage(page, new LambdaQueryWrapper().eq(Chapter::getCourseId, courseId)); + List chapters = chapterPage.getRecords(); + if (CollectionUtils.isEmpty(chapters)){ + return new Page<>(); + } + Collection chapterVOS = BeanCopyUtils.copyArrays(chapters, ChapterVO::new); + for (ChapterVO chapterVO : chapterVOS) { + MobileUserVideoProgress wxUserVideoProgress = mobileUserVideoProgressMapper.selectOne(new LambdaQueryWrapper() + .eq(MobileUserVideoProgress::getMobileUserId, currentUser.getId()) + .eq(MobileUserVideoProgress::getChapterId, chapterVO.getChapterId())); + if (Objects.isNull(wxUserVideoProgress)){ + chapterVO.setProgress(0); + }else { + chapterVO.setProgress(wxUserVideoProgress.getProgress()); + } + } + Page voPage = new Page<>(chapterPage.getCurrent(),chapterPage.getSize()); + voPage.setTotal(chapterPage.getTotal()); + voPage.setRecords((List) chapterVOS);*/ + + pageSize = 50; + Page page = new Page<>(currentPage,pageSize); + Page chapterPage = chapterMapper.selectPage(page, new LambdaQueryWrapper().eq(Chapter::getCourseId, courseId)); + List chapters = chapterPage.getRecords(); + if (CollectionUtils.isEmpty(chapters)){ + return new Page<>(); + } + Collection chapterVOS = BeanCopyUtils.copyArrays(chapters, ChapterVO::new); + Page voPage = new Page<>(chapterPage.getCurrent(),chapterPage.getSize()); + voPage.setTotal(chapterPage.getTotal()); + chapterVOS.forEach(chapterVO -> chapterVO.setProgress(80)); + voPage.setRecords((List) chapterVOS); + return voPage; + } + + @PostMapping("/reportWatch") + public ResultData reportWatch(@RequestBody @Validated VideoProgressVO videoProgressVO,HttpServletRequest request){ + /*MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401, "登录已过期,请重新登录"); + }*/ + /*String key = UniConstant.VIDEO_PROGRESS_CACHE + currentUser.getId() + ":" + videoProgressVO.getChapterId(); + HashOperations ops = redisTemplate.opsForHash(); + ops.put(key, "lastPosition", videoProgressVO.getLastPosition()); + ops.increment(key,"spentTime",videoProgressVO.getSpentTime()); + redisTemplate.expire(key, 10, TimeUnit.MINUTES); + return ResultData.success();*/ + /* MobileUserVideoProgress wxUserVideoProgress = mobileUserVideoProgressMapper.selectOne(new LambdaQueryWrapper().eq(MobileUserVideoProgress::getChapterId, videoProgressVO.getChapterId()) + .eq(MobileUserVideoProgress::getMobileUserId, currentUser.getId())); + if (Objects.isNull(wxUserVideoProgress)){ + MobileUserVideoProgress videoProgress = new MobileUserVideoProgress(); + videoProgress.setChapterId(videoProgressVO.getChapterId()); + videoProgress.setMobileUserId(currentUser.getId()); + videoProgress.setLastPosition(videoProgressVO.getLastPosition()); + videoProgress.setSpentTime(videoProgressVO.getSpentTime()); + videoProgress.setUpdateTime(LocalDateTime.now()); + Chapter chapter = chapterMapper.selectById(videoProgressVO.getChapterId()); + if (Objects.nonNull(chapter)){ + Integer p = (videoProgressVO.getLastPosition() * 100) / chapter.getVideoDuration(); + videoProgress.setProgress(p); + }else { + videoProgress.setProgress(0); + } + mobileUserVideoProgressMapper.insert(videoProgress); + }else { + wxUserVideoProgress.setSpentTime(videoProgressVO.getSpentTime()); + if (videoProgressVO.getLastPosition() > wxUserVideoProgress.getLastPosition()){ + wxUserVideoProgress.setLastPosition(videoProgressVO.getLastPosition()); + Chapter chapter = chapterMapper.selectById(videoProgressVO.getChapterId()); + if (Objects.nonNull(chapter)){ + Integer p = (videoProgressVO.getLastPosition() * 100) / chapter.getVideoDuration(); + wxUserVideoProgress.setProgress(p); + }else { + wxUserVideoProgress.setProgress(0); + } + } + mobileUserVideoProgressMapper.updateById(wxUserVideoProgress); + }*/ + return ResultData.success(); + } + + @PostMapping("/reportTotalDuration") + public ResultData reportTotalDuration(@RequestParam("totalDuration") Integer totalDuration,@RequestParam("chapterId") Integer chapterId){ + Chapter chapter = new Chapter(); + chapter.setChapterId(chapterId); + chapter.setVideoDuration(totalDuration); + chapterMapper.updateById(chapter); + return ResultData.success(); + } + + @PostMapping("/buyCourse") + public void buyCourse(@Validated @RequestBody BuyCourseVO vo){ + + } + + +} diff --git a/applet/src/main/java/cn/unizk/controller/DoubaoAIController.java b/applet/src/main/java/cn/unizk/controller/DoubaoAIController.java new file mode 100644 index 0000000..1097d2c --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/DoubaoAIController.java @@ -0,0 +1,91 @@ +package cn.unizk.controller; + +import cn.unizk.entity.vo.QuestionAnswerVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.SeverityVO; +import cn.unizk.exception.ServiceException; +import cn.unizk.service.impl.DoubaoServiceImpl; +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; + +import javax.annotation.Resource; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/5/12 15:37 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/doubao") +@Slf4j +public class DoubaoAIController { + + @Resource + private DoubaoServiceImpl doubaoService; + + @PostMapping("/getAnswer") + public ResultData getAnswer(@RequestBody QuestionAnswerVO vo){ + log.info("进入getAnswer接口,AI判断回答---------------"); + String input1 = String.format("问题:%s?回答:%s",vo.getQuestion(),vo.getAnswer()); + String input2 = "请判断:回答和问题是否相干?只需要回答【相干】或【不相干】,不要多余文字。"; + String result = doubaoService.drawConclusion(input1, input2); + ResultData data = new ResultData(); + if ("【相干】".equals(result)){ + data.setCode(200); + }else { + data.setCode(300); + } + return data; + } + + @PostMapping("/severity") + public ResultData severity(@RequestBody SeverityVO vo){ + if (Objects.isNull(vo)){ + throw new ServiceException("requestBody cannot empty"); + } + if (vo.getId() != 6 && vo.getId() != 8){ + throw new ServiceException("无效ID"); + } + ResultData data = new ResultData<>(); + data.setCode(200); + if (vo.getId() == 6){ + String input2 = "请判断:回答内容包含的时间是否小于或等于一个月?只需要回答【yes】或【no】,不要多余文字"; + String input1 = String.format("回答内容:%s",vo.getAnswer()); + String s = doubaoService.drawConclusion(input1, input2); + log.info("ai回复:",s); + if ("【yes】".contains(s)){ + data.setData("000"); + }else { + data.setData("111"); + } + return data; + } + if (vo.getId() == 8){ + String input2 = "假设回复内容是患者回复疼痛程度情况的,请判断:回复内容的疼痛程度是否是轻度或者比轻度更轻?只需要回答【yes】或【no】,不要多余文字"; + String input1 = String.format("回复内容:%s",vo.getAnswer()); + String s = doubaoService.drawConclusion(input1, input2); + log.info("豆包返回:",s); + if ("【yes】".contains(s)){ + data.setData("000"); + }else { + data.setData("111"); + } + return data; + } + throw new ServiceException("系统异常"); + } + + @PostMapping("/getReport") + public ResultData getReport(@RequestBody String text){ + String input2 = "请你将上述这句话用尽可能简洁的文字总结出来"; + String conclusion = doubaoService.drawConclusion(text, input2); + ResultData data = new ResultData<>(); + data.setCode(200); + data.setData(conclusion); + return data; + } +} diff --git a/applet/src/main/java/cn/unizk/controller/FileController.java b/applet/src/main/java/cn/unizk/controller/FileController.java new file mode 100644 index 0000000..5ee5382 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/FileController.java @@ -0,0 +1,51 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.SysFile; +import cn.unizk.entity.vo.MinioRespVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.enums.FileType; +import cn.unizk.exception.ServiceException; +import cn.unizk.service.FileService; +import cn.unizk.service.FileUploadService; +import com.google.common.collect.ImmutableSet; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.util.Set; + +/** + * @Author hao + * @Date 2025/10/9 17:19 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/file") +public class FileController { + + @Resource + private FileService fileService; + @Resource + private FileUploadService fileUploadService; + + @GetMapping("/getById/{id}") + public SysFile getById(@PathVariable("id") Integer id){ + return fileService.getById(id); + } + + @PostMapping("/uploadFile") + public ResultData uploadFile(@RequestParam("file") MultipartFile file){ + String originalFilename = file.getOriginalFilename(); + if (StringUtils.isBlank(originalFilename) || originalFilename.lastIndexOf(".") == -1){ + throw new ServiceException("文件格式不正确"); + } + String fileType = originalFilename.substring(originalFilename.lastIndexOf(".")); + Set types = ImmutableSet.of(".png",".jpg",".jpeg",".ico"); + if (!types.contains(fileType)){ + throw new ServiceException("目前只支持上传png,jpg,jpeg,ico类型文件"); + } + String bucketName = FileType.getMinioBucketName(file.getContentType()).getBucketName(); + return fileUploadService.simpleUpload(file, bucketName); + } +} diff --git a/applet/src/main/java/cn/unizk/controller/GolfController.java b/applet/src/main/java/cn/unizk/controller/GolfController.java new file mode 100644 index 0000000..75ef1d6 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/GolfController.java @@ -0,0 +1,136 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.Appointments; +import cn.unizk.entity.po.GolfCustInfo; +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.entity.po.MobileAppointments; +import cn.unizk.entity.vo.GrfReportVO; +import cn.unizk.entity.vo.GrfdialogueVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.mapper.*; +import cn.unizk.service.impl.DoubaoServiceImpl; +import cn.unizk.utils.JkSecurityUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * @Author hao + * @Date 2026/6/5 11:26 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/golf") +@Slf4j +public class GolfController { + + @Resource + private DoubaoServiceImpl doubaoService; + @Resource + private GolfCustInfoMapper golfCustInfoMapper; + @Resource + private MobileAppUserMapper mobileAppUserMapper; + @Resource + private MobileAppointmentsMapper mobileAppointmentsMapper; + + @PostMapping("/judgeOne") + public ResultData judgeOne(@Validated @RequestBody GrfdialogueVO vo){ + ResultData data = new ResultData(); + if (StringUtils.isBlank(vo.getQuestion())){ + String input1 = "请判断下面的回答是否是肩部,腰部,肘部,手腕,膝关节,髋关节,颈部,踝关节有关这8个部位的内容,只需要回答是或不是。"; + String s = doubaoService.drawConclusion(input1, vo.getAnswer()); + log.info(s); + System.out.println(String.format("【%s】",s)); + if ("是".equals(s)){ + data.setCode(200); + return data; + } + data.setCode(300); + return data; + }else { + String question = vo.getQuestion(); + switch (question){ + case "2": + vo.setQuestion("请问您肌肉发紧僵硬吗?"); + break; + case "3": + vo.setQuestion("请问您关节活动怎么样?"); + break; + case "4": + vo.setQuestion("请问您挥杆有没有不适症状?"); + break; + } + String input1 = String.format("问题:%s;回答:%s",vo.getQuestion(),vo.getAnswer()); + String input2 = "请判断:回答和问题是否相干?只需要回答相干或不相干,不要多余文字。"; + String s = doubaoService.drawConclusion(input1, input2); + if ("相干".equals(s)){ + data.setCode(200); + }else { + data.setCode(300); + } + return data; + } + } + + @PostMapping("/saveCustInfo") + public ResultData saveCustInfo(@Validated @RequestBody GolfCustInfo custInfo){ + golfCustInfoMapper.insert(custInfo); + return ResultData.success(custInfo.getId()); + } + + @PostMapping("/getReport") + public ResultData getReport(@RequestParam("id") Integer id, + HttpServletRequest request, + @RequestBody GrfReportVO vo){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + GolfCustInfo golfCustInfo = golfCustInfoMapper.selectById(id); + String sex = golfCustInfo.getGender() == 0 ? "女" : "男"; + StringBuilder sb = new StringBuilder(); + sb.append("就诊人:").append(golfCustInfo.getCustName()) + .append("性别:").append(sex).append("年龄:").append(golfCustInfo.getAge()) + .append("高尔夫球龄:").append(golfCustInfo.getGolfingAge()) + .append("每周打球次数:").append(golfCustInfo.getWeekFrequency()) + .append("患者陈述:").append(vo.getAnswer1()).append(",").append(vo.getAnswer2()) + .append(",").append(vo.getAnswer3()).append(",").append(vo.getAnswer4()); + + String conclusion = doubaoService.drawConclusion("请你把下面内容总结成一段话,并且这段话要包括病情分析,比如是得了肩周炎,腰椎间盘突出还是其他什么病,并给出调理建议", sb.toString()); + vo.setReport(conclusion); + vo.setName(golfCustInfo.getCustName()); + vo.setGender(golfCustInfo.getGender()==0 ? "女" : "男"); + vo.setAge(golfCustInfo.getAge()); + vo.setPhoneNumber(golfCustInfo.getPhoneNumber()); + vo.setGolfingAge(golfCustInfo.getGolfingAge()); + vo.setWeekFrequency(golfCustInfo.getWeekFrequency()); + new Thread(() -> { + List numbers = new ArrayList<>(); + for (int i = 1; i <= 13; i++) { + numbers.add(i); + } + Collections.shuffle(numbers); + MobileAppUser user = new MobileAppUser(); + user.setId((currentUser).getId()); + user.setPainNumber(String.valueOf(numbers.get(0)) + "," + numbers.get(1)); + mobileAppUserMapper.updateById(user); + }).start(); + return ResultData.success(vo); + + } + + @PostMapping("/evaluation") + public ResultData evaluation(@RequestBody MobileAppointments appointments){ + MobileAppointments app = new MobileAppointments(); + app.setId(appointments.getId()); + app.setTreatRating(appointments.getTreatRating()); + app.setEvaluation(appointments.getEvaluation()); + app.setStatus("commented"); + mobileAppointmentsMapper.updateById(app); + return ResultData.success(); + } +} diff --git a/applet/src/main/java/cn/unizk/controller/H5ComboController.java b/applet/src/main/java/cn/unizk/controller/H5ComboController.java new file mode 100644 index 0000000..9665889 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/H5ComboController.java @@ -0,0 +1,198 @@ +package cn.unizk.controller; + +import cn.unizk.constant.UniConstant; +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.ComboVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.enums.OrderStatus; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.MobileAppUserMapper; +import cn.unizk.mapper.MobileOrderMapper; +import cn.unizk.mapper.PhysioSchedulesMapper; +import cn.unizk.mapper.UserDeviceTreatRecordMapper; +import cn.unizk.service.ComboService; +import cn.unizk.service.DeviceService; +import cn.unizk.service.WxUserService; +import cn.unizk.utils.AESUtil; +import cn.unizk.utils.SendSmsUtil; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; + +/** + * @Author hao + * @Date 2025/9/11 12:00 + * @Version 1.0 + **/ +@Slf4j +@RestController +@RequestMapping("/h5") +@CrossOrigin(origins = {"http://369.peaktcm.com:9000","http://peaktcm.com","http://peaktcm.com:9000","http://139.9.2.195:8080"},allowCredentials = "true", +exposedHeaders = {"Authorization"}) +public class H5ComboController { + + @Resource + private MobileOrderMapper mobileOrderMapper; + @Resource + private ComboService comboService; + @Resource + private MobileAppUserMapper mobileAppUserMapper; + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + @Resource + private UserDeviceTreatRecordMapper treatRecordMapper; + @Resource + private DeviceService deviceService; + @Resource + private PhysioSchedulesMapper physioSchedulesMapper; + + @GetMapping("/getCombos") + public List getCombos(HttpServletResponse response, @RequestParam("deviceId") String deviceId, @RequestParam("phoneNumber") String phoneNumber, + @RequestParam("code") String code){ + log.info("deviceId={},phoneNumber={},code={}",deviceId,phoneNumber,code); + validatePhoneCode(phoneNumber,code); + MobileAppUser one = mobileAppUserMapper.selectOne(new LambdaQueryWrapper().eq(MobileAppUser::getPhoneNumber, phoneNumber)); + if (Objects.isNull(one)){ + throw new ServiceException("您不是吉客中医微信小程序的用户"); + } + List wxOrders = mobileOrderMapper.selectList(new LambdaQueryWrapper() + .eq(MobileOrder::getMobileUserId, one.getId()) + .eq(MobileOrder::getDeviceId, deviceId) + .in(MobileOrder::getStatus,OrderStatus.paid.name(),OrderStatus.unverified.name()) + .isNotNull(MobileOrder::getComboId)); + if (CollectionUtils.isEmpty(wxOrders)){ + throw new ServiceException("抱歉,您在此设备上没有购买套餐"); + } + String encrypt = phoneNumber; + try { + encrypt = AESUtil.encrypt(phoneNumber); + } catch (Exception e) { + log.error("手机号加密异常",e); + } + response.setHeader("Authorization",encrypt); + response.setHeader("Access-Control-Expose-Headers", "Authorization"); + List list = new ArrayList<>(); + for (MobileOrder wxOrder : wxOrders) { + Combo combo = comboService.getById(wxOrder.getComboId()); + ComboVO vo = new ComboVO(); + BeanUtils.copyProperties(combo,vo); + vo.setOrderId(wxOrder.getOrderId()); + list.add(vo); + } + return list; + } + + @GetMapping("/sendPhoneCode") + public ResultData sendPhoneCode(@RequestParam("phoneNumber") String phoneNumber){ + String code = RandomStringUtils.randomNumeric(6); + /*redisTemplate.opsForValue().set("h5:"+phoneNumber,"888888"); + return ResultData.success();*/ + try { + String s = SendSmsUtil.sendPhoneCode(phoneNumber, code); + JSONObject res = JSONObject.parseObject(s); + Integer statusCode = res.getInteger("statusCode"); + if (statusCode != null && statusCode == 200){ + redisTemplate.opsForValue().set("h5:"+phoneNumber,code,300, TimeUnit.SECONDS); + return ResultData.success(); + } + return ResultData.failure(500,"验证码发送失败"); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + throw new ServiceException("验证码发送失败"); + } + } + + @GetMapping("/writeOff") + public int writeOff(HttpServletRequest request,@RequestParam("orderId") String orderId){ + String encrypt = request.getHeader("Token"); + if (StringUtils.isBlank(encrypt)){ + throw new ServiceException("No permission"); + } + String decrypt = encrypt; + try { + decrypt = AESUtil.decrypt(encrypt); + } catch (Exception e) { + log.error("手机号解密异常",e); + } +// MobileOrder wxOrder = orderService.getOrderByIdAndPhone(orderId, decrypt); + MobileOrder mobileOrder = mobileOrderMapper.selectOrderByIdAndPhone(orderId, decrypt); + if (Objects.isNull(mobileOrder)){ + throw new ServiceException("No permission"); + } + if (!OrderStatus.unverified.name().equals(mobileOrder.getStatus())){ + throw new ServiceException("该套餐已核销过了!"); + } + Combo combo = comboService.getById(mobileOrder.getComboId()); + if (Objects.isNull(combo) || StringUtils.isBlank(combo.getDeviceId())){ + throw new ServiceException("套餐或设备不存在,无法核销!"); + } + Device dv = deviceService.getById(combo.getDeviceId()); + if (dv.getTreatStatus() == 1 || dv.getOperatingStatus() == 0){ + throw new ServiceException("此设备正在被使用,等待使用完再进行核销!"); + } + UserDeviceTreatRecord treatRecord = new UserDeviceTreatRecord(); + treatRecord.setDeviceId(combo.getDeviceId()); + treatRecord.setUserId(mobileOrder.getMobileUserId()); + treatRecord.setCreateTime(LocalDateTime.now()); + treatRecordMapper.insert(treatRecord); + Device device = new Device(); + device.setDeviceId(combo.getDeviceId()); + device.setTreatStatus(1); + deviceService.updateById(device); + mobileOrder.setStatus(OrderStatus.verified.name()); + String redisKey = UniConstant.REDIS_CURRENT_DEVICE_USER + dv.getDeviceId(); + redisTemplate.opsForValue().set(redisKey,mobileOrder.getMobileUserId(),10,TimeUnit.MINUTES); + return mobileOrderMapper.updateById(mobileOrder); + } + + @GetMapping("/getAuthQrcode") + public void getAuthQrcode(HttpServletResponse response){ +// QRcodeUtil.generateQrcode(response); + } + + private void validatePhoneCode(String phone,String code){ + String cacheCode = (String) redisTemplate.opsForValue().get("h5:"+phone); + if (StringUtils.isBlank(cacheCode) || !cacheCode.equals(code)){ + throw new ServiceException("验证码错误"); + } + redisTemplate.delete("h5:"+phone); + } + + + @GetMapping("/addData") + public Integer addData(){ + List slotCodes = Lists.newArrayList("M1","M2","M3","A1","A2","A3","A4"); + List list = new ArrayList<>(); + for (String slotCode : slotCodes) { + PhysioSchedules physioSchedules = new PhysioSchedules(); + physioSchedules.setPhysioId(8); + physioSchedules.setTimeSlotCode(slotCode); + physioSchedules.setMaxBookings(1); + physioSchedules.setActive(1); + list.add(physioSchedules); + } + physioSchedulesMapper.insert(list); + return 1; + } + +} diff --git a/applet/src/main/java/cn/unizk/controller/H5PowerOnController.java b/applet/src/main/java/cn/unizk/controller/H5PowerOnController.java new file mode 100644 index 0000000..761206f --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/H5PowerOnController.java @@ -0,0 +1,36 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.Device; +import cn.unizk.huifupay.config.properties.HuiFuProperties; +import cn.unizk.service.DeviceService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import javax.annotation.Resource; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/3/10 17:39 + * @Version 1.0 + **/ +@Controller +@RequestMapping("/h5/scan") +public class H5PowerOnController { + + @Resource + private DeviceService deviceService; + @Resource + private HuiFuProperties huiFuProperties; + + @GetMapping("/toPayPage") + public String toPayPage(@RequestParam("deviceId") String deviceId){ + Device device = deviceService.getById(deviceId); + if (Objects.isNull(device) || device.getForcePay() != 1){ + return "redirect:/h5/hello.html?deviceId=" + deviceId; + } + return "redirect:/h5/pay.html?deviceId=" + deviceId; + } +} diff --git a/applet/src/main/java/cn/unizk/controller/HuiFuPayController.java b/applet/src/main/java/cn/unizk/controller/HuiFuPayController.java new file mode 100644 index 0000000..624cdd9 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/HuiFuPayController.java @@ -0,0 +1,210 @@ +package cn.unizk.controller; + +import cn.hutool.core.date.DateUtil; +import cn.unizk.config.WxProperties; +import cn.unizk.entity.po.MobileOrder; +import cn.unizk.entity.vo.MobileOrderVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.enums.OrderStatus; +import cn.unizk.huifupay.config.properties.HuiFuProperties; +import cn.unizk.huifupay.utils.HfUtil; +import cn.unizk.huifupay.utils.HuifuSignUtil; +import cn.unizk.mapper.MobileOrderMapper; +import cn.unizk.service.PayService; +import cn.unizk.utils.HttpUtil; +import cn.unizk.wxPay.vo.WxPlaceOrderResVO; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.http.HttpEntity; +import org.apache.http.HttpStatus; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.*; +import java.net.URLDecoder; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.time.Clock; +import java.time.LocalDateTime; +import java.util.*; + +/** + * @Author hao + * @Date 2025/9/29 11:31 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/huifuPay") +@Slf4j +public class HuiFuPayController { + + @Resource + private HuiFuProperties huiFuProperties; + @Resource + private WxProperties wxProperties; + + @Resource(name = "huifu") + private PayService payService; + @Resource + private MobileOrderMapper mobileOrderMapper; + + @PostMapping("/placeOrder") + public WxPlaceOrderResVO placeOrder(@RequestBody MobileOrderVO vo){ + return payService.wxPlaceOrder(vo); + } + + @PostMapping("/configureApplet") + public String configureApplet(){ + return payService.configureApplet(); + } + + @PostMapping("/realNameCheck") + public ResultData realNameCheck(){ + JSONObject object = JSONObject.of(); + object.put("sys_id",huiFuProperties.getHuifuId()); + object.put("product_id",huiFuProperties.getProductId()); + JSONObject data = JSONObject.of(); + data.put("req_seq_id",HfUtil.getReqSeqId()); + data.put("req_date",DateUtil.format(new Date(),"yyyyMMdd")); + data.put("huifu_id",huiFuProperties.getHuifuId()); + data.put("pay_scene","02"); + data.put("owner","Y"); + data.put("identification_address","山东省青岛市市北区包头路24号甲"); + JSONArray jsonArray = new JSONArray(); + JSONObject ubo_info_list = JSONObject.of(); + ubo_info_list.put("ubo_id_doc_type","00"); + ubo_info_list.put("ubo_id_doc_copy","d36573e8-beda-34d8-9647-ee75d02e6f6b"); + ubo_info_list.put("ubo_id_doc_copy_back","c7ed0c5e-bb3a-31b6-ac1d-37c02c702da9"); + ubo_info_list.put("ubo_id_doc_name","陈静"); + ubo_info_list.put("ubo_id_doc_number","370203197102050021"); + ubo_info_list.put("ubo_id_doc_address","山东省青岛市市北区包头路24号甲"); + ubo_info_list.put("ubo_period_begin","20150902"); + ubo_info_list.put("ubo_period_end","20350902"); + jsonArray.add(ubo_info_list); + data.put("ubo_info_list",jsonArray.toString()); + data.put("name","陈静"); + data.put("mobile","13686435231"); + data.put("id_card_number","370203197102050021"); + data.put("contact_type","LEGAL"); + object.put("data",data); + String sign = HuifuSignUtil.sign(data, huiFuProperties.getPrivateKey()); + object.put("sign",sign); + String url = "https://api.huifu.com/v2/merchant/busi/realname"; + log.info("参数:{}",object); + String s = HttpUtil.doPostJson(url, null, object); + log.info("汇付实名认证返回:{}",s); + return ResultData.success(JSONObject.parseObject(s)); + } + + @PostMapping("/uploadHfData") + public String uploadHfData(@RequestParam("file")MultipartFile file,@RequestParam("fileType") String fileType){ + //图片上传接口地址 + String url = "https://api.huifu.com/v2/supplementary/picture"; + // 请求参数 + Map params = new HashMap(); + // 请求流水号,需保证当天商户下唯一,推荐采用日期时间+几位流水号的形式 + params.put("req_seq_id", HfUtil.getReqSeqId()); + params.put("req_date", DateUtil.format(new Date(),"yyyyMMdd")); + params.put("file_type", fileType); + //如果商户还未成功进件huifu_id可以为空 + params.put("huifu_id", huiFuProperties.getHuifuId()); + String data = JSON.toJSONString(params); + log.info("data={}",data); + + CloseableHttpClient httpclient1 = HttpClients.createDefault(); + CloseableHttpResponse response = null; + String result = null; + + try { + File tempFile = File.createTempFile("upload", ".jpg"); + file.transferTo(tempFile); + HttpPost httpPost = new HttpPost(url); + ContentType contentType = ContentType.create("text/plain", Charset.forName("UTF-8")); + MultipartEntityBuilder mEntityBuilder = MultipartEntityBuilder.create(); + mEntityBuilder.addTextBody("sys_id", huiFuProperties.getHuifuId(), contentType); + mEntityBuilder.addTextBody("product_id", huiFuProperties.getProductId(), contentType); + mEntityBuilder.addTextBody("data", data, contentType); + mEntityBuilder.addBinaryBody("file", tempFile); + + httpPost.setEntity(mEntityBuilder.build()); + response = httpclient1.execute(httpPost); + int statusCode = response.getStatusLine().getStatusCode(); + if (statusCode == HttpStatus.SC_OK) { + HttpEntity resEntity = response.getEntity(); + result = EntityUtils.toString(resEntity); + System.out.print(result); + tempFile.deleteOnExit(); + return result; + } + } catch (IOException e) { + e.printStackTrace(); + } + return "fail"; + } + + @PostMapping("/callback") + public String callback(@RequestBody String messageBody){ + log.info("汇付支付成功回调数据:{}",messageBody); + try { + String decode = URLDecoder.decode(messageBody, "utf-8"); + String resp_data = decode.split("&resp_data=")[1]; + JSONObject jsonObject = JSONObject.parseObject(resp_data); + String trans_stat = jsonObject.getString("trans_stat"); + String req_seq_id = jsonObject.getString("req_seq_id"); + List wxOrders = mobileOrderMapper.selectList(new LambdaQueryWrapper().eq(MobileOrder::getOutTradeNo, req_seq_id)); + if (CollectionUtils.isEmpty(wxOrders)){ + log.info("查无此单,交易流水号:{}",req_seq_id); + return "fail"; + } + if ("S".equals(trans_stat)){ + log.info("交易成功"); + //修改订单状态 + for (MobileOrder wxOrder : wxOrders) { + if (wxOrder.getComboId() != null){ + wxOrder.setDeliveryWay("自提"); + } + if (wxOrder.getComboId() != null || wxOrder.getDeliveryWay().equals("自提")){ + wxOrder.setStatus(OrderStatus.unverified.name()); + }else if (wxOrder.getComboId() == null && wxOrder.getDeliveryWay().equals("配送")){ + wxOrder.setStatus(OrderStatus.not_shipped.name()); + }else if(wxOrder.getDeliveryWay().equals("配送")){ + wxOrder.setStatus(OrderStatus.not_shipped.name()); + }else if(StringUtils.isNotBlank(wxOrder.getReceivingAddress())){ + wxOrder.setStatus(OrderStatus.not_shipped.name()); + }else { + wxOrder.setStatus(OrderStatus.paid.name()); + } + wxOrder.setPayTime(LocalDateTime.now(Clock.systemDefaultZone())); + mobileOrderMapper.updateById(wxOrder); + } + return "success"; + }else if ("F".equals(trans_stat)){ + log.info("交易失败"); + return "fail"; + } + } catch (UnsupportedEncodingException e) { + log.error("支付回调解码失败",e); + return "fail"; + } + return "fail"; + } + + @RequestMapping("/configureAppletCallback") + public String configureAppletCallback(@RequestBody String messageBody){ + log.info("汇付配置微信商户小程序审核消息:{}",messageBody); + return "success"; + } +} diff --git a/applet/src/main/java/cn/unizk/controller/HuiFuVendorPayController.java b/applet/src/main/java/cn/unizk/controller/HuiFuVendorPayController.java new file mode 100644 index 0000000..67c9db7 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/HuiFuVendorPayController.java @@ -0,0 +1,79 @@ +package cn.unizk.controller; + +import cn.unizk.entity.dto.CashOutDTO; +import cn.unizk.entity.dto.CashOutResponse; +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.entity.vo.PayCourseVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.exception.ServiceException; +import cn.unizk.huifupay.dto.HuifuPlaceOrderParamBaseDTO; +import cn.unizk.huifupay.service.HuiFuVendorPayService; +import cn.unizk.huifupay.vo.DeviceScanPayVO; +import cn.unizk.huifupay.vo.RechargeVO; +import cn.unizk.utils.JkSecurityUtil; +import cn.unizk.wxPay.vo.WxPlaceOrderResVO; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/3/11 14:14 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/huiFuVendor") +public class HuiFuVendorPayController { + + @Resource + private HuiFuVendorPayService vendorPayService; + + @PostMapping("/pay") + public WxPlaceOrderResVO pay(@RequestBody DeviceScanPayVO vo, HttpServletRequest request){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser) || !currentUser.getId().equals(vo.getUserId())){ + throw new ServiceException(401,"非法访问!"); + } + vo.setUserId(currentUser.getId()); + return vendorPayService.vendorPay(vo); + } + + @PostMapping("/cashOut") + public CashOutResponse cashOut(@RequestBody CashOutDTO dto){ + return vendorPayService.profitSharingPay(dto); + + } + + @PostMapping("/coursePay") + public WxPlaceOrderResVO coursePay(@RequestBody PayCourseVO vo,HttpServletRequest request){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser) || !currentUser.getId().equals(vo.getUserId())){ + throw new ServiceException(401,"非法访问!"); + } + vo.setUserId(currentUser.getId()); + return vendorPayService.coursePay(vo); + } + + @PostMapping("/vipRecharge") + public WxPlaceOrderResVO vipRecharge(@RequestBody RechargeVO vo,HttpServletRequest request){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (currentUser == null || !currentUser.getId().equals(vo.getUserId())){ + throw new ServiceException(401,"非法访问!"); + } + vo.setUserId(currentUser.getId()); + return vendorPayService.recharge(vo); + } + + @PostMapping("/activeMembership") + public WxPlaceOrderResVO activeMembership(@RequestBody HuifuPlaceOrderParamBaseDTO dto,HttpServletRequest request){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (currentUser == null || !currentUser.getId().equals(dto.getUserId())){ + throw new ServiceException(401,"非法访问!"); + } + dto.setUserId(currentUser.getId()); + return vendorPayService.activeMembership(dto); + } + +} diff --git a/applet/src/main/java/cn/unizk/controller/HuifuWebhookController.java b/applet/src/main/java/cn/unizk/controller/HuifuWebhookController.java new file mode 100644 index 0000000..48690f0 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/HuifuWebhookController.java @@ -0,0 +1,307 @@ +package cn.unizk.controller; + +import cn.unizk.constant.UniConstant; +import cn.unizk.entity.dto.HuifuSyncRefundResDTO; +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.enums.OrderAfterSaleStatus; +import cn.unizk.enums.OrderStatus; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.*; +import cn.unizk.service.WxUserService; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.google.gson.Gson; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.transaction.annotation.Transactional; +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 javax.annotation.Resource; +import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.net.URLDecoder; +import java.time.Clock; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * @Author hao + * @Date 2025/10/23 15:56 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/hf/webhook") +@Slf4j +public class HuifuWebhookController { + + @Resource + private MobileOrderMapper mobileOrderMapper; + @Resource + private DeviceMapper deviceMapper; + @Resource + private StoreAccountMapper storeAccountMapper; + @Resource + private JkStoreMapper jkStoreMapper; + @Resource + private MobileAppUserMapper mobileAppUserMapper; + @Resource + private MobileUserHaveCourseMapper mobileUserHaveCourseMapper; + @Resource + private ChildStoreAccountMapper childStoreAccountMapper; + @Resource(name = "kryoRedisTemplate") + private RedisTemplate redisTemplate; + @Resource + private WxVipRechargeMapper vipRechargeMapper; + @Resource + private MobileAppUserAccountMapper mobileAppUserAccountMapper; + + + @PostMapping("/refundCallback") + public String refundCallback(@RequestBody String body) throws UnsupportedEncodingException { + log.info("退款回调接口收到请求参数:{}",body); + String decode = URLDecoder.decode(body, "utf-8"); + String resp_data = decode.split("&resp_data=")[1]; + JSONObject jsonObject = JSONObject.parseObject(resp_data); + String sub_resp_code = jsonObject.getString("sub_resp_code"); + if ("00000000".equals(sub_resp_code)){ + String req_seq_id = jsonObject.getString("req_seq_id"); + List wxOrders = mobileOrderMapper.selectList(new LambdaQueryWrapper().eq(MobileOrder::getRefundReqSeqId, req_seq_id)); + if (CollectionUtils.isNotEmpty(wxOrders)){ + log.info("此订单是微信小程序订单,交易流水号:{}",req_seq_id); + String trans_stat = jsonObject.getString("trans_stat"); + if ("S".equals(trans_stat)){ + for (MobileOrder wxOrder : wxOrders) { + wxOrder.setStatus(OrderStatus.refunded.name()); + wxOrder.setRefundFinishTime(LocalDateTime.now()); + if (wxOrder.getAfterSaleStatus().equals(OrderAfterSaleStatus.ONLY_TUI_KUAN.getKey())){ + wxOrder.setAfterSaleStatus(OrderAfterSaleStatus.TUI_KUAN_SUCCESS.getKey()); + } + if (wxOrder.getAfterSaleStatus().equals(OrderAfterSaleStatus.TUI_HUO_TUI_KUAN.getKey())){ + wxOrder.setAfterSaleStatus(OrderAfterSaleStatus.TUI_HUO_TUI_KUAN_SUCCESS.getKey()); + } + } + mobileOrderMapper.updateById(wxOrders); + return "ok"; + }else if ("F".equals(trans_stat)){ + log.info("退款失败,原因:{}",jsonObject.getString("sub_resp_desc")); + }else if ("P".equals(trans_stat)){ + log.info("交易中交易中交易中交易中交易中交易中交易中交易中交易中"); + } + }else { + List mobileOrders = mobileOrderMapper.selectList(new LambdaQueryWrapper().eq(MobileOrder::getRefundReqSeqId, req_seq_id)); + if (CollectionUtils.isNotEmpty(mobileOrders)){ + log.info("此订单是微信小程序订单,交易流水号:{}",req_seq_id); + String trans_stat = jsonObject.getString("trans_stat"); + if ("S".equals(trans_stat)){ + for (MobileOrder mobileOrder : mobileOrders) { + mobileOrder.setStatus(OrderStatus.refunded.name()); + mobileOrder.setRefundFinishTime(LocalDateTime.now()); + if (mobileOrder.getAfterSaleStatus().equals(OrderAfterSaleStatus.ONLY_TUI_KUAN.getKey())){ + mobileOrder.setAfterSaleStatus(OrderAfterSaleStatus.TUI_KUAN_SUCCESS.getKey()); + } + if (mobileOrder.getAfterSaleStatus().equals(OrderAfterSaleStatus.TUI_HUO_TUI_KUAN.getKey())){ + mobileOrder.setAfterSaleStatus(OrderAfterSaleStatus.TUI_HUO_TUI_KUAN_SUCCESS.getKey()); + } + } + mobileOrderMapper.updateById(mobileOrders); + return "ok"; + }else if ("F".equals(trans_stat)){ + log.info("退款失败,原因:{}",jsonObject.getString("sub_resp_desc")); + }else if ("P".equals(trans_stat)){ + log.info("交易中交易中交易中交易中交易中交易中交易中交易中交易中"); + } + }else { + log.info("微信小程序和APP端都查不到该订单,交易流水号:{}",req_seq_id); + return "fail"; + } + } + }else { + log.info("退款失败,原因:{}",jsonObject.getString("sub_resp_desc")); + } + return "fail"; + } + + @PostMapping("/vendorPaySuccess") + @Transactional(rollbackFor = Exception.class) + public String callback(@RequestBody String messageBody){ + log.info("汇付商户支付成功回调数据:{}",messageBody); + try { + String decode = URLDecoder.decode(messageBody, "utf-8"); + String resp_data = decode.split("&resp_data=")[1]; + JSONObject jsonObject = JSONObject.parseObject(resp_data); + String trans_stat = jsonObject.getString("trans_stat"); + String req_seq_id = jsonObject.getString("req_seq_id"); + List wxOrders = mobileOrderMapper.selectList(new LambdaQueryWrapper().eq(MobileOrder::getOutTradeNo, req_seq_id)); + if (CollectionUtils.isEmpty(wxOrders)){ + log.info("查无此单,交易流水号:{}",req_seq_id); + return "fail"; + } + MobileOrder wxOrder = wxOrders.get(0); + if (OrderStatus.paid.name().equals(wxOrder.getStatus())){ + return "success"; + } + if ("S".equals(trans_stat)){ + log.info("交易成功"); + //修改订单状态 + if (wxOrder.getOrderType() != null && wxOrder.getOrderType() == 1){ + scanPay(wxOrder); + }else if (wxOrder.getOrderType() != null && wxOrder.getOrderType() == 3){ + coursePay(wxOrder); + }else if (wxOrder.getOrderType() != null && wxOrder.getOrderType() == 4){ + vipRecharge(wxOrder); + }else if (wxOrder.getOrderType() != null && wxOrder.getOrderType() == 6){ + activeMember(wxOrder); + } + + return "success"; + }else if ("F".equals(trans_stat)){ + log.info("交易失败"); + return "fail"; + } + } catch (UnsupportedEncodingException e) { + log.error("支付回调解码失败",e); + return "fail"; + } + return "fail"; + } + + private void activeMember(MobileOrder wxOrder){ + wxOrder.setStatus(OrderStatus.paid.name()); + wxOrder.setPayTime(LocalDateTime.now()); + mobileOrderMapper.updateById(wxOrder); + MobileAppUser wxUser = mobileAppUserMapper.selectOne(new LambdaQueryWrapper().eq(MobileAppUser::getId, wxOrder.getMobileUserId())); + wxUser.setHasMember(1); + mobileAppUserMapper.updateById(wxUser); + } + + private void scanPay(MobileOrder wxOrder){ + wxOrder.setStatus(OrderStatus.paid.name()); + Device device = deviceMapper.selectById(wxOrder.getDeviceId()); + wxOrder.setStoreId(device.getStoreId()); + wxOrder.setPayTime(LocalDateTime.now()); + mobileOrderMapper.updateById(wxOrder); + + /* JkStore jkStore = jkStoreMapper.selectById(device.getStoreId()); + List childStoreAccounts = childStoreAccountMapper.selectList(new LambdaQueryWrapper().eq(ChildStoreAccount::getStoreId, jkStore.getId())); + if (CollectionUtils.isEmpty(childStoreAccounts)){ + singleFz(wxOrder,jkStore); + }else { + multipleFz(wxOrder,jkStore,childStoreAccounts); + }*/ + device.setDeviceId(wxOrder.getDeviceId()); + device.setStatus("1"); + device.setForcePay(2); + deviceMapper.updateById(device); + try { + redisTemplate.opsForValue().set(UniConstant.DEVICE_ID+device.getDeviceId(),wxOrder.getMobileUserId(),24, TimeUnit.HOURS); + }catch (Exception e){ + log.info("将理疗用户加入缓存发生异常,{}",e.getMessage()); + } + } + + private void singleFz(MobileOrder wxOrder,JkStore jkStore){ + StoreAccount storeAccount = storeAccountMapper.selectOne(new LambdaQueryWrapper().eq(StoreAccount::getStoreId, jkStore.getId())); + if (Objects.isNull(storeAccount)){ + StoreAccount account = new StoreAccount(); + account.setStoreId(jkStore.getId()); + BigDecimal amount = wxOrder.getTotalPrice().multiply(jkStore.getProfitSharingPercentage()).divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN); + log.info("门店ID->{},分得的金额是:{},=================",jkStore.getId(),amount); + account.setBalance(amount); + account.setAvailableBalance(amount); + account.setFreezeBalance(BigDecimal.valueOf(0.00)); + storeAccountMapper.insert(account); + }else { + BigDecimal amount = wxOrder.getTotalPrice().multiply(jkStore.getProfitSharingPercentage()).divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN); + BigDecimal balance = storeAccount.getBalance().add(amount); + BigDecimal avaBalance = storeAccount.getAvailableBalance().add(amount); + log.info("门店ID->{},分得的金额是:{},+++++++++++++++++++",jkStore.getId(),amount); + storeAccount.setBalance(balance); + storeAccount.setAvailableBalance(avaBalance); + storeAccountMapper.updateById(storeAccount); + } + } + + private void multipleFz(MobileOrder wxOrder,JkStore jkStore,List childStoreAccounts){ + StoreAccount storeAccount = storeAccountMapper.selectOne(new LambdaQueryWrapper().eq(StoreAccount::getStoreId, jkStore.getId())); + if (Objects.isNull(storeAccount)){ + StoreAccount account = new StoreAccount(); + account.setStoreId(jkStore.getId()); + BigDecimal amount = wxOrder.getTotalPrice().multiply(jkStore.getProfitSharingPercentage()).divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN); + BigDecimal totalPercent = new BigDecimal("0.00"); + for (ChildStoreAccount childStoreAccount : childStoreAccounts) { + totalPercent = totalPercent.add(childStoreAccount.getPercentage()); + } + BigDecimal surPercent = new BigDecimal("100.00").subtract(totalPercent); + BigDecimal masterStoreAmount = amount.multiply(surPercent).divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN); + log.info("多方分账,主门店门店ID->{},分得的金额是:{},",jkStore.getId(),masterStoreAmount); + account.setBalance(masterStoreAmount); + account.setAvailableBalance(masterStoreAmount); + account.setFreezeBalance(BigDecimal.valueOf(0.00)); + storeAccountMapper.insert(account); + for (ChildStoreAccount childStoreAccount : childStoreAccounts) { + BigDecimal b = amount.multiply(childStoreAccount.getPercentage()).divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN); + childStoreAccount.setAccountBalance(childStoreAccount.getAccountBalance().add(b)); + } + childStoreAccountMapper.updateById(childStoreAccounts); + }else { + BigDecimal amount = wxOrder.getTotalPrice().multiply(jkStore.getProfitSharingPercentage()).divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN); + BigDecimal totalPercent = new BigDecimal("0.00"); + for (ChildStoreAccount childStoreAccount : childStoreAccounts) { + totalPercent = totalPercent.add(childStoreAccount.getPercentage()); + } + BigDecimal surPercent = new BigDecimal("100.00").subtract(totalPercent); + BigDecimal masterStoreAmount = amount.multiply(surPercent).divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN); + log.info("多方分账,主门店门店ID->{},分得的金额是:{},",jkStore.getId(),masterStoreAmount); + storeAccount.setBalance(storeAccount.getBalance().add(masterStoreAmount)); + storeAccount.setAvailableBalance(storeAccount.getAvailableBalance().add(masterStoreAmount)); + storeAccountMapper.updateById(storeAccount); + for (ChildStoreAccount childStoreAccount : childStoreAccounts) { + BigDecimal b = amount.multiply(childStoreAccount.getPercentage()).divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN); + childStoreAccount.setAccountBalance(childStoreAccount.getAccountBalance().add(b)); + } + childStoreAccountMapper.updateById(childStoreAccounts); + } + } + + private void coursePay(MobileOrder wxOrder){ + wxOrder.setStatus(OrderStatus.paid.name()); + wxOrder.setPayTime(LocalDateTime.now()); + mobileOrderMapper.updateById(wxOrder); + MobileAppUser wxUser = mobileAppUserMapper.selectOne(new LambdaQueryWrapper().eq(MobileAppUser::getId, wxOrder.getMobileUserId())); + MobileUserHaveCourse userHaveCourse = new MobileUserHaveCourse(); + userHaveCourse.setBuyTime(LocalDateTime.now()); + userHaveCourse.setMobileUserId(wxUser.getId()); + userHaveCourse.setCourseId(wxOrder.getCourseId()); + userHaveCourse.setStatus(1); + mobileUserHaveCourseMapper.insert(userHaveCourse); + } + + public void vipRecharge(MobileOrder wxOrder){ + wxOrder.setStatus(OrderStatus.paid.name()); + wxOrder.setPayTime(LocalDateTime.now()); + mobileOrderMapper.updateById(wxOrder); + WxVipRecharge vipRecharge = vipRechargeMapper.selectOne(new LambdaQueryWrapper().eq(WxVipRecharge::getOrderId, wxOrder.getOrderId())); + vipRecharge.setPayStatus(1); + vipRechargeMapper.updateById(vipRecharge); + BigDecimal totalAmount = vipRecharge.getRechargeAmount().add(vipRecharge.getPresentAmount()); + MobileAppUserAccount wxUserAccount = mobileAppUserAccountMapper.selectOne(new LambdaQueryWrapper().eq(MobileAppUserAccount::getMobileUserId, wxOrder.getMobileUserId())); + if (Objects.isNull(wxUserAccount)){ + MobileAppUserAccount account = new MobileAppUserAccount(); + account.setAccountBalance(totalAmount); + account.setMobileUserId(wxOrder.getMobileUserId()); + mobileAppUserAccountMapper.insert(account); + }else { + wxUserAccount.setAccountBalance(wxUserAccount.getAccountBalance().add(totalAmount)); + mobileAppUserAccountMapper.updateById(wxUserAccount); + } + } +} diff --git a/applet/src/main/java/cn/unizk/controller/InventoryController.java b/applet/src/main/java/cn/unizk/controller/InventoryController.java new file mode 100644 index 0000000..b60da10 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/InventoryController.java @@ -0,0 +1,62 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.InventoryStatistics; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.mapper.InventoryStatisticsMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2026/8/20 10:31 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/inventory") +public class InventoryController { + + @Resource + InventoryStatisticsMapper inventoryStatisticsMapper; + + + @PostMapping("/getStatistics") + public Page page(@RequestBody UniPage uniPage){ + Page page = (Page) uniPage.getPage(); + LambdaQueryWrapper queryWrapper = uniPage.buildQueryWrapper(query -> { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(query.getType() != null,InventoryStatistics::getType,query.getType()); + wrapper.like(StringUtils.isNotBlank(query.getProductName()), InventoryStatistics::getProductName, query.getProductName()); + wrapper.orderByDesc(InventoryStatistics::getCreateTime); + return wrapper; + }); + return inventoryStatisticsMapper.selectPage(page,queryWrapper); + } + + @PostMapping("/addStatistics") + public ResultData addStatistics(@RequestBody InventoryStatistics statistics){ + statistics.setRemainingQuantity(statistics.getQuantityInStock() - statistics.getOutboundQuantity()); + statistics.setCreateTime(LocalDate.now()); + inventoryStatisticsMapper.insert(statistics); + return ResultData.success(); + } + + @PostMapping("/updateStatistics") + public ResultData updateStatistics(@RequestBody InventoryStatistics statistics){ + statistics.setRemainingQuantity(statistics.getQuantityInStock() - statistics.getOutboundQuantity()); + inventoryStatisticsMapper.updateById(statistics); + return ResultData.success(); + } + + @PostMapping("/deleteStatistics") + public ResultData deleteStatistics(@RequestParam("id") Integer id){ + inventoryStatisticsMapper.deleteById(id); + return ResultData.success(); + } +} diff --git a/applet/src/main/java/cn/unizk/controller/JkProductController.java b/applet/src/main/java/cn/unizk/controller/JkProductController.java new file mode 100644 index 0000000..247c3b5 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/JkProductController.java @@ -0,0 +1,78 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.JkProduct; +import cn.unizk.entity.po.ProductCarousel; +import cn.unizk.entity.vo.JkProductVO; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.service.JkProductService; +import cn.unizk.service.ProductCarouselService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Objects; + +/** + * @Author hao + * @Date 2025/8/21 18:57 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/product") +public class JkProductController { + + @Resource + private JkProductService productService; + @Resource + private ProductCarouselService carouselService; + + @GetMapping("/list") + public Page list(UniPage uniPage, @RequestParam(value = "dictValue",required = false) String dictValue, + @RequestParam(value = "product",required = false) String product, + @RequestParam(value = "priceSort",required = false) String priceSort, + @RequestParam(value = "saleSort",required = false) String saleSort) { + Page page = new Page<>(); + page.setCurrent(uniPage.getCurrentPage()); + page.setSize(uniPage.getPageSize()); + boolean priceS = !"desc".equals(priceSort); + boolean saleS = !"desc".equals(saleSort); + return productService.page(page, new LambdaQueryWrapper() + .eq(JkProduct::getProductStatus, "上架") + .eq(StringUtils.isNotBlank(dictValue),JkProduct::getProductType, dictValue) + .like(StringUtils.isNotBlank(product),JkProduct::getProductName,product) + .gt(JkProduct::getProductStock, 0) + .orderBy(StringUtils.isNotBlank(priceSort),priceS,JkProduct::getProductPrice) + .orderBy(StringUtils.isNotBlank(saleSort),saleS,JkProduct::getSales)); + } + + @GetMapping("/getExquisite") + public Page listExquisite(UniPage uniPage){ + Page page = uniPage.getPage(); + return productService.page(page,new LambdaQueryWrapper().eq(JkProduct::getExquisite,"true")); + } + + @GetMapping("/carousel") + public List getCarousel(){ + return carouselService.list(new LambdaQueryWrapper() + .eq(ProductCarousel::getType,"outer")); + } + + @GetMapping("/byId") + public JkProductVO byId(@RequestParam("productId") Integer productId){ + JkProduct jkProduct = productService.getById(productId); + if (Objects.isNull(jkProduct)){ + return new JkProductVO(); + } + List list = carouselService.list(new LambdaQueryWrapper().eq(ProductCarousel::getProductId, productId)); + JkProductVO jkProductVO = new JkProductVO(); + BeanUtils.copyProperties(jkProduct,jkProductVO); + jkProductVO.setProductCarousels(list); + return jkProductVO; + } + + +} diff --git a/applet/src/main/java/cn/unizk/controller/JkStoreController.java b/applet/src/main/java/cn/unizk/controller/JkStoreController.java new file mode 100644 index 0000000..4e7cd73 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/JkStoreController.java @@ -0,0 +1,76 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.JkStore; +import cn.unizk.entity.po.SysDict; +import cn.unizk.entity.vo.JkStoreReqVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.service.JkStoreService; +import cn.unizk.service.SysDictService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author hao + * @Date 2025/8/19 11:28 + * @Version 1.0 + **/ +@RequestMapping("/applet") +@Slf4j +@RestController +public class JkStoreController { + + @Resource + private JkStoreService jkStoreService; + @Resource + private SysDictService sysDictService; + + + @PostMapping("/getStores") + public IPage getStores(@RequestBody UniPage uniPage){ + Page page = new Page<>(); + page.setCurrent(uniPage.getCurrentPage()); + page.setSize(uniPage.getPageSize()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(JkStore::getStatus, "营业"); + JkStore jkStore = uniPage.getQueryBody(); + if (jkStore != null && StringUtils.isNotBlank(jkStore.getType())){ + wrapper.eq(JkStore::getType,jkStore.getType()); + } + return jkStoreService.getBaseMapper().selectPage(page, wrapper); + } + + @GetMapping("/getStoreById") + public JkStore getStoreById(@RequestParam("storeId") Integer storeId){ + return jkStoreService.getById(storeId); + } + + /** + * + * @param vo + * @return + */ + @PostMapping("/nearest") + public JkStore nearest(@RequestBody JkStoreReqVO vo){ + return null; + } + + + @GetMapping("/getScanPayPrice") + public ResultData getScanPayPrice(@RequestParam(value = "storeId",required = false) Integer storeId,@RequestParam(value = "deviceId",required = false) String deviceId){ + log.info("storeId={},deviceId={}",storeId,deviceId); + SysDict sysDict = sysDictService.getById(26); + ResultData data = new ResultData<>(); + data.setCode(200); + data.setData(sysDict.getDictValue()); + return data; + } + +} diff --git a/applet/src/main/java/cn/unizk/controller/MemberController.java b/applet/src/main/java/cn/unizk/controller/MemberController.java new file mode 100644 index 0000000..76f57f3 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/MemberController.java @@ -0,0 +1,37 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.SysDict; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.service.SysDictService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @Author hao + * @Date 2026/4/30 11:02 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/member") +public class MemberController { + + @Resource + private SysDictService sysDictService; + + @GetMapping("/getCost") + public ResultData getCost(){ + SysDict activeMember = sysDictService.getOne(new LambdaQueryWrapper().eq(SysDict::getDictType, "active_member")); + ResultData data = new ResultData<>(); + if (activeMember == null){ + data.setData("888.00"); + }else { + data.setData(activeMember.getDictValue()); + } + data.setCode(200); + return data; + } +} diff --git a/applet/src/main/java/cn/unizk/controller/Physio13AreaController.java b/applet/src/main/java/cn/unizk/controller/Physio13AreaController.java new file mode 100644 index 0000000..f7cde04 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/Physio13AreaController.java @@ -0,0 +1,54 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.Joint; +import cn.unizk.entity.po.PhysioThirteenArea; +import cn.unizk.entity.vo.JointVO; +import cn.unizk.mapper.JointMapper; +import cn.unizk.mapper.PhysioThirteenAreaMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author hao + * @Date 2026/9/2 16:43 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/physioArea") +public class Physio13AreaController { + + @Resource + private PhysioThirteenAreaMapper physioThirteenAreaMapper; + @Resource + private JointMapper jointMapper; + + + +/* @GetMapping("/list") + public List list(@RequestParam("type") Integer type){ + List physioThirteenAreas = physioThirteenAreaMapper.selectList(new LambdaQueryWrapper().eq(PhysioThirteenArea::getType,type)); + physioThirteenAreas.forEach( area -> { + area.setCause(null); + area.setImproveMethod(null); + area.setExplanation(null); + area.setPictureUrl(null); + }); + return physioThirteenAreas; + }*/ + + @GetMapping("/list") + public List list() { + return jointMapper.selectJointVOList(); + } + + @GetMapping("/getOneById") + public PhysioThirteenArea area(@RequestParam("id") Integer id) { + return physioThirteenAreaMapper.selectById(id); + } +} diff --git a/applet/src/main/java/cn/unizk/controller/PhysioAppointmentController.java b/applet/src/main/java/cn/unizk/controller/PhysioAppointmentController.java new file mode 100644 index 0000000..de868e7 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/PhysioAppointmentController.java @@ -0,0 +1,222 @@ +package cn.unizk.controller; + +import cn.hutool.core.util.IdUtil; +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.*; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.*; +import cn.unizk.utils.BeanCopyUtils; +import cn.unizk.utils.JkSecurityUtil; +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 lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2026/5/18 17:18 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/appointment") +@Slf4j +public class PhysioAppointmentController { + + @Resource + private DailySchedulesMapper dailySchedulesMapper; + @Resource + private MobileUserMedicalVisitInfoMapper mobileUserMedicalVisitInfoMapper; + @Resource + private MobileAppointmentsMapper mobileAppointmentsMapper; + @Resource + private JkPhysioMapper jkPhysioMapper; + @Resource + private JkStoreMapper storeMapper; + @Resource + private TimeSlotsMapper timeSlotsMapper; + @Resource + private MobileAppUserMapper mobileAppUserMapper; + + + @PostMapping("/getPhysioAppointment") + public List getPhysioAppointment(@RequestBody AppointmentVO vo){ + return dailySchedulesMapper.getCanAppointment(vo.getPhysioId(),vo.getDateTime()); + } + + @PostMapping("/appointment") + @Transactional(rollbackFor = Exception.class) + public ResultData appointment(HttpServletRequest request,@RequestBody AppointmentVO2 vo2){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + DailySchedules dailySchedules = dailySchedulesMapper.selectById(vo2.getDailyScheduleId()); + if (Objects.isNull(dailySchedules)){ + throw new ServiceException("无法预约,请稍后重试"); + } + if (dailySchedules.getMaxBookings() - dailySchedules.getBookedCount() < 1){ + if ("available".equals(dailySchedules.getStatus())){ + dailySchedules.setStatus("full"); + dailySchedulesMapper.updateById(dailySchedules); + } + throw new ServiceException("该时间段已满号,请预约其他时间"); + } + MobileUserMedicalVisitInfo userMedicalVisitInfo = mobileUserMedicalVisitInfoMapper.selectById(vo2.getMedicalVisitId()); + MobileAppointments appointments = new MobileAppointments(); + String appointment_no = IdUtil.getSnowflakeNextIdStr(); + appointments.setAppointmentNo(appointment_no); + appointments.setMobileUserId(currentUser.getId()); + appointments.setDailyScheduleId(vo2.getDailyScheduleId()); + appointments.setVisitDate(dailySchedules.getScheduleDate()); + appointments.setTimeSlotCode(vo2.getTimeSlotCode()); + appointments.setPayAmount(vo2.getPayAmount()); + appointments.setPayStatus(1); + appointments.setPhysioId(dailySchedules.getPhysioId()); + appointments.setPatientName(userMedicalVisitInfo.getName()); + appointments.setPatientPhone(userMedicalVisitInfo.getPhoneNumber()); + appointments.setStatus("confirmed"); + appointments.setRemark(vo2.getRemark()); + mobileAppointmentsMapper.insert(appointments); + if (dailySchedules.getMaxBookings() - dailySchedules.getBookedCount() < 2){ + dailySchedules.setStatus("full"); + } + dailySchedules.setBookedCount(dailySchedules.getBookedCount() + 1); + dailySchedulesMapper.updateById(dailySchedules); + try { + JkPhysio jkPhysio = jkPhysioMapper.selectById(appointments.getPhysioId()); + MobileAppUser user = mobileAppUserMapper.selectById(currentUser.getId()); + if (user.getFirstStoreId() == null && user.getFirstPhysioId() == null){ + user.setId(currentUser.getId()); + user.setFirstPhysioId(jkPhysio.getId()); + user.setFirstStoreId(jkPhysio.getStoreId()); + mobileAppUserMapper.updateById(user); + } + }catch (Exception e){ + log.error("首次门店首次技师绑定失败:",e); + } + return ResultData.success(); + } + + @PostMapping("/addOrUpdateMedicalVisitInfo") + public ResultData addMedicalVisitInfo(HttpServletRequest request, @RequestBody MobileUserMedicalVisitInfo info){ + if (info.getId() == null){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + List wxUserMedicalVisitInfos = mobileUserMedicalVisitInfoMapper.selectList(new LambdaQueryWrapper().eq(MobileUserMedicalVisitInfo::getMobileUserId, currentUser + .getId())); + if (wxUserMedicalVisitInfos.size() >= 3){ + throw new ServiceException("最多只能添加3张就诊卡"); + } + info.setMobileUserId(currentUser.getId()); + info.setCreateTime(LocalDateTime.now()); + mobileUserMedicalVisitInfoMapper.insert(info); + }else { + if (info.getItsDefault() == 1){ + mobileUserMedicalVisitInfoMapper.update(new LambdaUpdateWrapper().set(MobileUserMedicalVisitInfo::getItsDefault,0)); + } + mobileUserMedicalVisitInfoMapper.updateById(info); + } + return ResultData.success(); + } + + @GetMapping("/getDefaultVisitInfo") + public ResultData getDefVisitInfo(HttpServletRequest request){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + MobileUserMedicalVisitInfo wxUserMedicalVisitInfo = mobileUserMedicalVisitInfoMapper.selectOne(new LambdaQueryWrapper().eq(MobileUserMedicalVisitInfo::getMobileUserId, currentUser.getId()).eq(MobileUserMedicalVisitInfo::getItsDefault,1)); + ResultData resultData = new ResultData<>(); + if (Objects.nonNull(wxUserMedicalVisitInfo)){ + resultData.setData(wxUserMedicalVisitInfo); + }else { + MobileUserMedicalVisitInfo visitInfo = mobileUserMedicalVisitInfoMapper.selectLatest(currentUser.getId()); + resultData.setData(visitInfo); + } + resultData.setCode(200); + return resultData; + } + + @DeleteMapping("/deleteVisitInfo") + public ResultData deleteVisitInfo(@RequestParam("id") Integer id){ + mobileUserMedicalVisitInfoMapper.deleteById(id); + return ResultData.success(); + } + + @GetMapping("/getVisitInfo") + public ResultData getVisitInfo(HttpServletRequest request){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + List wxUserMedicalVisitInfos = mobileUserMedicalVisitInfoMapper.selectList(new LambdaQueryWrapper().eq(MobileUserMedicalVisitInfo::getMobileUserId, currentUser.getId())); + return ResultData.success(wxUserMedicalVisitInfos); + } + + @GetMapping("/getAvailableSituation") + public List getAv(@RequestParam(value = "physioId",required = false) Integer physioId,@RequestParam("storeId") Integer storeId){ + List jkPhysios = jkPhysioMapper.selectList(new LambdaQueryWrapper().eq(JkPhysio::getStoreId, storeId)); + List physioIds = jkPhysios.stream().map(JkPhysio::getId).collect(Collectors.toList()); + List appointmentVO3s = dailySchedulesMapper.selectMedicalyoumeihao(physioId,physioIds); + for (AppointmentVO3 appointmentVO3 : appointmentVO3s) { + if (appointmentVO3.getScheduleDate().equals(LocalDate.now())){ + LocalTime time = LocalTime.now(); + TimeSlots timeSlots = timeSlotsMapper.selectLastOne(); + if (time.isAfter(timeSlots.getStartTime())){ + appointmentVO3.setHasAvailable("无号"); + appointmentVO3.setAvailableSlotsCount(0); + appointmentVO3.setTotalAvailableCount(0); + } + } + } + return appointmentVO3s; + } + + @PostMapping("/getAllPhysioActive") + public List getAll(@RequestBody DailySchedulesVO dailySchedules){ + if (Objects.isNull(dailySchedules) || dailySchedules.getScheduleDate() == null){ + throw new ServiceException("scheduleDate cannot null"); + } + if (dailySchedules.getStoreId() == null){ + throw new ServiceException("storeId cannot null"); + } + List jkPhysios = jkPhysioMapper.selectList(new LambdaQueryWrapper().eq(JkPhysio::getStoreId, dailySchedules.getStoreId())); + List physioIds = jkPhysios.stream().map(JkPhysio::getId).collect(Collectors.toList()); + return dailySchedulesMapper.selectYoumeihaoByDate(dailySchedules.getScheduleDate(),physioIds); + } + + @GetMapping("/getAppointments") + public Page getAppointments(HttpServletRequest request,@RequestParam(value = "currentPage",required = false,defaultValue = "1") Integer currentPage, + @RequestParam(value = "pageSize",required = false,defaultValue = "10") Integer pageSize){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"请重新登录"); + } + Page page = new Page<>(currentPage,pageSize); + Page appointmentsPage = mobileAppointmentsMapper.selectPage(page, new LambdaQueryWrapper().eq(MobileAppointments::getMobileUserId, currentUser.getId()) + .orderByDesc(MobileAppointments::getCreatedAt)); + List appointments = appointmentsPage.getRecords(); + if (CollectionUtils.isEmpty(appointments)){ + return new Page<>(); + } + Collection appointmentsVO5s = BeanCopyUtils.copyArrays(appointments, AppointmentsVO5::new); + for (AppointmentsVO5 vo5 : appointmentsVO5s) { + JkPhysio jkPhysio = jkPhysioMapper.selectById(vo5.getPhysioId()); + JkStore jkStore = storeMapper.selectById(jkPhysio.getStoreId()); + vo5.setPhysioName(jkPhysio.getPhysioName()); + vo5.setStoreName(jkStore.getStoreName()); + vo5.setStoreAddress(jkStore.getAddress()); + TimeSlots timeSlots = timeSlotsMapper.selectOne(new LambdaQueryWrapper().eq(TimeSlots::getSlotCode, vo5.getTimeSlotCode())); + vo5.setTimeSlots(timeSlots); + } + Page vo5Page = new Page<>(); + vo5Page.setTotal(page.getTotal()); + vo5Page.setRecords((List) appointmentsVO5s); + vo5Page.setCurrent(page.getCurrent()); + vo5Page.setSize(page.getSize()); + return vo5Page; + } + + +} diff --git a/applet/src/main/java/cn/unizk/controller/PhysioController.java b/applet/src/main/java/cn/unizk/controller/PhysioController.java new file mode 100644 index 0000000..bc7b168 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/PhysioController.java @@ -0,0 +1,256 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.*; +import cn.unizk.exception.ServiceException; +import cn.unizk.huifupay.vo.ReportTypeVO; +import cn.unizk.mapper.*; +import cn.unizk.service.JkPhysioService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.constraints.NotBlank; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2025/8/21 16:58 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet") +public class PhysioController { + + @Resource + private JkPhysioService physioService; + @Resource + private ReportTemplateMapper reportTemplateMapper; + @Resource + private SubHealthDietaryRegulationMapper regulationMapper; + @Resource + private PhysioExamMapper examMapper; + @Resource + private ExamScoreMapper scoreMapper; + @Resource + private MobileOrderMapper mobileOrderMapper; + @Resource + private MobileAppUserMapper mobileAppUserMapper; + @Resource + private TreatParameterMapper treatParameterMapper; + + @GetMapping("/getPhysios") + public IPage getPhysios(@RequestParam("storeId") Integer storeId, UniPage uniPage) { + Page page = new Page<>(); + page.setCurrent(uniPage.getCurrentPage()); + return physioService.getBaseMapper().selectPage(page, new LambdaQueryWrapper() + .eq(JkPhysio::getStoreId, storeId).eq(JkPhysio::getAudit, 1).eq(JkPhysio::getStatus, "启用")); + } + + @PostMapping("/getReportById/{id}") + public ReportTemplateVO getReportById(@PathVariable("id") Integer id, @RequestBody ReportTypeVO vo) { + TreatParameter treatParameter = treatParameterMapper.selectById(id); + String text = "

尊敬的客户您好!经诊断您可能患有"+treatParameter.getSymptomsName()+",非常理解您正承受着膝关节疼痛带来的不适与困扰," + + "考虑到您目前关节疼痛症状较为严重,为了能精准对症缓解您的病痛," + + "我们现将您的相关情况转接至上一级专业接待机构。那边配备经验更丰富的护理人员与配" + + "套诊疗资源,会为您提供更全面、专业且细致优质的诊疗服务,请您稍作等候配合转接。

"; + ReportTemplateVO templateVO = new ReportTemplateVO(); + if (vo.getResult() == 2) { + templateVO.setType(vo.getResult()); + templateVO.setId(randomNum()); + templateVO.setText(text); + return templateVO; + } + if (vo.getResult() == 1) { + ReportTemplate reportTemplate = reportTemplateMapper.selectById(id); + BeanUtils.copyProperties(reportTemplate, templateVO); + templateVO.setType(vo.getResult()); + return templateVO; + } + throw new ServiceException("系统异常"); + } + + private Integer randomNum() { + List numbers = new ArrayList<>(); + for (int i = 1; i <= 13; i++) { + numbers.add(i); + } + + // 2. 打乱列表顺序 + Collections.shuffle(numbers); + return numbers.get(0); + } + + @GetMapping("/getRegulation") + public List getRegulation(@RequestParam(value = "name", required = false) String name) { + return regulationMapper.selectList(new LambdaQueryWrapper() + .like(StringUtils.isNotBlank(name), SubHealthDietaryRegulation::getSymptomDescription, name)); + } + + @PostMapping("/getFoodTherapy") + public ResultData getFoodTherapy(@RequestBody RegulationVO vo) { + if (Objects.isNull(vo) || CollectionUtils.isEmpty(vo.getNumbers())) { + return null; + } + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + ResultData data = new ResultData<>(); + data.setCode(200); + String s = "根据您的症状以及过往病史的描述,您可能由于{reason}的原因引起的,并且身体可能缺乏{n},建议您做一下{z},更精准地查出病因。日常食疗建议多补充{f}。{s}"; + List numbers = vo.getNumbers(); + if (numbers.size() == 1) { + SubHealthDietaryRegulation regulation = regulationMapper.selectById(vo.getNumbers().get(0)); + String f = regulation.getFruitSuggestion() + ";" + regulation.getVegetableSuggestion(); + String result = s.replace("{reason}", regulation.getCommonReasons()).replace("{n}", regulation.getLackNutrients()).replace("{z}", regulation.getDiagnosticReference()) + .replace("{f}", f).replace("{s}", regulation.getDetectAndAdd()); + data.setData(result); + } else { + List regulations = regulationMapper.selectByIds(numbers); + List reasons = new ArrayList<>(); + List zd = new ArrayList<>(); + List ns = new ArrayList<>(); + List sgs = new ArrayList<>(); + List vgs = new ArrayList<>(); + List jcbc = new ArrayList<>(); + for (SubHealthDietaryRegulation regulation : regulations) { + String commonReasons = regulation.getCommonReasons(); + String diagnosticReference = regulation.getDiagnosticReference(); + String vegetableSuggestion = regulation.getVegetableSuggestion(); + String fruitSuggestion = regulation.getFruitSuggestion(); + @NotBlank(message = "lackNutrients cannot be empty") String lackNutrients = regulation.getLackNutrients(); + hb(commonReasons, reasons); + hb(diagnosticReference, zd); + hb(vegetableSuggestion, vgs); + hb(fruitSuggestion, sgs); + hb(lackNutrients, ns); + @NotBlank(message = "detectAndAdd cannot be empty") String detectAndAdd = regulation.getDetectAndAdd(); + String replace = detectAndAdd.replace("检测:", "").replace("补充:", ""); + jcbc.add(replace); + } + String r = String.join("、", reasons); + String n = String.join("、", ns); + String z = String.join("、", zd); + sgs.addAll(vgs); + String f = String.join("、", sgs); + String jb = "微量元素检测与补充:" + String.join(";", jcbc); + String replace = s.replace("{reason}", r).replace("{n}", n).replace("{z}", z).replace("{f}", f).replace("{s}", jb); + data.setData(replace); + } + return data; + } + + private void hb(String s, List list) { + if (s.contains("、")) { + String[] split = s.split("、"); + List item = new ArrayList<>(); + for (String t : split) { + if (!list.contains(t)) { + item.add(t); + } + } + list.addAll(item); + } else { + if (!list.contains(s)) { + list.add(s); + } + } + } + + @PostMapping("/physioExams") + public List physioExams(@RequestParam("subject") Integer subject) { + List physioExams = examMapper.selectList(new LambdaQueryWrapper() + .eq(PhysioExam::getSubject, subject)); + if (CollectionUtils.isEmpty(physioExams)) { + return new ArrayList<>(); + } + List vos = new ArrayList<>(); + for (PhysioExam physioExam : physioExams) { + PhysioExamVO vo = new PhysioExamVO(); + vo.setId(physioExam.getId()); + vo.setType(physioExam.getType()); + vo.setAnswers(Arrays.asList(physioExam.getAnswer().split("&"))); + vo.setTitle(physioExam.getTitle()); + vos.add(vo); + } + return vos; + } + + @PostMapping("/gradeExam") + public Integer gradeExam(@RequestBody List examVOS) { + if (CollectionUtils.isEmpty(examVOS)) { + return 0; + } + List collect = examVOS.stream().map(GradeExamVO::getExamId) + .collect(Collectors.toList()); + List physioExams = examMapper.selectByIds(collect); + Map map = physioExams.stream() + .collect(Collectors.toMap(PhysioExam::getId, Function.identity())); + List list = new ArrayList<>(); + for (GradeExamVO examVO : examVOS) { + if (StringUtils.isBlank(examVO.getAnswer())) { + continue; + } + if (map.get(examVO.getExamId()).getCorrectAnswer().equals(examVO.getAnswer())) { + list.add(map.get(examVO.getExamId()).getType()); + } + } + if (CollectionUtils.isEmpty(list)) { + return 0; + } + List distInt = list.stream().distinct().collect(Collectors.toList()); + // examScoreMapper.selectByIds(distInt),查出examScore,再统计分数。 + List scoreList = scoreMapper.selectByIds(distInt); + Map scoreMap = scoreList.stream().collect(Collectors.toMap(ExamScore::getId, ExamScore::getScore)); + int totalScore = 0; + for (Integer integer : list) { + Integer score = scoreMap.get(integer); + totalScore += score; + } + return totalScore; + } + + @GetMapping("/getChuFang") + public ResultData> getChuFang(@RequestParam("physioId") Integer physioId){ + List wxOrders = mobileOrderMapper.selectList(new LambdaQueryWrapper().eq(MobileOrder::getPhysioId, physioId)); + if (CollectionUtils.isEmpty(wxOrders)){ + return ResultData.success(); + } + List openids = wxOrders.stream().map(MobileOrder::getMobileUserId).distinct().collect(Collectors.toList()); + List wxUsers = mobileAppUserMapper.selectList(new LambdaQueryWrapper().in(MobileAppUser::getId, openids)); + if (CollectionUtils.isEmpty(wxUsers)){ + return ResultData.success(); + } + List collect = wxUsers.stream().filter(u -> StringUtils.isNotBlank(u.getPainNumber())).map(MobileAppUser::getPainNumber).collect(Collectors.toList()); + List list = new ArrayList<>(); + for (String s : collect) { + if (s.contains(",")){ + String[] split = s.split(","); + for (String p : split) { + TreatParameter treatParameter = treatParameterMapper.selectById(p); + list.add(treatParameter); + } + }else { + TreatParameter treatParameter = treatParameterMapper.selectById(s); + list.add(treatParameter); + } + } + ResultData> data = new ResultData<>(); + data.setCode(200); + data.setData(list); + return data; + } + + +} diff --git a/applet/src/main/java/cn/unizk/controller/RatingController.java b/applet/src/main/java/cn/unizk/controller/RatingController.java new file mode 100644 index 0000000..83c05ac --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/RatingController.java @@ -0,0 +1,441 @@ +package cn.unizk.controller; + +import cn.unizk.entity.dto.MajorJointsDTO; +import cn.unizk.entity.po.DiaRecord; +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.entity.vo.EightMajorJointsVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.SpeakVO; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.DiaRecordMapper; +import cn.unizk.mapper.MobileAppUserMapper; +import cn.unizk.utils.JkSecurityUtil; +import com.alibaba.fastjson2.JSONObject; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.RandomStringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2026/8/10 10:56 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/rating") +public class RatingController { + + @Resource + private MobileAppUserMapper mobileAppUserMapper; + @Resource + private DiaRecordMapper diaRecordMapper; + + private static final Map JOINTS_DTO_MAP1; + private static final Map JOINTS_DTO_MAP2; + private static final Map WAN_ZHOU_MAP; + private static final Map YAO_MAP; + + + + static { + JOINTS_DTO_MAP1 = new HashMap<>(); + MajorJointsDTO dto = new MajorJointsDTO(); + Map questionMap1 = new HashMap<>(); + questionMap1.put(1,"1.肩膀前面锁骨下面凹窝处会不会闷痛、按压疼?"); + questionMap1.put(2,"2.抬手向前举胳膊、抱重物时,肩膀前侧扯着刺痛吗?"); + questionMap1.put(3,"3.胳膊向后背、穿脱套头衫时,肩膀前面牵拉难受吗?"); + dto.setTitle("肩前侧锁骨下方"); + dto.setReport("肩膀前侧肌腱劳损、肩关节前侧滑膜发炎,长期抬手干活、抱重物诱发"); + dto.setMap(questionMap1); + JOINTS_DTO_MAP1.put(1,dto); + MajorJointsDTO dto2 = new MajorJointsDTO(); + dto2.setTitle("肩顶端凸起骨头"); + dto2.setReport("肩峰滑囊炎、肩袖上方肌腱磨损,长期抬手、侧睡压肩引发"); + Map questionMap2 = new HashMap<>(); + questionMap2.put(1,"1.肩膀最顶端那块骨头,一按就酸胀疼吗?"); + questionMap2.put(2,"2.胳膊侧平举、举过头顶时,肩膀顶刺痛卡住吗?"); + questionMap2.put(3,"3.侧卧压着肩膀睡觉,第二天肩顶疼痛感明显加重吗?"); + dto2.setMap(questionMap2); + JOINTS_DTO_MAP1.put(2,dto2); + MajorJointsDTO dto3 = new MajorJointsDTO(); + dto3.setTitle("肩膀外侧三角肌整块"); + dto3.setReport("肩部外侧肌肉劳损、肩袖外侧轻微损伤,单侧负重、长期外展发力导致"); + Map questionMap3 = new HashMap<>(); + questionMap3.put(1,"1.肩膀外侧一大块肌肉经常发酸发沉吗?"); + questionMap3.put(2,"2.向外抬胳膊、拎手提东西,外侧牵拉酸痛吗?"); + questionMap3.put(3,"运动干活后,肩膀外侧发胀,抬胳膊无力吗?"); + dto3.setMap(questionMap3); + JOINTS_DTO_MAP1.put(3,dto3); + + MajorJointsDTO dto4 = new MajorJointsDTO(); + dto4.setTitle("肩膀后侧肩胛骨"); + dto4.setReport("肩后筋膜僵硬、肩关节后侧韧带劳损,含胸驼背、后背内旋动作诱发"); + Map questionMap4 = new HashMap<>(); + questionMap4.put(1,"后背肩膀骨头边缘隐隐拉扯酸胀吗?"); + questionMap4.put(2,"手往后背、反手抓后背腰带,肩膀后侧刺痛吗?"); + questionMap4.put(3,"含胸久坐、低头玩手机,肩后发紧僵硬疼吗?"); + dto4.setMap(questionMap4); + JOINTS_DTO_MAP1.put(4,dto4); + + MajorJointsDTO dto5 = new MajorJointsDTO(); + dto5.setTitle("肩胛骨内侧缝"); + dto5.setReport("肩胛内侧筋膜劳损、菱形肌紧张,长期久坐低头、圆肩驼背造成"); + Map questionMap5 = new HashMap<>(); + questionMap5.put(1,"1.后背两块肩胛骨中间、靠近脖子那条缝酸胀疼吗?"); + questionMap5.put(2,"久坐伏案、低头看手机,肩缝发沉像压了重物吗?"); + questionMap5.put(3,"胳膊向前环抱、含胸,肩内侧牵扯刺痛吗?"); + dto5.setMap(questionMap5); + JOINTS_DTO_MAP1.put(5,dto5); + + MajorJointsDTO dto6 = new MajorJointsDTO(); + dto6.setTitle("腋下肩胛内侧区"); + dto6.setReport("肩峰撞击、长头腱炎症、肩胛下肌损伤"); + Map questionMap6 = new HashMap<>(); + questionMap6.put(1,"后背手腋下深处疼吗?"); + questionMap6.put(2,"屈肘内旋用力腋下酸胀?"); + questionMap6.put(3,"侧卧夹臂睡觉会不会闷痛?"); + dto6.setMap(questionMap6); + JOINTS_DTO_MAP1.put(6,dto6); + } + + //手指 + static { + JOINTS_DTO_MAP2 = new HashMap<>(); + MajorJointsDTO dto = new MajorJointsDTO(); + Map questionMap1 = new HashMap<>(); + questionMap1.put(1,"大拇指整根手指、指关节、根部位置,按压有没有酸胀、刺痛、发硬的感觉?"); + questionMap1.put(2,"频繁划手机、捏东西、开门锁、捏筷子发力时,大拇指会不会扯着疼?"); + questionMap1.put(3,"大拇指弯曲、伸直的时候,有没有卡顿、发僵、活动不顺畅的情况?"); + dto.setTitle("拇指区"); + dto.setReport("拇指腱鞘劳损、拇指关节疲劳、拇指肌腱卡压"); + dto.setMap(questionMap1); + JOINTS_DTO_MAP2.put(1,dto); + MajorJointsDTO dto2 = new MajorJointsDTO(); + dto2.setTitle("食指区"); + dto2.setReport("食指关节劳损、食指腱鞘轻微发炎、指关节筋膜紧张"); + Map questionMap2 = new HashMap<>(); + questionMap2.put(1,"食指整根手指、各个关节按压有没有酸痛、隐痛、刺痛感?"); + questionMap2.put(2,"打字、写字、点屏幕、捏取细小物品时,食指发力会不会牵扯疼痛?"); + questionMap2.put(3,"食指用力弯曲、伸直、单独抬起时,有没有僵硬、扯痛的感觉?"); + dto2.setMap(questionMap2); + JOINTS_DTO_MAP2.put(2,dto2); + MajorJointsDTO dto3 = new MajorJointsDTO(); + dto3.setTitle("中指区"); + dto3.setReport("中指肌腱劳损、指关节压力性疲劳、腱鞘紧张"); + Map questionMap3 = new HashMap<>(); + questionMap3.put(1,"中指各关节、手指整条位置按压,有没有酸胀、压痛的情况?"); + questionMap3.put(2,"握拳发力、拎东西、写字按压、干活用力时,中指会不会牵扯疼?"); + questionMap3.put(3,"中指弯曲伸直、大幅度活动时,有没有发紧、卡顿、不舒服的感觉?"); + dto3.setMap(questionMap3); + JOINTS_DTO_MAP2.put(3,dto3); + + MajorJointsDTO dto4 = new MajorJointsDTO(); + dto4.setTitle("无名指区"); + dto4.setReport("无名指关节劳损、腱鞘循环不畅、手指筋膜紧张"); + Map questionMap4 = new HashMap<>(); + questionMap4.put(1,"无名指整条手指、关节位置按压,有没有隐隐酸痛、发胀的感觉?"); + questionMap4.put(2,"握拳、抓握物品、抬手发力时,无名指会不会跟着牵扯隐痛?"); + questionMap4.put(3,"手指并拢、分开活动时,无名指有没有发紧、活动受限、轻微刺痛?"); + dto4.setMap(questionMap4); + JOINTS_DTO_MAP2.put(4,dto4); + + MajorJointsDTO dto5 = new MajorJointsDTO(); + dto5.setTitle("小指区"); + dto5.setReport("小指腱鞘劳损、小指关节牵拉损伤、末梢循环不畅"); + Map questionMap5 = new HashMap<>(); + questionMap5.put(1,"小拇指整条手指、关节按压,有没有酸痛、刺痛、发麻发木的感觉?"); + questionMap5.put(2,"撑手、趴桌子、手部偏向小指侧用力时,小拇指会不会扯着疼?"); + questionMap5.put(3,"小指弯曲伸直、单独活动时,有没有僵硬、不灵活、牵扯不适?"); + dto5.setMap(questionMap5); + JOINTS_DTO_MAP2.put(5,dto5); + + MajorJointsDTO dto6 = new MajorJointsDTO(); + dto6.setTitle("屈肌总腱鞘区"); + dto6.setReport("手部总腱鞘劳损、掌心筋膜紧张、手指屈肌疲劳,多由双手长期重复抓握、持续发力、受凉僵硬导致,是多手指整体劳损的核心区域"); + Map questionMap6 = new HashMap<>(); + questionMap6.put(1,"手指根部、掌心上方整片位置,按压有没有发紧、发胀、闷痛的感觉?"); + questionMap6.put(2," 用力握拳、持续抓东西、反复屈伸所有手指时,整片区域会不会牵扯疼?"); + questionMap6.put(3,"长时间握鼠标、玩手机、干活后,掌心手指根部会不会发硬、发僵?"); + dto6.setMap(questionMap6); + JOINTS_DTO_MAP2.put(6,dto6); + } + + //腕肘 + static { + WAN_ZHOU_MAP = new HashMap<>(); + MajorJointsDTO dto = new MajorJointsDTO(); + Map questionMap1 = new HashMap<>(); + questionMap1.put(1,"手肘外侧突出的小骨头,一按就酸痛吗?"); + questionMap1.put(2,"拧毛巾、拎重物、拿水杯发力时,外侧骨头扯着刺痛吗?"); + questionMap1.put(3,"长时间打字、拖地、反复抬手,手肘外侧发酸发沉吗?"); + dto.setTitle("手肘外侧骨头凸起"); + dto.setReport("手肘外侧肌腱劳损、网球肘,反复抓握、拧转发力诱发"); + dto.setMap(questionMap1); + WAN_ZHOU_MAP.put(1,dto); + MajorJointsDTO dto2 = new MajorJointsDTO(); + dto2.setTitle("手肘内侧骨头凸起"); + dto2.setReport("手肘内侧肌腱发炎、高尔夫肘,长期屈肘抓握、支撑发力导致"); + Map questionMap2 = new HashMap<>(); + questionMap2.put(1,"手肘内侧凸起骨头按压闷痛吗?"); + questionMap2.put(2,"用力攥拳头、屈肘搬东西,手肘内侧牵扯疼吗?"); + questionMap2.put(3,"长期屈肘玩手机、趴着撑胳膊,内侧酸胀加重吗?"); + dto2.setMap(questionMap2); + WAN_ZHOU_MAP.put(2,dto2); + MajorJointsDTO dto3 = new MajorJointsDTO(); + dto3.setTitle("手肘后侧鹰嘴骨头"); + dto3.setReport("肘后滑囊发炎、胳膊后侧肌腱劳损,长期支撑、完全伸肘发力诱发"); + Map questionMap3 = new HashMap<>(); + questionMap3.put(1,"1.手肘后面凸起那块骨头,撑桌面按压疼吗?"); + questionMap3.put(2,"2.完全伸直、用力向后顶东西,肘后刺痛吗?"); + questionMap3.put(3,"3.长期趴着睡觉、硬桌子撑手肘,后侧发胀红肿吗?"); + dto3.setMap(questionMap3); + WAN_ZHOU_MAP.put(3,dto3); + + MajorJointsDTO dto4 = new MajorJointsDTO(); + dto4.setTitle("手腕外侧"); + dto4.setReport("拇指腱鞘发炎、手腕外侧肌腱劳损,频繁用大拇指发力造成"); + Map questionMap4 = new HashMap<>(); + questionMap4.put(1,"1.手腕靠近大拇指的凸起骨头按压酸胀吗?"); + questionMap4.put(2,"拧瓶盖、抱小孩、反复划手机,这个位置扯着疼吗?"); + questionMap4.put(3,"3.大拇指用力张开、握拳发力,手腕外侧刺痛吗?"); + dto4.setMap(questionMap4); + WAN_ZHOU_MAP.put(4,dto4); + + MajorJointsDTO dto5 = new MajorJointsDTO(); + dto5.setTitle("手腕掌心内侧正中"); + dto5.setReport("腕管受压、手腕内侧筋膜劳损,长期弯曲手腕、持续抓握诱发"); + Map questionMap5 = new HashMap<>(); + questionMap5.put(1,".手掌根手腕内侧窝窝发闷胀痛吗?"); + questionMap5.put(2,"2.长时间屈腕玩手机、握鼠标,手指发麻连带手腕疼吗?"); + questionMap5.put(3,"3.睡觉手腕弯着,早上醒来手指僵硬、发麻吗?"); + dto5.setMap(questionMap5); + WAN_ZHOU_MAP.put(5,dto5); + + MajorJointsDTO dto6 = new MajorJointsDTO(); + dto6.setTitle("手腕内侧"); + dto6.setReport("手腕侧边韧带劳损、尺骨茎突磨损,手腕偏斜负重、撑地发力导致"); + Map questionMap6 = new HashMap<>(); + questionMap6.put(1,"1.手腕靠近小拇指这边骨头按压疼吗?"); + questionMap6.put(2,"2.手掌往小指方向歪、撑地起身,手腕侧边刺痛吗?"); +// questionMap6.put(3,"侧卧夹臂睡觉会不会闷痛?"); + dto6.setMap(questionMap6); + WAN_ZHOU_MAP.put(6,dto6); + + MajorJointsDTO dto7 = new MajorJointsDTO(); + dto7.setTitle("手腕掌心中间整片"); + dto7.setReport("手指屈肌腱劳损、掌心筋膜紧张,长期重复抓握、受凉诱发"); + Map qu7 = new HashMap<>(); + qu7.put(1,"手腕掌心连接手指的整片位置发紧酸胀吗?"); + qu7.put(2,"2.用力握拳、反复屈伸手指,手腕掌心牵扯疼吗?"); + qu7.put(3,"冷水洗手、受凉后,握拳僵硬疼痛感加重吗?"); + dto7.setMap(qu7); + WAN_ZHOU_MAP.put(7,dto7); + } + + //腰 + static { + YAO_MAP = new HashMap<>(); + MajorJointsDTO dto = new MajorJointsDTO(); + Map questionMap1 = new HashMap<>(); + questionMap1.put(1,"肋骨下方、后腰上方这块经常发酸发胀吗?"); + questionMap1.put(2,"2.长时间低头久坐、弯腰干活之后,这里疼得更明显吗?"); + questionMap1.put(3,"3.挺直腰、向后舒展后腰时,这块有拉扯难受的感觉吗?"); + dto.setTitle("上腰段"); + dto.setReport("腰背筋膜上段、后腰浅层肌肉劳损,长期驼背、受凉、扭腰引发代偿酸痛"); + dto.setMap(questionMap1); + YAO_MAP.put(1,dto); + MajorJointsDTO dto2 = new MajorJointsDTO(); + dto2.setTitle("中下腰椎"); + dto2.setReport("腰肌劳损、腰椎关节错位、轻度腰间盘膨出"); + Map questionMap2 = new HashMap<>(); + questionMap2.put(1,"1.腰带对应的后腰位置持续发酸、发疼吗?"); + questionMap2.put(2,"2.弯腰捡东西、久坐刚站起来的一瞬间,后腰会刺痛吗?"); + questionMap2.put(3,"3.用手按压后腰骨头两边,肌肉发硬、一按就疼吗?"); + dto2.setMap(questionMap2); + YAO_MAP.put(2,dto2); + MajorJointsDTO dto3 = new MajorJointsDTO(); + dto3.setTitle("腰骶结合处"); + dto3.setReport("腰底韧带劳损、腰五骶一椎间盘不适,翘腿、拖地、骨盆前倾诱发疼痛"); + Map questionMap3 = new HashMap<>(); + questionMap3.put(1,"1.腰最底下、屁股上方凹进去的地方疼吗?"); + questionMap3.put(2,"久坐、躺床上翻身的时候,这块扯着牵拉疼吗?"); + questionMap3.put(3,"走路久了腰底部发沉,还连带屁股一起酸胀吗?"); + dto3.setMap(questionMap3); + YAO_MAP.put(3,dto3); + + MajorJointsDTO dto4 = new MajorJointsDTO(); + dto4.setTitle("腰椎棘突正中"); + dto4.setReport("后腰中间韧带发炎、长期弓背塌腰造成韧带劳损"); + Map questionMap4 = new HashMap<>(); + questionMap4.put(1,"1.后腰正中间这条骨头,用手按压有痛感吗?"); + questionMap4.put(2,"长时间弯腰,或是刻意向后仰腰时,骨头缝刺痛吗?"); + questionMap4.put(3,"3.睡硬床平躺,后腰中间被硌到后难受加重吗?"); + dto4.setMap(questionMap4); + YAO_MAP.put(4,dto4); + + MajorJointsDTO dto5 = new MajorJointsDTO(); + dto5.setTitle("腰侧方"); + dto5.setReport("腰侧肌肉痉挛、歪坐、高低腿导致单侧腰部代偿劳损"); + Map questionMap5 = new HashMap<>(); + questionMap5.put(1,"1.左右两侧腰窝经常拉扯酸胀吗?"); + questionMap5.put(2,"单侧侧身弯腰、单手提重物时,一边腰扯着疼吗?"); + questionMap5.put(3,"3.长期侧躺睡觉,受压一侧腰部僵硬酸痛吗?"); + dto5.setMap(questionMap5); + YAO_MAP.put(5,dto5); + + MajorJointsDTO dto6 = new MajorJointsDTO(); + dto6.setTitle(" 髋前侧腹股沟"); + dto6.setReport("大腿根胯部肌肉紧张、髋关节前侧滑膜发炎,久蹲、爬坡诱发疼痛"); + Map questionMap6 = new HashMap<>(); + questionMap6.put(1,"大腿根里面凹陷处闷闷胀痛吗?"); + questionMap6.put(2,"2.深蹲、抬腿、久坐起身时,大腿根扯着刺痛吗?"); + questionMap6.put(3,"3.做弓步向前压腿,胯骨前面牵拉难受吗?"); + dto6.setMap(questionMap6); + YAO_MAP.put(6,dto6); + + MajorJointsDTO dto7 = new MajorJointsDTO(); + dto7.setTitle("髋外侧大转子"); + dto7.setReport("胯外侧滑囊发炎、臀部外侧肌肉劳损,长期侧睡、走路外八引发"); + Map questionMap7 = new HashMap<>(); + questionMap7.put(1,"胯外侧突出的那块骨头,轻轻按压就疼吗?"); + questionMap7.put(2,"2.侧躺压住胯骨时,刺痛感会明显加重吗?"); + questionMap7.put(3,"走路、上下台阶,胯外侧酸胀还放射到大腿吗?"); + dto7.setMap(questionMap7); + YAO_MAP.put(7,dto7); + + MajorJointsDTO dto8 = new MajorJointsDTO(); + dto8.setTitle("髋后侧臀深处"); + dto8.setReport("臀部深层肌肉痉挛、坐骨神经受刺激,久坐盘腿诱发不适"); + Map questionMap8 = new HashMap<>(); + questionMap8.put(1,"1.屁股里面深处隐隐胀痛吗?"); + questionMap8.put(2,"2.久坐、跷二郎腿之后,屁股深处一条筋扯着大腿后侧发麻疼吗?"); + questionMap8.put(3,"3.拉伸臀部的时候,深层有明显牵拉痛感吗?"); + dto8.setMap(questionMap8); + YAO_MAP.put(8,dto8); + + } + + @PostMapping("/score") + public ResultData score(HttpServletRequest request,@RequestBody List vos){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + List collect = vos.stream().filter(vo -> vo.getNo() == 3).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(collect)){ + throw new ServiceException("数据错误"); + } + SpeakVO speakVO = collect.get(0); + String join = String.join(",", speakVO.getOptions()); + MobileAppUser appUser = mobileAppUserMapper.selectById(currentUser.getId()); + appUser.setTherapy(join); + mobileAppUserMapper.updateById(appUser); + return ResultData.success(); + } + + @PostMapping("/save4SRating") + public ResultData save4S(HttpServletRequest request,@RequestBody MobileAppUser user){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + MobileAppUser appUser = mobileAppUserMapper.selectById(currentUser.getId()); + appUser.setFoursRating(user.getFoursRating()); + appUser.setEvaluationResult(user.getEvaluationResult()); + mobileAppUserMapper.updateById(appUser); + return ResultData.success(); + } + + @GetMapping("/getRating") + public ResultData getRating(HttpServletRequest request){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + MobileAppUser appUser = mobileAppUserMapper.selectById(currentUser.getId()); + ResultData data = new ResultData<>(); + data.setData(appUser); + data.setCode(200); + return data; + } + + + private Map scoreMap(){ + Map map = new HashMap<>(); + JSONObject one = new JSONObject(); + one.put("A",2); + one.put("B",8); + one.put("C",12); + map.put(1,one); + JSONObject two = new JSONObject(); + two.put("A",0); + two.put("B",4); + two.put("C",15); + map.put(2,two); + + JSONObject three = new JSONObject(); + three.put("A",0); + three.put("B",4); + three.put("C",15); + three.put("D",0); + three.put("E",0); + map.put(2,three); + return map; + } + + @PostMapping("/eightMajorJoints") + public ResultData eightMajorJoints(HttpServletRequest request,@RequestBody EightMajorJointsVO vo){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + List records = new ArrayList<>(); + String s = RandomStringUtils.randomNumeric(16); + MajorJointsDTO dto = JOINTS_DTO_MAP1.get(vo.getArea()); + Map map = dto.getMap(); + List joints = vo.getJoints(); + joints.forEach(j -> { + DiaRecord diaRecord = new DiaRecord(); + diaRecord.setPart(vo.getPart()); + diaRecord.setArea(dto.getTitle()); + diaRecord.setQuestion(map.get(j.getNumber())); + diaRecord.setBatchNumber(s); + diaRecord.setResponse(j.getPatientResponse()); + diaRecord.setAppUserId(currentUser.getId()); + records.add(diaRecord); + }); + diaRecordMapper.insert(records); + return ResultData.success(); + } + + @PostMapping("/getReport") + public ResultData getReport(@RequestBody EightMajorJointsVO vo){ + ResultData data = new ResultData<>(); + data.setCode(200); + switch (vo.getPart()){ + case "肩关节": + MajorJointsDTO dto = JOINTS_DTO_MAP1.get(vo.getArea()); + data.setData(dto.getReport()); + return data; + case "腱鞘指关节": + MajorJointsDTO dto1 = JOINTS_DTO_MAP2.get(vo.getArea()); + data.setData(dto1.getReport()); + return data; + case "腕肘关节": + MajorJointsDTO dto2 = WAN_ZHOU_MAP.get(vo.getArea()); + data.setData(dto2.getReport()); + return data; + case "腰髋关节": + MajorJointsDTO dto3 = YAO_MAP.get(vo.getArea()); + data.setData(dto3.getReport()); + return data; + } + return ResultData.success(); + } + + +} diff --git a/applet/src/main/java/cn/unizk/controller/RunningController.java b/applet/src/main/java/cn/unizk/controller/RunningController.java new file mode 100644 index 0000000..e36bd07 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/RunningController.java @@ -0,0 +1,65 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.RunConsultation; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.RunConsultationMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2026/7/15 11:02 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/running") +public class RunningController { + + @Resource + private RunConsultationMapper runConsultationMapper; + + @GetMapping("/getRunConsults") + public Page getRunConsult(@RequestParam("currentPage") Integer currentPage, + @RequestParam("pageSize") Integer pageSize) { + + Page page = new Page<>(currentPage, pageSize); + return runConsultationMapper.selectPage(page, null); + } + + @PostMapping("/getRunConsultByIds") + public RunConsultation getRunConsultByIds(@RequestBody List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new ServiceException("参数ids不能为空"); + } + List runConsultations = runConsultationMapper.selectByIds(ids); + RunConsultation consultation = new RunConsultation(); + String lesion = runConsultations.stream().map(RunConsultation::getLesion).distinct().collect(Collectors.joining(";")); + consultation.setLesion(lesion); + String conclusion = runConsultations.stream().map(RunConsultation::getConclusion).distinct().collect(Collectors.joining("\n")); + consultation.setConclusion(conclusion); + List distinctConsult = runConsultations.stream() + .collect(Collectors.collectingAndThen( + Collectors.toMap( + RunConsultation::getLesion, + Function.identity(), + (existing, replacement) -> existing, + LinkedHashMap::new + ), + map -> new ArrayList<>(map.values()) + )); + String plan = distinctConsult.stream().map(RunConsultation::getPlan).distinct().collect(Collectors.joining("\n")); + consultation.setPlan(plan); + return consultation; + } + +} diff --git a/applet/src/main/java/cn/unizk/controller/SysDictController.java b/applet/src/main/java/cn/unizk/controller/SysDictController.java new file mode 100644 index 0000000..f312b1f --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/SysDictController.java @@ -0,0 +1,50 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.SysDict; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.service.SysDictService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2025/9/3 11:30 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/dict") +public class SysDictController { + + @Resource + private SysDictService sysDictService; + + @GetMapping("/getDictByType") + public List getDictByType(@RequestParam("type") String type){ + return sysDictService.list(new LambdaQueryWrapper() + .eq(SysDict::getDictType,type) + .eq(SysDict::getStatus,"display")); + } + + @GetMapping("/getDictType") + public List getDictType(){ + return sysDictService.list().stream().map(SysDict::getDictType) + .distinct() + .collect(Collectors.toList()); + } + + /*@GetMapping("/getGrfScanPrice") + public ResultData getGrfScanPrice(){ + SysDict sysDict = sysDictService.getById(27); + ResultData data = new ResultData<>(); + data.setCode(200); + data.setData(sysDict.getDictValue()); + return data; + }*/ +} diff --git a/applet/src/main/java/cn/unizk/controller/TestController.java b/applet/src/main/java/cn/unizk/controller/TestController.java new file mode 100644 index 0000000..fc1600f --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/TestController.java @@ -0,0 +1,45 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.PhysioThirteenArea; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.mapper.PhysioThirteenAreaMapper; +import com.google.common.collect.Lists; +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 javax.annotation.Resource; +import java.util.List; + +/** + * @Author hao + * @Date 2026/9/2 16:53 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/test") +public class TestController { + + @Resource + private PhysioThirteenAreaMapper physioThirteenAreaMapper; + + @PostMapping("/add13Area") + public ResultData add13Area(@RequestBody List areas){ + physioThirteenAreaMapper.insert(areas); + return ResultData.success(); + + } + + + public static void main(String[] args) { + String s = "1.减少膝关节扭转发力、深度负重深蹲,减少半月板挤压扭转,适度减负休养。2.强化膝关节周边大腿肌群,依靠肌肉力量分担关节内部压力。3.控制体重,降低膝关节整体负重,运动循序渐进,不突然加大运动量。4.膝关节整体做好保暖,寒凉会加重关节间隙酸胀感受。5.养护以膝关节周边肌群疏导为主,禁止直接大力按压关节缝隙。"; + List num = Lists.newArrayList("2","3","4","5"); + StringBuilder sb = new StringBuilder(s); + for (String n : num) { + int i = sb.indexOf(n); + sb.insert(i,"\\n"); + } + System.out.println(sb.toString()); + } +} diff --git a/applet/src/main/java/cn/unizk/controller/WechatPayController.java b/applet/src/main/java/cn/unizk/controller/WechatPayController.java new file mode 100644 index 0000000..3a6ff16 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/WechatPayController.java @@ -0,0 +1,67 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.exception.BusinessException; +import cn.unizk.exception.ServiceException; +import cn.unizk.pay.dto.BasePayResponse; +import cn.unizk.pay.dto.CoursePayParam; +import cn.unizk.pay.dto.HGJPayParam; +import cn.unizk.pay.dto.PayBaseRequest; +import cn.unizk.utils.HttpUtil; +import cn.unizk.utils.JkSecurityUtil; +import com.alibaba.fastjson2.JSONObject; +import com.google.common.reflect.TypeToken; +import com.google.gson.Gson; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; +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 javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Type; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +/** + * @Author hao + * @Date 2026/7/27 10:40 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/wechat") +@Slf4j +public class WechatPayController { + + @Value("${payIp}") + private String payIp; + + @PostMapping("/pay") + public ResultData pay(HttpServletRequest request,@RequestBody PayBaseRequest param){ + if (StringUtils.isBlank(param.getOpenid())){ + throw new ServiceException("openid呢???"); + } + param.setStep(2); +// String ip = "http://192.168.0.6:8083"; + String url = payIp + "/mobileApp/hf/pay"; + log.info("url===={}",url); + Map headers = new HashMap<>(); + headers.put("mobile-t",param.getAppToken()); +// PayBaseRequest requestType = createRequestType(param); + JSONObject from = JSONObject.from(param); + from.put("sceneCode",param.getSceneCode()); + String s = HttpUtil.doPostJson(url, headers, from); + Gson gson = new Gson(); + ResultData data = gson.fromJson(s, ResultData.class); + if (data == null || data.getCode() != 200){ + throw new ServiceException("微信支付下单失败"); + } + return data; + } + +} diff --git a/applet/src/main/java/cn/unizk/controller/WxAppletLoginController.java b/applet/src/main/java/cn/unizk/controller/WxAppletLoginController.java new file mode 100644 index 0000000..4639a00 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/WxAppletLoginController.java @@ -0,0 +1,279 @@ +package cn.unizk.controller; + +import cn.unizk.config.JkProperties; +import cn.unizk.constant.WxConstant; +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.MobileAppUserVO; +import cn.unizk.entity.vo.OneClickVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.BusinessChannelMapper; +import cn.unizk.mapper.MobileAppUserMapper; +import cn.unizk.mapper.YnzkSystemDeviceMapper; +import cn.unizk.service.*; +import cn.unizk.utils.*; +import cn.unizk.wxPay.service.WxPayOrderService; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.OutputStream; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; + +/** + * @Author hao + * @Date 2025/7/9 16:25 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet") +@Slf4j +public class WxAppletLoginController { + + @Resource + private WxAppletLoginService appletLoginService; + @Resource + private WxAuthService wxAuthService; + @Resource + private MobileAppUserMapper mobileAppUserMapper; + @Value("${spring.profiles.active}") + private String active; + @Resource + private JkProperties jkProperties; + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + /* @Resource + private WxPayOrderService wxPayOrderService;*/ + @Resource + private DeviceService deviceService; + @Resource + private YnzkSystemDeviceMapper ynzkSystemDeviceMapper; + @Resource + private BusinessChannelMapper businessChannelMapper; + @Resource + private SysDictService dictService; + + @GetMapping("/login") + public JSONObject login(@RequestParam("code") String code) { + return appletLoginService.appletLogin(code); + } + + @PostMapping("/editWxUser") + public int editUser(@RequestBody MobileAppUser wxUser) { + MobileAppUser user = new MobileAppUser(); + user.setNickname(wxUser.getNickname()); + user.setAvatar(wxUser.getAvatar()); + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(MobileAppUser::getId, wxUser.getId()); + return mobileAppUserMapper.update(user, wrapper); + } + + + @PostMapping("/sendPhoneCode") + public ResultData sendPhoneCode(@RequestParam("phoneNumber") String phoneNumber) { + if ("prod".equals(active)){ + String code = RandomStringUtils.randomNumeric(6); + log.info("手机验证码:{}",code); + try { + String s = SendSmsUtil.sendPhoneCode(phoneNumber, code); + JSONObject res = JSONObject.parseObject(s); + Integer statusCode = res.getInteger("statusCode"); + if (statusCode != null && statusCode == 200) { + redisTemplate.opsForValue().set(phoneNumber, code, 300, TimeUnit.SECONDS); + return ResultData.success(); + } + return ResultData.failure(500, "验证码发送失败"); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + throw new ServiceException("验证码发送失败"); + } + }else { + redisTemplate.opsForValue().set(phoneNumber, "888888", 300, TimeUnit.SECONDS); + return ResultData.success(); + } + } + +/* @PostMapping("/jkLogin") + public MobileAppUserVO JKLogin(@RequestParam("openid") String openid) { + MobileAppUser wxUser = mobileAppUserMapper.selectOne(new LambdaQueryWrapper().eq(MobileAppUser::getOpenid, openid)); + if (Objects.isNull(wxUser)) { + throw new ServiceException("登录失败!"); + } + MobileAppUserVO wxUserVO = new MobileAppUserVO(); + BeanUtils.copyProperties(wxUser, wxUserVO); + String token = JwtUtil.generateToken(wxUser.getId().toString()); + redisTemplate.opsForValue().set(WxConstant.CACHE_TOKEN_KEY + wxUser.getId(), wxUser, jkProperties.getTokenExpireTime(), TimeUnit.MINUTES); + wxUserVO.setToken(token); + return wxUserVO; + }*/ + + @PostMapping("/loginByPhone") + public MobileAppUserVO bindPhoneNumber(@RequestParam("phoneNumber") String phoneNumber, @RequestParam("code") String code, + @RequestParam("openid") String openid) { + + if ("prod".equals(active)){ + validatePhoneCode(phoneNumber, code); + } + MobileAppUser appUser = mobileAppUserMapper.selectOne(new LambdaQueryWrapper().eq(MobileAppUser::getPhoneNumber, phoneNumber)); + if (Objects.isNull(appUser)){ + appUser = new MobileAppUser(); + appUser.setOpenid(openid); + appUser.setPhoneNumber(phoneNumber); + mobileAppUserMapper.insert(appUser); + }else { + appUser.setOpenid(openid); + mobileAppUserMapper.updateById(appUser); + } + String token = JwtUtil.generateToken(phoneNumber); + MobileAppUserVO mobileAppUserVO = new MobileAppUserVO(); + BeanUtils.copyProperties(appUser, mobileAppUserVO); + mobileAppUserVO.setToken(token); + redisTemplate.opsForValue().set(WxConstant.CACHE_TOKEN_KEY + phoneNumber, appUser, jkProperties.getTokenExpireTime(), TimeUnit.DAYS); + return mobileAppUserVO; + } + + @PostMapping("/oneClickLogin") + public MobileAppUser oneClick(@RequestBody OneClickVO vo){ + String accessToken = wxAuthService.getAccessToken(); + String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + accessToken; + JSONObject jsonObject = JSONObject.from(vo); + try { + String s = HttpUtil.doPostJson(url, null, jsonObject); + log.info("一键登录接口返回:{}",s); + JSONObject res = JSONObject.parseObject(s); + Integer errcode = res.getInteger("errcode"); + + if(errcode != 0 && errcode != 42001){ + throw new ServiceException("登录失败!请稍后重试"); + } + if (errcode == 42001){ + redisTemplate.delete(WxConstant.WX_ACCESS_TOKEN); + accessToken = wxAuthService.getAccessToken(); + url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + accessToken; + String msg = HttpUtil.doPostJson(url, null, jsonObject); + res = JSONObject.parseObject(msg); + Integer code = res.getInteger("errcode"); + if (code != 0){ + throw new ServiceException("登录失败!请稍后重试"); + } + } + JSONObject phone_info = res.getJSONObject("phone_info"); + String phoneNumber = phone_info.getString("phoneNumber"); + log.info("获取到的用户手机号:{}",phoneNumber); + MobileAppUser user = mobileAppUserMapper.selectOne(new LambdaQueryWrapper().eq(MobileAppUser::getPhoneNumber, phoneNumber)); + if (Objects.isNull(user)){ + user = new MobileAppUser(); + user.setOpenid(vo.getOpenid()); + user.setPhoneNumber(phoneNumber); + user.setCreateTime(LocalDateTime.now()); + mobileAppUserMapper.insert(user); + }else { + user.setOpenid(vo.getOpenid()); + mobileAppUserMapper.updateById(user); + } + String token = JwtUtil.generateToken(phoneNumber); + MobileAppUserVO mobileAppUserVO = new MobileAppUserVO(); + BeanUtils.copyProperties(user, mobileAppUserVO); + mobileAppUserVO.setToken(token); + redisTemplate.opsForValue().set(WxConstant.CACHE_TOKEN_KEY + phoneNumber, user, jkProperties.getTokenExpireTime(), TimeUnit.DAYS); + return mobileAppUserVO; + }catch (Exception e){ + e.printStackTrace(); + throw new ServiceException("登录失败!请稍后重试"); + } + } + + @GetMapping("/getAppletQrCode") + public void getAppletQrCode(HttpServletResponse response){ + String accessToken = wxAuthService.getAccessToken(); + String url = String.format("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=%s",accessToken); + log.info("url={}",url); + JSONObject jsonBody = JSONObject.of(); + jsonBody.put("scene","apple=1"); + jsonBody.put("check_path",false); + jsonBody.put("env_version","trial"); + byte[] bytes = HttpUtil.postRtnBytes(url, null, jsonBody); + if (bytes == null || bytes.length == 0){ + ServletUtils.renderString(response,"qrcode res is empty"); + return; + } +// response.setContentType("image/jpeg"); + response.setContentLength(bytes.length); + try (OutputStream os = response.getOutputStream()) { + os.write(bytes); + os.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @GetMapping("/logout") + public ResultData logout(HttpServletRequest request){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + return ResultData.success(); + } + redisTemplate.delete(WxConstant.CACHE_TOKEN_KEY + currentUser.getPhoneNumber()); + return ResultData.success(); + } + + @GetMapping("/getCurrentUser") + public MobileAppUser getCurrentUser(HttpServletRequest request) { + return JkSecurityUtil.getCurrentUser(request); + } + + private void validatePhoneCode(String phone, String code) { + String cacheCode = (String) redisTemplate.opsForValue().get(phone); + if (StringUtils.isBlank(cacheCode) || !cacheCode.equals(code)) { + throw new ServiceException("验证码错误"); + } + redisTemplate.delete(phone); + } + + // @GetMapping("/test") + public boolean test() { + List ynzkSystemDevices = ynzkSystemDeviceMapper.selectList(null); + List deviceList = new ArrayList<>(); + ynzkSystemDevices.forEach(s -> { + Device device = new Device(); + device.setMuid(s.getMuid()); + device.setDeviceId(s.getSerial()); + deviceList.add(device); + }); + return deviceService.saveBatch(deviceList); + } + + @GetMapping("/test/one") + public String testOne(SysDict dict){ + if (Objects.isNull(dict) || dict.getDictCode() == null){ + return "fail"; + } + boolean b = dictService.updateById(dict); + return b ? "success" : "fail"; + } + + @GetMapping("/modifyDict") + public void modifyDict(SysDict dict){ + dictService.updateById(dict); + } + +} diff --git a/applet/src/main/java/cn/unizk/controller/WxDeviceController.java b/applet/src/main/java/cn/unizk/controller/WxDeviceController.java new file mode 100644 index 0000000..c177567 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/WxDeviceController.java @@ -0,0 +1,32 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.Device; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.service.DeviceService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @Author hao + * @Date 2025/8/30 16:31 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/device") +public class WxDeviceController { + + @Resource + private DeviceService deviceService; + + @GetMapping("/list") + public Page list(UniPage uniPage, @RequestParam("storeId") Integer storeId){ + Page page = new Page<>(); + page.setCurrent(uniPage.getCurrentPage()); + page.setSize(uniPage.getPageSize()); + return deviceService.page(page,new LambdaQueryWrapper().eq(Device::getStatus,"1").eq(Device::getStoreId,storeId)); + } + +} diff --git a/applet/src/main/java/cn/unizk/controller/WxOrderController.java b/applet/src/main/java/cn/unizk/controller/WxOrderController.java new file mode 100644 index 0000000..141713b --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/WxOrderController.java @@ -0,0 +1,245 @@ +package cn.unizk.controller; + +import cn.unizk.constant.WxConstant; +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.*; +import cn.unizk.enums.OrderAfterSaleStatus; +import cn.unizk.enums.OrderStatus; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.*; +import cn.unizk.service.*; +import cn.unizk.utils.BeanCopyUtils; +import cn.unizk.utils.JkSecurityUtil; +import cn.unizk.utils.JwtUtil; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2025/8/30 11:36 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/order") +public class WxOrderController { + + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + @Resource + private MobileOrderMapper mobileOrderMapper; + @Resource + private ComboService comboService; + @Resource + private JkProductService productService; + @Resource + private JkStoreService storeService; + @Resource + private MobileAppUserMapper mobileAppUserMapper; + @Resource + private JkPhysioService physioService; + @Resource + private MobileOrderItemMapper mobileOrderItemMapper; + @Resource + private OrderReviewMapper reviewMapper; + @Resource + private CourseMapper courseMapper; + + @PostMapping("/deleteInvalidOrder") + public ResultData deleteInvalidOrder(@RequestParam("orderId") String orderId, HttpServletRequest request) { + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request.getHeader(WxConstant.APPLET_LOGIN_SIGN)); + if (Objects.isNull(currentUser)) { + throw new ServiceException(401, "无权访问"); + } + MobileOrder one = mobileOrderMapper.selectOne(new LambdaQueryWrapper() + .eq(MobileOrder::getOrderId, orderId) + .eq(MobileOrder::getMobileUserId, currentUser.getId())); + if (Objects.isNull(one)) { + throw new ServiceException("您无权限删除"); + } + mobileOrderMapper.deleteById(orderId); + return ResultData.success(); + } + + @GetMapping("/getPersonOrders") + public Page getPersonOrders(HttpServletRequest request, UniPage uniPage, @RequestParam(value = "orderStatus", required = false) String orderStatus) { + boolean afterSale = false; + if ("request_refund,refunded".equals(orderStatus)) { + orderStatus = ""; + afterSale = true; + } + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)) { + return null; + } + List orderStatusList = null; + if (StringUtils.isNotBlank(orderStatus) && orderStatus.contains(",")) { + String[] split = orderStatus.split(","); + orderStatusList = Arrays.asList(split); + } else if (StringUtils.isNotBlank(orderStatus)) { + orderStatusList = new ArrayList<>(); + orderStatusList.add(orderStatus); + } + Page page = new Page<>(); + page.setSize(uniPage.getPageSize()); + page.setCurrent(uniPage.getCurrentPage()); +// ArrayList strings = Lists.newArrayList("unpaid", "not_shipped", "shipped", "to_be_evaluate"); + Page orderPage = mobileOrderMapper.selectPage(page, new LambdaQueryWrapper() + .eq(MobileOrder::getMobileUserId, currentUser.getId()) + .in(CollectionUtils.isNotEmpty(orderStatusList), MobileOrder::getStatus, orderStatusList) + .eq(!afterSale && StringUtils.isNotBlank(orderStatus), MobileOrder::getAfterSaleStatus, 0) + .ne(afterSale, MobileOrder::getAfterSaleStatus, 0) + .orderByDesc(MobileOrder::getCreateTime) + /*.in(WxOrder::getStatus,strings)*/); + List records = orderPage.getRecords(); + /*List collect = records.stream().filter(o -> { + return strings.contains(o.getStatus()); + }).collect(Collectors.toList());*/ + List vos = new ArrayList<>(); + for (MobileOrder order : records) { + MobileOrderVO vo = new MobileOrderVO(); + BeanUtils.copyProperties(order, vo); + /*if (order.getAfterSaleStatus() != 0){ + vo.setStatus(OrderAfterSaleStatus.getValueByKey(order.getAfterSaleStatus())); + }*/ + List wxOrderItems = mobileOrderItemMapper.selectList(new LambdaQueryWrapper().eq(MobileOrderItem::getMobileOrderId, order.getOrderId())); + Collection wxOrderItemVOS = BeanCopyUtils.copyArrays(wxOrderItems, MobileOrderItemVO::new); + if (CollectionUtils.isEmpty(wxOrderItemVOS)) { + vos.add(vo); + continue; + } + for (MobileOrderItemVO wxOrderItemVO : wxOrderItemVOS) { + if (wxOrderItemVO.getProductId() != null) { + JkProduct product = productService.getById(wxOrderItemVO.getProductId()); + if (product != null){ + wxOrderItemVO.setProductName(product.getProductName()); + wxOrderItemVO.setImage(product.getProductImage()); + } + } else if (wxOrderItemVO.getComboId() != null) { + Combo combo = comboService.getById(wxOrderItemVO.getComboId()); + if (combo != null){ + wxOrderItemVO.setProductName(combo.getComboName()); + wxOrderItemVO.setImage(combo.getImage()); + } + } + } + vo.setOrderItemVOS((List) wxOrderItemVOS); + vos.add(vo); + } + Page voPage = new Page<>(); + voPage.setTotal(orderPage.getTotal()); + voPage.setSize(orderPage.getSize()); + voPage.setCurrent(orderPage.getCurrent()); + voPage.setRecords(vos); + return voPage; + } + + @GetMapping("/getSelfOneOrder") + public MobileOrderDetailVO getSelfOneOrder(@RequestParam("orderId") String orderId, HttpServletRequest request) { + MobileOrder order = mobileOrderMapper.selectById(orderId); + if (Objects.isNull(order)) { + return new MobileOrderDetailVO(); + } + MobileOrderDetailVO vo = new MobileOrderDetailVO(); + BeanUtils.copyProperties(order, vo); + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser) || !currentUser.getId().equals(order.getMobileUserId())) { + throw new ServiceException(401, "无权限访问"); + } + if (order.getStoreId() != null) { + JkStore jkStore = storeService.getById(order.getStoreId()); + vo.setJkStore(jkStore); + } + if (order.getPhysioId() != null) { + JkPhysio jkPhysio = physioService.getById(order.getPhysioId()); + vo.setJkPhysio(jkPhysio); + } + if (order.getProductId() != null){ + JkProduct jkProduct = productService.getById(order.getProductId()); + vo.setProductName(jkProduct.getProductName()); + } + if (order.getComboId() != null){ + Combo combo = comboService.getById(order.getComboId()); + vo.setProductName(combo.getComboName()); + } + if (order.getCourseId() != null){ + Course course = courseMapper.selectById(order.getCourseId()); + vo.setProductName(course.getTitle()); + } + List wxOrderItems = mobileOrderItemMapper.selectList(new LambdaQueryWrapper().eq(MobileOrderItem::getMobileOrderId, order.getOrderId())); + if (CollectionUtils.isNotEmpty(wxOrderItems)) { + Collection wxOrderItemVOS = BeanCopyUtils.copyArrays(wxOrderItems, MobileOrderItemVO::new); + for (MobileOrderItemVO itemVO : wxOrderItemVOS) { + if (itemVO.getProductId() != null) { + JkProduct product = productService.getById(itemVO.getProductId()); + itemVO.setProductName(product.getProductName()); + itemVO.setImage(product.getProductImage()); + } else if (itemVO.getComboId() != null) { + Combo combo = comboService.getById(itemVO.getComboId()); + itemVO.setImage(combo.getImage()); + itemVO.setProductName(combo.getComboName()); + } + } + vo.setOrderItemVOS((List) wxOrderItemVOS); + } + MobileAppUser user = mobileAppUserMapper.selectOne(new LambdaQueryWrapper().eq(MobileAppUser::getId, order.getMobileUserId())); + vo.setMobileAppUser(user); + return vo; + } + + @GetMapping("/getSortSum") + public JSONObject getSum(HttpServletRequest request) { + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + JSONObject of = JSONObject.of(); + List list = mobileOrderMapper.selectList(new LambdaQueryWrapper().eq(MobileOrder::getMobileUserId, currentUser.getId())); + List noAfterSales = list.stream().filter(o -> o.getAfterSaleStatus().equals(0)).collect(Collectors.toList()); + long unpaid = noAfterSales.stream().filter(o -> OrderStatus.unpaid.name().equals(o.getStatus())).count(); + of.put("待付款", unpaid); + long daifahuo = noAfterSales.stream().filter(o -> OrderStatus.not_shipped.name().equals(o.getStatus())).count(); + of.put("待发货", daifahuo); + long daishouhuo = noAfterSales.stream().filter(o -> (OrderStatus.shipped.name().equals(o.getStatus()) || OrderStatus.unverified.name().equals(o.getStatus()))).count(); + of.put("待收货/使用", daishouhuo); + long daipingjia = noAfterSales.stream().filter(o -> (OrderStatus.received.name().equals(o.getStatus()) || OrderStatus.verified.name().equals(o.getStatus()))).count(); + of.put("待评价", daipingjia); + ArrayList integers = Lists.newArrayList(0, 5, 6, 7); + long tuikuan = list.stream().filter(o -> !integers.contains(o.getAfterSaleStatus())).count(); + of.put("退款", tuikuan); + return of; + } + + @PostMapping("/comment") + @Transactional(rollbackFor = Exception.class) + public ResultData comment(@Validated @RequestBody OrderReview review){ + MobileOrder wxOrder = mobileOrderMapper.selectById(review.getOrderId()); + if (Objects.isNull(wxOrder)){ + throw new ServiceException("无此订单"); + } + MobileAppUser wxUser = mobileAppUserMapper.selectOne(new LambdaQueryWrapper().eq(MobileAppUser::getId, wxOrder.getMobileUserId())); + if (Objects.isNull(wxUser)){ + throw new ServiceException("数据出现异常"); + } + wxUser.setPoints(wxUser.getPoints() + 1); + mobileAppUserMapper.updateById(wxUser); + reviewMapper.insert(review); + wxOrder.setStatus(OrderStatus.commented.name()); + mobileOrderMapper.updateById(wxOrder); + return ResultData.success(); + } + +} diff --git a/applet/src/main/java/cn/unizk/controller/WxPayController.java b/applet/src/main/java/cn/unizk/controller/WxPayController.java new file mode 100644 index 0000000..96058b5 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/WxPayController.java @@ -0,0 +1,54 @@ +package cn.unizk.controller; + +import cn.unizk.config.WxProperties; +import cn.unizk.constant.WxConstant; +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.entity.vo.MobileOrderVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.exception.ServiceException; +import cn.unizk.service.PayService; +import cn.unizk.utils.JkSecurityUtil; +import cn.unizk.wxPay.vo.WxPlaceOrderResVO; +import com.alibaba.fastjson2.JSONObject; +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; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.Objects; + +/** + * @Author hao + * @Date 2025/8/28 18:17 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/wxPay") +@Slf4j +public class WxPayController { + + @Resource(name = "wx") + private PayService payService; + @Resource + private WxProperties wxProperties; + + + @PostMapping("/placeOrder") + public WxPlaceOrderResVO placeOrder(@RequestBody MobileOrderVO orderVO, HttpServletRequest request){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request.getHeader(WxConstant.APPLET_LOGIN_SIGN)); + if (Objects.isNull(currentUser) || !currentUser.getId().equals(orderVO.getMobileUserId())){ + throw new ServiceException(403,"无权访问该资源"); + } + return payService.wxPlaceOrder(orderVO); + } + + @PostMapping("/paySuccessCallBack") + public ResultData callback(@RequestBody JSONObject body, HttpServletRequest request){ + + payService.wxPaySuccessHandler(request,body); + return ResultData.success(); + } +} diff --git a/applet/src/main/java/cn/unizk/controller/WxUserController.java b/applet/src/main/java/cn/unizk/controller/WxUserController.java new file mode 100644 index 0000000..9c88917 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/WxUserController.java @@ -0,0 +1,348 @@ +package cn.unizk.controller; + +import cn.unizk.config.JkProperties; +import cn.unizk.constant.WxConstant; +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.ReportReqVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.enums.OrderStatus; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.*; +import cn.unizk.service.JkPhysioService; +import cn.unizk.service.UserAddressService; +import cn.unizk.service.WxUserService; +import cn.unizk.utils.JkSecurityUtil; +import cn.unizk.utils.QRcodeUtil; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.time.Clock; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * @Author hao + * @Date 2025/10/13 18:38 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/applet/user") +@Slf4j +public class WxUserController { + + @Resource + private MobileAppUserMapper mobileAppUserMapper; + @Resource + private MobileUserAddressMapper mobileUserAddressMapper; + @Resource + private MobileOrderMapper mobileOrderMapper; + @Resource + private SysDictMapper sysDictMapper; + @Resource + private GrfPjMapper grfPjMapper; + @Resource + private MobileAppUserAccountMapper mobileAppUserAccountMapper; + @Resource + private RechargePackageMapper rechargePackageMapper; + @Resource + private JkPhysioService jkPhysioService; + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + @Resource + private JkProperties jkProperties; + @Resource + private UserFreeTrialInfoMapper userFreeTrialInfoMapper; + + + @GetMapping("/freeTrialQRcode") + public void freeTrial(HttpServletResponse response,HttpServletRequest request){ + log.info("获取二维码"); + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + String url = "hello,userId=" + currentUser.getId(); + QRcodeUtil.generateQrcode(response,url,null); + } + + @GetMapping("/checkFreeTrial") + public ResultData checkFree(HttpServletRequest request){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + UserFreeTrialInfo userFreeTrialInfo = userFreeTrialInfoMapper.selectOne(new LambdaQueryWrapper() + .eq(UserFreeTrialInfo::getUserId, currentUser.getId())); + MobileAppUser user = mobileAppUserMapper.selectById(currentUser.getId()); + ResultData resultData = new ResultData<>(); + JSONObject jsonObject = new JSONObject(); + resultData.setCode(200); + if (Objects.isNull(userFreeTrialInfo)){ + jsonObject.put("flag",0); + }else { + jsonObject.put("flag",1); + } + jsonObject.put("firstTrial",user.getFreeTrial()); + resultData.setData(jsonObject); + return resultData; + } + + @PostMapping("/saveFreeTrialInfo") + public ResultData saveFreeTrialInfo(HttpServletRequest request,@RequestBody UserFreeTrialInfo info){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + UserFreeTrialInfo userFreeTrialInfo = userFreeTrialInfoMapper.selectOne(new LambdaQueryWrapper() + .eq(UserFreeTrialInfo::getUserId, currentUser.getId())); + if (Objects.nonNull(userFreeTrialInfo)){ + throw new ServiceException("用户已存在数据"); + } + info.setUserId(currentUser.getId()); + info.setCreateTime(LocalDateTime.now()); + userFreeTrialInfoMapper.insert(info); + return ResultData.success(); + } + + @PostMapping("/editUserInfo") + public ResultData editUserInfo(@RequestBody MobileAppUser user){ + mobileAppUserMapper.updateById(user); + return ResultData.success(); + } + + @GetMapping("/getUserIdType") + public ResultData getUserIdType(HttpServletRequest request){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + JkPhysio one = jkPhysioService.getOne(new LambdaQueryWrapper().eq(JkPhysio::getPhysioTel, currentUser.getPhoneNumber())); + ResultData data = new ResultData<>(); + data.setCode(200); + if (Objects.isNull(one)){ + data.setData(0); + }else { + data.setData(1); + } + return data; + } + + + @PostMapping("/switchIdType") + public ResultData switchIdType(HttpServletRequest request,@RequestParam("type") String type){ + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + if (!type.equals("C") && !type.equals("P")){ + throw new ServiceException("未知的身份类型"); + } + currentUser.setUserType(type); + mobileAppUserMapper.updateById(currentUser); + redisTemplate.delete(WxConstant.CACHE_TOKEN_KEY + currentUser.getPhoneNumber()); + redisTemplate.opsForValue().set(WxConstant.CACHE_TOKEN_KEY + currentUser.getPhoneNumber(), currentUser, jkProperties.getTokenExpireTime(), TimeUnit.DAYS); + return ResultData.success(); + } + + @PostMapping("/rememberDia") + public ResultData rememberDia(HttpServletRequest request, @Validated @RequestBody ReportReqVO vo) { + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)) { + throw new ServiceException(401, "登录已过期"); + } + MobileAppUser user = new MobileAppUser(); + user.setId(currentUser.getId()); + user.setSymptom(vo.getReport()); + user.setAge(vo.getAge()); + user.setHeight(vo.getHeight()); + user.setWeight(vo.getWeight()); + user.setGender(vo.getGender()); +// user.setTemplateId(vo.getTemplateId()); + user.setPainNumber(vo.getPainNumber()); + mobileAppUserMapper.updateById(user); + List integers = Lists.newArrayList("1", "2", "4", "5", "7", "8", "10", "11", "12", "13"); + boolean b = false; + int t = 2; + if (vo.getPainNumber().contains(",")) { + List ids = Arrays.asList(vo.getPainNumber().split(",")); + for (String id : ids) { + if (!integers.contains(id)) { + b = true; + break; + } + } + if (!b) { + if ("000".equals(vo.getCode1()) && "000".equals(vo.getCode2())) { + t = 1; + } + } + } else { + if (!integers.contains(vo.getPainNumber())) { + b = true; + } else { + if ("000".equals(vo.getCode1()) && "000".equals(vo.getCode2())) { + t = 1; + } + } + } + ResultData data = new ResultData<>(); + data.setCode(200); + data.setData(t); + return data; + } + + @GetMapping("/addresses") + public List addresses(HttpServletRequest request) { + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)) { + throw new ServiceException(401, "登录已过期"); + } + return mobileUserAddressMapper.selectList(new LambdaQueryWrapper() + .eq(MobileUserAddress::getMobileUserId, currentUser.getId())); + } + + @PostMapping("/addOrUpdateAddress") + public int addOrUpdateAddress(@RequestBody MobileUserAddress address, HttpServletRequest request) { + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (currentUser == null) { + throw new ServiceException(401, "登陆已过期"); + } + if (!currentUser.getId().equals(address.getMobileUserId())) { + throw new ServiceException(403, "无权访问"); + } + List wxUserAddresses = mobileUserAddressMapper.selectList(null); + if (CollectionUtils.isEmpty(wxUserAddresses)) { + address.setDefaultAddr(0); + } + if (address.getAddressId() == null && address.getDefaultAddr() == 0) { + MobileUserAddress one = mobileUserAddressMapper.selectOne(new LambdaQueryWrapper().eq(MobileUserAddress::getDefaultAddr, 0)); + if (Objects.nonNull(one)) { + one.setDefaultAddr(1); + mobileUserAddressMapper.updateById(one); + } + } + if (address.getAddressId() != null && address.getDefaultAddr() == 0) { + MobileUserAddress userAddress = mobileUserAddressMapper.selectById(address.getAddressId()); + if (Objects.isNull(userAddress)) { + throw new ServiceException("no this address"); + } + if (userAddress.getDefaultAddr() != 0) { + MobileUserAddress one = mobileUserAddressMapper.selectOne(new LambdaQueryWrapper().eq(MobileUserAddress::getDefaultAddr, 0)); + if (Objects.nonNull(one)) { + one.setDefaultAddr(1); + mobileUserAddressMapper.updateById(one); + } + } + } + if (address.getAddressId() == null) { + address.setCreateTime(LocalDateTime.now(Clock.systemDefaultZone())); + } else { + address.setUpdateTime(LocalDateTime.now(Clock.systemDefaultZone())); + } + mobileUserAddressMapper.insertOrUpdate(address); + return address.getAddressId(); + } + + @PostMapping("/deleteAddr") + public int deleteAddr(@RequestParam("addressId") Integer addressId, HttpServletRequest request) { + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (currentUser == null) { + throw new ServiceException(401, "登陆已过期"); + } + MobileUserAddress userAddress = mobileUserAddressMapper.selectById(addressId); + if (Objects.isNull(userAddress)) { + throw new ServiceException("地址不存在"); + } + if (!currentUser.getId().equals(userAddress.getMobileUserId())) { + throw new ServiceException(403, "无权访问"); + } + return mobileUserAddressMapper.deleteById(addressId); + } + + @PostMapping("/applyRefund") + public int applyRefund(@RequestBody MobileOrder order, HttpServletRequest request) { + MobileOrder mobileOrder = mobileOrderMapper.selectById(order.getOrderId()); + if (Objects.isNull(mobileOrder)) { + throw new ServiceException("查无此单"); + } + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (currentUser == null || !currentUser.getId().equals(mobileOrder.getMobileUserId())) { + throw new ServiceException("无权访问"); + } +// wxOrder.setStatus(OrderStatus.request_refund.name()); + mobileOrder.setApplyRefundTime(LocalDateTime.now()); + mobileOrder.setRefundReason(order.getRefundReason()); + mobileOrder.setRefundTrackingNumber(order.getRefundTrackingNumber()); + mobileOrder.setAfterSaleStatus(order.getAfterSaleStatus()); + return mobileOrderMapper.updateById(mobileOrder); + } + + @PostMapping("/refundReason") + public int refundReason(@RequestParam("orderId") String orderId, @RequestParam("reason") String reason, HttpServletRequest request) { + MobileOrder mobileOrder = mobileOrderMapper.selectById(orderId); + if (Objects.isNull(mobileOrder)) { + throw new ServiceException("无此订单"); + } + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (currentUser == null || !currentUser.getId().equals(mobileOrder.getMobileUserId())) { + throw new ServiceException("无权访问"); + } + mobileOrder.setRefundReason(reason); + return mobileOrderMapper.updateById(mobileOrder); + } + + @GetMapping("/getGrfScanPrice") + public ResultData getGrfScanPrice(HttpServletRequest request, @RequestParam(value = "id", required = false) Integer id) { + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + List wxOrders = mobileOrderMapper.selectList(new LambdaQueryWrapper() + .eq(MobileOrder::getMobileUserId, currentUser.getId()) + .eq(MobileOrder::getStatus, OrderStatus.paid.name()) + .eq(MobileOrder::getOrderType, 1)); + ResultData data = new ResultData<>(); + if (CollectionUtils.isEmpty(wxOrders)) { + data.setCode(200); + SysDict sysDict = sysDictMapper.selectOne(new LambdaQueryWrapper().eq(SysDict::getDictType, "grf")); + data.setData(Objects.nonNull(sysDict) ? sysDict.getDictValue() : "99"); + return data; + } else { + if (id == null) { + throw new ServiceException("您不是首次体验用户!"); + } + GrfPj grfPj = grfPjMapper.selectById(id); + data.setCode(200); + data.setData(grfPj.getPrice().toString()); + return data; + } + } + + @GetMapping("/getGrfPrice") + public List list() { + return grfPjMapper.selectList(null); + } + + @GetMapping("/getAccountBalance") + public MobileAppUserAccount account(HttpServletRequest request) { + MobileAppUser currentUser = JkSecurityUtil.getCurrentUser(request); + MobileAppUserAccount account = mobileAppUserAccountMapper.selectOne(new LambdaQueryWrapper().eq(MobileAppUserAccount::getMobileUserId, currentUser.getId())); + if (account == null) { + return new MobileAppUserAccount(); + } + return account; + } + + @GetMapping("/getVipRechargePackage") + public List rechargePackages() { + return rechargePackageMapper.selectList(null); + } + +} diff --git a/applet/src/main/java/cn/unizk/controller/XunFuPayController.java b/applet/src/main/java/cn/unizk/controller/XunFuPayController.java new file mode 100644 index 0000000..c3f0635 --- /dev/null +++ b/applet/src/main/java/cn/unizk/controller/XunFuPayController.java @@ -0,0 +1,154 @@ +/* +package cn.unizk.controller; + +import cn.unizk.constant.WxConstant; +import cn.unizk.entity.po.WxUser; +import cn.unizk.entity.vo.CallbackResponse; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.WxOrderMapper; +import cn.unizk.utils.JkSecurityUtil; +import cn.unizk.wxPay.vo.WxOrderVO; +import cn.unizk.wxPay.vo.WxPlaceOrderResVO; +import cn.unizk.xunfupay.dto.AddFzAccountDTO; +import cn.unizk.xunfupay.dto.PaySuccessCallbackDTO; +import cn.unizk.xunfupay.dto.QueryOrderTradeDetailResponse; +import cn.unizk.xunfupay.service.XunFuPayService; +import cn.unizk.xunfupay.util.FileUploadUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.util.HashMap; +import java.util.Objects; + +*/ +/** + * @Author hao + * @Date 2025/9/22 16:35 + * @Version 1.0 + **//* + +@RestController +@Slf4j +@RequestMapping("/applet/xunfuPay") +public class XunFuPayController { + + @Resource + private XunFuPayService xunFuPayService; + @Resource + private WxOrderMapper orderMapper; + + */ +/** + * 绑定微信小程序appid + * @return + *//* + + @PostMapping("/bindWxAppid") + public boolean bindWxAppid(){ + return xunFuPayService.bindWxAppID(); + } + + */ +/** + * 开通分账功能 + * @return + *//* + + @PostMapping("/activateFz") + public boolean activateFz(){ + return xunFuPayService.activateFz(); + } + + */ +/** + * 添加分账接收方账户 + * @param dto + * @return + *//* + + @PostMapping("/addFzAccount") + public ResultData addFzAccount(@RequestBody AddFzAccountDTO dto,@RequestParam("storeId") Integer storeId){ + return xunFuPayService.addFzAccount(dto,storeId); + } + + */ +/** + * idCardFront-法人身份证正面(人面), + * idCardBack-法人身份证反面(国徽面), + * personWithIdCard-法人手持身份证, + * bankCard-结算银行卡照片(对私上送), + * license-营业执照, + * openAccountLicenses-开户许可证(对公上送) + * @return url + *//* + + @PostMapping("/uploadFile/{fileType}") + public String getUploadToken(@RequestParam("file")MultipartFile file, @PathVariable("fileType") String fileType){ + String filename = file.getOriginalFilename(); + if (StringUtils.isBlank(filename) || !filename.contains(".")){ + throw new ServiceException("文件类型不正确"); + } + String name = filename.substring(filename.lastIndexOf("/") + 1); + try { + return FileUploadUtil.autoUploadFile(file.getInputStream(),name,fileType); + } catch (IOException e) { + e.printStackTrace(); + return "file upload failure"; + } + } + + */ +/** + * 分账接收方签约 + * @return + * @throws NoSuchAlgorithmException + *//* + + @PostMapping("/qianyue") + public String qianyue() throws NoSuchAlgorithmException { + return xunFuPayService.qianyue(); + } + + */ +/** + * 下单 + * @param vo + * @param request + * @return + *//* + + @PostMapping("/placeOrder") + public WxPlaceOrderResVO placeOrder(@RequestBody WxOrderVO vo, HttpServletRequest request){ + WxUser currentUser = JkSecurityUtil.getCurrentUser(request.getHeader(WxConstant.APPLET_LOGIN_SIGN)); + if (Objects.isNull(currentUser) || !currentUser.getOpenid().equals(vo.getOpenid())){ + throw new ServiceException(403,"无权访问该资源"); + } + return xunFuPayService.xunfuPlaceOrder(vo); + } + + @PostMapping("/callback") + public CallbackResponse callback(@RequestBody PaySuccessCallbackDTO dto){ + log.info("环迅支付成功回调返回参数:{}",dto.toString()); + try { + QueryOrderTradeDetailResponse queryOrderTradeDetailResponse = xunFuPayService.queryOrderTradeDetailResponse(dto.getOrderNo()); + String settleAmount = queryOrderTradeDetailResponse.getSettleAmount(); + String orderNo = queryOrderTradeDetailResponse.getOrderNo(); + boolean b = xunFuPayService.applyFz(orderNo, settleAmount); + log.info("订单{}分账是否成功:{}",orderNo,b); + //修改订单支付状态 + orderMapper.updateStatusToPaid(orderNo); + return new CallbackResponse("1"); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + return new CallbackResponse("1"); + } + } +} +*/ diff --git a/applet/src/main/java/cn/unizk/filter/JkCorsFilter.java b/applet/src/main/java/cn/unizk/filter/JkCorsFilter.java new file mode 100644 index 0000000..31dfdae --- /dev/null +++ b/applet/src/main/java/cn/unizk/filter/JkCorsFilter.java @@ -0,0 +1,45 @@ +package cn.unizk.filter; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.servlet.*; +import javax.servlet.annotation.WebFilter; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * @Author hao + * @Date 2025/9/13 17:01 + * @Version 1.0 + **/ +@Slf4j +public class JkCorsFilter implements Filter { + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + HttpServletResponse response = (HttpServletResponse) servletResponse; + HttpServletRequest request = (HttpServletRequest) servletRequest; + log.info("进入jkcorsfilter过滤器"); + // 允许任何域名(生产环境请换成具体域名) + response.setHeader("Access-Control-Allow-Origin", "http://369.peaktcm.com:9000"); + + // 允许带自定义请求头 + response.setHeader("Access-Control-Allow-Headers", "Content-Type,token"); + + response.setHeader("Access-Control-Expose-Headers", "Authorization"); + + // 允许浏览器携带 cookie + response.setHeader("Access-Control-Allow-Credentials", "true"); + + // 允许的 HTTP 方法 + response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); + + // 关键:预检请求直接返回 200,其他正常放行 + if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { + response.setStatus(HttpServletResponse.SC_OK); + return; // 预检结束 + } + filterChain.doFilter(servletRequest, servletResponse); + } +} diff --git a/applet/src/main/java/cn/unizk/huifupay/config/properties/HuiFuProperties.java b/applet/src/main/java/cn/unizk/huifupay/config/properties/HuiFuProperties.java new file mode 100644 index 0000000..4e23490 --- /dev/null +++ b/applet/src/main/java/cn/unizk/huifupay/config/properties/HuiFuProperties.java @@ -0,0 +1,34 @@ +package cn.unizk.huifupay.config.properties; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Author hao + * @Date 2025/9/28 16:49 + * @Version 1.0 + **/ +@Getter +@Setter +@Component +@ConfigurationProperties(prefix = "huifu") +public class HuiFuProperties { + + private String huifuId; + + private String payApi; + + private String refundApi; + + private String publicKey; + + private String privateKey; + + private String notifyUrl; + + private String productId; + + private String configureAppletCallbackUrl; +} diff --git a/applet/src/main/java/cn/unizk/huifupay/config/properties/HuiFuVendorProperties.java b/applet/src/main/java/cn/unizk/huifupay/config/properties/HuiFuVendorProperties.java new file mode 100644 index 0000000..af541f7 --- /dev/null +++ b/applet/src/main/java/cn/unizk/huifupay/config/properties/HuiFuVendorProperties.java @@ -0,0 +1,30 @@ +package cn.unizk.huifupay.config.properties; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Author hao + * @Date 2026/3/11 10:43 + * @Version 1.0 + **/ +@ConfigurationProperties(prefix = "huifu-vendor") +@Component +@Getter +@Setter +public class HuiFuVendorProperties { + + private String sysId; + + private String huifuId; + + private String publicKey; + + private String privateKey; + + private String productId; + + private String notifyUrl; +} diff --git a/applet/src/main/java/cn/unizk/huifupay/dto/HuifuBaseResponse.java b/applet/src/main/java/cn/unizk/huifupay/dto/HuifuBaseResponse.java new file mode 100644 index 0000000..904c5d3 --- /dev/null +++ b/applet/src/main/java/cn/unizk/huifupay/dto/HuifuBaseResponse.java @@ -0,0 +1,12 @@ +package cn.unizk.huifupay.dto; + +import lombok.Data; + +/** + * @Author hao + * @Date 2025/9/29 13:35 + * @Version 1.0 + **/ +@Data +public class HuifuBaseResponse { +} diff --git a/applet/src/main/java/cn/unizk/huifupay/dto/HuifuPlaceOrderParamBaseDTO.java b/applet/src/main/java/cn/unizk/huifupay/dto/HuifuPlaceOrderParamBaseDTO.java new file mode 100644 index 0000000..dcbeb37 --- /dev/null +++ b/applet/src/main/java/cn/unizk/huifupay/dto/HuifuPlaceOrderParamBaseDTO.java @@ -0,0 +1,18 @@ +package cn.unizk.huifupay.dto; + +import lombok.Data; + +/** + * @Author hao + * @Date 2026/4/30 10:34 + * @Version 1.0 + **/ +@Data +public class HuifuPlaceOrderParamBaseDTO { + private String openid; + + private Integer userId; + private String goodsDesc; + private String placeOrderAmount; + private T t; +} diff --git a/applet/src/main/java/cn/unizk/huifupay/service/HuiFuPayService.java b/applet/src/main/java/cn/unizk/huifupay/service/HuiFuPayService.java new file mode 100644 index 0000000..245c1a3 --- /dev/null +++ b/applet/src/main/java/cn/unizk/huifupay/service/HuiFuPayService.java @@ -0,0 +1,291 @@ +package cn.unizk.huifupay.service; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.unizk.config.WxProperties; +import cn.unizk.entity.po.JkStore; +import cn.unizk.entity.po.MobileOrder; +import cn.unizk.entity.po.MobileOrderItem; +import cn.unizk.entity.vo.MobileOrderItemVO; +import cn.unizk.entity.vo.MobileOrderVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.enums.OrderStatus; +import cn.unizk.exception.ServiceException; +import cn.unizk.huifupay.config.properties.HuiFuProperties; +import cn.unizk.huifupay.utils.HuifuSignUtil; +import cn.unizk.mapper.JkStoreMapper; +import cn.unizk.mapper.MobileOrderItemMapper; +import cn.unizk.mapper.MobileOrderMapper; +import cn.unizk.service.PayService; +import cn.unizk.utils.BeanCopyUtils; +import cn.unizk.utils.HttpUtil; +import cn.unizk.wxPay.service.WxPayOrderService; +import cn.unizk.wxPay.vo.WxPlaceOrderResVO; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.nio.charset.StandardCharsets; +import java.text.DecimalFormat; +import java.time.Clock; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2025/9/28 16:28 + * @Version 1.0 + **/ +@Service("huifu") +@Slf4j +public class HuiFuPayService implements PayService { + + @Resource + private WxProperties wxProperties; + @Resource + private HuiFuProperties huiFuProperties; + @Resource + private MobileOrderMapper mobileOrderMapper; + /*@Resource + private WxOrderCloseScheduler wxOrderCloseScheduler;*/ + @Resource + private WxPayOrderService wxPayOrderService; + @Resource + private MobileOrderItemMapper mobileOrderItemMapper; + @Resource + private JkStoreMapper jkStoreMapper; + + + /** + * 防重复支付,前端防抖处理加随机uuid传给后端,调下单接口返回成功后变换uuid, + * 后端根据uuid+redission分布式锁+双重检查锁处理 + * @param orderVO + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public WxPlaceOrderResVO wxPlaceOrder(MobileOrderVO orderVO) { +// String orderId = IdUtil.getSnowflakeNextIdStr(); + String outTradeNo = RandomStringUtils.randomNumeric(30); + List orderItemVOS = orderVO.getOrderItemVOS(); + if (CollectionUtils.isEmpty(orderItemVOS)){ + throw new ServiceException("参数错误"); + } + boolean b = orderItemVOS.stream() + .map(MobileOrderItemVO::getStoreId) + .distinct() + .count() == 1; + Map params = new HashMap<>(); + params.put("sys_id",huiFuProperties.getHuifuId()); + params.put("product_id","EDUSTD"); + JSONObject data = JSONObject.of(); + data.put("req_date", DateUtil.format(new Date(),"yyyyMMdd")); + data.put("req_seq_id",outTradeNo); + data.put("huifu_id",huiFuProperties.getHuifuId()); + data.put("goods_desc",orderVO.getDescription()); + data.put("trade_type","T_MINIAPP"); + String sumPrice = new DecimalFormat("0.00").format(orderVO.getTotalPrice()); + data.put("trans_amt",sumPrice); + DateTime dateTime = DateUtil.offsetMinute(new Date(), +5); + String yyyyMMddHHmmss = DateUtil.format(dateTime, "yyyyMMddHHmmss"); + data.put("time_expire",yyyyMMddHHmmss); + JSONObject wx_data = JSONObject.of(); + wx_data.put("sub_appid",wxProperties.getAppid()); + wx_data.put("sub_openid",orderVO.getOpenid()); + data.put("wx_data",wx_data.toString()); + data.put("fee_flag",2); + //分账对象 + JSONObject acct_split_bunch = JSONObject.of(); + JSONArray array = new JSONArray(); + if (b){ + JSONObject acct_infos2 = new JSONObject(); + JkStore jkStore = jkStoreMapper.selectById(orderVO.getOrderItemVOS().get(0).getStoreId()); + if (Objects.isNull(jkStore)){ + log.info("门店不存在,门店id:{},不参与分账",orderVO.getOrderItemVOS().get(0).getStoreId()); + }else { + if (StringUtils.isBlank(jkStore.getHuifuId()) || jkStore.getProfitSharingPercentage() == null){ + throw new ServiceException(String.format("门店:%s的汇付id或分账比为空",jkStore.getStoreName())); + } + acct_infos2.put("huifu_id",jkStore.getHuifuId()); +// acct_infos2.put("huifu_id","6666000179598737"); +// acct_infos2.put("acct_id","755980768110008"); + //分账比例 + log.info("子商户分账比例为:{}",jkStore.getProfitSharingPercentage().toString()); + acct_infos2.put("percentage_div",jkStore.getProfitSharingPercentage().toString()); + array.add(acct_infos2); + + JSONObject parent_acct_infos = new JSONObject(); + parent_acct_infos.put("huifu_id",huiFuProperties.getHuifuId()); + BigDecimal b100 = new BigDecimal("100.00"); + BigDecimal surplusPercent = b100.subtract(jkStore.getProfitSharingPercentage()); + log.info("主商户分账比例为:{}",surplusPercent); + parent_acct_infos.put("percentage_div",surplusPercent.toString()); + array.add(parent_acct_infos); + } + }else { + double percent = 0.00; + for (MobileOrderItemVO itemVO : orderItemVOS) { + JkStore jkStore = jkStoreMapper.selectById(itemVO.getStoreId()); + if (Objects.isNull(jkStore)){ + throw new ServiceException(String.format("门店不存在,门店ID:%d",orderItemVOS.get(0).getStoreId())); + } + if (StringUtils.isBlank(jkStore.getHuifuId()) || jkStore.getProfitSharingPercentage() == null){ + throw new ServiceException(String.format("门店:%s的汇付id或分账比为空",jkStore.getStoreName())); + } + JSONObject acct_infos2 = new JSONObject(); + acct_infos2.put("huifu_id",jkStore.getHuifuId()); + double singleProductPercent = (itemVO.getPrice().doubleValue() / orderVO.getTotalPrice().doubleValue()) * jkStore.getProfitSharingPercentage().doubleValue(); + acct_infos2.put("percentage_div",singleProductPercent); + percent += singleProductPercent; + array.add(acct_infos2); + } + double surplusPercent = 100.00 - percent; + JSONObject parent_acct_infos = new JSONObject(); + parent_acct_infos.put("huifu_id",huiFuProperties.getHuifuId()); + parent_acct_infos.put("percentage_div",String.valueOf(surplusPercent)); + array.add(parent_acct_infos); + } + if (CollectionUtils.isNotEmpty(array)){ + acct_split_bunch.put("acct_infos",array); + acct_split_bunch.put("percentage_flag","Y"); + data.put("acct_split_bunch",acct_split_bunch.toString()); + } + data.put("notify_url",huiFuProperties.getNotifyUrl()); + TreeMap treeMap = JSONObject.parseObject(data.toString(), TreeMap.class); + JSONObject signBody = new JSONObject(treeMap); +// String s = Base64.getEncoder().encodeToString(huiFuProperties.getPrivateKey().getBytes(StandardCharsets.UTF_8)); + String sign = HuifuSignUtil.sign(signBody.toString(), huiFuProperties.getPrivateKey()); + params.put("sign",sign); + params.put("data",data); + log.info("下单请求参数:{}",params); + String res = HttpUtil.doPostJson(huiFuProperties.getPayApi(), null, new JSONObject(params)); + log.info("汇付下单返回:{}",res); + JSONObject response = JSONObject.parseObject(res); + if (response == null){ + throw new ServiceException("下单失败"); + } + JSONObject responseData = response.getJSONObject("data"); + String resp_code = responseData.getString("resp_code"); + String hf_seq_id = responseData.getString("hf_seq_id"); + if ("00000100".equals(resp_code)){ + log.info("订单:{}下单成功",outTradeNo); + //生成订单 + + if (b){ + String orderId = IdUtil.getSnowflakeNextIdStr(); + MobileOrder wxOrder = new MobileOrder(); + BeanUtils.copyProperties(orderVO, wxOrder); + wxOrder.setOutTradeNo(outTradeNo); + wxOrder.setTotalPrice(orderVO.getTotalPrice()); + wxOrder.setStatus(OrderStatus.unpaid.name()); + wxOrder.setOrderId(orderId); + wxOrder.setStoreId(orderItemVOS.get(0).getStoreId()); + wxOrder.setDeviceId(orderVO.getDeviceId()); + wxOrder.setPhysioId(orderVO.getPhysioId()); + wxOrder.setComboId(orderItemVOS.get(0).getComboId()); + /*wxOrder.setProductId(orderVO.getProductId()); + wxOrder.setComboId(orderVO.getComboId());*/ + wxOrder.setCreateTime(LocalDateTime.now(Clock.systemDefaultZone())); + wxOrder.setRecipientPhone(orderVO.getRecipientPhone()); + wxOrder.setRecipientName(orderVO.getRecipientName()); + wxOrder.setReceivingAddress(orderVO.getReceivingAddress()); + wxOrder.setHfSeqId(hf_seq_id); + mobileOrderMapper.insert(wxOrder); + Collection orderItems = BeanCopyUtils.copyArrays(orderItemVOS, MobileOrderItem::new); + orderItems.forEach(item -> item.setMobileOrderId(orderId)); + mobileOrderItemMapper.insert(orderItems); + }else { + List storeIds = orderItemVOS.stream().map(MobileOrderItemVO::getStoreId).distinct().collect(Collectors.toList()); + Map map = new HashMap<>(); + for (Integer storeId : storeIds) { + String orderId = IdUtil.getSnowflakeNextIdStr(); + map.put(storeId,orderId); + MobileOrder wxOrder = new MobileOrder(); + wxOrder.setOrderId(orderId); + wxOrder.setOutTradeNo(outTradeNo); + BigDecimal total = orderItemVOS.stream() + .filter(vo -> storeId.equals(vo.getStoreId())) + .map(MobileOrderItemVO::getPrice) + .reduce(BigDecimal.ZERO, BigDecimal::add); + wxOrder.setTotalPrice(total); + wxOrder.setStatus(OrderStatus.unpaid.name()); + wxOrder.setStoreId(storeId); + wxOrder.setCreateTime(LocalDateTime.now(Clock.systemDefaultZone())); + wxOrder.setRecipientName(orderVO.getRecipientName()); + wxOrder.setRecipientPhone(orderVO.getRecipientPhone()); + wxOrder.setReceivingAddress(orderVO.getReceivingAddress()); + wxOrder.setHfSeqId(hf_seq_id); + mobileOrderMapper.insert(wxOrder); + } + for (MobileOrderItemVO itemVO : orderItemVOS) { + String orderId = map.get(itemVO.getStoreId()); + MobileOrderItem orderItem = new MobileOrderItem(); + BeanUtils.copyProperties(itemVO,orderItem); + orderItem.setMobileOrderId(orderId); + mobileOrderItemMapper.insert(orderItem); + } + } + /*//将订单添加到关闭订单延迟队列 + wxOrderCloseScheduler.addCloseWxOrderTask(orderId, wxProperties.getPlaceOrder().getExpireTime() * 60 * 1000); + //开启轮询查询订单支付状态 + try { + wxPayOrderService.startPayStatusQuery(orderId); + }catch (Exception e){ + log.error("开启订单支付状态轮询查询异常",e); + }*/ + WxPlaceOrderResVO placeOrderResVO = new WxPlaceOrderResVO(); + String pay_info = responseData.getString("pay_info"); + JSONObject payInfo = JSONObject.parseObject(pay_info); + placeOrderResVO.setTimestamp(payInfo.getString("timeStamp")); + placeOrderResVO.setNonceStr(payInfo.getString("nonceStr")); + placeOrderResVO.setSignType(payInfo.getString("signType")); +// placeOrderResVO.setOrderId(orderId); + placeOrderResVO.setPaySign(payInfo.getString("paySign")); + placeOrderResVO.setPrepayId(payInfo.getString("package").split("=")[1]); + return placeOrderResVO; + } + throw new ServiceException("下单失败"); + } + + + @Override + public ResultData wxPaySuccessHandler(HttpServletRequest request, JSONObject body) { + return null; + } + + @Override + public String configureApplet() { + JSONObject params = JSONObject.of(); + params.put("sys_id",huiFuProperties.getHuifuId()); + params.put("product_id",huiFuProperties.getProductId()); + JSONObject data = JSONObject.of(); + String reqSeqId = DateUtil.format(new Date(),"yyyyMMddHHmmss") + RandomStringUtils.randomNumeric(18); + data.put("req_seq_id",reqSeqId); + data.put("req_date",DateUtil.format(new Date(),"yyyyMMdd")); + data.put("huifu_id",huiFuProperties.getHuifuId()); + data.put("fee_type","02"); + data.put("wx_applet_app_id",wxProperties.getAppid()); + data.put("wx_applet_secret",wxProperties.getSecret()); + data.put("async_return_url",huiFuProperties.getConfigureAppletCallbackUrl()); + params.put("data",data); + String sign = HuifuSignUtil.sign(data, huiFuProperties.getPrivateKey()); + String url = "https://api.huifu.com/v2/merchant/busi/config"; + params.put("sign",sign); + log.info("params={}",params); + String res = HttpUtil.doPostJson(url, null, params); + log.info("汇付微信商户配置小程序appid返回:{}",res); + return "success"; + } + +} diff --git a/applet/src/main/java/cn/unizk/huifupay/service/HuiFuVendorPayService.java b/applet/src/main/java/cn/unizk/huifupay/service/HuiFuVendorPayService.java new file mode 100644 index 0000000..79002cd --- /dev/null +++ b/applet/src/main/java/cn/unizk/huifupay/service/HuiFuVendorPayService.java @@ -0,0 +1,439 @@ +package cn.unizk.huifupay.service; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.unizk.config.WxProperties; +import cn.unizk.entity.dto.CashOutDTO; +import cn.unizk.entity.dto.CashOutResponse; +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.CourseVO; +import cn.unizk.entity.vo.PayCourseVO; +import cn.unizk.enums.OrderStatus; +import cn.unizk.exception.ServiceException; +import cn.unizk.huifupay.config.properties.HuiFuVendorProperties; +import cn.unizk.huifupay.dto.HuifuPlaceOrderParamBaseDTO; +import cn.unizk.huifupay.utils.HuifuSignUtil; +import cn.unizk.huifupay.vo.DeviceScanPayVO; +import cn.unizk.huifupay.vo.RechargeVO; +import cn.unizk.mapper.*; +import cn.unizk.utils.HttpUtil; +import cn.unizk.utils.HuifuUtil; +import cn.unizk.utils.JkSecurityUtil; +import cn.unizk.wxPay.vo.WxPlaceOrderResVO; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/3/11 10:53 + * @Version 1.0 + **/ +@Service +@Slf4j +public class HuiFuVendorPayService { + + @Resource + private HuiFuVendorProperties vendorProperties; + @Resource + private WxProperties wxProperties; + @Resource + private MobileOrderMapper mobileOrderMapper; + @Resource + private JkStoreMapper jkStoreMapper; + @Resource + private DeviceMapper deviceMapper; + @Resource + private CashOutRecordMapper cashOutRecordMapper; + @Resource + private CourseMapper courseMapper; + @Resource + private WxVipRechargeMapper vipRechargeMapper; + + private static final String PAY_API = "https://api.huifu.com/v3/trade/payment/jspay"; + private static final String YUE_PAY_API = "https://api.huifu.com/v2/trade/acctpayment/pay"; + private static final String COMMON_PARAM = "commonParam"; + private static final String AMOUNT = "amount"; + private static final String REQ_SEQ_ID = "req_seq_id"; + + /** + * 聚合正扫,扫码付费 + * + * @param vo + * @return + */ + @Transactional(rollbackFor = Exception.class) + public WxPlaceOrderResVO vendorPay(DeviceScanPayVO vo) { + if (StringUtils.isBlank(vo.getDeviceId())){ + throw new ServiceException("deviceId cannot be empty"); + } + Device device = deviceMapper.selectById(vo.getDeviceId()); + if (Objects.isNull(device) || device.getStoreId() == null){ + throw new ServiceException("设备不存在或设备未与门店绑定"); + } + JSONObject data = JSONObject.of(); + String now = DateUtil.format(new Date(), "yyyyMMdd"); + data.put("req_date", now); + String snowId = IdUtil.getSnowflakeNextIdStr(); + String reqSeqId = HuifuUtil.getReqSeqId(); + data.put("req_seq_id", reqSeqId); + data.put("huifu_id", vendorProperties.getHuifuId()); + data.put("goods_desc", vo.getGoodsDesc()); + data.put("trade_type", "T_MINIAPP"); + BigDecimal bd = new BigDecimal(vo.getAmount()); + bd = bd.setScale(2, RoundingMode.DOWN); + data.put("trans_amt", bd.toString()); + JSONObject wx_data = JSONObject.of(); + wx_data.put("sub_appid", wxProperties.getAppid()); + wx_data.put("sub_openid", vo.getOpenid()); + data.put("wx_data", wx_data.toString()); + data.put("fee_flag", 2); + data.put("notify_url", vendorProperties.getNotifyUrl()); + String sign = HuifuSignUtil.sign(data, vendorProperties.getPrivateKey()); + JSONObject commonParams = JSONObject.of(); + commonParams.put("sys_id", vendorProperties.getSysId()); + commonParams.put("product_id", vendorProperties.getProductId()); + commonParams.put("sign", sign); + commonParams.put("data", data); + log.info("commonParams={}", commonParams); + String res = HttpUtil.doPostJson(PAY_API, null, commonParams); + log.info("汇付下单返回:{}", res); + JSONObject response = JSONObject.parseObject(res); + if (response == null) { + throw new ServiceException("下单失败"); + } + JSONObject responseData = response.getJSONObject("data"); + String resp_code = responseData.getString("resp_code"); + String hf_seq_id = responseData.getString("hf_seq_id"); + if ("00000100".equals(resp_code) || "00000000".equals(resp_code)) { + log.info("订单:{}下单成功", snowId); + MobileOrder wxOrder = new MobileOrder(); + wxOrder.setOrderId(snowId); + wxOrder.setOutTradeNo(reqSeqId); + wxOrder.setTotalPrice(bd); +// wxOrder.setOpenid(vo.getOpenid()); + wxOrder.setMobileUserId(vo.getUserId()); + wxOrder.setStatus(OrderStatus.unpaid.name()); + wxOrder.setDeviceId(vo.getDeviceId()); + wxOrder.setDescription(vo.getGoodsDesc()); + wxOrder.setDeliveryWay("自提"); + wxOrder.setCreateTime(LocalDateTime.now()); + wxOrder.setOrderType(1); + mobileOrderMapper.insert(wxOrder); + + WxPlaceOrderResVO placeOrderResVO = new WxPlaceOrderResVO(); + String pay_info = responseData.getString("pay_info"); + JSONObject payInfo = JSONObject.parseObject(pay_info); + placeOrderResVO.setTimestamp(payInfo.getString("timeStamp")); + placeOrderResVO.setNonceStr(payInfo.getString("nonceStr")); + placeOrderResVO.setSignType(payInfo.getString("signType")); +// placeOrderResVO.setOrderId(orderId); + placeOrderResVO.setPaySign(payInfo.getString("paySign")); + placeOrderResVO.setPrepayId(payInfo.getString("package").split("=")[1]); + return placeOrderResVO; + } + throw new ServiceException("下单失败"); + } + + private JSONObject createPlaceOrderParams(HuifuPlaceOrderParamBaseDTO dto){ + JSONObject data = JSONObject.of(); + String now = DateUtil.format(new Date(), "yyyyMMdd"); + data.put("req_date", now); +// String snowId = IdUtil.getSnowflakeNextIdStr(); + String reqSeqId = HuifuUtil.getReqSeqId(); + data.put("req_seq_id", reqSeqId); + data.put("huifu_id", vendorProperties.getHuifuId()); + data.put("goods_desc", dto.getGoodsDesc()); + data.put("trade_type", "T_MINIAPP"); + BigDecimal bd = new BigDecimal(dto.getPlaceOrderAmount()); + bd = bd.setScale(2, RoundingMode.DOWN); + data.put("trans_amt", bd.toString()); + JSONObject wx_data = JSONObject.of(); + wx_data.put("sub_appid", wxProperties.getAppid()); + wx_data.put("sub_openid", dto.getOpenid()); + data.put("wx_data", wx_data.toString()); + data.put("fee_flag", 2); + data.put("notify_url", vendorProperties.getNotifyUrl()); + String sign = HuifuSignUtil.sign(data, vendorProperties.getPrivateKey()); + JSONObject commonParams = JSONObject.of(); + commonParams.put("sys_id", vendorProperties.getSysId()); + commonParams.put("product_id", vendorProperties.getProductId()); + commonParams.put("sign", sign); + commonParams.put("data", data); + JSONObject of = JSONObject.of(); + of.put(COMMON_PARAM,commonParams); + of.put(AMOUNT,bd); + of.put(REQ_SEQ_ID,reqSeqId); + return of; + } + + public WxPlaceOrderResVO recharge(RechargeVO vo){ + JSONObject data = JSONObject.of(); + String now = DateUtil.format(new Date(), "yyyyMMdd"); + data.put("req_date", now); + String snowId = IdUtil.getSnowflakeNextIdStr(); + String reqSeqId = HuifuUtil.getReqSeqId(); + data.put("req_seq_id", reqSeqId); + data.put("huifu_id", vendorProperties.getHuifuId()); + data.put("goods_desc", "会员充值"); + data.put("trade_type", "T_MINIAPP"); + BigDecimal bd = new BigDecimal(vo.getRechargePrice()); + bd = bd.setScale(2, RoundingMode.DOWN); + data.put("trans_amt", bd.toString()); + JSONObject wx_data = JSONObject.of(); + wx_data.put("sub_appid", wxProperties.getAppid()); + wx_data.put("sub_openid", vo.getOpenid()); + data.put("wx_data", wx_data.toString()); + data.put("fee_flag", 2); + data.put("notify_url", vendorProperties.getNotifyUrl()); + String sign = HuifuSignUtil.sign(data, vendorProperties.getPrivateKey()); + JSONObject commonParams = JSONObject.of(); + commonParams.put("sys_id", vendorProperties.getSysId()); + commonParams.put("product_id", vendorProperties.getProductId()); + commonParams.put("sign", sign); + commonParams.put("data", data); + log.info("commonParams={}", commonParams); + String res = HttpUtil.doPostJson(PAY_API, null, commonParams); + log.info("汇付下单返回:{}", res); + JSONObject response = JSONObject.parseObject(res); + if (response == null) { + throw new ServiceException("下单失败"); + } + JSONObject responseData = response.getJSONObject("data"); + String resp_code = responseData.getString("resp_code"); + if ("00000100".equals(resp_code) || "00000000".equals(resp_code)) { + log.info("订单:{}下单成功", snowId); + MobileOrder wxOrder = new MobileOrder(); + wxOrder.setOrderId(snowId); + wxOrder.setOutTradeNo(reqSeqId); + wxOrder.setTotalPrice(bd); +// wxOrder.setOpenid(vo.getOpenid()); + wxOrder.setMobileUserId(vo.getUserId()); + wxOrder.setStatus(OrderStatus.unpaid.name()); +// wxOrder.setDeviceId(vo.getDeviceId()); + wxOrder.setDescription("会员充值"); + wxOrder.setDeliveryWay("自提"); + wxOrder.setCreateTime(LocalDateTime.now()); + wxOrder.setOrderType(4); + mobileOrderMapper.insert(wxOrder); + + WxVipRecharge vipRecharge = new WxVipRecharge(); + vipRecharge.setOpenid(vo.getOpenid()); + vipRecharge.setOrderId(snowId); + vipRecharge.setRechargeAmount(bd); + BigDecimal giftAmount = new BigDecimal(vo.getGiftAmount()); + BigDecimal decimalGift = giftAmount.setScale(2, RoundingMode.DOWN); + vipRecharge.setPresentAmount(decimalGift); + vipRecharge.setPayStatus(0); + vipRecharge.setCreateTime(LocalDateTime.now()); + vipRechargeMapper.insert(vipRecharge); + + WxPlaceOrderResVO placeOrderResVO = new WxPlaceOrderResVO(); + String pay_info = responseData.getString("pay_info"); + JSONObject payInfo = JSONObject.parseObject(pay_info); + placeOrderResVO.setTimestamp(payInfo.getString("timeStamp")); + placeOrderResVO.setNonceStr(payInfo.getString("nonceStr")); + placeOrderResVO.setSignType(payInfo.getString("signType")); +// placeOrderResVO.setOrderId(orderId); + placeOrderResVO.setPaySign(payInfo.getString("paySign")); + placeOrderResVO.setPrepayId(payInfo.getString("package").split("=")[1]); + return placeOrderResVO; + } + throw new ServiceException("会员充值下单失败"); + } + + public WxPlaceOrderResVO activeMembership(HuifuPlaceOrderParamBaseDTO dto){ + JSONObject jsonObject = createPlaceOrderParams(dto); + JSONObject placeOrderParams = (JSONObject) jsonObject.get(COMMON_PARAM); + String reqSeqId = jsonObject.getString(REQ_SEQ_ID); + BigDecimal bd = (BigDecimal) jsonObject.get(AMOUNT); + String res = HttpUtil.doPostJson(PAY_API, null, placeOrderParams); + log.info("汇付下单返回:{}", res); + JSONObject response = JSONObject.parseObject(res); + if (response == null) { + throw new ServiceException("下单失败"); + } + JSONObject responseData = response.getJSONObject("data"); + String resp_code = responseData.getString("resp_code"); + if ("00000100".equals(resp_code) || "00000000".equals(resp_code)) { + String snowId = IdUtil.getSnowflakeNextIdStr(); + log.info("订单:{}下单成功", snowId); + MobileOrder wxOrder = new MobileOrder(); + wxOrder.setOrderId(snowId); + wxOrder.setOutTradeNo(reqSeqId); + wxOrder.setTotalPrice(bd); +// wxOrder.setOpenid(dto.getOpenid()); + wxOrder.setMobileUserId(dto.getUserId()); + wxOrder.setStatus(OrderStatus.unpaid.name()); +// wxOrder.setDeviceId(vo.getDeviceId()); + wxOrder.setDescription(dto.getGoodsDesc()); + wxOrder.setDeliveryWay("自提"); + wxOrder.setCreateTime(LocalDateTime.now()); + wxOrder.setOrderType(6); + mobileOrderMapper.insert(wxOrder); + + WxPlaceOrderResVO placeOrderResVO = new WxPlaceOrderResVO(); + String pay_info = responseData.getString("pay_info"); + JSONObject payInfo = JSONObject.parseObject(pay_info); + placeOrderResVO.setTimestamp(payInfo.getString("timeStamp")); + placeOrderResVO.setNonceStr(payInfo.getString("nonceStr")); + placeOrderResVO.setSignType(payInfo.getString("signType")); +// placeOrderResVO.setOrderId(orderId); + placeOrderResVO.setPaySign(payInfo.getString("paySign")); + placeOrderResVO.setPrepayId(payInfo.getString("package").split("=")[1]); + return placeOrderResVO; + } + throw new ServiceException("开通会员下单失败"); + } + + /** + * 门店提现接口 + * + * @param dto + * @return + */ + public CashOutResponse profitSharingPay(CashOutDTO dto) { + JSONObject data = JSONObject.of(); + String snowId = IdUtil.getSnowflakeNextIdStr(); + data.put("req_seq_id", snowId); + String now = DateUtil.format(new Date(), "yyyyMMdd"); + data.put("req_date", now); + data.put("out_huifu_id", vendorProperties.getHuifuId()); + BigDecimal bd = new BigDecimal(dto.getAmount()); + bd = bd.setScale(2, RoundingMode.DOWN); + data.put("ord_amt", bd.toString()); + JkStore jkStore = jkStoreMapper.selectById(dto.getStoreId()); + if (Objects.isNull(jkStore)) { + return new CashOutResponse(500,String.format("门店ID【%d】不存在",dto.getStoreId())); + } + JSONObject acct_split_bunch = JSONObject.of(); + JSONArray acct_infos = new JSONArray(); + JSONObject accInfo = new JSONObject(); + accInfo.put("div_amt",bd.toString()); + accInfo.put("huifu_id", jkStore.getHuifuId()); +// accInfo.put("percentage_div", jkStore.getProfitSharingPercentage().toString()); + acct_infos.add(accInfo); + /*JSONObject master_acct = new JSONObject(); + BigDecimal b100 = new BigDecimal("100.00"); + BigDecimal surplusPercent = b100.subtract(jkStore.getProfitSharingPercentage()); + log.info("主商户分账比例为:{}", surplusPercent); + master_acct.put("huifu_id", vendorProperties.getHuifuId()); + master_acct.put("percentage_div", surplusPercent.toString()); + acct_infos.add(master_acct);*/ + acct_split_bunch.put("acct_infos", acct_infos); + acct_split_bunch.put("percentage_flag", "Y"); + data.put("acct_split_bunch", acct_split_bunch); + String sign = HuifuSignUtil.sign(data, vendorProperties.getPrivateKey()); + JSONObject commonParams = new JSONObject(); + commonParams.put("sys_id", vendorProperties.getSysId()); + commonParams.put("product_id", vendorProperties.getProductId()); + commonParams.put("sign", sign); + commonParams.put("data", data); + log.info("参数:{}", commonParams); + String res = HttpUtil.doPostJson(YUE_PAY_API, null, commonParams); + log.info("余额支付接口返回数据:{}", res); + JSONObject response = JSONObject.parseObject(res); + if (response == null) { + return new CashOutResponse(300,"提现失败!"); + } + JSONObject responseData = response.getJSONObject("data"); + String resp_code = responseData.getString("resp_code"); + String req_seq_id = responseData.getString("req_seq_id"); + String req_date = responseData.getString("req_date"); + String out_huifu_id = responseData.getString("out_huifu_id"); + String ord_amt = responseData.getString("ord_amt"); + if ("00000000".equals(resp_code)) { + log.info("提现成功", snowId); + CashOutRecord cashOutRecord = new CashOutRecord(); + cashOutRecord.setAmount(bd); + cashOutRecord.setOutHuifuId(vendorProperties.getHuifuId()); + cashOutRecord.setStoreId(dto.getStoreId()); + cashOutRecord.setCreateTime(LocalDateTime.now()); + cashOutRecordMapper.insert(cashOutRecord); + } + throw new ServiceException(String.format("余额支付接口返回状态码:%s,提现失败!",resp_code)); + } + + public WxPlaceOrderResVO coursePay(PayCourseVO vo){ + Course course = courseMapper.selectById(vo.getCourseId()); + if (Objects.isNull(course)){ + throw new ServiceException("course is not exist"); + } + int compare = course.getPrice().compareTo(new BigDecimal(vo.getPrice())); + if (compare != 0){ + throw new ServiceException("课程价格错误!"); + } + JSONObject data = JSONObject.of(); + String now = DateUtil.format(new Date(), "yyyyMMdd"); + data.put("req_date", now); + String snowId = IdUtil.getSnowflakeNextIdStr(); + String reqSeqId = HuifuUtil.getReqSeqId(); + data.put("req_seq_id", reqSeqId); + data.put("huifu_id", vendorProperties.getHuifuId()); + data.put("goods_desc", "视频课程购买"); + data.put("trade_type", "T_MINIAPP"); + BigDecimal bd = new BigDecimal(vo.getPrice()); + bd = bd.setScale(2, RoundingMode.DOWN); + data.put("trans_amt", bd.toString()); + JSONObject wx_data = JSONObject.of(); + wx_data.put("sub_appid", wxProperties.getAppid()); + wx_data.put("sub_openid", vo.getOpenid()); + data.put("wx_data", wx_data.toString()); + data.put("fee_flag", 2); + data.put("notify_url", vendorProperties.getNotifyUrl()); + String sign = HuifuSignUtil.sign(data, vendorProperties.getPrivateKey()); + JSONObject commonParams = JSONObject.of(); + commonParams.put("sys_id", vendorProperties.getSysId()); + commonParams.put("product_id", vendorProperties.getProductId()); + commonParams.put("sign", sign); + commonParams.put("data", data); + log.info("commonParams={}", commonParams); + String res = HttpUtil.doPostJson(PAY_API, null, commonParams); + log.info("课程购买下单返回:{}", res); + JSONObject response = JSONObject.parseObject(res); + if (response == null) { + throw new ServiceException("课程购买下单失败"); + } + JSONObject responseData = response.getJSONObject("data"); + String resp_code = responseData.getString("resp_code"); + if ("00000100".equals(resp_code) || "00000000".equals(resp_code)){ + log.info("购买课程下单成功,orderId:{}",snowId); + MobileOrder wxOrder = new MobileOrder(); + wxOrder.setOrderId(snowId); + wxOrder.setOutTradeNo(reqSeqId); + wxOrder.setTotalPrice(bd); + wxOrder.setCourseId(vo.getCourseId()); +// wxOrder.setOpenid(vo.getOpenid()); + wxOrder.setMobileUserId(vo.getUserId()); + wxOrder.setStatus(OrderStatus.unpaid.name()); + wxOrder.setDescription("视频课程购买"); + wxOrder.setDeliveryWay("自提"); + wxOrder.setCreateTime(LocalDateTime.now()); + wxOrder.setOrderType(3); + mobileOrderMapper.insert(wxOrder); + + WxPlaceOrderResVO placeOrderResVO = new WxPlaceOrderResVO(); + String pay_info = responseData.getString("pay_info"); + JSONObject payInfo = JSONObject.parseObject(pay_info); + placeOrderResVO.setTimestamp(payInfo.getString("timeStamp")); + placeOrderResVO.setNonceStr(payInfo.getString("nonceStr")); + placeOrderResVO.setSignType(payInfo.getString("signType")); +// placeOrderResVO.setOrderId(orderId); + placeOrderResVO.setPaySign(payInfo.getString("paySign")); + placeOrderResVO.setPrepayId(payInfo.getString("package").split("=")[1]); + return placeOrderResVO; + } + throw new ServiceException("课程购买下单失败!"); + } +} diff --git a/applet/src/main/java/cn/unizk/huifupay/utils/HfUtil.java b/applet/src/main/java/cn/unizk/huifupay/utils/HfUtil.java new file mode 100644 index 0000000..e1d966c --- /dev/null +++ b/applet/src/main/java/cn/unizk/huifupay/utils/HfUtil.java @@ -0,0 +1,18 @@ +package cn.unizk.huifupay.utils; + +import cn.hutool.core.date.DateUtil; +import org.apache.commons.lang3.RandomStringUtils; + +import java.util.Date; + +/** + * @Author hao + * @Date 2025/9/29 15:02 + * @Version 1.0 + **/ +public class HfUtil { + + public static String getReqSeqId(){ + return DateUtil.format(new Date(),"yyyyMMddHHmmss") + RandomStringUtils.randomNumeric(18); + } +} diff --git a/applet/src/main/java/cn/unizk/huifupay/utils/HuifuSignUtil.java b/applet/src/main/java/cn/unizk/huifupay/utils/HuifuSignUtil.java new file mode 100644 index 0000000..f14dea2 --- /dev/null +++ b/applet/src/main/java/cn/unizk/huifupay/utils/HuifuSignUtil.java @@ -0,0 +1,69 @@ +package cn.unizk.huifupay.utils; + +import cn.unizk.exception.ServiceException; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.security.KeyFactory; +import java.security.PrivateKey; +import java.security.Signature; +import java.security.spec.PKCS8EncodedKeySpec; +import java.util.Base64; +import java.util.TreeMap; + +/** + * @Author hao + * @Date 2025/9/29 10:53 + * @Version 1.0 + **/ +@Slf4j +public class HuifuSignUtil { + + /** + * RSA私钥签名:签名方式SHA256WithRSA + * @param data 待签名字符串 + * @param privateKeyBase64 私钥(Base64编码) + * @return 签名byte[] + * @throws ServiceException + */ + public static String sign(String data, String privateKeyBase64) { + // Base64 --> Key + try { + byte[] bytes = Base64.getDecoder().decode(privateKeyBase64); + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes); + KeyFactory keyFactory; + keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(keySpec); + // Sign + Signature signature = Signature.getInstance("SHA256WithRSA"); + signature.initSign(privateKey); + signature.update(data.getBytes(StandardCharsets.UTF_8)); + return Base64.getEncoder().encodeToString(signature.sign()); + } catch (Exception e) { + log.error("签名异常",e); + throw new ServiceException("签名异常"); + } + } + + public static String sign(JSONObject object, String privateKeyStr) { + TreeMap treeMap = JSONObject.parseObject(object.toString(), TreeMap.class); + JSONObject signBody = new JSONObject(treeMap); + // Base64 --> Key + try { + byte[] bytes = Base64.getDecoder().decode(privateKeyStr); + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes); + KeyFactory keyFactory; + keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(keySpec); + // Sign + Signature signature = Signature.getInstance("SHA256WithRSA"); + signature.initSign(privateKey); + signature.update(signBody.toString().getBytes(StandardCharsets.UTF_8)); + return Base64.getEncoder().encodeToString(signature.sign()); + } catch (Exception e) { + log.error("签名异常",e); + throw new ServiceException("签名异常"); + } + } +} diff --git a/applet/src/main/java/cn/unizk/huifupay/vo/DeviceScanPayVO.java b/applet/src/main/java/cn/unizk/huifupay/vo/DeviceScanPayVO.java new file mode 100644 index 0000000..84ba54d --- /dev/null +++ b/applet/src/main/java/cn/unizk/huifupay/vo/DeviceScanPayVO.java @@ -0,0 +1,22 @@ +package cn.unizk.huifupay.vo; + +import lombok.Data; + +/** + * @Author hao + * @Date 2026/3/11 10:56 + * @Version 1.0 + **/ +@Data +public class DeviceScanPayVO { + + private String deviceId; + + private String amount; + + private String goodsDesc; + + private Integer userId; + + private String openid; +} diff --git a/applet/src/main/java/cn/unizk/huifupay/vo/RechargeVO.java b/applet/src/main/java/cn/unizk/huifupay/vo/RechargeVO.java new file mode 100644 index 0000000..5089934 --- /dev/null +++ b/applet/src/main/java/cn/unizk/huifupay/vo/RechargeVO.java @@ -0,0 +1,17 @@ +package cn.unizk.huifupay.vo; + +import lombok.Data; + +/** + * @Author hao + * @Date 2026/4/17 14:02 + * @Version 1.0 + **/ +@Data +public class RechargeVO { + + private String openid; + private Integer userId; + private String rechargePrice; + private String giftAmount; +} diff --git a/applet/src/main/java/cn/unizk/huifupay/vo/ReportTypeVO.java b/applet/src/main/java/cn/unizk/huifupay/vo/ReportTypeVO.java new file mode 100644 index 0000000..7f3d379 --- /dev/null +++ b/applet/src/main/java/cn/unizk/huifupay/vo/ReportTypeVO.java @@ -0,0 +1,18 @@ +package cn.unizk.huifupay.vo; + +import lombok.Data; + +/** + * @Author hao + * @Date 2026/6/17 15:49 + * @Version 1.0 + **/ +@Data +public class ReportTypeVO { + + private String code1; + + private String code2; + + private Integer result; +} diff --git a/applet/src/main/java/cn/unizk/interceptor/AppletLoginInterceptor.java b/applet/src/main/java/cn/unizk/interceptor/AppletLoginInterceptor.java new file mode 100644 index 0000000..b022e87 --- /dev/null +++ b/applet/src/main/java/cn/unizk/interceptor/AppletLoginInterceptor.java @@ -0,0 +1,56 @@ +package cn.unizk.interceptor; + +import cn.unizk.constant.WxConstant; +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.utils.JwtUtil; +import cn.unizk.utils.ServletUtils; +import com.alibaba.fastjson2.JSONObject; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.util.Objects; + +/** + * @Author hao + * @Date 2025/8/21 14:46 + * @Version 1.0 + **/ +@Component +public class AppletLoginInterceptor implements HandlerInterceptor { + + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + String token = request.getHeader(WxConstant.APPLET_LOGIN_SIGN); + if (StringUtils.isBlank(token)){ + toRes(response,400); + return false; + } + String phoneNumber = JwtUtil.parsePlaintext(token); + MobileAppUser wxUser = (MobileAppUser) redisTemplate.opsForValue().get(WxConstant.CACHE_TOKEN_KEY + phoneNumber); + if (Objects.isNull(wxUser)){ + toRes(response,401); + return false; + } + return true; + } + + private void toRes(HttpServletResponse response,Integer statusCode){ + ResultData data = new ResultData(); + data.setCode(statusCode); + data.setMessage("Authentication failed"); + ServletUtils.renderString(response, JSONObject.toJSONString(data)); + } +} diff --git a/applet/src/main/java/cn/unizk/mapper/ComboMapper.java b/applet/src/main/java/cn/unizk/mapper/ComboMapper.java new file mode 100644 index 0000000..ccf3b8d --- /dev/null +++ b/applet/src/main/java/cn/unizk/mapper/ComboMapper.java @@ -0,0 +1,6 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.Combo; + +public interface ComboMapper extends UniBaseMapper { +} diff --git a/applet/src/main/java/cn/unizk/mapper/ConversationMapper.java b/applet/src/main/java/cn/unizk/mapper/ConversationMapper.java new file mode 100644 index 0000000..7077b3e --- /dev/null +++ b/applet/src/main/java/cn/unizk/mapper/ConversationMapper.java @@ -0,0 +1,17 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.Conversation; +import org.apache.ibatis.annotations.Mapper; + + + +public interface ConversationMapper { + + + + void insertConversation(Conversation conversation); + + void updateConversation(Conversation conversation); + + Conversation selectBySessionId(String sessionId); +} diff --git a/applet/src/main/java/cn/unizk/mapper/DeviceMapper.java b/applet/src/main/java/cn/unizk/mapper/DeviceMapper.java new file mode 100644 index 0000000..224640d --- /dev/null +++ b/applet/src/main/java/cn/unizk/mapper/DeviceMapper.java @@ -0,0 +1,11 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.Device; + +/** + * @Author hao + * @Date 2025/8/30 17:06 + * @Version 1.0 + **/ +public interface DeviceMapper extends UniBaseMapper { +} diff --git a/applet/src/main/java/cn/unizk/mapper/FileMapper.java b/applet/src/main/java/cn/unizk/mapper/FileMapper.java new file mode 100644 index 0000000..5ad57d0 --- /dev/null +++ b/applet/src/main/java/cn/unizk/mapper/FileMapper.java @@ -0,0 +1,11 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.SysFile; + +/** + * @Author hao + * @Date 2025/10/9 17:21 + * @Version 1.0 + **/ +public interface FileMapper extends UniBaseMapper { +} diff --git a/applet/src/main/java/cn/unizk/mapper/JkPhysioMapper.java b/applet/src/main/java/cn/unizk/mapper/JkPhysioMapper.java new file mode 100644 index 0000000..e2f8e79 --- /dev/null +++ b/applet/src/main/java/cn/unizk/mapper/JkPhysioMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.JkPhysio; + +public interface JkPhysioMapper extends UniBaseMapper { + +} diff --git a/applet/src/main/java/cn/unizk/mapper/JkProductMapper.java b/applet/src/main/java/cn/unizk/mapper/JkProductMapper.java new file mode 100644 index 0000000..c5b31f2 --- /dev/null +++ b/applet/src/main/java/cn/unizk/mapper/JkProductMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.JkProduct; + +public interface JkProductMapper extends UniBaseMapper { + +} diff --git a/applet/src/main/java/cn/unizk/mapper/JkStoreMapper.java b/applet/src/main/java/cn/unizk/mapper/JkStoreMapper.java new file mode 100644 index 0000000..d0ea4f3 --- /dev/null +++ b/applet/src/main/java/cn/unizk/mapper/JkStoreMapper.java @@ -0,0 +1,6 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.JkStore; + +public interface JkStoreMapper extends UniBaseMapper { +} diff --git a/applet/src/main/java/cn/unizk/mapper/MessageMapper.java b/applet/src/main/java/cn/unizk/mapper/MessageMapper.java new file mode 100644 index 0000000..f31bd24 --- /dev/null +++ b/applet/src/main/java/cn/unizk/mapper/MessageMapper.java @@ -0,0 +1,17 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.Message; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + + +public interface MessageMapper { + + + void insertMessage(Message message); + + void updateMessage(Message message); + + List selectBySessionIdList(String sessionId); +} diff --git a/applet/src/main/java/cn/unizk/mapper/ProductCarouselMapper.java b/applet/src/main/java/cn/unizk/mapper/ProductCarouselMapper.java new file mode 100644 index 0000000..ca0edc0 --- /dev/null +++ b/applet/src/main/java/cn/unizk/mapper/ProductCarouselMapper.java @@ -0,0 +1,6 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.ProductCarousel; + +public interface ProductCarouselMapper extends UniBaseMapper { +} diff --git a/applet/src/main/java/cn/unizk/mapper/QuestionMapper.java b/applet/src/main/java/cn/unizk/mapper/QuestionMapper.java new file mode 100644 index 0000000..940de44 --- /dev/null +++ b/applet/src/main/java/cn/unizk/mapper/QuestionMapper.java @@ -0,0 +1,6 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.Question; + +public interface QuestionMapper extends UniBaseMapper { +} diff --git a/applet/src/main/java/cn/unizk/mapper/SysDictMapper.java b/applet/src/main/java/cn/unizk/mapper/SysDictMapper.java new file mode 100644 index 0000000..3aae351 --- /dev/null +++ b/applet/src/main/java/cn/unizk/mapper/SysDictMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.SysDict; + +public interface SysDictMapper extends UniBaseMapper { + + int deleteByPrimaryKey(Integer dictCode); + + int insertSelective(SysDict record); + + SysDict selectByPrimaryKey(Integer dictCode); + + int updateByPrimaryKeySelective(SysDict record); + + int updateByPrimaryKey(SysDict record); +} diff --git a/applet/src/main/java/cn/unizk/mapper/UniBaseMapper.java b/applet/src/main/java/cn/unizk/mapper/UniBaseMapper.java new file mode 100644 index 0000000..f824b1d --- /dev/null +++ b/applet/src/main/java/cn/unizk/mapper/UniBaseMapper.java @@ -0,0 +1,6 @@ +package cn.unizk.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface UniBaseMapper extends BaseMapper { +} diff --git a/applet/src/main/java/cn/unizk/mapper/WxOrderMapper.java b/applet/src/main/java/cn/unizk/mapper/WxOrderMapper.java new file mode 100644 index 0000000..20cc63c --- /dev/null +++ b/applet/src/main/java/cn/unizk/mapper/WxOrderMapper.java @@ -0,0 +1,21 @@ +/* +package cn.unizk.mapper; + +import cn.unizk.entity.po.WxOrder; +import cn.unizk.entity.vo.OrderReqVO; +import cn.unizk.entity.vo.WxOrderVO; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; + +public interface WxOrderMapper extends UniBaseMapper { + + Integer updateStatusToPaid(@Param("orderId") String orderId); + + Integer updateStatusToCanceled(@Param("orderId") String orderId); + + Page selectOrders(Page page, @Param("vo") OrderReqVO vo); + + WxOrder selectOrderByIdAndPhone(@Param("orderId") String orderId,@Param("phone") String phone); + +} +*/ diff --git a/applet/src/main/java/cn/unizk/mapper/WxUserMapper.java b/applet/src/main/java/cn/unizk/mapper/WxUserMapper.java new file mode 100644 index 0000000..3085899 --- /dev/null +++ b/applet/src/main/java/cn/unizk/mapper/WxUserMapper.java @@ -0,0 +1,11 @@ +/* +package cn.unizk.mapper; + +import cn.unizk.entity.po.WxUser; +import org.apache.ibatis.annotations.Param; + +public interface WxUserMapper extends UniBaseMapper { + + Integer bindPhone(@Param("phoneNumber") String phoneNumber,@Param("openid") String openid); +} +*/ diff --git a/applet/src/main/java/cn/unizk/mapper/WxUserSessionMapper.java b/applet/src/main/java/cn/unizk/mapper/WxUserSessionMapper.java new file mode 100644 index 0000000..ad55fba --- /dev/null +++ b/applet/src/main/java/cn/unizk/mapper/WxUserSessionMapper.java @@ -0,0 +1,9 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.WxUserSession; +import org.apache.ibatis.annotations.Param; + +public interface WxUserSessionMapper extends UniBaseMapper { + + Long selectMaxSessionId(@Param("openid") String openid); +} diff --git a/applet/src/main/java/cn/unizk/scheduler/VideoProgressScheduler.java b/applet/src/main/java/cn/unizk/scheduler/VideoProgressScheduler.java new file mode 100644 index 0000000..d93cb99 --- /dev/null +++ b/applet/src/main/java/cn/unizk/scheduler/VideoProgressScheduler.java @@ -0,0 +1,105 @@ +package cn.unizk.scheduler; + +import cn.unizk.entity.po.Chapter; +import cn.unizk.entity.po.MobileUserVideoProgress; +import cn.unizk.mapper.ChapterMapper; +import cn.unizk.mapper.MobileUserVideoProgressMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.Objects; +import java.util.Set; + +/** + * @Author hao + * @Date 2026/3/27 15:44 + * @Version 1.0 + **/ +@Component +@Slf4j +public class VideoProgressScheduler { + + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + + @Resource + private MobileUserVideoProgressMapper mobileUserVideoProgressMapper; + @Resource + private ChapterMapper chapterMapper; + +// @Scheduled(cron = "0 0/1 * * * ?") // 每10分钟执行一次 + public void flushProgressToMySQL() { + String pattern = "video:progress:batch:*"; + + Set keys = redisTemplate.keys(pattern); + + if (keys == null || keys.isEmpty()) { + return; + } + + for (String key : keys) { + try { + // 2. 获取数据 + HashOperations ops = redisTemplate.opsForHash(); + Object currentTimeObj = ops.get(key, "lastPosition"); + Object durationObj = ops.get(key, "spentTime"); + + if (currentTimeObj == null || durationObj == null) continue; + + int currentTime = Integer.parseInt(currentTimeObj.toString()); + int spentTime = Integer.parseInt(durationObj.toString()); + + // 3. 解析 Key 获取 UserID 和 VideoID + // key format: video:progress:batch:{userId}:{videoId} + String[] parts = key.split(":"); + if (parts.length < 5) continue; + Integer userId = Integer.valueOf(parts[3]); + Integer chapterId = Integer.valueOf(parts[4]); + + MobileUserVideoProgress videoProgress = mobileUserVideoProgressMapper.selectOne(new LambdaQueryWrapper() + .eq(MobileUserVideoProgress::getChapterId, chapterId) + .eq(MobileUserVideoProgress::getMobileUserId, userId)); + if (Objects.isNull(videoProgress)){ + MobileUserVideoProgress progress = new MobileUserVideoProgress(); + progress.setChapterId(chapterId); + progress.setMobileUserId(userId); + progress.setSpentTime(spentTime); + progress.setLastPosition(currentTime); + progress.setUpdateTime(LocalDateTime.now()); + Chapter chapter = chapterMapper.selectById(chapterId); + Integer p = (currentTime * 100) / chapter.getVideoDuration(); + progress.setProgress(p); + mobileUserVideoProgressMapper.insert(progress); + }else { + videoProgress.setSpentTime(spentTime); + if (currentTime > videoProgress.getLastPosition()){ + videoProgress.setLastPosition(currentTime); + Chapter chapter = chapterMapper.selectById(chapterId); + Integer p = (currentTime * 100) / chapter.getVideoDuration(); + videoProgress.setProgress(p); + } + videoProgress.setUpdateTime(LocalDateTime.now()); + mobileUserVideoProgressMapper.updateById(videoProgress); + } + + // 5. 写入成功后,删除 Redis Key (防止重复计算) + redisTemplate.delete(key); + + log.info("Flushed progress: userId={}, videoId={}, duration={}", userId, chapterId, spentTime); + + } catch (Exception e) { + log.error("Flush progress failed for key: {}", key, e); + // 注意:这里不要删除 Key,让它留在 Redis 里,下次定时任务再试,或者依靠过期时间自动清理 + } + } + } +} diff --git a/applet/src/main/java/cn/unizk/scheduler/WxOrderCloseScheduler.java b/applet/src/main/java/cn/unizk/scheduler/WxOrderCloseScheduler.java new file mode 100644 index 0000000..a61a97c --- /dev/null +++ b/applet/src/main/java/cn/unizk/scheduler/WxOrderCloseScheduler.java @@ -0,0 +1,123 @@ +/* +package cn.unizk.scheduler; + +import cn.unizk.config.WxProperties; +import cn.unizk.constant.WxConstant; +import cn.unizk.entity.po.WxOrder; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.WxOrderMapper; +import cn.unizk.service.PayService; +import cn.unizk.utils.HttpUtil; +import cn.unizk.wxPay.utils.WxSignatureUtil; +import com.alibaba.fastjson2.JSONObject; +import com.wechat.pay.java.core.http.HttpMethod; +import com.wechat.pay.java.core.util.NonceUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Set; + +*/ +/** + * @Author hao + * @Date 2025/9/1 11:46 + * @Version 1.0 + **//* + +@Component +@SuppressWarnings("unchecked") +@Slf4j +public class WxOrderCloseScheduler { + + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + @Resource + private WxOrderMapper wxOrderMapper; + @Resource + private WxProperties wxProperties; + @Value("${spring.profiles.active}") + private String active; + + + private static final String DELAY_QUEUE_KEY = "wxorder:close:delay"; + + + public void addCloseWxOrderTask(String orderId,long delayMillis){ + redisTemplate.opsForZSet().add(DELAY_QUEUE_KEY,orderId,System.currentTimeMillis() + delayMillis); + } + + */ +/** + * 每10s执行一次 + *//* + +// @Scheduled(fixedRate = 10000) + public void processCloseWxOrderTasks(){ + long now = System.currentTimeMillis(); + Set expireOrderIds = redisTemplate.opsForZSet().rangeByScore(DELAY_QUEUE_KEY,0,now,0,50); + if (CollectionUtils.isEmpty(expireOrderIds)){ + return; + } + for (String expireOrderId : expireOrderIds) { + try { + closeOrder(expireOrderId); + redisTemplate.opsForZSet().remove(DELAY_QUEUE_KEY,expireOrderId); + }catch (Exception e){ + log.error("关闭订单失败,orderId: {}", expireOrderId, e); + //将失败任务记录到死信队列中,再添加一个定时任务去消费死信队列中的记录 + } + } + } + + public void closeOrder(String orderId) { + WxOrder order = wxOrderMapper.selectById(orderId); + if (Objects.isNull(order) || !order.getStatus().equals("unpaid")){ + log.info("wxorderclosescheduler--->订单已被关闭或已支付,{}",orderId); + return; + } + String authorization; + String nonce = NonceUtil.createNonce(32); + String closeOrderUrl = wxProperties.getPay().getCloseOrderApi().replace("{out_trade_no}", orderId); + String finalCloseOrderUrl = wxProperties.getPay().getDomain() + closeOrderUrl; + try { + WxSignatureUtil.setEnv(active); + authorization = WxSignatureUtil.getAuthorization(wxProperties.getPay().getMchid(),wxProperties.getPay().getSerialNo(), + nonce, HttpMethod.POST.name(),finalCloseOrderUrl, + JSONObject.toJSONString(JSONObject.of("mchid",wxProperties.getPay().getMchid()))); + } catch (Exception e) { + e.printStackTrace(); + throw new ServiceException("微信关闭订单生成签名失败"); + } + Map headers = new HashMap<>(); + headers.put("Authorization", WxConstant.authorization_type + authorization); + headers.put("Accept","application/json"); + headers.put("Content-Type","application/json"); + JSONObject resp = HttpUtil.postJsonCarryStatusCode(finalCloseOrderUrl, headers, JSONObject.of("mchid", wxProperties.getPay().getMchid())); + int code = (int) resp.get(HttpUtil.STATUS_CODE); + if (code >= 200 && code < 300){ + //对响应进行签名验证,参考WXPayUtility工具类。https://pay.weixin.qq.com/doc/v3/merchant/4014931831 + + //修改数据库订单状态为已关闭 + WxOrder wxOrder = new WxOrder(); + wxOrder.setOrderId(orderId); + wxOrder.setStatus("canceled"); + wxOrderMapper.updateById(wxOrder); + log.info("关闭订单{}成功",orderId); + }else { + log.info("关闭订单失败,orderId={},微信关闭订单API返回:{}",orderId,resp); + } + } + +} +*/ diff --git a/applet/src/main/java/cn/unizk/service/AIAdviceService.java b/applet/src/main/java/cn/unizk/service/AIAdviceService.java new file mode 100644 index 0000000..7d0f682 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/AIAdviceService.java @@ -0,0 +1,18 @@ +package cn.unizk.service; + +import cn.unizk.entity.vo.ReplyVo; +import com.alibaba.fastjson2.JSONObject; + +import java.util.List; +import java.util.Map; + +public interface AIAdviceService{ + ReplyVo reply (ReplyVo vo); + + + ReplyVo saveConversation(List>> conversation,String openid); + + + + JSONObject getTreatmentPlan(String sessionId); +} diff --git a/applet/src/main/java/cn/unizk/service/ComboService.java b/applet/src/main/java/cn/unizk/service/ComboService.java new file mode 100644 index 0000000..55505d9 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/ComboService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.Combo; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface ComboService extends IService { +} diff --git a/applet/src/main/java/cn/unizk/service/DeviceService.java b/applet/src/main/java/cn/unizk/service/DeviceService.java new file mode 100644 index 0000000..dcd071f --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/DeviceService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.Device; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface DeviceService extends IService { +} diff --git a/applet/src/main/java/cn/unizk/service/FileService.java b/applet/src/main/java/cn/unizk/service/FileService.java new file mode 100644 index 0000000..99fa9cc --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/FileService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.SysFile; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface FileService extends IService { +} diff --git a/applet/src/main/java/cn/unizk/service/IAiService.java b/applet/src/main/java/cn/unizk/service/IAiService.java new file mode 100644 index 0000000..d61d0f8 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/IAiService.java @@ -0,0 +1,6 @@ +package cn.unizk.service; + +public interface IAiService { + + +} diff --git a/applet/src/main/java/cn/unizk/service/JkPhysioService.java b/applet/src/main/java/cn/unizk/service/JkPhysioService.java new file mode 100644 index 0000000..ae2fabe --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/JkPhysioService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.JkPhysio; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface JkPhysioService extends IService { +} diff --git a/applet/src/main/java/cn/unizk/service/JkProductService.java b/applet/src/main/java/cn/unizk/service/JkProductService.java new file mode 100644 index 0000000..0893bf2 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/JkProductService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.JkProduct; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface JkProductService extends IService { +} diff --git a/applet/src/main/java/cn/unizk/service/JkStoreService.java b/applet/src/main/java/cn/unizk/service/JkStoreService.java new file mode 100644 index 0000000..683ddf0 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/JkStoreService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.JkStore; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface JkStoreService extends IService { +} diff --git a/applet/src/main/java/cn/unizk/service/PayService.java b/applet/src/main/java/cn/unizk/service/PayService.java new file mode 100644 index 0000000..be5afbf --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/PayService.java @@ -0,0 +1,20 @@ +package cn.unizk.service; + +import cn.unizk.entity.vo.MobileOrderVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.wxPay.vo.WxPlaceOrderResVO; +import com.alibaba.fastjson2.JSONObject; + +import javax.servlet.http.HttpServletRequest; + +public interface PayService { + + WxPlaceOrderResVO wxPlaceOrder(MobileOrderVO orderVO); + + ResultData wxPaySuccessHandler(HttpServletRequest request, JSONObject body); + + default String configureApplet(){ + return "success"; + } + +} diff --git a/applet/src/main/java/cn/unizk/service/ProductCarouselService.java b/applet/src/main/java/cn/unizk/service/ProductCarouselService.java new file mode 100644 index 0000000..b51ef49 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/ProductCarouselService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.ProductCarousel; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface ProductCarouselService extends IService { +} diff --git a/applet/src/main/java/cn/unizk/service/QuestionService.java b/applet/src/main/java/cn/unizk/service/QuestionService.java new file mode 100644 index 0000000..7a57621 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/QuestionService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.Question; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface QuestionService extends IService { +} diff --git a/applet/src/main/java/cn/unizk/service/SysDictService.java b/applet/src/main/java/cn/unizk/service/SysDictService.java new file mode 100644 index 0000000..9cad864 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/SysDictService.java @@ -0,0 +1,12 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.SysDict; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Author hao + * @Date 2025/9/3 11:22 + * @Version 1.0 + **/ +public interface SysDictService extends IService { +} diff --git a/applet/src/main/java/cn/unizk/service/UserAddressService.java b/applet/src/main/java/cn/unizk/service/UserAddressService.java new file mode 100644 index 0000000..89d5e0b --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/UserAddressService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.MobileUserAddress; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface UserAddressService extends IService { +} diff --git a/applet/src/main/java/cn/unizk/service/WebTtsWsService.java b/applet/src/main/java/cn/unizk/service/WebTtsWsService.java new file mode 100644 index 0000000..fa03311 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/WebTtsWsService.java @@ -0,0 +1,208 @@ +package cn.unizk.service; + +import com.google.gson.Gson; +import okhttp3.HttpUrl; +import org.java_websocket.WebSocket; +import org.java_websocket.client.WebSocketClient; +import org.java_websocket.handshake.ServerHandshake; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.io.*; +import java.net.URI; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.CountDownLatch; + +/** + * @Author hao + * @Date 2025/11/21 14:29 + * @Version 1.0 + **/ +public class WebTtsWsService { + // 地址与鉴权信息 + public static final String hostUrl = "https://tts-api.xfyun.cn/v2/tts"; + // 均到控制台-语音合成页面获取 + public static final String APPID = "3fa7b7a0"; + public static final String APISecret = "N2Q5Y2NiOTZmNThhODZjYTgxMjg1NjA4"; + public static final String APIKey = "da390c58ef0f2ad8424c3dccc6d458c7"; + // 合成文本 + public static String text = "欢迎来到讯飞开放平台"; + // 合成文本编码格式 + public static final String TTE = "UTF8"; // 小语种必须使用UNICODE编码作为值 + // 发音人参数。到控制台-我的应用-语音合成-添加试用或购买发音人,添加后即显示该发音人参数值,若试用未添加的发音人会报错11200 + public static final String VCN = "x4_yezi"; + // 合成文件存储地址以及名称 + public static final String OUTPUT_FILE_PATH = "D:\\code\\temp\\" + System.currentTimeMillis() + ".mp3"; + // json + public static final Gson gson = new Gson(); + public static volatile boolean wsCloseFlag = false; + + /*public static void main(String[] args) throws Exception { + String wsUrl = getAuthUrl(hostUrl, APIKey, APISecret).replace("https://", "wss://"); + OutputStream outputStream = new FileOutputStream(OUTPUT_FILE_PATH); + websocketWork(wsUrl, outputStream); + }*/ + + public static void tts(String text,String filePath,CountDownLatch latch) throws Exception { + WebTtsWsService.text = text; + OutputStream outputStream = new FileOutputStream(filePath); + String wsUrl = getAuthUrl(hostUrl, APIKey, APISecret).replace("https://", "wss://"); + websocketWork(wsUrl,outputStream,latch); + } + + + // Websocket方法 + private static void websocketWork(String wsUrl, OutputStream outputStream,CountDownLatch latch) { + try { + URI uri = new URI(wsUrl); + WebSocketClient webSocketClient = new WebSocketClient(uri) { + @Override + public void onOpen(ServerHandshake serverHandshake) { + System.out.println("ws建立连接成功..."); + } + + @Override + public void onMessage(String text) { +// System.out.println("本次转换的内容是:"+ text); + JsonParse myJsonParse = gson.fromJson(text, JsonParse.class); + if (myJsonParse.code != 0) { + System.out.println("发生错误,错误码为:" + myJsonParse.code); + System.out.println("本次请求的sid为:" + myJsonParse.sid); + } + if (myJsonParse.data != null) { + try { + byte[] textBase64Decode = Base64.getDecoder().decode(myJsonParse.data.audio); + outputStream.write(textBase64Decode); + outputStream.flush(); + } catch (Exception e) { + e.printStackTrace(); + } + if (myJsonParse.data.status == 2) { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + System.out.println("本次请求的sid==>" + myJsonParse.sid); + System.out.println("合成成功,文件保存路径为==>" + OUTPUT_FILE_PATH); + // 可以关闭连接,释放资源 + wsCloseFlag = true; + latch.countDown(); + } + } + } + + @Override + public void onClose(int i, String s, boolean b) { + System.out.println("ws链接已关闭,本次请求完成..."); + } + + @Override + public void onError(Exception e) { + System.out.println("发生错误 " + e.getMessage()); + } + }; + // 建立连接 + webSocketClient.connect(); + while (!webSocketClient.getReadyState().equals(WebSocket.READYSTATE.OPEN)) { + //System.out.println("正在连接..."); + Thread.sleep(100); + } + MyThread webSocketThread = new MyThread(webSocketClient); + webSocketThread.start(); + } catch (Exception e) { + System.out.println(e.getMessage()); + } + } + + // 线程来发送音频与参数 + static class MyThread extends Thread { + WebSocketClient webSocketClient; + + public MyThread(WebSocketClient webSocketClient) { + this.webSocketClient = webSocketClient; + } + + public void run() { + System.out.println("多线程发送文字内容------"); + wsCloseFlag = false; + String requestJson;//请求参数json串 + try { + requestJson = "{\n" + + " \"common\": {\n" + + " \"app_id\": \"" + APPID + "\"\n" + + " },\n" + + " \"business\": {\n" + + " \"aue\": \"lame\",\n" + + " \"sfl\": 1,\n" + + " \"tte\": \"" + TTE + "\",\n" + + " \"ent\": \"intp65\",\n" + + " \"vcn\": \"" + VCN + "\",\n" + + " \"pitch\": 50,\n" + + " \"speed\": 39\n" + + " },\n" + + " \"data\": {\n" + + " \"status\": 2,\n" + + " \"text\": \"" + Base64.getEncoder().encodeToString(text.getBytes(StandardCharsets.UTF_8)) + "\"\n" + + //" \"text\": \"" + Base64.getEncoder().encodeToString(TEXT.getBytes("UTF-16LE")) + "\"\n" + + " }\n" + + "}"; + webSocketClient.send(requestJson); + // 等待服务端返回完毕后关闭 + while (!wsCloseFlag) { + Thread.sleep(200); + } + webSocketClient.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + // 鉴权方法 + public static String getAuthUrl(String hostUrl, String apiKey, String apiSecret) throws Exception { + URL url = new URL(hostUrl); + // 时间 + SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US); + format.setTimeZone(TimeZone.getTimeZone("GMT")); + String date = format.format(new Date()); + // 拼接 + String preStr = "host: " + url.getHost() + "\n" + + "date: " + date + "\n" + + "GET " + url.getPath() + " HTTP/1.1"; + //System.out.println(preStr); + // SHA256加密 + Mac mac = Mac.getInstance("hmacsha256"); + SecretKeySpec spec = new SecretKeySpec(apiSecret.getBytes(StandardCharsets.UTF_8), "hmacsha256"); + mac.init(spec); + byte[] hexDigits = mac.doFinal(preStr.getBytes(StandardCharsets.UTF_8)); + // Base64加密 + String sha = Base64.getEncoder().encodeToString(hexDigits); + // 拼接 + String authorization = String.format("api_key=\"%s\", algorithm=\"%s\", headers=\"%s\", signature=\"%s\"", apiKey, "hmac-sha256", "host date request-line", sha); + // 拼接地址 + HttpUrl httpUrl = Objects.requireNonNull(HttpUrl.parse("https://" + url.getHost() + url.getPath())).newBuilder().// + addQueryParameter("authorization", Base64.getEncoder().encodeToString(authorization.getBytes(StandardCharsets.UTF_8))).// + addQueryParameter("date", date).// + addQueryParameter("host", url.getHost()).// + build(); + + return httpUrl.toString(); + } + + //返回的json结果拆解 + class JsonParse { + int code; + String sid; + Data data; + } + + class Data { + int status; + String audio; + } +} + diff --git a/applet/src/main/java/cn/unizk/service/WxAppletLoginService.java b/applet/src/main/java/cn/unizk/service/WxAppletLoginService.java new file mode 100644 index 0000000..44bff0d --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/WxAppletLoginService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import com.alibaba.fastjson2.JSONObject; + +public interface WxAppletLoginService { + JSONObject appletLogin(String code); +} diff --git a/applet/src/main/java/cn/unizk/service/WxAuthService.java b/applet/src/main/java/cn/unizk/service/WxAuthService.java new file mode 100644 index 0000000..03c8098 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/WxAuthService.java @@ -0,0 +1,65 @@ +package cn.unizk.service; + +import cn.unizk.cache.LocalCache; +import cn.unizk.constant.WxConstant; +import cn.unizk.exception.ServiceException; +import cn.unizk.utils.HttpUtil; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * @Author hao + * @Date 2025/7/9 13:41 + * @Version 1.0 + **/ +@Service +@Slf4j +public class WxAuthService { + @Value("${wx.appid}") + private String appid; + @Value("${wx.secret}") + private String secret; + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + + private void refreshToken(){ + Map params = new HashMap<>(); + params.put("grant_type","client_credential"); + params.put("appid",appid); + params.put("secret",secret); + String s = HttpUtil.doPost(WxConstant.GET_ACCESS_TOKEN_URL, null, params); + log.info("wx获取access_token返回数据:{}",s); + try { + JSONObject getTokenRes = JSONObject.parseObject(s); + String access_token = (String) getTokenRes.get("access_token"); + Integer expires_in = (Integer) getTokenRes.get("expires_in"); + long exp = System.currentTimeMillis()/1000 + expires_in; +// LocalCache.setWxAccessTokenCache(access_token,exp); + redisTemplate.opsForValue().set(WxConstant.WX_ACCESS_TOKEN,access_token,5400, TimeUnit.SECONDS); + }catch (Exception e){ + e.printStackTrace(); + throw new ServiceException("获取微信token失败"); + } + } + + public String getAccessToken(){ + String accessToken = (String) redisTemplate.opsForValue().get(WxConstant.WX_ACCESS_TOKEN); + if (StringUtils.isBlank(accessToken)){ + refreshToken(); + accessToken = (String) redisTemplate.opsForValue().get(WxConstant.WX_ACCESS_TOKEN); + } + return accessToken; + } + +} diff --git a/applet/src/main/java/cn/unizk/service/WxOrderService.java b/applet/src/main/java/cn/unizk/service/WxOrderService.java new file mode 100644 index 0000000..729d597 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/WxOrderService.java @@ -0,0 +1,14 @@ +package cn.unizk.service; +/* +import cn.unizk.entity.po.WxOrder; +import cn.unizk.entity.vo.OrderReqVO; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.entity.vo.WxOrderVO; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface WxOrderService extends IService { + Page orderList(UniPage uniPage); + + WxOrder getOrderByIdAndPhone(String orderId,String phone); +}*/ diff --git a/applet/src/main/java/cn/unizk/service/WxUserService.java b/applet/src/main/java/cn/unizk/service/WxUserService.java new file mode 100644 index 0000000..f7da731 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/WxUserService.java @@ -0,0 +1,10 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.MobileAppUser; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface WxUserService extends IService { + + void bindPhone(String phone,Integer openid); + +} diff --git a/applet/src/main/java/cn/unizk/service/WxUserSessionService.java b/applet/src/main/java/cn/unizk/service/WxUserSessionService.java new file mode 100644 index 0000000..141c6f4 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/WxUserSessionService.java @@ -0,0 +1,8 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.WxUserSession; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface WxUserSessionService extends IService { + Long findMaxSessionId(String openid); +} diff --git a/applet/src/main/java/cn/unizk/service/impl/AIAdviceServiceImpl.java b/applet/src/main/java/cn/unizk/service/impl/AIAdviceServiceImpl.java new file mode 100644 index 0000000..28627f3 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/impl/AIAdviceServiceImpl.java @@ -0,0 +1,494 @@ +package cn.unizk.service.impl; + +import cn.hutool.json.JSONArray; +import cn.unizk.entity.po.Conversation; +import cn.unizk.entity.po.Message; +import cn.unizk.entity.vo.ReplyVo; +import cn.unizk.mapper.ConversationMapper; +import cn.unizk.mapper.MessageMapper; +import cn.unizk.service.AIAdviceService; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.*; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.client.HttpStatusCodeException; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; + +import java.util.*; + +/** + * @Author lj + * @Date 2025/7/149 16:30 + * @Version 1.0 + **/ +@Service +@Slf4j +@RequiredArgsConstructor +@EnableTransactionManagement +public class AIAdviceServiceImpl implements AIAdviceService { + + private static final String DP_API_KEY = "sk-1338e30687cd47d3adda5ae9d903d319"; //刘杰 +// private static final String DP_API_URL = "https://api.deepseek.com"; + private static final String DP_API_URL = "https://api.deepseek.com/chat/completions"; + + private final RestTemplate restTemplate = new RestTemplate(); + private final ObjectMapper objectMapper = new ObjectMapper(); + // 使用正确的模型名称 +// private static final String MODEL_NAME = "deepseek-reasoner"; // r1 + private static final String MODEL_NAME = "deepseek-chat"; // 多轮文档 + + private final ConversationMapper conversationMapper; + + private final MessageMapper messageMapper; + + + // 问题到描述短语的映射 + private static final Map QUESTION_MAPPING = new HashMap<>(); + + // 疼痛位置到炎症名词的映射 + private static final Map PAIN_LOCATION_MAPPING = new HashMap<>(); + + static { + QUESTION_MAPPING.put("性别", "性别"); + QUESTION_MAPPING.put("年龄", "年龄"); + QUESTION_MAPPING.put("身高", "身高"); + QUESTION_MAPPING.put("体重", "体重"); + QUESTION_MAPPING.put("1.您膝关节疼痛的具体位置是哪里?", "膝关节疼痛的具体位置是"); + QUESTION_MAPPING.put("2.您的膝关节疼痛持续了多长时间?", "膝关节疼痛持续"); + QUESTION_MAPPING.put("3.您当前的膝关节疼痛程度如何?", "当前膝关节疼痛程度为"); + QUESTION_MAPPING.put("4.您的膝关节主要是哪种类型的疼痛?", "膝关节疼痛类型为"); + QUESTION_MAPPING.put("5.在哪些特定动作或姿势下您的膝关节疼痛会明显出现或加重?", "膝关节疼痛在以下情况加重:"); + QUESTION_MAPPING.put("6.您的膝关节疼痛是否会向其他部位扩散或放射?", "膝关节疼痛扩散情况:"); + QUESTION_MAPPING.put("7.您的膝关节还有哪些伴随症状?", "膝关节伴随症状:"); + QUESTION_MAPPING.put("8.您的膝关节在哪些活动方向上感到受限?", "膝关节活动受限方向:"); + QUESTION_MAPPING.put("9.您是否感觉膝关节不稳定?", "膝关节不稳定表现:"); + QUESTION_MAPPING.put("10.您认为导致您膝关节疼痛的主要原因是什么?", "导致膝关节疼痛的主要原因:"); + + // 初始化疼痛位置映射 + PAIN_LOCATION_MAPPING.put("位置1", "股四头肌肌腱炎"); + PAIN_LOCATION_MAPPING.put("位置2", "股内侧肌拉伤"); + PAIN_LOCATION_MAPPING.put("位置3", "股直肌肌腱炎髌上囊囊肿"); + PAIN_LOCATION_MAPPING.put("位置4", "膝关节外侧疼痛"); + PAIN_LOCATION_MAPPING.put("位置5", "髌骨外侧疼痛"); + PAIN_LOCATION_MAPPING.put("位置6", "髌骨综合征"); + PAIN_LOCATION_MAPPING.put("位置7", "髌骨内侧疼痛"); + PAIN_LOCATION_MAPPING.put("位置8", "膝关节内侧疼痛"); + PAIN_LOCATION_MAPPING.put("位置9", "半月板损伤"); + PAIN_LOCATION_MAPPING.put("位置10", "脂肪垫炎"); + PAIN_LOCATION_MAPPING.put("位置11", "髌腱炎"); + PAIN_LOCATION_MAPPING.put("位置12", "胫骨骨骺炎"); + PAIN_LOCATION_MAPPING.put("位置13", "鹅足滑囊炎"); + } + + private static final String SYSTEM_PROMPT = "你是一位专业的膝关节医疗顾问,我会提供收集的用户信息,请你根据信息给出符合用户病情的诊断参考报告。" +// + "报告内容包括:主诉、现病史、既往史、初步诊断、用药或治疗、饮食与运动、注意事项。要求详细、专业、只提供内容即可,不要多余的解释。"; + + "报告内容包括:一、初步诊断 二、病因及机制分析(1.诊断结论 2.形成原因) 三、康复建议。要求详细、专业、只提供内容即可,不要多余的解释。"; + @Override + public ReplyVo reply(ReplyVo vo) { + //新 + return vo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public ReplyVo saveConversation(List>> conversation,String openid) { + + ReplyVo vo = new ReplyVo(); + + if (validateParams(conversation, openid)) { + vo.setContent("参数错误"); + return vo; + } + try { + + // 1. 构建症状摘要 + String summary = buildSymptomSummary(conversation); + // 2. 保存会话记录 + Conversation conversationInfo = saveConversationToDB(conversation, openid, summary); + String sessionId = conversationInfo.getSessionId(); + + // 3. 构建AI请求消息 +// List> messageList = buildMessageList(summary); + + // 4. 获取AI诊断报告 +// String response = getChatCompletion(messageList); + + //25年 10-10日 第一版修改为不需要ai诊断,采用模板形式 + String response = "模板"; + // 5. 封装返回结果 + vo.setContent(response); + vo.setSessionId(sessionId); + + //将诊断回复存储到数据库 + conversationInfo.setAiDiagnosis(response); + conversationMapper.updateConversation(conversationInfo); + + } catch (Exception e) { + log.error("调用 DeepSeek API 失败", e); + throw new RuntimeException("出现错误,AI助手暂时无法响应您的请求,请稍后再试。", e); + } + + return vo; + } + + @Override + public JSONObject getTreatmentPlan(String sessionId){ + //获取sessionId + // 1. 参数校验(使用具体异常而非空注释) + if (StringUtils.isBlank(sessionId)) { + throw new IllegalArgumentException("参数错误"); + } + JSONObject plan = new JSONObject(); + JSONObject errorResponse = new JSONObject(); + try { + //根据参数去查询 + Conversation conversation = conversationMapper.selectBySessionId(sessionId); + String qaJson = conversation.getQaJson(); + //转为List> 来判断以及重组返回值 + ObjectMapper objectMapper = new ObjectMapper(); + List> qaList = objectMapper.readValue( + qaJson, + new TypeReference>>() {} + ); + + System.out.println(qaList); + System.out.println(qaList); + System.out.println(qaList); + + plan.put("patientId", "P12345"); + } catch (Exception e) { + + errorResponse.put("content", "出错了" + e.getMessage()); + // 9. 异常处理 + return errorResponse; + } + + return plan; + } + + + // --- 辅助方法 --- + private boolean validateParams(List>> conversation, String openid) { + return conversation == null || conversation.isEmpty() || + openid == null || openid.isEmpty(); + } + + private String buildSymptomSummary(List>> conversation) { + StringBuilder summary = new StringBuilder("患者"); + + for (Map> item : conversation) { + for (Map.Entry> entry : item.entrySet()) { + String question = entry.getKey(); + List answers = entry.getValue(); + + // 获取预定义的描述短语 + String description = QUESTION_MAPPING.getOrDefault(question, question); + + // 特殊处理疼痛位置 + if ("1.您膝关节疼痛的具体位置是哪里?".equals(question)) { + String processedAnswer = replacePainLocations(answers); + summary.append(description).append(processedAnswer).append(","); + continue; + } + + // 处理多选答案,用"和"连接 + String answerStr; + if (answers.size() == 1) { + answerStr = answers.get(0); + } else { + answerStr = String.join("和", answers); + } + + summary.append(description).append(answerStr).append(","); + } + } + + // 移除最后一个逗号 + if (summary.length() > 0) { + summary.setLength(summary.length() - 1); + } + + return summary.toString(); + } + + private Conversation saveConversationToDB(List>> conversation, + String openid, String summary) { + + + String sessionId = UUID.randomUUID().toString().replace("-", ""); + Conversation conversationInfo = new Conversation(); + conversationInfo.setSessionId(sessionId); + conversationInfo.setUserId(openid); + conversationInfo.setQaJson(conversation.toString()); + conversationInfo.setSymptomSummary(summary); + conversationMapper.insertConversation(conversationInfo); + return conversationInfo; + } + + + private List> buildMessageList(String summary) { + List> messageList = new ArrayList<>(); + + // 系统消息 + messageList.add(createMessage("system", SYSTEM_PROMPT)); + // 用户消息 + messageList.add(createMessage("user", "信息:" + summary)); + + return messageList; + } + + + private Map createMessage(String role, String content) { + Map message = new HashMap<>(); + message.put("role", role); + message.put("content", content); + return message; + } + + private String replacePainLocations(List locations) { + List replacedLocations = new ArrayList<>(); + + for (String loc : locations) { + String trimmedLoc = loc.trim(); + + // 检查是否是位置编码格式 + if (trimmedLoc.startsWith("位置")) { + // 从映射表中获取医学名词,如果没有则返回原值 + String medicalTerm = PAIN_LOCATION_MAPPING.get(trimmedLoc); + if (medicalTerm != null) { + replacedLocations.add(medicalTerm); + } else { + replacedLocations.add(trimmedLoc); + } + } else { + // 如果已经是医学名词,直接使用 + replacedLocations.add(trimmedLoc); + } + } + + // 用顿号连接处理后的位置 + return String.join("、", replacedLocations); + } + + + +// @Override + @Transactional(rollbackFor = Exception.class) + public ReplyVo reply000(ReplyVo vo) { + try { + // 使用实际的用户输入 + String userMessage = vo.getContent(); // 实际应该使用 vo 中的内容 + Integer sort = vo.getSort(); + + // 构造消息列表 + List> userMessageList = new ArrayList<>(); + + // 系统提示词 + Map systemMessage = new HashMap<>(); + + String content ="你是一位专业的膝关节医疗顾问,我想打造一个智能化理疗问诊平台,通过动态流程引擎实现全自动问诊路径控制,确保在10分钟内高效完成从症状收集到初步诊断的全流程," + + "同时支持基于患者实时回答的智能分支跳转,保障问诊过程的专业性与时效性。一期建设主要实现膝盖疼痛、损伤等顽疾的诊断治疗。我会提供给你用户的回复,你根据最新的回复判断下一次提问的问题," + + "问题围绕这些维度展开:'主要症状','症状时长','伴随症状','损伤机制'" + + "只提供给我问题本身即可,不要多余的回复,例如:用户:我头疼。AI:头疼多久了?额外要求:若该回复和诊断膝盖无关,请输出'无关'二字,不需要多余的解释。"; +// "2.若生成的问题为“膝盖疼痛位置”相关,则不输出问题,只回复'图片'二字,不需要多余的解释。" ; + //在下列7个维度中, + systemMessage.put("role", "system"); + systemMessage.put("content", content); + userMessageList.add(systemMessage); + + Message message = new Message(); + String sessionId = ""; + if(vo.getSort() == 1){ + //第一次会话 生成会话id + sessionId = UUID.randomUUID().toString().replace("-", ""); + + Conversation conversation = new Conversation(); + conversation.setSessionId(sessionId); + conversation.setUserId(vo.getOpenid()); + //存储到会话表数据 后面ai判断无关时 更新状态 + conversationMapper.insertConversation(conversation); + //存储到对话信息表 + message.setSessionId(sessionId); + message.setSort(sort); + message.setAiMessage("请问有什么可以帮助你?"); + message.setUserMessage(vo.getContent()); + messageMapper.insertMessage(message); + + }else { + sessionId = vo.getSessionId(); + //查询最新的那条 + + + //查询数据库是否有数据 状态为1 的有效数据 2无效数据 + List messageList= messageMapper.selectBySessionIdList(sessionId); + //将messageList 所有数据组合到userMessageList 中 + for (Message messageInfo : messageList) { + // 处理AI消息(assistant角色) + Map assistantMsg = new HashMap<>(); + assistantMsg.put("role", "assistant"); + assistantMsg.put("content", messageInfo.getAiMessage()); // 使用Message对象的aiMessage字段 + userMessageList.add(assistantMsg); + + // 处理用户消息(user角色) + Map userMsg = new HashMap<>(); + userMsg.put("role", "user"); + userMsg.put("content", messageInfo.getUserMessage()); // 使用Message对象的userMessage字段 + userMessageList.add(userMsg); + } + } + + //组装多轮对话 + + + // 用户消息 + Map userMessageMap = new HashMap<>(); + userMessageMap.put("role", "user"); + userMessageMap.put("content", "用户回复:"+userMessage); + userMessageList.add(userMessageMap); + + +// Map userMessageMap1 = new HashMap<>(); +// userMessageMap1.put("role", "assistant"); +// userMessageMap1.put("content", "请问您的膝盖是否有疼痛或不适感"); +// userMessageList.add(userMessageMap1); +// +// Map userMessageMap2 = new HashMap<>(); +// userMessageMap2.put("role", "user"); +// userMessageMap2.put("content", "涨得慌"); +// userMessageList.add(userMessageMap2); +// +// Map userMessageMap3 = new HashMap<>(); +// userMessageMap3.put("role", "assistant"); +// userMessageMap3.put("content", "您的膝盖是否有肿胀或发红的现象?"); +// userMessageList.add(userMessageMap3); +// +// Map userMessageMap4 = new HashMap<>(); +// userMessageMap4.put("role", "user"); +// userMessageMap4.put("content", "有"); +// userMessageList.add(userMessageMap4); +// +// +// Map userMessageMap5 = new HashMap<>(); +// userMessageMap5.put("role", "assistant"); +// userMessageMap5.put("content", "肿胀和发红的症状持续了多长时间?"); +// userMessageList.add(userMessageMap5); +// +// Map userMessageMap6 = new HashMap<>(); +// userMessageMap6.put("role", "user"); +// userMessageMap6.put("content", "好几天咧"); +// userMessageList.add(userMessageMap6); + + System.out.println(userMessageList); + String response = getChatCompletion(userMessageList); + +// //得到答案后存储 数据库 + Message nextMessage = new Message(); + Integer nextSort = sort+1; //sort +1 + if(("无关").equals(response)){ + // 状态为2 更新status +// response = + }else { + nextMessage.setSessionId(sessionId); + nextMessage.setSort(nextSort); + + } + + System.out.println("AI 回复: " + response); + + // 将 AI 回复设置到返回对象 + vo.setContent(response); + vo.setSort(nextSort); + vo.setSessionId(sessionId); + + + + } catch (Exception e) { + log.error("调用 DeepSeek API 失败", e); + vo.setContent("很抱歉,AI助手暂时无法响应您的请求,请稍后再试。"); + throw new RuntimeException("出现错误,AI助手暂时无法响应您的请求,请稍后再试。", e); + } + return vo; + } + + public String getChatCompletion( List> userMessageList) throws Exception { + // 设置请求头 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setBearerAuth(DP_API_KEY); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + + + + // 构造请求体 + Map body = new HashMap<>(); + body.put("model", MODEL_NAME); + body.put("messages", userMessageList); + body.put("stream", false); + body.put("max_tokens", 1024); + + // 构造请求实体 + HttpEntity> requestEntity = new HttpEntity<>(body, headers); + + try { + // 发送请求 + ResponseEntity response = restTemplate.exchange( + DP_API_URL, + HttpMethod.POST, + requestEntity, + String.class + ); + + // 检查响应状态(处理非200状态码) + if (response.getStatusCode() != HttpStatus.OK) { + String errorMsg = "DeepSeek API 返回错误状态: " + response.getStatusCode(); + log.error(errorMsg); + throw new Exception(errorMsg); + } + + // 解析响应 + Map result = objectMapper.readValue(response.getBody(), Map.class); + List> choices = (List>) result.get("choices"); + Map message = (Map) choices.get(0).get("message"); + + return (String) message.get("content"); + + } catch (HttpStatusCodeException e) { + // 捕获所有HTTP状态异常 (4xx/5xx) + String errorMsg = String.format("DeepSeek API 错误: %d - %s", + e.getStatusCode().value(), e.getResponseBodyAsString()); + log.error(errorMsg); + throw new Exception(errorMsg, e); + } catch (JsonProcessingException e) { + // 捕获JSON解析异常 + String errorMsg = "响应JSON解析失败: " + e.getMessage(); + log.error(errorMsg); + throw new Exception(errorMsg, e); + } catch (ClassCastException | NullPointerException e) { + // 捕获类型转换和空指针异常 + String errorMsg = "API响应格式异常: " + e.getMessage(); + log.error(errorMsg); + throw new Exception(errorMsg, e); + } catch (RestClientException e) { + // 捕获其他RestTemplate异常(网络问题等) + String errorMsg = "API请求失败: " + e.getMessage(); + log.error(errorMsg); + throw new Exception(errorMsg, e); + } catch (Exception e) { + // 捕获所有其他未处理异常 + String errorMsg = "未知API错误: " + e.getMessage(); + log.error(errorMsg); + throw new Exception(errorMsg, e); + } + } + +} diff --git a/applet/src/main/java/cn/unizk/service/impl/ComboServiceImpl.java b/applet/src/main/java/cn/unizk/service/impl/ComboServiceImpl.java new file mode 100644 index 0000000..58e7ec9 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/impl/ComboServiceImpl.java @@ -0,0 +1,16 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.Combo; +import cn.unizk.mapper.ComboMapper; +import cn.unizk.service.ComboService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2025/8/30 17:23 + * @Version 1.0 + **/ +@Service +public class ComboServiceImpl extends ServiceImpl implements ComboService { +} diff --git a/applet/src/main/java/cn/unizk/service/impl/DeviceServiceImpl.java b/applet/src/main/java/cn/unizk/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..b523039 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/impl/DeviceServiceImpl.java @@ -0,0 +1,16 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.Device; +import cn.unizk.mapper.DeviceMapper; +import cn.unizk.service.DeviceService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2025/8/30 17:07 + * @Version 1.0 + **/ +@Service +public class DeviceServiceImpl extends ServiceImpl implements DeviceService { +} diff --git a/applet/src/main/java/cn/unizk/service/impl/DoubaoServiceImpl.java b/applet/src/main/java/cn/unizk/service/impl/DoubaoServiceImpl.java new file mode 100644 index 0000000..63cf62e --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/impl/DoubaoServiceImpl.java @@ -0,0 +1,54 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.vo.ResultData; +import cn.unizk.service.IAiService; +import com.volcengine.ark.runtime.model.responses.constant.ResponsesConstants; +import com.volcengine.ark.runtime.model.responses.content.InputContentItemText; +import com.volcengine.ark.runtime.model.responses.content.OutputContentItemText; +import com.volcengine.ark.runtime.model.responses.item.ItemEasyMessage; +import com.volcengine.ark.runtime.model.responses.item.ItemOutputMessage; +import com.volcengine.ark.runtime.model.responses.item.MessageContent; +import com.volcengine.ark.runtime.model.responses.request.CreateResponsesRequest; +import com.volcengine.ark.runtime.model.responses.request.ResponsesInput; +import com.volcengine.ark.runtime.model.responses.response.ResponseObject; +import com.volcengine.ark.runtime.service.ArkService; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2026/5/12 16:36 + * @Version 1.0 + **/ +@Service +public class DoubaoServiceImpl implements IAiService { + + public String drawConclusion(String input1,String input2){ + String apiKey = "ark-9da95e96-cffe-4e7d-afc5-771990873320-24c67"; + // 创建ArkService实例 + ArkService arkService = ArkService.builder().apiKey(apiKey).baseUrl("https://ark.cn-beijing.volces.com/api/v3").build(); + CreateResponsesRequest request = CreateResponsesRequest.builder() + .model("doubao-seed-1-8-251228") + .input(ResponsesInput.builder().addListItem( + ItemEasyMessage.builder().role(ResponsesConstants.MESSAGE_ROLE_USER).content( + MessageContent.builder() + .addListItem(InputContentItemText.builder().text(input1).build()) + .addListItem(InputContentItemText.builder().text(input2).build()) + .build() + ).build() + ).build()) + .build(); + ResponseObject resp = arkService.createResponse(request); + System.out.println(resp); + String result = resp.getOutput().stream() + .filter(item -> item instanceof ItemOutputMessage) + .map(item -> (ItemOutputMessage) item) + .flatMap(msg -> msg.getContent().stream()) + .filter(c -> c instanceof OutputContentItemText) + .map(c -> ((OutputContentItemText) c).getText()) + .findFirst() + .orElse("获取答案失败"); + System.out.println("result="+result); + arkService.shutdownExecutor(); + return result; + } +} diff --git a/applet/src/main/java/cn/unizk/service/impl/FileServiceImpl.java b/applet/src/main/java/cn/unizk/service/impl/FileServiceImpl.java new file mode 100644 index 0000000..3c1b577 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/impl/FileServiceImpl.java @@ -0,0 +1,16 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.SysFile; +import cn.unizk.mapper.FileMapper; +import cn.unizk.service.FileService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2025/10/9 17:20 + * @Version 1.0 + **/ +@Service +public class FileServiceImpl extends ServiceImpl implements FileService { +} diff --git a/applet/src/main/java/cn/unizk/service/impl/JkPhysioServiceImpl.java b/applet/src/main/java/cn/unizk/service/impl/JkPhysioServiceImpl.java new file mode 100644 index 0000000..1089d7a --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/impl/JkPhysioServiceImpl.java @@ -0,0 +1,18 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.JkPhysio; +import cn.unizk.mapper.JkPhysioMapper; +import cn.unizk.service.JkPhysioService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2025/8/25 10:57 + * @Version 1.0 + **/ +@Service +@Slf4j +public class JkPhysioServiceImpl extends ServiceImpl implements JkPhysioService { +} diff --git a/applet/src/main/java/cn/unizk/service/impl/JkProductServiceImpl.java b/applet/src/main/java/cn/unizk/service/impl/JkProductServiceImpl.java new file mode 100644 index 0000000..2e8dc0c --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/impl/JkProductServiceImpl.java @@ -0,0 +1,18 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.JkProduct; +import cn.unizk.mapper.JkProductMapper; +import cn.unizk.service.JkProductService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2025/8/25 11:00 + * @Version 1.0 + **/ +@Service +@Slf4j +public class JkProductServiceImpl extends ServiceImpl implements JkProductService { +} diff --git a/applet/src/main/java/cn/unizk/service/impl/JkStoreServiceImpl.java b/applet/src/main/java/cn/unizk/service/impl/JkStoreServiceImpl.java new file mode 100644 index 0000000..622233d --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/impl/JkStoreServiceImpl.java @@ -0,0 +1,18 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.JkStore; +import cn.unizk.mapper.JkStoreMapper; +import cn.unizk.service.JkStoreService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2025/8/19 11:26 + * @Version 1.0 + **/ +@Service +@Slf4j +public class JkStoreServiceImpl extends ServiceImpl implements JkStoreService { +} diff --git a/applet/src/main/java/cn/unizk/service/impl/ProductCarouselServiceImpl.java b/applet/src/main/java/cn/unizk/service/impl/ProductCarouselServiceImpl.java new file mode 100644 index 0000000..dd0c630 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/impl/ProductCarouselServiceImpl.java @@ -0,0 +1,16 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.ProductCarousel; +import cn.unizk.mapper.ProductCarouselMapper; +import cn.unizk.service.ProductCarouselService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2025/9/16 15:40 + * @Version 1.0 + **/ +@Service +public class ProductCarouselServiceImpl extends ServiceImpl implements ProductCarouselService { +} diff --git a/applet/src/main/java/cn/unizk/service/impl/QuestionServiceImpl.java b/applet/src/main/java/cn/unizk/service/impl/QuestionServiceImpl.java new file mode 100644 index 0000000..ca69113 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/impl/QuestionServiceImpl.java @@ -0,0 +1,18 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.Question; +import cn.unizk.mapper.QuestionMapper; +import cn.unizk.service.QuestionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2025/7/29 14:26 + * @Version 1.0 + **/ +@Service +@Slf4j +public class QuestionServiceImpl extends ServiceImpl implements QuestionService { +} diff --git a/applet/src/main/java/cn/unizk/service/impl/SysDictServiceImpl.java b/applet/src/main/java/cn/unizk/service/impl/SysDictServiceImpl.java new file mode 100644 index 0000000..6725888 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/impl/SysDictServiceImpl.java @@ -0,0 +1,16 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.SysDict; +import cn.unizk.mapper.SysDictMapper; +import cn.unizk.service.SysDictService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2025/9/3 11:23 + * @Version 1.0 + **/ +@Service +public class SysDictServiceImpl extends ServiceImpl implements SysDictService { +} diff --git a/applet/src/main/java/cn/unizk/service/impl/UserAddressServiceImpl.java b/applet/src/main/java/cn/unizk/service/impl/UserAddressServiceImpl.java new file mode 100644 index 0000000..b7e67a4 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/impl/UserAddressServiceImpl.java @@ -0,0 +1,16 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.MobileUserAddress; +import cn.unizk.mapper.MobileUserAddressMapper; +import cn.unizk.service.UserAddressService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2025/10/14 11:13 + * @Version 1.0 + **/ +@Service +public class UserAddressServiceImpl extends ServiceImpl implements UserAddressService { +} diff --git a/applet/src/main/java/cn/unizk/service/impl/WxAppletLoginServiceImpl.java b/applet/src/main/java/cn/unizk/service/impl/WxAppletLoginServiceImpl.java new file mode 100644 index 0000000..2153443 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/impl/WxAppletLoginServiceImpl.java @@ -0,0 +1,76 @@ +package cn.unizk.service.impl; + +import cn.unizk.config.WxProperties; +import cn.unizk.constant.WxConstant; +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.mapper.MobileAppUserMapper; +import cn.unizk.exception.ServiceException; +import cn.unizk.service.WxAppletLoginService; +import cn.unizk.utils.HttpUtil; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** + * @Author hao + * @Date 2025/7/9 16:30 + * @Version 1.0 + **/ +@Service +@Slf4j +public class WxAppletLoginServiceImpl implements WxAppletLoginService { + @Resource + private WxProperties wxProperties; + @Resource + private MobileAppUserMapper mobileAppUserMapper; + + @Override + public JSONObject appletLogin(String code) { + log.info("小程序登录传参:{}",code); + Map params = new HashMap<>(); + params.put("appid",wxProperties.getAppid()); + params.put("secret",wxProperties.getSecret()); + params.put("js_code",code); + params.put("grant_type","authorization_code"); + try { + String s = HttpUtil.doGet(WxConstant.APPLET_LOGIN_URL, null, params); + log.info("小程序登录返回:{}",s); + JSONObject loginResp = JSONObject.parseObject(s); + if (loginResp.containsKey("errcode")){ + throw new ServiceException("小程序登录失败"); + } + String session_key = (String) loginResp.get("session_key"); + String openid = (String) loginResp.get("openid"); + log.info("sessionKey={};openid={}",session_key,openid); +// WxUser wxUser = new WxUser().setOpenid(openid).setSessionKey(session_key); + MobileAppUser appUser = new MobileAppUser(); + appUser.setOpenid(openid); +// boolean isBindPhone = saveOrUpdateWxUser(appUser); + return JSONObject.of("openid",openid); + }catch (Exception e){ + e.printStackTrace(); + throw new ServiceException("小程序登录失败"); + } + } + + private boolean saveOrUpdateWxUser(MobileAppUser wxUser){ + MobileAppUser one = mobileAppUserMapper.selectOne(new LambdaQueryWrapper().eq(MobileAppUser::getOpenid, wxUser.getOpenid()) + .last("limit 1")); + /*if (Objects.isNull(one)){ + wxUser.setCreateTime(LocalDateTime.now()); + mobileAppUserMapper.insert(wxUser); + }else { + wxUser.setId(one.getId()); + mobileAppUserMapper.updateById(wxUser); + }*/ + return Objects.nonNull(one) && StringUtils.isNotBlank(one.getPhoneNumber()); + } +} diff --git a/applet/src/main/java/cn/unizk/service/impl/WxOrderServiceImpl.java b/applet/src/main/java/cn/unizk/service/impl/WxOrderServiceImpl.java new file mode 100644 index 0000000..8bdcdd2 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/impl/WxOrderServiceImpl.java @@ -0,0 +1,47 @@ +package cn.unizk.service.impl; + +/*import cn.hutool.core.date.DateUtil; +import cn.unizk.entity.po.WxOrder; +import cn.unizk.entity.vo.OrderReqVO; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.entity.vo.WxOrderVO; +import cn.unizk.mapper.WxOrderMapper; +import cn.unizk.service.WxOrderService; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +*//** + * @Author hao + * @Date 2025/8/30 14:08 + * @Version 1.0 + **//* +@Service +public class WxOrderServiceImpl extends ServiceImpl implements WxOrderService { + + @Resource + private WxOrderMapper orderMapper; + + @Override + public Page orderList(UniPage uniPage) { + Page page = new Page<>(); + page.setSize(uniPage.getPageSize()); + page.setCurrent(uniPage.getCurrentPage()); + OrderReqVO queryBody = uniPage.getQueryBody(); + if (StringUtils.isNotBlank(queryBody.getSearchStartTime())){ + queryBody.setSearchStartTimeDt(DateUtil.parse(queryBody.getSearchStartTime())); + } + if (StringUtils.isNotBlank(queryBody.getSearchEndTime())){ + queryBody.setSearchEndTimeDt(DateUtil.parse(queryBody.getSearchEndTime())); + } + return orderMapper.selectOrders(page,queryBody); + } + + @Override + public WxOrder getOrderByIdAndPhone(String orderId, String phone) { + return orderMapper.selectOrderByIdAndPhone(orderId, phone); + } +}*/ diff --git a/applet/src/main/java/cn/unizk/service/impl/WxUserServiceImpl.java b/applet/src/main/java/cn/unizk/service/impl/WxUserServiceImpl.java new file mode 100644 index 0000000..0b59ec5 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/impl/WxUserServiceImpl.java @@ -0,0 +1,38 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.MobileAppUserMapper; +import cn.unizk.service.WxUserService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; + +/** + * @Author hao + * @Date 2025/8/19 10:49 + * @Version 1.0 + **/ +@Service +@Slf4j +public class WxUserServiceImpl extends ServiceImpl implements WxUserService { + + @Resource + private MobileAppUserMapper mobileAppUserMapper; + + @Override + public void bindPhone(String phone, Integer userId) { + MobileAppUser wxUser = mobileAppUserMapper.selectOne(new LambdaQueryWrapper().eq(MobileAppUser::getPhoneNumber, phone)); + if (Objects.nonNull(wxUser)){ + throw new ServiceException("该手机号已被绑定"); + } + Integer integer = mobileAppUserMapper.bindPhone(phone, userId); + if (integer < 1){ + throw new ServiceException("绑定失败"); + } + } +} diff --git a/applet/src/main/java/cn/unizk/service/impl/WxUserSessionServiceImpl.java b/applet/src/main/java/cn/unizk/service/impl/WxUserSessionServiceImpl.java new file mode 100644 index 0000000..bab58f2 --- /dev/null +++ b/applet/src/main/java/cn/unizk/service/impl/WxUserSessionServiceImpl.java @@ -0,0 +1,26 @@ +package cn.unizk.service.impl; + +import cn.unizk.mapper.WxUserSessionMapper; +import cn.unizk.entity.po.WxUserSession; +import cn.unizk.service.WxUserSessionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * @Author hao + * @Date 2025/7/11 13:33 + * @Version 1.0 + **/ +@Service +public class WxUserSessionServiceImpl extends ServiceImpl implements WxUserSessionService { + + @Resource + private WxUserSessionMapper userSessionMapper; + + @Override + public Long findMaxSessionId(String openid) { + return userSessionMapper.selectMaxSessionId(openid); + } +} diff --git a/applet/src/main/java/cn/unizk/utils/JkHttpClient.java b/applet/src/main/java/cn/unizk/utils/JkHttpClient.java new file mode 100644 index 0000000..d95c893 --- /dev/null +++ b/applet/src/main/java/cn/unizk/utils/JkHttpClient.java @@ -0,0 +1,26 @@ +package cn.unizk.utils; + +import com.wechat.pay.java.core.http.HttpClient; +import com.wechat.pay.java.core.http.HttpRequest; +import com.wechat.pay.java.core.http.HttpResponse; +import org.springframework.stereotype.Service; + +import java.io.InputStream; + +/** + * @Author hao + * @Date 2025/8/28 19:11 + * @Version 1.0 + **/ +@Service +public class JkHttpClient implements HttpClient { + @Override + public HttpResponse execute(HttpRequest httpRequest, Class aClass) { + return null; + } + + @Override + public InputStream download(String s) { + return null; + } +} diff --git a/applet/src/main/java/cn/unizk/utils/JkSecurityUtil.java b/applet/src/main/java/cn/unizk/utils/JkSecurityUtil.java new file mode 100644 index 0000000..cd18a01 --- /dev/null +++ b/applet/src/main/java/cn/unizk/utils/JkSecurityUtil.java @@ -0,0 +1,53 @@ +package cn.unizk.utils; + +import cn.unizk.constant.WxConstant; +import cn.unizk.entity.po.MobileAppUser; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.Objects; + +/** + * @Author hao + * @Date 2025/8/30 14:16 + * @Version 1.0 + **/ +@Component +public class JkSecurityUtil { + + @Resource(name = "kryoRedisTemplate") + private RedisTemplate kryoRedisTemplate; + + private static JkSecurityUtil instance; + + @PostConstruct + private void init() { + instance = this; + } + + + private JkSecurityUtil() {} + + /** + * 静态方法,推荐的调用方式 + */ + public static MobileAppUser getCurrentUser(String token) { + if (instance == null) { + throw new IllegalStateException("JkSecurityUtil 未初始化"); + } + String phoneNumber = JwtUtil.parsePlaintext(token); + return (MobileAppUser) instance.kryoRedisTemplate.opsForValue().get(WxConstant.CACHE_TOKEN_KEY + phoneNumber); + } + + public static MobileAppUser getCurrentUser(HttpServletRequest request){ + if (instance == null) { + throw new IllegalStateException("JkSecurityUtil 未初始化"); + } + String token = request.getHeader(WxConstant.APPLET_LOGIN_SIGN); + String phoneNumber = JwtUtil.parsePlaintext(token); + return (MobileAppUser) instance.kryoRedisTemplate.opsForValue().get(WxConstant.CACHE_TOKEN_KEY + phoneNumber); + } +} diff --git a/applet/src/main/java/cn/unizk/utils/JwtUtil.java b/applet/src/main/java/cn/unizk/utils/JwtUtil.java new file mode 100644 index 0000000..20d78c7 --- /dev/null +++ b/applet/src/main/java/cn/unizk/utils/JwtUtil.java @@ -0,0 +1,67 @@ +package cn.unizk.utils; + +import cn.unizk.exception.ServiceException; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.JwtException; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import io.jsonwebtoken.security.Keys; +import lombok.extern.slf4j.Slf4j; + +import javax.crypto.SecretKey; +import java.nio.charset.StandardCharsets; +import java.util.Date; + +/** + * @Author hao + * @Date 2025/8/27 11:25 + * @Version 1.0 + **/ +@Slf4j +public final class JwtUtil { + + private static final long TTL = 30 * 24 * 60 * 60 * 1000L; + +// private static final SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS512); + + private static final String secretKey = "F8YlTp0TlknHG2arQBTxHhZox7tRpbJYYH0vLDOHuH6K276X9ntadC9ZLv5FNOq6X5E4bgPRv2AumgjDav2Vi2WVW8M845E8EAyvEJGFietkXTnbbfhCGa70kUVA2cnD"; + private static final SecretKey key = Keys.hmacShaKeyFor(secretKey.getBytes(StandardCharsets.UTF_8)); + + private JwtUtil() {} + + /** + * 生成 token + * @param plaintext 明文 + * @return token 字符串 + */ + public static String generateToken(String plaintext) { + //使用自定义的secretKey,但长度必须大于512bit(64字节),否则会报错 +// SecretKey key = Keys.hmacShaKeyFor(secretKey.getBytes(StandardCharsets.UTF_8)); + Date now = new Date(); + return Jwts.builder() + .setSubject(plaintext) // 手机号放在 sub 字段 + .setIssuedAt(now) // 签发时间 + .setExpiration(new Date(now.getTime() + TTL)) + .signWith(key, SignatureAlgorithm.HS512) + .compact(); + } + + /** + * 从 token 解析出手机号 + * @param token token + * @return 手机号;如果 token 无效(过期、篡改、格式错误)返回 null + */ + public static String parsePlaintext(String token) { + try { + Claims body = Jwts.parserBuilder() + .setSigningKey(key) + .build() + .parseClaimsJws(token) + .getBody(); + return body.getSubject(); + } catch (JwtException e) { + log.info("token解析失败"); + throw new ServiceException(401,"token无效"); + } + } +} diff --git a/applet/src/main/java/cn/unizk/utils/OkHttpUtil.java b/applet/src/main/java/cn/unizk/utils/OkHttpUtil.java new file mode 100644 index 0000000..848ad78 --- /dev/null +++ b/applet/src/main/java/cn/unizk/utils/OkHttpUtil.java @@ -0,0 +1,109 @@ +package cn.unizk.utils; + +import cn.unizk.constant.UniConstant; +import cn.unizk.constant.WxConstant; +import cn.unizk.exception.ServiceException; +import cn.unizk.wxPay.utils.WXPayUtility; +import com.google.gson.Gson; +import lombok.extern.slf4j.Slf4j; +import okhttp3.*; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +/** + * @Author hao + * @Date 2025/9/19 16:19 + * @Version 1.0 + **/ +@Slf4j +public final class OkHttpUtil { + + public static Map executeHttp(String url,Map headers,Map params,Map body){ + String s = WXPayUtility.urlEncode(params); + url = url + "?" + s; + Request.Builder reqBuilder = new Request.Builder().url(url); + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + reqBuilder.addHeader(entry.getKey(),entry.getValue()); + } + } + if (body != null && body.size() > 0){ + Gson gson = new Gson(); + String json = gson.toJson(body); + RequestBody requestBody = RequestBody.create(json, MediaType.get(UniConstant.POST_CONTENT_TYPE)); + reqBuilder.method(HttpUtil.HttpMethod.POST.name(),requestBody); + } + Request httpRequest = reqBuilder.build(); + // 发送HTTP请求 + OkHttpClient client = new OkHttpClient.Builder().build(); + try(Response httpResponse = client.newCall(httpRequest).execute()) { + String respBody = WXPayUtility.extractBody(httpResponse); + Map res = new HashMap<>(); + res.put(UniConstant.HTTP_STATUS_CODE,httpResponse.code()); + res.put(UniConstant.HTTP_RESPONSE,respBody); + return res; + }catch (IOException e){ + log.error("okhttp发送请求异常",e); + throw new ServiceException("网络异常请稍后重试"); + } + } + + public static Map executeHttp(String url,Map headers,Map params,String jsonBody){ + String s = WXPayUtility.urlEncode(params); + url = url + "?" + s; + Request.Builder reqBuilder = new Request.Builder().url(url); + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + reqBuilder.addHeader(entry.getKey(),entry.getValue()); + } + } + if (jsonBody != null && jsonBody.length() > 0){ + RequestBody requestBody = RequestBody.create(jsonBody, MediaType.get(UniConstant.POST_CONTENT_TYPE)); + reqBuilder.method(HttpUtil.HttpMethod.POST.name(),requestBody); + + } + Request httpRequest = reqBuilder.build(); + // 发送HTTP请求 + OkHttpClient client = new OkHttpClient.Builder().build(); + try(Response httpResponse = client.newCall(httpRequest).execute()) { + String respBody = WXPayUtility.extractBody(httpResponse); + Map res = new HashMap<>(); + res.put(UniConstant.HTTP_STATUS_CODE,httpResponse.code()); + res.put(UniConstant.HTTP_RESPONSE,respBody); + return res; + }catch (IOException e){ + log.error("okhttp发送请求异常",e); + throw new ServiceException("网络异常请稍后重试"); + } + } + + public static String executeHttpRtnStr(String url,Map headers,Map params,String jsonBody){ + String s = WXPayUtility.urlEncode(params); + url = url + "?" + s; + Request.Builder reqBuilder = new Request.Builder().url(url); + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + reqBuilder.addHeader(entry.getKey(),entry.getValue()); + } + } + if (jsonBody != null && jsonBody.length() > 0){ + RequestBody requestBody = RequestBody.create(jsonBody, MediaType.get(UniConstant.POST_CONTENT_TYPE)); + reqBuilder.method(HttpUtil.HttpMethod.POST.name(),requestBody); + + } + Request httpRequest = reqBuilder.build(); + // 发送HTTP请求 + OkHttpClient client = new OkHttpClient.Builder().build(); + try(Response httpResponse = client.newCall(httpRequest).execute()) { + return WXPayUtility.extractBody(httpResponse); + }catch (IOException e){ + log.error("okhttp发送请求异常",e); + throw new ServiceException("网络异常请稍后重试"); + } + } + + +} diff --git a/applet/src/main/java/cn/unizk/utils/RSAUtil.java b/applet/src/main/java/cn/unizk/utils/RSAUtil.java new file mode 100644 index 0000000..b25718d --- /dev/null +++ b/applet/src/main/java/cn/unizk/utils/RSAUtil.java @@ -0,0 +1,81 @@ +package cn.unizk.utils; + +import org.bouncycastle.jce.provider.BouncyCastleProvider; + +import javax.crypto.Cipher; +import java.security.*; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; + +/** + * @Author hao + * @Date 2025/9/13 14:07 + * @Version 1.0 + **/ +public class RSAUtil { + static { + // 添加 Bouncy Castle 作为安全提供者 + if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) { + Security.addProvider(new BouncyCastleProvider()); + } + } + + private static final String ALGORITHM = "RSA"; + private static final String TRANSFORMATION = "RSA/ECB/OAEPPadding"; // 更安全的填充 + private static final int KEY_SIZE = 2048; + + /** + * 生成 RSA 密钥对 + */ + public static KeyPair generateKeyPair() throws Exception { + KeyPairGenerator generator = KeyPairGenerator.getInstance(ALGORITHM, BouncyCastleProvider.PROVIDER_NAME); + generator.initialize(KEY_SIZE, new SecureRandom()); + return generator.generateKeyPair(); + } + + /** + * 公钥加密 + */ + public static String encrypt(String plainText, String publicKeyBase64) throws Exception { + byte[] keyBytes = Base64.getDecoder().decode(publicKeyBase64); + X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes); + KeyFactory factory = KeyFactory.getInstance(ALGORITHM); + PublicKey publicKey = factory.generatePublic(spec); + + Cipher cipher = Cipher.getInstance(TRANSFORMATION, BouncyCastleProvider.PROVIDER_NAME); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + byte[] encryptedBytes = cipher.doFinal(plainText.getBytes("UTF-8")); + return Base64.getEncoder().encodeToString(encryptedBytes); + } + + /** + * 私钥解密 + */ + public static String decrypt(String encryptedText, String privateKeyBase64) throws Exception { + byte[] keyBytes = Base64.getDecoder().decode(privateKeyBase64); + PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes); + KeyFactory factory = KeyFactory.getInstance(ALGORITHM); + PrivateKey privateKey = factory.generatePrivate(spec); + + Cipher cipher = Cipher.getInstance(TRANSFORMATION, BouncyCastleProvider.PROVIDER_NAME); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText)); + return new String(decryptedBytes, "UTF-8"); + } + + /** + * 获取公钥(Base64 编码) + */ + public static String getPublicKeyBase64(PublicKey publicKey) { + return Base64.getEncoder().encodeToString(publicKey.getEncoded()); + } + + /** + * 获取私钥(Base64 编码,PKCS#8 格式) + */ + public static String getPrivateKeyBase64(PrivateKey privateKey) { + return Base64.getEncoder().encodeToString(privateKey.getEncoded()); + } + +} diff --git a/applet/src/main/java/cn/unizk/wxPay/constants/WxPayConstant.java b/applet/src/main/java/cn/unizk/wxPay/constants/WxPayConstant.java new file mode 100644 index 0000000..846cf05 --- /dev/null +++ b/applet/src/main/java/cn/unizk/wxPay/constants/WxPayConstant.java @@ -0,0 +1,16 @@ +package cn.unizk.wxPay.constants; + +import lombok.Getter; +import lombok.Setter; + +/** + * @Author hao + * @Date 2025/9/10 11:42 + * @Version 1.0 + **/ +@Getter +@Setter +public class WxPayConstant { + + public static final String MCHID = "mchid"; +} diff --git a/applet/src/main/java/cn/unizk/wxPay/service/WxPayOrderService.java b/applet/src/main/java/cn/unizk/wxPay/service/WxPayOrderService.java new file mode 100644 index 0000000..2eb339e --- /dev/null +++ b/applet/src/main/java/cn/unizk/wxPay/service/WxPayOrderService.java @@ -0,0 +1,182 @@ +package cn.unizk.wxPay.service; + +import cn.unizk.config.WxProperties; +import cn.unizk.constant.WxConstant; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.MobileOrderMapper; +import cn.unizk.utils.HttpUtil; +import cn.unizk.utils.IOFileUtil; +import cn.unizk.wxPay.constants.WxPayConstant; +import cn.unizk.wxPay.utils.WXPayUtility; +import cn.unizk.wxPay.utils.WxSignatureUtil; +import com.alibaba.fastjson2.JSONObject; +import com.wechat.pay.java.core.http.HttpMethod; +import com.wechat.pay.java.core.util.NonceUtil; +import com.wechat.pay.java.core.util.PemUtil; +import lombok.extern.slf4j.Slf4j; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.security.PrivateKey; +import java.time.Duration; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +/** + * @Author hao + * @Date 2025/9/10 10:06 + * @Version 1.0 + **/ +@Service +@Slf4j +public class WxPayOrderService { + + @Resource + private ScheduledExecutorService scheduler; + @Resource + private StringRedisTemplate stringRedisTemplate; + @Resource + private WxProperties wxProperties; + @Value("${spring.profiles.active:prod}") + private String active; + @Resource + private MobileOrderMapper mobileOrderMapper; + + // 存储任务引用,用于取消 + private final Map> runningTasks = new ConcurrentHashMap<>(); + + + public String queryOrderPayStatus(String orderId){ + WxSignatureUtil.setEnv(active); + String nonce = NonceUtil.createNonce(32); + String orderSearchUri = wxProperties.getPay().getOrderSearchUri().replace("{out_trade_no}",WXPayUtility.urlEncode(orderId)); + Map args = new HashMap<>(); + args.put(WxPayConstant.MCHID,wxProperties.getPay().getMchid()); + orderSearchUri = orderSearchUri + "?" + WXPayUtility.urlEncode(args); + String ocURL = wxProperties.getPay().getDomain() + orderSearchUri; + String authorization; + try { + PrivateKey privateKey = buildPrivateKey(); + authorization = WXPayUtility.buildAuthorization(wxProperties.getPay().getMchid(), + wxProperties.getPay().getSerialNo(),privateKey, HttpMethod.GET.name(),orderSearchUri,null); + } catch (Exception e) { + e.printStackTrace(); + throw new ServiceException("订单查询生成签名异常"); + } + /*Map headers = new HashMap<>(); + headers.put("Authorization",authorization); + headers.put("Accept","application/json");*/ + Request.Builder reqBuilder = new Request.Builder().url(wxProperties.getPay().getDomain() + orderSearchUri); + reqBuilder.addHeader("Accept", "application/json"); + reqBuilder.addHeader("Authorization",authorization); + reqBuilder.method(HttpMethod.GET.name(),null); + Request httpRequest = reqBuilder.build(); + // 发送HTTP请求 + OkHttpClient client = new OkHttpClient.Builder().build(); + try (Response httpResponse = client.newCall(httpRequest).execute()) { + String respBody = WXPayUtility.extractBody(httpResponse); + if (httpResponse.code() >= 200 && httpResponse.code() < 300) { + // 2XX 成功,验证应答签名 + /*WXPayUtility.validateResponse(this.wechatPayPublicKeyId, this.wechatPayPublicKey, + httpResponse.headers(), respBody);*/ + + // 从HTTP应答报文构建返回数据 + log.info("respBody={}",respBody); + JSONObject jsonObject = JSONObject.parseObject(respBody); + return jsonObject.getString("trade_state"); + } else { + throw new WXPayUtility.ApiException(httpResponse.code(), respBody, httpResponse.headers()); + } + } catch (IOException e) { + throw new UncheckedIOException("Sending request to " + orderSearchUri + " failed.", e); + } + } + + + public void startPayStatusQuery(String orderNo) { + String taskKey = "pay:query:task:" + orderNo; + + // 1. Redis 防重:确保同一订单不重复启动任务 + Boolean isSet = stringRedisTemplate.opsForValue() + .setIfAbsent(taskKey, "running", Duration.ofMinutes(4)); + if (Boolean.FALSE.equals(isSet)) { + log.warn("支付查询任务已存在,订单号:{}", orderNo); + return; + } + + // 2. 创建查询任务 + Runnable task = () -> { + try { + String result = this.queryOrderPayStatus(orderNo); + log.info("查询订单 {} 支付状态: {}", orderNo, result); + + if ("SUCCESS".equals(result)) { + // 更新订单状态(需加锁或乐观锁) + boolean updated = updateOrderToPaid(orderNo); + if (updated) { + cancelTask(orderNo); // 支付成功,取消任务 + } + }else if ("CLOSED".equals(result)){ + updateOrderToCanceled(orderNo); + cancelTask(orderNo); + } + } catch (Exception e) { + log.error("查询支付状态异常,订单号:" + orderNo, e); + } + }; + + // 3. 提交定时任务:每10秒一次,最多执行18次(3分钟) + ScheduledFuture future = scheduler.scheduleAtFixedRate(task, 0, 10, TimeUnit.SECONDS); + + // 4. 记录任务引用,便于后续取消 + runningTasks.put(orderNo, future); + + // 5. 3分钟后自动停止(使用延迟任务取消) + scheduler.schedule(() -> { + cancelTask(orderNo); + log.info("订单 {} 支付轮询超时,共执行3分钟", orderNo); + }, 180, TimeUnit.SECONDS); // 3分钟 + } + + private boolean updateOrderToPaid(String orderId){ + Integer integer = mobileOrderMapper.updateStatusToPaid(orderId); + return integer > 0; + } + private boolean updateOrderToCanceled(String orderId){ + Integer integer = mobileOrderMapper.updateStatusToCanceled(orderId); + return integer > 0; + } + + private void cancelTask(String orderNo) { + ScheduledFuture future = runningTasks.remove(orderNo); + if (future != null && !future.isCancelled()) { + future.cancel(false); + } + + // 清理 Redis 标记 + String taskKey = "pay:query:task:" + orderNo; + stringRedisTemplate.delete(taskKey); + } + + private PrivateKey buildPrivateKey() throws Exception { + String pem; + if (active.equals("prod")) { + pem = IOFileUtil.readFileToString("/opt/unizk/cert/apiclient_key.pem"); + }else { + pem = IOFileUtil.readFileToString("E:\\document\\unizk\\wechatpay\\WXCertUtil\\cert\\apiclient_key.pem"); + } + return PemUtil.loadPrivateKeyFromString(pem); + } + +} diff --git a/applet/src/main/java/cn/unizk/wxPay/service/impl/WxPayServiceImpl.java b/applet/src/main/java/cn/unizk/wxPay/service/impl/WxPayServiceImpl.java new file mode 100644 index 0000000..cd6e725 --- /dev/null +++ b/applet/src/main/java/cn/unizk/wxPay/service/impl/WxPayServiceImpl.java @@ -0,0 +1,226 @@ +package cn.unizk.wxPay.service.impl; + +import cn.hutool.core.util.IdUtil; +import cn.unizk.config.WxProperties; +import cn.unizk.constant.WxConstant; +import cn.unizk.entity.dto.WxPayPlaceOrder; +import cn.unizk.entity.po.MobileOrder; +import cn.unizk.entity.vo.MobileOrderVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.enums.OrderStatus; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.MobileOrderMapper; +import cn.unizk.service.PayService; +import cn.unizk.utils.HttpUtil; +import cn.unizk.wxPay.service.WxPayOrderService; +import cn.unizk.wxPay.utils.AesUtil; +import cn.unizk.wxPay.utils.WxReqMessageBodyUtil; +import cn.unizk.wxPay.utils.WxSignatureUtil; +import cn.unizk.wxPay.vo.WxPlaceOrderResVO; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.wechat.pay.java.core.http.*; +import com.wechat.pay.java.core.util.NonceUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.math.BigDecimal; +import java.nio.charset.StandardCharsets; +import java.security.GeneralSecurityException; +import java.time.Clock; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.Map; + +/** + * @Author hao + * @Date 2025/8/28 17:24 + * @Version 1.0 + **/ +@Service("wx") +@Slf4j +public class WxPayServiceImpl implements PayService { + + @Resource + private WxProperties wxProperties; + @Resource + private MobileOrderMapper mobileOrderMapper; + /* @Resource + private WxOrderCloseScheduler wxOrderCloseScheduler;*/ + @Resource + private WxPayOrderService wxPayOrderService; + + @Value("${spring.profiles.active}") + private String active; + + /** + * 微信下单 + * + * @return + */ + @Override + public WxPlaceOrderResVO wxPlaceOrder(MobileOrderVO orderVO) { + String orderId = IdUtil.getSnowflakeNextIdStr(); + Map headers = new HashMap<>(); + WxPayPlaceOrder wxPayPlaceOrder = new WxPayPlaceOrder(); + wxPayPlaceOrder.setMchid(wxProperties.getPay().getMchid()); + wxPayPlaceOrder.setAppid(wxProperties.getAppid()); + wxPayPlaceOrder.setDescription(orderVO.getDescription()); + wxPayPlaceOrder.setOut_trade_no(orderId); + wxPayPlaceOrder.setTime_expire(getExpireTime(wxProperties.getPlaceOrder().getExpireTime())); + wxPayPlaceOrder.setNotify_url(wxProperties.getPlaceOrder().getNotifyUrl()); + WxPayPlaceOrder.Amount amount = new WxPayPlaceOrder.Amount(); +// Double total = orderVO.getSinglePrice() * 100 /** orderVO.getAmount()*/; + amount.setTotal(orderVO.getTotalPrice().intValue()); + wxPayPlaceOrder.setAmount(amount); + WxPayPlaceOrder.Payer payer = new WxPayPlaceOrder.Payer(); + payer.setOpenid(orderVO.getOpenid()); + wxPayPlaceOrder.setPayer(payer); + //参考签名验证 + String authorization; + String nonceStr = NonceUtil.createNonce(32); + try { + WxSignatureUtil.setEnv(active); + authorization = WxSignatureUtil.getAuthorization(wxProperties.getPay().getMchid(), + wxProperties.getPay().getSerialNo(), + nonceStr, + HttpMethod.POST.name(), wxProperties.getPlaceOrder().getPlaceOrderUrl(), + wxPayPlaceOrder.toString()); + log.info("authorization={}", authorization); + } catch (Exception e) { + e.printStackTrace(); + throw new ServiceException("微信下单签名失败"); + } + headers.put("Authorization", WxConstant.authorization_type + authorization); + headers.put("Accept", "application/json"); + headers.put("Content-Type", "application/json"); + JSONObject jsonObject = HttpUtil.postJsonCarryStatusCode(wxProperties.getPlaceOrder().getPlaceOrderUrl(), headers, JSONObject.from(wxPayPlaceOrder)); + int code = (int) jsonObject.get("code"); + String res = (String) jsonObject.get("res"); + log.info("微信下单请求返回:{}", jsonObject); + if (code == 200) { + //生成订单 + MobileOrder wxOrder = new MobileOrder(); + BeanUtils.copyProperties(orderVO, wxOrder); +// double totalPrice = orderVO.getSinglePrice()/* * orderVO.getAmount()*/; + wxOrder.setTotalPrice(orderVO.getTotalPrice()); + wxOrder.setStatus(OrderStatus.unpaid.name()); + wxOrder.setOrderId(orderId); + wxOrder.setStoreId(orderVO.getStoreId()); + wxOrder.setDeviceId(orderVO.getDeviceId()); + wxOrder.setPhysioId(orderVO.getPhysioId()); + wxOrder.setProductId(orderVO.getProductId()); + wxOrder.setComboId(orderVO.getComboId()); + wxOrder.setCreateTime(LocalDateTime.now(Clock.systemDefaultZone())); + wxOrder.setRecipientPhone(orderVO.getRecipientPhone()); + wxOrder.setRecipientName(orderVO.getRecipientName()); + wxOrder.setReceivingAddress(orderVO.getReceivingAddress()); + mobileOrderMapper.insert(wxOrder); + String prepay_id = (String) JSONObject.parseObject(res).get("prepay_id"); + WxPlaceOrderResVO placeOrderResVO = new WxPlaceOrderResVO(); + placeOrderResVO.setNonceStr(nonceStr); + String appletPaySign; + long timestamp = System.currentTimeMillis() / 1000; + try { + appletPaySign = WxSignatureUtil.getAppletPaySign(wxProperties.getAppid(), prepay_id, nonceStr, timestamp); + } catch (Exception e) { + e.printStackTrace(); + throw new ServiceException("小程序调起支付获取签名失败"); + } + //将订单添加到关闭订单延迟队列 +// wxOrderCloseScheduler.addCloseWxOrderTask(orderId, wxProperties.getPlaceOrder().getExpireTime() * 60 * 1000); + //开启轮询查询订单支付状态 + try { + wxPayOrderService.startPayStatusQuery(orderId); + }catch (Exception e){ + log.error("开启订单支付状态轮询查询异常",e); + } + placeOrderResVO.setPaySign(appletPaySign); + placeOrderResVO.setPrepayId(prepay_id); + placeOrderResVO.setSignType("RSA"); + placeOrderResVO.setTimestamp(String.valueOf(timestamp)); + placeOrderResVO.setOrderId(orderId); + return placeOrderResVO; + } + throw new ServiceException("微信下单失败"); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public ResultData wxPaySuccessHandler(HttpServletRequest request, JSONObject body) { + ResultData resultData = new ResultData(); + String serial = request.getHeader("Wechatpay-Serial"); + String signature = request.getHeader("Wechatpay-Signature"); + String timestamp = request.getHeader("Wechatpay-Timestamp"); + String headerNonce = request.getHeader("Wechatpay-Nonce"); + log.info("serial={};signature={};timestamp={};nonce={}",serial,signature,timestamp,headerNonce); + log.info("requestBody={}",body); + if (!wxProperties.getPay().getPlatformCertSerial().equals(serial)){ + throw new ServiceException("serial不一致"); + } + + JSONObject resource = body.getJSONObject("resource"); + String algorithm = resource.getString("algorithm"); + String ciphertext = resource.getString("ciphertext"); + String associated_data = resource.getString("associated_data"); + String nonce = resource.getString("nonce"); + AesUtil aesUtil = new AesUtil(wxProperties.getPay().getApiV3Key().getBytes(StandardCharsets.UTF_8)); + String decrypt; + try { + decrypt = aesUtil.decryptToString(associated_data.getBytes(StandardCharsets.UTF_8), + nonce.getBytes(StandardCharsets.UTF_8), + ciphertext); + log.info("body解密后的数据:{}",decrypt); + } catch (GeneralSecurityException | IOException e) { + log.error("支付成功回调body解密失败"); + e.printStackTrace(); + throw new ServiceException("body解密失败"); + } + JSONObject resBody = JSONObject.parseObject(decrypt); + String out_trade_no = resBody.getString("out_trade_no"); + //构造验签串 + String signMessage = WxReqMessageBodyUtil.buildSignMessage(timestamp, headerNonce, body.toString()); + try { + boolean b = WxSignatureUtil.verifyWxCallbackSign(signMessage.getBytes(StandardCharsets.UTF_8), signature); + log.info("验签结果:{}",b); + if (b){ + MobileOrder wxOrder = mobileOrderMapper.selectById(out_trade_no); + //修改订单状态 + if (wxOrder.getComboId() != null || wxOrder.getDeliveryWay().equals("自提")){ + wxOrder.setStatus(OrderStatus.unverified.name()); + }else if (wxOrder.getProductId() != null && wxOrder.getDeliveryWay().equals("配送")){ + wxOrder.setStatus(OrderStatus.not_shipped.name()); + }else { + wxOrder.setStatus(OrderStatus.paid.name()); + } + wxOrder.setPayTime(LocalDateTime.now(Clock.systemDefaultZone())); + mobileOrderMapper.updateById(wxOrder); + return ResultData.success(); + } + throw new ServiceException("验签失败"); + } catch (Exception e) { + log.error("支付成功回调验签异常"); + e.printStackTrace(); + throw new ServiceException("验签失败"); + } + } + + private String getExpireTime(Long expireTime) { + ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Asia/Shanghai")); + ZonedDateTime threeMinutesLater = now.plusMinutes(expireTime); + return threeMinutesLater.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); + } + +} + diff --git a/applet/src/main/java/cn/unizk/wxPay/utils/AesUtil.java b/applet/src/main/java/cn/unizk/wxPay/utils/AesUtil.java new file mode 100644 index 0000000..72d1725 --- /dev/null +++ b/applet/src/main/java/cn/unizk/wxPay/utils/AesUtil.java @@ -0,0 +1,41 @@ +package cn.unizk.wxPay.utils; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.GeneralSecurityException; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.Base64; +import javax.crypto.Cipher; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +public class AesUtil { + private static final int KEY_LENGTH_BYTE = 32; + private static final int TAG_LENGTH_BIT = 128; + private final byte[] aesKey; + + public AesUtil(byte[] key) { + if (key.length != KEY_LENGTH_BYTE) { + throw new IllegalArgumentException("无效的ApiV3Key,长度必须为32个字节"); + } + this.aesKey = key; + } + public String decryptToString(byte[] associatedData, byte[] nonce, String ciphertext) + throws GeneralSecurityException, IOException { + try { + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + SecretKeySpec key = new SecretKeySpec(aesKey, "AES"); + GCMParameterSpec spec = new GCMParameterSpec(TAG_LENGTH_BIT, nonce); + cipher.init(Cipher.DECRYPT_MODE, key, spec); + cipher.updateAAD(associatedData); + return new String(cipher.doFinal(Base64.getDecoder().decode(ciphertext)), StandardCharsets.UTF_8); + } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { + throw new IllegalStateException(e); + } catch (InvalidKeyException | InvalidAlgorithmParameterException e) { + throw new IllegalArgumentException(e); + } + } +} diff --git a/applet/src/main/java/cn/unizk/wxPay/utils/WXPayUtility.java b/applet/src/main/java/cn/unizk/wxPay/utils/WXPayUtility.java new file mode 100644 index 0000000..d60d468 --- /dev/null +++ b/applet/src/main/java/cn/unizk/wxPay/utils/WXPayUtility.java @@ -0,0 +1,689 @@ +package cn.unizk.wxPay.utils; + +import com.google.gson.ExclusionStrategy; +import com.google.gson.FieldAttributes; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; +import okhttp3.Headers; +import okhttp3.Response; +import okio.BufferedSource; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.SecureRandom; +import java.security.Signature; +import java.security.SignatureException; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.time.DateTimeException; +import java.time.Duration; +import java.time.Instant; +import java.util.Base64; +import java.util.Map; +import java.util.Objects; + +public class WXPayUtility { + private static final Gson gson = new GsonBuilder() + .disableHtmlEscaping() + .addSerializationExclusionStrategy(new ExclusionStrategy() { + @Override + public boolean shouldSkipField(FieldAttributes fieldAttributes) { + final Expose expose = fieldAttributes.getAnnotation(Expose.class); + return expose != null && !expose.serialize(); + } + + @Override + public boolean shouldSkipClass(Class aClass) { + return false; + } + }) + .addDeserializationExclusionStrategy(new ExclusionStrategy() { + @Override + public boolean shouldSkipField(FieldAttributes fieldAttributes) { + final Expose expose = fieldAttributes.getAnnotation(Expose.class); + return expose != null && !expose.deserialize(); + } + + @Override + public boolean shouldSkipClass(Class aClass) { + return false; + } + }) + .create(); + private static final char[] SYMBOLS = + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); + private static final SecureRandom random = new SecureRandom(); + + /** + * 将 Object 转换为 JSON 字符串 + */ + public static String toJson(Object object) { + return gson.toJson(object); + } + + /** + * 将 JSON 字符串解析为特定类型的实例 + */ + public static T fromJson(String json, Class classOfT) throws JsonSyntaxException { + return gson.fromJson(json, classOfT); + } + + /** + * 从公私钥文件路径中读取文件内容 + * + * @param keyPath 文件路径 + * @return 文件内容 + */ + private static String readKeyStringFromPath(String keyPath) { + try { + return new String(Files.readAllBytes(Paths.get(keyPath)), StandardCharsets.UTF_8); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + /** + * 读取 PKCS#8 格式的私钥字符串并加载为私钥对象 + * + * @param keyString 私钥文件内容,以 -----BEGIN PRIVATE KEY----- 开头 + * @return PrivateKey 对象 + */ + public static PrivateKey loadPrivateKeyFromString(String keyString) { + try { + keyString = keyString.replace("-----BEGIN PRIVATE KEY-----", "") + .replace("-----END PRIVATE KEY-----", "") + .replaceAll("\\s+", ""); + return KeyFactory.getInstance("RSA").generatePrivate( + new PKCS8EncodedKeySpec(Base64.getDecoder().decode(keyString))); + } catch (NoSuchAlgorithmException e) { + throw new UnsupportedOperationException(e); + } catch (InvalidKeySpecException e) { + throw new IllegalArgumentException(e); + } + } + + /** + * 从 PKCS#8 格式的私钥文件中加载私钥 + * + * @param keyPath 私钥文件路径 + * @return PrivateKey 对象 + */ + public static PrivateKey loadPrivateKeyFromPath(String keyPath) { + return loadPrivateKeyFromString(readKeyStringFromPath(keyPath)); + } + + /** + * 读取 PKCS#8 格式的公钥字符串并加载为公钥对象 + * + * @param keyString 公钥文件内容,以 -----BEGIN PUBLIC KEY----- 开头 + * @return PublicKey 对象 + */ + public static PublicKey loadPublicKeyFromString(String keyString) { + try { + keyString = keyString.replace("-----BEGIN PUBLIC KEY-----", "") + .replace("-----END PUBLIC KEY-----", "") + .replaceAll("\\s+", ""); + return KeyFactory.getInstance("RSA").generatePublic( + new X509EncodedKeySpec(Base64.getDecoder().decode(keyString))); + } catch (NoSuchAlgorithmException e) { + throw new UnsupportedOperationException(e); + } catch (InvalidKeySpecException e) { + throw new IllegalArgumentException(e); + } + } + + /** + * 从 PKCS#8 格式的公钥文件中加载公钥 + * + * @param keyPath 公钥文件路径 + * @return PublicKey 对象 + */ + public static PublicKey loadPublicKeyFromPath(String keyPath) { + return loadPublicKeyFromString(readKeyStringFromPath(keyPath)); + } + + /** + * 创建指定长度的随机字符串,字符集为[0-9a-zA-Z],可用于安全相关用途 + */ + public static String createNonce(int length) { + char[] buf = new char[length]; + for (int i = 0; i < length; ++i) { + buf[i] = SYMBOLS[random.nextInt(SYMBOLS.length)]; + } + return new String(buf); + } + + /** + * 使用公钥按照 RSA_PKCS1_OAEP_PADDING 算法进行加密 + * + * @param publicKey 加密用公钥对象 + * @param plaintext 待加密明文 + * @return 加密后密文 + */ + public static String encrypt(PublicKey publicKey, String plaintext) { + final String transformation = "RSA/ECB/OAEPWithSHA-1AndMGF1Padding"; + + try { + Cipher cipher = Cipher.getInstance(transformation); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + return Base64.getEncoder().encodeToString(cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8))); + } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { + throw new IllegalArgumentException("The current Java environment does not support " + transformation, e); + } catch (InvalidKeyException e) { + throw new IllegalArgumentException("RSA encryption using an illegal publicKey", e); + } catch (BadPaddingException | IllegalBlockSizeException e) { + throw new IllegalArgumentException("Plaintext is too long", e); + } + } + + public static String aesAeadDecrypt(byte[] key, byte[] associatedData, byte[] nonce, + byte[] ciphertext) { + final String transformation = "AES/GCM/NoPadding"; + final String algorithm = "AES"; + final int tagLengthBit = 128; + + try { + Cipher cipher = Cipher.getInstance(transformation); + cipher.init( + Cipher.DECRYPT_MODE, + new SecretKeySpec(key, algorithm), + new GCMParameterSpec(tagLengthBit, nonce)); + if (associatedData != null) { + cipher.updateAAD(associatedData); + } + return new String(cipher.doFinal(ciphertext), StandardCharsets.UTF_8); + } catch (InvalidKeyException + | InvalidAlgorithmParameterException + | BadPaddingException + | IllegalBlockSizeException + | NoSuchAlgorithmException + | NoSuchPaddingException e) { + throw new IllegalArgumentException(String.format("AesAeadDecrypt with %s Failed", + transformation), e); + } + } + + /** + * 使用私钥按照指定算法进行签名 + * + * @param message 待签名串 + * @param algorithm 签名算法,如 SHA256withRSA + * @param privateKey 签名用私钥对象 + * @return 签名结果 + */ + public static String sign(String message, String algorithm, PrivateKey privateKey) { + byte[] sign; + try { + Signature signature = Signature.getInstance(algorithm); + signature.initSign(privateKey); + signature.update(message.getBytes(StandardCharsets.UTF_8)); + sign = signature.sign(); + } catch (NoSuchAlgorithmException e) { + throw new UnsupportedOperationException("The current Java environment does not support " + algorithm, e); + } catch (InvalidKeyException e) { + throw new IllegalArgumentException(algorithm + " signature uses an illegal privateKey.", e); + } catch (SignatureException e) { + throw new RuntimeException("An error occurred during the sign process.", e); + } + return Base64.getEncoder().encodeToString(sign); + } + + /** + * 使用公钥按照特定算法验证签名 + * + * @param message 待签名串 + * @param signature 待验证的签名内容 + * @param algorithm 签名算法,如:SHA256withRSA + * @param publicKey 验签用公钥对象 + * @return 签名验证是否通过 + */ + public static boolean verify(String message, String signature, String algorithm, + PublicKey publicKey) { + try { + Signature sign = Signature.getInstance(algorithm); + sign.initVerify(publicKey); + sign.update(message.getBytes(StandardCharsets.UTF_8)); + return sign.verify(Base64.getDecoder().decode(signature)); + } catch (SignatureException e) { + return false; + } catch (InvalidKeyException e) { + throw new IllegalArgumentException("verify uses an illegal publickey.", e); + } catch (NoSuchAlgorithmException e) { + throw new UnsupportedOperationException("The current Java environment does not support" + algorithm, e); + } + } + + /** + * 根据微信支付APIv3请求签名规则构造 Authorization 签名 + * + * @param mchid 商户号 + * @param certificateSerialNo 商户API证书序列号 + * @param privateKey 商户API证书私钥 + * @param method 请求接口的HTTP方法,请使用全大写表述,如 GET、POST、PUT、DELETE + * @param uri 请求接口的URL + * @param body 请求接口的Body + * @return 构造好的微信支付APIv3 Authorization 头 + */ + public static String buildAuthorization(String mchid, String certificateSerialNo, + PrivateKey privateKey, + String method, String uri, String body) { + String nonce = createNonce(32); + long timestamp = Instant.now().getEpochSecond(); + + String message = String.format("%s\n%s\n%d\n%s\n%s\n", method, uri, timestamp, nonce, + body == null ? "" : body); + + String signature = sign(message, "SHA256withRSA", privateKey); + + return String.format( + "WECHATPAY2-SHA256-RSA2048 mchid=\"%s\",nonce_str=\"%s\",signature=\"%s\"," + + "timestamp=\"%d\",serial_no=\"%s\"", + mchid, nonce, signature, timestamp, certificateSerialNo); + } + + /** + * 对参数进行 URL 编码 + * + * @param content 参数内容 + * @return 编码后的内容 + */ + public static String urlEncode(String content) { + try { + return URLEncoder.encode(content, StandardCharsets.UTF_8.name()); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + + /** + * 对参数Map进行 URL 编码,生成 QueryString + * + * @param params Query参数Map + * @return QueryString + */ + public static String urlEncode(Map params) { + if (params == null || params.isEmpty()) { + return ""; + } + + int index = 0; + StringBuilder result = new StringBuilder(); + for (Map.Entry entry : params.entrySet()) { + if (entry.getValue() == null) { + continue; + } + result.append(entry.getKey()) + .append("=") + .append(urlEncode(entry.getValue().toString())); + index++; + if (index < params.size()) { + result.append("&"); + } + } + return result.toString(); + } + + /** + * 从应答中提取 Body + * + * @param response HTTP 请求应答对象 + * @return 应答中的Body内容,Body为空时返回空字符串 + */ + public static String extractBody(Response response) { + if (response.body() == null) { + return ""; + } + + try { + BufferedSource source = response.body().source(); + return source.readUtf8(); + } catch (IOException e) { + throw new RuntimeException(String.format("An error occurred during reading response body. " + + "Status: %d", response.code()), e); + } + } + + /** + * 根据微信支付APIv3应答验签规则对应答签名进行验证,验证不通过时抛出异常 + * + * @param wechatpayPublicKeyId 微信支付公钥ID + * @param wechatpayPublicKey 微信支付公钥对象 + * @param headers 微信支付应答 Header 列表 + * @param body 微信支付应答 Body + */ + public static void validateResponse(String wechatpayPublicKeyId, PublicKey wechatpayPublicKey, + Headers headers, + String body) { + String timestamp = headers.get("Wechatpay-Timestamp"); + String requestId = headers.get("Request-ID"); + try { + Instant responseTime = Instant.ofEpochSecond(Long.parseLong(timestamp)); + // 拒绝过期请求 + if (Duration.between(responseTime, Instant.now()).abs().toMinutes() >= 5) { + throw new IllegalArgumentException( + String.format("Validate response failed, timestamp[%s] is expired, request-id[%s]", + timestamp, requestId)); + } + } catch (DateTimeException | NumberFormatException e) { + throw new IllegalArgumentException( + String.format("Validate response failed, timestamp[%s] is invalid, request-id[%s]", + timestamp, requestId)); + } + String serialNumber = headers.get("Wechatpay-Serial"); + if (!Objects.equals(serialNumber, wechatpayPublicKeyId)) { + throw new IllegalArgumentException( + String.format("Validate response failed, Invalid Wechatpay-Serial, Local: %s, Remote: " + + "%s", wechatpayPublicKeyId, serialNumber)); + } + + String signature = headers.get("Wechatpay-Signature"); + String message = String.format("%s\n%s\n%s\n", timestamp, headers.get("Wechatpay-Nonce"), + body == null ? "" : body); + + boolean success = verify(message, signature, "SHA256withRSA", wechatpayPublicKey); + if (!success) { + throw new IllegalArgumentException( + String.format("Validate response failed,the WechatPay signature is incorrect.%n" + + "Request-ID[%s]\tresponseHeader[%s]\tresponseBody[%.1024s]", + headers.get("Request-ID"), headers, body)); + } + } + + /** + * 根据微信支付APIv3通知验签规则对通知签名进行验证,验证不通过时抛出异常 + * @param wechatpayPublicKeyId 微信支付公钥ID + * @param wechatpayPublicKey 微信支付公钥对象 + * @param headers 微信支付通知 Header 列表 + * @param body 微信支付通知 Body + */ + public static void validateNotification(String wechatpayPublicKeyId, + PublicKey wechatpayPublicKey, Headers headers, + String body) { + String timestamp = headers.get("Wechatpay-Timestamp"); + try { + Instant responseTime = Instant.ofEpochSecond(Long.parseLong(timestamp)); + // 拒绝过期请求 + if (Duration.between(responseTime, Instant.now()).abs().toMinutes() >= 5) { + throw new IllegalArgumentException( + String.format("Validate notification failed, timestamp[%s] is expired", timestamp)); + } + } catch (DateTimeException | NumberFormatException e) { + throw new IllegalArgumentException( + String.format("Validate notification failed, timestamp[%s] is invalid", timestamp)); + } + String serialNumber = headers.get("Wechatpay-Serial"); + if (!Objects.equals(serialNumber, wechatpayPublicKeyId)) { + throw new IllegalArgumentException( + String.format("Validate notification failed, Invalid Wechatpay-Serial, Local: %s, " + + "Remote: %s", + wechatpayPublicKeyId, + serialNumber)); + } + + String signature = headers.get("Wechatpay-Signature"); + String message = String.format("%s\n%s\n%s\n", timestamp, headers.get("Wechatpay-Nonce"), + body == null ? "" : body); + + boolean success = verify(message, signature, "SHA256withRSA", wechatpayPublicKey); + if (!success) { + throw new IllegalArgumentException( + String.format("Validate notification failed, WechatPay signature is incorrect.\n" + + "responseHeader[%s]\tresponseBody[%.1024s]", + headers, body)); + } + } + + /** + * 对微信支付通知进行签名验证、解析,同时将业务数据解密。验签名失败、解析失败、解密失败时抛出异常 + * @param apiv3Key 商户的 APIv3 Key + * @param wechatpayPublicKeyId 微信支付公钥ID + * @param wechatpayPublicKey 微信支付公钥对象 + * @param headers 微信支付应答 Header 列表 + * @param body 微信支付应答 Body + * @return 解析后的通知内容,解密后的业务数据可以使用 Notification.getPlaintext() 访问 + */ + public static Notification parseNotification(String apiv3Key, String wechatpayPublicKeyId, + PublicKey wechatpayPublicKey, Headers headers, + String body) { + validateNotification(wechatpayPublicKeyId, wechatpayPublicKey, headers, body); + Notification notification = gson.fromJson(body, Notification.class); + notification.decrypt(apiv3Key); + return notification; + } + + /** + * 微信支付API错误异常,发送HTTP请求成功,但返回状态码不是 2XX 时抛出本异常 + */ + public static class ApiException extends RuntimeException { + private static final long serialVersionUID = 2261086748874802175L; + + private final int statusCode; + private final String body; + private final Headers headers; + private final String errorCode; + private final String errorMessage; + + public ApiException(int statusCode, String body, Headers headers) { + super(String.format("微信支付API访问失败,StatusCode: [%s], Body: [%s], Headers: [%s]", statusCode, + body, headers)); + this.statusCode = statusCode; + this.body = body; + this.headers = headers; + + if (body != null && !body.isEmpty()) { + JsonElement code; + JsonElement message; + + try { + JsonObject jsonObject = gson.fromJson(body, JsonObject.class); + code = jsonObject.get("code"); + message = jsonObject.get("message"); + } catch (JsonSyntaxException ignored) { + code = null; + message = null; + } + this.errorCode = code == null ? null : code.getAsString(); + this.errorMessage = message == null ? null : message.getAsString(); + } else { + this.errorCode = null; + this.errorMessage = null; + } + } + + /** + * 获取 HTTP 应答状态码 + */ + public int getStatusCode() { + return statusCode; + } + + /** + * 获取 HTTP 应答包体内容 + */ + public String getBody() { + return body; + } + + /** + * 获取 HTTP 应答 Header + */ + public Headers getHeaders() { + return headers; + } + + /** + * 获取 错误码 (错误应答中的 code 字段) + */ + public String getErrorCode() { + return errorCode; + } + + /** + * 获取 错误消息 (错误应答中的 message 字段) + */ + public String getErrorMessage() { + return errorMessage; + } + } + + public static class Notification { + @SerializedName("id") + private String id; + @SerializedName("create_time") + private String createTime; + @SerializedName("event_type") + private String eventType; + @SerializedName("resource_type") + private String resourceType; + @SerializedName("summary") + private String summary; + @SerializedName("resource") + private Resource resource; + private String plaintext; + + public String getId() { + return id; + } + + public String getCreateTime() { + return createTime; + } + + public String getEventType() { + return eventType; + } + + public String getResourceType() { + return resourceType; + } + + public String getSummary() { + return summary; + } + + public Resource getResource() { + return resource; + } + + /** + * 获取解密后的业务数据(JSON字符串,需要自行解析) + */ + public String getPlaintext() { + return plaintext; + } + + private void validate() { + if (resource == null) { + throw new IllegalArgumentException("Missing required field `resource` in notification"); + } + resource.validate(); + } + + /** + * 使用 APIv3Key 对通知中的业务数据解密,解密结果可以通过 getPlainText 访问。 + * 外部拿到的 Notification 一定是解密过的,因此本方法没有设置为 public + * @param apiv3Key 商户APIv3 Key + */ + private void decrypt(String apiv3Key) { + validate(); + + plaintext = aesAeadDecrypt( + apiv3Key.getBytes(StandardCharsets.UTF_8), + resource.associatedData.getBytes(StandardCharsets.UTF_8), + resource.nonce.getBytes(StandardCharsets.UTF_8), + Base64.getDecoder().decode(resource.ciphertext) + ); + } + + public static class Resource { + @SerializedName("algorithm") + private String algorithm; + + @SerializedName("ciphertext") + private String ciphertext; + + @SerializedName("associated_data") + private String associatedData; + + @SerializedName("nonce") + private String nonce; + + @SerializedName("original_type") + private String originalType; + + public String getAlgorithm() { + return algorithm; + } + + public String getCiphertext() { + return ciphertext; + } + + public String getAssociatedData() { + return associatedData; + } + + public String getNonce() { + return nonce; + } + + public String getOriginalType() { + return originalType; + } + + private void validate() { + if (algorithm == null || algorithm.isEmpty()) { + throw new IllegalArgumentException("Missing required field `algorithm` in Notification" + + ".Resource"); + } + if (!Objects.equals(algorithm, "AEAD_AES_256_GCM")) { + throw new IllegalArgumentException(String.format("Unsupported `algorithm`[%s] in " + + "Notification.Resource", algorithm)); + } + + if (ciphertext == null || ciphertext.isEmpty()) { + throw new IllegalArgumentException("Missing required field `ciphertext` in Notification" + + ".Resource"); + } + + if (associatedData == null || associatedData.isEmpty()) { + throw new IllegalArgumentException("Missing required field `associatedData` in " + + "Notification.Resource"); + } + + if (nonce == null || nonce.isEmpty()) { + throw new IllegalArgumentException("Missing required field `nonce` in Notification" + + ".Resource"); + } + + if (originalType == null || originalType.isEmpty()) { + throw new IllegalArgumentException("Missing required field `originalType` in " + + "Notification.Resource"); + } + } + } + } +} diff --git a/applet/src/main/java/cn/unizk/wxPay/utils/WxReqMessageBodyUtil.java b/applet/src/main/java/cn/unizk/wxPay/utils/WxReqMessageBodyUtil.java new file mode 100644 index 0000000..d90e6a4 --- /dev/null +++ b/applet/src/main/java/cn/unizk/wxPay/utils/WxReqMessageBodyUtil.java @@ -0,0 +1,20 @@ +package cn.unizk.wxPay.utils; + +/** + * @Author hao + * @Date 2025/9/2 11:23 + * @Version 1.0 + **/ +public class WxReqMessageBodyUtil { + + public static String buildSignMessage(String timestamp, String nonceStr, String body) { + return new StringBuilder() + .append(timestamp) + .append("\n") + .append(nonceStr) + .append("\n") + .append(body) + .append("\n") + .toString(); + } +} diff --git a/applet/src/main/java/cn/unizk/wxPay/utils/WxSignatureUtil.java b/applet/src/main/java/cn/unizk/wxPay/utils/WxSignatureUtil.java new file mode 100644 index 0000000..0d3777e --- /dev/null +++ b/applet/src/main/java/cn/unizk/wxPay/utils/WxSignatureUtil.java @@ -0,0 +1,115 @@ +package cn.unizk.wxPay.utils; + +import cn.unizk.utils.IOFileUtil; +import com.wechat.pay.java.core.util.NonceUtil; +import com.wechat.pay.java.core.util.PemUtil; +import lombok.extern.slf4j.Slf4j; +import okhttp3.HttpUrl; + +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.Signature; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; +import java.util.Base64; + +/** + * @Author hao + * @Date 2025/8/28 15:34 + * @Version 1.0 + **/ +@Slf4j +public final class WxSignatureUtil { + + private static String active = "dev"; + + public static void setEnv(String env){ + WxSignatureUtil.active = env; + } + + public static String getAuthorization(String mchid,String serial_no,String nonceStr,String httpMethod, String url, String requestBody) throws Exception { + HttpUrl httpUrl = HttpUrl.parse(url); + if (httpUrl == null){ + log.info("签名失败,httpUrl is null"); + return null; + } + long timestamp = System.currentTimeMillis() / 1000; + log.info("当前时间戳为:{}",timestamp); + String message = buildMessage(httpMethod, httpUrl, timestamp, nonceStr, requestBody); + String signature = createSign(message.getBytes(StandardCharsets.UTF_8)); + return "mchid=\"" + mchid + "\"," + + "nonce_str=\"" + nonceStr + "\"," + + "timestamp=\"" + timestamp + "\"," + + "serial_no=\"" + serial_no + "\"," + + "signature=\"" + signature + "\""; + } + + public static String getAppletPaySign(String appid,String prepayId,String nonce,long timestamp) throws Exception { + String msg = appid + "\n" + + timestamp + "\n" + + nonce + "\n" + + "prepay_id=" + prepayId + "\n"; + return createSign(msg.getBytes(StandardCharsets.UTF_8)); + } + + + private static String buildMessage(String method, HttpUrl url, long timestamp, String nonceStr, String body) { + String canonicalUrl = url.encodedPath(); + if (url.encodedQuery() != null) { + canonicalUrl += "?" + url.encodedQuery(); + } + log.info("canonicalUrl={}",canonicalUrl); + + return method + "\n" + + canonicalUrl + "\n" + + timestamp + "\n" + + nonceStr + "\n" + + body + "\n"; + } + + private static String createSign(byte[] message) throws Exception { + Signature sign = Signature.getInstance("SHA256withRSA"); + String pem; + if (active.equals("prod")) { + pem = IOFileUtil.readFileToString("/opt/unizk/cert/apiclient_key.pem"); + }else { + pem = IOFileUtil.readFileToString("E:\\document\\unizk\\wechatpay\\WXCertUtil\\cert\\apiclient_key.pem"); + } + PrivateKey privateKey = PemUtil.loadPrivateKeyFromString(pem); + sign.initSign(privateKey); + sign.update(message); + + return Base64.getEncoder().encodeToString(sign.sign()); + } + + public static boolean verifyWxCallbackSign(byte[] message, String signature) throws Exception { + Signature sig = Signature.getInstance("SHA256withRSA"); + String certPath; + if (active.equals("prod")){ + certPath = "/opt/unizk/cert/wechatpay_5ECF2D8FD7E28EC9DD53F49BCA70F7DB6C67E729.pem"; + }else { + certPath = "E:\\document\\unizk\\wechatpay\\pingtaiCert\\wechatpay_5ECF2D8FD7E28EC9DD53F49BCA70F7DB6C67E729.pem"; + } + try (InputStream in = Files.newInputStream(Paths.get(certPath))) { + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + X509Certificate cert = (X509Certificate) cf.generateCertificate(in); + + // ✅ 直接使用证书初始化验证(无需 getPublicKey()) + sig.initVerify(cert); + } + + // 3. 更新要验证的数据 + sig.update(message); + + // 4. 解码签名值 + byte[] signatureBytes = Base64.getDecoder().decode(signature); + + // 5. 验证签名 + return sig.verify(signatureBytes); + } +} diff --git a/applet/src/main/java/cn/unizk/wxPay/vo/WxOrderVO.java b/applet/src/main/java/cn/unizk/wxPay/vo/WxOrderVO.java new file mode 100644 index 0000000..9ff3047 --- /dev/null +++ b/applet/src/main/java/cn/unizk/wxPay/vo/WxOrderVO.java @@ -0,0 +1,30 @@ +/* +package cn.unizk.wxPay.vo; + +import cn.unizk.entity.po.WxOrder; +import cn.unizk.entity.po.WxOrderItem; +import cn.unizk.entity.vo.WxOrderItemVO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +*/ +/** + * @Author hao + * @Date 2025/8/29 16:00 + * @Version 1.0 + **//* + +@Data +@EqualsAndHashCode(callSuper = true) +public class WxOrderVO extends WxOrder { + + private Double singlePrice; + + private Double sumPrice; + + private List orderItemVOS; + +} +*/ diff --git a/applet/src/main/java/cn/unizk/wxPay/vo/WxPlaceOrderResVO.java b/applet/src/main/java/cn/unizk/wxPay/vo/WxPlaceOrderResVO.java new file mode 100644 index 0000000..08d0e6a --- /dev/null +++ b/applet/src/main/java/cn/unizk/wxPay/vo/WxPlaceOrderResVO.java @@ -0,0 +1,24 @@ +package cn.unizk.wxPay.vo; + +import lombok.Data; + +/** + * @Author hao + * @Date 2025/8/29 18:25 + * @Version 1.0 + **/ +@Data +public class WxPlaceOrderResVO { + + private String prepayId; + + private String signType = "RSA"; + + private String timestamp; + + private String paySign; + + private String nonceStr; + + private String orderId; +} diff --git a/applet/src/main/java/cn/unizk/xunfupay/config/FileUploadConfig.java b/applet/src/main/java/cn/unizk/xunfupay/config/FileUploadConfig.java new file mode 100644 index 0000000..727fc21 --- /dev/null +++ b/applet/src/main/java/cn/unizk/xunfupay/config/FileUploadConfig.java @@ -0,0 +1,43 @@ +package cn.unizk.xunfupay.config; + +/** + * 盒子开放平台-第三方应用文件上传相关配置参数 + * 实际项目中建议使用配置文件配置相关参数,并注入具体配置对象 + * + * @author iBOXCHAIN.HSX + * @date 2023/8/30 + */ +public interface FileUploadConfig { + + /* 普通文件上传相关配置参数-开始 */ + /** + * 请填写盒子开放平台获取文件上传token的接口地址,通常为 /auth/v1/get_file_token + */ + String GET_FILE_TOKEN_API_URL = "/auth/v1/get_file_token"; + + /** + * 请填写盒子开放平台上传文件的接口地址,通常为 /file/v2/upload_file + */ + String UPLOAD_FILE_API_URL = "/file/v2/upload_file"; + /* 普通文件上传相关配置参数-结束 */ + + + /* 直连OSS文件上传相关配置参数-开始 */ + /** + * 请填写盒子开放平台获取直连OSS文件上传签名的接口地址,通常为 /fsg/v1/sign/upload + */ + String GET_FILE_SIGN_API_URL = "/fsg/v1/sign/upload"; + + /** + * 请填写盒子对外开放的 OSS bucket 名称,通常为 prod-oms-extra-oss + */ + String IBOX_EXTRA_BUCKET = "prod-oms-extra-oss"; + + /** + * !!!请填写盒子为第三方应用分配的 OSS 顶级目录名称,!!!通常为第三方机构英文简称小写或者中文名称拼音首字母小写 + */ + String IBOX_EXTRA_APP_PATH = "!!!填写第三方机构英文简称小写"; + /* 直连OSS文件上传相关配置参数-结束 */ + +} + diff --git a/applet/src/main/java/cn/unizk/xunfupay/config/IboxOpenConfig.java b/applet/src/main/java/cn/unizk/xunfupay/config/IboxOpenConfig.java new file mode 100644 index 0000000..8847829 --- /dev/null +++ b/applet/src/main/java/cn/unizk/xunfupay/config/IboxOpenConfig.java @@ -0,0 +1,53 @@ +package cn.unizk.xunfupay.config; + +/** + * 盒子开放平台-第三方应用基本配置参数 + * 实际项目中建议使用配置文件配置相关参数,并注入具体配置对象 + * + * @author iBOXCHAIN.HSX + * @date 2023/8/30 + * @see 盒子开放平台官网 + */ +public interface IboxOpenConfig { + /** + * !!!盒子开放平台应用id,可在官网应用详情页面查看 + */ + String APP_ID = "AP2235166393055350784"; + + /** + * !!!盒子开放平台应用密钥,可在官网应用详情页面查看 + */ + String APP_SECRET = "eQCoN5MByJnD08Ud7dRYOuqCGPkwnlKz"; + + /** + * 签名算法类型 支持 MD5 和 SHA-256 + */ + String SIGN_ALGORITHM = "SHA-256"; + + /** + * !!!请填写盒子开放平台网关的路径前缀,通常为 https://openapi.iboxpay.com/api + */ + String URL_PREFIX = "https://openapi.imipay.com/api"; + + /** + * HTTP客户端-最大连接数,根据项目业务和网络等情况自行配置 + */ + int HTTPCLIENT_MAX_CONNECTIONS = 500; + + /** + * HTTP客户端-连接超时时间以及连接池等待超时时间,单位:ms,根据项目业务和网络等情况自行配置 + */ + int HTTPCLIENT_CONNECT_TIMEOUT = 5000; + + /** + * HTTP客户端-套接字读写超时时间,单位:ms,根据项目业务和网络等情况自行配置 + */ + int HTTPCLIENT_SOCKET_TIMEOUT = 30000; + + /** + * HTTP客户端-连接最大空闲时长,单位:ms,根据项目业务和网络等情况自行配置 + */ + int HTTPCLIENT_CONNECT_MAX_IDLE_TIME = 60000; + +} + diff --git a/applet/src/main/java/cn/unizk/xunfupay/dto/AddFzAccountDTO.java b/applet/src/main/java/cn/unizk/xunfupay/dto/AddFzAccountDTO.java new file mode 100644 index 0000000..5854a03 --- /dev/null +++ b/applet/src/main/java/cn/unizk/xunfupay/dto/AddFzAccountDTO.java @@ -0,0 +1,56 @@ +package cn.unizk.xunfupay.dto; + +import com.google.gson.Gson; +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +/** + * @Author hao + * @Date 2025/9/23 11:19 + * @Version 1.0 + **/ +@Getter +@Setter +public class AddFzAccountDTO { + private String acctNo; + private String userType; + private String userName; + private String compNm; + private String legalCertType = "1"; + private String userCardNo; + private String userCardStartDate; + private String userCardEndDate = "99991231"; + private String acctNm; + private String acctType = "0"; + private String bankCardNo; + private String acctBankNo; + private String acctBankNm; + private String acctZbankNo; + private String acctZbankNm; + private String acctZbankCode; + private String reservedPhone; + private String licNo; + private String licStartDate; + private String licEndDate; + private String businessAddressCode; + private String businessAddress; + private String regAddressCode; + private String regAddress; + private String businessMcc; + private List images; + + @Getter + @Setter + public static class Image { + private String name; + private String value; + } + + @Override + public String toString() { + Gson json = new Gson(); + return json.toJson(this); + } +} diff --git a/applet/src/main/java/cn/unizk/xunfupay/dto/ApplyFzReqDTO.java b/applet/src/main/java/cn/unizk/xunfupay/dto/ApplyFzReqDTO.java new file mode 100644 index 0000000..aab3838 --- /dev/null +++ b/applet/src/main/java/cn/unizk/xunfupay/dto/ApplyFzReqDTO.java @@ -0,0 +1,30 @@ +package cn.unizk.xunfupay.dto; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +/** + * @Author hao + * @Date 2025/9/25 15:15 + * @Version 1.0 + **/ +@Getter +@Setter +public class ApplyFzReqDTO { + private String applyNo; + private String mchtNo; + //交易订单号(好哒平台订单号,G开头) + private String orderNo; + private List detail; + + @Setter + @Getter + public static class Detail { + private String acctNo; + //账户类型(0:商户收款账户(大B),1:分账接收方账户(小B)) + private Integer acctType; + private Double amount; + } +} diff --git a/applet/src/main/java/cn/unizk/xunfupay/dto/PaySuccessCallbackDTO.java b/applet/src/main/java/cn/unizk/xunfupay/dto/PaySuccessCallbackDTO.java new file mode 100644 index 0000000..653ec6e --- /dev/null +++ b/applet/src/main/java/cn/unizk/xunfupay/dto/PaySuccessCallbackDTO.java @@ -0,0 +1,36 @@ +package cn.unizk.xunfupay.dto; + +import com.google.gson.Gson; +import lombok.Getter; +import lombok.Setter; + +/** + * @Author hao + * @Date 2025/9/25 14:04 + * @Version 1.0 + **/ +@Getter +@Setter +public class PaySuccessCallbackDTO { + private String mchtNo; + private String storeNo; + private String outOrderNo; + private String orderNo; + private String confirmCode; + private String transAmount; + private String tradeTime; + private String payChannelOrderNo; + private String channelTradeNo; + private String openId; + private String paymentType; + private String platformCouponAmount; + private String shopCouponAmount; + private String goodaShopCounponAmount; + private String subAppId; + + @Override + public String toString() { + Gson gson = new Gson(); + return gson.toJson(this); + } +} diff --git a/applet/src/main/java/cn/unizk/xunfupay/dto/QueryOrderTradeDetailResponse.java b/applet/src/main/java/cn/unizk/xunfupay/dto/QueryOrderTradeDetailResponse.java new file mode 100644 index 0000000..773fd2c --- /dev/null +++ b/applet/src/main/java/cn/unizk/xunfupay/dto/QueryOrderTradeDetailResponse.java @@ -0,0 +1,38 @@ +package cn.unizk.xunfupay.dto; + +import com.google.gson.Gson; +import lombok.Getter; +import lombok.Setter; + +/** + * @Author hao + * @Date 2025/9/25 14:47 + * @Version 1.0 + * 分账交易详情查询dto + **/ +@Getter +@Setter +public class QueryOrderTradeDetailResponse { + private String mchtNo; + private String tradeMchtNo; + private String orderNo; + private String channelOrderNo; + private String txSubCode; + private String paymentType; + private String status; + private String payAmount; + private String payServiceFee; + private String settleAmount; + private String payTime; + private String algoDate; + private String bizDate; + private String partStatus; + private String partAmount; + private String totalPerkAmount; + + @Override + public String toString() { + Gson gson = new Gson(); + return gson.toJson(this); + } +} diff --git a/applet/src/main/java/cn/unizk/xunfupay/dto/XBaseResult.java b/applet/src/main/java/cn/unizk/xunfupay/dto/XBaseResult.java new file mode 100644 index 0000000..b9f1b1b --- /dev/null +++ b/applet/src/main/java/cn/unizk/xunfupay/dto/XBaseResult.java @@ -0,0 +1,26 @@ +package cn.unizk.xunfupay.dto; + +import lombok.Getter; +import lombok.Setter; + +/** + * @Author hao + * @Date 2025/9/22 11:14 + * @Version 1.0 + **/ +@Getter +@Setter +public class XBaseResult { + + private String resultCode; + + private String errorCode; + + private String errorDesc; + + private String data; + + private T dataObj; + + +} diff --git a/applet/src/main/java/cn/unizk/xunfupay/dto/XunFuPlaceOrderDTO.java b/applet/src/main/java/cn/unizk/xunfupay/dto/XunFuPlaceOrderDTO.java new file mode 100644 index 0000000..443138b --- /dev/null +++ b/applet/src/main/java/cn/unizk/xunfupay/dto/XunFuPlaceOrderDTO.java @@ -0,0 +1,31 @@ +package cn.unizk.xunfupay.dto; + +import lombok.Getter; +import lombok.Setter; + +/** + * @Author hao + * @Date 2025/9/22 18:49 + * @Version 1.0 + **/ +@Getter +@Setter +public class XunFuPlaceOrderDTO { + + private String resultCode; + private String errorCode; + private String errorDesc; + private String orderNo; + private PayInfo payInfo; + + @Getter + @Setter + public static class PayInfo { + private String appId; + private String timeStamp; + private String nonceStr; + private String wxPackage; + private String signType; + private String paySign; + } +} diff --git a/applet/src/main/java/cn/unizk/xunfupay/dto/XunFuPlaceOrderReqDTO.java b/applet/src/main/java/cn/unizk/xunfupay/dto/XunFuPlaceOrderReqDTO.java new file mode 100644 index 0000000..291c960 --- /dev/null +++ b/applet/src/main/java/cn/unizk/xunfupay/dto/XunFuPlaceOrderReqDTO.java @@ -0,0 +1,32 @@ +package cn.unizk.xunfupay.dto; + +import com.google.gson.Gson; +import lombok.Getter; +import lombok.Setter; + +/** + * @Author hao + * @Date 2025/9/22 18:59 + * @Version 1.0 + **/ +@Getter +@Setter +public class XunFuPlaceOrderReqDTO { + private String mchtNo; + private String storeNo; + private String outOrderNo; + private String transAmount; + private String callbackUrl; + private String subOpenId; + private String confirmCode; + private String subAppId; + private String subAppIdType; + //分账类型:1不分账 5分账 + private String ledgerModel = "5"; + + @Override + public String toString() { + Gson gson = new Gson(); + return gson.toJson(this); + } +} diff --git a/applet/src/main/java/cn/unizk/xunfupay/properties/XunFuProperties.java b/applet/src/main/java/cn/unizk/xunfupay/properties/XunFuProperties.java new file mode 100644 index 0000000..e48d907 --- /dev/null +++ b/applet/src/main/java/cn/unizk/xunfupay/properties/XunFuProperties.java @@ -0,0 +1,56 @@ +package cn.unizk.xunfupay.properties; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Author hao + * @Date 2025/9/22 11:28 + * @Version 1.0 + **/ +@Getter +@Setter +@Component +@ConfigurationProperties(prefix = "xunfu") +public class XunFuProperties { + + private String appid; + + private String appSecret; + + private String baseApi; + + private String bindWxAppidApi; + + private String uploadFileTokenApi; + + private String uploadFileApi; + + private String paySuccessCallback; + + private String placeOrderApi; + + private final BigBusiness bigBusiness = new BigBusiness(); + + private final Fenzhang fenzhang = new Fenzhang(); + + @Getter + @Setter + public static class BigBusiness { + private String mchtNo; + private String storeNo; + private String account; + } + + @Getter + @Setter + public static class Fenzhang { + private String openFzApi; + private String addFzAccountApi; + private String qianyueApi; + private String tradeApi; + private String applyFzApi; + } +} diff --git a/applet/src/main/java/cn/unizk/xunfupay/service/XunFuPayService.java b/applet/src/main/java/cn/unizk/xunfupay/service/XunFuPayService.java new file mode 100644 index 0000000..f6a6bc5 --- /dev/null +++ b/applet/src/main/java/cn/unizk/xunfupay/service/XunFuPayService.java @@ -0,0 +1,358 @@ +/* +package cn.unizk.xunfupay.service; + +import cn.hutool.core.util.IdUtil; +import cn.unizk.config.WxProperties; +import cn.unizk.constant.UniConstant; +import cn.unizk.constant.WxConstant; +import cn.unizk.entity.po.JkStore; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.enums.OrderStatus; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.JkStoreMapper; +import cn.unizk.utils.OkHttpUtil; +import cn.unizk.wxPay.vo.WxPlaceOrderResVO; +import cn.unizk.xunfupay.dto.*; +import cn.unizk.xunfupay.properties.XunFuProperties; +import cn.unizk.xunfupay.util.XunFuUtil; +import com.alibaba.fastjson2.JSONObject; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.RandomStringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.security.NoSuchAlgorithmException; +import java.time.Clock; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +*/ +/** + * @Author hao + * @Date 2025/9/22 10:54 + * @Version 1.0 + **//* + +@Service +@Slf4j +public class XunFuPayService { + + @Resource + private XunFuProperties xunFuProperties; + @Resource + private WxProperties wxProperties; + @Resource + private WxOrderMapper wxOrderMapper; + @Resource + private JkStoreMapper jkStoreMapper; + + */ +/** + * 绑定微信小程序appid + * + * @return + *//* + + public boolean bindWxAppID() { + Map reqBody = new HashMap<>(); + reqBody.put("mchtNo", xunFuProperties.getBigBusiness().getMchtNo()); //慧掌柜商户号 + reqBody.put("storeNo", xunFuProperties.getBigBusiness().getStoreNo()); //慧掌柜门店号 + reqBody.put("subAppId", wxProperties.getAppid()); //微信小程序appid + String sign; + try { + sign = XunFuUtil.sign(xunFuProperties.getAppSecret(), reqBody); + } catch (NoSuchAlgorithmException e) { + log.error("讯付支付生成签名异常", e); + throw new ServiceException("服务异常"); + } + Map commonReqHeader = XunFuUtil.createCommonReqHeader(xunFuProperties.getAppid(), sign); + String url = xunFuProperties.getBaseApi() + xunFuProperties.getBindWxAppidApi(); + Map map = OkHttpUtil.executeHttp(url, commonReqHeader, null, reqBody); + String res = (String) map.get(UniConstant.HTTP_RESPONSE); + JSONObject object = JSONObject.parseObject(res); + String resultCode = object.getString("resultCode"); + if ("0".equals(resultCode)) { + String errorCode = object.getString("errorCode"); + String errorDesc = object.getString("errorDesc"); + log.info("讯付绑定微信小程序appid失败,错误码:{},原因:{}", errorCode, errorDesc); + return false; + } + if ("1".equals(resultCode)) { + log.info("讯付绑定微信小程序appid成功"); + return true; + } + return false; + } + + */ +/** + * 开通分账 + * + * @return + *//* + + public boolean activateFz() { + Map body = new HashMap<>(); + body.put("mchtNo", xunFuProperties.getBigBusiness().getMchtNo()); + body.put("storeNo", xunFuProperties.getBigBusiness().getMchtNo()); + String sign; + try { + sign = XunFuUtil.sign(xunFuProperties.getAppSecret(), body); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + throw new ServiceException("商户开通分账功能失败"); + } + Map commonReqHeader = XunFuUtil.createCommonReqHeader(xunFuProperties.getAppid(), sign); + Map map = OkHttpUtil.executeHttp(xunFuProperties.getBaseApi() + xunFuProperties.getFenzhang().getOpenFzApi(), commonReqHeader, null, body); + String res = (String) map.get(UniConstant.HTTP_RESPONSE); + JSONObject object = JSONObject.parseObject(res); + Integer resultCode = (Integer) object.get("resultCode"); + if (resultCode == 1) { + log.info("开通分账成功"); + return true; + } else { + String errorCode = object.getString("errorCode"); + String errorDesc = object.getString("errorDesc"); + log.info("讯付开通分账失败,错误码:{},原因:{}", errorCode, errorDesc); + return false; + } + } + + */ +/** + * 添加分账接收方账户 + *//* + + public ResultData addFzAccount(AddFzAccountDTO dto,Integer storeId) { + String sign; + try { + sign = XunFuUtil.sign(xunFuProperties.getAppSecret(), dto); + } catch (NoSuchAlgorithmException e) { + log.error("添加分账接收方账户签名失败", e); + throw new ServiceException(); + } + Map commonReqHeader = XunFuUtil.createCommonReqHeader(xunFuProperties.getAppid(), sign); + String url = xunFuProperties.getBaseApi() + xunFuProperties.getFenzhang().getAddFzAccountApi(); + String res = OkHttpUtil.executeHttpRtnStr(url, commonReqHeader, null, dto.toString()); + Gson gson = new Gson(); + XBaseResult xBaseResult = gson.fromJson(res, XBaseResult.class); + int resultCode = Integer.parseInt(xBaseResult.getResultCode()); + if (resultCode == 1) { + String data = xBaseResult.getData(); + JSONObject jsonData = JSONObject.parseObject(data); + //用户编码,创建分账接收方失败或者审核驳回时,修改信息时填写(可能需要存表) + String acctNo = jsonData.getString("acctNo"); + log.info("用户编码accNo={}", acctNo); + String status = jsonData.getString("status"); + JkStore store = new JkStore(); + store.setId(storeId); + store.setAcctNo(acctNo); + if ("0".equals(status)) { + store.setActivateFzFlag(0); + jkStoreMapper.updateById(store); + log.info("已开通=-==----==---=---===--"); + return ResultData.success("已开通"); + } + if ("1".equals(status)) { + store.setActivateFzFlag(1); + jkStoreMapper.updateById(store); + log.info("开通中===-----=====---"); + return ResultData.success("开通中"); + } + if ("2".equals(status)) { + String desc = jsonData.getString("desc"); + log.error("开通异常,异常原因:{}", desc); + //存表或缓存添加定时任务或其他操作重写添加 + return ResultData.failure(500,desc); + } + throw new ServiceException(String.format("未知的status,%s",status)); + } else { + String errorCode = xBaseResult.getErrorCode(); + String errorDesc = xBaseResult.getErrorDesc(); + log.error("添加分账接收方账户失败,错误码:{},错误描述:{}", errorCode, errorDesc); + //后续建一张xunfu_store_information表,jk_store加个xunfu_store_info_id与之关联。或者直接在jk_store加个是否已开通的标识字段吧 + return ResultData.failure(500,errorDesc); + } + } + + */ +/** + * 签约 + * @return + * @throws NoSuchAlgorithmException + *//* + + public String qianyue() throws NoSuchAlgorithmException { + Map body = new HashMap<>(); + body.put("acctNo",xunFuProperties.getBigBusiness().getAccount()); + body.put("mchtNo",xunFuProperties.getBigBusiness().getMchtNo()); + body.put("storeNo",xunFuProperties.getBigBusiness().getStoreNo()); + String sign = XunFuUtil.sign(xunFuProperties.getAppSecret(), body); + Map commonReqHeader = XunFuUtil.createCommonReqHeader(xunFuProperties.getAppid(), sign); + String url = xunFuProperties.getBaseApi() + xunFuProperties.getFenzhang().getQianyueApi(); + Map map = OkHttpUtil.executeHttp(url, commonReqHeader, null, body); + String o = (String) map.get(UniConstant.HTTP_RESPONSE); + JSONObject res = JSONObject.parseObject(o); + if (res.getInteger("resultCode") == 1){ + log.info("签约成功"); + return "签约成功"; + }else { + String errorCode = res.getString("errorCode"); + String errorDesc = res.getString("errorDesc"); + log.info("签约失败,错误码:{},描述:{}",errorCode,errorDesc); + return "签约失败"; + } + } + + */ +/** + * 环迅支付下单 + * @param vo + * @return + *//* + + @Transactional(rollbackFor = Exception.class) + public WxPlaceOrderResVO xunfuPlaceOrder(WxOrderVO vo) { + String orderId = IdUtil.getSnowflakeNextIdStr(); + XunFuPlaceOrderReqDTO reqDTO = new XunFuPlaceOrderReqDTO(); + reqDTO.setMchtNo(xunFuProperties.getBigBusiness().getMchtNo()); + reqDTO.setStoreNo(xunFuProperties.getBigBusiness().getStoreNo()); + reqDTO.setOutOrderNo(orderId); + double v = vo.getSumPrice() * 100; + reqDTO.setTransAmount(String.valueOf(v)); + reqDTO.setCallbackUrl(xunFuProperties.getPaySuccessCallback()); + reqDTO.setSubOpenId(vo.getOpenid()); + reqDTO.setConfirmCode(RandomStringUtils.randomNumeric(4)); + reqDTO.setSubAppId(wxProperties.getAppid()); + reqDTO.setSubAppIdType("MINI_PROGRAM"); + String sign; + try { + sign = XunFuUtil.sign(xunFuProperties.getAppSecret(), reqDTO); + } catch (NoSuchAlgorithmException e) { + log.error("环迅支付下单生成签名失败",e); + throw new ServiceException(); + } + Map commonReqHeader = XunFuUtil.createCommonReqHeader(xunFuProperties.getAppid(), sign); + String url = xunFuProperties.getBaseApi() + xunFuProperties.getPlaceOrderApi(); + String s = OkHttpUtil.executeHttpRtnStr(url, commonReqHeader, null, reqDTO.toString()); + Gson gson = new Gson(); + XunFuPlaceOrderDTO xunFuPlaceOrderDTO = gson.fromJson(s, XunFuPlaceOrderDTO.class); + if ("0".equals(xunFuPlaceOrderDTO.getResultCode())){ + log.error("环迅支付下单失败,错误码:{},描述:{}",xunFuPlaceOrderDTO.getErrorCode(),xunFuPlaceOrderDTO.getErrorDesc()); + throw new ServiceException("下单失败!"); + } + if ("1".equals(xunFuPlaceOrderDTO.getResultCode())){ + WxPlaceOrderResVO orderResVO = new WxPlaceOrderResVO(); + orderResVO.setOrderId(orderId); + orderResVO.setTimestamp(xunFuPlaceOrderDTO.getPayInfo().getTimeStamp()); + orderResVO.setSignType(xunFuPlaceOrderDTO.getPayInfo().getSignType()); + orderResVO.setNonceStr(xunFuPlaceOrderDTO.getPayInfo().getNonceStr()); + orderResVO.setPaySign(xunFuPlaceOrderDTO.getPayInfo().getPaySign()); + orderResVO.setPrepayId(xunFuPlaceOrderDTO.getPayInfo().getWxPackage().split("=")[1]); + //生成订单 + WxOrder wxOrder = new WxOrder(); + BeanUtils.copyProperties(vo, wxOrder); + wxOrder.setTotalPrice(BigDecimal.valueOf(v)); + wxOrder.setStatus(OrderStatus.unpaid.name()); + wxOrder.setOrderId(orderId); + wxOrder.setCreateTime(LocalDateTime.now(Clock.systemDefaultZone())); + wxOrderMapper.insert(wxOrder); + return orderResVO; + } + throw new ServiceException(String.format("返回未知状态码ResultCode=%s",xunFuPlaceOrderDTO.getResultCode())); + } + + */ +/** + * 分账交易详情查询 + * @param orderNo + * @return + * @throws NoSuchAlgorithmException + *//* + + public QueryOrderTradeDetailResponse queryOrderTradeDetailResponse(String orderNo) throws NoSuchAlgorithmException { + Map body = new HashMap<>(); + body.put("mchtNo",xunFuProperties.getBigBusiness().getMchtNo()); + body.put("orderNo",orderNo); + String sign = XunFuUtil.sign(xunFuProperties.getAppSecret(), body); + Map commonReqHeader = XunFuUtil.createCommonReqHeader(xunFuProperties.getAppid(), sign); + String url = xunFuProperties.getBaseApi() + xunFuProperties.getFenzhang().getTradeApi(); + Map map = OkHttpUtil.executeHttp(url, commonReqHeader, null, body); + String o = (String) map.get(UniConstant.HTTP_RESPONSE); + JSONObject res = JSONObject.parseObject(o); + if (res.getInteger("resultCode") == 1){ + String data = res.getString("data"); + Gson gson = new Gson(); + return gson.fromJson(data, QueryOrderTradeDetailResponse.class); + }else { + String errorCode = res.getString("errorCode"); + String errorDesc = res.getString("errorDesc"); + log.error("分账交易详情查询失败,错误码:{},描述:{}",errorCode,errorDesc); + throw new ServiceException("分账交易详情查询失败"); + } + } + + */ +/** + * 订单分账申请 + * @param orderNo + * @param totalAmount + * @return + *//* + + public boolean applyFz(String orderNo,String totalAmount){ + ApplyFzReqDTO dto = new ApplyFzReqDTO(); + String applyNo = IdUtil.getSnowflakeNextIdStr(); + dto.setApplyNo(applyNo); + dto.setMchtNo(xunFuProperties.getBigBusiness().getMchtNo()); + dto.setOrderNo(orderNo); + List list = new ArrayList<>(); + ApplyFzReqDTO.Detail bigDetail = new ApplyFzReqDTO.Detail(); + bigDetail.setAcctNo(xunFuProperties.getBigBusiness().getAccount()); + bigDetail.setAcctType(0); + int total = Integer.parseInt(totalAmount); + bigDetail.setAmount(total * 0.2); + list.add(bigDetail); + ApplyFzReqDTO.Detail smallDetail = new ApplyFzReqDTO.Detail(); + smallDetail.setAcctNo("12345"); + smallDetail.setAcctType(1); + smallDetail.setAmount(total * 0.8); + list.add(smallDetail); + dto.setDetail(list); + String sign; + try { + sign = XunFuUtil.sign(xunFuProperties.getAppSecret(), dto); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + throw new ServiceException("申请分账异常"); + } + Map commonReqHeader = XunFuUtil.createCommonReqHeader(xunFuProperties.getAppid(), sign); + String url = xunFuProperties.getBaseApi() + xunFuProperties.getFenzhang().getApplyFzApi(); + String res = OkHttpUtil.executeHttpRtnStr(url, commonReqHeader, null, dto.toString()); + Gson gson = new Gson(); + XBaseResult xBaseResult = gson.fromJson(res, XBaseResult.class); + WxOrder wxOrder = new WxOrder(); + wxOrder.setOrderId(orderNo); + if ("1".equals(xBaseResult.getResultCode())){ + log.info("申请分账成功,orderNo:{}",orderNo); + wxOrder.setApplyFzFlag("success"); + wxOrderMapper.updateById(wxOrder); + return true; + }else { + wxOrder.setApplyFzFlag("fail"); + wxOrderMapper.updateById(wxOrder); + log.error("申请分账失败,错误码:{},描述:{}",xBaseResult.getErrorCode(),xBaseResult.getErrorDesc()); + return false; + } + } + +} +*/ diff --git a/applet/src/main/java/cn/unizk/xunfupay/util/FileUploadUtil.java b/applet/src/main/java/cn/unizk/xunfupay/util/FileUploadUtil.java new file mode 100644 index 0000000..e89d05a --- /dev/null +++ b/applet/src/main/java/cn/unizk/xunfupay/util/FileUploadUtil.java @@ -0,0 +1,159 @@ +package cn.unizk.xunfupay.util; + + +import cn.unizk.xunfupay.config.FileUploadConfig; +import cn.unizk.xunfupay.config.IboxOpenConfig; +import lombok.Data; +import org.apache.http.HttpEntity; +import org.apache.http.HttpStatus; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.HttpMultipartMode; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.util.EntityUtils; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** + * 盒子开放平台文件上传请求工具 + * + * @author iBOXCHAIN.HSX + * @date 2022/12/9 + */ +public class FileUploadUtil { + + /** + * 自动完成上传文件流程 + * + * @param fileInputStream 文件输入流 + * @param busFileName 业务文件名,如 demo1.png + * @param busFileType 业务文件类型,3.9.0版本新增参数,根据参数说明中的类型名称,准确传递对应的类型code + * @return 上传成功时返回的标准文件名 + * @throws IOException + */ + public static String autoUploadFile(InputStream fileInputStream, String busFileName, String busFileType) throws IOException { + // 获取文件上传token + String fileToken = getFileToken(busFileName); + // 上传文件 + return uploadFile(fileInputStream, busFileName, busFileType, fileToken); + } + + /** + * 获取文件上传token + * + * @param busFileName 业务文件名 + * @return 文件上传token + */ + public static String getFileToken(String busFileName) { + // 准备请求参数 + Map reqBodyObj = new HashMap<>(); + reqBodyObj.put("fileName", busFileName); + reqBodyObj.put("action", 0); + + // 发起请求 + String resBodyJsonStr = SignRequestUtil.signRequestWithConfig(reqBodyObj, FileUploadConfig.GET_FILE_TOKEN_API_URL, true); + + // 从响应数据对象中获取文件上传token + FileTokenVo fileTokenVo = SignRequestUtil.GSON.fromJson(resBodyJsonStr, FileTokenVo.class); + if (Objects.equals(fileTokenVo.getCode(), 0) || fileTokenVo.getToken() == null || fileTokenVo.getToken().length() == 0) { + throw new RuntimeException("获取文件Token失败"); + } + return fileTokenVo.getToken(); + } + + /** + * 上传文件 + * + * @param fileInputStream 文件输入流 + * @param busFileName 业务文件名 + * @param busFileType 业务文件类型,3.9.0版本新增参数,根据参数说明中的类型名称,准确传递对应的类型code + * @param fileToken 文件上传token + * @return 上传成功时返回的标准文件名 + * @throws IOException + */ + public static String uploadFile(InputStream fileInputStream, String busFileName, String busFileType, String fileToken) throws IOException { + HttpPost httpPost = new HttpPost(); + httpPost.setURI(URI.create(IboxOpenConfig.URL_PREFIX + FileUploadConfig.UPLOAD_FILE_API_URL)); + + // 设置必要请求头 + httpPost.addHeader(SignRequestUtil.APPID_HEADER, IboxOpenConfig.APP_ID); + httpPost.addHeader(SignRequestUtil.TIMESTAMP_HEADER, LocalDateTime.now().format(SignRequestUtil.TIMESTAMP_FORMATTER)); + httpPost.setHeader("X-File-Token", fileToken); + + // 组装多部件请求体 + MultipartEntityBuilder fileEntityBuilder = MultipartEntityBuilder.create(); + fileEntityBuilder.setCharset(StandardCharsets.UTF_8); + fileEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); + fileEntityBuilder.addBinaryBody("file", fileInputStream, ContentType.MULTIPART_FORM_DATA, busFileName); + ContentType contentType = ContentType.TEXT_PLAIN.withCharset(StandardCharsets.UTF_8); + fileEntityBuilder.addTextBody("fileName", busFileName, contentType); + fileEntityBuilder.addTextBody("fileType", busFileType, contentType); + httpPost.setEntity(fileEntityBuilder.build()); + + // 使用http客户端组件执行请求得到响应 + CloseableHttpResponse response = SignRequestUtil.HTTP_CLIENT.execute(httpPost); + int statusCode = response.getStatusLine().getStatusCode(); + HttpEntity responseEntity = response.getEntity(); + String resBodyJsonStr = EntityUtils.toString(responseEntity, StandardCharsets.UTF_8); + System.out.println("resStatusCode: " + statusCode + ", resBodyJsonStr: " + resBodyJsonStr); + response.close(); + + // 以http响应状态码判断上传结果,并获取标准文件名 + if (statusCode == HttpStatus.SC_OK) { + FileUploadResultVo fileUploadResultVo = SignRequestUtil.GSON.fromJson(resBodyJsonStr, FileUploadResultVo.class); + if (fileUploadResultVo.getData() == null || fileUploadResultVo.getData().getFileName() == null) { + throw new RuntimeException("文件上传失败,未获取到标准文件名"); + } + System.out.println("文件上传成功,获取到标准文件名为:" + fileUploadResultVo.getData().getFileName()); + return fileUploadResultVo.getData().getFileName(); + } else { + throw new RuntimeException("文件上传失败,http响应状态码为:" + statusCode); + } + } + + /** + * 获取文件上传token接口返回的数据对象vo + */ + @Data + public static class FileTokenVo { + private Integer code; + + private String errorCode; + + private String errorDesc; + + private String token; + } + + /** + * 文件上传结果vo + */ + @Data + public static class FileUploadResultVo { + private Integer code; + + private String errorCode; + + private String errorDesc; + + private FileUpResDataVo data; + } + + /** + * 文件上传结果内部数据对象vo + */ + @Data + public static class FileUpResDataVo { + private String fileName; + } + +} + diff --git a/applet/src/main/java/cn/unizk/xunfupay/util/SignRequestUtil.java b/applet/src/main/java/cn/unizk/xunfupay/util/SignRequestUtil.java new file mode 100644 index 0000000..2d31921 --- /dev/null +++ b/applet/src/main/java/cn/unizk/xunfupay/util/SignRequestUtil.java @@ -0,0 +1,214 @@ +package cn.unizk.xunfupay.util; + +import cn.unizk.xunfupay.config.IboxOpenConfig; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.apache.http.Header; +import org.apache.http.HttpEntity; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.DefaultHttpRequestRetryHandler; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.http.util.EntityUtils; + +import java.io.IOException; +import java.net.URI; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Base64; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * 盒子开放平台签名请求工具 + * + * @author iBOXCHAIN.HSX + * @date 2022/12/9 + */ +public class SignRequestUtil { + /** + * 实际项目中建议使用一个规范的公共的http客户端组件,并根据项目业务和网络等情况自行配置,防止每次都创建和关闭 + */ + public static final CloseableHttpClient HTTP_CLIENT = SignRequestUtil.createHttpClientWithConfig(); + + /** + * 实际项目中建议使用一个规范的公共的序列化组件,防止每次都创建和关闭 + */ + public static final Gson GSON = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create(); + + /** + * 时间戳格式,固定 + */ + public static final DateTimeFormatter TIMESTAMP_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + /** + * 应用id报文头名称,固定 + */ + public static final String APPID_HEADER = "X-Up-AppId"; + + /** + * 时间戳报文头名称,固定 + */ + public static final String TIMESTAMP_HEADER = "X-Timestamp"; + + /** + * 签名算法报文头名称,固定 + */ + public static final String SIGN_ALGORITHM_HEADER = "X-Sign-Type"; + + /** + * 签名值报文头名称,固定 + */ + private static final String SIGN_HEADER = "X-Sign"; + + + /** + * 签名并请求接口 + * 自动使用配置类中的配置参数,显式异常转换为运行时异常 + * + * @param reqBodyObj 请求体的数据对象 + * @param apiUrl 接口路径 + * @param verifyResSign 是否对盒子开放平台的响应进行验签 + * @return 响应体json字符串 + */ + public static String signRequestWithConfig(Object reqBodyObj, String apiUrl, boolean verifyResSign) { + try { + return signRequest(IboxOpenConfig.APP_ID, IboxOpenConfig.APP_SECRET, IboxOpenConfig.SIGN_ALGORITHM, reqBodyObj, apiUrl, verifyResSign); + } catch (IOException | NoSuchAlgorithmException ex) { + throw new RuntimeException(ex); + } + } + + /** + * 签名并请求接口 + * + * @param appId 应用id + * @param appSecret 应用秘钥 + * @param signAlgorithm 签名算法 + * @param reqBodyObj 请求体的数据对象 + * @param apiUrl 接口路径 + * @param verifyResSign 是否对盒子开放平台的响应进行验签 + * @return 响应体json字符串 + * @throws IOException + * @throws NoSuchAlgorithmException + */ + public static String signRequest(String appId, String appSecret, String signAlgorithm, Object reqBodyObj, String apiUrl, boolean verifyResSign) throws IOException, NoSuchAlgorithmException { + // 签名 + String reqBodyJsonStr = GSON.toJson(reqBodyObj); + String reqTimestamp = LocalDateTime.now().format(TIMESTAMP_FORMATTER); + String reqSign = sign(signAlgorithm, reqTimestamp, appSecret, reqBodyJsonStr); + + // 组装请求 + HttpPost httpPost = new HttpPost(); + httpPost.setURI(URI.create(IboxOpenConfig.URL_PREFIX + apiUrl)); + httpPost.addHeader("Content-Type", "application/json"); + httpPost.addHeader(APPID_HEADER, appId); + httpPost.addHeader(TIMESTAMP_HEADER, reqTimestamp); + httpPost.addHeader(SIGN_ALGORITHM_HEADER, signAlgorithm); + httpPost.addHeader(SIGN_HEADER, reqSign); + httpPost.setEntity(new StringEntity(reqBodyJsonStr, "UTF-8")); + + // 使用http客户端组件执行请求得到响应 + CloseableHttpResponse response = HTTP_CLIENT.execute(httpPost); + HttpEntity entity = response.getEntity(); + String resBodyJsonStr = EntityUtils.toString(entity, "UTF-8"); + System.out.println("resStatusCode: " + response.getStatusLine().getStatusCode() + ", resBodyJsonStr: " + resBodyJsonStr); + + // 验签 + if (verifyResSign) { + verifySign(appSecret, resBodyJsonStr, response); + } + + response.close(); + return resBodyJsonStr; + } + + /** + * 签名 + * + * @param signAlgorithm 签名算法 + * @param timestamp 时间戳 + * @param appSecret 应用秘钥 + * @param reqBodyJsonStr 请求体字符串 + * @return 签名字符串 + * @throws NoSuchAlgorithmException + */ + public static String sign(String signAlgorithm, String timestamp, String appSecret, String reqBodyJsonStr) throws NoSuchAlgorithmException { + String toSignStr = timestamp + appSecret + reqBodyJsonStr; + MessageDigest messageDigest = MessageDigest.getInstance(signAlgorithm); + messageDigest.reset(); + messageDigest.update(toSignStr.getBytes()); + return new String(Base64.getEncoder().encode(messageDigest.digest()), StandardCharsets.UTF_8); + } + + /** + * 验签 + * + * @param appSecret 应用秘钥 + * @param resBodyJsonStr 响应体字符串 + * @param response httpclient的响应对象 + * @throws NoSuchAlgorithmException + */ + public static void verifySign(String appSecret, String resBodyJsonStr, CloseableHttpResponse response) throws NoSuchAlgorithmException { + // 获取必要的响应头 + Header resTimestampHeader = response.getFirstHeader(TIMESTAMP_HEADER); + Header resSignAlgorithmHeader = response.getFirstHeader(SIGN_ALGORITHM_HEADER); + Header resSignHeader = response.getFirstHeader(SIGN_HEADER); + if (resTimestampHeader == null || resSignAlgorithmHeader == null || resSignHeader == null) { + throw new RuntimeException("响应中缺乏必要的响应头,无法验签"); + } + String resTimestamp = resTimestampHeader.getValue(); + String resSignAlgorithm = resSignAlgorithmHeader.getValue(); + String resSign = resSignHeader.getValue(); + + // 计算签名并比较 + String localResSign = sign(resSignAlgorithm, resTimestamp, appSecret, resBodyJsonStr); + if (!Objects.equals(localResSign, resSign)) { + throw new RuntimeException("响应验签未通过"); + } else { + System.out.println("响应验签通过"); + } + } + + /** + * 根据配置创建HttpClient对象 + * 实际项目中建议使用一个规范的公共的http客户端组件,并根据项目业务和网络情况自行配置,防止每次都创建和关闭 + * + * @return 创建的HttpClient对象 + */ + public static CloseableHttpClient createHttpClientWithConfig() { + HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); + + // 连接池配置 + PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(); + poolingHttpClientConnectionManager.setMaxTotal(IboxOpenConfig.HTTPCLIENT_MAX_CONNECTIONS); + // 此示例为单路由 + poolingHttpClientConnectionManager.setDefaultMaxPerRoute(IboxOpenConfig.HTTPCLIENT_MAX_CONNECTIONS); + httpClientBuilder.setConnectionManager(poolingHttpClientConnectionManager); + + // 默认单个请求配置(具体可在每个请求对象中设置) + RequestConfig requestConfig = RequestConfig.custom() + .setConnectionRequestTimeout(IboxOpenConfig.HTTPCLIENT_CONNECT_TIMEOUT) + .setConnectTimeout(IboxOpenConfig.HTTPCLIENT_CONNECT_TIMEOUT) + .setSocketTimeout(IboxOpenConfig.HTTPCLIENT_SOCKET_TIMEOUT) + .build(); + httpClientBuilder.setDefaultRequestConfig(requestConfig); + + // 重试配置(关闭) + httpClientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(0, false)); + + // 连接空闲时长 + httpClientBuilder.evictIdleConnections(IboxOpenConfig.HTTPCLIENT_CONNECT_MAX_IDLE_TIME, TimeUnit.MILLISECONDS); + + return httpClientBuilder.build(); + } + +} + diff --git a/applet/src/main/java/cn/unizk/xunfupay/util/XunFuUtil.java b/applet/src/main/java/cn/unizk/xunfupay/util/XunFuUtil.java new file mode 100644 index 0000000..0e01092 --- /dev/null +++ b/applet/src/main/java/cn/unizk/xunfupay/util/XunFuUtil.java @@ -0,0 +1,67 @@ +package cn.unizk.xunfupay.util; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @Author hao + * @Date 2025/9/19 16:00 + * @Version 1.0 + **/ +public class XunFuUtil { + + public static Map createCommonReqHeader(String appid,String sign){ + Map commonHeader = new HashMap<>(); + commonHeader.put("X-Up-AppId",appid); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + commonHeader.put("X-Timestamp",now); + commonHeader.put("X-Sign-Type","SHA-256"); + commonHeader.put("X-Sign",sign); + return commonHeader; + } + + public static String sign(String appSecret,T t) throws NoSuchAlgorithmException { + Gson GSON = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create(); + DateTimeFormatter TIMESTAMP_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + // 准备请求参数 + String reqBodyJsonStr = GSON.toJson(t); + String reqTimestamp = LocalDateTime.now().format(TIMESTAMP_FORMATTER); + + // 进行签名 + String toSignStr = reqTimestamp + appSecret + reqBodyJsonStr; + MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); + messageDigest.reset(); + messageDigest.update(toSignStr.getBytes()); + // 注意:进行base64编码的值是字节数组 + byte[] signByte = messageDigest.digest(); + return new String(Base64.getEncoder().encode(signByte), StandardCharsets.UTF_8); + } + + public static String sign(String appSecret,Map reqBodyObj) throws NoSuchAlgorithmException { + Gson GSON = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create(); + DateTimeFormatter TIMESTAMP_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + // 准备请求参数 + String reqBodyJsonStr = GSON.toJson(reqBodyObj); + String reqTimestamp = LocalDateTime.now().format(TIMESTAMP_FORMATTER); + + // 进行签名 + String toSignStr = reqTimestamp + appSecret + reqBodyJsonStr; + MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); + messageDigest.reset(); + messageDigest.update(toSignStr.getBytes()); + // 注意:进行base64编码的值是字节数组 + byte[] signByte = messageDigest.digest(); + return new String(Base64.getEncoder().encode(signByte), StandardCharsets.UTF_8); + } +} diff --git a/applet/src/main/resources/application-dev.yml b/applet/src/main/resources/application-dev.yml new file mode 100644 index 0000000..e07f460 --- /dev/null +++ b/applet/src/main/resources/application-dev.yml @@ -0,0 +1,120 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + druid: + url: jdbc:mysql://139.9.2.195:3306/uni_ai_doctor?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true + username: unizk + password: Unizk@2025 + + redis: + port: 6379 + host: 139.9.2.195 + username: + password: Unizk@2025.Jkzy + database: 0 + lettuce: + pool: + max-active: 8 + max-idle: 6 + min-idle: 2 + max-wait: -1ms + shutdown-timeout: 360 + timeout: 5000 + +# redis: # TODO +# host: 127.0.0.1 +# port: 6379 # TODO 本地 + +xf: + appid: 3fa7b7a0 + long-sound: + keySecret: b44d730380dcfae02313dcea7101efc8 + instant: + host: https://iat-api.xfyun.cn/v2/iat + APISecret: N2Q5Y2NiOTZmNThhODZjYTgxMjg1NjA4 + apiKey: da390c58ef0f2ad8424c3dccc6d458c7 + +wx: + appid: wx71e559ade446f09a + secret: 00b7f3cff0f4bde07daacd0dea7548c9 + placeOrder: + placeOrderUrl: https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi + notifyUrl: https://peaktcm.com/applet/wxPay/paySuccessCallBack + expireTime: 5 + pay: + domain: https://api.mch.weixin.qq.com + mchid: 1726009475 + serial_no: 58B7B59E32F73D69E461045455BF0EE0D6E5E4E8 + closeOrderApi: /v3/pay/transactions/out-trade-no/{out_trade_no}/close + platformCertSerial: 5ECF2D8FD7E28EC9DD53F49BCA70F7DB6C67E729 + apiV3Key: unLbhsImaYP6ZFiYaIpXjPwOhPBfi0iI + orderSearchUri: /v3/pay/transactions/out-trade-no/{out_trade_no} + + +xunfu: + appid: AP2235166393055350784 + appSecret: eQCoN5MByJnD08Ud7dRYOuqCGPkwnlKz + baseApi: https://openapi.imipay.com/api + bindWxAppidApi: /hzg/v2/wechat/add_sub_config + uploadFileTokenApi: /auth/v1/get_file_token + uploadFileApi: /file/v2/upload_file + paySuccessCallback: https://peaktcm.com/applet/xunfuPay/callback + placeOrderApi: /hzg/v2/unitedtrade/wechat_js_pay + bigBusiness: + mchtNo: 1776645 + storeNo: 21947434 + account: 066440308757055 + fenzhang: + openFzApi: /v3/hzg/part/mcht/reg + addFzAccountApi: /v3/hzg/part/acct/register + qianyueApi: /v3/hzg/part/acct/bind_mcht + tradeApi: /v3/hzg/part/trade/clear/get + applyFzApi: /v3/hzg/part/order/apply + + + +huifu: + huifuId: 6666000179463008 + payApi: https://api.huifu.com/v3/trade/payment/jspay + refundApi: https://api.huifu.com/v3/trade/payment/scanpay/refund + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3IcOEDMBOiHaa5dLsPWVVx+9yE/VEGjRSVZFUAospbCEhGDimE7UEL8ecXwbG9AN5k8yX+Ltj6zaeLIt3KgxbX5/4pnrOoPqFhtaoNuQrwl8/9/rkgGkoksH9e//mRan2+TjbHLKXWZKUduksaoWw4VehOx0nxE+wx7Bk7/VQAegnrDz4z/8zEd2Mcm51THceHJ5wVoMoXvo5e8nhUUAFJeHtlI5jxC85lK6kz2UNhGQ7Kutc7sBzK1U/mi29j/iStN3Z0fzND7+nRfgWPu4b0cKNnNwlIaGiabFTbpVZyV8LTg1BandmHJLNUUJyrc/s3W72VFUdp+BwgoERDcEwwIDAQAB + privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDchw4QMwE6Idprl0uw9ZVXH73IT9UQaNFJVkVQCiylsISEYOKYTtQQvx5xfBsb0A3mTzJf4u2PrNp4si3cqDFtfn/imes6g+oWG1qg25CvCXz/3+uSAaSiSwf17/+ZFqfb5ONscspdZkpR26SxqhbDhV6E7HSfET7DHsGTv9VAB6CesPPjP/zMR3YxybnVMdx4cnnBWgyhe+jl7yeFRQAUl4e2UjmPELzmUrqTPZQ2EZDsq61zuwHMrVT+aLb2P+JK03dnR/M0Pv6dF+BY+7hvRwo2c3CUhoaJpsVNulVnJXwtODUFqd2Ycks1RQnKtz+zdbvZUVR2n4HCCgRENwTDAgMBAAECggEAbFWAaB7WVHt69G3fxi/uzF0Qe04UijojzhYueLJ22nKLtwhtaIsZDJ0G1JM2MgSUP3badVZig7lTngVSGFsb5QFGy8f3Ucip/3AypmEWg5ZyrLSQ4ioieYPIhl3/P3Jsxc58lrMRjK6KhgoTrx+yjRyAoWYTqGztWydJy05q8UekdbIn9K2Dq0294hHbarCjB3C/3SXX4xniEbDtVBTdjP81731gxnM2HJ98GDrvUf5MDrX4SdExvCYV0P0mU8uaRPK8ylWCmtsEuMxKupFUFePJNZdyG+P/RZs6CbgUgJyYUzKlOyeWH8KwQF1FLntipkIPlJ+uVkdwK2eDD6bzWQKBgQDylFiSnlFy0fwXSpWHDnDgukaLYxm2GNWaPyg0f2IqK/368o/Xu4TWOPuknR6ngeiJZz3SVA/kFeCz3+UxtDlbUheoSkkbo0cZg8PaKx875gE97oCHgRkaPS4l44kmu1ZwOMgfZDQPrLZMEbAfjqvMEa7ci5kXk1quOGeSJRIg3QKBgQDoumM2dZ+RxYxtxB2k1kJJIndZX3hhVyMfDIh5TwHHKNml1poa/s+aoT27BZgiM8snLR55xk4cQ59kr9Yic9Oa4seECsrAgP8mbB6eC/y7lRDZDFjJvHXl6a1ePo+hBlYarL83AUMIE1/SfZrdyM5yRmp3+cwHkKVpAQuiEXOSHwKBgEDkpn0ylR9eRU4FydKDbnbv3gdTz4EDS8EjvCGvIheeBSeo1AomQ/b673auAZFWE1sOn18w1b9yitYTw0B0shNX9rQyizQ1jcOpmC848fYYJaTntMKLKqf2Te4c3Ifb/devmPms2LCIx4u5/5+xjwvcfybIwX+pD80jkbFq8VqRAoGBAKulTKdN+XK6EOikTHjWzezCzuPL1i105yJvS/isnNMW/e+iZ+ahKN0TL0RQy/Pt31f1nxSRfeq6tUS9q2Gdq+QAfsaUbxWsDoN4GtzWWoC/YL20rYecyBfaUVPBMI3C7p6d6inXdGjwYSwOF7qb8Ce4Z641PpYVyOm5K6tM08BhAoGBALNkfH3ZPImRKN19bGcHAtrzoDMFAAQrhjyMr9aUpMGLoAjxh1U2pYbj1y0e03ArUT/TRzOXNbHuST82tDZEarVSF8RmU8DNUAHSI9dmtXPtgeKpG8TNyP5q3VnJEHdSRZVLb5pGfZuo3tegsHwZF/oCGK+GHD/fhmSFB04GPJon + notifyUrl: https://peaktcm.com/applet/huifuPay/callback + productId: EDUSTD + configureAppletCallbackUrl: https://peaktcm.com/applet/huifuPay/configureAppletCallback + + +huifu-vendor: + sysId: 6666000188069628 + huifuId: 6666000188735389 + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0uJDRMFj1xoQCJbReVaNdiqjL9vdKolMzWKe2vMhZwkBlgQMpaqtHqNKNCn3DPL/7ugPUNzj4PLr3PSR4DK+TBOOa3xRuKLt3s2x6wouVNpiRRglUzh5OgciXXYPPl7QGu2YlJZ9F7ikiaD7KG9PJI7oidbA7lQ4qMcIGlSBUF4l3TeoOpad0zLs41IRJJPIMKPf5Jj9HS/1Tggcn7f36h1l4JWpTRyfB8HyF66IHzA3mQa5yskUHf1LLuO0hxtIfy9Ua+xJYqEWD334xaMzauZQsLM98d1Pj7I1YRvzNohabpCJqO1wF6PDB3rqdLarAZagN/JhYIHHGXMBGfQZxwIDAQAB + privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDS4kNEwWPXGhAIltF5Vo12KqMv290qiUzNYp7a8yFnCQGWBAylqq0eo0o0KfcM8v/u6A9Q3OPg8uvc9JHgMr5ME45rfFG4ou3ezbHrCi5U2mJFGCVTOHk6ByJddg8+XtAa7ZiUln0XuKSJoPsob08kjuiJ1sDuVDioxwgaVIFQXiXdN6g6lp3TMuzjUhEkk8gwo9/kmP0dL/VOCByft/fqHWXglalNHJ8HwfIXrogfMDeZBrnKyRQd/Usu47SHG0h/L1Rr7ElioRYPffjFozNq5lCwsz3x3U+PsjVhG/M2iFpukImo7XAXo8MHeup0tqsBlqA38mFggccZcwEZ9BnHAgMBAAECggEABRZaQxVbQDwruNlSklfJL9mVeDkYm8cWKDpB1MxauO6ZsDHG0FROutd7mciNYi2WiP/mJrA9exbBI+JuhncS6ijqnaMxIYAktuRFb4MeXQOrrTkI5XoOSp0Tcie/9GQ7JvsmXCdJO0JEDeHpTS9qPFqKN5ELtHQprcCnbGMvf23KyqOFx71Sbe4JxDqV4j0MeJJ/ZEOnLHJAhJ/o/0Gw+2cAVBxOq/xDTiSzKQaR4Cy7h3HMlDXnBXlAwKLb7x/F6efFyBv3RGZjtTgt8G7319icRJUHyXa3JPk/UbKTHrZ3saCj0ByAPpCwSVx6uNxhVeEOFqi3VwtV8s4ClAJtUQKBgQDwEGA1Shr2klTnM1VN+R3YkgaG8QtkZQQG77vCR1q3uMPKpWUQOi/2wQs3SbTAr7ZX+8CHNb8M3KGVAEFR2PDEFok/LA0snFTwdL6dLkXkmOxmNyR2wmXIUimMBogQIc4bI11EpPoocbrzuJ3q48fDIAr7Hc4d/0HasEAQHvAdfwKBgQDg4gCr5M7atD4XdKqmNs5kltjw36EeSig2cajfQb7aARmHS+1F9cn1cpgTvqMBHxBZBx5cW1ETLTxDEq8/ONHHAtmgCVgrc0lgch+Dph1Nt4Jl/aNxxaZjLpLQtcHnFR4/7RGuJMUTAzAUcOer9XiCJskE2EVLrT53pE665Se3uQKBgFcXmc+7cszBicvW87u2BP3s/DE4gcmKXEun7ZYuDNtaTK3YEzIv6fa7UjZcpxbAqIaC7vYeqZEg+f30eb4X1kFNa71fXegxTx9tOzoK75BfamQq3S+4lvR12lzSgcpYeU2fJtcggyDpIcoJ0EDHIlHH7jPsPDrlwB52ksdGchZBAoGBAM49dvAuf6cD9o38aSTWzqJh1cPS1Ci7SfXkd0OJQEcfCxKSB6FJsVZxKhexljzJCG0dojKBbPFxYvsAf8gzi/BAJOYoq7vtlzXkdBKAng9QZT60Rtlosxfy9qKCjronG/70pGpZPoQZQFb+1PlXvpVejKzsy2CEGe4PukSdNLfBAoGATUJ7FGVmG2Ym8UHcP0bMeWwS7XROuiquliLtamWwpZTByZaLO1nK2FtC1oVj3il4Wox6/In1bBbdtqxmRmKcD9q1JExr1PHxXQTUbIoWb4GXNHq7h5kOhpra1uVRmNIewfJUYTCEzzHTrJe8dADBc7lGpsibwk174YD2343Aupw= + productId: PAYUN + notifyUrl: https://peaktcm.com:8089/hf/webhook/vendorPaySuccess + + + +aliyun: + accessKeyId: LTAI5tBQGeqmhe6yhfqupaZD + accessKeySecret: YM2lsEtpjCLOF2kJGdsCBcwRHLX8aa + +jk: + secretKey: Unizk.jkzy@2025 + tokenExpireTime: 90 + + +minio: + endpoint: http://139.9.2.195:8002 + accessKey: YIh5PhIEHXEiJgPTlCSc + secretKey: 07becv7RNMI1wHyPPFtq3rlCPC6cyF0WrV5LNHYN + username: jkzy + password: jkzy@2025 + nginxHost: + +huaweiyun: + accessKey: HPUACMRQ2NKQNOXNCFNO + secretKey: KC3yEw7ARoL0oxcmXy7vE3hyMBPKjLsG1LCSQdYh + + +payIp: http://192.168.0.6:8083 diff --git a/applet/src/main/resources/application-prod.yml b/applet/src/main/resources/application-prod.yml new file mode 100644 index 0000000..e8cf805 --- /dev/null +++ b/applet/src/main/resources/application-prod.yml @@ -0,0 +1,115 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + druid: + url: jdbc:mysql://139.9.2.195:3306/uni_ai_doctor?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true + username: unizk + password: Unizk@2025 + + redis: + port: 6379 + host: localhost + username: + password: Unizk@2025.Jkzy + database: 0 + lettuce: + pool: + max-active: 8 + max-idle: 6 + min-idle: 2 + max-wait: -1ms + shutdown-timeout: 360 + timeout: 5000 + + +xf: + appid: 3fa7b7a0 + long-sound: + keySecret: b44d730380dcfae02313dcea7101efc8 + instant: + host: https://iat-api.xfyun.cn/v2/iat + APISecret: N2Q5Y2NiOTZmNThhODZjYTgxMjg1NjA4 + apiKey: da390c58ef0f2ad8424c3dccc6d458c7 + +wx: + appid: wx71e559ade446f09a + secret: 00b7f3cff0f4bde07daacd0dea7548c9 + placeOrder: + placeOrderUrl: https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi + notifyUrl: https://peaktcm.com/applet/wxPay/paySuccessCallBack + expireTime: 5 + pay: + domain: https://api.mch.weixin.qq.com + mchid: 1726009475 + serial_no: 58B7B59E32F73D69E461045455BF0EE0D6E5E4E8 + closeOrderApi: /v3/pay/transactions/out-trade-no/{out_trade_no}/close + platformCertSerial: 5ECF2D8FD7E28EC9DD53F49BCA70F7DB6C67E729 + apiV3Key: unLbhsImaYP6ZFiYaIpXjPwOhPBfi0iI + orderSearchUri: /v3/pay/transactions/out-trade-no/{out_trade_no} + + +xunfu: + appid: AP2235166393055350784 + appSecret: eQCoN5MByJnD08Ud7dRYOuqCGPkwnlKz + baseApi: https://openapi.imipay.com/api + bindWxAppidApi: /hzg/v2/wechat/add_sub_config + uploadFileTokenApi: /auth/v1/get_file_token + uploadFileApi: /file/v2/upload_file + paySuccessCallback: https://peaktcm.com/applet/xunfuPay/callback + placeOrderApi: /hzg/v2/unitedtrade/wechat_js_pay + bigBusiness: + mchtNo: 1776645 + storeNo: 21947434 + account: 066440308757055 + fenzhang: + openFzApi: /v3/hzg/part/mcht/reg + addFzAccountApi: /v3/hzg/part/acct/register + qianyueApi: /v3/hzg/part/acct/bind_mcht + tradeApi: /v3/hzg/part/trade/clear/get + applyFzApi: /v3/hzg/part/order/apply + + +huifu: + huifuId: 6666000179463008 + payApi: https://api.huifu.com/v3/trade/payment/jspay + refundApi: https://api.huifu.com/v3/trade/payment/scanpay/refund + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3IcOEDMBOiHaa5dLsPWVVx+9yE/VEGjRSVZFUAospbCEhGDimE7UEL8ecXwbG9AN5k8yX+Ltj6zaeLIt3KgxbX5/4pnrOoPqFhtaoNuQrwl8/9/rkgGkoksH9e//mRan2+TjbHLKXWZKUduksaoWw4VehOx0nxE+wx7Bk7/VQAegnrDz4z/8zEd2Mcm51THceHJ5wVoMoXvo5e8nhUUAFJeHtlI5jxC85lK6kz2UNhGQ7Kutc7sBzK1U/mi29j/iStN3Z0fzND7+nRfgWPu4b0cKNnNwlIaGiabFTbpVZyV8LTg1BandmHJLNUUJyrc/s3W72VFUdp+BwgoERDcEwwIDAQAB + privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDchw4QMwE6Idprl0uw9ZVXH73IT9UQaNFJVkVQCiylsISEYOKYTtQQvx5xfBsb0A3mTzJf4u2PrNp4si3cqDFtfn/imes6g+oWG1qg25CvCXz/3+uSAaSiSwf17/+ZFqfb5ONscspdZkpR26SxqhbDhV6E7HSfET7DHsGTv9VAB6CesPPjP/zMR3YxybnVMdx4cnnBWgyhe+jl7yeFRQAUl4e2UjmPELzmUrqTPZQ2EZDsq61zuwHMrVT+aLb2P+JK03dnR/M0Pv6dF+BY+7hvRwo2c3CUhoaJpsVNulVnJXwtODUFqd2Ycks1RQnKtz+zdbvZUVR2n4HCCgRENwTDAgMBAAECggEAbFWAaB7WVHt69G3fxi/uzF0Qe04UijojzhYueLJ22nKLtwhtaIsZDJ0G1JM2MgSUP3badVZig7lTngVSGFsb5QFGy8f3Ucip/3AypmEWg5ZyrLSQ4ioieYPIhl3/P3Jsxc58lrMRjK6KhgoTrx+yjRyAoWYTqGztWydJy05q8UekdbIn9K2Dq0294hHbarCjB3C/3SXX4xniEbDtVBTdjP81731gxnM2HJ98GDrvUf5MDrX4SdExvCYV0P0mU8uaRPK8ylWCmtsEuMxKupFUFePJNZdyG+P/RZs6CbgUgJyYUzKlOyeWH8KwQF1FLntipkIPlJ+uVkdwK2eDD6bzWQKBgQDylFiSnlFy0fwXSpWHDnDgukaLYxm2GNWaPyg0f2IqK/368o/Xu4TWOPuknR6ngeiJZz3SVA/kFeCz3+UxtDlbUheoSkkbo0cZg8PaKx875gE97oCHgRkaPS4l44kmu1ZwOMgfZDQPrLZMEbAfjqvMEa7ci5kXk1quOGeSJRIg3QKBgQDoumM2dZ+RxYxtxB2k1kJJIndZX3hhVyMfDIh5TwHHKNml1poa/s+aoT27BZgiM8snLR55xk4cQ59kr9Yic9Oa4seECsrAgP8mbB6eC/y7lRDZDFjJvHXl6a1ePo+hBlYarL83AUMIE1/SfZrdyM5yRmp3+cwHkKVpAQuiEXOSHwKBgEDkpn0ylR9eRU4FydKDbnbv3gdTz4EDS8EjvCGvIheeBSeo1AomQ/b673auAZFWE1sOn18w1b9yitYTw0B0shNX9rQyizQ1jcOpmC848fYYJaTntMKLKqf2Te4c3Ifb/devmPms2LCIx4u5/5+xjwvcfybIwX+pD80jkbFq8VqRAoGBAKulTKdN+XK6EOikTHjWzezCzuPL1i105yJvS/isnNMW/e+iZ+ahKN0TL0RQy/Pt31f1nxSRfeq6tUS9q2Gdq+QAfsaUbxWsDoN4GtzWWoC/YL20rYecyBfaUVPBMI3C7p6d6inXdGjwYSwOF7qb8Ce4Z641PpYVyOm5K6tM08BhAoGBALNkfH3ZPImRKN19bGcHAtrzoDMFAAQrhjyMr9aUpMGLoAjxh1U2pYbj1y0e03ArUT/TRzOXNbHuST82tDZEarVSF8RmU8DNUAHSI9dmtXPtgeKpG8TNyP5q3VnJEHdSRZVLb5pGfZuo3tegsHwZF/oCGK+GHD/fhmSFB04GPJon + notifyUrl: https://peaktcm.com/applet/huifuPay/callback + productId: EDUSTD + configureAppletCallbackUrl: https://peaktcm.com/applet/huifuPay/configureAppletCallback + + +huifu-vendor: + sysId: 6666000188069628 + huifuId: 6666000188735389 + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0uJDRMFj1xoQCJbReVaNdiqjL9vdKolMzWKe2vMhZwkBlgQMpaqtHqNKNCn3DPL/7ugPUNzj4PLr3PSR4DK+TBOOa3xRuKLt3s2x6wouVNpiRRglUzh5OgciXXYPPl7QGu2YlJZ9F7ikiaD7KG9PJI7oidbA7lQ4qMcIGlSBUF4l3TeoOpad0zLs41IRJJPIMKPf5Jj9HS/1Tggcn7f36h1l4JWpTRyfB8HyF66IHzA3mQa5yskUHf1LLuO0hxtIfy9Ua+xJYqEWD334xaMzauZQsLM98d1Pj7I1YRvzNohabpCJqO1wF6PDB3rqdLarAZagN/JhYIHHGXMBGfQZxwIDAQAB + privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDS4kNEwWPXGhAIltF5Vo12KqMv290qiUzNYp7a8yFnCQGWBAylqq0eo0o0KfcM8v/u6A9Q3OPg8uvc9JHgMr5ME45rfFG4ou3ezbHrCi5U2mJFGCVTOHk6ByJddg8+XtAa7ZiUln0XuKSJoPsob08kjuiJ1sDuVDioxwgaVIFQXiXdN6g6lp3TMuzjUhEkk8gwo9/kmP0dL/VOCByft/fqHWXglalNHJ8HwfIXrogfMDeZBrnKyRQd/Usu47SHG0h/L1Rr7ElioRYPffjFozNq5lCwsz3x3U+PsjVhG/M2iFpukImo7XAXo8MHeup0tqsBlqA38mFggccZcwEZ9BnHAgMBAAECggEABRZaQxVbQDwruNlSklfJL9mVeDkYm8cWKDpB1MxauO6ZsDHG0FROutd7mciNYi2WiP/mJrA9exbBI+JuhncS6ijqnaMxIYAktuRFb4MeXQOrrTkI5XoOSp0Tcie/9GQ7JvsmXCdJO0JEDeHpTS9qPFqKN5ELtHQprcCnbGMvf23KyqOFx71Sbe4JxDqV4j0MeJJ/ZEOnLHJAhJ/o/0Gw+2cAVBxOq/xDTiSzKQaR4Cy7h3HMlDXnBXlAwKLb7x/F6efFyBv3RGZjtTgt8G7319icRJUHyXa3JPk/UbKTHrZ3saCj0ByAPpCwSVx6uNxhVeEOFqi3VwtV8s4ClAJtUQKBgQDwEGA1Shr2klTnM1VN+R3YkgaG8QtkZQQG77vCR1q3uMPKpWUQOi/2wQs3SbTAr7ZX+8CHNb8M3KGVAEFR2PDEFok/LA0snFTwdL6dLkXkmOxmNyR2wmXIUimMBogQIc4bI11EpPoocbrzuJ3q48fDIAr7Hc4d/0HasEAQHvAdfwKBgQDg4gCr5M7atD4XdKqmNs5kltjw36EeSig2cajfQb7aARmHS+1F9cn1cpgTvqMBHxBZBx5cW1ETLTxDEq8/ONHHAtmgCVgrc0lgch+Dph1Nt4Jl/aNxxaZjLpLQtcHnFR4/7RGuJMUTAzAUcOer9XiCJskE2EVLrT53pE665Se3uQKBgFcXmc+7cszBicvW87u2BP3s/DE4gcmKXEun7ZYuDNtaTK3YEzIv6fa7UjZcpxbAqIaC7vYeqZEg+f30eb4X1kFNa71fXegxTx9tOzoK75BfamQq3S+4lvR12lzSgcpYeU2fJtcggyDpIcoJ0EDHIlHH7jPsPDrlwB52ksdGchZBAoGBAM49dvAuf6cD9o38aSTWzqJh1cPS1Ci7SfXkd0OJQEcfCxKSB6FJsVZxKhexljzJCG0dojKBbPFxYvsAf8gzi/BAJOYoq7vtlzXkdBKAng9QZT60Rtlosxfy9qKCjronG/70pGpZPoQZQFb+1PlXvpVejKzsy2CEGe4PukSdNLfBAoGATUJ7FGVmG2Ym8UHcP0bMeWwS7XROuiquliLtamWwpZTByZaLO1nK2FtC1oVj3il4Wox6/In1bBbdtqxmRmKcD9q1JExr1PHxXQTUbIoWb4GXNHq7h5kOhpra1uVRmNIewfJUYTCEzzHTrJe8dADBc7lGpsibwk174YD2343Aupw= + productId: PAYUN + notifyUrl: https://peaktcm.com:8089/hf/webhook/vendorPaySuccess + + +aliyun: + accessKeyId: LTAI5tBQGeqmhe6yhfqupaZD + accessKeySecret: YM2lsEtpjCLOF2kJGdsCBcwRHLX8aa + +jk: + secretKey: Unizk.jkzy@2025 + tokenExpireTime: 90 + + +minio: + endpoint: http://139.9.2.195:8002 + accessKey: YIh5PhIEHXEiJgPTlCSc + secretKey: 07becv7RNMI1wHyPPFtq3rlCPC6cyF0WrV5LNHYN + username: jkzy + password: jkzy@2025 + nginxHost: + +huaweiyun: + accessKey: HPUACMRQ2NKQNOXNCFNO + secretKey: KC3yEw7ARoL0oxcmXy7vE3hyMBPKjLsG1LCSQdYh + + +payIp: http://127.0.0.1:8083 diff --git a/applet/src/main/resources/application.yml b/applet/src/main/resources/application.yml new file mode 100644 index 0000000..c09ea93 --- /dev/null +++ b/applet/src/main/resources/application.yml @@ -0,0 +1,21 @@ +spring: + application: + name: AI_Questioning + profiles: + active: dev + +server: + port: 8081 + #address: 127.0.0.1 + + + +logging: + level: + cn.unizk.dao: debug + org.springframework: warn + org.apache.ibatis.logging: debug + # org.springframework.web.servlet.DispatcherServlet: DEBUG +mybatis-plus: + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl diff --git a/applet/src/main/resources/mapper/Conversation.xml b/applet/src/main/resources/mapper/Conversation.xml new file mode 100644 index 0000000..cda8c8d --- /dev/null +++ b/applet/src/main/resources/mapper/Conversation.xml @@ -0,0 +1,42 @@ + + + + + + + + insert into conversation + + session_id, user_id,qa_json,symptom_summary + + + #{sessionId}, #{userId},#{qaJson},#{symptomSummary} + + + + + update conversation + + + status = #{status}, + + + ai_diagnosis = #{aiDiagnosis}, + + + ai_treatment = #{aiTreatment}, + + + where session_id = #{sessionId} + + + + + + + diff --git a/applet/src/main/resources/mapper/HuifuDataMapper.xml b/applet/src/main/resources/mapper/HuifuDataMapper.xml new file mode 100644 index 0000000..a5c8a15 --- /dev/null +++ b/applet/src/main/resources/mapper/HuifuDataMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/applet/src/main/resources/mapper/JkPhysioMapper.xml b/applet/src/main/resources/mapper/JkPhysioMapper.xml new file mode 100644 index 0000000..44df5a5 --- /dev/null +++ b/applet/src/main/resources/mapper/JkPhysioMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/applet/src/main/resources/mapper/JkProductMapper.xml b/applet/src/main/resources/mapper/JkProductMapper.xml new file mode 100644 index 0000000..3518745 --- /dev/null +++ b/applet/src/main/resources/mapper/JkProductMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/applet/src/main/resources/mapper/Message.xml b/applet/src/main/resources/mapper/Message.xml new file mode 100644 index 0000000..70022a8 --- /dev/null +++ b/applet/src/main/resources/mapper/Message.xml @@ -0,0 +1,37 @@ + + + + + + + + insert into message + + session_id, sort1, ai_message, user_message, + + + #{sessionId}, #{sort}, #{aiMessage}, #{userMessage} + + + + + + + update message + + + status = #{status}, + + + where id = #{id} + + + + + + + diff --git a/applet/src/main/resources/mapper/SubHealthDietaryRegulationMapper.xml b/applet/src/main/resources/mapper/SubHealthDietaryRegulationMapper.xml new file mode 100644 index 0000000..543b1fd --- /dev/null +++ b/applet/src/main/resources/mapper/SubHealthDietaryRegulationMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/applet/src/main/resources/mapper/SysDictMapper.xml b/applet/src/main/resources/mapper/SysDictMapper.xml new file mode 100644 index 0000000..9c902a8 --- /dev/null +++ b/applet/src/main/resources/mapper/SysDictMapper.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + dict_code, dict_value, dict_type, create_time + + + + delete from sys_dict + where dict_code = #{dictCode,jdbcType=INTEGER} + + + + insert into sys_dict + + + dict_value, + + + dict_type, + + + create_time, + + + + + #{dictValue,jdbcType=VARCHAR}, + + + #{dictType,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + + + update sys_dict + + + dict_value = #{dictValue,jdbcType=VARCHAR}, + + + dict_type = #{dictType,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + where dict_code = #{dictCode,jdbcType=INTEGER} + + + update sys_dict + set dict_value = #{dictValue,jdbcType=VARCHAR}, + dict_type = #{dictType,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=TIMESTAMP} + where dict_code = #{dictCode,jdbcType=INTEGER} + + diff --git a/applet/src/main/resources/mapper/WxOrderItemMapper.xml b/applet/src/main/resources/mapper/WxOrderItemMapper.xml new file mode 100644 index 0000000..d55c352 --- /dev/null +++ b/applet/src/main/resources/mapper/WxOrderItemMapper.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/applet/src/main/resources/mapper/WxOrderMapper.xml b/applet/src/main/resources/mapper/WxOrderMapper.xml new file mode 100644 index 0000000..07616e4 --- /dev/null +++ b/applet/src/main/resources/mapper/WxOrderMapper.xml @@ -0,0 +1,81 @@ + + + + + + + diff --git a/applet/src/main/resources/mapper/WxUserMapper.xml b/applet/src/main/resources/mapper/WxUserMapper.xml new file mode 100644 index 0000000..6d61e52 --- /dev/null +++ b/applet/src/main/resources/mapper/WxUserMapper.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/applet/src/main/resources/mapper/WxUserSessionMapper.xml b/applet/src/main/resources/mapper/WxUserSessionMapper.xml new file mode 100644 index 0000000..27446d8 --- /dev/null +++ b/applet/src/main/resources/mapper/WxUserSessionMapper.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/applet/src/main/resources/static/h5/combo.html b/applet/src/main/resources/static/h5/combo.html new file mode 100644 index 0000000..6d5c4cf --- /dev/null +++ b/applet/src/main/resources/static/h5/combo.html @@ -0,0 +1,31 @@ + + + + + + 吉客中医 + + + + +
+
+ +
+ +

请选择服务套餐:

+ +
+
    +
    + +
    + 去使用 +
    +
    + + + + + \ No newline at end of file diff --git a/applet/src/main/resources/static/h5/css/combo.css b/applet/src/main/resources/static/h5/css/combo.css new file mode 100644 index 0000000..23010fd --- /dev/null +++ b/applet/src/main/resources/static/h5/css/combo.css @@ -0,0 +1,102 @@ +* { + padding: 0; + margin: 0; +} + +li { + list-style: none; +} + +.flex-column { + flex-direction: column; +} + +.container { + height: 100dvh; +} + +.header { + text-align: center; + position: sticky; + top: 0; + left: 0; + right: 0; + background-color: #ffffff; + box-shadow: 0px 0px 3px rgba(0, 0, 0, .12); + height: 70px; +} + +.header img { + height: 100%; +} + +.page-title { + padding-top: 20px; + padding-left: 10px; + padding-bottom: 10px; + background-color: #ffffff; +} + +.main { + flex: 1; + overflow: auto; +} + +.flex { + display: flex; +} + +.combo-list-item { + box-shadow: 0px 0px 5px rgba(0, 0, 0, .12); + margin: 15px 10px 0; + padding: 15px; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + line-height: 2; + transition: all .5; +} + +.combo-list-item.active { + box-shadow: 0px 0px 5px #3d1b49; +} + +.combo-list-item:first-child { + margin-top: 10px; +} + +.combo-item-label { + flex: 1; +} + +.combo-item-content { + flex: 1; + text-align: right; +} + +.footer { + width: 100%; + height: 80px; + background-color: #ffffff; + box-shadow: 0px 0px 3px rgba(0, 0, 0, .12); +} + +.go-use-btn { + all: unset; + display: flex; + align-items: center; + justify-content: center; + width: 80%; + height: 80%; + margin: auto; + background-color: #3d1b49; + color: #ffffff; + text-align: center; + border-radius: 5px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; +} \ No newline at end of file diff --git a/applet/src/main/resources/static/h5/css/index.css b/applet/src/main/resources/static/h5/css/index.css new file mode 100644 index 0000000..286a9b9 --- /dev/null +++ b/applet/src/main/resources/static/h5/css/index.css @@ -0,0 +1,90 @@ +* { + padding: 0; + margin: 0; +} + +.flex { + display: flex; +} + +.flex-column { + flex-direction: column; +} + +.container { + height: 100dvh; +} + +.header { + text-align: center; + margin-top: 10vh; + background-color: #ffffff; + height: 20vw; +} + +.header img { + height: 100%; +} + +.main { + padding-top: 10vh; + flex-wrap: wrap; +} + +input { + all: unset; +} + +.valid-container, +.phone-input { + margin: 0 auto 5vw; + width: 70vw; + height: 10vw; + border: 1px solid #dcdfe6; + border-radius: 20px; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + -ms-border-radius: 20px; + -o-border-radius: 20px; +} + +.valid-container { + overflow: hidden; +} + +.valid-input, +.phone-input { + padding-left: 15px; + box-sizing: border-box; +} + +.valid-input { + width: 60%; +} + +.valid-btn { + background-color: #3d1b49; + color:#ffffff; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + width: 40%; + box-sizing: border-box; +} + +.login-btn { + margin: 0 auto 5vw; + width: 70vw; + height: 10vw; + background-color: #3d1b49; + display: flex; + align-items: center; + justify-content: center; + color:#ffffff; + border-radius: 20px; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + -ms-border-radius: 20px; + -o-border-radius: 20px; +} diff --git a/applet/src/main/resources/static/h5/css/toast.css b/applet/src/main/resources/static/h5/css/toast.css new file mode 100644 index 0000000..30b3293 --- /dev/null +++ b/applet/src/main/resources/static/h5/css/toast.css @@ -0,0 +1,31 @@ +.my-toast { + opacity: 0; + transition: opacity .8s; + position: fixed; + top: 40%; + left: 50%; + color: #ffffff; + text-align: center; + padding: 5vw; + border-radius: 5px; + max-width: 60vw; + box-sizing: border-box; + background-color: #000000cc; + transform: translate(-50%); + -webkit-transform: translate(-50%); + -moz-transform: translate(-50%); + -ms-transform: translate(-50%); + -o-transform: translate(-50%); + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + -webkit-transition: opacity .8s; + -moz-transition: opacity .8s; + -ms-transition: opacity .8s; + -o-transition: opacity .8s; +} + +.my-toast.active { + opacity: 1; +} \ No newline at end of file diff --git a/applet/src/main/resources/static/h5/index.html b/applet/src/main/resources/static/h5/index.html new file mode 100644 index 0000000..e514e52 --- /dev/null +++ b/applet/src/main/resources/static/h5/index.html @@ -0,0 +1,33 @@ + + + + + + 登录 + + + + +
    +
    + +
    + +
    + +
    + +
    发送验证码
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/applet/src/main/resources/static/h5/js/combo.js b/applet/src/main/resources/static/h5/js/combo.js new file mode 100644 index 0000000..4aba494 --- /dev/null +++ b/applet/src/main/resources/static/h5/js/combo.js @@ -0,0 +1,74 @@ +import { showToast } from './toast.js' + +// 接口api域名 +import { host } from './url.js' + +// 获取列表元素 +const elementUl = document.querySelector('.combo-list') + +const setLiElement = item => { + const {comboDuration, comboPrice, comboName} = item + const li = document.createElement('li') + li.setAttribute('class', `combo-list-item combo-${item.orderId}`) + li.innerHTML = ` +

    + 名称: + ${comboName} +

    +

    + 时长: + ${comboDuration} 分钟 +

    +

    + 价格: + ${comboPrice} 元 +

    + ` + elementUl.appendChild(li) +} + +let activeCombo = '' +// 添加列表点击事件 +elementUl.addEventListener('click', event => { + const id = event.target.dataset.id + if (!id) { + return; + } + activeCombo = id + updateCurrentCombo(id) +}) + +// 更新样式 +const updateCurrentCombo = (id) => { + document.querySelector('.combo-list-item.active')?.classList.remove('active') + document.querySelector(`.combo-${id}`).classList.add('active') +} + +// 点击去使用 +document.querySelector('.go-use-btn').addEventListener('click', async () => { + if (!activeCombo) { + return window.$toast('请选择套餐') + } + if (window.confirm('使用后该套餐将失效,请您确认')) { + try { + const res = await (await fetch(`../h5/writeOff?orderId=${activeCombo}`, { + headers: { + token: sessionStorage.getItem('token') + } + })).json() + const { code, message } = res + if (code !== 200) { + return showToast(message) + } + window.location.href = 'https://www.peaktcm.com/open-miniprogram.html' + } catch (error) { + console.log(error) + } + } +}) + +// 获取页面数据 +const getCombosData = async () => { + JSON.parse(sessionStorage.getItem('combo-list')).forEach((item, index) => setLiElement(item, index)) +} +getCombosData() diff --git a/applet/src/main/resources/static/h5/js/index.js b/applet/src/main/resources/static/h5/js/index.js new file mode 100644 index 0000000..a69f689 --- /dev/null +++ b/applet/src/main/resources/static/h5/js/index.js @@ -0,0 +1,72 @@ +import {showToast} from './toast.js' + +// 接口api域名 +import { host } from './url.js' + +// 请求状态 +let loading = false + +// 解析url参数 +const urlParams = new URLSearchParams(window.location.search) +const params = { + deviceId: '' +} +for (let [key, value] of urlParams) { + params[key] = value +} +const { deviceId } = params + +console.log('urlParams=',window.location.search) +console.log('deviceId=',deviceId) + +// 发送验证码 +document.querySelector('.valid-btn').addEventListener('click', async () => { + const { value } = document.querySelector('.phone-input') + if (!value || !validPhone(value)) { + return showToast('请输入正确的手机号') + } + if (loading) { + return; + } + loading = true + try { + const res = await (await fetch(`../h5/sendPhoneCode?phoneNumber=${value}`)).json() + const { code, message } = res + if (code !== 200) { + return showToast(message) + } + showToast('验证码已发送') + } catch (error) { + console.log(error) + showToast('网络请求失败') + } finally { + loading = false + } +}) + +// 点击登录 +document.querySelector('.login-btn').addEventListener('click', async () => { + const { value: validCode } = document.querySelector('.valid-input') + const { value: phoneNumber } = document.querySelector('.phone-input') + try { + const res = await fetch(`../h5/getCombos?deviceId=${deviceId}&phoneNumber=${phoneNumber}&code=${validCode}`).then(response => { + const token = response.headers.get('Authorization') + if (token) { + sessionStorage.setItem('token', token) + } + return response.json() + }) + const {code, message, data} = res + if (code !== 200) { + return showToast(message) + } + sessionStorage.setItem('combo-list', JSON.stringify(data)) + window.location.href = 'combo.html' + } catch (error) { + console.log(error) + } +}) + +const validPhone = (phone) => { + return /^(?:(?:\+|00)86)?1\d{10}$/.test(phone) +} diff --git a/applet/src/main/resources/static/h5/js/toast.js b/applet/src/main/resources/static/h5/js/toast.js new file mode 100644 index 0000000..d341a26 --- /dev/null +++ b/applet/src/main/resources/static/h5/js/toast.js @@ -0,0 +1,28 @@ +let timeout = null +/** + * @param {String} message 提示信息 + */ +const showToast = (message) => { + const curr = document.querySelector('.my-toast') + if (curr) { + document.querySelector('.container').removeChild(curr) + clearTimeout(timeout) + timeout = null + } + requestAnimationFrame(() => { + let toast = document.createElement('div') + toast.classList.add('my-toast') + toast.innerText = message + document.querySelector('.container').appendChild(toast) + requestAnimationFrame(() => { + toast.classList.add('active') + }) + timeout = setTimeout(()=> { + document.querySelector('.container').removeChild(toast) + toast = null + clearTimeout(timeout) + timeout = null + }, 1800) + }) +} +export {showToast} \ No newline at end of file diff --git a/applet/src/main/resources/static/h5/js/url.js b/applet/src/main/resources/static/h5/js/url.js new file mode 100644 index 0000000..742411a --- /dev/null +++ b/applet/src/main/resources/static/h5/js/url.js @@ -0,0 +1,4 @@ +const host = 'http://369.peaktcm.com' +// const host = 'http://192.168.0.6:8080' + +export { host } \ No newline at end of file diff --git a/applet/src/main/resources/static/h5/open-miniprogram.html b/applet/src/main/resources/static/h5/open-miniprogram.html new file mode 100644 index 0000000..907609e --- /dev/null +++ b/applet/src/main/resources/static/h5/open-miniprogram.html @@ -0,0 +1,202 @@ + + + 打开小程序 + + + + + + + + + + + + + + + + +
    + + + +
    + + \ No newline at end of file diff --git a/applet/src/main/resources/static/h5/pay.html b/applet/src/main/resources/static/h5/pay.html new file mode 100644 index 0000000..3070656 --- /dev/null +++ b/applet/src/main/resources/static/h5/pay.html @@ -0,0 +1,12 @@ + + + + + Title + +

    pay hello

    + + + + + diff --git a/applet/src/main/resources/static/h5/static/logo.png b/applet/src/main/resources/static/h5/static/logo.png new file mode 100644 index 0000000..1ae9763 Binary files /dev/null and b/applet/src/main/resources/static/h5/static/logo.png differ diff --git a/applet/target/applet-1.0.0.jar b/applet/target/applet-1.0.0.jar new file mode 100644 index 0000000..058a3c8 Binary files /dev/null and b/applet/target/applet-1.0.0.jar differ diff --git a/applet/target/applet-1.0.0.jar.original b/applet/target/applet-1.0.0.jar.original new file mode 100644 index 0000000..90f8b00 Binary files /dev/null and b/applet/target/applet-1.0.0.jar.original differ diff --git a/applet/target/classes/META-INF/spring-configuration-metadata.json b/applet/target/classes/META-INF/spring-configuration-metadata.json new file mode 100644 index 0000000..3fb6960 --- /dev/null +++ b/applet/target/classes/META-INF/spring-configuration-metadata.json @@ -0,0 +1,272 @@ +{ + "groups": [ + { + "name": "huifu", + "type": "cn.unizk.huifupay.config.properties.HuiFuProperties", + "sourceType": "cn.unizk.huifupay.config.properties.HuiFuProperties" + }, + { + "name": "huifu-vendor", + "type": "cn.unizk.huifupay.config.properties.HuiFuVendorProperties", + "sourceType": "cn.unizk.huifupay.config.properties.HuiFuVendorProperties" + }, + { + "name": "jk", + "type": "cn.unizk.config.JkProperties", + "sourceType": "cn.unizk.config.JkProperties" + }, + { + "name": "wx", + "type": "cn.unizk.config.WxProperties", + "sourceType": "cn.unizk.config.WxProperties" + }, + { + "name": "wx.pay", + "type": "cn.unizk.config.WxProperties$Pay", + "sourceType": "cn.unizk.config.WxProperties" + }, + { + "name": "wx.place-order", + "type": "cn.unizk.config.WxProperties$PlaceOrder", + "sourceType": "cn.unizk.config.WxProperties" + }, + { + "name": "xunfu", + "type": "cn.unizk.xunfupay.properties.XunFuProperties", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties" + }, + { + "name": "xunfu.big-business", + "type": "cn.unizk.xunfupay.properties.XunFuProperties$BigBusiness", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties" + }, + { + "name": "xunfu.fenzhang", + "type": "cn.unizk.xunfupay.properties.XunFuProperties$Fenzhang", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties" + } + ], + "properties": [ + { + "name": "huifu-vendor.huifu-id", + "type": "java.lang.String", + "sourceType": "cn.unizk.huifupay.config.properties.HuiFuVendorProperties" + }, + { + "name": "huifu-vendor.notify-url", + "type": "java.lang.String", + "sourceType": "cn.unizk.huifupay.config.properties.HuiFuVendorProperties" + }, + { + "name": "huifu-vendor.private-key", + "type": "java.lang.String", + "sourceType": "cn.unizk.huifupay.config.properties.HuiFuVendorProperties" + }, + { + "name": "huifu-vendor.product-id", + "type": "java.lang.String", + "sourceType": "cn.unizk.huifupay.config.properties.HuiFuVendorProperties" + }, + { + "name": "huifu-vendor.public-key", + "type": "java.lang.String", + "sourceType": "cn.unizk.huifupay.config.properties.HuiFuVendorProperties" + }, + { + "name": "huifu-vendor.sys-id", + "type": "java.lang.String", + "sourceType": "cn.unizk.huifupay.config.properties.HuiFuVendorProperties" + }, + { + "name": "huifu.configure-applet-callback-url", + "type": "java.lang.String", + "sourceType": "cn.unizk.huifupay.config.properties.HuiFuProperties" + }, + { + "name": "huifu.huifu-id", + "type": "java.lang.String", + "sourceType": "cn.unizk.huifupay.config.properties.HuiFuProperties" + }, + { + "name": "huifu.notify-url", + "type": "java.lang.String", + "sourceType": "cn.unizk.huifupay.config.properties.HuiFuProperties" + }, + { + "name": "huifu.pay-api", + "type": "java.lang.String", + "sourceType": "cn.unizk.huifupay.config.properties.HuiFuProperties" + }, + { + "name": "huifu.private-key", + "type": "java.lang.String", + "sourceType": "cn.unizk.huifupay.config.properties.HuiFuProperties" + }, + { + "name": "huifu.product-id", + "type": "java.lang.String", + "sourceType": "cn.unizk.huifupay.config.properties.HuiFuProperties" + }, + { + "name": "huifu.public-key", + "type": "java.lang.String", + "sourceType": "cn.unizk.huifupay.config.properties.HuiFuProperties" + }, + { + "name": "huifu.refund-api", + "type": "java.lang.String", + "sourceType": "cn.unizk.huifupay.config.properties.HuiFuProperties" + }, + { + "name": "jk.secret-key", + "type": "java.lang.String", + "sourceType": "cn.unizk.config.JkProperties" + }, + { + "name": "jk.token-expire-time", + "type": "java.lang.Integer", + "sourceType": "cn.unizk.config.JkProperties" + }, + { + "name": "wx.appid", + "type": "java.lang.String", + "sourceType": "cn.unizk.config.WxProperties" + }, + { + "name": "wx.pay.api-v3-key", + "type": "java.lang.String", + "sourceType": "cn.unizk.config.WxProperties$Pay" + }, + { + "name": "wx.pay.close-order-api", + "type": "java.lang.String", + "sourceType": "cn.unizk.config.WxProperties$Pay" + }, + { + "name": "wx.pay.domain", + "type": "java.lang.String", + "sourceType": "cn.unizk.config.WxProperties$Pay" + }, + { + "name": "wx.pay.mchid", + "type": "java.lang.String", + "sourceType": "cn.unizk.config.WxProperties$Pay" + }, + { + "name": "wx.pay.order-search-uri", + "type": "java.lang.String", + "sourceType": "cn.unizk.config.WxProperties$Pay" + }, + { + "name": "wx.pay.platform-cert-serial", + "type": "java.lang.String", + "sourceType": "cn.unizk.config.WxProperties$Pay" + }, + { + "name": "wx.pay.serial-no", + "type": "java.lang.String", + "sourceType": "cn.unizk.config.WxProperties$Pay" + }, + { + "name": "wx.place-order.expire-time", + "type": "java.lang.Long", + "sourceType": "cn.unizk.config.WxProperties$PlaceOrder" + }, + { + "name": "wx.place-order.notify-url", + "type": "java.lang.String", + "sourceType": "cn.unizk.config.WxProperties$PlaceOrder" + }, + { + "name": "wx.place-order.place-order-url", + "type": "java.lang.String", + "sourceType": "cn.unizk.config.WxProperties$PlaceOrder" + }, + { + "name": "wx.secret", + "type": "java.lang.String", + "sourceType": "cn.unizk.config.WxProperties" + }, + { + "name": "xunfu.app-secret", + "type": "java.lang.String", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties" + }, + { + "name": "xunfu.appid", + "type": "java.lang.String", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties" + }, + { + "name": "xunfu.base-api", + "type": "java.lang.String", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties" + }, + { + "name": "xunfu.big-business.account", + "type": "java.lang.String", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties$BigBusiness" + }, + { + "name": "xunfu.big-business.mcht-no", + "type": "java.lang.String", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties$BigBusiness" + }, + { + "name": "xunfu.big-business.store-no", + "type": "java.lang.String", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties$BigBusiness" + }, + { + "name": "xunfu.bind-wx-appid-api", + "type": "java.lang.String", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties" + }, + { + "name": "xunfu.fenzhang.add-fz-account-api", + "type": "java.lang.String", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties$Fenzhang" + }, + { + "name": "xunfu.fenzhang.apply-fz-api", + "type": "java.lang.String", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties$Fenzhang" + }, + { + "name": "xunfu.fenzhang.open-fz-api", + "type": "java.lang.String", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties$Fenzhang" + }, + { + "name": "xunfu.fenzhang.qianyue-api", + "type": "java.lang.String", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties$Fenzhang" + }, + { + "name": "xunfu.fenzhang.trade-api", + "type": "java.lang.String", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties$Fenzhang" + }, + { + "name": "xunfu.pay-success-callback", + "type": "java.lang.String", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties" + }, + { + "name": "xunfu.place-order-api", + "type": "java.lang.String", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties" + }, + { + "name": "xunfu.upload-file-api", + "type": "java.lang.String", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties" + }, + { + "name": "xunfu.upload-file-token-api", + "type": "java.lang.String", + "sourceType": "cn.unizk.xunfupay.properties.XunFuProperties" + } + ], + "hints": [] +} \ No newline at end of file diff --git a/applet/target/classes/application-dev.yml b/applet/target/classes/application-dev.yml new file mode 100644 index 0000000..e07f460 --- /dev/null +++ b/applet/target/classes/application-dev.yml @@ -0,0 +1,120 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + druid: + url: jdbc:mysql://139.9.2.195:3306/uni_ai_doctor?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true + username: unizk + password: Unizk@2025 + + redis: + port: 6379 + host: 139.9.2.195 + username: + password: Unizk@2025.Jkzy + database: 0 + lettuce: + pool: + max-active: 8 + max-idle: 6 + min-idle: 2 + max-wait: -1ms + shutdown-timeout: 360 + timeout: 5000 + +# redis: # TODO +# host: 127.0.0.1 +# port: 6379 # TODO 本地 + +xf: + appid: 3fa7b7a0 + long-sound: + keySecret: b44d730380dcfae02313dcea7101efc8 + instant: + host: https://iat-api.xfyun.cn/v2/iat + APISecret: N2Q5Y2NiOTZmNThhODZjYTgxMjg1NjA4 + apiKey: da390c58ef0f2ad8424c3dccc6d458c7 + +wx: + appid: wx71e559ade446f09a + secret: 00b7f3cff0f4bde07daacd0dea7548c9 + placeOrder: + placeOrderUrl: https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi + notifyUrl: https://peaktcm.com/applet/wxPay/paySuccessCallBack + expireTime: 5 + pay: + domain: https://api.mch.weixin.qq.com + mchid: 1726009475 + serial_no: 58B7B59E32F73D69E461045455BF0EE0D6E5E4E8 + closeOrderApi: /v3/pay/transactions/out-trade-no/{out_trade_no}/close + platformCertSerial: 5ECF2D8FD7E28EC9DD53F49BCA70F7DB6C67E729 + apiV3Key: unLbhsImaYP6ZFiYaIpXjPwOhPBfi0iI + orderSearchUri: /v3/pay/transactions/out-trade-no/{out_trade_no} + + +xunfu: + appid: AP2235166393055350784 + appSecret: eQCoN5MByJnD08Ud7dRYOuqCGPkwnlKz + baseApi: https://openapi.imipay.com/api + bindWxAppidApi: /hzg/v2/wechat/add_sub_config + uploadFileTokenApi: /auth/v1/get_file_token + uploadFileApi: /file/v2/upload_file + paySuccessCallback: https://peaktcm.com/applet/xunfuPay/callback + placeOrderApi: /hzg/v2/unitedtrade/wechat_js_pay + bigBusiness: + mchtNo: 1776645 + storeNo: 21947434 + account: 066440308757055 + fenzhang: + openFzApi: /v3/hzg/part/mcht/reg + addFzAccountApi: /v3/hzg/part/acct/register + qianyueApi: /v3/hzg/part/acct/bind_mcht + tradeApi: /v3/hzg/part/trade/clear/get + applyFzApi: /v3/hzg/part/order/apply + + + +huifu: + huifuId: 6666000179463008 + payApi: https://api.huifu.com/v3/trade/payment/jspay + refundApi: https://api.huifu.com/v3/trade/payment/scanpay/refund + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3IcOEDMBOiHaa5dLsPWVVx+9yE/VEGjRSVZFUAospbCEhGDimE7UEL8ecXwbG9AN5k8yX+Ltj6zaeLIt3KgxbX5/4pnrOoPqFhtaoNuQrwl8/9/rkgGkoksH9e//mRan2+TjbHLKXWZKUduksaoWw4VehOx0nxE+wx7Bk7/VQAegnrDz4z/8zEd2Mcm51THceHJ5wVoMoXvo5e8nhUUAFJeHtlI5jxC85lK6kz2UNhGQ7Kutc7sBzK1U/mi29j/iStN3Z0fzND7+nRfgWPu4b0cKNnNwlIaGiabFTbpVZyV8LTg1BandmHJLNUUJyrc/s3W72VFUdp+BwgoERDcEwwIDAQAB + privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDchw4QMwE6Idprl0uw9ZVXH73IT9UQaNFJVkVQCiylsISEYOKYTtQQvx5xfBsb0A3mTzJf4u2PrNp4si3cqDFtfn/imes6g+oWG1qg25CvCXz/3+uSAaSiSwf17/+ZFqfb5ONscspdZkpR26SxqhbDhV6E7HSfET7DHsGTv9VAB6CesPPjP/zMR3YxybnVMdx4cnnBWgyhe+jl7yeFRQAUl4e2UjmPELzmUrqTPZQ2EZDsq61zuwHMrVT+aLb2P+JK03dnR/M0Pv6dF+BY+7hvRwo2c3CUhoaJpsVNulVnJXwtODUFqd2Ycks1RQnKtz+zdbvZUVR2n4HCCgRENwTDAgMBAAECggEAbFWAaB7WVHt69G3fxi/uzF0Qe04UijojzhYueLJ22nKLtwhtaIsZDJ0G1JM2MgSUP3badVZig7lTngVSGFsb5QFGy8f3Ucip/3AypmEWg5ZyrLSQ4ioieYPIhl3/P3Jsxc58lrMRjK6KhgoTrx+yjRyAoWYTqGztWydJy05q8UekdbIn9K2Dq0294hHbarCjB3C/3SXX4xniEbDtVBTdjP81731gxnM2HJ98GDrvUf5MDrX4SdExvCYV0P0mU8uaRPK8ylWCmtsEuMxKupFUFePJNZdyG+P/RZs6CbgUgJyYUzKlOyeWH8KwQF1FLntipkIPlJ+uVkdwK2eDD6bzWQKBgQDylFiSnlFy0fwXSpWHDnDgukaLYxm2GNWaPyg0f2IqK/368o/Xu4TWOPuknR6ngeiJZz3SVA/kFeCz3+UxtDlbUheoSkkbo0cZg8PaKx875gE97oCHgRkaPS4l44kmu1ZwOMgfZDQPrLZMEbAfjqvMEa7ci5kXk1quOGeSJRIg3QKBgQDoumM2dZ+RxYxtxB2k1kJJIndZX3hhVyMfDIh5TwHHKNml1poa/s+aoT27BZgiM8snLR55xk4cQ59kr9Yic9Oa4seECsrAgP8mbB6eC/y7lRDZDFjJvHXl6a1ePo+hBlYarL83AUMIE1/SfZrdyM5yRmp3+cwHkKVpAQuiEXOSHwKBgEDkpn0ylR9eRU4FydKDbnbv3gdTz4EDS8EjvCGvIheeBSeo1AomQ/b673auAZFWE1sOn18w1b9yitYTw0B0shNX9rQyizQ1jcOpmC848fYYJaTntMKLKqf2Te4c3Ifb/devmPms2LCIx4u5/5+xjwvcfybIwX+pD80jkbFq8VqRAoGBAKulTKdN+XK6EOikTHjWzezCzuPL1i105yJvS/isnNMW/e+iZ+ahKN0TL0RQy/Pt31f1nxSRfeq6tUS9q2Gdq+QAfsaUbxWsDoN4GtzWWoC/YL20rYecyBfaUVPBMI3C7p6d6inXdGjwYSwOF7qb8Ce4Z641PpYVyOm5K6tM08BhAoGBALNkfH3ZPImRKN19bGcHAtrzoDMFAAQrhjyMr9aUpMGLoAjxh1U2pYbj1y0e03ArUT/TRzOXNbHuST82tDZEarVSF8RmU8DNUAHSI9dmtXPtgeKpG8TNyP5q3VnJEHdSRZVLb5pGfZuo3tegsHwZF/oCGK+GHD/fhmSFB04GPJon + notifyUrl: https://peaktcm.com/applet/huifuPay/callback + productId: EDUSTD + configureAppletCallbackUrl: https://peaktcm.com/applet/huifuPay/configureAppletCallback + + +huifu-vendor: + sysId: 6666000188069628 + huifuId: 6666000188735389 + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0uJDRMFj1xoQCJbReVaNdiqjL9vdKolMzWKe2vMhZwkBlgQMpaqtHqNKNCn3DPL/7ugPUNzj4PLr3PSR4DK+TBOOa3xRuKLt3s2x6wouVNpiRRglUzh5OgciXXYPPl7QGu2YlJZ9F7ikiaD7KG9PJI7oidbA7lQ4qMcIGlSBUF4l3TeoOpad0zLs41IRJJPIMKPf5Jj9HS/1Tggcn7f36h1l4JWpTRyfB8HyF66IHzA3mQa5yskUHf1LLuO0hxtIfy9Ua+xJYqEWD334xaMzauZQsLM98d1Pj7I1YRvzNohabpCJqO1wF6PDB3rqdLarAZagN/JhYIHHGXMBGfQZxwIDAQAB + privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDS4kNEwWPXGhAIltF5Vo12KqMv290qiUzNYp7a8yFnCQGWBAylqq0eo0o0KfcM8v/u6A9Q3OPg8uvc9JHgMr5ME45rfFG4ou3ezbHrCi5U2mJFGCVTOHk6ByJddg8+XtAa7ZiUln0XuKSJoPsob08kjuiJ1sDuVDioxwgaVIFQXiXdN6g6lp3TMuzjUhEkk8gwo9/kmP0dL/VOCByft/fqHWXglalNHJ8HwfIXrogfMDeZBrnKyRQd/Usu47SHG0h/L1Rr7ElioRYPffjFozNq5lCwsz3x3U+PsjVhG/M2iFpukImo7XAXo8MHeup0tqsBlqA38mFggccZcwEZ9BnHAgMBAAECggEABRZaQxVbQDwruNlSklfJL9mVeDkYm8cWKDpB1MxauO6ZsDHG0FROutd7mciNYi2WiP/mJrA9exbBI+JuhncS6ijqnaMxIYAktuRFb4MeXQOrrTkI5XoOSp0Tcie/9GQ7JvsmXCdJO0JEDeHpTS9qPFqKN5ELtHQprcCnbGMvf23KyqOFx71Sbe4JxDqV4j0MeJJ/ZEOnLHJAhJ/o/0Gw+2cAVBxOq/xDTiSzKQaR4Cy7h3HMlDXnBXlAwKLb7x/F6efFyBv3RGZjtTgt8G7319icRJUHyXa3JPk/UbKTHrZ3saCj0ByAPpCwSVx6uNxhVeEOFqi3VwtV8s4ClAJtUQKBgQDwEGA1Shr2klTnM1VN+R3YkgaG8QtkZQQG77vCR1q3uMPKpWUQOi/2wQs3SbTAr7ZX+8CHNb8M3KGVAEFR2PDEFok/LA0snFTwdL6dLkXkmOxmNyR2wmXIUimMBogQIc4bI11EpPoocbrzuJ3q48fDIAr7Hc4d/0HasEAQHvAdfwKBgQDg4gCr5M7atD4XdKqmNs5kltjw36EeSig2cajfQb7aARmHS+1F9cn1cpgTvqMBHxBZBx5cW1ETLTxDEq8/ONHHAtmgCVgrc0lgch+Dph1Nt4Jl/aNxxaZjLpLQtcHnFR4/7RGuJMUTAzAUcOer9XiCJskE2EVLrT53pE665Se3uQKBgFcXmc+7cszBicvW87u2BP3s/DE4gcmKXEun7ZYuDNtaTK3YEzIv6fa7UjZcpxbAqIaC7vYeqZEg+f30eb4X1kFNa71fXegxTx9tOzoK75BfamQq3S+4lvR12lzSgcpYeU2fJtcggyDpIcoJ0EDHIlHH7jPsPDrlwB52ksdGchZBAoGBAM49dvAuf6cD9o38aSTWzqJh1cPS1Ci7SfXkd0OJQEcfCxKSB6FJsVZxKhexljzJCG0dojKBbPFxYvsAf8gzi/BAJOYoq7vtlzXkdBKAng9QZT60Rtlosxfy9qKCjronG/70pGpZPoQZQFb+1PlXvpVejKzsy2CEGe4PukSdNLfBAoGATUJ7FGVmG2Ym8UHcP0bMeWwS7XROuiquliLtamWwpZTByZaLO1nK2FtC1oVj3il4Wox6/In1bBbdtqxmRmKcD9q1JExr1PHxXQTUbIoWb4GXNHq7h5kOhpra1uVRmNIewfJUYTCEzzHTrJe8dADBc7lGpsibwk174YD2343Aupw= + productId: PAYUN + notifyUrl: https://peaktcm.com:8089/hf/webhook/vendorPaySuccess + + + +aliyun: + accessKeyId: LTAI5tBQGeqmhe6yhfqupaZD + accessKeySecret: YM2lsEtpjCLOF2kJGdsCBcwRHLX8aa + +jk: + secretKey: Unizk.jkzy@2025 + tokenExpireTime: 90 + + +minio: + endpoint: http://139.9.2.195:8002 + accessKey: YIh5PhIEHXEiJgPTlCSc + secretKey: 07becv7RNMI1wHyPPFtq3rlCPC6cyF0WrV5LNHYN + username: jkzy + password: jkzy@2025 + nginxHost: + +huaweiyun: + accessKey: HPUACMRQ2NKQNOXNCFNO + secretKey: KC3yEw7ARoL0oxcmXy7vE3hyMBPKjLsG1LCSQdYh + + +payIp: http://192.168.0.6:8083 diff --git a/applet/target/classes/application-prod.yml b/applet/target/classes/application-prod.yml new file mode 100644 index 0000000..e8cf805 --- /dev/null +++ b/applet/target/classes/application-prod.yml @@ -0,0 +1,115 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + druid: + url: jdbc:mysql://139.9.2.195:3306/uni_ai_doctor?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true + username: unizk + password: Unizk@2025 + + redis: + port: 6379 + host: localhost + username: + password: Unizk@2025.Jkzy + database: 0 + lettuce: + pool: + max-active: 8 + max-idle: 6 + min-idle: 2 + max-wait: -1ms + shutdown-timeout: 360 + timeout: 5000 + + +xf: + appid: 3fa7b7a0 + long-sound: + keySecret: b44d730380dcfae02313dcea7101efc8 + instant: + host: https://iat-api.xfyun.cn/v2/iat + APISecret: N2Q5Y2NiOTZmNThhODZjYTgxMjg1NjA4 + apiKey: da390c58ef0f2ad8424c3dccc6d458c7 + +wx: + appid: wx71e559ade446f09a + secret: 00b7f3cff0f4bde07daacd0dea7548c9 + placeOrder: + placeOrderUrl: https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi + notifyUrl: https://peaktcm.com/applet/wxPay/paySuccessCallBack + expireTime: 5 + pay: + domain: https://api.mch.weixin.qq.com + mchid: 1726009475 + serial_no: 58B7B59E32F73D69E461045455BF0EE0D6E5E4E8 + closeOrderApi: /v3/pay/transactions/out-trade-no/{out_trade_no}/close + platformCertSerial: 5ECF2D8FD7E28EC9DD53F49BCA70F7DB6C67E729 + apiV3Key: unLbhsImaYP6ZFiYaIpXjPwOhPBfi0iI + orderSearchUri: /v3/pay/transactions/out-trade-no/{out_trade_no} + + +xunfu: + appid: AP2235166393055350784 + appSecret: eQCoN5MByJnD08Ud7dRYOuqCGPkwnlKz + baseApi: https://openapi.imipay.com/api + bindWxAppidApi: /hzg/v2/wechat/add_sub_config + uploadFileTokenApi: /auth/v1/get_file_token + uploadFileApi: /file/v2/upload_file + paySuccessCallback: https://peaktcm.com/applet/xunfuPay/callback + placeOrderApi: /hzg/v2/unitedtrade/wechat_js_pay + bigBusiness: + mchtNo: 1776645 + storeNo: 21947434 + account: 066440308757055 + fenzhang: + openFzApi: /v3/hzg/part/mcht/reg + addFzAccountApi: /v3/hzg/part/acct/register + qianyueApi: /v3/hzg/part/acct/bind_mcht + tradeApi: /v3/hzg/part/trade/clear/get + applyFzApi: /v3/hzg/part/order/apply + + +huifu: + huifuId: 6666000179463008 + payApi: https://api.huifu.com/v3/trade/payment/jspay + refundApi: https://api.huifu.com/v3/trade/payment/scanpay/refund + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3IcOEDMBOiHaa5dLsPWVVx+9yE/VEGjRSVZFUAospbCEhGDimE7UEL8ecXwbG9AN5k8yX+Ltj6zaeLIt3KgxbX5/4pnrOoPqFhtaoNuQrwl8/9/rkgGkoksH9e//mRan2+TjbHLKXWZKUduksaoWw4VehOx0nxE+wx7Bk7/VQAegnrDz4z/8zEd2Mcm51THceHJ5wVoMoXvo5e8nhUUAFJeHtlI5jxC85lK6kz2UNhGQ7Kutc7sBzK1U/mi29j/iStN3Z0fzND7+nRfgWPu4b0cKNnNwlIaGiabFTbpVZyV8LTg1BandmHJLNUUJyrc/s3W72VFUdp+BwgoERDcEwwIDAQAB + privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDchw4QMwE6Idprl0uw9ZVXH73IT9UQaNFJVkVQCiylsISEYOKYTtQQvx5xfBsb0A3mTzJf4u2PrNp4si3cqDFtfn/imes6g+oWG1qg25CvCXz/3+uSAaSiSwf17/+ZFqfb5ONscspdZkpR26SxqhbDhV6E7HSfET7DHsGTv9VAB6CesPPjP/zMR3YxybnVMdx4cnnBWgyhe+jl7yeFRQAUl4e2UjmPELzmUrqTPZQ2EZDsq61zuwHMrVT+aLb2P+JK03dnR/M0Pv6dF+BY+7hvRwo2c3CUhoaJpsVNulVnJXwtODUFqd2Ycks1RQnKtz+zdbvZUVR2n4HCCgRENwTDAgMBAAECggEAbFWAaB7WVHt69G3fxi/uzF0Qe04UijojzhYueLJ22nKLtwhtaIsZDJ0G1JM2MgSUP3badVZig7lTngVSGFsb5QFGy8f3Ucip/3AypmEWg5ZyrLSQ4ioieYPIhl3/P3Jsxc58lrMRjK6KhgoTrx+yjRyAoWYTqGztWydJy05q8UekdbIn9K2Dq0294hHbarCjB3C/3SXX4xniEbDtVBTdjP81731gxnM2HJ98GDrvUf5MDrX4SdExvCYV0P0mU8uaRPK8ylWCmtsEuMxKupFUFePJNZdyG+P/RZs6CbgUgJyYUzKlOyeWH8KwQF1FLntipkIPlJ+uVkdwK2eDD6bzWQKBgQDylFiSnlFy0fwXSpWHDnDgukaLYxm2GNWaPyg0f2IqK/368o/Xu4TWOPuknR6ngeiJZz3SVA/kFeCz3+UxtDlbUheoSkkbo0cZg8PaKx875gE97oCHgRkaPS4l44kmu1ZwOMgfZDQPrLZMEbAfjqvMEa7ci5kXk1quOGeSJRIg3QKBgQDoumM2dZ+RxYxtxB2k1kJJIndZX3hhVyMfDIh5TwHHKNml1poa/s+aoT27BZgiM8snLR55xk4cQ59kr9Yic9Oa4seECsrAgP8mbB6eC/y7lRDZDFjJvHXl6a1ePo+hBlYarL83AUMIE1/SfZrdyM5yRmp3+cwHkKVpAQuiEXOSHwKBgEDkpn0ylR9eRU4FydKDbnbv3gdTz4EDS8EjvCGvIheeBSeo1AomQ/b673auAZFWE1sOn18w1b9yitYTw0B0shNX9rQyizQ1jcOpmC848fYYJaTntMKLKqf2Te4c3Ifb/devmPms2LCIx4u5/5+xjwvcfybIwX+pD80jkbFq8VqRAoGBAKulTKdN+XK6EOikTHjWzezCzuPL1i105yJvS/isnNMW/e+iZ+ahKN0TL0RQy/Pt31f1nxSRfeq6tUS9q2Gdq+QAfsaUbxWsDoN4GtzWWoC/YL20rYecyBfaUVPBMI3C7p6d6inXdGjwYSwOF7qb8Ce4Z641PpYVyOm5K6tM08BhAoGBALNkfH3ZPImRKN19bGcHAtrzoDMFAAQrhjyMr9aUpMGLoAjxh1U2pYbj1y0e03ArUT/TRzOXNbHuST82tDZEarVSF8RmU8DNUAHSI9dmtXPtgeKpG8TNyP5q3VnJEHdSRZVLb5pGfZuo3tegsHwZF/oCGK+GHD/fhmSFB04GPJon + notifyUrl: https://peaktcm.com/applet/huifuPay/callback + productId: EDUSTD + configureAppletCallbackUrl: https://peaktcm.com/applet/huifuPay/configureAppletCallback + + +huifu-vendor: + sysId: 6666000188069628 + huifuId: 6666000188735389 + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0uJDRMFj1xoQCJbReVaNdiqjL9vdKolMzWKe2vMhZwkBlgQMpaqtHqNKNCn3DPL/7ugPUNzj4PLr3PSR4DK+TBOOa3xRuKLt3s2x6wouVNpiRRglUzh5OgciXXYPPl7QGu2YlJZ9F7ikiaD7KG9PJI7oidbA7lQ4qMcIGlSBUF4l3TeoOpad0zLs41IRJJPIMKPf5Jj9HS/1Tggcn7f36h1l4JWpTRyfB8HyF66IHzA3mQa5yskUHf1LLuO0hxtIfy9Ua+xJYqEWD334xaMzauZQsLM98d1Pj7I1YRvzNohabpCJqO1wF6PDB3rqdLarAZagN/JhYIHHGXMBGfQZxwIDAQAB + privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDS4kNEwWPXGhAIltF5Vo12KqMv290qiUzNYp7a8yFnCQGWBAylqq0eo0o0KfcM8v/u6A9Q3OPg8uvc9JHgMr5ME45rfFG4ou3ezbHrCi5U2mJFGCVTOHk6ByJddg8+XtAa7ZiUln0XuKSJoPsob08kjuiJ1sDuVDioxwgaVIFQXiXdN6g6lp3TMuzjUhEkk8gwo9/kmP0dL/VOCByft/fqHWXglalNHJ8HwfIXrogfMDeZBrnKyRQd/Usu47SHG0h/L1Rr7ElioRYPffjFozNq5lCwsz3x3U+PsjVhG/M2iFpukImo7XAXo8MHeup0tqsBlqA38mFggccZcwEZ9BnHAgMBAAECggEABRZaQxVbQDwruNlSklfJL9mVeDkYm8cWKDpB1MxauO6ZsDHG0FROutd7mciNYi2WiP/mJrA9exbBI+JuhncS6ijqnaMxIYAktuRFb4MeXQOrrTkI5XoOSp0Tcie/9GQ7JvsmXCdJO0JEDeHpTS9qPFqKN5ELtHQprcCnbGMvf23KyqOFx71Sbe4JxDqV4j0MeJJ/ZEOnLHJAhJ/o/0Gw+2cAVBxOq/xDTiSzKQaR4Cy7h3HMlDXnBXlAwKLb7x/F6efFyBv3RGZjtTgt8G7319icRJUHyXa3JPk/UbKTHrZ3saCj0ByAPpCwSVx6uNxhVeEOFqi3VwtV8s4ClAJtUQKBgQDwEGA1Shr2klTnM1VN+R3YkgaG8QtkZQQG77vCR1q3uMPKpWUQOi/2wQs3SbTAr7ZX+8CHNb8M3KGVAEFR2PDEFok/LA0snFTwdL6dLkXkmOxmNyR2wmXIUimMBogQIc4bI11EpPoocbrzuJ3q48fDIAr7Hc4d/0HasEAQHvAdfwKBgQDg4gCr5M7atD4XdKqmNs5kltjw36EeSig2cajfQb7aARmHS+1F9cn1cpgTvqMBHxBZBx5cW1ETLTxDEq8/ONHHAtmgCVgrc0lgch+Dph1Nt4Jl/aNxxaZjLpLQtcHnFR4/7RGuJMUTAzAUcOer9XiCJskE2EVLrT53pE665Se3uQKBgFcXmc+7cszBicvW87u2BP3s/DE4gcmKXEun7ZYuDNtaTK3YEzIv6fa7UjZcpxbAqIaC7vYeqZEg+f30eb4X1kFNa71fXegxTx9tOzoK75BfamQq3S+4lvR12lzSgcpYeU2fJtcggyDpIcoJ0EDHIlHH7jPsPDrlwB52ksdGchZBAoGBAM49dvAuf6cD9o38aSTWzqJh1cPS1Ci7SfXkd0OJQEcfCxKSB6FJsVZxKhexljzJCG0dojKBbPFxYvsAf8gzi/BAJOYoq7vtlzXkdBKAng9QZT60Rtlosxfy9qKCjronG/70pGpZPoQZQFb+1PlXvpVejKzsy2CEGe4PukSdNLfBAoGATUJ7FGVmG2Ym8UHcP0bMeWwS7XROuiquliLtamWwpZTByZaLO1nK2FtC1oVj3il4Wox6/In1bBbdtqxmRmKcD9q1JExr1PHxXQTUbIoWb4GXNHq7h5kOhpra1uVRmNIewfJUYTCEzzHTrJe8dADBc7lGpsibwk174YD2343Aupw= + productId: PAYUN + notifyUrl: https://peaktcm.com:8089/hf/webhook/vendorPaySuccess + + +aliyun: + accessKeyId: LTAI5tBQGeqmhe6yhfqupaZD + accessKeySecret: YM2lsEtpjCLOF2kJGdsCBcwRHLX8aa + +jk: + secretKey: Unizk.jkzy@2025 + tokenExpireTime: 90 + + +minio: + endpoint: http://139.9.2.195:8002 + accessKey: YIh5PhIEHXEiJgPTlCSc + secretKey: 07becv7RNMI1wHyPPFtq3rlCPC6cyF0WrV5LNHYN + username: jkzy + password: jkzy@2025 + nginxHost: + +huaweiyun: + accessKey: HPUACMRQ2NKQNOXNCFNO + secretKey: KC3yEw7ARoL0oxcmXy7vE3hyMBPKjLsG1LCSQdYh + + +payIp: http://127.0.0.1:8083 diff --git a/applet/target/classes/application.yml b/applet/target/classes/application.yml new file mode 100644 index 0000000..c09ea93 --- /dev/null +++ b/applet/target/classes/application.yml @@ -0,0 +1,21 @@ +spring: + application: + name: AI_Questioning + profiles: + active: dev + +server: + port: 8081 + #address: 127.0.0.1 + + + +logging: + level: + cn.unizk.dao: debug + org.springframework: warn + org.apache.ibatis.logging: debug + # org.springframework.web.servlet.DispatcherServlet: DEBUG +mybatis-plus: + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl diff --git a/applet/target/classes/cn/unizk/AIQuestioningApp.class b/applet/target/classes/cn/unizk/AIQuestioningApp.class new file mode 100644 index 0000000..2924344 Binary files /dev/null and b/applet/target/classes/cn/unizk/AIQuestioningApp.class differ diff --git a/applet/target/classes/cn/unizk/config/JkProperties.class b/applet/target/classes/cn/unizk/config/JkProperties.class new file mode 100644 index 0000000..8fa6e5d Binary files /dev/null and b/applet/target/classes/cn/unizk/config/JkProperties.class differ diff --git a/applet/target/classes/cn/unizk/config/ResourceConfig.class b/applet/target/classes/cn/unizk/config/ResourceConfig.class new file mode 100644 index 0000000..9960cc1 Binary files /dev/null and b/applet/target/classes/cn/unizk/config/ResourceConfig.class differ diff --git a/applet/target/classes/cn/unizk/config/WxProperties$Pay.class b/applet/target/classes/cn/unizk/config/WxProperties$Pay.class new file mode 100644 index 0000000..60f6bde Binary files /dev/null and b/applet/target/classes/cn/unizk/config/WxProperties$Pay.class differ diff --git a/applet/target/classes/cn/unizk/config/WxProperties$PlaceOrder.class b/applet/target/classes/cn/unizk/config/WxProperties$PlaceOrder.class new file mode 100644 index 0000000..42a8490 Binary files /dev/null and b/applet/target/classes/cn/unizk/config/WxProperties$PlaceOrder.class differ diff --git a/applet/target/classes/cn/unizk/config/WxProperties.class b/applet/target/classes/cn/unizk/config/WxProperties.class new file mode 100644 index 0000000..0142707 Binary files /dev/null and b/applet/target/classes/cn/unizk/config/WxProperties.class differ diff --git a/applet/target/classes/cn/unizk/constant/WxConstant.class b/applet/target/classes/cn/unizk/constant/WxConstant.class new file mode 100644 index 0000000..e584c3f Binary files /dev/null and b/applet/target/classes/cn/unizk/constant/WxConstant.class differ diff --git a/applet/target/classes/cn/unizk/controller/AIAdviceController.class b/applet/target/classes/cn/unizk/controller/AIAdviceController.class new file mode 100644 index 0000000..a87034c Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/AIAdviceController.class differ diff --git a/applet/target/classes/cn/unizk/controller/ApplicationModuleController.class b/applet/target/classes/cn/unizk/controller/ApplicationModuleController.class new file mode 100644 index 0000000..eb472d1 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/ApplicationModuleController.class differ diff --git a/applet/target/classes/cn/unizk/controller/ClinicWorkLogController.class b/applet/target/classes/cn/unizk/controller/ClinicWorkLogController.class new file mode 100644 index 0000000..85f384f Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/ClinicWorkLogController.class differ diff --git a/applet/target/classes/cn/unizk/controller/ComboController.class b/applet/target/classes/cn/unizk/controller/ComboController.class new file mode 100644 index 0000000..993abba Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/ComboController.class differ diff --git a/applet/target/classes/cn/unizk/controller/ConsultationController.class b/applet/target/classes/cn/unizk/controller/ConsultationController.class new file mode 100644 index 0000000..6266a2d Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/ConsultationController.class differ diff --git a/applet/target/classes/cn/unizk/controller/CourseStudyController.class b/applet/target/classes/cn/unizk/controller/CourseStudyController.class new file mode 100644 index 0000000..86b83cb Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/CourseStudyController.class differ diff --git a/applet/target/classes/cn/unizk/controller/DoubaoAIController.class b/applet/target/classes/cn/unizk/controller/DoubaoAIController.class new file mode 100644 index 0000000..aed834c Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/DoubaoAIController.class differ diff --git a/applet/target/classes/cn/unizk/controller/FileController.class b/applet/target/classes/cn/unizk/controller/FileController.class new file mode 100644 index 0000000..a338cdf Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/FileController.class differ diff --git a/applet/target/classes/cn/unizk/controller/GolfController.class b/applet/target/classes/cn/unizk/controller/GolfController.class new file mode 100644 index 0000000..207fb99 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/GolfController.class differ diff --git a/applet/target/classes/cn/unizk/controller/H5ComboController.class b/applet/target/classes/cn/unizk/controller/H5ComboController.class new file mode 100644 index 0000000..35776b1 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/H5ComboController.class differ diff --git a/applet/target/classes/cn/unizk/controller/H5PowerOnController.class b/applet/target/classes/cn/unizk/controller/H5PowerOnController.class new file mode 100644 index 0000000..70503ed Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/H5PowerOnController.class differ diff --git a/applet/target/classes/cn/unizk/controller/HuiFuPayController.class b/applet/target/classes/cn/unizk/controller/HuiFuPayController.class new file mode 100644 index 0000000..4115068 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/HuiFuPayController.class differ diff --git a/applet/target/classes/cn/unizk/controller/HuiFuVendorPayController.class b/applet/target/classes/cn/unizk/controller/HuiFuVendorPayController.class new file mode 100644 index 0000000..6a69a65 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/HuiFuVendorPayController.class differ diff --git a/applet/target/classes/cn/unizk/controller/HuifuWebhookController.class b/applet/target/classes/cn/unizk/controller/HuifuWebhookController.class new file mode 100644 index 0000000..040fe63 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/HuifuWebhookController.class differ diff --git a/applet/target/classes/cn/unizk/controller/InventoryController.class b/applet/target/classes/cn/unizk/controller/InventoryController.class new file mode 100644 index 0000000..ecf8bf8 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/InventoryController.class differ diff --git a/applet/target/classes/cn/unizk/controller/JkProductController.class b/applet/target/classes/cn/unizk/controller/JkProductController.class new file mode 100644 index 0000000..5d2e413 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/JkProductController.class differ diff --git a/applet/target/classes/cn/unizk/controller/JkStoreController.class b/applet/target/classes/cn/unizk/controller/JkStoreController.class new file mode 100644 index 0000000..4fc68a3 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/JkStoreController.class differ diff --git a/applet/target/classes/cn/unizk/controller/MemberController.class b/applet/target/classes/cn/unizk/controller/MemberController.class new file mode 100644 index 0000000..a122b79 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/MemberController.class differ diff --git a/applet/target/classes/cn/unizk/controller/Physio13AreaController.class b/applet/target/classes/cn/unizk/controller/Physio13AreaController.class new file mode 100644 index 0000000..6fa20e2 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/Physio13AreaController.class differ diff --git a/applet/target/classes/cn/unizk/controller/PhysioAppointmentController.class b/applet/target/classes/cn/unizk/controller/PhysioAppointmentController.class new file mode 100644 index 0000000..97927f1 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/PhysioAppointmentController.class differ diff --git a/applet/target/classes/cn/unizk/controller/PhysioController.class b/applet/target/classes/cn/unizk/controller/PhysioController.class new file mode 100644 index 0000000..5d5f257 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/PhysioController.class differ diff --git a/applet/target/classes/cn/unizk/controller/RatingController.class b/applet/target/classes/cn/unizk/controller/RatingController.class new file mode 100644 index 0000000..0269887 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/RatingController.class differ diff --git a/applet/target/classes/cn/unizk/controller/RunningController.class b/applet/target/classes/cn/unizk/controller/RunningController.class new file mode 100644 index 0000000..9bde4cf Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/RunningController.class differ diff --git a/applet/target/classes/cn/unizk/controller/SysDictController.class b/applet/target/classes/cn/unizk/controller/SysDictController.class new file mode 100644 index 0000000..c65e824 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/SysDictController.class differ diff --git a/applet/target/classes/cn/unizk/controller/TestController.class b/applet/target/classes/cn/unizk/controller/TestController.class new file mode 100644 index 0000000..34a57ff Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/TestController.class differ diff --git a/applet/target/classes/cn/unizk/controller/WechatPayController.class b/applet/target/classes/cn/unizk/controller/WechatPayController.class new file mode 100644 index 0000000..bde1561 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/WechatPayController.class differ diff --git a/applet/target/classes/cn/unizk/controller/WxAppletLoginController.class b/applet/target/classes/cn/unizk/controller/WxAppletLoginController.class new file mode 100644 index 0000000..f55ac26 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/WxAppletLoginController.class differ diff --git a/applet/target/classes/cn/unizk/controller/WxDeviceController.class b/applet/target/classes/cn/unizk/controller/WxDeviceController.class new file mode 100644 index 0000000..fe75839 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/WxDeviceController.class differ diff --git a/applet/target/classes/cn/unizk/controller/WxOrderController.class b/applet/target/classes/cn/unizk/controller/WxOrderController.class new file mode 100644 index 0000000..83b482a Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/WxOrderController.class differ diff --git a/applet/target/classes/cn/unizk/controller/WxPayController.class b/applet/target/classes/cn/unizk/controller/WxPayController.class new file mode 100644 index 0000000..8400623 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/WxPayController.class differ diff --git a/applet/target/classes/cn/unizk/controller/WxUserController.class b/applet/target/classes/cn/unizk/controller/WxUserController.class new file mode 100644 index 0000000..d71e9b1 Binary files /dev/null and b/applet/target/classes/cn/unizk/controller/WxUserController.class differ diff --git a/applet/target/classes/cn/unizk/filter/JkCorsFilter.class b/applet/target/classes/cn/unizk/filter/JkCorsFilter.class new file mode 100644 index 0000000..8213d5e Binary files /dev/null and b/applet/target/classes/cn/unizk/filter/JkCorsFilter.class differ diff --git a/applet/target/classes/cn/unizk/huifupay/config/properties/HuiFuProperties.class b/applet/target/classes/cn/unizk/huifupay/config/properties/HuiFuProperties.class new file mode 100644 index 0000000..d04d0ab Binary files /dev/null and b/applet/target/classes/cn/unizk/huifupay/config/properties/HuiFuProperties.class differ diff --git a/applet/target/classes/cn/unizk/huifupay/config/properties/HuiFuVendorProperties.class b/applet/target/classes/cn/unizk/huifupay/config/properties/HuiFuVendorProperties.class new file mode 100644 index 0000000..a288583 Binary files /dev/null and b/applet/target/classes/cn/unizk/huifupay/config/properties/HuiFuVendorProperties.class differ diff --git a/applet/target/classes/cn/unizk/huifupay/dto/HuifuBaseResponse.class b/applet/target/classes/cn/unizk/huifupay/dto/HuifuBaseResponse.class new file mode 100644 index 0000000..b2ae907 Binary files /dev/null and b/applet/target/classes/cn/unizk/huifupay/dto/HuifuBaseResponse.class differ diff --git a/applet/target/classes/cn/unizk/huifupay/dto/HuifuPlaceOrderParamBaseDTO.class b/applet/target/classes/cn/unizk/huifupay/dto/HuifuPlaceOrderParamBaseDTO.class new file mode 100644 index 0000000..972854a Binary files /dev/null and b/applet/target/classes/cn/unizk/huifupay/dto/HuifuPlaceOrderParamBaseDTO.class differ diff --git a/applet/target/classes/cn/unizk/huifupay/service/HuiFuPayService.class b/applet/target/classes/cn/unizk/huifupay/service/HuiFuPayService.class new file mode 100644 index 0000000..7795581 Binary files /dev/null and b/applet/target/classes/cn/unizk/huifupay/service/HuiFuPayService.class differ diff --git a/applet/target/classes/cn/unizk/huifupay/service/HuiFuVendorPayService.class b/applet/target/classes/cn/unizk/huifupay/service/HuiFuVendorPayService.class new file mode 100644 index 0000000..62fc333 Binary files /dev/null and b/applet/target/classes/cn/unizk/huifupay/service/HuiFuVendorPayService.class differ diff --git a/applet/target/classes/cn/unizk/huifupay/utils/HfUtil.class b/applet/target/classes/cn/unizk/huifupay/utils/HfUtil.class new file mode 100644 index 0000000..d13c287 Binary files /dev/null and b/applet/target/classes/cn/unizk/huifupay/utils/HfUtil.class differ diff --git a/applet/target/classes/cn/unizk/huifupay/utils/HuifuSignUtil.class b/applet/target/classes/cn/unizk/huifupay/utils/HuifuSignUtil.class new file mode 100644 index 0000000..428591a Binary files /dev/null and b/applet/target/classes/cn/unizk/huifupay/utils/HuifuSignUtil.class differ diff --git a/applet/target/classes/cn/unizk/huifupay/vo/DeviceScanPayVO.class b/applet/target/classes/cn/unizk/huifupay/vo/DeviceScanPayVO.class new file mode 100644 index 0000000..bc4a1d7 Binary files /dev/null and b/applet/target/classes/cn/unizk/huifupay/vo/DeviceScanPayVO.class differ diff --git a/applet/target/classes/cn/unizk/huifupay/vo/RechargeVO.class b/applet/target/classes/cn/unizk/huifupay/vo/RechargeVO.class new file mode 100644 index 0000000..500070b Binary files /dev/null and b/applet/target/classes/cn/unizk/huifupay/vo/RechargeVO.class differ diff --git a/applet/target/classes/cn/unizk/huifupay/vo/ReportTypeVO.class b/applet/target/classes/cn/unizk/huifupay/vo/ReportTypeVO.class new file mode 100644 index 0000000..05272ef Binary files /dev/null and b/applet/target/classes/cn/unizk/huifupay/vo/ReportTypeVO.class differ diff --git a/applet/target/classes/cn/unizk/interceptor/AppletLoginInterceptor.class b/applet/target/classes/cn/unizk/interceptor/AppletLoginInterceptor.class new file mode 100644 index 0000000..d910392 Binary files /dev/null and b/applet/target/classes/cn/unizk/interceptor/AppletLoginInterceptor.class differ diff --git a/applet/target/classes/cn/unizk/mapper/ComboMapper.class b/applet/target/classes/cn/unizk/mapper/ComboMapper.class new file mode 100644 index 0000000..4062a83 Binary files /dev/null and b/applet/target/classes/cn/unizk/mapper/ComboMapper.class differ diff --git a/applet/target/classes/cn/unizk/mapper/ConversationMapper.class b/applet/target/classes/cn/unizk/mapper/ConversationMapper.class new file mode 100644 index 0000000..d7fddb5 Binary files /dev/null and b/applet/target/classes/cn/unizk/mapper/ConversationMapper.class differ diff --git a/applet/target/classes/cn/unizk/mapper/DeviceMapper.class b/applet/target/classes/cn/unizk/mapper/DeviceMapper.class new file mode 100644 index 0000000..6e85380 Binary files /dev/null and b/applet/target/classes/cn/unizk/mapper/DeviceMapper.class differ diff --git a/applet/target/classes/cn/unizk/mapper/FileMapper.class b/applet/target/classes/cn/unizk/mapper/FileMapper.class new file mode 100644 index 0000000..3cb674c Binary files /dev/null and b/applet/target/classes/cn/unizk/mapper/FileMapper.class differ diff --git a/applet/target/classes/cn/unizk/mapper/JkPhysioMapper.class b/applet/target/classes/cn/unizk/mapper/JkPhysioMapper.class new file mode 100644 index 0000000..247a20d Binary files /dev/null and b/applet/target/classes/cn/unizk/mapper/JkPhysioMapper.class differ diff --git a/applet/target/classes/cn/unizk/mapper/JkProductMapper.class b/applet/target/classes/cn/unizk/mapper/JkProductMapper.class new file mode 100644 index 0000000..bcf0f39 Binary files /dev/null and b/applet/target/classes/cn/unizk/mapper/JkProductMapper.class differ diff --git a/applet/target/classes/cn/unizk/mapper/JkStoreMapper.class b/applet/target/classes/cn/unizk/mapper/JkStoreMapper.class new file mode 100644 index 0000000..d0cce20 Binary files /dev/null and b/applet/target/classes/cn/unizk/mapper/JkStoreMapper.class differ diff --git a/applet/target/classes/cn/unizk/mapper/MessageMapper.class b/applet/target/classes/cn/unizk/mapper/MessageMapper.class new file mode 100644 index 0000000..d1e995c Binary files /dev/null and b/applet/target/classes/cn/unizk/mapper/MessageMapper.class differ diff --git a/applet/target/classes/cn/unizk/mapper/ProductCarouselMapper.class b/applet/target/classes/cn/unizk/mapper/ProductCarouselMapper.class new file mode 100644 index 0000000..8edf9d3 Binary files /dev/null and b/applet/target/classes/cn/unizk/mapper/ProductCarouselMapper.class differ diff --git a/applet/target/classes/cn/unizk/mapper/QuestionMapper.class b/applet/target/classes/cn/unizk/mapper/QuestionMapper.class new file mode 100644 index 0000000..c44cb76 Binary files /dev/null and b/applet/target/classes/cn/unizk/mapper/QuestionMapper.class differ diff --git a/applet/target/classes/cn/unizk/mapper/SysDictMapper.class b/applet/target/classes/cn/unizk/mapper/SysDictMapper.class new file mode 100644 index 0000000..735afe3 Binary files /dev/null and b/applet/target/classes/cn/unizk/mapper/SysDictMapper.class differ diff --git a/applet/target/classes/cn/unizk/mapper/UniBaseMapper.class b/applet/target/classes/cn/unizk/mapper/UniBaseMapper.class new file mode 100644 index 0000000..9c465f1 Binary files /dev/null and b/applet/target/classes/cn/unizk/mapper/UniBaseMapper.class differ diff --git a/applet/target/classes/cn/unizk/mapper/WxUserSessionMapper.class b/applet/target/classes/cn/unizk/mapper/WxUserSessionMapper.class new file mode 100644 index 0000000..23f0674 Binary files /dev/null and b/applet/target/classes/cn/unizk/mapper/WxUserSessionMapper.class differ diff --git a/applet/target/classes/cn/unizk/scheduler/VideoProgressScheduler.class b/applet/target/classes/cn/unizk/scheduler/VideoProgressScheduler.class new file mode 100644 index 0000000..5df6242 Binary files /dev/null and b/applet/target/classes/cn/unizk/scheduler/VideoProgressScheduler.class differ diff --git a/applet/target/classes/cn/unizk/service/AIAdviceService.class b/applet/target/classes/cn/unizk/service/AIAdviceService.class new file mode 100644 index 0000000..d2793de Binary files /dev/null and b/applet/target/classes/cn/unizk/service/AIAdviceService.class differ diff --git a/applet/target/classes/cn/unizk/service/ComboService.class b/applet/target/classes/cn/unizk/service/ComboService.class new file mode 100644 index 0000000..9091e6c Binary files /dev/null and b/applet/target/classes/cn/unizk/service/ComboService.class differ diff --git a/applet/target/classes/cn/unizk/service/DeviceService.class b/applet/target/classes/cn/unizk/service/DeviceService.class new file mode 100644 index 0000000..1ad5ec1 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/DeviceService.class differ diff --git a/applet/target/classes/cn/unizk/service/FileService.class b/applet/target/classes/cn/unizk/service/FileService.class new file mode 100644 index 0000000..b8bf1fb Binary files /dev/null and b/applet/target/classes/cn/unizk/service/FileService.class differ diff --git a/applet/target/classes/cn/unizk/service/IAiService.class b/applet/target/classes/cn/unizk/service/IAiService.class new file mode 100644 index 0000000..f2125aa Binary files /dev/null and b/applet/target/classes/cn/unizk/service/IAiService.class differ diff --git a/applet/target/classes/cn/unizk/service/JkPhysioService.class b/applet/target/classes/cn/unizk/service/JkPhysioService.class new file mode 100644 index 0000000..0021533 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/JkPhysioService.class differ diff --git a/applet/target/classes/cn/unizk/service/JkProductService.class b/applet/target/classes/cn/unizk/service/JkProductService.class new file mode 100644 index 0000000..27d777d Binary files /dev/null and b/applet/target/classes/cn/unizk/service/JkProductService.class differ diff --git a/applet/target/classes/cn/unizk/service/JkStoreService.class b/applet/target/classes/cn/unizk/service/JkStoreService.class new file mode 100644 index 0000000..479014c Binary files /dev/null and b/applet/target/classes/cn/unizk/service/JkStoreService.class differ diff --git a/applet/target/classes/cn/unizk/service/PayService.class b/applet/target/classes/cn/unizk/service/PayService.class new file mode 100644 index 0000000..a3b42ba Binary files /dev/null and b/applet/target/classes/cn/unizk/service/PayService.class differ diff --git a/applet/target/classes/cn/unizk/service/ProductCarouselService.class b/applet/target/classes/cn/unizk/service/ProductCarouselService.class new file mode 100644 index 0000000..8fcca16 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/ProductCarouselService.class differ diff --git a/applet/target/classes/cn/unizk/service/QuestionService.class b/applet/target/classes/cn/unizk/service/QuestionService.class new file mode 100644 index 0000000..8b29a2a Binary files /dev/null and b/applet/target/classes/cn/unizk/service/QuestionService.class differ diff --git a/applet/target/classes/cn/unizk/service/SysDictService.class b/applet/target/classes/cn/unizk/service/SysDictService.class new file mode 100644 index 0000000..13bb002 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/SysDictService.class differ diff --git a/applet/target/classes/cn/unizk/service/UserAddressService.class b/applet/target/classes/cn/unizk/service/UserAddressService.class new file mode 100644 index 0000000..04d3baf Binary files /dev/null and b/applet/target/classes/cn/unizk/service/UserAddressService.class differ diff --git a/applet/target/classes/cn/unizk/service/WebTtsWsService$1.class b/applet/target/classes/cn/unizk/service/WebTtsWsService$1.class new file mode 100644 index 0000000..72968e6 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/WebTtsWsService$1.class differ diff --git a/applet/target/classes/cn/unizk/service/WebTtsWsService$Data.class b/applet/target/classes/cn/unizk/service/WebTtsWsService$Data.class new file mode 100644 index 0000000..2473a11 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/WebTtsWsService$Data.class differ diff --git a/applet/target/classes/cn/unizk/service/WebTtsWsService$JsonParse.class b/applet/target/classes/cn/unizk/service/WebTtsWsService$JsonParse.class new file mode 100644 index 0000000..71478b2 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/WebTtsWsService$JsonParse.class differ diff --git a/applet/target/classes/cn/unizk/service/WebTtsWsService$MyThread.class b/applet/target/classes/cn/unizk/service/WebTtsWsService$MyThread.class new file mode 100644 index 0000000..28a60fe Binary files /dev/null and b/applet/target/classes/cn/unizk/service/WebTtsWsService$MyThread.class differ diff --git a/applet/target/classes/cn/unizk/service/WebTtsWsService.class b/applet/target/classes/cn/unizk/service/WebTtsWsService.class new file mode 100644 index 0000000..f3eee55 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/WebTtsWsService.class differ diff --git a/applet/target/classes/cn/unizk/service/WxAppletLoginService.class b/applet/target/classes/cn/unizk/service/WxAppletLoginService.class new file mode 100644 index 0000000..874cf58 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/WxAppletLoginService.class differ diff --git a/applet/target/classes/cn/unizk/service/WxAuthService.class b/applet/target/classes/cn/unizk/service/WxAuthService.class new file mode 100644 index 0000000..c1804c6 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/WxAuthService.class differ diff --git a/applet/target/classes/cn/unizk/service/WxUserService.class b/applet/target/classes/cn/unizk/service/WxUserService.class new file mode 100644 index 0000000..4e92b93 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/WxUserService.class differ diff --git a/applet/target/classes/cn/unizk/service/WxUserSessionService.class b/applet/target/classes/cn/unizk/service/WxUserSessionService.class new file mode 100644 index 0000000..c1aab34 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/WxUserSessionService.class differ diff --git a/applet/target/classes/cn/unizk/service/impl/AIAdviceServiceImpl$1.class b/applet/target/classes/cn/unizk/service/impl/AIAdviceServiceImpl$1.class new file mode 100644 index 0000000..4ed2137 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/impl/AIAdviceServiceImpl$1.class differ diff --git a/applet/target/classes/cn/unizk/service/impl/AIAdviceServiceImpl.class b/applet/target/classes/cn/unizk/service/impl/AIAdviceServiceImpl.class new file mode 100644 index 0000000..eb700b2 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/impl/AIAdviceServiceImpl.class differ diff --git a/applet/target/classes/cn/unizk/service/impl/ComboServiceImpl.class b/applet/target/classes/cn/unizk/service/impl/ComboServiceImpl.class new file mode 100644 index 0000000..bb26d81 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/impl/ComboServiceImpl.class differ diff --git a/applet/target/classes/cn/unizk/service/impl/DeviceServiceImpl.class b/applet/target/classes/cn/unizk/service/impl/DeviceServiceImpl.class new file mode 100644 index 0000000..942c049 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/impl/DeviceServiceImpl.class differ diff --git a/applet/target/classes/cn/unizk/service/impl/DoubaoServiceImpl.class b/applet/target/classes/cn/unizk/service/impl/DoubaoServiceImpl.class new file mode 100644 index 0000000..5b4b503 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/impl/DoubaoServiceImpl.class differ diff --git a/applet/target/classes/cn/unizk/service/impl/FileServiceImpl.class b/applet/target/classes/cn/unizk/service/impl/FileServiceImpl.class new file mode 100644 index 0000000..5746258 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/impl/FileServiceImpl.class differ diff --git a/applet/target/classes/cn/unizk/service/impl/JkPhysioServiceImpl.class b/applet/target/classes/cn/unizk/service/impl/JkPhysioServiceImpl.class new file mode 100644 index 0000000..b6cfe1d Binary files /dev/null and b/applet/target/classes/cn/unizk/service/impl/JkPhysioServiceImpl.class differ diff --git a/applet/target/classes/cn/unizk/service/impl/JkProductServiceImpl.class b/applet/target/classes/cn/unizk/service/impl/JkProductServiceImpl.class new file mode 100644 index 0000000..c6561c3 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/impl/JkProductServiceImpl.class differ diff --git a/applet/target/classes/cn/unizk/service/impl/JkStoreServiceImpl.class b/applet/target/classes/cn/unizk/service/impl/JkStoreServiceImpl.class new file mode 100644 index 0000000..955110c Binary files /dev/null and b/applet/target/classes/cn/unizk/service/impl/JkStoreServiceImpl.class differ diff --git a/applet/target/classes/cn/unizk/service/impl/ProductCarouselServiceImpl.class b/applet/target/classes/cn/unizk/service/impl/ProductCarouselServiceImpl.class new file mode 100644 index 0000000..cc893c5 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/impl/ProductCarouselServiceImpl.class differ diff --git a/applet/target/classes/cn/unizk/service/impl/QuestionServiceImpl.class b/applet/target/classes/cn/unizk/service/impl/QuestionServiceImpl.class new file mode 100644 index 0000000..849ec40 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/impl/QuestionServiceImpl.class differ diff --git a/applet/target/classes/cn/unizk/service/impl/SysDictServiceImpl.class b/applet/target/classes/cn/unizk/service/impl/SysDictServiceImpl.class new file mode 100644 index 0000000..0f41b2a Binary files /dev/null and b/applet/target/classes/cn/unizk/service/impl/SysDictServiceImpl.class differ diff --git a/applet/target/classes/cn/unizk/service/impl/UserAddressServiceImpl.class b/applet/target/classes/cn/unizk/service/impl/UserAddressServiceImpl.class new file mode 100644 index 0000000..124c677 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/impl/UserAddressServiceImpl.class differ diff --git a/applet/target/classes/cn/unizk/service/impl/WxAppletLoginServiceImpl.class b/applet/target/classes/cn/unizk/service/impl/WxAppletLoginServiceImpl.class new file mode 100644 index 0000000..40336af Binary files /dev/null and b/applet/target/classes/cn/unizk/service/impl/WxAppletLoginServiceImpl.class differ diff --git a/applet/target/classes/cn/unizk/service/impl/WxUserServiceImpl.class b/applet/target/classes/cn/unizk/service/impl/WxUserServiceImpl.class new file mode 100644 index 0000000..3865079 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/impl/WxUserServiceImpl.class differ diff --git a/applet/target/classes/cn/unizk/service/impl/WxUserSessionServiceImpl.class b/applet/target/classes/cn/unizk/service/impl/WxUserSessionServiceImpl.class new file mode 100644 index 0000000..1f28ef6 Binary files /dev/null and b/applet/target/classes/cn/unizk/service/impl/WxUserSessionServiceImpl.class differ diff --git a/applet/target/classes/cn/unizk/utils/JkHttpClient.class b/applet/target/classes/cn/unizk/utils/JkHttpClient.class new file mode 100644 index 0000000..4f6b7b1 Binary files /dev/null and b/applet/target/classes/cn/unizk/utils/JkHttpClient.class differ diff --git a/applet/target/classes/cn/unizk/utils/JkSecurityUtil.class b/applet/target/classes/cn/unizk/utils/JkSecurityUtil.class new file mode 100644 index 0000000..284583c Binary files /dev/null and b/applet/target/classes/cn/unizk/utils/JkSecurityUtil.class differ diff --git a/applet/target/classes/cn/unizk/utils/JwtUtil.class b/applet/target/classes/cn/unizk/utils/JwtUtil.class new file mode 100644 index 0000000..70b92e6 Binary files /dev/null and b/applet/target/classes/cn/unizk/utils/JwtUtil.class differ diff --git a/applet/target/classes/cn/unizk/utils/OkHttpUtil.class b/applet/target/classes/cn/unizk/utils/OkHttpUtil.class new file mode 100644 index 0000000..9c69f05 Binary files /dev/null and b/applet/target/classes/cn/unizk/utils/OkHttpUtil.class differ diff --git a/applet/target/classes/cn/unizk/utils/RSAUtil.class b/applet/target/classes/cn/unizk/utils/RSAUtil.class new file mode 100644 index 0000000..7add55c Binary files /dev/null and b/applet/target/classes/cn/unizk/utils/RSAUtil.class differ diff --git a/applet/target/classes/cn/unizk/wxPay/constants/WxPayConstant.class b/applet/target/classes/cn/unizk/wxPay/constants/WxPayConstant.class new file mode 100644 index 0000000..2993b66 Binary files /dev/null and b/applet/target/classes/cn/unizk/wxPay/constants/WxPayConstant.class differ diff --git a/applet/target/classes/cn/unizk/wxPay/service/WxPayOrderService.class b/applet/target/classes/cn/unizk/wxPay/service/WxPayOrderService.class new file mode 100644 index 0000000..624a517 Binary files /dev/null and b/applet/target/classes/cn/unizk/wxPay/service/WxPayOrderService.class differ diff --git a/applet/target/classes/cn/unizk/wxPay/service/impl/WxPayServiceImpl.class b/applet/target/classes/cn/unizk/wxPay/service/impl/WxPayServiceImpl.class new file mode 100644 index 0000000..e5e971c Binary files /dev/null and b/applet/target/classes/cn/unizk/wxPay/service/impl/WxPayServiceImpl.class differ diff --git a/applet/target/classes/cn/unizk/wxPay/utils/AesUtil.class b/applet/target/classes/cn/unizk/wxPay/utils/AesUtil.class new file mode 100644 index 0000000..e7b119d Binary files /dev/null and b/applet/target/classes/cn/unizk/wxPay/utils/AesUtil.class differ diff --git a/applet/target/classes/cn/unizk/wxPay/utils/WXPayUtility$1.class b/applet/target/classes/cn/unizk/wxPay/utils/WXPayUtility$1.class new file mode 100644 index 0000000..5e80165 Binary files /dev/null and b/applet/target/classes/cn/unizk/wxPay/utils/WXPayUtility$1.class differ diff --git a/applet/target/classes/cn/unizk/wxPay/utils/WXPayUtility$2.class b/applet/target/classes/cn/unizk/wxPay/utils/WXPayUtility$2.class new file mode 100644 index 0000000..100b544 Binary files /dev/null and b/applet/target/classes/cn/unizk/wxPay/utils/WXPayUtility$2.class differ diff --git a/applet/target/classes/cn/unizk/wxPay/utils/WXPayUtility$ApiException.class b/applet/target/classes/cn/unizk/wxPay/utils/WXPayUtility$ApiException.class new file mode 100644 index 0000000..c5c6cd2 Binary files /dev/null and b/applet/target/classes/cn/unizk/wxPay/utils/WXPayUtility$ApiException.class differ diff --git a/applet/target/classes/cn/unizk/wxPay/utils/WXPayUtility$Notification$Resource.class b/applet/target/classes/cn/unizk/wxPay/utils/WXPayUtility$Notification$Resource.class new file mode 100644 index 0000000..6fa845f Binary files /dev/null and b/applet/target/classes/cn/unizk/wxPay/utils/WXPayUtility$Notification$Resource.class differ diff --git a/applet/target/classes/cn/unizk/wxPay/utils/WXPayUtility$Notification.class b/applet/target/classes/cn/unizk/wxPay/utils/WXPayUtility$Notification.class new file mode 100644 index 0000000..bfaa4c5 Binary files /dev/null and b/applet/target/classes/cn/unizk/wxPay/utils/WXPayUtility$Notification.class differ diff --git a/applet/target/classes/cn/unizk/wxPay/utils/WXPayUtility.class b/applet/target/classes/cn/unizk/wxPay/utils/WXPayUtility.class new file mode 100644 index 0000000..02f7cee Binary files /dev/null and b/applet/target/classes/cn/unizk/wxPay/utils/WXPayUtility.class differ diff --git a/applet/target/classes/cn/unizk/wxPay/utils/WxReqMessageBodyUtil.class b/applet/target/classes/cn/unizk/wxPay/utils/WxReqMessageBodyUtil.class new file mode 100644 index 0000000..329f72c Binary files /dev/null and b/applet/target/classes/cn/unizk/wxPay/utils/WxReqMessageBodyUtil.class differ diff --git a/applet/target/classes/cn/unizk/wxPay/utils/WxSignatureUtil.class b/applet/target/classes/cn/unizk/wxPay/utils/WxSignatureUtil.class new file mode 100644 index 0000000..19d9b46 Binary files /dev/null and b/applet/target/classes/cn/unizk/wxPay/utils/WxSignatureUtil.class differ diff --git a/applet/target/classes/cn/unizk/wxPay/vo/WxPlaceOrderResVO.class b/applet/target/classes/cn/unizk/wxPay/vo/WxPlaceOrderResVO.class new file mode 100644 index 0000000..96ca0e0 Binary files /dev/null and b/applet/target/classes/cn/unizk/wxPay/vo/WxPlaceOrderResVO.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/config/FileUploadConfig.class b/applet/target/classes/cn/unizk/xunfupay/config/FileUploadConfig.class new file mode 100644 index 0000000..f30df98 Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/config/FileUploadConfig.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/config/IboxOpenConfig.class b/applet/target/classes/cn/unizk/xunfupay/config/IboxOpenConfig.class new file mode 100644 index 0000000..f4377fe Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/config/IboxOpenConfig.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/dto/AddFzAccountDTO$Image.class b/applet/target/classes/cn/unizk/xunfupay/dto/AddFzAccountDTO$Image.class new file mode 100644 index 0000000..d6f5938 Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/dto/AddFzAccountDTO$Image.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/dto/AddFzAccountDTO.class b/applet/target/classes/cn/unizk/xunfupay/dto/AddFzAccountDTO.class new file mode 100644 index 0000000..c8e5f9d Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/dto/AddFzAccountDTO.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/dto/ApplyFzReqDTO$Detail.class b/applet/target/classes/cn/unizk/xunfupay/dto/ApplyFzReqDTO$Detail.class new file mode 100644 index 0000000..3b00237 Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/dto/ApplyFzReqDTO$Detail.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/dto/ApplyFzReqDTO.class b/applet/target/classes/cn/unizk/xunfupay/dto/ApplyFzReqDTO.class new file mode 100644 index 0000000..018cc94 Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/dto/ApplyFzReqDTO.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/dto/PaySuccessCallbackDTO.class b/applet/target/classes/cn/unizk/xunfupay/dto/PaySuccessCallbackDTO.class new file mode 100644 index 0000000..141c507 Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/dto/PaySuccessCallbackDTO.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/dto/QueryOrderTradeDetailResponse.class b/applet/target/classes/cn/unizk/xunfupay/dto/QueryOrderTradeDetailResponse.class new file mode 100644 index 0000000..3aa591b Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/dto/QueryOrderTradeDetailResponse.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/dto/XBaseResult.class b/applet/target/classes/cn/unizk/xunfupay/dto/XBaseResult.class new file mode 100644 index 0000000..1521c99 Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/dto/XBaseResult.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/dto/XunFuPlaceOrderDTO$PayInfo.class b/applet/target/classes/cn/unizk/xunfupay/dto/XunFuPlaceOrderDTO$PayInfo.class new file mode 100644 index 0000000..a37fa09 Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/dto/XunFuPlaceOrderDTO$PayInfo.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/dto/XunFuPlaceOrderDTO.class b/applet/target/classes/cn/unizk/xunfupay/dto/XunFuPlaceOrderDTO.class new file mode 100644 index 0000000..e47a655 Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/dto/XunFuPlaceOrderDTO.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/dto/XunFuPlaceOrderReqDTO.class b/applet/target/classes/cn/unizk/xunfupay/dto/XunFuPlaceOrderReqDTO.class new file mode 100644 index 0000000..6e65d4b Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/dto/XunFuPlaceOrderReqDTO.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/properties/XunFuProperties$BigBusiness.class b/applet/target/classes/cn/unizk/xunfupay/properties/XunFuProperties$BigBusiness.class new file mode 100644 index 0000000..5fc901a Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/properties/XunFuProperties$BigBusiness.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/properties/XunFuProperties$Fenzhang.class b/applet/target/classes/cn/unizk/xunfupay/properties/XunFuProperties$Fenzhang.class new file mode 100644 index 0000000..35165f7 Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/properties/XunFuProperties$Fenzhang.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/properties/XunFuProperties.class b/applet/target/classes/cn/unizk/xunfupay/properties/XunFuProperties.class new file mode 100644 index 0000000..8e32fd3 Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/properties/XunFuProperties.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/util/FileUploadUtil$FileTokenVo.class b/applet/target/classes/cn/unizk/xunfupay/util/FileUploadUtil$FileTokenVo.class new file mode 100644 index 0000000..e1018b8 Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/util/FileUploadUtil$FileTokenVo.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/util/FileUploadUtil$FileUpResDataVo.class b/applet/target/classes/cn/unizk/xunfupay/util/FileUploadUtil$FileUpResDataVo.class new file mode 100644 index 0000000..889e515 Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/util/FileUploadUtil$FileUpResDataVo.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/util/FileUploadUtil$FileUploadResultVo.class b/applet/target/classes/cn/unizk/xunfupay/util/FileUploadUtil$FileUploadResultVo.class new file mode 100644 index 0000000..d3b6174 Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/util/FileUploadUtil$FileUploadResultVo.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/util/FileUploadUtil.class b/applet/target/classes/cn/unizk/xunfupay/util/FileUploadUtil.class new file mode 100644 index 0000000..d8b7be5 Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/util/FileUploadUtil.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/util/SignRequestUtil.class b/applet/target/classes/cn/unizk/xunfupay/util/SignRequestUtil.class new file mode 100644 index 0000000..83dcf49 Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/util/SignRequestUtil.class differ diff --git a/applet/target/classes/cn/unizk/xunfupay/util/XunFuUtil.class b/applet/target/classes/cn/unizk/xunfupay/util/XunFuUtil.class new file mode 100644 index 0000000..700dc2d Binary files /dev/null and b/applet/target/classes/cn/unizk/xunfupay/util/XunFuUtil.class differ diff --git a/applet/target/classes/mapper/Conversation.xml b/applet/target/classes/mapper/Conversation.xml new file mode 100644 index 0000000..cda8c8d --- /dev/null +++ b/applet/target/classes/mapper/Conversation.xml @@ -0,0 +1,42 @@ + + + + + + + + insert into conversation + + session_id, user_id,qa_json,symptom_summary + + + #{sessionId}, #{userId},#{qaJson},#{symptomSummary} + + + + + update conversation + + + status = #{status}, + + + ai_diagnosis = #{aiDiagnosis}, + + + ai_treatment = #{aiTreatment}, + + + where session_id = #{sessionId} + + + + + + + diff --git a/applet/target/classes/mapper/HuifuDataMapper.xml b/applet/target/classes/mapper/HuifuDataMapper.xml new file mode 100644 index 0000000..a5c8a15 --- /dev/null +++ b/applet/target/classes/mapper/HuifuDataMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/applet/target/classes/mapper/JkPhysioMapper.xml b/applet/target/classes/mapper/JkPhysioMapper.xml new file mode 100644 index 0000000..44df5a5 --- /dev/null +++ b/applet/target/classes/mapper/JkPhysioMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/applet/target/classes/mapper/JkProductMapper.xml b/applet/target/classes/mapper/JkProductMapper.xml new file mode 100644 index 0000000..3518745 --- /dev/null +++ b/applet/target/classes/mapper/JkProductMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/applet/target/classes/mapper/Message.xml b/applet/target/classes/mapper/Message.xml new file mode 100644 index 0000000..70022a8 --- /dev/null +++ b/applet/target/classes/mapper/Message.xml @@ -0,0 +1,37 @@ + + + + + + + + insert into message + + session_id, sort1, ai_message, user_message, + + + #{sessionId}, #{sort}, #{aiMessage}, #{userMessage} + + + + + + + update message + + + status = #{status}, + + + where id = #{id} + + + + + + + diff --git a/applet/target/classes/mapper/SubHealthDietaryRegulationMapper.xml b/applet/target/classes/mapper/SubHealthDietaryRegulationMapper.xml new file mode 100644 index 0000000..543b1fd --- /dev/null +++ b/applet/target/classes/mapper/SubHealthDietaryRegulationMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/applet/target/classes/mapper/SysDictMapper.xml b/applet/target/classes/mapper/SysDictMapper.xml new file mode 100644 index 0000000..9c902a8 --- /dev/null +++ b/applet/target/classes/mapper/SysDictMapper.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + dict_code, dict_value, dict_type, create_time + + + + delete from sys_dict + where dict_code = #{dictCode,jdbcType=INTEGER} + + + + insert into sys_dict + + + dict_value, + + + dict_type, + + + create_time, + + + + + #{dictValue,jdbcType=VARCHAR}, + + + #{dictType,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + + + update sys_dict + + + dict_value = #{dictValue,jdbcType=VARCHAR}, + + + dict_type = #{dictType,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + where dict_code = #{dictCode,jdbcType=INTEGER} + + + update sys_dict + set dict_value = #{dictValue,jdbcType=VARCHAR}, + dict_type = #{dictType,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=TIMESTAMP} + where dict_code = #{dictCode,jdbcType=INTEGER} + + diff --git a/applet/target/classes/mapper/WxOrderItemMapper.xml b/applet/target/classes/mapper/WxOrderItemMapper.xml new file mode 100644 index 0000000..d55c352 --- /dev/null +++ b/applet/target/classes/mapper/WxOrderItemMapper.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/applet/target/classes/mapper/WxOrderMapper.xml b/applet/target/classes/mapper/WxOrderMapper.xml new file mode 100644 index 0000000..07616e4 --- /dev/null +++ b/applet/target/classes/mapper/WxOrderMapper.xml @@ -0,0 +1,81 @@ + + + + + + + diff --git a/applet/target/classes/mapper/WxUserMapper.xml b/applet/target/classes/mapper/WxUserMapper.xml new file mode 100644 index 0000000..6d61e52 --- /dev/null +++ b/applet/target/classes/mapper/WxUserMapper.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/applet/target/classes/mapper/WxUserSessionMapper.xml b/applet/target/classes/mapper/WxUserSessionMapper.xml new file mode 100644 index 0000000..27446d8 --- /dev/null +++ b/applet/target/classes/mapper/WxUserSessionMapper.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/applet/target/classes/static/h5/combo.html b/applet/target/classes/static/h5/combo.html new file mode 100644 index 0000000..6d5c4cf --- /dev/null +++ b/applet/target/classes/static/h5/combo.html @@ -0,0 +1,31 @@ + + + + + + 吉客中医 + + + + +
    +
    + +
    + +

    请选择服务套餐:

    + +
    +
      +
      + +
      + 去使用 +
      +
      + + + + + \ No newline at end of file diff --git a/applet/target/classes/static/h5/css/combo.css b/applet/target/classes/static/h5/css/combo.css new file mode 100644 index 0000000..23010fd --- /dev/null +++ b/applet/target/classes/static/h5/css/combo.css @@ -0,0 +1,102 @@ +* { + padding: 0; + margin: 0; +} + +li { + list-style: none; +} + +.flex-column { + flex-direction: column; +} + +.container { + height: 100dvh; +} + +.header { + text-align: center; + position: sticky; + top: 0; + left: 0; + right: 0; + background-color: #ffffff; + box-shadow: 0px 0px 3px rgba(0, 0, 0, .12); + height: 70px; +} + +.header img { + height: 100%; +} + +.page-title { + padding-top: 20px; + padding-left: 10px; + padding-bottom: 10px; + background-color: #ffffff; +} + +.main { + flex: 1; + overflow: auto; +} + +.flex { + display: flex; +} + +.combo-list-item { + box-shadow: 0px 0px 5px rgba(0, 0, 0, .12); + margin: 15px 10px 0; + padding: 15px; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + line-height: 2; + transition: all .5; +} + +.combo-list-item.active { + box-shadow: 0px 0px 5px #3d1b49; +} + +.combo-list-item:first-child { + margin-top: 10px; +} + +.combo-item-label { + flex: 1; +} + +.combo-item-content { + flex: 1; + text-align: right; +} + +.footer { + width: 100%; + height: 80px; + background-color: #ffffff; + box-shadow: 0px 0px 3px rgba(0, 0, 0, .12); +} + +.go-use-btn { + all: unset; + display: flex; + align-items: center; + justify-content: center; + width: 80%; + height: 80%; + margin: auto; + background-color: #3d1b49; + color: #ffffff; + text-align: center; + border-radius: 5px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; +} \ No newline at end of file diff --git a/applet/target/classes/static/h5/css/index.css b/applet/target/classes/static/h5/css/index.css new file mode 100644 index 0000000..286a9b9 --- /dev/null +++ b/applet/target/classes/static/h5/css/index.css @@ -0,0 +1,90 @@ +* { + padding: 0; + margin: 0; +} + +.flex { + display: flex; +} + +.flex-column { + flex-direction: column; +} + +.container { + height: 100dvh; +} + +.header { + text-align: center; + margin-top: 10vh; + background-color: #ffffff; + height: 20vw; +} + +.header img { + height: 100%; +} + +.main { + padding-top: 10vh; + flex-wrap: wrap; +} + +input { + all: unset; +} + +.valid-container, +.phone-input { + margin: 0 auto 5vw; + width: 70vw; + height: 10vw; + border: 1px solid #dcdfe6; + border-radius: 20px; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + -ms-border-radius: 20px; + -o-border-radius: 20px; +} + +.valid-container { + overflow: hidden; +} + +.valid-input, +.phone-input { + padding-left: 15px; + box-sizing: border-box; +} + +.valid-input { + width: 60%; +} + +.valid-btn { + background-color: #3d1b49; + color:#ffffff; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + width: 40%; + box-sizing: border-box; +} + +.login-btn { + margin: 0 auto 5vw; + width: 70vw; + height: 10vw; + background-color: #3d1b49; + display: flex; + align-items: center; + justify-content: center; + color:#ffffff; + border-radius: 20px; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + -ms-border-radius: 20px; + -o-border-radius: 20px; +} diff --git a/applet/target/classes/static/h5/css/toast.css b/applet/target/classes/static/h5/css/toast.css new file mode 100644 index 0000000..30b3293 --- /dev/null +++ b/applet/target/classes/static/h5/css/toast.css @@ -0,0 +1,31 @@ +.my-toast { + opacity: 0; + transition: opacity .8s; + position: fixed; + top: 40%; + left: 50%; + color: #ffffff; + text-align: center; + padding: 5vw; + border-radius: 5px; + max-width: 60vw; + box-sizing: border-box; + background-color: #000000cc; + transform: translate(-50%); + -webkit-transform: translate(-50%); + -moz-transform: translate(-50%); + -ms-transform: translate(-50%); + -o-transform: translate(-50%); + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + -webkit-transition: opacity .8s; + -moz-transition: opacity .8s; + -ms-transition: opacity .8s; + -o-transition: opacity .8s; +} + +.my-toast.active { + opacity: 1; +} \ No newline at end of file diff --git a/applet/target/classes/static/h5/index.html b/applet/target/classes/static/h5/index.html new file mode 100644 index 0000000..e514e52 --- /dev/null +++ b/applet/target/classes/static/h5/index.html @@ -0,0 +1,33 @@ + + + + + + 登录 + + + + +
      +
      + +
      + +
      + +
      + +
      发送验证码
      +
      + +
      +
      + + + + \ No newline at end of file diff --git a/applet/target/classes/static/h5/js/combo.js b/applet/target/classes/static/h5/js/combo.js new file mode 100644 index 0000000..4aba494 --- /dev/null +++ b/applet/target/classes/static/h5/js/combo.js @@ -0,0 +1,74 @@ +import { showToast } from './toast.js' + +// 接口api域名 +import { host } from './url.js' + +// 获取列表元素 +const elementUl = document.querySelector('.combo-list') + +const setLiElement = item => { + const {comboDuration, comboPrice, comboName} = item + const li = document.createElement('li') + li.setAttribute('class', `combo-list-item combo-${item.orderId}`) + li.innerHTML = ` +

      + 名称: + ${comboName} +

      +

      + 时长: + ${comboDuration} 分钟 +

      +

      + 价格: + ${comboPrice} 元 +

      + ` + elementUl.appendChild(li) +} + +let activeCombo = '' +// 添加列表点击事件 +elementUl.addEventListener('click', event => { + const id = event.target.dataset.id + if (!id) { + return; + } + activeCombo = id + updateCurrentCombo(id) +}) + +// 更新样式 +const updateCurrentCombo = (id) => { + document.querySelector('.combo-list-item.active')?.classList.remove('active') + document.querySelector(`.combo-${id}`).classList.add('active') +} + +// 点击去使用 +document.querySelector('.go-use-btn').addEventListener('click', async () => { + if (!activeCombo) { + return window.$toast('请选择套餐') + } + if (window.confirm('使用后该套餐将失效,请您确认')) { + try { + const res = await (await fetch(`../h5/writeOff?orderId=${activeCombo}`, { + headers: { + token: sessionStorage.getItem('token') + } + })).json() + const { code, message } = res + if (code !== 200) { + return showToast(message) + } + window.location.href = 'https://www.peaktcm.com/open-miniprogram.html' + } catch (error) { + console.log(error) + } + } +}) + +// 获取页面数据 +const getCombosData = async () => { + JSON.parse(sessionStorage.getItem('combo-list')).forEach((item, index) => setLiElement(item, index)) +} +getCombosData() diff --git a/applet/target/classes/static/h5/js/index.js b/applet/target/classes/static/h5/js/index.js new file mode 100644 index 0000000..a69f689 --- /dev/null +++ b/applet/target/classes/static/h5/js/index.js @@ -0,0 +1,72 @@ +import {showToast} from './toast.js' + +// 接口api域名 +import { host } from './url.js' + +// 请求状态 +let loading = false + +// 解析url参数 +const urlParams = new URLSearchParams(window.location.search) +const params = { + deviceId: '' +} +for (let [key, value] of urlParams) { + params[key] = value +} +const { deviceId } = params + +console.log('urlParams=',window.location.search) +console.log('deviceId=',deviceId) + +// 发送验证码 +document.querySelector('.valid-btn').addEventListener('click', async () => { + const { value } = document.querySelector('.phone-input') + if (!value || !validPhone(value)) { + return showToast('请输入正确的手机号') + } + if (loading) { + return; + } + loading = true + try { + const res = await (await fetch(`../h5/sendPhoneCode?phoneNumber=${value}`)).json() + const { code, message } = res + if (code !== 200) { + return showToast(message) + } + showToast('验证码已发送') + } catch (error) { + console.log(error) + showToast('网络请求失败') + } finally { + loading = false + } +}) + +// 点击登录 +document.querySelector('.login-btn').addEventListener('click', async () => { + const { value: validCode } = document.querySelector('.valid-input') + const { value: phoneNumber } = document.querySelector('.phone-input') + try { + const res = await fetch(`../h5/getCombos?deviceId=${deviceId}&phoneNumber=${phoneNumber}&code=${validCode}`).then(response => { + const token = response.headers.get('Authorization') + if (token) { + sessionStorage.setItem('token', token) + } + return response.json() + }) + const {code, message, data} = res + if (code !== 200) { + return showToast(message) + } + sessionStorage.setItem('combo-list', JSON.stringify(data)) + window.location.href = 'combo.html' + } catch (error) { + console.log(error) + } +}) + +const validPhone = (phone) => { + return /^(?:(?:\+|00)86)?1\d{10}$/.test(phone) +} diff --git a/applet/target/classes/static/h5/js/toast.js b/applet/target/classes/static/h5/js/toast.js new file mode 100644 index 0000000..d341a26 --- /dev/null +++ b/applet/target/classes/static/h5/js/toast.js @@ -0,0 +1,28 @@ +let timeout = null +/** + * @param {String} message 提示信息 + */ +const showToast = (message) => { + const curr = document.querySelector('.my-toast') + if (curr) { + document.querySelector('.container').removeChild(curr) + clearTimeout(timeout) + timeout = null + } + requestAnimationFrame(() => { + let toast = document.createElement('div') + toast.classList.add('my-toast') + toast.innerText = message + document.querySelector('.container').appendChild(toast) + requestAnimationFrame(() => { + toast.classList.add('active') + }) + timeout = setTimeout(()=> { + document.querySelector('.container').removeChild(toast) + toast = null + clearTimeout(timeout) + timeout = null + }, 1800) + }) +} +export {showToast} \ No newline at end of file diff --git a/applet/target/classes/static/h5/js/url.js b/applet/target/classes/static/h5/js/url.js new file mode 100644 index 0000000..742411a --- /dev/null +++ b/applet/target/classes/static/h5/js/url.js @@ -0,0 +1,4 @@ +const host = 'http://369.peaktcm.com' +// const host = 'http://192.168.0.6:8080' + +export { host } \ No newline at end of file diff --git a/applet/target/classes/static/h5/open-miniprogram.html b/applet/target/classes/static/h5/open-miniprogram.html new file mode 100644 index 0000000..907609e --- /dev/null +++ b/applet/target/classes/static/h5/open-miniprogram.html @@ -0,0 +1,202 @@ + + + 打开小程序 + + + + + + + + + + + + + + + + +
      + + + +
      + + \ No newline at end of file diff --git a/applet/target/classes/static/h5/pay.html b/applet/target/classes/static/h5/pay.html new file mode 100644 index 0000000..3070656 --- /dev/null +++ b/applet/target/classes/static/h5/pay.html @@ -0,0 +1,12 @@ + + + + + Title + +

      pay hello

      + + + + + diff --git a/applet/target/classes/static/h5/static/logo.png b/applet/target/classes/static/h5/static/logo.png new file mode 100644 index 0000000..1ae9763 Binary files /dev/null and b/applet/target/classes/static/h5/static/logo.png differ diff --git a/applet/target/maven-archiver/pom.properties b/applet/target/maven-archiver/pom.properties new file mode 100644 index 0000000..2678810 --- /dev/null +++ b/applet/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Tue Aug 25 11:33:07 CST 2026 +version=1.0.0 +groupId=cn.unizk +artifactId=applet diff --git a/applet/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/applet/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..94aea4d --- /dev/null +++ b/applet/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,141 @@ +cn\unizk\utils\JwtUtil.class +cn\unizk\service\impl\FileServiceImpl.class +cn\unizk\config\JkProperties.class +cn\unizk\mapper\ComboMapper.class +cn\unizk\service\JkPhysioService.class +cn\unizk\controller\WxPayController.class +cn\unizk\xunfupay\dto\AddFzAccountDTO.class +cn\unizk\wxPay\utils\WXPayUtility$1.class +cn\unizk\controller\GolfController.class +cn\unizk\service\impl\WxUserServiceImpl.class +cn\unizk\utils\JkSecurityUtil.class +META-INF\spring-configuration-metadata.json +cn\unizk\controller\HuiFuPayController.class +cn\unizk\constant\WxConstant.class +cn\unizk\controller\ComboController.class +cn\unizk\service\SysDictService.class +cn\unizk\wxPay\utils\WXPayUtility$Notification.class +cn\unizk\service\IAiService.class +cn\unizk\mapper\JkPhysioMapper.class +cn\unizk\xunfupay\dto\XBaseResult.class +cn\unizk\mapper\JkStoreMapper.class +cn\unizk\wxPay\constants\WxPayConstant.class +cn\unizk\huifupay\dto\HuifuPlaceOrderParamBaseDTO.class +cn\unizk\xunfupay\util\FileUploadUtil.class +cn\unizk\controller\RunningController.class +cn\unizk\controller\WxUserController.class +cn\unizk\service\DeviceService.class +cn\unizk\controller\WxDeviceController.class +cn\unizk\service\impl\WxUserSessionServiceImpl.class +cn\unizk\xunfupay\util\FileUploadUtil$FileUploadResultVo.class +cn\unizk\controller\SysDictController.class +cn\unizk\service\WebTtsWsService$Data.class +cn\unizk\huifupay\vo\ReportTypeVO.class +cn\unizk\mapper\FileMapper.class +cn\unizk\controller\MemberController.class +cn\unizk\mapper\SysDictMapper.class +cn\unizk\utils\OkHttpUtil.class +cn\unizk\service\impl\SysDictServiceImpl.class +cn\unizk\service\impl\AIAdviceServiceImpl$1.class +cn\unizk\wxPay\utils\AesUtil.class +cn\unizk\wxPay\utils\WXPayUtility.class +cn\unizk\service\PayService.class +cn\unizk\wxPay\utils\WxSignatureUtil.class +cn\unizk\huifupay\vo\RechargeVO.class +cn\unizk\huifupay\vo\DeviceScanPayVO.class +cn\unizk\controller\WechatPayController.class +cn\unizk\service\impl\DeviceServiceImpl.class +cn\unizk\config\ResourceConfig.class +cn\unizk\mapper\DeviceMapper.class +cn\unizk\service\AIAdviceService.class +cn\unizk\service\impl\WxAppletLoginServiceImpl.class +cn\unizk\service\impl\ProductCarouselServiceImpl.class +cn\unizk\xunfupay\dto\XunFuPlaceOrderDTO.class +cn\unizk\xunfupay\dto\QueryOrderTradeDetailResponse.class +cn\unizk\wxPay\service\impl\WxPayServiceImpl.class +cn\unizk\service\impl\JkProductServiceImpl.class +cn\unizk\xunfupay\util\FileUploadUtil$FileUpResDataVo.class +cn\unizk\utils\JkHttpClient.class +cn\unizk\huifupay\utils\HfUtil.class +cn\unizk\wxPay\utils\WXPayUtility$Notification$Resource.class +cn\unizk\mapper\ProductCarouselMapper.class +cn\unizk\huifupay\utils\HuifuSignUtil.class +cn\unizk\service\WxUserSessionService.class +cn\unizk\config\WxProperties$Pay.class +cn\unizk\service\WebTtsWsService$JsonParse.class +cn\unizk\config\WxProperties.class +cn\unizk\controller\JkStoreController.class +cn\unizk\interceptor\AppletLoginInterceptor.class +cn\unizk\service\impl\JkPhysioServiceImpl.class +cn\unizk\mapper\ConversationMapper.class +cn\unizk\wxPay\utils\WxReqMessageBodyUtil.class +cn\unizk\filter\JkCorsFilter.class +cn\unizk\service\WxAppletLoginService.class +cn\unizk\xunfupay\config\IboxOpenConfig.class +cn\unizk\mapper\QuestionMapper.class +cn\unizk\controller\PhysioController.class +cn\unizk\xunfupay\util\SignRequestUtil.class +cn\unizk\mapper\WxUserSessionMapper.class +cn\unizk\xunfupay\dto\PaySuccessCallbackDTO.class +cn\unizk\huifupay\service\HuiFuPayService.class +cn\unizk\controller\CourseStudyController.class +cn\unizk\service\impl\JkStoreServiceImpl.class +cn\unizk\service\WxUserService.class +cn\unizk\service\ProductCarouselService.class +cn\unizk\controller\ConsultationController.class +cn\unizk\service\UserAddressService.class +cn\unizk\xunfupay\config\FileUploadConfig.class +cn\unizk\controller\WxOrderController.class +cn\unizk\AIQuestioningApp.class +cn\unizk\controller\HuifuWebhookController.class +cn\unizk\service\impl\UserAddressServiceImpl.class +cn\unizk\service\WxAuthService.class +cn\unizk\xunfupay\util\FileUploadUtil$FileTokenVo.class +cn\unizk\scheduler\VideoProgressScheduler.class +cn\unizk\controller\ApplicationModuleController.class +cn\unizk\controller\H5PowerOnController.class +cn\unizk\wxPay\service\WxPayOrderService.class +cn\unizk\xunfupay\dto\XunFuPlaceOrderReqDTO.class +cn\unizk\controller\JkProductController.class +cn\unizk\controller\PhysioAppointmentController.class +cn\unizk\huifupay\config\properties\HuiFuProperties.class +cn\unizk\huifupay\service\HuiFuVendorPayService.class +cn\unizk\utils\RSAUtil.class +cn\unizk\service\WebTtsWsService$MyThread.class +cn\unizk\service\impl\AIAdviceServiceImpl.class +cn\unizk\controller\RatingController.class +cn\unizk\service\WebTtsWsService$1.class +cn\unizk\controller\DoubaoAIController.class +cn\unizk\xunfupay\dto\XunFuPlaceOrderDTO$PayInfo.class +cn\unizk\controller\AIAdviceController.class +cn\unizk\service\impl\QuestionServiceImpl.class +cn\unizk\xunfupay\dto\ApplyFzReqDTO$Detail.class +cn\unizk\mapper\JkProductMapper.class +cn\unizk\service\JkStoreService.class +cn\unizk\controller\HuiFuVendorPayController.class +cn\unizk\wxPay\vo\WxPlaceOrderResVO.class +cn\unizk\xunfupay\properties\XunFuProperties$BigBusiness.class +cn\unizk\mapper\UniBaseMapper.class +cn\unizk\xunfupay\properties\XunFuProperties$Fenzhang.class +cn\unizk\service\ComboService.class +cn\unizk\wxPay\utils\WXPayUtility$ApiException.class +cn\unizk\huifupay\dto\HuifuBaseResponse.class +cn\unizk\xunfupay\util\XunFuUtil.class +cn\unizk\xunfupay\dto\ApplyFzReqDTO.class +cn\unizk\xunfupay\properties\XunFuProperties.class +cn\unizk\controller\InventoryController.class +cn\unizk\huifupay\config\properties\HuiFuVendorProperties.class +cn\unizk\config\WxProperties$PlaceOrder.class +cn\unizk\wxPay\utils\WXPayUtility$2.class +cn\unizk\service\WebTtsWsService.class +cn\unizk\controller\WxAppletLoginController.class +cn\unizk\service\JkProductService.class +cn\unizk\service\FileService.class +cn\unizk\service\impl\ComboServiceImpl.class +cn\unizk\xunfupay\dto\AddFzAccountDTO$Image.class +cn\unizk\service\impl\DoubaoServiceImpl.class +cn\unizk\mapper\MessageMapper.class +cn\unizk\controller\H5ComboController.class +cn\unizk\controller\FileController.class +cn\unizk\controller\ClinicWorkLogController.class +cn\unizk\service\QuestionService.class diff --git a/applet/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/applet/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..0a3e89b --- /dev/null +++ b/applet/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,129 @@ +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\utils\JkHttpClient.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\ConsultationController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\huifupay\service\HuiFuPayService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\mapper\MessageMapper.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\xunfupay\dto\XunFuPlaceOrderReqDTO.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\H5ComboController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\interceptor\AppletLoginInterceptor.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\RatingController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\huifupay\vo\RechargeVO.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\config\JkProperties.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\mapper\JkPhysioMapper.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\impl\SysDictServiceImpl.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\WxUserSessionService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\wxPay\utils\WxSignatureUtil.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\AIQuestioningApp.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\HuifuWebhookController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\PhysioController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\xunfupay\dto\XBaseResult.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\impl\WxOrderServiceImpl.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\xunfupay\util\FileUploadUtil.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\JkPhysioService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\huifupay\config\properties\HuiFuProperties.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\huifupay\dto\HuifuBaseResponse.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\huifupay\service\HuiFuVendorPayService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\wxPay\vo\WxPlaceOrderResVO.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\huifupay\utils\HuifuSignUtil.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\impl\FileServiceImpl.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\PayService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\FileController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\wxPay\constants\WxPayConstant.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\HuiFuPayController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\HuiFuVendorPayController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\ApplicationModuleController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\mapper\FileMapper.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\scheduler\WxOrderCloseScheduler.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\WxPayController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\GolfController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\QuestionService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\utils\OkHttpUtil.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\DoubaoAIController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\DeviceService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\FileService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\constant\WxConstant.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\wxPay\service\impl\WxPayServiceImpl.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\xunfupay\dto\ApplyFzReqDTO.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\mapper\JkStoreMapper.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\filter\JkCorsFilter.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\SysDictService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\impl\AIAdviceServiceImpl.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\mapper\WxUserSessionMapper.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\utils\JkSecurityUtil.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\xunfupay\config\IboxOpenConfig.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\ClinicWorkLogController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\JkStoreController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\impl\UserAddressServiceImpl.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\ComboController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\WxAuthService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\xunfupay\config\FileUploadConfig.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\huifupay\config\properties\HuiFuVendorProperties.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\xunfupay\util\XunFuUtil.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\mapper\ComboMapper.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\ComboService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\huifupay\utils\HfUtil.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\IAiService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\impl\JkPhysioServiceImpl.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\mapper\WxOrderMapper.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\JkProductController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\impl\DoubaoServiceImpl.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\RunningController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\impl\WxUserSessionServiceImpl.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\mapper\ConversationMapper.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\impl\ProductCarouselServiceImpl.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\scheduler\VideoProgressScheduler.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\impl\QuestionServiceImpl.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\utils\RSAUtil.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\xunfupay\dto\AddFzAccountDTO.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\mapper\QuestionMapper.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\AIAdviceService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\AIAdviceController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\wxPay\utils\AesUtil.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\CourseStudyController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\H5PowerOnController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\WxOrderService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\xunfupay\dto\QueryOrderTradeDetailResponse.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\xunfupay\dto\PaySuccessCallbackDTO.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\ProductCarouselService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\huifupay\vo\ReportTypeVO.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\mapper\UniBaseMapper.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\xunfupay\dto\XunFuPlaceOrderDTO.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\config\WxProperties.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\JkStoreService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\WebTtsWsService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\wxPay\service\WxPayOrderService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\mapper\WxUserMapper.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\config\FilterConfig.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\WxOrderController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\huifupay\vo\DeviceScanPayVO.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\huifupay\dto\HuifuPlaceOrderParamBaseDTO.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\config\ResourceConfig.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\wxPay\vo\WxOrderVO.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\mapper\DeviceMapper.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\WxUserController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\impl\ComboServiceImpl.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\XunFuPayController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\mapper\ProductCarouselMapper.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\JkProductService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\impl\WxUserServiceImpl.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\SysDictController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\xunfupay\service\XunFuPayService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\WechatPayController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\impl\WxAppletLoginServiceImpl.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\xunfupay\properties\XunFuProperties.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\WxDeviceController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\impl\JkStoreServiceImpl.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\WxAppletLoginService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\UserAddressService.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\impl\JkProductServiceImpl.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\MemberController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\utils\JwtUtil.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\impl\DeviceServiceImpl.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\wxPay\utils\WxReqMessageBodyUtil.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\xunfupay\util\SignRequestUtil.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\WxAppletLoginController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\wxPay\utils\WXPayUtility.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\PhysioAppointmentController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\mapper\JkProductMapper.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\mapper\SysDictMapper.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\controller\InventoryController.java +E:\code\unizk\AI_Questioning\applet\src\main\java\cn\unizk\service\WxUserService.java diff --git a/applet/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/applet/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..785fc73 --- /dev/null +++ b/applet/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst @@ -0,0 +1,3 @@ +WxPayTest.class +Test.class +WxUserControllerTest.class diff --git a/applet/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/applet/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..1af2735 --- /dev/null +++ b/applet/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -0,0 +1,3 @@ +E:\code\unizk\AI_Questioning\applet\src\test\java\WxUserControllerTest.java +E:\code\unizk\AI_Questioning\applet\src\test\java\WxPayTest.java +E:\code\unizk\AI_Questioning\applet\src\test\java\Test.java diff --git a/applet/target/test-classes/Test.class b/applet/target/test-classes/Test.class new file mode 100644 index 0000000..49baf96 Binary files /dev/null and b/applet/target/test-classes/Test.class differ diff --git a/applet/target/test-classes/WxPayTest.class b/applet/target/test-classes/WxPayTest.class new file mode 100644 index 0000000..e22a63e Binary files /dev/null and b/applet/target/test-classes/WxPayTest.class differ diff --git a/applet/target/test-classes/WxUserControllerTest.class b/applet/target/test-classes/WxUserControllerTest.class new file mode 100644 index 0000000..a005773 Binary files /dev/null and b/applet/target/test-classes/WxUserControllerTest.class differ diff --git a/common/.mvn/jvm.config b/common/.mvn/jvm.config new file mode 100644 index 0000000..e69de29 diff --git a/common/.mvn/maven.config b/common/.mvn/maven.config new file mode 100644 index 0000000..e69de29 diff --git a/common/common.iml b/common/common.iml new file mode 100644 index 0000000..74f3f13 --- /dev/null +++ b/common/common.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/common/pom.xml b/common/pom.xml new file mode 100644 index 0000000..3f92786 --- /dev/null +++ b/common/pom.xml @@ -0,0 +1,176 @@ + + + + AI_Questioning + cn.unizk + 1.0.0 + + 4.0.0 + + common + + common + + http://www.example.com + + + UTF-8 + 8 + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.projectlombok + lombok + + + org.apache.commons + commons-lang3 + + + org.apache.commons + commons-collections4 + + + com.alibaba.fastjson2 + fastjson2 + + + org.apache.httpcomponents + httpclient + + + cn.hutool + hutool-all + + + com.google.code.gson + gson + + + + mysql + mysql-connector-java + + + + org.freemarker + freemarker + + + com.alibaba + druid-spring-boot-starter + + + org.springframework.boot + spring-boot-starter-data-jdbc + + + com.baomidou + mybatis-plus-boot-starter + + + com.baomidou + mybatis-plus-jsqlparser-4.9 + + + + com.baomidou + mybatis-plus-generator + + + com.aliyun + alibabacloud-dysmsapi20170525 + + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + + com.esotericsoftware + kryo + + + + io.minio + minio + + + com.squareup.okhttp3 + okhttp + + + + + + com.squareup.okhttp3 + okhttp + + + + + com.alibaba + easyexcel + + + + net.coobird + thumbnailator + + + + + org.springframework.boot + spring-boot-starter-validation + + + + com.google.zxing + core + + + + com.aliyun + alibabacloud-sts20150401 + + + + + com.huaweicloud + esdk-obs-java-bundle + 3.25.10 + compile + + + + + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + diff --git a/common/src/main/java/cn/unizk/cache/KryoRedisSerializer.java b/common/src/main/java/cn/unizk/cache/KryoRedisSerializer.java new file mode 100644 index 0000000..a3320e6 --- /dev/null +++ b/common/src/main/java/cn/unizk/cache/KryoRedisSerializer.java @@ -0,0 +1,69 @@ +package cn.unizk.cache; +import com.esotericsoftware.kryo.Kryo; +import com.esotericsoftware.kryo.io.Input; +import com.esotericsoftware.kryo.io.Output; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.SerializationException; + +import java.io.ByteArrayOutputStream; + +@Slf4j +public class KryoRedisSerializer implements RedisSerializer { + + private static final byte[] EMPTY_BYTE_ARRAY = new byte[0]; + + private static final ThreadLocal kryos = ThreadLocal.withInitial(() -> { + Kryo kryo = new Kryo(); + kryo.setRegistrationRequired(false); + return kryo; + }); + + private Class clazz; + + public KryoRedisSerializer(Class clazz){ + super(); + this.clazz = clazz; + } + + @Override + public byte[] serialize(T t) throws SerializationException { + if (t == null) { + return EMPTY_BYTE_ARRAY; + } + + Kryo kryo = kryos.get(); + kryo.setReferences(false); + kryo.register(clazz); + + try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); + Output output = new Output(baos)) { + kryo.writeClassAndObject(output, t); + output.flush(); + return baos.toByteArray(); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + + return EMPTY_BYTE_ARRAY; + } + + @Override + public T deserialize(byte[] bytes) throws SerializationException { + if (bytes == null || bytes.length <= 0) { + return null; + } + + Kryo kryo = kryos.get(); + kryo.setReferences(false); + kryo.register(clazz); + + try (Input input = new Input(bytes)) { + return (T) kryo.readClassAndObject(input); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + + return null; + } +} diff --git a/common/src/main/java/cn/unizk/cache/LocalCache.java b/common/src/main/java/cn/unizk/cache/LocalCache.java new file mode 100644 index 0000000..bb9f616 --- /dev/null +++ b/common/src/main/java/cn/unizk/cache/LocalCache.java @@ -0,0 +1,33 @@ +package cn.unizk.cache; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @Author hao + * @Date 2025/7/10 14:52 + * @Version 1.0 + **/ +public class LocalCache { + public static final Map MESSAGE_QUEUE = new ConcurrentHashMap<>(); + public static final Map IAT_MODEL_MSG_QUEUE = new ConcurrentHashMap<>(); + + private static class WxAccessTokenCache { + static String accessToken; + static long expireTime; + } + + public static void setWxAccessTokenCache(String accessToken, long expireTime) { + WxAccessTokenCache.accessToken = accessToken; + WxAccessTokenCache.expireTime = expireTime; + } + + public static String getAccessToken() { + return WxAccessTokenCache.accessToken; + } + + public static long getExpireTime() { + return WxAccessTokenCache.expireTime; + } + +} diff --git a/common/src/main/java/cn/unizk/config/MinioConfig.java b/common/src/main/java/cn/unizk/config/MinioConfig.java new file mode 100644 index 0000000..71a2747 --- /dev/null +++ b/common/src/main/java/cn/unizk/config/MinioConfig.java @@ -0,0 +1,29 @@ +package cn.unizk.config; + +import cn.unizk.config.properties.MinioProperties; +import io.minio.MinioClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.annotation.Resource; + +/** + * @Author hao + * @Date 2025/8/27 17:14 + * @Version 1.0 + **/ +@Configuration +public class MinioConfig { + + @Resource + private MinioProperties minioProperties; + + @Bean + public MinioClient minioClient(){ + + return MinioClient.builder() + .endpoint(minioProperties.getEndpoint()) + .credentials(minioProperties.getAccessKey(),minioProperties.getSecretKey()) + .build(); + } +} diff --git a/common/src/main/java/cn/unizk/config/MybatisPlusConfig.java b/common/src/main/java/cn/unizk/config/MybatisPlusConfig.java new file mode 100644 index 0000000..25d22fd --- /dev/null +++ b/common/src/main/java/cn/unizk/config/MybatisPlusConfig.java @@ -0,0 +1,22 @@ +package cn.unizk.config; +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Author hao + * @Date 2025/8/21 13:58 + * @Version 1.0 + **/ +@Configuration +public class MybatisPlusConfig { + + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor(){ + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + return interceptor; + } +} diff --git a/common/src/main/java/cn/unizk/config/RedisConfig.java b/common/src/main/java/cn/unizk/config/RedisConfig.java new file mode 100644 index 0000000..4f8e146 --- /dev/null +++ b/common/src/main/java/cn/unizk/config/RedisConfig.java @@ -0,0 +1,32 @@ +package cn.unizk.config; +import cn.unizk.cache.KryoRedisSerializer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +@Configuration +public class RedisConfig { + + @Bean(name = "kryoRedisTemplate") + public RedisTemplate redisTemplate(RedisConnectionFactory factory) { + RedisTemplate redisTemplate = new RedisTemplate<>(); + + redisTemplate.setConnectionFactory(factory); + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setValueSerializer(new KryoRedisSerializer<>(Object.class)); + redisTemplate.setHashKeySerializer(new StringRedisSerializer()); + redisTemplate.setHashValueSerializer(new KryoRedisSerializer<>(Object.class)); + redisTemplate.afterPropertiesSet(); + return redisTemplate; + } + + @Bean + public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) { + StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(); + stringRedisTemplate.setConnectionFactory(factory); + return stringRedisTemplate; + } +} diff --git a/common/src/main/java/cn/unizk/config/ThreadPoolConfig.java b/common/src/main/java/cn/unizk/config/ThreadPoolConfig.java new file mode 100644 index 0000000..2b67293 --- /dev/null +++ b/common/src/main/java/cn/unizk/config/ThreadPoolConfig.java @@ -0,0 +1,35 @@ +package cn.unizk.config; + +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.*; + +/** + * @Author hao + * @Date 2025/9/9 19:01 + * @Version 1.0 + **/ +@Configuration +public class ThreadPoolConfig { + + @Bean("payQueryScheduler") + public ScheduledExecutorService scheduler() { + ThreadFactory factory = new ThreadFactoryBuilder().setNameFormat("pay-query-pool-%d").build(); + return Executors.newScheduledThreadPool(10, factory); + } + + @Bean("udpRetryExecutor") + public Executor udpRetryExecutor() { + ThreadPoolExecutor executor = new ThreadPoolExecutor( + Runtime.getRuntime().availableProcessors(), + Runtime.getRuntime().availableProcessors() * 2, + 60L, TimeUnit.SECONDS, + new ArrayBlockingQueue<>(256), + new ThreadFactoryBuilder().setNameFormat("udp-retry-%d").build(), + new ThreadPoolExecutor.CallerRunsPolicy()); // 满了就让调用线程自己跑,防止丢任务 + executor.allowCoreThreadTimeOut(true); + return executor; + } +} diff --git a/common/src/main/java/cn/unizk/config/properties/HfProperties.java b/common/src/main/java/cn/unizk/config/properties/HfProperties.java new file mode 100644 index 0000000..359e913 --- /dev/null +++ b/common/src/main/java/cn/unizk/config/properties/HfProperties.java @@ -0,0 +1,34 @@ +package cn.unizk.config.properties; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Author hao + * @Date 2025/10/22 18:17 + * @Version 1.0 + **/ +@Getter +@Setter +@Component +@ConfigurationProperties(prefix = "hf") +public class HfProperties { + + private String huifuId; + + private String payApi; + + private String refundApi; + + private String publicKey; + + private String privateKey; + + private String notifyUrl; + + private String productId; + + private String configureAppletCallbackUrl; +} diff --git a/common/src/main/java/cn/unizk/config/properties/HuaweiyunProperties.java b/common/src/main/java/cn/unizk/config/properties/HuaweiyunProperties.java new file mode 100644 index 0000000..ad5d1e9 --- /dev/null +++ b/common/src/main/java/cn/unizk/config/properties/HuaweiyunProperties.java @@ -0,0 +1,22 @@ +package cn.unizk.config.properties; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Author hao + * @Date 2026/3/6 14:34 + * @Version 1.0 + **/ +@ConfigurationProperties(prefix = "huaweiyun") +@Component +@Getter +@Setter +public class HuaweiyunProperties { + + private String accessKey; + + private String secretKey; +} diff --git a/common/src/main/java/cn/unizk/config/properties/MinioProperties.java b/common/src/main/java/cn/unizk/config/properties/MinioProperties.java new file mode 100644 index 0000000..758bc46 --- /dev/null +++ b/common/src/main/java/cn/unizk/config/properties/MinioProperties.java @@ -0,0 +1,24 @@ +package cn.unizk.config.properties; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Author hao + * @Date 2025/8/27 17:13 + * @Version 1.0 + **/ +@ConfigurationProperties(prefix = "minio") +@Component +@Data +public class MinioProperties { + + private String endpoint; + + private String accessKey; + + private String secretKey; + + private String nginxHost; +} diff --git a/common/src/main/java/cn/unizk/constant/UniConstant.java b/common/src/main/java/cn/unizk/constant/UniConstant.java new file mode 100644 index 0000000..facfb3d --- /dev/null +++ b/common/src/main/java/cn/unizk/constant/UniConstant.java @@ -0,0 +1,27 @@ +package cn.unizk.constant; + +/** + * @Author hao + * @Date 2025/7/22 14:11 + * @Version 1.0 + **/ +public class UniConstant { + + public static final String AI = "AI"; + public static final String PAITENT = "paitent"; + public static final String ZONED_SHANGHAI = "Asia/Shanghai"; + public static final String POST_CONTENT_TYPE = "application/json; charset=utf-8"; + + public static final String HTTP_STATUS_CODE = "code"; + public static final String HTTP_RESPONSE = "res"; + + public static final String CHANNEL_HEADER = "channelID"; + public static final String WX_ACCESS_TOKEN = "access_token"; + public static final String GET_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/stable_token"; + public static final String CONST_TRUE = "true"; + public static final String CONST_FALSE = "false"; + public static final String REDIS_CURRENT_DEVICE_USER = "device:"; + public static final Integer MAX_TREAT_TIME = 60; + public static final String VIDEO_PROGRESS_CACHE = "video:progress:batch:"; + public static final String DEVICE_ID = "deviceId:"; +} diff --git a/common/src/main/java/cn/unizk/constant/VideoUploadConstants.java b/common/src/main/java/cn/unizk/constant/VideoUploadConstants.java new file mode 100644 index 0000000..663dbe0 --- /dev/null +++ b/common/src/main/java/cn/unizk/constant/VideoUploadConstants.java @@ -0,0 +1,21 @@ +package cn.unizk.constant; + +import java.util.Arrays; +import java.util.List; + +/** + * @Author hao + * @Date 2026/3/9 12:01 + * @Version 1.0 + **/ +public class VideoUploadConstants { + + // 允许的后缀 + public static final List ALLOWED_EXTENSIONS = Arrays.asList("mp4"); + + // 允许的 MIME Types (不同浏览器/系统可能略有差异,建议涵盖常见情况) + public static final List ALLOWED_MIME_TYPES = Arrays.asList( + "video/mp4", + "video/x-m4v" + ); +} diff --git a/common/src/main/java/cn/unizk/convert/device/CfConverter.java b/common/src/main/java/cn/unizk/convert/device/CfConverter.java new file mode 100644 index 0000000..6fc2360 --- /dev/null +++ b/common/src/main/java/cn/unizk/convert/device/CfConverter.java @@ -0,0 +1,39 @@ +package cn.unizk.convert.device; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +/** + * @Author hao + * @Date 2025/11/25 9:58 + * @Version 1.0 + **/ +public class CfConverter implements Converter { + @Override + public Class supportJavaTypeKey() { + return String.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + String displayValue; + if (value == null){ + displayValue = ""; + }else if ("1".equals(value)){ + displayValue = "医疗版本"; + }else if ("2".equals(value)){ + displayValue = "非医疗版本"; + }else { + displayValue = ""; + } + return new WriteCellData<>(displayValue); + } +} diff --git a/common/src/main/java/cn/unizk/convert/device/LocalDateTimeConverter.java b/common/src/main/java/cn/unizk/convert/device/LocalDateTimeConverter.java new file mode 100644 index 0000000..431fea0 --- /dev/null +++ b/common/src/main/java/cn/unizk/convert/device/LocalDateTimeConverter.java @@ -0,0 +1,38 @@ +package cn.unizk.convert.device; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2025/11/24 18:14 + * @Version 1.0 + **/ +public class LocalDateTimeConverter implements Converter { + @Override + public Class supportJavaTypeKey() { + return LocalDateTime.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(LocalDateTime value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + String displayValue; + if (value == null){ + displayValue = ""; + }else { + displayValue = DateUtil.format(value,"yyyy-MM-dd HH:mm:ss"); + } + return new WriteCellData<>(displayValue); + } +} diff --git a/common/src/main/java/cn/unizk/convert/device/OperatingStatusConverter.java b/common/src/main/java/cn/unizk/convert/device/OperatingStatusConverter.java new file mode 100644 index 0000000..7245723 --- /dev/null +++ b/common/src/main/java/cn/unizk/convert/device/OperatingStatusConverter.java @@ -0,0 +1,41 @@ +package cn.unizk.convert.device; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +/** + * @Author hao + * @Date 2025/11/24 18:20 + * @Version 1.0 + **/ +public class OperatingStatusConverter implements Converter { + @Override + public Class supportJavaTypeKey() { + return Integer.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(Integer value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + String displayValue; + if (value == null){ + displayValue = ""; + }else if (value == 0){ + displayValue = "运行中"; + }else if (value == 1){ + displayValue = "正常关机"; + }else if (value == 2){ + displayValue = "非正常关机"; + }else { + displayValue = "待机中"; + } + return new WriteCellData<>(displayValue); + } +} diff --git a/common/src/main/java/cn/unizk/convert/device/StatusConverter.java b/common/src/main/java/cn/unizk/convert/device/StatusConverter.java new file mode 100644 index 0000000..fd59001 --- /dev/null +++ b/common/src/main/java/cn/unizk/convert/device/StatusConverter.java @@ -0,0 +1,38 @@ +package cn.unizk.convert.device; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.converters.WriteConverterContext; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +/** + * @Author hao + * @Date 2025/11/24 18:06 + * @Version 1.0 + **/ +public class StatusConverter implements Converter { + @Override + public Class supportJavaTypeKey() { + return Integer.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + String displayValue; + if (value == null){ + displayValue = ""; + }else if ("1".equals(value)){ + displayValue = "启用"; + }else { + displayValue = "禁用"; + } + return new WriteCellData<>(displayValue); + } +} diff --git a/common/src/main/java/cn/unizk/convert/device/WmConverter.java b/common/src/main/java/cn/unizk/convert/device/WmConverter.java new file mode 100644 index 0000000..6a27c88 --- /dev/null +++ b/common/src/main/java/cn/unizk/convert/device/WmConverter.java @@ -0,0 +1,39 @@ +package cn.unizk.convert.device; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +/** + * @Author hao + * @Date 2025/11/25 10:02 + * @Version 1.0 + **/ +public class WmConverter implements Converter { + @Override + public Class supportJavaTypeKey() { + return String.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + String displayValue; + if (value == null){ + displayValue = ""; + }else if ("0".equals(value)){ + displayValue = "脱机模式"; + }else if ("1".equals(value)){ + displayValue = "联网模式"; + }else { + displayValue = ""; + } + return new WriteCellData<>(displayValue); + } +} diff --git a/common/src/main/java/cn/unizk/entity/dto/CashOutDTO.java b/common/src/main/java/cn/unizk/entity/dto/CashOutDTO.java new file mode 100644 index 0000000..cfdeea8 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/dto/CashOutDTO.java @@ -0,0 +1,16 @@ +package cn.unizk.entity.dto; + +import lombok.Data; + +/** + * @Author hao + * @Date 2026/3/13 11:49 + * @Version 1.0 + **/ +@Data +public class CashOutDTO { + + private String amount; + + private Integer storeId; +} diff --git a/common/src/main/java/cn/unizk/entity/dto/CashOutResponse.java b/common/src/main/java/cn/unizk/entity/dto/CashOutResponse.java new file mode 100644 index 0000000..cd79ede --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/dto/CashOutResponse.java @@ -0,0 +1,26 @@ +package cn.unizk.entity.dto; + + +import lombok.Getter; +import lombok.Setter; + +/** + * @Author hao + * @Date 2026/3/13 11:51 + * @Version 1.0 + **/ +@Getter +@Setter +public class CashOutResponse { + + private Integer code; + + private String message; + + public CashOutResponse(){} + + public CashOutResponse(Integer code,String message){ + this.code = code; + this.message = message; + } +} diff --git a/common/src/main/java/cn/unizk/entity/dto/CommonRequestDTO.java b/common/src/main/java/cn/unizk/entity/dto/CommonRequestDTO.java new file mode 100644 index 0000000..d5b2876 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/dto/CommonRequestDTO.java @@ -0,0 +1,29 @@ +package cn.unizk.entity.dto; + +import com.google.gson.Gson; +import lombok.Getter; +import lombok.Setter; + +/** + * @Author hao + * @Date 2025/10/22 17:43 + * @Version 1.0 + **/ +@Getter +@Setter +public class CommonRequestDTO { + + private String sys_id; + + private String product_id; + + private String sign; + + private T data; + + @Override + public String toString() { + Gson gson = new Gson(); + return gson.toJson(this); + } +} diff --git a/common/src/main/java/cn/unizk/entity/dto/DeviceExcelDTO.java b/common/src/main/java/cn/unizk/entity/dto/DeviceExcelDTO.java new file mode 100644 index 0000000..5d380fb --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/dto/DeviceExcelDTO.java @@ -0,0 +1,87 @@ +package cn.unizk.entity.dto; + +import cn.unizk.convert.device.*; +import cn.unizk.entity.po.Device; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.annotation.write.style.HeadStyle; +import com.alibaba.excel.enums.poi.FillPatternTypeEnum; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2025/11/24 17:24 + * @Version 1.0 + **/ +@Data +@ContentRowHeight(20) +@HeadRowHeight(25) +@ColumnWidth(15) +// 头背景设置成天蓝色 IndexedColors.RED.getIndex() +@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 40) +public class DeviceExcelDTO { + + @ExcelProperty(value = "设备ID") + private String deviceId; + + @ExcelProperty(value = "MUID") + private String muid; + + @ExcelProperty(value = "设备状态",converter = StatusConverter.class) + private String status; + + @ExcelProperty(value = "所属信息") + private String affiliatedWith; + + @ExcelProperty(value = "出库状态") + private String outboundType; + + @ExcelProperty(value = "剩余次数") + private String expireTime; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + @ExcelProperty(value = "入库时间",converter = LocalDateTimeConverter.class) + private LocalDateTime warehousingTime; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + @ExcelProperty(value = "出库时间",converter = LocalDateTimeConverter.class) + private LocalDateTime outboundTime; + + @ExcelProperty(value = "运行状态",converter = OperatingStatusConverter.class) + private Integer operatingStatus; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + @ExcelProperty(value = "设备时间",converter = LocalDateTimeConverter.class) + private LocalDateTime lastRunTime; + + @ExcelProperty(value = "机器配置",converter = CfConverter.class) + private String cf; + + @ExcelProperty(value = "工作模式",converter = WmConverter.class) + private String wm; + + @ExcelProperty(value = "硬件版本") + private String hw; + + @ExcelProperty(value = "软件版本") + private String sw; + + @ExcelProperty(value = "ICCID号码") + private String iccid; + + @ExcelProperty(value = "4G设备固件版本") + private String cr; + + @ExcelProperty(value = "充值次数") + private Integer rechargeCount; +} diff --git a/common/src/main/java/cn/unizk/entity/dto/ElectronicSignatureDTO.java b/common/src/main/java/cn/unizk/entity/dto/ElectronicSignatureDTO.java new file mode 100644 index 0000000..e1bffb3 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/dto/ElectronicSignatureDTO.java @@ -0,0 +1,18 @@ +package cn.unizk.entity.dto; + +import lombok.Data; + +/** + * @Author hao + * @Date 2026/8/19 15:21 + * @Version 1.0 + **/ +@Data +public class ElectronicSignatureDTO { + + private Integer id; + + private String url; + + private String name; +} diff --git a/common/src/main/java/cn/unizk/entity/dto/HuifuSyncRefundResDTO.java b/common/src/main/java/cn/unizk/entity/dto/HuifuSyncRefundResDTO.java new file mode 100644 index 0000000..9213c9f --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/dto/HuifuSyncRefundResDTO.java @@ -0,0 +1,36 @@ +package cn.unizk.entity.dto; + +import com.google.gson.Gson; +import lombok.Getter; +import lombok.Setter; + +/** + * @Author hao + * @Date 2025/10/23 11:28 + * @Version 1.0 + **/ +@Getter +@Setter +public class HuifuSyncRefundResDTO { + private RefundResData data; + + @Getter + @Setter + public static class RefundResData { + private String resp_code; + private String resp_desc; + private String product_id; + private String huifu_id; + private String req_date; + private String req_seq_id; + private String trans_stat; + private String trans_finish_time; + private String ord_amt; + } + + @Override + public String toString() { + Gson gson = new Gson(); + return gson.toJson(this); + } +} diff --git a/common/src/main/java/cn/unizk/entity/dto/IsoDTO.java b/common/src/main/java/cn/unizk/entity/dto/IsoDTO.java new file mode 100644 index 0000000..698716f --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/dto/IsoDTO.java @@ -0,0 +1,20 @@ +package cn.unizk.entity.dto; + +import com.alibaba.fastjson2.JSONObject; +import lombok.Data; + +/** + * @Author hao + * @Date 2025/10/20 18:35 + * @Version 1.0 + **/ +@Data +public class IsoDTO { + private Integer rescode = 200; + + private Boolean success = true; + + private String resmsg = "success_"; + + private JSONObject data; +} diff --git a/common/src/main/java/cn/unizk/entity/dto/MajorJointsDTO.java b/common/src/main/java/cn/unizk/entity/dto/MajorJointsDTO.java new file mode 100644 index 0000000..afa71fc --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/dto/MajorJointsDTO.java @@ -0,0 +1,20 @@ +package cn.unizk.entity.dto; + +import lombok.Data; + +import java.util.Map; + +/** + * @Author hao + * @Date 2026/8/12 15:34 + * @Version 1.0 + **/ +@Data +public class MajorJointsDTO { + + private String title; + + private Map map; + + private String report; +} diff --git a/common/src/main/java/cn/unizk/entity/dto/PlaceOrderCommonDTO.java b/common/src/main/java/cn/unizk/entity/dto/PlaceOrderCommonDTO.java new file mode 100644 index 0000000..0fab5bc --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/dto/PlaceOrderCommonDTO.java @@ -0,0 +1,20 @@ +package cn.unizk.entity.dto; + +import lombok.Data; + +/** + * @Author hao + * @Date 2026/7/7 14:58 + * @Version 1.0 + **/ +@Data +public class PlaceOrderCommonDTO { + + private String reqSeqId; + + private String price; + + private String reqDate; + + private String describe; +} diff --git a/common/src/main/java/cn/unizk/entity/dto/PrDTO.java b/common/src/main/java/cn/unizk/entity/dto/PrDTO.java new file mode 100644 index 0000000..b5bab4d --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/dto/PrDTO.java @@ -0,0 +1,48 @@ +package cn.unizk.entity.dto; + + +import com.google.gson.Gson; +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +/** + * @Author hao + * @Date 2025/12/18 17:07 + * @Version 1.0 + **/ +@Getter +@Setter +public class PrDTO { + + private String id; + + private List prItems; + + public String toString(){ + Gson gson = new Gson(); + return gson.toJson(this); + } + + + @Setter + @Getter + public static class PrItem { + private String fr; + + private String pw; + + private String pl; + + private String ul; + + private String tl; + + public String toString(){ + Gson gson = new Gson(); + return gson.toJson(this); + } + } + +} diff --git a/common/src/main/java/cn/unizk/entity/dto/ProfitSharingRefundDTO.java b/common/src/main/java/cn/unizk/entity/dto/ProfitSharingRefundDTO.java new file mode 100644 index 0000000..91e8bba --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/dto/ProfitSharingRefundDTO.java @@ -0,0 +1,32 @@ +package cn.unizk.entity.dto; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +/** + * @Author hao + * @Date 2025/10/22 17:44 + * @Version 1.0 + **/ +@Getter +@Setter +public class ProfitSharingRefundDTO extends RefundDTO { + + private AcctSplitBunch acct_split_bunch; + + @Getter + @Setter + public static class AcctSplitBunch { + private List acct_infos; + + @Getter + @Setter + public static class AcctInfos { + private String div_amt; + private String huifu_id; + private String part_loan_amt; + } + } +} diff --git a/common/src/main/java/cn/unizk/entity/dto/RefundDTO.java b/common/src/main/java/cn/unizk/entity/dto/RefundDTO.java new file mode 100644 index 0000000..9c42ec2 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/dto/RefundDTO.java @@ -0,0 +1,30 @@ +package cn.unizk.entity.dto; + +import lombok.Getter; +import lombok.Setter; + +/** + * @Author hao + * @Date 2025/10/22 18:48 + * @Version 1.0 + **/ +@Getter +@Setter +public class RefundDTO { + + private String req_date; + + private String req_seq_id; + + private String huifu_id; + + private String ord_amt; + + private String org_req_date; + +// private String org_hf_seq_id; + + private String org_req_seq_id; + + private String notify_url = "https://peaktcm.com/hf/webhook/refundCallback"; +} diff --git a/common/src/main/java/cn/unizk/entity/dto/WxPayPlaceOrder.java b/common/src/main/java/cn/unizk/entity/dto/WxPayPlaceOrder.java new file mode 100644 index 0000000..3f8c7ee --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/dto/WxPayPlaceOrder.java @@ -0,0 +1,45 @@ +package cn.unizk.entity.dto; + +import com.alibaba.fastjson2.JSON; +import lombok.Getter; +import lombok.Setter; + +/** + * @Author hao + * @Date 2025/8/20 12:17 + * @Version 1.0 + **/ +@Getter +@Setter +public class WxPayPlaceOrder { + + private String appid; + private String mchid; + private String description; + private String out_trade_no; + private String time_expire; + //支付成功回调地址 + private String notify_url; + private Amount amount; + private Payer payer; + + + + @Getter + @Setter + public static class Amount { + private Integer total; + private String currency = "CNY"; + + } + @Getter + @Setter + public static class Payer { + private String openid; + } + + @Override + public String toString() { + return JSON.toJSONString(this); + } +} diff --git a/common/src/main/java/cn/unizk/entity/po/AppletModule.java b/common/src/main/java/cn/unizk/entity/po/AppletModule.java new file mode 100644 index 0000000..7a1eac6 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/AppletModule.java @@ -0,0 +1,41 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-08-06 + */ +@Getter +@Setter +@ToString +@TableName("applet_module") +public class AppletModule implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String name; + +// private String moduleStatus; + + private String routePath; + + private String iconUrl; + + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/AppointmentConfig.java b/common/src/main/java/cn/unizk/entity/po/AppointmentConfig.java new file mode 100644 index 0000000..a576751 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/AppointmentConfig.java @@ -0,0 +1,48 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

      + * 预约配置表 + *

      + * + * @author caiwenhao + * @since 2026-05-18 + */ +@Getter +@Setter +@ToString +@TableName("appointment_config") +public class AppointmentConfig implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 配置键 + */ + private String configKey; + + /** + * 配置值 + */ + private String configValue; + + /** + * 描述 + */ + private String description; + + private LocalDateTime updatedAt; +} diff --git a/common/src/main/java/cn/unizk/entity/po/Appointments.java b/common/src/main/java/cn/unizk/entity/po/Appointments.java new file mode 100644 index 0000000..1e407c3 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/Appointments.java @@ -0,0 +1,106 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + *

      + * 预约记录表 + *

      + * + * @author caiwenhao + * @since 2026-05-18 + */ +@Getter +@Setter +@ToString +public class Appointments implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 预约编号 + */ + private String appointmentNo; + + + private String openid; + + /** + * 医生ID + */ + private Long physioId; + + /** + * 每日排班表ID + */ + private Long dailyScheduleId; + + /** + * 患者姓名 + */ + private String patientName; + + /** + * 患者手机号 + */ + private String patientPhone; + + /** + * 患者身份证号 + */ + private String patientIdCard; + + /** + * 就诊日期 + */ + private LocalDate visitDate; + + /** + * 时间段代码 + */ + private String timeSlotCode; + + /** + * 状态:待确认、已确认、已取消、已完成 + */ + private String status; + + /** + * 取消原因 + */ + private String cancelReason; + + /** + * 取消时间 + */ + private LocalDateTime cancelledAt; + + /** + * 备注 + */ + private String remark; + + private String evaluation; + + private Integer treatRating; + + private BigDecimal payAmount; + + private Integer payStatus; + + private LocalDateTime createdAt; + + private LocalDateTime updatedAt; +} diff --git a/common/src/main/java/cn/unizk/entity/po/BaseEntity.java b/common/src/main/java/cn/unizk/entity/po/BaseEntity.java new file mode 100644 index 0000000..5941883 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/BaseEntity.java @@ -0,0 +1,22 @@ +package cn.unizk.entity.po; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 基类 + */ +@Data +public class BaseEntity implements Serializable { + + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime createTime; + +} diff --git a/common/src/main/java/cn/unizk/entity/po/BusinessChannel.java b/common/src/main/java/cn/unizk/entity/po/BusinessChannel.java new file mode 100644 index 0000000..18b1247 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/BusinessChannel.java @@ -0,0 +1,20 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Author hao + * @Date 2025/10/9 14:08 + * @Version 1.0 + **/ +@Data +@TableName(value = "business_channel") +public class BusinessChannel { + @TableId(value = "channel_id",type = IdType.AUTO) + private Integer channelId; + private String channelName; + private String remarks; +} diff --git a/common/src/main/java/cn/unizk/entity/po/CashOutRecord.java b/common/src/main/java/cn/unizk/entity/po/CashOutRecord.java new file mode 100644 index 0000000..fad0ca1 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/CashOutRecord.java @@ -0,0 +1,34 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2026/3/13 14:22 + * @Version 1.0 + **/ +@Data +@TableName("cash_out_record") +public class CashOutRecord { + + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + + private BigDecimal amount; + + private String outHuifuId; + + private Integer storeId; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/Chapter.java b/common/src/main/java/cn/unizk/entity/po/Chapter.java new file mode 100644 index 0000000..563f163 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/Chapter.java @@ -0,0 +1,44 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author caiwenhao + * @since 2026-03-06 + */ +@Getter +@Setter +@ToString +public class Chapter implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "chapter_id", type = IdType.AUTO) + private Integer chapterId; + + @NotNull(message = "courseId cannot be null") + private Integer courseId; + + @NotBlank(message = "title cannot be empty") + private String title; + + @NotBlank(message = "videoUrl cannot be empty") + private String videoUrl; + + private Integer videoDuration; + + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/ChildStoreAccount.java b/common/src/main/java/cn/unizk/entity/po/ChildStoreAccount.java new file mode 100644 index 0000000..3848e54 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/ChildStoreAccount.java @@ -0,0 +1,43 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + *

      + * + *

      + * + * @author caiwenhao + * @since 2026-03-20 + */ +@Getter +@Setter +@ToString +@TableName("child_store_account") +public class ChildStoreAccount implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "account_id", type = IdType.AUTO) + private Integer accountId; + + private String accountName; + + private Integer storeId; + + private String huifuId; + + private String bankCardNumber; + + private BigDecimal percentage; + + private BigDecimal accountBalance; +} diff --git a/common/src/main/java/cn/unizk/entity/po/ClinicWorkLog.java b/common/src/main/java/cn/unizk/entity/po/ClinicWorkLog.java new file mode 100644 index 0000000..b466328 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/ClinicWorkLog.java @@ -0,0 +1,65 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-08-20 + */ +@Getter +@Setter +@ToString +@TableName("clinic_work_log") +public class ClinicWorkLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String name; + + private Integer age; + + /** + * 0--女;1--男 + */ + private Integer gender; + + private String profession; + + private String phoneNumber; + + private String diagnosis; + + /** + * 0--初诊;1--复诊 + */ + private Integer oneOrMore; + + private String medicalTreatment; + + private String physicianSignature; + + private String remark; + + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8") + private LocalDate createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/Combo.java b/common/src/main/java/cn/unizk/entity/po/Combo.java new file mode 100644 index 0000000..db9efda --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/Combo.java @@ -0,0 +1,33 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @Author hao + * @Date 2025/8/30 17:20 + * @Version 1.0 + **/ +@Data +@TableName("combo") +public class Combo { + + @TableId(value = "combo_id",type = IdType.AUTO) + private Integer comboId; + + private String deviceId; + + private String comboName; + + private Integer comboDuration; + + private BigDecimal comboPrice; + + private String image; + + private Integer channelId; +} diff --git a/common/src/main/java/cn/unizk/entity/po/Conversation.java b/common/src/main/java/cn/unizk/entity/po/Conversation.java new file mode 100644 index 0000000..9b2cabe --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/Conversation.java @@ -0,0 +1,72 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + + +@Data +@TableName("conversation") +public class Conversation extends BaseEntity implements Serializable { + + @TableId(type = IdType.AUTO) + private Integer id; + + /** + * + * 32位会话id + * + */ + private String sessionId; + + + /** + * + * 使用openid + * + */ + private String userId; + + /** + * + *用户问题答案json + * + */ + private String qaJson; + + /** + * + *AI生成症状摘要 + * + */ + private String symptomSummary; + + /** + * + *会话状态: 1(活跃中), 2(已完成), -1(已删除) + * + */ + private Integer status; + + + /** + * + *AI诊断 + * + */ + private String aiDiagnosis; + + + /** + * + *ai治疗方案 暂存诊疗师看 + * + */ + private String aiTreatment; + + + +} diff --git a/common/src/main/java/cn/unizk/entity/po/Course.java b/common/src/main/java/cn/unizk/entity/po/Course.java new file mode 100644 index 0000000..fef0774 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/Course.java @@ -0,0 +1,45 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author caiwenhao + * @since 2026-03-06 + */ +@Getter +@Setter +@ToString +public class Course implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "course_id", type = IdType.AUTO) + private Integer courseId; + + @NotBlank(message = "title cannot be empty") + private String title; + + @NotBlank(message = "objName cannot be empty") + private String objName; + + @NotNull(message = "price cannot be price") + private BigDecimal price; + + private Integer purchases; + + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/DailySchedules.java b/common/src/main/java/cn/unizk/entity/po/DailySchedules.java new file mode 100644 index 0000000..7fdbb78 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/DailySchedules.java @@ -0,0 +1,66 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + *

      + * 每日排班表 + *

      + * + * @author caiwenhao + * @since 2026-05-18 + */ +@Getter +@Setter +@ToString +@TableName("daily_schedules") +public class DailySchedules implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 医生ID + */ + private Long physioId; + + /** + * 排班日期 + */ + private LocalDate scheduleDate; + + /** + * 时间段代码 + */ + private String timeSlotCode; + + /** + * 该天该时间段可预约人数 + */ + private Integer maxBookings; + + /** + * 已预约人数 + */ + private Integer bookedCount; + + /** + * 状态:可用、已满、关闭 + */ + private String status; + + private LocalDateTime createdAt; + + private LocalDateTime updatedAt; +} diff --git a/common/src/main/java/cn/unizk/entity/po/Device.java b/common/src/main/java/cn/unizk/entity/po/Device.java new file mode 100644 index 0000000..e7f4131 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/Device.java @@ -0,0 +1,111 @@ +package cn.unizk.entity.po; + +import cn.unizk.convert.device.LocalDateTimeConverter; +import cn.unizk.convert.device.OperatingStatusConverter; +import cn.unizk.convert.device.StatusConverter; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2025/8/30 16:45 + * @Version 1.0 + **/ +@TableName("device") +@Data +public class Device { + + @TableId("device_id") + @ExcelProperty(value = "设备ID") + private String deviceId; + + @ExcelProperty(value = "MUID") + private String muid; + + private Integer storeId; + + private Integer agentId; + + private Integer userId; + + @ExcelProperty(value = "设备状态",converter = StatusConverter.class) + private String status; + + @ExcelProperty(value = "所属信息") + private String affiliatedWith; + + private Integer paymentMethod; + + @ExcelProperty(value = "剩余次数") + private String expireTime; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + @ExcelProperty(value = "入库时间",converter = LocalDateTimeConverter.class) + private LocalDateTime warehousingTime; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + @ExcelProperty(value = "出库时间",converter = LocalDateTimeConverter.class) + private LocalDateTime outboundTime; + + private BigDecimal balance; + + private Integer surplus; + + private Integer forcePay; + + private String lo; + + private String la; + + private Integer freeCount; + + //0--非自动升级;1--自动升级 + private Integer upgradeSwitch; + + @ExcelProperty(value = "运行状态",converter = OperatingStatusConverter.class) + private Integer operatingStatus; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + @ExcelProperty(value = "设备时间",converter = LocalDateTimeConverter.class) + private LocalDateTime lastRunTime; + + @ExcelProperty(value = "机器配置") + private String cf; + + @ExcelProperty(value = "工作模式") + private String wm; + + @ExcelProperty(value = "硬件版本") + private String hw; + + @ExcelProperty(value = "软件版本") + private String sw; + + @ExcelProperty(value = "ICCID号码") + private String iccid; + + @ExcelProperty(value = "4G设备固件版本") + private String cr; + + private String mo; + + @ExcelProperty(value = "充值次数") + private Integer rechargeCount; + + private String remark; + + private Integer treatStatus; + + + +} diff --git a/common/src/main/java/cn/unizk/entity/po/DeviceRechargeRecord.java b/common/src/main/java/cn/unizk/entity/po/DeviceRechargeRecord.java new file mode 100644 index 0000000..05ada15 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/DeviceRechargeRecord.java @@ -0,0 +1,36 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2025/11/5 15:34 + * @Version 1.0 + **/ +@Data +@TableName(value = "device_recharge_record") +public class DeviceRechargeRecord { + + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + + private String deviceId; + + private Integer rechargeType; + + private Integer quantity; + + private BigDecimal money; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/DeviceUpgrade.java b/common/src/main/java/cn/unizk/entity/po/DeviceUpgrade.java new file mode 100644 index 0000000..8915fa8 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/DeviceUpgrade.java @@ -0,0 +1,39 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2025/11/19 10:22 + * @Version 1.0 + **/ +@Data +@TableName("device_upgrade") +public class DeviceUpgrade { + + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + + @NotBlank(message = "软件版本号必填") + private String sVersion; + + @NotBlank(message = "硬件版本号必填") + private String hVersion; + + @NotBlank(message = "文件名必填") + private String fileName; + + private String releaseNotes; + + private Integer beCurrentVersion; + + private LocalDateTime createTime; + + private LocalDateTime updateTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/DeviceUsageDetail.java b/common/src/main/java/cn/unizk/entity/po/DeviceUsageDetail.java new file mode 100644 index 0000000..d083281 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/DeviceUsageDetail.java @@ -0,0 +1,41 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2025/11/6 12:26 + * @Version 1.0 + **/ +@TableName("device_usage_detail") +@Data +public class DeviceUsageDetail { + + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + + private Integer usageRecordId; + + private String fr; + + private String pw; + + private String pl; + + private String ul; + + private String wt; + + private String status; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/DeviceUsageRecord.java b/common/src/main/java/cn/unizk/entity/po/DeviceUsageRecord.java new file mode 100644 index 0000000..eb21616 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/DeviceUsageRecord.java @@ -0,0 +1,42 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2025/10/22 11:24 + * @Version 1.0 + **/ +@Data +@TableName("device_usage_record") +public class DeviceUsageRecord { + + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + private String deviceId; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime startTime; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime endTime; + + private String startUseFlag; + + private String wm; + + private String belong; + + private String muid; + + private Integer invalidFlag; +} diff --git a/common/src/main/java/cn/unizk/entity/po/DiaRecord.java b/common/src/main/java/cn/unizk/entity/po/DiaRecord.java new file mode 100644 index 0000000..0096e3f --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/DiaRecord.java @@ -0,0 +1,51 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-08-13 + */ +@Getter +@Setter +@ToString +@TableName("dia_record") +public class DiaRecord implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer appUserId; + + private String batchNumber; + + private String part; + + private String area; + + private String question; + + private String response; + + private String result; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/DiagnosisTemplate.java b/common/src/main/java/cn/unizk/entity/po/DiagnosisTemplate.java new file mode 100644 index 0000000..6647cf6 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/DiagnosisTemplate.java @@ -0,0 +1,22 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Author hao + * @Date 2025/12/16 16:58 + * @Version 1.0 + **/ +@TableName("diagnosis_template") +@Data +public class DiagnosisTemplate { + + private Integer id; + + private String location; + + private String mainAcupoint; + + private String matchingAcupoint; +} diff --git a/common/src/main/java/cn/unizk/entity/po/DiagnosticReport.java b/common/src/main/java/cn/unizk/entity/po/DiagnosticReport.java new file mode 100644 index 0000000..e3a3ee2 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/DiagnosticReport.java @@ -0,0 +1,17 @@ +package cn.unizk.entity.po; + +import lombok.Data; + +/** + * @Author hao + * @Date 2025/7/25 9:54 + * @Version 1.0 + **/ +@Data +public class DiagnosticReport { + + /** + * + */ + private String sessionId; +} diff --git a/common/src/main/java/cn/unizk/entity/po/ExamScore.java b/common/src/main/java/cn/unizk/entity/po/ExamScore.java new file mode 100644 index 0000000..49149fb --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/ExamScore.java @@ -0,0 +1,23 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Author hao + * @Date 2026/1/27 18:54 + * @Version 1.0 + **/ +@Data +@TableName(value = "exam_score") +public class ExamScore { + + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + + private String typeName; + + private Integer score; +} diff --git a/common/src/main/java/cn/unizk/entity/po/GolfCustInfo.java b/common/src/main/java/cn/unizk/entity/po/GolfCustInfo.java new file mode 100644 index 0000000..12f54d1 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/GolfCustInfo.java @@ -0,0 +1,53 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-06-05 + */ +@Getter +@Setter +@ToString +@TableName("golf_cust_info") +public class GolfCustInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @NotBlank(message = "custName cannot be null") + private String custName; + + /** + * 0--女;1--男 + */ + @NotNull(message = "gender cannot be null") + private Integer gender; + + @NotNull(message = "age cannot be null") + private Integer age; + + @NotBlank(message = "phoneNumber cannot be null") + private String phoneNumber; + + @NotNull(message = "golfingAge cannot be null") + private Integer golfingAge; + + @NotNull(message = "weekFrequency cannot be null") + private Integer weekFrequency; +} diff --git a/common/src/main/java/cn/unizk/entity/po/GrfPj.java b/common/src/main/java/cn/unizk/entity/po/GrfPj.java new file mode 100644 index 0000000..d32832f --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/GrfPj.java @@ -0,0 +1,23 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @Author hao + * @Date 2026/4/17 13:42 + * @Version 1.0 + **/ +@TableName(value = "grf_pj") +@Data +public class GrfPj { + + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + + private BigDecimal price; +} diff --git a/common/src/main/java/cn/unizk/entity/po/HuifuData.java b/common/src/main/java/cn/unizk/entity/po/HuifuData.java new file mode 100644 index 0000000..97e655e --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/HuifuData.java @@ -0,0 +1,74 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

      + * + *

      + * + * @author caiwenhao + * @since 2025-09-29 + */ +@Getter +@Setter +@TableName("huifu_data") +public class HuifuData implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String dataType; + + private String uboIdDocType; + + /** + * 证件正面照片 + */ + private String uboIdDocCopy; + + /** + * 证件反面照片 + */ + private String uboIdDocCopyBack; + + /** + * 受益人证件姓名 + */ + private String uboIdDocName; + + /** + * 受益人证件号码 + */ + private String uboIdDocNumber; + + /** + * 证件居住地址 + */ + private String uboIdDocAddress; + + /** + * 证件有效期开始时间 + */ + private String uboPeriodBegin; + + /** + * 证件有效期结束时间(长期填长期) + */ + private String uboPeriodEnd; + + private String name; + + private String mobile; + + private Integer idCardNumber; + + private String contactType; +} diff --git a/common/src/main/java/cn/unizk/entity/po/InventoryStatistics.java b/common/src/main/java/cn/unizk/entity/po/InventoryStatistics.java new file mode 100644 index 0000000..bc19160 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/InventoryStatistics.java @@ -0,0 +1,74 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-08-20 + */ +@Getter +@Setter +@ToString +@TableName("inventory_statistics") +public class InventoryStatistics implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String productName; + + private Integer type; + + /** + * 规格 + */ + private String specification; + + /** + * 单位 + */ + private String unit; + + /** + * 入库数量 + */ + private Integer quantityInStock; + + /** + * 出库数量 + */ + private Integer outboundQuantity; + + /** + * 剩余数量 + */ + private Integer remainingQuantity; + + /** + * 操作人 + */ + private String operator; + + private String remark; + + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8") + private LocalDate createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/JkPhysio.java b/common/src/main/java/cn/unizk/entity/po/JkPhysio.java new file mode 100644 index 0000000..5e326a4 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/JkPhysio.java @@ -0,0 +1,89 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +/** + *

      + * + *

      + * + * @author caiwenhao + * @since 2025-08-21 + * 理疗师 + */ +@Getter +@Setter +@TableName("jk_physio") +public class JkPhysio implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer storeId; + + private String physioName; + + private String idcard; + + private String idcardImage; + + private String physioTel; + + private String physioGender; + + private String physioLevel; + + private String rejectReason; + + /** + * 评分 + */ + private Object rating; + + /** + * 服务订单数 + */ + private Integer serviceOrderNum; + + /** + * 返佣金额 + */ + private BigDecimal rebatePrice; + + private BigDecimal appointmentPrice; + + private Integer maxBookingsPerSlot; + + /** + * 擅长内容 + */ + private String beGoodAt; + + private String address; + + //资格证书 + private String credentials; + + //头像照 + private String headShot; + + private String status; + + private Integer audit; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/JkProduct.java b/common/src/main/java/cn/unizk/entity/po/JkProduct.java new file mode 100644 index 0000000..3379fb3 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/JkProduct.java @@ -0,0 +1,75 @@ +package cn.unizk.entity.po; + +import cn.unizk.validatedGroup.DefaultGroup; +import cn.unizk.validatedGroup.UpdateGroup; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.math.BigDecimal; + +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + + +/** + *

      + * + *

      + * + * @author caiwenhao + * @since 2025-08-21 + */ +@Getter +@Setter +@TableName("jk_product") +public class JkProduct implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "product_id", type = IdType.AUTO) + @NotNull(groups = UpdateGroup.class, message = "productId cannot be null") + private Integer productId; + + @NotBlank(groups = DefaultGroup.class, message = "productName cannot be null") + private String productName; + + @NotBlank(groups = DefaultGroup.class, message = "productType cannot be null") + private String productType; + + private String productImage; + + @NotNull(groups = DefaultGroup.class, message = "价格不能为空") + private BigDecimal productPrice; + + private String productTags; + + /** + * 商品排序 + */ + private String productSort; + + /** + * 商品状态(上架,下架) + */ + private String productStatus; + + /** + * 库存 + */ + @NotNull(groups = DefaultGroup.class, message = "库存不能为空") + private Integer productStock; + + private String exquisite; + + private Integer sales; + + private String details; + + private Integer whetherCarousel; + +} diff --git a/common/src/main/java/cn/unizk/entity/po/JkStore.java b/common/src/main/java/cn/unizk/entity/po/JkStore.java new file mode 100644 index 0000000..43e0870 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/JkStore.java @@ -0,0 +1,57 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +@TableName("jk_store") +public class JkStore { + + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + + private String storeName; + + private String storeImage; + + private String address; + + private String status; + + private String businessHours; + + private String type; + + private String contactTel; + + private String introduction; + + private BigDecimal appointPrice; + + //经度 + private Double longitude; + + //纬度 + private Double latitude; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime createTime; + + private String acctNo; + private Integer activateFzFlag; + + private Integer channelId; + + private String huifuId; + + private BigDecimal profitSharingPercentage; + +} diff --git a/common/src/main/java/cn/unizk/entity/po/Joint.java b/common/src/main/java/cn/unizk/entity/po/Joint.java new file mode 100644 index 0000000..aee0c65 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/Joint.java @@ -0,0 +1,32 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-09-03 + */ +@Getter +@Setter +@ToString +public class Joint implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String jointName; + + private String icoUrl; +} diff --git a/common/src/main/java/cn/unizk/entity/po/Menu.java b/common/src/main/java/cn/unizk/entity/po/Menu.java new file mode 100644 index 0000000..8626976 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/Menu.java @@ -0,0 +1,46 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

      + * + *

      + * + * @author caiwenhao + * @since 2025-08-26 + */ +@Getter +@Setter +public class Menu implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "menu_id", type = IdType.AUTO) + private Integer menuId; + + private String menuName; + + private Integer parentId; + + private Integer orderNum; + + private String path; + + private String component; + + private String status; + + private String perms; + + private String role; + + private String icon; + + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/Message.java b/common/src/main/java/cn/unizk/entity/po/Message.java new file mode 100644 index 0000000..f919ff2 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/Message.java @@ -0,0 +1,51 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + + +@Data +@TableName("message") +public class Message extends BaseEntity implements Serializable { + + @TableId(type = IdType.AUTO) + private Integer id; + + /** + * + * 32位会话id + * + */ + private String sessionId; + + private Integer sort; + + + private Integer effSort; //有效排序 + + /** + * + *AI回复 + * + */ + private String aiMessage; + + /** + * + *用户回复 + * + */ + private String userMessage; + + /** + * + *是否为有效信息 1 是 2 否 + * + */ + private Integer status; + +} diff --git a/common/src/main/java/cn/unizk/entity/po/MobileAppUser.java b/common/src/main/java/cn/unizk/entity/po/MobileAppUser.java new file mode 100644 index 0000000..bebc1d3 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/MobileAppUser.java @@ -0,0 +1,71 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-06-30 + */ +@Getter +@Setter +@ToString +@TableName("mobile_app_user") +public class MobileAppUser implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String openid; + + private String phoneNumber; + + private String nickname; + + private String avatar; + + private String painNumber; + + private Integer age; + + private Double height; + + private Double weight; + + private String symptom; + + private Integer points; + + private Integer hasMember; + + private String therapy; + + private Integer foursRating; + + private String evaluationResult; + + private String userType; + + private Integer gender; + + private Integer freeTrial; + + private Integer firstStoreId; + + private Integer firstPhysioId; + + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/MobileAppUserAccount.java b/common/src/main/java/cn/unizk/entity/po/MobileAppUserAccount.java new file mode 100644 index 0000000..984efcc --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/MobileAppUserAccount.java @@ -0,0 +1,37 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-07-08 + */ +@Getter +@Setter +@ToString +@TableName("mobile_app_user_account") +public class MobileAppUserAccount implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer mobileUserId; + + private BigDecimal accountBalance; + + private Integer memberLevel; +} diff --git a/common/src/main/java/cn/unizk/entity/po/MobileAppointments.java b/common/src/main/java/cn/unizk/entity/po/MobileAppointments.java new file mode 100644 index 0000000..d922346 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/MobileAppointments.java @@ -0,0 +1,116 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + *

      + * 预约记录表 + *

      + * + * @author niuniu + * @since 2026-07-01 + */ +@Getter +@Setter +@ToString +@TableName("mobile_appointments") +public class MobileAppointments implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 预约编号 + */ + private String appointmentNo; + + private Integer mobileUserId; + + /** + * 医生ID + */ + private Long physioId; + + /** + * 每日排班表ID + */ + private Long dailyScheduleId; + + /** + * 患者姓名 + */ + private String patientName; + + /** + * 患者手机号 + */ + private String patientPhone; + + /** + * 患者身份证号 + */ + private String patientIdCard; + + /** + * 就诊日期 + */ + private LocalDate visitDate; + + /** + * 时间段代码 + */ + private String timeSlotCode; + + /** + * 状态:待确认、已确认、已取消、已完成 + */ + private String status; + + /** + * 取消原因 + */ + private String cancelReason; + + /** + * 取消时间 + */ + private LocalDateTime cancelledAt; + + private BigDecimal payAmount; + + /** + * 0--未支付;1--已支付;2--已退款 + */ + private Integer payStatus; + + /** + * 0--疼痛明显减轻;1--无变化;2--疼痛加重 + */ + private Integer treatRating; + + /** + * 评价内容 + */ + private String evaluation; + + /** + * 备注 + */ + private String remark; + + private LocalDateTime createdAt; + + private LocalDateTime updatedAt; +} diff --git a/common/src/main/java/cn/unizk/entity/po/MobileChapter.java b/common/src/main/java/cn/unizk/entity/po/MobileChapter.java new file mode 100644 index 0000000..eb8bfa5 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/MobileChapter.java @@ -0,0 +1,41 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-06-30 + */ +@Getter +@Setter +@ToString +@TableName("mobile_chapter") +public class MobileChapter implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "chapter_id", type = IdType.AUTO) + private Integer chapterId; + + private Integer courseId; + + private String title; + + private String videoUrl; + + private Integer videoDuration; + + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/MobileCombo.java b/common/src/main/java/cn/unizk/entity/po/MobileCombo.java new file mode 100644 index 0000000..9bb1f60 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/MobileCombo.java @@ -0,0 +1,43 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-06-30 + */ +@Getter +@Setter +@ToString +@TableName("mobile_combo") +public class MobileCombo implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "combo_id", type = IdType.AUTO) + private Integer comboId; + + private String deviceId; + + private String comboName; + + private Integer comboDuration; + + private BigDecimal comboPrice; + + private String image; + + private Integer channelId; +} diff --git a/common/src/main/java/cn/unizk/entity/po/MobileCourse.java b/common/src/main/java/cn/unizk/entity/po/MobileCourse.java new file mode 100644 index 0000000..217b4cb --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/MobileCourse.java @@ -0,0 +1,42 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-06-30 + */ +@Getter +@Setter +@ToString +@TableName("mobile_course") +public class MobileCourse implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "course_id", type = IdType.AUTO) + private Integer courseId; + + private String title; + + private String objName; + + private BigDecimal price; + + private Integer purchases; + + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/MobileOrder.java b/common/src/main/java/cn/unizk/entity/po/MobileOrder.java new file mode 100644 index 0000000..2d6feff --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/MobileOrder.java @@ -0,0 +1,114 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-07-01 + */ +@Getter +@Setter +@ToString +@TableName("mobile_order") +public class MobileOrder implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId("order_id") + private String orderId; + + private String outTradeNo; + + private Integer mobileUserId; + + private Integer productId; + + private Integer comboId; + + private Integer courseId; + + /** + * 商品描述 + */ + private String description; + + /** + * 订单总价 + */ + private BigDecimal totalPrice; + + /** + * paid---已支付 + * unpaid---未支付 + * canceled---订单已取消 + * 'paid', 'unpaid', 'canceled','not_shipped','shipped','unverified','verified','to_be_evaluate','request_refund','refunded' + */ + private String status; + + private Integer storeId; + + private Integer physioId; + + private String deviceId; + + private LocalDateTime createTime; + + /** + * 支付时间 + */ + private LocalDateTime payTime; + + private String recipientPhone; + + private String recipientName; + + private String receivingAddress; + + /** + * none;success;fail + */ + private String applyFzFlag; + + /** + * 配送;自提 + */ + private String deliveryWay; + + private String hfSeqId; + + private String rejectReason; + + private LocalDateTime refundFinishTime; + + private LocalDateTime applyRefundTime; + + private String refundTrackingNumber; + + private String refundReason; + + /** + * 0-无售后,1-仅退款申请,2-退货退款申请,3-商家同意退款,4-商家拒绝退款,5-退款成功,6-退货退款成功,7-售后关闭 + */ + private Integer afterSaleStatus; + + /** + * 1--扫码开机;2--购买商品 + */ + private Integer orderType; + + private String refundReqSeqId; + + private String platformType; +} diff --git a/common/src/main/java/cn/unizk/entity/po/MobileOrderItem.java b/common/src/main/java/cn/unizk/entity/po/MobileOrderItem.java new file mode 100644 index 0000000..956b553 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/MobileOrderItem.java @@ -0,0 +1,43 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-07-10 + */ +@Getter +@Setter +@ToString +@TableName("mobile_order_item") +public class MobileOrderItem implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String mobileOrderId; + + private Integer productId; + + private Integer comboId; + + private Integer quantity; + + private BigDecimal price; + + private BigDecimal discount; +} diff --git a/common/src/main/java/cn/unizk/entity/po/MobileUserAddress.java b/common/src/main/java/cn/unizk/entity/po/MobileUserAddress.java new file mode 100644 index 0000000..bca7875 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/MobileUserAddress.java @@ -0,0 +1,48 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-07-01 + */ +@Getter +@Setter +@ToString +@TableName("mobile_user_address") +public class MobileUserAddress implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "address_id", type = IdType.AUTO) + private Integer addressId; + + private Integer mobileUserId; + + private String receiverName; + + private String phone; + + private String address; + + private LocalDateTime updateTime; + + private LocalDateTime createTime; + + /** + * 0--是;1--否 + */ + private Integer defaultAddr; +} diff --git a/common/src/main/java/cn/unizk/entity/po/MobileUserHaveCourse.java b/common/src/main/java/cn/unizk/entity/po/MobileUserHaveCourse.java new file mode 100644 index 0000000..42e7925 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/MobileUserHaveCourse.java @@ -0,0 +1,42 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-06-30 + */ +@Getter +@Setter +@ToString +@TableName("mobile_user_have_course") +public class MobileUserHaveCourse implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer mobileUserId; + + private Integer courseId; + + private LocalDateTime buyTime; + + /** + * 0--封锁;1--正常 + */ + private Integer status; +} diff --git a/common/src/main/java/cn/unizk/entity/po/MobileUserMedicalVisitInfo.java b/common/src/main/java/cn/unizk/entity/po/MobileUserMedicalVisitInfo.java new file mode 100644 index 0000000..3357dc3 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/MobileUserMedicalVisitInfo.java @@ -0,0 +1,49 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-07-01 + */ +@Getter +@Setter +@ToString +@TableName("mobile_user_medical_visit_info") +public class MobileUserMedicalVisitInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer mobileUserId; + + private String name; + + private String phoneNumber; + + /** + * 0--女;1--男 + */ + private Integer gender; + + /** + * 1--默认;0--非默认 + */ + private Integer itsDefault; + + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/MobileUserVideoProgress.java b/common/src/main/java/cn/unizk/entity/po/MobileUserVideoProgress.java new file mode 100644 index 0000000..cd58748 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/MobileUserVideoProgress.java @@ -0,0 +1,43 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-06-30 + */ +@Getter +@Setter +@ToString +@TableName("mobile_user_video_progress") +public class MobileUserVideoProgress implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer mobileUserId; + + private Integer chapterId; + + private Integer lastPosition; + + private Integer spentTime; + + private Integer progress; + + private LocalDateTime updateTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/ModulePerms.java b/common/src/main/java/cn/unizk/entity/po/ModulePerms.java new file mode 100644 index 0000000..081d74d --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/ModulePerms.java @@ -0,0 +1,38 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-08-10 + */ +@Getter +@Setter +@ToString +@TableName("module_perms") +public class ModulePerms implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String platformType; + + private String businessType; + + private Integer moduleId; + + private String status; +} diff --git a/common/src/main/java/cn/unizk/entity/po/OrderReview.java b/common/src/main/java/cn/unizk/entity/po/OrderReview.java new file mode 100644 index 0000000..d5f8f98 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/OrderReview.java @@ -0,0 +1,34 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2026/1/30 10:18 + * @Version 1.0 + **/ +@TableName("order_review") +@Data +public class OrderReview { + + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + + @NotBlank(message = "orderId cannot be empty") + private String orderId; + + @NotNull(message = "star cannot be empty") + private Integer star; + + @NotBlank(message = "comment cannot be empty") + private String comment; + + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/PhysioExam.java b/common/src/main/java/cn/unizk/entity/po/PhysioExam.java new file mode 100644 index 0000000..e82671f --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/PhysioExam.java @@ -0,0 +1,31 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Author hao + * @Date 2026/1/26 14:25 + * @Version 1.0 + **/ +@TableName("physio_exam") +@Data +public class PhysioExam { + + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + + private String title; + + private String answer; + + //1--单选;2--多选;3--判断题 + private Integer type; + + private String correctAnswer; + + private Integer subject; + +} diff --git a/common/src/main/java/cn/unizk/entity/po/PhysioSchedules.java b/common/src/main/java/cn/unizk/entity/po/PhysioSchedules.java new file mode 100644 index 0000000..9fcf2b2 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/PhysioSchedules.java @@ -0,0 +1,56 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

      + * 理疗师排班规则表 + *

      + * + * @author caiwenhao + * @since 2026-05-18 + */ +@Getter +@Setter +@ToString +@TableName("physio_schedules") +public class PhysioSchedules implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 理疗师ID + */ + private Integer physioId; + + + /** + * 时间段代码 + */ + private String timeSlotCode; + + /** + * 该时间段可预约人数 + */ + private Integer maxBookings; + + /** + * 是否启用:1-启用,0-停用 + */ + private Integer active; + + private LocalDateTime createdAt; + + private LocalDateTime updatedAt; +} diff --git a/common/src/main/java/cn/unizk/entity/po/PhysioThirteenArea.java b/common/src/main/java/cn/unizk/entity/po/PhysioThirteenArea.java new file mode 100644 index 0000000..e44276f --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/PhysioThirteenArea.java @@ -0,0 +1,42 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-09-02 + */ +@Getter +@Setter +@ToString +@TableName("physio_thirteen_area") +public class PhysioThirteenArea implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String areaName; + + private String pictureUrl; + + private String explanation; + + private String cause; + + private String improveMethod; + + private Integer type; +} diff --git a/common/src/main/java/cn/unizk/entity/po/ProductCarousel.java b/common/src/main/java/cn/unizk/entity/po/ProductCarousel.java new file mode 100644 index 0000000..021184f --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/ProductCarousel.java @@ -0,0 +1,21 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Author hao + * @Date 2025/9/3 15:46 + * @Version 1.0 + **/ +@Data +@TableName("product_carousel") +public class ProductCarousel { + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + private Integer productId; + private String imageUrl; + private String type; +} diff --git a/common/src/main/java/cn/unizk/entity/po/Question.java b/common/src/main/java/cn/unizk/entity/po/Question.java new file mode 100644 index 0000000..b01ae5f --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/Question.java @@ -0,0 +1,24 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2025/7/29 14:13 + * @Version 1.0 + **/ +@Data +@TableName("question") +public class Question { + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + private String question; + private String options; + private Integer sort; + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/RechargePackage.java b/common/src/main/java/cn/unizk/entity/po/RechargePackage.java new file mode 100644 index 0000000..5e362cc --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/RechargePackage.java @@ -0,0 +1,26 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @Author hao + * @Date 2026/4/17 15:07 + * @Version 1.0 + **/ +@TableName(value = "recharge_package") +@Data +public class RechargePackage { + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private BigDecimal rechargePrice; + + private BigDecimal giftPrice; + + private Integer memberLevel; +} diff --git a/common/src/main/java/cn/unizk/entity/po/ReportTemplate.java b/common/src/main/java/cn/unizk/entity/po/ReportTemplate.java new file mode 100644 index 0000000..7f6b80d --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/ReportTemplate.java @@ -0,0 +1,24 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2025/10/9 18:06 + * @Version 1.0 + **/ +@TableName("report_template") +@Data +public class ReportTemplate { + + private Integer id; + + private String text; + + private LocalDateTime createTime; + + private LocalDateTime updateTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/RunConsultation.java b/common/src/main/java/cn/unizk/entity/po/RunConsultation.java new file mode 100644 index 0000000..497ad5e --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/RunConsultation.java @@ -0,0 +1,38 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-07-15 + */ +@Getter +@Setter +@ToString +@TableName("run_consultation") +public class RunConsultation implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String question; + + private String lesion; + + private String conclusion; + + private String plan; +} diff --git a/common/src/main/java/cn/unizk/entity/po/StoreAccount.java b/common/src/main/java/cn/unizk/entity/po/StoreAccount.java new file mode 100644 index 0000000..0bec637 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/StoreAccount.java @@ -0,0 +1,31 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @Author hao + * @Date 2026/3/13 15:04 + * @Version 1.0 + **/ +@TableName("store_account") +@Data +public class StoreAccount { + + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + + private Integer storeId; + + private BigDecimal balance; + + private BigDecimal availableBalance; + + private BigDecimal freezeBalance; + + private BigDecimal controlAmount; +} diff --git a/common/src/main/java/cn/unizk/entity/po/SubHealthDietaryRegulation.java b/common/src/main/java/cn/unizk/entity/po/SubHealthDietaryRegulation.java new file mode 100644 index 0000000..57c056b --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/SubHealthDietaryRegulation.java @@ -0,0 +1,52 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + *

      + * + *

      + * + * @author caiwenhao + * @since 2025-12-22 + */ +@Getter +@Setter +@ToString +@TableName("sub_health_dietary_regulation") +public class SubHealthDietaryRegulation implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId("symptom_number") + @NotBlank(message = "symptomNumber cannot be empty") + private String symptomNumber; + + @NotBlank(message = "symptomDescription cannot be empty") + private String symptomDescription; + + @NotBlank(message = "lackNutrients cannot be empty") + private String lackNutrients; + + @NotBlank(message = "diagnosticReference cannot be empty") + private String diagnosticReference; + + @NotBlank(message = "commonReasons cannot be empty") + private String commonReasons; + + @NotBlank(message = "fruitSuggestion cannot be empty") + private String fruitSuggestion; + + @NotBlank(message = "vegetableSuggestion cannot be empty") + private String vegetableSuggestion; + + @NotBlank(message = "detectAndAdd cannot be empty") + private String detectAndAdd; +} diff --git a/common/src/main/java/cn/unizk/entity/po/SysDict.java b/common/src/main/java/cn/unizk/entity/po/SysDict.java new file mode 100644 index 0000000..991a0c1 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/SysDict.java @@ -0,0 +1,37 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * sys_dict + * @author + */ + +@Data +@TableName("sys_dict") +public class SysDict implements Serializable { + + @TableId(value = "dict_code",type = IdType.AUTO) + private Integer dictCode; + + private String dictValue; + + private String dictType; + + private Integer dictSort; + + private String pcDisplayImage; + + private String status; + + private Date createTime; + + private static final long serialVersionUID = 1L; + +} diff --git a/common/src/main/java/cn/unizk/entity/po/SysFile.java b/common/src/main/java/cn/unizk/entity/po/SysFile.java new file mode 100644 index 0000000..f0f855c --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/SysFile.java @@ -0,0 +1,31 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2025/8/27 18:33 + * @Version 1.0 + **/ +@Data +@TableName("sys_file") +public class SysFile { + + @TableId(value = "file_id",type = IdType.AUTO) + private Integer fileId; + + private String fileName; + + private String fileUrl; + + private String bucketName; + + private String fileType; + + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/SysUser.java b/common/src/main/java/cn/unizk/entity/po/SysUser.java new file mode 100644 index 0000000..3d4e1c3 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/SysUser.java @@ -0,0 +1,41 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2025/8/22 19:11 + * @Version 1.0 + **/ +@Data +@TableName("sys_user") +public class SysUser { + + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + private String role; + private Integer storeId; + private String username; + private String password; + + private String dept; + + //enable,disable + private String status; + + private String avatar; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime updateTime; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/TimeSlots.java b/common/src/main/java/cn/unizk/entity/po/TimeSlots.java new file mode 100644 index 0000000..8118ab5 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/TimeSlots.java @@ -0,0 +1,69 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.time.LocalTime; + +/** + *

      + * 时间段配置表 + *

      + * + * @author caiwenhao + * @since 2026-05-18 + */ +@Getter +@Setter +@ToString +@TableName("time_slots") +public class TimeSlots implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 时间段代码:M1,M2,M3,A1,A2,A3,A4 + */ + private String slotCode; + + /** + * 时间段名称 + */ + private String slotName; + + /** + * 开始时间 + */ + private LocalTime startTime; + + /** + * 结束时间 + */ + private LocalTime endTime; + + /** + * 上下午 + */ + private String period; + + /** + * 排序 + */ + private Integer sortOrder; + + /** + * 是否启用 + */ + private Byte active; + + private LocalDateTime createdAt; +} diff --git a/common/src/main/java/cn/unizk/entity/po/TreatParameter.java b/common/src/main/java/cn/unizk/entity/po/TreatParameter.java new file mode 100644 index 0000000..dca16be --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/TreatParameter.java @@ -0,0 +1,35 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Author hao + * @Date 2025/12/16 17:05 + * @Version 1.0 + **/ +@Data +@TableName("treat_parameter") +public class TreatParameter { + + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + + private String symptomsName; + + private String acupoint; + + private String ul; + + private String pl; + + private String pw; + + private String fr; + + private String tl; + + private String part; +} diff --git a/common/src/main/java/cn/unizk/entity/po/UserConsultationRecord.java b/common/src/main/java/cn/unizk/entity/po/UserConsultationRecord.java new file mode 100644 index 0000000..52b0562 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/UserConsultationRecord.java @@ -0,0 +1,121 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-08-18 + */ +@Getter +@Setter +@ToString +@TableName("user_consultation_record") +public class UserConsultationRecord implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String batchNumber; + + private Integer userId; + + private Integer physioId; + + private String department; + + private String patientName; + + /** + * 疼痛点位 + */ + private String painArea; + + /** + * 病程 + */ + private String painDuration; + + /** + * 疼痛等级 + */ + private String level; + + /** + * 诱发动作 + */ + private String inducedAction; + + /** + * 放射范围 + */ + private String radiationRange; + + /** + * 伴随症状 + */ + private String symptoms; + + /** + * 关节受限 + */ + private String jointRestricted; + + /** + * 关节稳定 + */ + private String jointStability; + + /** + * 发病诱因 + */ + private String triggeringFactors; + + /** + * 过往治疗 + */ + private String pastTreat; + + /** + * 中医诊断 + */ + private String chineseDiagnosis; + + /** + * 西医诊断 + */ + private String westernDiagnosis; + + /** + * 禁忌 + */ + private String taboo; + + private String electronicPrescriptionUrl; + + //调配者 + private String coordinatorSignUrl; + + //校对者 + private String proofreaderSignUrl; + + private LocalDate createTime; + + private String drugPrice; + + private String phoneNumber; +} diff --git a/common/src/main/java/cn/unizk/entity/po/UserDeviceTreatRecord.java b/common/src/main/java/cn/unizk/entity/po/UserDeviceTreatRecord.java new file mode 100644 index 0000000..9adbbb3 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/UserDeviceTreatRecord.java @@ -0,0 +1,28 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2025/12/16 15:37 + * @Version 1.0 + **/ +@Data +@TableName(value = "user_device_treat_record") +public class UserDeviceTreatRecord { + + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + + private Integer userId; + + private String deviceId; + + private LocalDateTime createTime; + +} diff --git a/common/src/main/java/cn/unizk/entity/po/UserFreeTrialInfo.java b/common/src/main/java/cn/unizk/entity/po/UserFreeTrialInfo.java new file mode 100644 index 0000000..0bb4a22 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/UserFreeTrialInfo.java @@ -0,0 +1,43 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author niuniu + * @since 2026-09-09 + */ +@Getter +@Setter +@ToString +@TableName("user_free_trial_info") +public class UserFreeTrialInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer userId; + + private String symptomPosition; + + private Integer strainLevel; + + private Integer restrictedDegree; + + private Integer consumptionLevel; + + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/UserHaveCourse.java b/common/src/main/java/cn/unizk/entity/po/UserHaveCourse.java new file mode 100644 index 0000000..b7093d4 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/UserHaveCourse.java @@ -0,0 +1,46 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author caiwenhao + * @since 2026-03-09 + */ +/*@Getter +@Setter +@ToString +@TableName("user_have_course") +public class UserHaveCourse implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer wxUserId; + + private Integer courseId; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime buyTime; + + *//** + * 0--封锁;1--正常 + *//* + private Integer status; +}*/ diff --git a/common/src/main/java/cn/unizk/entity/po/UserTreatmentParameters.java b/common/src/main/java/cn/unizk/entity/po/UserTreatmentParameters.java new file mode 100644 index 0000000..fe7553a --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/UserTreatmentParameters.java @@ -0,0 +1,55 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author caiwenhao + * @since 2026-05-08 + */ +@Getter +@Setter +@ToString +@TableName("user_treatment_parameters") +public class UserTreatmentParameters implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + +// private String openid; + + private Integer appUserId; + + private String deviceId; + + private String ul; + + private String pl; + + private String pw; + + private String fr; + + private String tl; + + private Integer status; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone="GMT+8") + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/WxOrder.java b/common/src/main/java/cn/unizk/entity/po/WxOrder.java new file mode 100644 index 0000000..d3c6648 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/WxOrder.java @@ -0,0 +1,90 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2025/8/29 16:21 + * @Version 1.0 + **/ +/*@TableName(value = "wx_order") +@Data +public class WxOrder { + + @TableId(value = "order_id") + private String orderId; + + private String outTradeNo; + + private String openid; + + private String productId; + + private Integer comboId; + + private Integer courseId; + + private String description; + + private BigDecimal totalPrice; + + *//** + * paid---已支付 + * unpaid---未支付 + * canceled---订单已取消 + * 'paid', 'unpaid', 'canceled','not_shipped','shipped','unverified','verified','to_be_evaluate','request_refund','refunded' + *//* + private String status; + + private Integer storeId; + + private Integer physioId; + + private String deviceId; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime createTime; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime payTime; + + private String recipientPhone; + + private String recipientName; + + private String receivingAddress; + + private String applyFzFlag; + + private String deliveryWay; + + private String hfSeqId; + + private String rejectReason; + + private LocalDateTime refundFinishTime; + + private LocalDateTime applyRefundTime; + + private String refundTrackingNumber; + + private String refundReason; + + private Integer afterSaleStatus; + + //1--扫码付费开机;3--购买视频课程;4--会员充值;6--开通会员 + private Integer orderType; + + private String platformType; + + private String refundReqSeqId; +}*/ diff --git a/common/src/main/java/cn/unizk/entity/po/WxOrderItem.java b/common/src/main/java/cn/unizk/entity/po/WxOrderItem.java new file mode 100644 index 0000000..b823d9e --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/WxOrderItem.java @@ -0,0 +1,43 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + *

      + * + *

      + * + * @author caiwenhao + * @since 2025-10-14 + */ +/*@Getter +@Setter +@ToString +@TableName("wx_order_item") +public class WxOrderItem implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String orderId; + + private Integer productId; + + private Integer comboId; + + private Integer quantity; + + private BigDecimal price; + + private BigDecimal discount; +}*/ diff --git a/common/src/main/java/cn/unizk/entity/po/WxUser.java b/common/src/main/java/cn/unizk/entity/po/WxUser.java new file mode 100644 index 0000000..10cbacf --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/WxUser.java @@ -0,0 +1,57 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2025/7/11 10:23 + * @Version 1.0 + **/ +/*@Data +@TableName("wx_user") +@Accessors(chain = true) +public class WxUser { + + @TableId(value = "id",type = IdType.AUTO) + private Integer id; + + private String openid; + + private String sessionKey; + + private String nickname; + + private String avatar; + + private String phoneNumber; + + private Integer age; + + private Double height; + + private Double weight; + + private String symptom; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime createTime; + + private Integer channelId; + + private Integer templateId; + + private String painNumber; + + private Integer points; + + private Integer hasMember; +}*/ diff --git a/common/src/main/java/cn/unizk/entity/po/WxUserAccount.java b/common/src/main/java/cn/unizk/entity/po/WxUserAccount.java new file mode 100644 index 0000000..449ece9 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/WxUserAccount.java @@ -0,0 +1,39 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + *

      + * + *

      + * + * @author caiwenhao + * @since 2026-04-17 + */ +/*@Getter +@Setter +@ToString +@TableName("wx_user_account") +public class WxUserAccount implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String openid; + + private BigDecimal accountBalance; + + private Integer membershipLevel; + + private Integer points; +}*/ diff --git a/common/src/main/java/cn/unizk/entity/po/WxUserAddress.java b/common/src/main/java/cn/unizk/entity/po/WxUserAddress.java new file mode 100644 index 0000000..bde5d4c --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/WxUserAddress.java @@ -0,0 +1,41 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2025/10/14 11:06 + * @Version 1.0 + **/ +/*@Data +@TableName(value = "wx_user_address") +public class WxUserAddress { + + @TableId(value = "address_id",type = IdType.AUTO) + private Integer addressId; + + private String openid; + + private String receiverName; + + private String phone; + + private String address; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime updateTime; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime createTime; + + private Integer defaultAddr; +}*/ diff --git a/common/src/main/java/cn/unizk/entity/po/WxUserMedicalVisitInfo.java b/common/src/main/java/cn/unizk/entity/po/WxUserMedicalVisitInfo.java new file mode 100644 index 0000000..99911d0 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/WxUserMedicalVisitInfo.java @@ -0,0 +1,54 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author caiwenhao + * @since 2026-05-19 + */ +/*@Getter +@Setter +@ToString +@TableName("wx_user_medical_visit_info") +public class WxUserMedicalVisitInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String openid; + + @NotBlank(message = "name cannot be null") + private String name; + + @NotBlank(message = "phoneNumber cannot be null") + private String phoneNumber; + + *//** + * 0--女;1--男 + *//* + @NotNull(message = "gender cannot be null") + private Integer gender; + + *//** + * 1--默认;0--非默认 + *//* + private Integer itsDefault; + + private LocalDateTime createTime; +}*/ diff --git a/common/src/main/java/cn/unizk/entity/po/WxUserSession.java b/common/src/main/java/cn/unizk/entity/po/WxUserSession.java new file mode 100644 index 0000000..28530bf --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/WxUserSession.java @@ -0,0 +1,22 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2025/7/11 10:39 + * @Version 1.0 + **/ +@Data +@TableName("wx_user_session") +public class WxUserSession { + private String openid; + private Long sessionId; + private Long sort; + private String content; + private String type; + private LocalDateTime sessionTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/WxUserVideoProgress.java b/common/src/main/java/cn/unizk/entity/po/WxUserVideoProgress.java new file mode 100644 index 0000000..d7636ae --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/WxUserVideoProgress.java @@ -0,0 +1,43 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author caiwenhao + * @since 2026-03-09 + */ +/*@Getter +@Setter +@ToString +@TableName("wx_user_video_progress") +public class WxUserVideoProgress implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer wxUserId; + + private Integer chapterId; + + private Integer lastPosition; + + private Integer spentTime; + + private Integer progress; + + private LocalDateTime updateTime; +}*/ diff --git a/common/src/main/java/cn/unizk/entity/po/WxVipRecharge.java b/common/src/main/java/cn/unizk/entity/po/WxVipRecharge.java new file mode 100644 index 0000000..194e981 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/WxVipRecharge.java @@ -0,0 +1,44 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + *

      + * + *

      + * + * @author caiwenhao + * @since 2026-04-17 + */ +@Getter +@Setter +@ToString +@TableName("wx_vip_recharge") +public class WxVipRecharge implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String openid; + + private String orderId; + + private BigDecimal rechargeAmount; + + private BigDecimal presentAmount; + + private Integer payStatus; + + private LocalDateTime createTime; +} diff --git a/common/src/main/java/cn/unizk/entity/po/XunfuAccount.java b/common/src/main/java/cn/unizk/entity/po/XunfuAccount.java new file mode 100644 index 0000000..e848803 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/XunfuAccount.java @@ -0,0 +1,99 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +/** + *

      + * + *

      + * + * @author caiwenhao + * @since 2025-09-25 + */ +@Getter +@Setter +@TableName("xunfu_account") +public class XunfuAccount implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "acct_no") + @NotBlank(message = "acctNo cannot be empty") + private String acctNo; + + @NotBlank(message = "userType cannot be empty") + private String userType; + + @NotBlank(message = "userName cannot be empty") + private String userName; + + private String mobile; + + private String compNm; + + @NotBlank(message = "legalCertType cannot be empty") + private String legalCertType; + + @NotBlank(message = "userCardNo cannot be empty") + private String userCardNo; + + @NotBlank(message = "userCardStartDate cannot be empty") + private String userCardStartDate; + + @NotBlank(message = "userCardEndDate cannot be empty") + private String userCardEndDate; + + @NotBlank(message = "acctNm cannot be empty") + private String acctNm; + + @NotBlank(message = "acctType cannot be empty") + private String acctType; + + @NotBlank(message = "bankCardNo cannot be empty") + private String bankCardNo; + + @NotBlank(message = "acctBankNo cannot be empty") + private String acctBankNo; + + @NotBlank(message = "accZbankNo cannot be empty") + private String accZbankNo; + + @NotBlank(message = "accZbankNm cannot be empty") + private String accZbankNm; + + @NotBlank(message = "accZbankCode cannot be empty") + private String accZbankCode; + + private String reservedPhone; + + @NotBlank(message = "licNo cannot be empty") + private String licNo; + + @NotBlank(message = "licStartDate cannot be empty") + private String licStartDate; + + @NotBlank(message = "licEndDate cannot be empty") + private String licEndDate; + + @NotBlank(message = "businessAdressCode cannot be empty") + private String businessAdressCode; + + @NotBlank(message = "businessAdress cannot be empty") + private String businessAdress; + + @NotBlank(message = "regAddressCode cannot be empty") + private String regAddressCode; + + @NotBlank(message = "regAddress cannot be empty") + private String regAddress; + + @NotBlank(message = "businessMcc cannot be empty") + private String businessMcc; +} diff --git a/common/src/main/java/cn/unizk/entity/po/XunfuAccountImage.java b/common/src/main/java/cn/unizk/entity/po/XunfuAccountImage.java new file mode 100644 index 0000000..38140c2 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/XunfuAccountImage.java @@ -0,0 +1,20 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Author hao + * @Date 2025/9/26 10:41 + * @Version 1.0 + **/ +@Data +@TableName(value = "xunfu_account_image") +public class XunfuAccountImage { + @TableId(value = "image_id") + private Integer imageId; + private String acctNo; + private String name; + private String value; +} diff --git a/common/src/main/java/cn/unizk/entity/po/YnzkSystemDevice.java b/common/src/main/java/cn/unizk/entity/po/YnzkSystemDevice.java new file mode 100644 index 0000000..bd673b8 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/po/YnzkSystemDevice.java @@ -0,0 +1,183 @@ +package cn.unizk.entity.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.util.Date; +import lombok.Getter; +import lombok.Setter; + +/** + *

      + * 设备表 + *

      + * + * @author caiwenhao + * @since 2025-09-30 + */ +@Getter +@Setter +@TableName("ynzk_system_device") +public class YnzkSystemDevice implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 设备ID + */ + private String muid; + + /** + * 设备序列号 + */ + private String serial; + + /** + * 设备状态:01开机02理疗中03处方04关机 + */ + private Integer status; + + /** + * 机器配置:2医疗版本 1:非医疗版本….. + */ + private String cf; + + /** + * 使用的状态开机关机 理疗 + */ + private String usessStatus; + + /** + * 套餐状态:1:正常 0:套餐到期停止使用 | 禁止使用 + */ + private Integer isUse; + + /** + * 出库状态 0:未出库 1:已出库 + */ + private Integer isOutSet; + + /** + * 出库时间 + */ + private Date outSetTime; + + /** + * 出库给代理商时间 + */ + private Date outSetAgentsTime; + + /** + * 出库给门店时间 + */ + private Date outSetStoreTime; + + /** + * 出库给个人时间 + */ + private Date outSetUserTime; + + /** + * 收费方式类型 :1量 2:时长3:时间 4:量时长 5:量时间 + */ + private Integer type; + + /** + * 套餐ID + */ + private Integer packageId; + + /** + * 初始量 + */ + private Integer packageNumber; + + /** + * 初始时长 + */ + private Integer packageLong; + + /** + * 所属用户 + */ + private Integer beUserId; + + /** + * 所属门店 + */ + private Integer beStoreId; + + /** + * 所属代理商 + */ + private Integer beAgentsId; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 工作模式:1联机模式 …….2脱机模式 + */ + private String wm; + + /** + * 硬件版本 + */ + private String hardwareVersion; + + /** + * 软件版本 + */ + private String softwarVersion; + + /** + * ICCID号码 + */ + private String iccid; + + /** + * 4G设备固件版本 + */ + private String firmwareVersion; + + /** + * 设备二维码信息 + */ + private String code; + + /** + * 设备当前时间 + */ + private Date date; + + /** + * 脱机模式下,剩余允许的使用次数[000,999],3位数 + */ + private String tc; + + /** + * 到期时间 + */ + private Date packageTime; + + /** + * 实际剩余次数 + */ + private Integer practicalNumber; + + /** + * 脱机时间 + */ + private Date wmTime; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/AppUserDetailsVO.java b/common/src/main/java/cn/unizk/entity/vo/AppUserDetailsVO.java new file mode 100644 index 0000000..a1fbadf --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/AppUserDetailsVO.java @@ -0,0 +1,28 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.MobileAppUser; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2026/9/10 18:06 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class AppUserDetailsVO extends MobileAppUser { + private static final long serialVersionUID = -8826255751562791179L; + + private String symptomPosition; + + private String strainLevel; + + private String restrict; + + private String consumptionLevel; + + private String firstStoreName; + + private String firstPhysioName; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/AppointmentVO.java b/common/src/main/java/cn/unizk/entity/vo/AppointmentVO.java new file mode 100644 index 0000000..c49ec12 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/AppointmentVO.java @@ -0,0 +1,23 @@ +package cn.unizk.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; +import java.util.Date; + +/** + * @Author hao + * @Date 2026/5/18 18:25 + * @Version 1.0 + **/ +@Data +public class AppointmentVO { + + private Integer physioId; + + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8") + private Date dateTime; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/AppointmentVO2.java b/common/src/main/java/cn/unizk/entity/vo/AppointmentVO2.java new file mode 100644 index 0000000..e138cce --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/AppointmentVO2.java @@ -0,0 +1,16 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.Appointments; +import lombok.Data; + +/** + * @Author hao + * @Date 2026/5/19 10:18 + * @Version 1.0 + **/ +@Data +public class AppointmentVO2 extends Appointments { + private static final long serialVersionUID = -5645396508104939434L; + + private Integer medicalVisitId; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/AppointmentVO3.java b/common/src/main/java/cn/unizk/entity/vo/AppointmentVO3.java new file mode 100644 index 0000000..ef365ed --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/AppointmentVO3.java @@ -0,0 +1,23 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +import java.time.LocalDate; + +/** + * @Author hao + * @Date 2026/5/19 11:40 + * @Version 1.0 + **/ +@Data +public class AppointmentVO3 { + + + private LocalDate scheduleDate; + + private String hasAvailable; + + private Integer availableSlotsCount; + + private Integer totalAvailableCount; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/AppointmentVO4.java b/common/src/main/java/cn/unizk/entity/vo/AppointmentVO4.java new file mode 100644 index 0000000..0ee4b2a --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/AppointmentVO4.java @@ -0,0 +1,23 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +import java.time.LocalDate; + +/** + * @Author hao + * @Date 2026/5/19 14:53 + * @Version 1.0 + **/ +@Data +public class AppointmentVO4 { + private Integer physioId; + + private LocalDate scheduleDate; + + private Integer totalRemaining; + + private String physioName; + + private String beGoodAt; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/AppointmentsVO5.java b/common/src/main/java/cn/unizk/entity/vo/AppointmentsVO5.java new file mode 100644 index 0000000..5249184 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/AppointmentsVO5.java @@ -0,0 +1,25 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.Appointments; +import cn.unizk.entity.po.TimeSlots; +import lombok.Data; + +/** + * @Author hao + * @Date 2026/5/20 16:07 + * @Version 1.0 + **/ +@Data +public class AppointmentsVO5 extends Appointments { + private static final long serialVersionUID = 103277923808175395L; + + private String physioName; + + private String storeName; + + private String storeAddress; + + private TimeSlots timeSlots; + + private Integer mobileUserId; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/BuyCourseVO.java b/common/src/main/java/cn/unizk/entity/vo/BuyCourseVO.java new file mode 100644 index 0000000..e2c5c5f --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/BuyCourseVO.java @@ -0,0 +1,23 @@ +package cn.unizk.entity.vo; + +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * @Author hao + * @Date 2026/3/10 11:35 + * @Version 1.0 + **/ +@Getter +@Setter +public class BuyCourseVO { + + @NotNull(message = "courseId cannot null") + private Integer courseId; + + @NotBlank(message = "amount cannot null") + private String amount; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/CallbackResponse.java b/common/src/main/java/cn/unizk/entity/vo/CallbackResponse.java new file mode 100644 index 0000000..63d45db --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/CallbackResponse.java @@ -0,0 +1,20 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +/** + * @Author hao + * @Date 2025/9/25 14:26 + * @Version 1.0 + **/ +@Data +public class CallbackResponse { + private String resultCode; + + public CallbackResponse() { + } + + public CallbackResponse(String resultCode) { + this.resultCode = resultCode; + } +} diff --git a/common/src/main/java/cn/unizk/entity/vo/ChapterVO.java b/common/src/main/java/cn/unizk/entity/vo/ChapterVO.java new file mode 100644 index 0000000..973d824 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/ChapterVO.java @@ -0,0 +1,18 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.Chapter; +import lombok.Getter; +import lombok.Setter; + +/** + * @Author hao + * @Date 2026/3/10 10:44 + * @Version 1.0 + **/ +@Getter +@Setter +public class ChapterVO extends Chapter { + private static final long serialVersionUID = -846637109457057436L; + + private Integer progress; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/ComboVO.java b/common/src/main/java/cn/unizk/entity/vo/ComboVO.java new file mode 100644 index 0000000..0d15647 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/ComboVO.java @@ -0,0 +1,17 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.Combo; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2025/9/11 16:22 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class ComboVO extends Combo { + + private String orderId; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/CourseVO.java b/common/src/main/java/cn/unizk/entity/vo/CourseVO.java new file mode 100644 index 0000000..9e0a8ce --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/CourseVO.java @@ -0,0 +1,23 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.Course; +import lombok.Getter; +import lombok.Setter; + +/** + * @Author hao + * @Date 2026/3/6 18:58 + * @Version 1.0 + **/ +@Getter +@Setter +public class CourseVO extends Course { + private static final long serialVersionUID = 4074368146181323934L; + + private Integer chapterTotal; + + private Integer progress; + + //0--未购买 1--已购买 + private Integer unlock; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/DailySchedulesVO.java b/common/src/main/java/cn/unizk/entity/vo/DailySchedulesVO.java new file mode 100644 index 0000000..22136c9 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/DailySchedulesVO.java @@ -0,0 +1,33 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.DailySchedules; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.LocalTime; + +/** + * @Author hao + * @Date 2026/5/18 17:08 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class DailySchedulesVO extends DailySchedules { + private static final long serialVersionUID = -1147426419507150548L; + + private String slotCode; + + private String slotName; + + private LocalTime startTime; + + private LocalTime endTime; + + private Integer availableCount; + + private Integer storeId; + + private String scheduleDateStr; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/DeviceConfigVO.java b/common/src/main/java/cn/unizk/entity/vo/DeviceConfigVO.java new file mode 100644 index 0000000..b9233b4 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/DeviceConfigVO.java @@ -0,0 +1,24 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +import java.util.List; + +/** + * @Author hao + * @Date 2025/11/3 10:58 + * @Version 1.0 + **/ +@Data +public class DeviceConfigVO { + + private List deviceIds; + + private String cf; + + private String wm; + + private String canUse; + + private Integer upgradeSwitch; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/DeviceOutboundVO.java b/common/src/main/java/cn/unizk/entity/vo/DeviceOutboundVO.java new file mode 100644 index 0000000..78c7a35 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/DeviceOutboundVO.java @@ -0,0 +1,22 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +import java.util.List; + +/** + * @Author hao + * @Date 2025/9/12 17:42 + * @Version 1.0 + **/ +@Data +public class DeviceOutboundVO { + + private Integer storeId; + + private String phoneNumber; + + private Integer agentId; + + private List deviceIds; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/DeviceUsageDetailVO.java b/common/src/main/java/cn/unizk/entity/vo/DeviceUsageDetailVO.java new file mode 100644 index 0000000..b444ba5 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/DeviceUsageDetailVO.java @@ -0,0 +1,17 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.DeviceUsageDetail; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2026/6/3 16:35 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class DeviceUsageDetailVO extends DeviceUsageDetail { + + private Long sustainTime; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/DeviceUsageRecordVO.java b/common/src/main/java/cn/unizk/entity/vo/DeviceUsageRecordVO.java new file mode 100644 index 0000000..37ed06c --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/DeviceUsageRecordVO.java @@ -0,0 +1,17 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.DeviceUsageRecord; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2025/10/22 14:15 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class DeviceUsageRecordVO extends DeviceUsageRecord { + + private Long useDuration; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/DeviceUsageRecordVO2.java b/common/src/main/java/cn/unizk/entity/vo/DeviceUsageRecordVO2.java new file mode 100644 index 0000000..c80e6d4 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/DeviceUsageRecordVO2.java @@ -0,0 +1,20 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2025/11/6 18:02 + * @Version 1.0 + **/ +@Data +public class DeviceUsageRecordVO2 { + + private LocalDateTime lastCreateTime; + + private Integer usageRecordId; + + +} diff --git a/common/src/main/java/cn/unizk/entity/vo/DeviceVO.java b/common/src/main/java/cn/unizk/entity/vo/DeviceVO.java new file mode 100644 index 0000000..6edd1fc --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/DeviceVO.java @@ -0,0 +1,28 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.Device; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @Author hao + * @Date 2025/9/12 16:40 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class DeviceVO extends Device { + + private String keyword; + + //1--出库 0--未出库 + private Integer outboundStatus; + + private String sort; + + private String beDesc = "1"; + + private List deviceIds; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/EightMajorJointsVO.java b/common/src/main/java/cn/unizk/entity/vo/EightMajorJointsVO.java new file mode 100644 index 0000000..14f88e0 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/EightMajorJointsVO.java @@ -0,0 +1,39 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +import java.util.List; + +/** + * @Author hao + * @Date 2026/8/12 14:33 + * @Version 1.0 + **/ +@Data +public class EightMajorJointsVO { + + private String name; + + //0--女;1--男 + private Integer sex; + + private Integer age; + + private String phone; + + private List joints; + + //部位:肩,肘,腰... + private String part; + + private Integer area; + + + @Data + public static class Joints { + + private String patientResponse; + + private Integer number; + } +} diff --git a/common/src/main/java/cn/unizk/entity/vo/GradeExamVO.java b/common/src/main/java/cn/unizk/entity/vo/GradeExamVO.java new file mode 100644 index 0000000..c319265 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/GradeExamVO.java @@ -0,0 +1,16 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +/** + * @Author hao + * @Date 2026/1/27 18:15 + * @Version 1.0 + **/ +@Data +public class GradeExamVO { + private Integer examId; + + private String answer; + +} diff --git a/common/src/main/java/cn/unizk/entity/vo/GrfReportVO.java b/common/src/main/java/cn/unizk/entity/vo/GrfReportVO.java new file mode 100644 index 0000000..2ee54d8 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/GrfReportVO.java @@ -0,0 +1,34 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +/** + * @Author hao + * @Date 2026/6/5 14:15 + * @Version 1.0 + **/ +@Data +public class GrfReportVO { + + private String name; + + private String gender; + + private Integer age; + + private String phoneNumber; + + private Integer golfingAge; + + private Integer weekFrequency; + + private String report; + + private String answer1; + + private String answer2; + + private String answer3; + + private String answer4; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/GrfdialogueVO.java b/common/src/main/java/cn/unizk/entity/vo/GrfdialogueVO.java new file mode 100644 index 0000000..b4ebda1 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/GrfdialogueVO.java @@ -0,0 +1,20 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @Author hao + * @Date 2026/6/5 15:55 + * @Version 1.0 + **/ +@Data +public class GrfdialogueVO { + + @NotBlank(message = "answer cannot be empty") + private String answer; + + + private String question; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/InStockVO.java b/common/src/main/java/cn/unizk/entity/vo/InStockVO.java new file mode 100644 index 0000000..b054c21 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/InStockVO.java @@ -0,0 +1,9 @@ +package cn.unizk.entity.vo; + +/** + * @Author hao + * @Date 2025/10/20 18:35 + * @Version 1.0 + **/ +public class InStockVO { +} diff --git a/common/src/main/java/cn/unizk/entity/vo/JkProductVO.java b/common/src/main/java/cn/unizk/entity/vo/JkProductVO.java new file mode 100644 index 0000000..a7a335e --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/JkProductVO.java @@ -0,0 +1,20 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.JkProduct; +import cn.unizk.entity.po.ProductCarousel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @Author hao + * @Date 2025/9/2 17:53 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class JkProductVO extends JkProduct { + private static final long serialVersionUID = 3539386175410264485L; + private List productCarousels; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/JkStoreReqVO.java b/common/src/main/java/cn/unizk/entity/vo/JkStoreReqVO.java new file mode 100644 index 0000000..699b2e7 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/JkStoreReqVO.java @@ -0,0 +1,20 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.JkStore; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2025/9/8 13:44 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class JkStoreReqVO extends JkStore { + private String keyword; + + private String username; + + private String password; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/JkStoreResVO.java b/common/src/main/java/cn/unizk/entity/vo/JkStoreResVO.java new file mode 100644 index 0000000..c302a3f --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/JkStoreResVO.java @@ -0,0 +1,21 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.BusinessChannel; +import cn.unizk.entity.po.JkStore; +import cn.unizk.entity.po.SysUser; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2025/9/9 18:38 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class JkStoreResVO extends JkStore { + + private SysUser sysUser; + + private BusinessChannel businessChannel; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/JointVO.java b/common/src/main/java/cn/unizk/entity/vo/JointVO.java new file mode 100644 index 0000000..f42a784 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/JointVO.java @@ -0,0 +1,21 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.Joint; +import cn.unizk.entity.po.PhysioThirteenArea; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @Author hao + * @Date 2026/9/3 16:52 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class JointVO extends Joint { + private static final long serialVersionUID = 5406558752342469480L; + + private List areas; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/ManualAnswerVO.java b/common/src/main/java/cn/unizk/entity/vo/ManualAnswerVO.java new file mode 100644 index 0000000..b4d64ee --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/ManualAnswerVO.java @@ -0,0 +1,16 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +/** + * @Author hao + * @Date 2025/11/12 11:58 + * @Version 1.0 + **/ +@Data +public class ManualAnswerVO { + + private String number; + + private String message; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/MinioRespVO.java b/common/src/main/java/cn/unizk/entity/vo/MinioRespVO.java new file mode 100644 index 0000000..41d7905 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/MinioRespVO.java @@ -0,0 +1,25 @@ +package cn.unizk.entity.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author hao + * @Date 2025/8/27 17:22 + * @Version 1.0 + **/ +@AllArgsConstructor +@NoArgsConstructor +@Data +@Builder +public class MinioRespVO { + private Integer fileId; + + private String minIoUrl; + + private String nginxUrl; + + private String fileName; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/MobileAppLoginRequestVO.java b/common/src/main/java/cn/unizk/entity/vo/MobileAppLoginRequestVO.java new file mode 100644 index 0000000..218c185 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/MobileAppLoginRequestVO.java @@ -0,0 +1,16 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +/** + * @Author hao + * @Date 2026/6/30 10:48 + * @Version 1.0 + **/ +@Data +public class MobileAppLoginRequestVO { + + private String phoneNumber; + + private String plainText; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/MobileAppUserVO.java b/common/src/main/java/cn/unizk/entity/vo/MobileAppUserVO.java new file mode 100644 index 0000000..de1b319 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/MobileAppUserVO.java @@ -0,0 +1,20 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.MobileAppUser; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2026/7/3 14:19 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class MobileAppUserVO extends MobileAppUser { + private static final long serialVersionUID = 4110188715525024836L; + + private String token; + + private String keyword; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/MobileOrderDetailVO.java b/common/src/main/java/cn/unizk/entity/vo/MobileOrderDetailVO.java new file mode 100644 index 0000000..fb260d1 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/MobileOrderDetailVO.java @@ -0,0 +1,24 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @Author hao + * @Date 2026/7/10 15:54 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class MobileOrderDetailVO extends MobileOrder { + private static final long serialVersionUID = 7200043740382428620L; + private JkStore jkStore; + private JkPhysio jkPhysio; + // private Combo combo; + private MobileAppUser mobileAppUser; + private String productName; + private List orderItemVOS; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/MobileOrderItemVO.java b/common/src/main/java/cn/unizk/entity/vo/MobileOrderItemVO.java new file mode 100644 index 0000000..d14dfa1 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/MobileOrderItemVO.java @@ -0,0 +1,23 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.MobileOrderItem; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * @Author hao + * @Date 2026/7/10 15:37 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class MobileOrderItemVO extends MobileOrderItem { + private static final long serialVersionUID = 418990870953628306L; + + private String productName; + private String image; + private Integer storeId; + private BigDecimal singleProductPrice; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/MobileOrderVO.java b/common/src/main/java/cn/unizk/entity/vo/MobileOrderVO.java new file mode 100644 index 0000000..ef87aba --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/MobileOrderVO.java @@ -0,0 +1,26 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.MobileOrder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @Author hao + * @Date 2026/7/8 16:36 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class MobileOrderVO extends MobileOrder { + private static final long serialVersionUID = -1172901594708352479L; + + private String ordererPhone; + private String productName; + private String chineseOrderStatus; + private String image; + private List orderItemVOS; + private String orderChannel = "mobileApp"; + private String openid; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/OneClickVO.java b/common/src/main/java/cn/unizk/entity/vo/OneClickVO.java new file mode 100644 index 0000000..dfd056d --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/OneClickVO.java @@ -0,0 +1,16 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +/** + * @Author hao + * @Date 2026/8/11 14:17 + * @Version 1.0 + **/ +@Data +public class OneClickVO { + + private String openid; + + private String code; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/OrderDetailVO.java b/common/src/main/java/cn/unizk/entity/vo/OrderDetailVO.java new file mode 100644 index 0000000..55f2885 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/OrderDetailVO.java @@ -0,0 +1,27 @@ +/* +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.JkProduct; +import cn.unizk.entity.po.WxOrder; +import cn.unizk.entity.po.WxUser; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +*/ +/** + * @Author hao + * @Date 2025/10/21 15:48 + * @Version 1.0 + **//* + +@Data +@EqualsAndHashCode(callSuper = true) +public class OrderDetailVO extends WxOrder { + + private WxUser user; + + private List itemVOS; +} +*/ diff --git a/common/src/main/java/cn/unizk/entity/vo/OrderReqVO.java b/common/src/main/java/cn/unizk/entity/vo/OrderReqVO.java new file mode 100644 index 0000000..682b4d2 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/OrderReqVO.java @@ -0,0 +1,42 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @Author hao + * @Date 2025/9/4 18:19 + * @Version 1.0 + **/ +@Data +public class OrderReqVO { + + private String status; + + private String keyword; + + private Integer storeId; + + private String searchStartTime; + + private String searchEndTime; + + private Date searchStartTimeDt; + + private Date searchEndTimeDt; + + //A--所有 P--平台 S--门店 + private String orderType; + + private String deliveryWay; + + private String orderChannel; + + private Integer afterSaleStatus; + + private List afterSaleStatusList = new ArrayList<>(); +} diff --git a/common/src/main/java/cn/unizk/entity/vo/PayCourseVO.java b/common/src/main/java/cn/unizk/entity/vo/PayCourseVO.java new file mode 100644 index 0000000..f4ebe72 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/PayCourseVO.java @@ -0,0 +1,27 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * @Author hao + * @Date 2026/3/18 17:12 + * @Version 1.0 + **/ +@Data +public class PayCourseVO { + + @NotNull(message = "courseId cannot be null") + private Integer courseId; + + @NotBlank(message = "price cannot be null") + private String price; + + @NotBlank(message = "userId cannot be null") + private Integer userId; + + + private String openid; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/PhysioExamVO.java b/common/src/main/java/cn/unizk/entity/vo/PhysioExamVO.java new file mode 100644 index 0000000..adae42a --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/PhysioExamVO.java @@ -0,0 +1,28 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +import java.util.List; + +/** + * @Author hao + * @Date 2026/1/26 14:34 + * @Version 1.0 + **/ +@Data +public class PhysioExamVO { + + private Integer id; + + private String title; + + private List answers; + + private Integer type; + + private String correctAnswer; + + private Integer subject; + + private Integer score; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/PhysioVO.java b/common/src/main/java/cn/unizk/entity/vo/PhysioVO.java new file mode 100644 index 0000000..684badc --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/PhysioVO.java @@ -0,0 +1,32 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.JkPhysio; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * @Author hao + * @Date 2025/9/9 15:31 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class PhysioVO extends JkPhysio { + private static final long serialVersionUID = -156559464049816951L; + + private String keyword; + + private String storeName; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date searchStartTime; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date searchEndTime; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/ProductReqVO.java b/common/src/main/java/cn/unizk/entity/vo/ProductReqVO.java new file mode 100644 index 0000000..50f8598 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/ProductReqVO.java @@ -0,0 +1,23 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +/** + * @Author hao + * @Date 2025/9/3 16:13 + * @Version 1.0 + **/ +@Data +public class ProductReqVO { + + private String productType; + + private String status; + + private Integer stock; + + //0--售罄 1--销售中 3---预警 + private String stockType; + + private String productName; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/ProductVO.java b/common/src/main/java/cn/unizk/entity/vo/ProductVO.java new file mode 100644 index 0000000..b969291 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/ProductVO.java @@ -0,0 +1,16 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.JkProduct; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2025/10/10 10:47 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class ProductVO extends JkProduct { + private static final long serialVersionUID = 8191221223275331731L; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/ProvinceNode.java b/common/src/main/java/cn/unizk/entity/vo/ProvinceNode.java new file mode 100644 index 0000000..40194d5 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/ProvinceNode.java @@ -0,0 +1,17 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +import java.util.List; + +/** + * @Author hao + * @Date 2026/7/9 18:16 + * @Version 1.0 + **/ +@Data +public class ProvinceNode { + private String c; // 编码 + private String n; // 名称 + private List ch; // 子级列表 +} diff --git a/common/src/main/java/cn/unizk/entity/vo/ProvinceTreeVO.java b/common/src/main/java/cn/unizk/entity/vo/ProvinceTreeVO.java new file mode 100644 index 0000000..83adf74 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/ProvinceTreeVO.java @@ -0,0 +1,32 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +import java.util.List; + +/** + * @Author hao + * @Date 2026/7/9 17:37 + * @Version 1.0 + **/ +@Data +public class ProvinceTreeVO { + + private String province; + + private List cities; + + @Data + public static class City{ + + private String city; + + private List districts; + + @Data + public static class District { + + private String district; + } + } +} diff --git a/common/src/main/java/cn/unizk/entity/vo/QuestionAnswerVO.java b/common/src/main/java/cn/unizk/entity/vo/QuestionAnswerVO.java new file mode 100644 index 0000000..828be84 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/QuestionAnswerVO.java @@ -0,0 +1,16 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +/** + * @Author hao + * @Date 2026/5/12 14:57 + * @Version 1.0 + **/ +@Data +public class QuestionAnswerVO { + + private String question; + + private String answer; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/QuestionVo.java b/common/src/main/java/cn/unizk/entity/vo/QuestionVo.java new file mode 100644 index 0000000..200a1a2 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/QuestionVo.java @@ -0,0 +1,19 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.Question; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; +import java.util.Map; + +/** + * @Author hao + * @Date 2025/7/29 15:50 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = false) +public class QuestionVo extends Question { + private List> optionValues; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/RegulationVO.java b/common/src/main/java/cn/unizk/entity/vo/RegulationVO.java new file mode 100644 index 0000000..e60b27f --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/RegulationVO.java @@ -0,0 +1,19 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.SubHealthDietaryRegulation; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @Author hao + * @Date 2025/12/23 17:18 + * @Version 1.0 + **/ +@Data +public class RegulationVO { + private static final long serialVersionUID = 1858390286951957977L; + private String pastHistory; + private List numbers; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/ReplyVo.java b/common/src/main/java/cn/unizk/entity/vo/ReplyVo.java new file mode 100644 index 0000000..a8d6081 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/ReplyVo.java @@ -0,0 +1,27 @@ +package cn.unizk.entity.vo; + +import cn.unizk.constant.UniConstant; +import cn.unizk.enums.ContentTypeEnum; +import lombok.Data; + +/** + * @Author hao + * @Date 2025/7/7 16:36 + * @Version 1.0 + **/ +@Data +public class ReplyVo { + + private String content; + private String type = UniConstant.AI; + private Integer sort; + + private String sessionId; + /*默认为文本消息*/ + private String nextContentType = ContentTypeEnum.TEXT.name(); + + /** + * 方便传输openid 暂时使用 后改为内存存储 + */ + private String openid; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/ReportReqVO.java b/common/src/main/java/cn/unizk/entity/vo/ReportReqVO.java new file mode 100644 index 0000000..e04c031 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/ReportReqVO.java @@ -0,0 +1,38 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * @Author hao + * @Date 2025/10/17 10:19 + * @Version 1.0 + **/ +@Data +public class ReportReqVO { + + @NotBlank(message = "report cannot be null") + private String report; + + @NotNull(message = "age cannot be null") + private Integer age; + + @NotNull(message = "height cannot be null") + private Double height; + + @NotNull(message = "weight cannot be null") + private Double weight; + + private Integer gender; + + private Integer templateId; + + private String painNumber; + + private String code1; + + private String code2; + +} diff --git a/common/src/main/java/cn/unizk/entity/vo/ReportTemplateVO.java b/common/src/main/java/cn/unizk/entity/vo/ReportTemplateVO.java new file mode 100644 index 0000000..5ac76ef --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/ReportTemplateVO.java @@ -0,0 +1,16 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.ReportTemplate; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2026/6/17 16:50 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class ReportTemplateVO extends ReportTemplate { + private Integer type; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/ResultData.java b/common/src/main/java/cn/unizk/entity/vo/ResultData.java new file mode 100644 index 0000000..0b6cd12 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/ResultData.java @@ -0,0 +1,70 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +/** + * @Author hao + * @Date 2025/7/7 16:06 + * @Version 1.0 + **/ +@Data +public class ResultData { + public static final Integer SUCCESS_CODE = 200; + public static final Integer FAIL_CODE = 500; + public static final String SUCCESS_MESSAGE = "success"; + + public static ResultData failure(){ + ResultData resultData = new ResultData<>(); + resultData.setCode(500); + return resultData; + } + + public static ResultData failure(Integer code,String msg){ + ResultData resultData = new ResultData<>(); + resultData.setCode(code); + resultData.setMessage(msg); + return resultData; + } + + public static ResultData failure(Integer code,String msg,T data){ + ResultData resultData = new ResultData<>(); + resultData.setCode(code); + resultData.setMessage(msg); + resultData.setData(data); + return resultData; + } + + public static ResultData success(){ + ResultData resultData = new ResultData<>(); + resultData.setCode(SUCCESS_CODE); + resultData.setMessage(SUCCESS_MESSAGE); + return resultData; + } + + public static ResultData success(T data){ + ResultData resultData = new ResultData<>(); + resultData.setCode(SUCCESS_CODE); + resultData.setMessage(SUCCESS_MESSAGE); + resultData.setData(data); + return resultData; + } + + public static ResultData success(String message){ + ResultData resultData = new ResultData<>(); + resultData.setCode(SUCCESS_CODE); + resultData.setMessage(message); + return resultData; + } + + public static ResultData success(String message,T data){ + ResultData resultData = new ResultData<>(); + resultData.setCode(SUCCESS_CODE); + resultData.setMessage(message); + resultData.setData(data); + return resultData; + } + + private String message; + private T data; + private Integer code; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/RosterVO.java b/common/src/main/java/cn/unizk/entity/vo/RosterVO.java new file mode 100644 index 0000000..26a01fb --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/RosterVO.java @@ -0,0 +1,57 @@ +package cn.unizk.entity.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalTime; +import java.util.List; +import java.util.Map; + +/** + * @Author hao + * @Date 2026/9/15 15:03 + * @Version 1.0 + **/ +@Data +public class RosterVO { + + private List dates; + private List slots; + private List rows; + + + @Data + public static class DateColumnVO { + private String date; + private String weekday; + private String label; + } + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class SlotVO { + private String slotCode; + private String slotName; + private LocalTime startTime; + private LocalTime endTime; + } + + @Data + public static class RosterRowVO { + private SlotVO slot; + private List cells; + } + + @Data + public static class RosterCellVO { + private String date; + private String status; + private Long id; + private Integer maxBookings; + private Integer bookedCount; + private Integer availableCount; + } + +} diff --git a/common/src/main/java/cn/unizk/entity/vo/SeverityVO.java b/common/src/main/java/cn/unizk/entity/vo/SeverityVO.java new file mode 100644 index 0000000..0cc1e98 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/SeverityVO.java @@ -0,0 +1,16 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +/** + * @Author hao + * @Date 2026/6/17 15:28 + * @Version 1.0 + **/ +@Data +public class SeverityVO { + + private Integer id; + + private String answer; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/SpeakVO.java b/common/src/main/java/cn/unizk/entity/vo/SpeakVO.java new file mode 100644 index 0000000..b9eac33 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/SpeakVO.java @@ -0,0 +1,18 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +import java.util.List; + +/** + * @Author hao + * @Date 2026/8/10 11:00 + * @Version 1.0 + **/ +@Data +public class SpeakVO { + + private Integer no; + + private List options; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/StoreAccountVO.java b/common/src/main/java/cn/unizk/entity/vo/StoreAccountVO.java new file mode 100644 index 0000000..7dd5bf2 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/StoreAccountVO.java @@ -0,0 +1,16 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.StoreAccount; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2026/3/13 16:56 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class StoreAccountVO extends StoreAccount { + private String accountName; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/SysUserVO2.java b/common/src/main/java/cn/unizk/entity/vo/SysUserVO2.java new file mode 100644 index 0000000..87b2689 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/SysUserVO2.java @@ -0,0 +1,17 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.SysUser; +import lombok.Data; + +/** + * @Author hao + * @Date 2026/6/6 17:58 + * @Version 1.0 + **/ +@Data +public class SysUserVO2 extends SysUser { + + private String originalPassword; + + private String newPassword; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/TreeMenu.java b/common/src/main/java/cn/unizk/entity/vo/TreeMenu.java new file mode 100644 index 0000000..7959a5d --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/TreeMenu.java @@ -0,0 +1,32 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author hao + * @Date 2025/8/26 11:17 + * @Version 1.0 + **/ +@Data +public class TreeMenu implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer menuId; + private String menuName; + private Integer parentId; + private Integer orderNum; + private String path; + private String component; + private String status; + private String perms; + private String icon; + private LocalDateTime createTime; + + private List children = new ArrayList<>(); +} diff --git a/common/src/main/java/cn/unizk/entity/vo/UniPage.java b/common/src/main/java/cn/unizk/entity/vo/UniPage.java new file mode 100644 index 0000000..06c5f8d --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/UniPage.java @@ -0,0 +1,33 @@ +package cn.unizk.entity.vo; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.Data; + +import java.util.function.Function; + +/** + * @Author hao + * @Date 2025/8/22 15:13 + * @Version 1.0 + **/ +@Data +public class UniPage { + + private Integer currentPage = 1; + private Integer pageSize = 10; + private T queryBody; + + // 获取 MyBatis Plus 分页对象 + public Page getPage() { + return new Page<>(getCurrentPage(), getPageSize()); + } + + // 获取空的 LambdaQueryWrapper(子类可重写构建逻辑) + public LambdaQueryWrapper buildQueryWrapper(Function> builder) { + if (queryBody == null) { + return new LambdaQueryWrapper<>(); + } + return builder.apply(queryBody); + } +} diff --git a/common/src/main/java/cn/unizk/entity/vo/UsageDetailVO.java b/common/src/main/java/cn/unizk/entity/vo/UsageDetailVO.java new file mode 100644 index 0000000..ae5572f --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/UsageDetailVO.java @@ -0,0 +1,30 @@ +package cn.unizk.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2025/11/6 14:41 + * @Version 1.0 + **/ +@Data +public class UsageDetailVO { + + private String deviceId; + + private String keyword; + + private Integer storeId; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime startTime; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime endTime; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/UserConsultationRecordVO.java b/common/src/main/java/cn/unizk/entity/vo/UserConsultationRecordVO.java new file mode 100644 index 0000000..6f559e8 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/UserConsultationRecordVO.java @@ -0,0 +1,38 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.UserConsultationRecord; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Map; + +/** + * @Author hao + * @Date 2026/8/18 14:08 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class UserConsultationRecordVO extends UserConsultationRecord { + private static final long serialVersionUID = -3442424914500073631L; + + private String painAreaNo; + + private String clinicalDia; + + private String fileNo; + + private String currentTime; + + private Integer gender; + + private Integer age; + + private Integer pattern; + + private String medicalTreatment; + + + + private Map cqs; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/VideoProgressVO.java b/common/src/main/java/cn/unizk/entity/vo/VideoProgressVO.java new file mode 100644 index 0000000..10098ce --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/VideoProgressVO.java @@ -0,0 +1,24 @@ +package cn.unizk.entity.vo; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Author hao + * @Date 2026/3/27 14:29 + * @Version 1.0 + **/ +@Data +public class VideoProgressVO { + + @NotNull(message = "chapterId cannot be null") + private Integer chapterId; + + @NotNull(message = "lastPosition cannot be null") + private Integer lastPosition; + + + @NotNull(message = "spentTime cannot be null") + private Integer spentTime; +} diff --git a/common/src/main/java/cn/unizk/entity/vo/WxOrderComboRespVO.java b/common/src/main/java/cn/unizk/entity/vo/WxOrderComboRespVO.java new file mode 100644 index 0000000..391f246 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/WxOrderComboRespVO.java @@ -0,0 +1,22 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @Author hao + * @Date 2025/9/19 11:24 + * @Version 1.0 + **/ +/*@Data +@EqualsAndHashCode(callSuper = true) +public class WxOrderComboRespVO extends WxOrder { + private JkStore jkStore; + private JkPhysio jkPhysio; +// private Combo combo; + private WxUser wxUser; + private List orderItemVOS; +}*/ diff --git a/common/src/main/java/cn/unizk/entity/vo/WxOrderItemVO.java b/common/src/main/java/cn/unizk/entity/vo/WxOrderItemVO.java new file mode 100644 index 0000000..b27268f --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/WxOrderItemVO.java @@ -0,0 +1,21 @@ +package cn.unizk.entity.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * @Author hao + * @Date 2025/10/14 15:08 + * @Version 1.0 + **/ +/*@Data +@EqualsAndHashCode(callSuper = true) +public class WxOrderItemVO extends WxOrderItem { + private static final long serialVersionUID = 1545231591707133914L; + private String productName; + private String image; + private Integer storeId; + private BigDecimal singleProductPrice; +}*/ diff --git a/common/src/main/java/cn/unizk/entity/vo/WxOrderVO.java b/common/src/main/java/cn/unizk/entity/vo/WxOrderVO.java new file mode 100644 index 0000000..1f5a4b5 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/WxOrderVO.java @@ -0,0 +1,29 @@ +/* +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.WxOrder; +import cn.unizk.entity.po.WxOrderItem; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +*/ +/** + * @Author hao + * @Date 2025/9/4 18:38 + * @Version 1.0 + **//* + +@Data +@EqualsAndHashCode(callSuper = true) +public class WxOrderVO extends WxOrder { + + private String ordererPhone; + private String productName; + private String chineseOrderStatus; + private String image; + private List orderItemVOS; + private String orderChannel = "wechat"; +} +*/ diff --git a/common/src/main/java/cn/unizk/entity/vo/WxUserVO.java b/common/src/main/java/cn/unizk/entity/vo/WxUserVO.java new file mode 100644 index 0000000..7135942 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/WxUserVO.java @@ -0,0 +1,22 @@ +/* +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.WxUser; +import lombok.*; + +*/ +/** + * @Author hao + * @Date 2025/8/27 10:39 + * @Version 1.0 + **//* + +@Getter +@Setter +public class WxUserVO extends WxUser { + + private String token; + + private String keyword; +} +*/ diff --git a/common/src/main/java/cn/unizk/entity/vo/XunfuAccountVO.java b/common/src/main/java/cn/unizk/entity/vo/XunfuAccountVO.java new file mode 100644 index 0000000..1f61310 --- /dev/null +++ b/common/src/main/java/cn/unizk/entity/vo/XunfuAccountVO.java @@ -0,0 +1,21 @@ +package cn.unizk.entity.vo; + +import cn.unizk.entity.po.XunfuAccount; +import cn.unizk.entity.po.XunfuAccountImage; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @Author hao + * @Date 2025/9/26 10:43 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class XunfuAccountVO extends XunfuAccount { + private static final long serialVersionUID = -8673479885678661642L; + + private List images; +} diff --git a/common/src/main/java/cn/unizk/enums/ContentTypeEnum.java b/common/src/main/java/cn/unizk/enums/ContentTypeEnum.java new file mode 100644 index 0000000..735f347 --- /dev/null +++ b/common/src/main/java/cn/unizk/enums/ContentTypeEnum.java @@ -0,0 +1,22 @@ +package cn.unizk.enums; + + +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; + + +public enum ContentTypeEnum { + + TEXT, + IMAGE, + /*消息类型为选项*/ +// OPTIONS("options"), + /*消息类型为表单类型:性别 年龄 体重*/ + FORM, + SEX, + AGE, + WEIGHT + ; + + +} diff --git a/common/src/main/java/cn/unizk/enums/DictType.java b/common/src/main/java/cn/unizk/enums/DictType.java new file mode 100644 index 0000000..1f2d1a3 --- /dev/null +++ b/common/src/main/java/cn/unizk/enums/DictType.java @@ -0,0 +1,6 @@ +package cn.unizk.enums; + +public enum DictType { + + product; +} diff --git a/common/src/main/java/cn/unizk/enums/FileType.java b/common/src/main/java/cn/unizk/enums/FileType.java new file mode 100644 index 0000000..400f1c1 --- /dev/null +++ b/common/src/main/java/cn/unizk/enums/FileType.java @@ -0,0 +1,32 @@ +package cn.unizk.enums; + +public enum FileType { + PNG("image/png",MinioBucketType.IMG_BUCKET), + JPEG("image/jpeg",MinioBucketType.IMG_BUCKET), + JPG("image/jpg",MinioBucketType.IMG_BUCKET), + TEXT("txt",MinioBucketType.TEXT_BUCKET), + VIDEO("video/mp4",MinioBucketType.VIDEO_BUCKET), + AUDIO("audio/mpeg",MinioBucketType.AUDIO_BUCKET); + + private final String name; + private final MinioBucketType minioBucketType; + + private FileType(String name,MinioBucketType minioBucketType){ + this.name = name; + this.minioBucketType = minioBucketType; + } + + public String getName(){ + return name; + } + + public static MinioBucketType getMinioBucketName(String name){ + FileType[] values = FileType.values(); + for (FileType value : values) { + if (name.equals(value.getName())){ + return value.minioBucketType; + } + } + return MinioBucketType.TEXT_BUCKET; + } +} diff --git a/common/src/main/java/cn/unizk/enums/MinioBucketType.java b/common/src/main/java/cn/unizk/enums/MinioBucketType.java new file mode 100644 index 0000000..acc2eb8 --- /dev/null +++ b/common/src/main/java/cn/unizk/enums/MinioBucketType.java @@ -0,0 +1,23 @@ +package cn.unizk.enums; + +/** + * @Author hao + * @Date 2025/8/27 18:15 + * @Version 1.0 + **/ +public enum MinioBucketType { + IMG_BUCKET("images"), + TEXT_BUCKET("config"), + VIDEO_BUCKET("video"), + AUDIO_BUCKET("audio"); + + private final String bucketName; + + private MinioBucketType(String bucketType){ + this.bucketName = bucketType; + } + + public String getBucketName(){ + return bucketName; + } +} diff --git a/common/src/main/java/cn/unizk/enums/OrderAfterSaleStatus.java b/common/src/main/java/cn/unizk/enums/OrderAfterSaleStatus.java new file mode 100644 index 0000000..b49e38e --- /dev/null +++ b/common/src/main/java/cn/unizk/enums/OrderAfterSaleStatus.java @@ -0,0 +1,35 @@ +package cn.unizk.enums; + +import lombok.Getter; + +@Getter +public enum OrderAfterSaleStatus { + NO_AFTER_SALE(0,"无售后"), + ONLY_TUI_KUAN(1,"仅退款申请"), + TUI_HUO_TUI_KUAN(2,"退货退款申请"), + AGREE_TUI_KUAN(3,"商家同意退款"), + REJECT_TUI_KUAN(4,"商家拒绝退款"), + TUI_KUAN_SUCCESS(5,"退款成功"), + TUI_HUO_TUI_KUAN_SUCCESS(6,"退货退款成功"), + AFTER_SALE_CLOSED(7,"售后关闭"); + + + + private Integer key; + private String value; + + OrderAfterSaleStatus(Integer key,String value){ + this.key = key; + this.value = value; + } + + public static String getValueByKey(Integer key){ + OrderAfterSaleStatus[] afterSaleStatuses = OrderAfterSaleStatus.values(); + for (OrderAfterSaleStatus afterSaleStatus : afterSaleStatuses) { + if (afterSaleStatus.getKey().equals(key)){ + return afterSaleStatus.getValue(); + } + } + return null; + } +} diff --git a/common/src/main/java/cn/unizk/enums/OrderStatus.java b/common/src/main/java/cn/unizk/enums/OrderStatus.java new file mode 100644 index 0000000..f114af6 --- /dev/null +++ b/common/src/main/java/cn/unizk/enums/OrderStatus.java @@ -0,0 +1,27 @@ +package cn.unizk.enums; + +public enum OrderStatus { + paid("已支付"), + unpaid("未支付"), + canceled("已取消"), + not_shipped("待发货"), + shipped("已发货"), + received("已收货"), + unverified("待核销"), + verified("已核销"), + commented("已评价"), + request_refund("申请退款"), + refunded("已退款"), + refund_refusal("拒绝退款"); + + private String value; + + OrderStatus(){} + OrderStatus(String value){ + this.value = value; + } + + public String getValue(){ + return value; + } +} diff --git a/common/src/main/java/cn/unizk/enums/OrderTypeEnum.java b/common/src/main/java/cn/unizk/enums/OrderTypeEnum.java new file mode 100644 index 0000000..bdb73d3 --- /dev/null +++ b/common/src/main/java/cn/unizk/enums/OrderTypeEnum.java @@ -0,0 +1,34 @@ +package cn.unizk.enums; + +import lombok.Getter; +import lombok.Setter; + +/** + * @Author hao + * @Date 2026/7/7 11:57 + * @Version 1.0 + **/ +@Getter +public enum OrderTypeEnum { + + SCAN_PAY(1,"扫码付费开机"), + COURSE_PAY(3,"课程购买"), + MEMBER_RECHARGE(4,"会员充值"), + ACTIVE_MEMBER(6,"开通会员"), + HGJ_PAY(2,"好关节预约下单"), + GOLF_SERVICE_PAY(5,"高尔夫服务项目购买"), + PRODUCT_PAY(7,"商品购买"), + SHOPPING_CART_PAY(8,"购物车下单"); + + private Integer code; + private String name; + + OrderTypeEnum(){} + + OrderTypeEnum(Integer code,String name){ + this.code = code; + this.name = name; + } + + +} diff --git a/common/src/main/java/cn/unizk/enums/PlatformType.java b/common/src/main/java/cn/unizk/enums/PlatformType.java new file mode 100644 index 0000000..2fc9609 --- /dev/null +++ b/common/src/main/java/cn/unizk/enums/PlatformType.java @@ -0,0 +1,10 @@ +package cn.unizk.enums; + +import lombok.Getter; + +@Getter +public enum PlatformType { + + WECHAT_MP, + APP +} diff --git a/common/src/main/java/cn/unizk/enums/ProductType.java b/common/src/main/java/cn/unizk/enums/ProductType.java new file mode 100644 index 0000000..1d89cc5 --- /dev/null +++ b/common/src/main/java/cn/unizk/enums/ProductType.java @@ -0,0 +1,9 @@ +package cn.unizk.enums; + +public enum ProductType { + + 设备, + 膏剂, + 精油; + +} diff --git a/common/src/main/java/cn/unizk/exception/BusinessException.java b/common/src/main/java/cn/unizk/exception/BusinessException.java new file mode 100644 index 0000000..a68607f --- /dev/null +++ b/common/src/main/java/cn/unizk/exception/BusinessException.java @@ -0,0 +1,45 @@ +package cn.unizk.exception; + +/** + * @Author hao + * @Date 2026/7/2 14:39 + * @Version 1.0 + **/ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 3225381786143475413L; + + private String message; + private Integer code; + + public BusinessException() { + super(); + } + + public BusinessException(Integer code, String message) { + super(message); + this.message = message; + this.code = code; + } + + public BusinessException(String message){ + super(message); + this.message = message; + } + + @Override + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } +} diff --git a/common/src/main/java/cn/unizk/exception/ResponseExceptionHandler.java b/common/src/main/java/cn/unizk/exception/ResponseExceptionHandler.java new file mode 100644 index 0000000..f9a861a --- /dev/null +++ b/common/src/main/java/cn/unizk/exception/ResponseExceptionHandler.java @@ -0,0 +1,147 @@ +package cn.unizk.exception; + +import cn.unizk.entity.dto.IsoDTO; +import cn.unizk.entity.vo.CallbackResponse; +import cn.unizk.entity.vo.ResultData; +import com.alibaba.fastjson2.JSON; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.context.support.DefaultMessageSourceResolvable; +import org.springframework.core.MethodParameter; +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.io.InputStreamResource; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.validation.BindException; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2025/7/7 16:11 + * @Version 1.0 + **/ +@RestControllerAdvice +@Slf4j +public class ResponseExceptionHandler implements ResponseBodyAdvice { + /** + * 业务异常处理 + * @param e + * @return + */ + @ResponseBody + @ExceptionHandler(ServiceException.class) + public ResultData handler(ServiceException e){ + ResultData data = new ResultData<>(); + if (null != e.getCode()){ + data.setCode(e.getCode()); + }else { + data.setCode(ResultData.FAIL_CODE); + } + data.setMessage(StringUtils.isNotBlank(e.getMessage()) ? e.getMessage() : "服务系统异常,请稍后重试"); +// data.setData(e.getMessage()); + return data; + } + + @ResponseBody + @ExceptionHandler(BusinessException.class) + public ResultData handler(BusinessException e){ + ResultData data = new ResultData<>(); + if (null != e.getCode()){ + data.setCode(e.getCode()); + }else { + data.setCode(ResultData.FAIL_CODE); + } + data.setMessage(StringUtils.isNotBlank(e.getMessage()) ? e.getMessage() : "服务系统异常,请稍后重试"); + return data; + } + + + /** + * 其他异常处理 + * @param e + * @return + */ + @ExceptionHandler(Exception.class) + public ResultData handler(Exception e){ + log.error(e.getMessage(),e); + ResultData data = new ResultData<>(); + data.setCode(ResultData.FAIL_CODE); + data.setMessage(e.getMessage()); + return data; + } + + @ExceptionHandler(BindException.class) + public ResultData handler(BindException e){ + List fieldErrors = e.getBindingResult().getFieldErrors(); + List errorMessages = fieldErrors.stream() + .map(DefaultMessageSourceResolvable::getDefaultMessage) + .collect(Collectors.toList()); + ResultData data = new ResultData<>(); + data.setCode(ResultData.FAIL_CODE); + data.setMessage(String.join(",", errorMessages)); + data.setData(errorMessages); + return data; + } + + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResultData error(MethodArgumentNotValidException e){ + List fieldErrors = e.getBindingResult().getFieldErrors(); + List errorMessages = fieldErrors.stream() + .map(DefaultMessageSourceResolvable::getDefaultMessage) + .collect(Collectors.toList()); + ResultData data = new ResultData<>(); + data.setCode(ResultData.FAIL_CODE); + data.setMessage(String.join(",", errorMessages)); + data.setData(errorMessages); + return data; + } + + + @Override + public boolean supports(MethodParameter returnType, Class> converterType) { + return true; + } + + @Override + public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { + if (body == null){ + return null; + } + if (body instanceof CallbackResponse){ + return body; + } + if (body instanceof InputStreamResource){ + return body; + } + if (body instanceof FileSystemResource){ + return body; + } + if (body instanceof IsoDTO){ + return body; + } + if (body instanceof ResultData){ + return body; + }else{ + ResultData data = new ResultData<>(); + data.setCode(ResultData.SUCCESS_CODE); + data.setMessage(ResultData.SUCCESS_MESSAGE); + data.setData(body); + if (body instanceof String){ + return JSON.toJSONString(data); + }else { + return data; + } + } + } +} + diff --git a/common/src/main/java/cn/unizk/exception/ServiceException.java b/common/src/main/java/cn/unizk/exception/ServiceException.java new file mode 100644 index 0000000..6a4f08a --- /dev/null +++ b/common/src/main/java/cn/unizk/exception/ServiceException.java @@ -0,0 +1,35 @@ +package cn.unizk.exception; + +/** + * @Author hao + * @Date 2025/7/7 16:13 + * @Version 1.0 + **/ +public class ServiceException extends RuntimeException { + private String message; + private Integer code; + + public ServiceException() { + super(); + } + + public ServiceException(String message) { + super(message); + this.message = message; + } + + public ServiceException(Integer code,String message){ + super(message); + this.code = code; + this.message = message; + } + + @Override + public String getMessage() { + return message; + } + + public Integer getCode() { + return code; + } +} diff --git a/common/src/main/java/cn/unizk/function/BeanCopyCallBack.java b/common/src/main/java/cn/unizk/function/BeanCopyCallBack.java new file mode 100644 index 0000000..9c293fe --- /dev/null +++ b/common/src/main/java/cn/unizk/function/BeanCopyCallBack.java @@ -0,0 +1,7 @@ +package cn.unizk.function; + +@FunctionalInterface +public interface BeanCopyCallBack { + + void callBack(T t,S s); +} diff --git a/common/src/main/java/cn/unizk/mapper/AppletModuleMapper.java b/common/src/main/java/cn/unizk/mapper/AppletModuleMapper.java new file mode 100644 index 0000000..961e23f --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/AppletModuleMapper.java @@ -0,0 +1,21 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.AppletModule; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-08-06 + */ +public interface AppletModuleMapper extends BaseMapper { + + List getModule(@Param("platformType") String platformType,@Param("businessType") String businessType); + +} diff --git a/common/src/main/java/cn/unizk/mapper/AppointmentConfigMapper.java b/common/src/main/java/cn/unizk/mapper/AppointmentConfigMapper.java new file mode 100644 index 0000000..39e2352 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/AppointmentConfigMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.AppointmentConfig; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * 预约配置表 Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2026-05-18 + */ +public interface AppointmentConfigMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/AppointmentsMapper.java b/common/src/main/java/cn/unizk/mapper/AppointmentsMapper.java new file mode 100644 index 0000000..f92d4da --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/AppointmentsMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.Appointments; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * 预约记录表 Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2026-05-18 + */ +public interface AppointmentsMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/BusinessChannelMapper.java b/common/src/main/java/cn/unizk/mapper/BusinessChannelMapper.java new file mode 100644 index 0000000..ad9911d --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/BusinessChannelMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.BusinessChannel; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface BusinessChannelMapper extends BaseMapper { +} diff --git a/common/src/main/java/cn/unizk/mapper/CashOutRecordMapper.java b/common/src/main/java/cn/unizk/mapper/CashOutRecordMapper.java new file mode 100644 index 0000000..11f4af3 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/CashOutRecordMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.CashOutRecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface CashOutRecordMapper extends BaseMapper { +} diff --git a/common/src/main/java/cn/unizk/mapper/ChapterMapper.java b/common/src/main/java/cn/unizk/mapper/ChapterMapper.java new file mode 100644 index 0000000..54045da --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/ChapterMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.Chapter; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2026-03-06 + */ +public interface ChapterMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/ChildStoreAccountMapper.java b/common/src/main/java/cn/unizk/mapper/ChildStoreAccountMapper.java new file mode 100644 index 0000000..5aec925 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/ChildStoreAccountMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.ChildStoreAccount; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2026-03-20 + */ +public interface ChildStoreAccountMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/ClinicWorkLogMapper.java b/common/src/main/java/cn/unizk/mapper/ClinicWorkLogMapper.java new file mode 100644 index 0000000..2f9fbaa --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/ClinicWorkLogMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.ClinicWorkLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-08-20 + */ +public interface ClinicWorkLogMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/ComboMapper.java b/common/src/main/java/cn/unizk/mapper/ComboMapper.java new file mode 100644 index 0000000..c6d8e5b --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/ComboMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.Combo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface ComboMapper extends BaseMapper { +} diff --git a/common/src/main/java/cn/unizk/mapper/CourseMapper.java b/common/src/main/java/cn/unizk/mapper/CourseMapper.java new file mode 100644 index 0000000..8b30f1d --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/CourseMapper.java @@ -0,0 +1,23 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.Course; +import cn.unizk.entity.vo.CourseVO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

      + * Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2026-03-06 + */ +public interface CourseMapper extends BaseMapper { + + List voPage(IPage page,@Param("title") String title); + +} diff --git a/common/src/main/java/cn/unizk/mapper/DailySchedulesMapper.java b/common/src/main/java/cn/unizk/mapper/DailySchedulesMapper.java new file mode 100644 index 0000000..1eeccf4 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/DailySchedulesMapper.java @@ -0,0 +1,34 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.DailySchedules; +import cn.unizk.entity.vo.AppointmentVO3; +import cn.unizk.entity.vo.AppointmentVO4; +import cn.unizk.entity.vo.DailySchedulesVO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.time.LocalDate; +import java.util.Date; +import java.util.List; + +/** + *

      + * 每日排班表 Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2026-05-18 + */ +public interface DailySchedulesMapper extends BaseMapper { + + int batchInsertDailySchedules(); + + List getCanAppointment(@Param("physioId") Integer physioId, @Param("appointmentDate")Date appointmentDate); + + List selectMedicalyoumeihao(@Param("physioId") Integer physioId,@Param("ids") List physioIds); + + List selectYoumeihaoByDate(@Param("date") LocalDate date,@Param("ids") List ids); + + List selectRosterList(@Param("physioId") Integer physioId); + +} diff --git a/common/src/main/java/cn/unizk/mapper/DeviceMapper.java b/common/src/main/java/cn/unizk/mapper/DeviceMapper.java new file mode 100644 index 0000000..1394c06 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/DeviceMapper.java @@ -0,0 +1,30 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.Device; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface DeviceMapper extends BaseMapper { + + Integer updateStatus(@Param("deviceId") String deviceId,@Param("status") String status); + + Integer reduceDay(); + + Integer selectCurrentYearDeviceCount(); + + List selectCurrentYearDevice(@Param("year") String year); + + List selectAbnormalDevice(); + + Integer updateAbnormalDevice(); + + Integer updateFreeCount(); + + Integer updateDeviceInfo(@Param("dv") Device device); + + Integer modifyDeviceId(@Param("ndeviceId") String ndeviceId,@Param("odeviceId") String odeviceId); + + Integer updateTreatDevice(); +} diff --git a/common/src/main/java/cn/unizk/mapper/DeviceRechargeRecordMapper.java b/common/src/main/java/cn/unizk/mapper/DeviceRechargeRecordMapper.java new file mode 100644 index 0000000..434e78e --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/DeviceRechargeRecordMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.DeviceRechargeRecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface DeviceRechargeRecordMapper extends BaseMapper { +} diff --git a/common/src/main/java/cn/unizk/mapper/DeviceUpgradeMapper.java b/common/src/main/java/cn/unizk/mapper/DeviceUpgradeMapper.java new file mode 100644 index 0000000..d9ad74c --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/DeviceUpgradeMapper.java @@ -0,0 +1,9 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.DeviceUpgrade; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface DeviceUpgradeMapper extends BaseMapper { + + Integer updateCurrentVersion(); +} diff --git a/common/src/main/java/cn/unizk/mapper/DeviceUsageDetailMapper.java b/common/src/main/java/cn/unizk/mapper/DeviceUsageDetailMapper.java new file mode 100644 index 0000000..7389a75 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/DeviceUsageDetailMapper.java @@ -0,0 +1,12 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.DeviceUsageDetail; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface DeviceUsageDetailMapper extends BaseMapper { + + List selectTopThree(@Param("usageRecordId") Integer id); +} diff --git a/common/src/main/java/cn/unizk/mapper/DeviceUsageRecordMapper.java b/common/src/main/java/cn/unizk/mapper/DeviceUsageRecordMapper.java new file mode 100644 index 0000000..5059475 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/DeviceUsageRecordMapper.java @@ -0,0 +1,18 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.DeviceUsageRecord; +import cn.unizk.entity.vo.DeviceUsageRecordVO2; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface DeviceUsageRecordMapper extends BaseMapper { + + List selectAbnormalRecord(); + + Integer updateClose(@Param("ids") List ids); + + Integer closeAbnormalRecord(@Param("ids") List ids); + +} diff --git a/common/src/main/java/cn/unizk/mapper/DiaRecordMapper.java b/common/src/main/java/cn/unizk/mapper/DiaRecordMapper.java new file mode 100644 index 0000000..6906147 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/DiaRecordMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.DiaRecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-08-13 + */ +public interface DiaRecordMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/DiagnosisTemplateMapper.java b/common/src/main/java/cn/unizk/mapper/DiagnosisTemplateMapper.java new file mode 100644 index 0000000..dd96963 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/DiagnosisTemplateMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.DiagnosisTemplate; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface DiagnosisTemplateMapper extends BaseMapper { +} diff --git a/common/src/main/java/cn/unizk/mapper/ExamScoreMapper.java b/common/src/main/java/cn/unizk/mapper/ExamScoreMapper.java new file mode 100644 index 0000000..473b619 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/ExamScoreMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.ExamScore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface ExamScoreMapper extends BaseMapper { +} diff --git a/common/src/main/java/cn/unizk/mapper/GolfCustInfoMapper.java b/common/src/main/java/cn/unizk/mapper/GolfCustInfoMapper.java new file mode 100644 index 0000000..ebeac78 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/GolfCustInfoMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.GolfCustInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-06-05 + */ +public interface GolfCustInfoMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/GrfPjMapper.java b/common/src/main/java/cn/unizk/mapper/GrfPjMapper.java new file mode 100644 index 0000000..85b04f0 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/GrfPjMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.GrfPj; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface GrfPjMapper extends BaseMapper { +} diff --git a/common/src/main/java/cn/unizk/mapper/HuifuDataMapper.java b/common/src/main/java/cn/unizk/mapper/HuifuDataMapper.java new file mode 100644 index 0000000..19ad639 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/HuifuDataMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.HuifuData; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2025-09-29 + */ +public interface HuifuDataMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/InventoryStatisticsMapper.java b/common/src/main/java/cn/unizk/mapper/InventoryStatisticsMapper.java new file mode 100644 index 0000000..ccfeeba --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/InventoryStatisticsMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.InventoryStatistics; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-08-20 + */ +public interface InventoryStatisticsMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/JointMapper.java b/common/src/main/java/cn/unizk/mapper/JointMapper.java new file mode 100644 index 0000000..5a92819 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/JointMapper.java @@ -0,0 +1,21 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.Joint; +import cn.unizk.entity.vo.JointVO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-09-03 + */ +public interface JointMapper extends BaseMapper { + + List selectJointVOList(); + +} diff --git a/common/src/main/java/cn/unizk/mapper/MobileAppUserAccountMapper.java b/common/src/main/java/cn/unizk/mapper/MobileAppUserAccountMapper.java new file mode 100644 index 0000000..6ffc7eb --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/MobileAppUserAccountMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.MobileAppUserAccount; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-07-08 + */ +public interface MobileAppUserAccountMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/MobileAppUserMapper.java b/common/src/main/java/cn/unizk/mapper/MobileAppUserMapper.java new file mode 100644 index 0000000..467d6d0 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/MobileAppUserMapper.java @@ -0,0 +1,19 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.MobileAppUser; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-06-30 + */ +public interface MobileAppUserMapper extends BaseMapper { + + Integer bindPhone(@Param("phoneNumber") String phoneNumber,@Param("userId") Integer userId); + +} diff --git a/common/src/main/java/cn/unizk/mapper/MobileAppointmentsMapper.java b/common/src/main/java/cn/unizk/mapper/MobileAppointmentsMapper.java new file mode 100644 index 0000000..9746f97 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/MobileAppointmentsMapper.java @@ -0,0 +1,18 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.MobileAppointments; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +/** + *

      + * 预约记录表 Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-07-01 + */ +public interface MobileAppointmentsMapper extends BaseMapper { + + +} diff --git a/common/src/main/java/cn/unizk/mapper/MobileChapterMapper.java b/common/src/main/java/cn/unizk/mapper/MobileChapterMapper.java new file mode 100644 index 0000000..400c4fa --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/MobileChapterMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.MobileChapter; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-06-30 + */ +public interface MobileChapterMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/MobileComboMapper.java b/common/src/main/java/cn/unizk/mapper/MobileComboMapper.java new file mode 100644 index 0000000..585e3a3 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/MobileComboMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.MobileCombo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-06-30 + */ +public interface MobileComboMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/MobileCourseMapper.java b/common/src/main/java/cn/unizk/mapper/MobileCourseMapper.java new file mode 100644 index 0000000..b73db4d --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/MobileCourseMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.MobileCourse; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-06-30 + */ +public interface MobileCourseMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/MobileOrderItemMapper.java b/common/src/main/java/cn/unizk/mapper/MobileOrderItemMapper.java new file mode 100644 index 0000000..8a85e38 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/MobileOrderItemMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.MobileOrderItem; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-07-10 + */ +public interface MobileOrderItemMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/MobileOrderMapper.java b/common/src/main/java/cn/unizk/mapper/MobileOrderMapper.java new file mode 100644 index 0000000..cc92160 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/MobileOrderMapper.java @@ -0,0 +1,31 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.MobileOrder; +import cn.unizk.entity.vo.MobileOrderVO; +import cn.unizk.entity.vo.OrderReqVO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-07-01 + */ +public interface MobileOrderMapper extends BaseMapper { + + MobileOrder selectOrderByIdAndPhone(@Param("orderId") String orderId, @Param("phone") String phone); + + Integer updateStatusToPaid(String orderId); + + Integer updateStatusToCanceled(String orderId); + + Page selectOrders(Page page, @Param("vo") OrderReqVO vo); + + + Page selectAfterSaleOrders(Page page, @Param("vo") OrderReqVO vo); + +} diff --git a/common/src/main/java/cn/unizk/mapper/MobileUserAddressMapper.java b/common/src/main/java/cn/unizk/mapper/MobileUserAddressMapper.java new file mode 100644 index 0000000..a404a68 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/MobileUserAddressMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.MobileUserAddress; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-07-01 + */ +public interface MobileUserAddressMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/MobileUserHaveCourseMapper.java b/common/src/main/java/cn/unizk/mapper/MobileUserHaveCourseMapper.java new file mode 100644 index 0000000..f984270 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/MobileUserHaveCourseMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.MobileUserHaveCourse; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-06-30 + */ +public interface MobileUserHaveCourseMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/MobileUserMedicalVisitInfoMapper.java b/common/src/main/java/cn/unizk/mapper/MobileUserMedicalVisitInfoMapper.java new file mode 100644 index 0000000..24d22ed --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/MobileUserMedicalVisitInfoMapper.java @@ -0,0 +1,19 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.MobileUserMedicalVisitInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-07-01 + */ +public interface MobileUserMedicalVisitInfoMapper extends BaseMapper { + + MobileUserMedicalVisitInfo selectLatest(@Param("mobileUserId") Integer mobileUserId); + +} diff --git a/common/src/main/java/cn/unizk/mapper/MobileUserVideoProgressMapper.java b/common/src/main/java/cn/unizk/mapper/MobileUserVideoProgressMapper.java new file mode 100644 index 0000000..2d22f23 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/MobileUserVideoProgressMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.MobileUserVideoProgress; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-06-30 + */ +public interface MobileUserVideoProgressMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/ModulePermsMapper.java b/common/src/main/java/cn/unizk/mapper/ModulePermsMapper.java new file mode 100644 index 0000000..ee2ca42 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/ModulePermsMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.ModulePerms; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-08-10 + */ +public interface ModulePermsMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/OrderReviewMapper.java b/common/src/main/java/cn/unizk/mapper/OrderReviewMapper.java new file mode 100644 index 0000000..dd448fe --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/OrderReviewMapper.java @@ -0,0 +1,12 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.OrderReview; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Author hao + * @Date 2026/1/30 10:20 + * @Version 1.0 + **/ +public interface OrderReviewMapper extends BaseMapper { +} diff --git a/common/src/main/java/cn/unizk/mapper/PhysioExamMapper.java b/common/src/main/java/cn/unizk/mapper/PhysioExamMapper.java new file mode 100644 index 0000000..2911a89 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/PhysioExamMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.PhysioExam; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface PhysioExamMapper extends BaseMapper { +} diff --git a/common/src/main/java/cn/unizk/mapper/PhysioSchedulesMapper.java b/common/src/main/java/cn/unizk/mapper/PhysioSchedulesMapper.java new file mode 100644 index 0000000..b9c2966 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/PhysioSchedulesMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.PhysioSchedules; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * 理疗师排班规则表 Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2026-05-18 + */ +public interface PhysioSchedulesMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/PhysioThirteenAreaMapper.java b/common/src/main/java/cn/unizk/mapper/PhysioThirteenAreaMapper.java new file mode 100644 index 0000000..3410c92 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/PhysioThirteenAreaMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.PhysioThirteenArea; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-09-02 + */ +public interface PhysioThirteenAreaMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/RechargePackageMapper.java b/common/src/main/java/cn/unizk/mapper/RechargePackageMapper.java new file mode 100644 index 0000000..dd5e3c1 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/RechargePackageMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.RechargePackage; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface RechargePackageMapper extends BaseMapper { +} diff --git a/common/src/main/java/cn/unizk/mapper/ReportTemplateMapper.java b/common/src/main/java/cn/unizk/mapper/ReportTemplateMapper.java new file mode 100644 index 0000000..2d374df --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/ReportTemplateMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.ReportTemplate; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface ReportTemplateMapper extends BaseMapper { +} diff --git a/common/src/main/java/cn/unizk/mapper/RunConsultationMapper.java b/common/src/main/java/cn/unizk/mapper/RunConsultationMapper.java new file mode 100644 index 0000000..bf259f8 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/RunConsultationMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.RunConsultation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-07-15 + */ +public interface RunConsultationMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/StoreAccountMapper.java b/common/src/main/java/cn/unizk/mapper/StoreAccountMapper.java new file mode 100644 index 0000000..2a3900b --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/StoreAccountMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.StoreAccount; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface StoreAccountMapper extends BaseMapper { +} diff --git a/common/src/main/java/cn/unizk/mapper/SubHealthDietaryRegulationMapper.java b/common/src/main/java/cn/unizk/mapper/SubHealthDietaryRegulationMapper.java new file mode 100644 index 0000000..3a696cc --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/SubHealthDietaryRegulationMapper.java @@ -0,0 +1,23 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.SubHealthDietaryRegulation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

      + * Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2025-12-22 + */ +public interface SubHealthDietaryRegulationMapper extends BaseMapper { + + List selectSubHealth(IPage page, @Param("number") String number, + @Param("description") String description); + +} diff --git a/common/src/main/java/cn/unizk/mapper/SysFileCommonMapper.java b/common/src/main/java/cn/unizk/mapper/SysFileCommonMapper.java new file mode 100644 index 0000000..899791b --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/SysFileCommonMapper.java @@ -0,0 +1,12 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.SysFile; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Author hao + * @Date 2026/8/17 15:31 + * @Version 1.0 + **/ +public interface SysFileCommonMapper extends BaseMapper { +} diff --git a/common/src/main/java/cn/unizk/mapper/TimeSlotsMapper.java b/common/src/main/java/cn/unizk/mapper/TimeSlotsMapper.java new file mode 100644 index 0000000..3576586 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/TimeSlotsMapper.java @@ -0,0 +1,18 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.TimeSlots; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * 时间段配置表 Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2026-05-18 + */ +public interface TimeSlotsMapper extends BaseMapper { + + TimeSlots selectLastOne(); + +} diff --git a/common/src/main/java/cn/unizk/mapper/TreatParameterMapper.java b/common/src/main/java/cn/unizk/mapper/TreatParameterMapper.java new file mode 100644 index 0000000..6612870 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/TreatParameterMapper.java @@ -0,0 +1,10 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.TreatParameter; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; + +public interface TreatParameterMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/UserAddressMapper.java b/common/src/main/java/cn/unizk/mapper/UserAddressMapper.java new file mode 100644 index 0000000..938f925 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/UserAddressMapper.java @@ -0,0 +1,9 @@ +/* +package cn.unizk.mapper; + +import cn.unizk.entity.po.WxUserAddress; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface UserAddressMapper extends BaseMapper { +} +*/ diff --git a/common/src/main/java/cn/unizk/mapper/UserConsultationRecordMapper.java b/common/src/main/java/cn/unizk/mapper/UserConsultationRecordMapper.java new file mode 100644 index 0000000..4662b88 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/UserConsultationRecordMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.UserConsultationRecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-08-18 + */ +public interface UserConsultationRecordMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/UserDeviceTreatRecordMapper.java b/common/src/main/java/cn/unizk/mapper/UserDeviceTreatRecordMapper.java new file mode 100644 index 0000000..0da42ef --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/UserDeviceTreatRecordMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.UserDeviceTreatRecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface UserDeviceTreatRecordMapper extends BaseMapper { +} diff --git a/common/src/main/java/cn/unizk/mapper/UserFreeTrialInfoMapper.java b/common/src/main/java/cn/unizk/mapper/UserFreeTrialInfoMapper.java new file mode 100644 index 0000000..6b96e49 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/UserFreeTrialInfoMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.UserFreeTrialInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author niuniu + * @since 2026-09-09 + */ +public interface UserFreeTrialInfoMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/UserHaveCourseMapper.java b/common/src/main/java/cn/unizk/mapper/UserHaveCourseMapper.java new file mode 100644 index 0000000..3339d76 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/UserHaveCourseMapper.java @@ -0,0 +1,20 @@ +/* +package cn.unizk.mapper; + +import cn.unizk.entity.po.UserHaveCourse; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +*/ +/** + *

      + * Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2026-03-09 + *//* + +public interface UserHaveCourseMapper extends BaseMapper { + +} +*/ diff --git a/common/src/main/java/cn/unizk/mapper/UserTreatmentParametersMapper.java b/common/src/main/java/cn/unizk/mapper/UserTreatmentParametersMapper.java new file mode 100644 index 0000000..ae420b0 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/UserTreatmentParametersMapper.java @@ -0,0 +1,18 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.UserTreatmentParameters; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2026-05-08 + */ +public interface UserTreatmentParametersMapper extends BaseMapper { + + Integer deleteTreat(); + +} diff --git a/common/src/main/java/cn/unizk/mapper/WxOrderItemMapper.java b/common/src/main/java/cn/unizk/mapper/WxOrderItemMapper.java new file mode 100644 index 0000000..5a372d9 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/WxOrderItemMapper.java @@ -0,0 +1,20 @@ +/* +package cn.unizk.mapper; + +import cn.unizk.entity.po.WxOrderItem; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +*/ +/** + *

      + * Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2025-10-14 + *//* + +public interface WxOrderItemMapper extends BaseMapper { + +} +*/ diff --git a/common/src/main/java/cn/unizk/mapper/WxUserAccountMapper.java b/common/src/main/java/cn/unizk/mapper/WxUserAccountMapper.java new file mode 100644 index 0000000..532e399 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/WxUserAccountMapper.java @@ -0,0 +1,20 @@ +/* +package cn.unizk.mapper; + +import cn.unizk.entity.po.WxUserAccount; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +*/ +/** + *

      + * Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2026-04-17 + *//* + +public interface WxUserAccountMapper extends BaseMapper { + +} +*/ diff --git a/common/src/main/java/cn/unizk/mapper/WxUserMedicalVisitInfoMapper.java b/common/src/main/java/cn/unizk/mapper/WxUserMedicalVisitInfoMapper.java new file mode 100644 index 0000000..9365b0f --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/WxUserMedicalVisitInfoMapper.java @@ -0,0 +1,23 @@ +/* +package cn.unizk.mapper; + +import cn.unizk.entity.po.WxUserMedicalVisitInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +*/ +/** + *

      + * Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2026-05-19 + *//* + +public interface WxUserMedicalVisitInfoMapper extends BaseMapper { + + WxUserMedicalVisitInfo selectLatest(@Param("openid") String openid); + +} +*/ diff --git a/common/src/main/java/cn/unizk/mapper/WxUserVideoProgressMapper.java b/common/src/main/java/cn/unizk/mapper/WxUserVideoProgressMapper.java new file mode 100644 index 0000000..bceea84 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/WxUserVideoProgressMapper.java @@ -0,0 +1,20 @@ +/* +package cn.unizk.mapper; + +import cn.unizk.entity.po.WxUserVideoProgress; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +*/ +/** + *

      + * Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2026-03-09 + *//* + +public interface WxUserVideoProgressMapper extends BaseMapper { + +} +*/ diff --git a/common/src/main/java/cn/unizk/mapper/WxVipRechargeMapper.java b/common/src/main/java/cn/unizk/mapper/WxVipRechargeMapper.java new file mode 100644 index 0000000..0bfeee9 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/WxVipRechargeMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.WxVipRecharge; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2026-04-17 + */ +public interface WxVipRechargeMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/XunfuAccountMapper.java b/common/src/main/java/cn/unizk/mapper/XunfuAccountMapper.java new file mode 100644 index 0000000..a56dad2 --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/XunfuAccountMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.XunfuAccount; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2025-09-25 + */ +public interface XunfuAccountMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/mapper/YnzkSystemDeviceMapper.java b/common/src/main/java/cn/unizk/mapper/YnzkSystemDeviceMapper.java new file mode 100644 index 0000000..64fb0bb --- /dev/null +++ b/common/src/main/java/cn/unizk/mapper/YnzkSystemDeviceMapper.java @@ -0,0 +1,16 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.YnzkSystemDevice; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

      + * 设备表 Mapper 接口 + *

      + * + * @author caiwenhao + * @since 2025-09-30 + */ +public interface YnzkSystemDeviceMapper extends BaseMapper { + +} diff --git a/common/src/main/java/cn/unizk/pay/dto/ActiveMemberPayParam.java b/common/src/main/java/cn/unizk/pay/dto/ActiveMemberPayParam.java new file mode 100644 index 0000000..bc9d6c3 --- /dev/null +++ b/common/src/main/java/cn/unizk/pay/dto/ActiveMemberPayParam.java @@ -0,0 +1,15 @@ +package cn.unizk.pay.dto; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2026/7/9 16:14 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class ActiveMemberPayParam extends PayBaseRequest { + +} diff --git a/common/src/main/java/cn/unizk/pay/dto/AlipayResp.java b/common/src/main/java/cn/unizk/pay/dto/AlipayResp.java new file mode 100644 index 0000000..d37bbf2 --- /dev/null +++ b/common/src/main/java/cn/unizk/pay/dto/AlipayResp.java @@ -0,0 +1,16 @@ +package cn.unizk.pay.dto; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2026/7/7 15:25 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class AlipayResp extends BasePayResponse { + + private String qrCode; +} diff --git a/common/src/main/java/cn/unizk/pay/dto/BasePayResponse.java b/common/src/main/java/cn/unizk/pay/dto/BasePayResponse.java new file mode 100644 index 0000000..f5acffd --- /dev/null +++ b/common/src/main/java/cn/unizk/pay/dto/BasePayResponse.java @@ -0,0 +1,14 @@ +package cn.unizk.pay.dto; + +import lombok.Data; + +/** + * @Author hao + * @Date 2026/7/2 16:14 + * @Version 1.0 + **/ +@Data +public class BasePayResponse { + + private String orderId; +} diff --git a/common/src/main/java/cn/unizk/pay/dto/CartPayParam.java b/common/src/main/java/cn/unizk/pay/dto/CartPayParam.java new file mode 100644 index 0000000..d40801a --- /dev/null +++ b/common/src/main/java/cn/unizk/pay/dto/CartPayParam.java @@ -0,0 +1,23 @@ +package cn.unizk.pay.dto; + +import cn.unizk.entity.po.MobileOrderItem; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @Author hao + * @Date 2026/7/10 10:23 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class CartPayParam extends PayBaseRequest { + + private List items; + + private String deliveryWay; + + private Integer addressId; +} diff --git a/common/src/main/java/cn/unizk/pay/dto/CoursePayParam.java b/common/src/main/java/cn/unizk/pay/dto/CoursePayParam.java new file mode 100644 index 0000000..c1c019e --- /dev/null +++ b/common/src/main/java/cn/unizk/pay/dto/CoursePayParam.java @@ -0,0 +1,16 @@ +package cn.unizk.pay.dto; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2026/7/7 16:58 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class CoursePayParam extends PayBaseRequest { + + private Integer courseId; +} diff --git a/common/src/main/java/cn/unizk/pay/dto/GolfServicePayParam.java b/common/src/main/java/cn/unizk/pay/dto/GolfServicePayParam.java new file mode 100644 index 0000000..6e07099 --- /dev/null +++ b/common/src/main/java/cn/unizk/pay/dto/GolfServicePayParam.java @@ -0,0 +1,16 @@ +package cn.unizk.pay.dto; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2026/7/9 11:31 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class GolfServicePayParam extends PayBaseRequest { + + private String projectName; +} diff --git a/common/src/main/java/cn/unizk/pay/dto/HGJPayParam.java b/common/src/main/java/cn/unizk/pay/dto/HGJPayParam.java new file mode 100644 index 0000000..c0f608d --- /dev/null +++ b/common/src/main/java/cn/unizk/pay/dto/HGJPayParam.java @@ -0,0 +1,21 @@ +package cn.unizk.pay.dto; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2026/7/9 10:34 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class HGJPayParam extends PayBaseRequest { + private String deviceId; + + private Integer storeId; + + private Integer physioId; + + private Integer comboId; +} diff --git a/common/src/main/java/cn/unizk/pay/dto/PayBaseRequest.java b/common/src/main/java/cn/unizk/pay/dto/PayBaseRequest.java new file mode 100644 index 0000000..a7484d4 --- /dev/null +++ b/common/src/main/java/cn/unizk/pay/dto/PayBaseRequest.java @@ -0,0 +1,45 @@ +package cn.unizk.pay.dto; + + +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import lombok.Data; + +/** + * @Author hao + * @Date 2026/7/2 15:22 + * @Version 1.0 + **/ +@Data +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,include = JsonTypeInfo.As.PROPERTY,property = "sceneCode",visible = true) +@JsonSubTypes({ + @JsonSubTypes.Type(value = ScanToPowerOnPayParam.class,name = "40000"), + @JsonSubTypes.Type(value = RechargePayParam.class,name = "30000"), + @JsonSubTypes.Type(value = HGJPayParam.class,name = "10000"), + @JsonSubTypes.Type(value = CoursePayParam.class,name = "60000"), + @JsonSubTypes.Type(value = GolfServicePayParam.class,name = "50000"), + @JsonSubTypes.Type(value = ActiveMemberPayParam.class,name = "70000"), + @JsonSubTypes.Type(value = ProductPayParam.class,name = "80000"), + @JsonSubTypes.Type(value = CartPayParam.class,name = "20000") +}) +public class PayBaseRequest { + + private String payChannel; + + private String sceneCode; + + private String actualPayPrice; + + private String goodDesc; + + private Integer mobileAppUserId; + + private String openid; + + private String appToken; + + private String orderId; + + private Integer step; + +} diff --git a/common/src/main/java/cn/unizk/pay/dto/ProductPayParam.java b/common/src/main/java/cn/unizk/pay/dto/ProductPayParam.java new file mode 100644 index 0000000..6e8fd0c --- /dev/null +++ b/common/src/main/java/cn/unizk/pay/dto/ProductPayParam.java @@ -0,0 +1,25 @@ +package cn.unizk.pay.dto; + + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2026/7/2 15:35 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class ProductPayParam extends PayBaseRequest { + + private Integer productId; + + private Integer comboId; + + private String deliveryWay; + + private Integer addressId; + + private Integer quantity; +} diff --git a/common/src/main/java/cn/unizk/pay/dto/RechargePayParam.java b/common/src/main/java/cn/unizk/pay/dto/RechargePayParam.java new file mode 100644 index 0000000..c947636 --- /dev/null +++ b/common/src/main/java/cn/unizk/pay/dto/RechargePayParam.java @@ -0,0 +1,16 @@ +package cn.unizk.pay.dto; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2026/7/7 16:07 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class RechargePayParam extends PayBaseRequest { + + private Integer memberLevel; +} diff --git a/common/src/main/java/cn/unizk/pay/dto/ScanToPowerOnPayParam.java b/common/src/main/java/cn/unizk/pay/dto/ScanToPowerOnPayParam.java new file mode 100644 index 0000000..901f7b1 --- /dev/null +++ b/common/src/main/java/cn/unizk/pay/dto/ScanToPowerOnPayParam.java @@ -0,0 +1,16 @@ +package cn.unizk.pay.dto; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2026/7/2 17:13 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class ScanToPowerOnPayParam extends PayBaseRequest { + + private String deviceId; +} diff --git a/common/src/main/java/cn/unizk/pay/dto/WechatPayResp.java b/common/src/main/java/cn/unizk/pay/dto/WechatPayResp.java new file mode 100644 index 0000000..f7ff9fd --- /dev/null +++ b/common/src/main/java/cn/unizk/pay/dto/WechatPayResp.java @@ -0,0 +1,24 @@ +package cn.unizk.pay.dto; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author hao + * @Date 2026/7/7 15:32 + * @Version 1.0 + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class WechatPayResp extends BasePayResponse { + + private String signType = "RSA"; + + private String prepayId; + + private String timestamp; + + private String paySign; + + private String nonceStr; +} diff --git a/common/src/main/java/cn/unizk/poi/SubHealthReadListener.java b/common/src/main/java/cn/unizk/poi/SubHealthReadListener.java new file mode 100644 index 0000000..e1d017d --- /dev/null +++ b/common/src/main/java/cn/unizk/poi/SubHealthReadListener.java @@ -0,0 +1,54 @@ +package cn.unizk.poi; + +import cn.unizk.entity.po.SubHealthDietaryRegulation; +import cn.unizk.mapper.SubHealthDietaryRegulationMapper; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.read.listener.ReadListener; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +/** + * @Author hao + * @Date 2025/12/22 18:36 + * @Version 1.0 + **/ +@Slf4j +public class SubHealthReadListener implements ReadListener { + + private static final int BATCH_COUNT = 150; + + private List cachedDataList = new ArrayList<>(); + + private SubHealthDietaryRegulationMapper regulationMapper; + + public SubHealthReadListener(SubHealthDietaryRegulationMapper regulationMapper){ + this.regulationMapper = regulationMapper; + } + + @Override + public void invoke(SubHealthDietaryRegulation regulation, AnalysisContext analysisContext) { + if (!"症状编号".equals(regulation.getSymptomNumber())){ + cachedDataList.add(regulation); + if (cachedDataList.size() >= BATCH_COUNT){ + save(); + cachedDataList = new ArrayList<>(); + } + } + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + save(); + } + + private void save(){ + cachedDataList.sort(Comparator.comparingInt(o -> Integer.parseInt(o.getSymptomNumber()))); + regulationMapper.insert(cachedDataList); + } + +} diff --git a/common/src/main/java/cn/unizk/service/FileUploadService.java b/common/src/main/java/cn/unizk/service/FileUploadService.java new file mode 100644 index 0000000..7452d7f --- /dev/null +++ b/common/src/main/java/cn/unizk/service/FileUploadService.java @@ -0,0 +1,9 @@ +package cn.unizk.service; + +import cn.unizk.entity.vo.MinioRespVO; +import cn.unizk.entity.vo.ResultData; +import org.springframework.web.multipart.MultipartFile; + +public interface FileUploadService { + ResultData simpleUpload(MultipartFile file, String bucketName); +} diff --git a/common/src/main/java/cn/unizk/service/HuaWeiYunService.java b/common/src/main/java/cn/unizk/service/HuaWeiYunService.java new file mode 100644 index 0000000..9005be9 --- /dev/null +++ b/common/src/main/java/cn/unizk/service/HuaWeiYunService.java @@ -0,0 +1,53 @@ +package cn.unizk.service; + +import cn.unizk.config.properties.HuaweiyunProperties; +import cn.unizk.entity.po.Course; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.exception.ServiceException; +import com.obs.services.ObsClient; +import com.obs.services.model.PutObjectRequest; +import com.obs.services.model.PutObjectResult; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; + +/** + * @Author hao + * @Date 2026/3/6 14:38 + * @Version 1.0 + **/ +@Service +@Slf4j +public class HuaWeiYunService { + + @Resource + private HuaweiyunProperties huaweiyunProperties; + + public static final String BUCKET_NAME = "peaktcm"; + + public String uploadVideo(MultipartFile file, String objectKey){ + String ak = huaweiyunProperties.getAccessKey(); + String sk = huaweiyunProperties.getSecretKey(); + String endpoint = "obs.cn-south-1.myhuaweicloud.com"; + ObsClient obsClient = new ObsClient(ak,sk,endpoint); + try { + PutObjectRequest request = new PutObjectRequest(); + request.setBucketName(BUCKET_NAME); + request.setObjectKey("video/" +objectKey); + request.setInput(file.getInputStream()); + PutObjectResult result = obsClient.putObject(request); + if (200 <= result.getStatusCode() && 300 > result.getStatusCode()){ + log.info("objectKey={}",result.getObjectKey()); + return result.getObjectKey(); + }else { + throw new ServiceException("视频上传失败,请稍后重试"); + } + } catch (IOException e) { + log.error("上传视频发生异常:",e); + throw new ServiceException("视频上传失败,请稍后重试"); + } + } +} diff --git a/common/src/main/java/cn/unizk/service/WxAuthService.java b/common/src/main/java/cn/unizk/service/WxAuthService.java new file mode 100644 index 0000000..7c1ded7 --- /dev/null +++ b/common/src/main/java/cn/unizk/service/WxAuthService.java @@ -0,0 +1,64 @@ +package cn.unizk.service; + +import cn.unizk.cache.LocalCache; +import cn.unizk.constant.UniConstant; +import cn.unizk.exception.ServiceException; +import cn.unizk.utils.HttpUtil; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * @Author hao + * @Date 2025/7/9 13:41 + * @Version 1.0 + **/ +@Service +@Slf4j +public class WxAuthService { + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + + private void refreshToken(){ + Map params = new HashMap<>(); + params.put("grant_type","client_credential"); + String appid = "wx71e559ade446f09a"; + params.put("appid", appid); + String secret = "00b7f3cff0f4bde07daacd0dea7548c9"; + params.put("secret", secret); + String s = HttpUtil.doPost(UniConstant.GET_ACCESS_TOKEN_URL, null, params); + log.info("wx获取access_token返回数据:{}",s); + try { + JSONObject getTokenRes = JSONObject.parseObject(s); + String access_token = (String) getTokenRes.get("access_token"); + Integer expires_in = (Integer) getTokenRes.get("expires_in"); + +// LocalCache.setWxAccessTokenCache(access_token,exp); + redisTemplate.opsForValue().set(UniConstant.WX_ACCESS_TOKEN,access_token,60, TimeUnit.SECONDS); + }catch (Exception e){ + e.printStackTrace(); + throw new ServiceException("获取微信token失败"); + } + } + + public String getAccessToken(){ + String accessToken = (String) redisTemplate.opsForValue().get(UniConstant.WX_ACCESS_TOKEN); + if (StringUtils.isBlank(accessToken)){ + refreshToken(); + accessToken = (String) redisTemplate.opsForValue().get(UniConstant.WX_ACCESS_TOKEN); + } + return accessToken; + } + +} + diff --git a/common/src/main/java/cn/unizk/service/impl/FileUploadServiceImpl.java b/common/src/main/java/cn/unizk/service/impl/FileUploadServiceImpl.java new file mode 100644 index 0000000..3ff4adf --- /dev/null +++ b/common/src/main/java/cn/unizk/service/impl/FileUploadServiceImpl.java @@ -0,0 +1,61 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.SysFile; +import cn.unizk.entity.vo.MinioRespVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.SysFileCommonMapper; +import cn.unizk.service.FileUploadService; +import cn.unizk.utils.MinioUtil; +import com.google.common.collect.ImmutableSet; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.time.Clock; +import java.time.LocalDateTime; +import java.util.Objects; +import java.util.Set; + +/** + * @Author hao + * @Date 2026/8/17 15:29 + * @Version 1.0 + **/ +@Service +public class FileUploadServiceImpl implements FileUploadService { + + @Resource + private MinioUtil minioUtil; + @Resource + private SysFileCommonMapper sysFileCommonMapper; + + private static final Set WHITE_SET = ImmutableSet.of("image/png","image/jpeg","image/x-icon", + "application/zip", + "application/pdf"); + + @Override + public ResultData simpleUpload(MultipartFile file, String bucketName) { + MinioRespVO resp = null; + try { + resp = minioUtil.uploadFile(file, bucketName); + } catch (Exception e) { + e.printStackTrace(); + throw new ServiceException("文件上传异常"); + } + if (Objects.isNull(resp)){ + throw new ServiceException("文件上传失败"); + } + String fileUrl = resp.getMinIoUrl(); + String fileName = resp.getFileName(); + SysFile sysFile = new SysFile(); + sysFile.setFileUrl(fileUrl); + sysFile.setFileName(fileName); + sysFile.setBucketName(bucketName); + sysFile.setFileType(file.getContentType()); + sysFile.setCreateTime(LocalDateTime.now(Clock.systemDefaultZone())); + int insert = sysFileCommonMapper.insert(sysFile); + resp.setFileId(sysFile.getFileId()); + return insert > 0 ? ResultData.success(resp) : ResultData.failure(ResultData.FAIL_CODE,"上传失败"); + } +} diff --git a/common/src/main/java/cn/unizk/sign/AbstractSignature.java b/common/src/main/java/cn/unizk/sign/AbstractSignature.java new file mode 100644 index 0000000..b34a88d --- /dev/null +++ b/common/src/main/java/cn/unizk/sign/AbstractSignature.java @@ -0,0 +1,161 @@ +package cn.unizk.sign; + +import java.net.MalformedURLException; +import java.net.URL; +import java.security.SignatureException; + +/** + * @Author hao + * @Date 2025/7/8 18:15 + * @Version 1.0 + **/ +public abstract class AbstractSignature { + /** + * 签名ID + */ + private String id; + + /** + * 加密key + */ + private String key; + + /** + * 服务url + */ + private String url; + + /** + * 加密算法 + */ + private String encryptType; + + /** + * 待加密原始字符 + */ + private String originSign; + + /** + * 最终生成的签名 + */ + protected String signa; + + /** + * 时间戳timestamp + */ + private String ts; + + /** + * 请求类型,默认get + */ + protected String requestMethod = "GET"; + + /** + * @param id + * @param key + * @param url + */ + public AbstractSignature(String id, String key, String url) { + this.id = id; + this.key = key; + this.url = url; + this.ts = generateTs(); + } + + /** + * 可设置请求类型 + * @param id + * @param key + * @param url + * @param isPost 是否为POST + */ + public AbstractSignature(String id, String key, String url, boolean isPost) { + this.id = id; + this.key = key; + this.url = url; + if (isPost) { + this.requestMethod = "POST"; + }else{ + this.requestMethod = "GET"; + } + + this.ts = generateTs(); + } + + /** + * 生成ts时间 + */ + public String generateTs() { + return String.valueOf(System.currentTimeMillis() / 1000L); + } + + + /** + * 完成签名,返回完整签名 + * + * @return + * @throws SignatureException + */ + public abstract String getSigna() throws SignatureException; + + public String generateOriginSign() throws SignatureException { + try { + URL url = new URL(this.getUrl()); + + return "host: " + url.getHost() + "\n" + + "date: " + this.getTs() + "\n" + + "GET " + url.getPath() + " HTTP/1.1"; + } catch (MalformedURLException e) { + throw new SignatureException("MalformedURLException:" + e.getMessage()); + } + } + + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getOriginSign() { + return originSign; + } + + public void setOriginSign(String originSign) { + this.originSign = originSign; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getEncryptType() { + return encryptType; + } + + public void setEncryptType(String encryptType) { + this.encryptType = encryptType; + } +} diff --git a/common/src/main/java/cn/unizk/sign/LfasrSignature.java b/common/src/main/java/cn/unizk/sign/LfasrSignature.java new file mode 100644 index 0000000..bc699c6 --- /dev/null +++ b/common/src/main/java/cn/unizk/sign/LfasrSignature.java @@ -0,0 +1,52 @@ +package cn.unizk.sign; + +import cn.hutool.core.util.ObjectUtil; +import cn.unizk.utils.CryptTools; + +import java.security.SignatureException; + +/** + * @Author hao + * @Date 2025/7/8 18:16 + * @Version 1.0 + **/ +public class LfasrSignature extends AbstractSignature { + + /** + * + * @param appId + * @param keySecret + */ + public LfasrSignature(String appId, String keySecret) { + super(appId, keySecret, null); + } + + @Override + public String getSigna() throws SignatureException { + if (ObjectUtil.isEmpty(this.signa)) { + this.setOriginSign(generateOriginSign()); + this.signa = generateSignature(); + } + return this.signa; + } + + /** + * 生成最终的签名,需要先生成原始sign + * + * @throws SignatureException + */ + public String generateSignature() throws SignatureException { + return CryptTools.hmacEncrypt(CryptTools.HMAC_SHA1, this.getOriginSign(), this.getKey()); + } + + /** + * 生成待加密原始字符 + * + * @throws SignatureException + */ + @Override + public String generateOriginSign() throws SignatureException { + return CryptTools.md5Encrypt(this.getId() + this.getTs()); + } +} + diff --git a/common/src/main/java/cn/unizk/utils/AESUtil.java b/common/src/main/java/cn/unizk/utils/AESUtil.java new file mode 100644 index 0000000..da081a0 --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/AESUtil.java @@ -0,0 +1,79 @@ +package cn.unizk.utils; + +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import javax.crypto.spec.IvParameterSpec; +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +/** + * AES 加解密工具类(JDK 原生实现,无需第三方库) + */ +public class AESUtil { + + private static final String ALGORITHM = "AES"; + private static final String TRANSFORMATION = "AES/CBC/PKCS5Padding"; // 模式:CBC + 填充 + + // 注意:密钥必须是 16/24/32 字节,对应 128/192/256 位 + private static final String SECRET_KEY = "Unizk.&jkzy@2025"; // 16 字节 = 128 位 + private static final String IV = "2vCnQxrSXMlLzsen"; // 初始化向量,16 字节 + + /** + * AES 加密 + */ + public static String encrypt(String plainText) throws Exception { + // 创建密钥 + SecretKeySpec keySpec = new SecretKeySpec(SECRET_KEY.getBytes("UTF-8"), ALGORITHM); + + // 创建初始化向量 + IvParameterSpec ivSpec = new IvParameterSpec(IV.getBytes("UTF-8")); + + // 获取 Cipher 实例 + Cipher cipher = Cipher.getInstance(TRANSFORMATION); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); + + // 执行加密 + byte[] encrypted = cipher.doFinal(plainText.getBytes("UTF-8")); + + // Base64 编码返回 + return Base64.getEncoder().encodeToString(encrypted); + } + + /** + * AES 解密 + */ + public static String decrypt(String encryptedText) throws Exception { + SecretKeySpec keySpec = new SecretKeySpec(SECRET_KEY.getBytes(StandardCharsets.UTF_8), ALGORITHM); + IvParameterSpec ivSpec = new IvParameterSpec(IV.getBytes(StandardCharsets.UTF_8)); + + Cipher cipher = Cipher.getInstance(TRANSFORMATION); + cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); + + // Base64 解码 + byte[] decoded = Base64.getDecoder().decode(encryptedText); + byte[] decrypted = cipher.doFinal(decoded); + + return new String(decrypted, StandardCharsets.UTF_8); + } + + // 测试 + public static void main(String[] args) { + try { + String original = "Hello, 这是敏感信息!"; + String encrypted = encrypt(original); + String decrypted = decrypt(encrypted); + + + System.out.println("原文: " + original); + System.out.println("密文: " + encrypted); + System.out.println("解密: " + decrypted); + + String s = decrypt("cu7S45nyalx9dv9lpWX5ew=="); + System.out.println(s); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/common/src/main/java/cn/unizk/utils/AssumeRoleUtil.java b/common/src/main/java/cn/unizk/utils/AssumeRoleUtil.java new file mode 100644 index 0000000..3b6337e --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/AssumeRoleUtil.java @@ -0,0 +1,61 @@ +/* +package cn.unizk.utils; + +import com.aliyun.auth.credentials.Credential; +import com.aliyun.auth.credentials.provider.StaticCredentialProvider; +import com.aliyun.sdk.service.sts20150401.AsyncClient; +import com.aliyun.sdk.service.sts20150401.models.AssumeRoleRequest; +import com.aliyun.sdk.service.sts20150401.models.AssumeRoleResponse; +import com.google.gson.Gson; +import darabonba.core.client.ClientOverrideConfiguration; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +*/ +/** + * @Author hao + * @Date 2025/8/19 15:29 + * @Version 1.0 + **//* + +public class AssumeRoleUtil { + + public static String getAssume() throws ExecutionException, InterruptedException { + StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder() + // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set. + .accessKeyId("LTAI5tBQGeqmhe6yhfqupaZD") + .accessKeySecret("YM2lsEtpjCLOF2kJGdsCBcwRHLX8aa") + //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token + .build()); + + AsyncClient client = AsyncClient.builder() + .region("ap-southeast-1") // Region ID + //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient) + .credentialsProvider(provider) + //.serviceConfiguration(Configuration.create()) // Service-level configuration + // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc. + .overrideConfiguration( + ClientOverrideConfiguration.create() + // Endpoint 请参考 https://api.aliyun.com/product/Sts + .setEndpointOverride("sts.ap-southeast-1.aliyuncs.com") + //.setConnectTimeout(Duration.ofSeconds(30)) + ) + .build(); + + AssumeRoleRequest assumeRoleRequest = AssumeRoleRequest.builder() + .durationSeconds(3600L) + .roleArn("acs:ram::1234131244092744:role/unizk-ram-user") + .roleSessionName("unizk-application-user") + .build(); + + CompletableFuture response = client.assumeRole(assumeRoleRequest); + AssumeRoleResponse resp = response.get(); + String res = new Gson().toJson(resp); + + System.out.println(res); + client.close(); + return res; + } +} +*/ diff --git a/common/src/main/java/cn/unizk/utils/BeanCopyUtils.java b/common/src/main/java/cn/unizk/utils/BeanCopyUtils.java new file mode 100644 index 0000000..423d768 --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/BeanCopyUtils.java @@ -0,0 +1,41 @@ +package cn.unizk.utils; + +import cn.unizk.function.BeanCopyCallBack; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.BeanUtils; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.function.Supplier; + +/** + * @Author hao + * @Date 2024/3/26 9:25 + * @Version 1.0 + **/ +public class BeanCopyUtils extends BeanUtils { + + public static Collection copyArrays(List source, Supplier target){ + return copyArrays(source,target,null); + } + + public static Collection copyArrays(List source, Supplier target, BeanCopyCallBack callBack){ + if (CollectionUtils.isEmpty(source)){ + return null; + } + List list = new ArrayList<>(); + for (T t : source) { + S s = target.get(); + copyProperties(t,s); + if (callBack == null){ + list.add(s); + continue; + } + callBack.callBack(t,s); + list.add(s); + } + return list; + } +} + diff --git a/common/src/main/java/cn/unizk/utils/CaptchaGenerator.java b/common/src/main/java/cn/unizk/utils/CaptchaGenerator.java new file mode 100644 index 0000000..38ff85b --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/CaptchaGenerator.java @@ -0,0 +1,74 @@ +package cn.unizk.utils; + +import cn.unizk.exception.BusinessException; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import java.awt.*; +import java.awt.image.BufferedImage; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +/** + * @Author hao + * @Date 2026/7/6 14:49 + * @Version 1.0 + **/ +@Component +public class CaptchaGenerator { + private static final int WIDTH = 130; // 验证码图片的宽度 + private static final int HEIGHT = 40; // 验证码图片的高度 + private static final int CODE_LENGTH = 6; // 验证码的长度 + private static final String CODE_CHARS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 验证码字符集 + private static final String CAPTCHA = "captcha:"; + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + + + public BufferedImage generateCaptcha(String uuid) { + BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); + Graphics g = image.getGraphics(); + Random random = new Random(); + + // 绘制背景色 + g.setColor(Color.WHITE); + g.fillRect(0, 0, WIDTH, HEIGHT); + + // 绘制干扰线 + for (int i = 0; i < 5; i++) { + g.setColor(new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256))); + g.drawLine(random.nextInt(WIDTH), random.nextInt(HEIGHT), random.nextInt(WIDTH), random.nextInt(HEIGHT)); + } + + // 绘制验证码 + StringBuilder code = new StringBuilder(); + for (int i = 0; i < CODE_LENGTH; i++) { + char c = CODE_CHARS.charAt(random.nextInt(CODE_CHARS.length())); + code.append(c); + g.setColor(new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256))); + g.setFont(new Font("Arial", Font.BOLD, 24)); + g.drawString(String.valueOf(c), 20 * i + 10, 25); + } + + redisTemplate.opsForValue().set(CAPTCHA+uuid,code.toString(),60*5, TimeUnit.SECONDS); + + // 释放资源 + g.dispose(); + + return image; + } + + public void verifyCaptcha(String captcha,String uuid){ + String originalCaptcha = (String) redisTemplate.opsForValue().get(CAPTCHA + uuid); + if (StringUtils.isBlank(originalCaptcha)){ + throw new BusinessException("验证码已过期,请刷新"); + } + if (!originalCaptcha.equals(captcha)){ + throw new BusinessException("图形验证码错误"); + } + } +} diff --git a/common/src/main/java/cn/unizk/utils/CityDataUtil.java b/common/src/main/java/cn/unizk/utils/CityDataUtil.java new file mode 100644 index 0000000..f6261ce --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/CityDataUtil.java @@ -0,0 +1,102 @@ +package cn.unizk.utils; + +import cn.unizk.entity.vo.ProvinceNode; +import cn.unizk.entity.vo.ProvinceTreeVO; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.core.io.ClassPathResource; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author hao + * @Date 2026/7/9 18:16 + * @Version 1.0 + **/ +@Component +public class CityDataUtil { + private List provinceTreeList; + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + + @PostConstruct + public void init() { + try { + // 1. 读取 JSON 文件 + ObjectMapper mapper = new ObjectMapper(); + ClassPathResource resource = new ClassPathResource("city.json"); + + // 2. 解析成中间结构(数组,因为全国有多个省份) + List rawList = mapper.readValue( + resource.getInputStream(), + mapper.getTypeFactory().constructCollectionType(List.class, ProvinceNode.class) + ); + + // 3. 转换为目标 VO 结构 + provinceTreeList = convertToProvinceTree(rawList); + redisTemplate.opsForValue().set("cityData",provinceTreeList); + + } catch (Exception e) { + throw new RuntimeException("加载省市区数据失败", e); + } + } + + /** + * 核心转换方法:将原始节点列表转换为 ProvinceTreeVO 列表 + */ + private List convertToProvinceTree(List rawList) { + List result = new ArrayList<>(); + + for (ProvinceNode provinceNode : rawList) { + ProvinceTreeVO vo = new ProvinceTreeVO(); + vo.setProvince(provinceNode.getN()); // 取名称 + vo.setCities(convertCities(provinceNode.getCh())); + result.add(vo); + } + return result; + } + + /** + * 转换城市列表 + */ + private List convertCities(List cityNodes) { + List cities = new ArrayList<>(); + if (cityNodes == null) return cities; + + for (ProvinceNode cityNode : cityNodes) { + ProvinceTreeVO.City city = new ProvinceTreeVO.City(); + city.setCity(cityNode.getN()); + city.setDistricts(convertDistricts(cityNode.getCh())); + cities.add(city); + } + return cities; + } + + /** + * 转换区/县列表 + */ + private List convertDistricts(List districtNodes) { + List districts = new ArrayList<>(); + if (districtNodes == null) return districts; + + for (ProvinceNode districtNode : districtNodes) { + ProvinceTreeVO.City.District district = new ProvinceTreeVO.City.District(); + district.setDistrict(districtNode.getN()); + districts.add(district); + } + return districts; + } + + /** + * 对外提供数据 + */ + public List getProvinceTree() { + return provinceTreeList; + } +} diff --git a/common/src/main/java/cn/unizk/utils/Crc16Util.java b/common/src/main/java/cn/unizk/utils/Crc16Util.java new file mode 100644 index 0000000..9d7dcef --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/Crc16Util.java @@ -0,0 +1,83 @@ +package cn.unizk.utils; + +/** + * @Author hao + * @Date 2026/4/1 10:10 + * @Version 1.0 + **/ +public class Crc16Util { + + /** + * 计算 Modbus CRC16 校验码 + * + * @param data 需要进行 CRC 计算的字节数组 + * @return 16位的 CRC 校验值 (int 类型) + */ + public static int calculateCrc16(byte[] data) { + int crc = 0xFFFF; // 1. 预置一个 16 位寄存器为 0xFFFF + int polynomial = 0xA001; // Modbus CRC16 的多项式 + + for (byte b : data) { + // 关键点:使用 & 0xFF 将 byte 转为无符号整数,避免 Java 中有符号字节的符号扩展问题 + crc ^= (b & 0xFF); + for (int i = 0; i < 8; i++) { + if ((crc & 0x0001) != 0) { + crc >>= 1; + crc ^= polynomial; + } else { + crc >>= 1; + } + } + } + return crc & 0xFFFF; // 确保返回的是 16 位值 + } + + /** + * 将 CRC16 值转换为小端序(低位在前)的字节数组 + * Modbus 协议通常采用小端序传输,即低字节在前,高字节在后。 + * + * @param crcValue CRC16 计算结果 + * @return 包含两个字节的数组 [低字节, 高字节] + */ + public static byte[] crc16ToBytes(int crcValue) { + return new byte[] { + (byte) (crcValue & 0xFF), // 低字节 + (byte) ((crcValue >> 8) & 0xFF) // 高字节 + }; + } + + /** + * 将 CRC16 值转换为十六进制字符串 + * + * @param crcValue CRC16 计算结果 + * @return 4位十六进制字符串 (例如 "85C0") + */ + public static String crc16ToHexString(int crcValue) { + return String.format("%04X", crcValue); + } + + // --- 使用示例 --- + public static void main(String[] args) { + // 示例数据,例如一个 Modbus 请求帧的一部分 + byte[] data = new byte[] {0x01, 0x03, 0x00, 0x20, 0x00, 0x01}; + + // 1. 计算 CRC16 值 + int crcValue = calculateCrc16(data); + System.out.println("CRC16 整数值: 0x" + crc16ToHexString(crcValue)); + + // 2. 获取两个字节的 CRC 结果 (小端序) + byte[] crcBytes = crc16ToBytes(crcValue); + System.out.printf("CRC16 字节数组: 0x%02X 0x%02X%n", crcBytes[0], crcBytes[1]); + + // 3. 将 CRC 附加到原始数据后面,形成完整的数据帧 + byte[] fullFrame = new byte[data.length + 2]; + System.arraycopy(data, 0, fullFrame, 0, data.length); + fullFrame[data.length] = crcBytes[0]; // 低字节 + fullFrame[data.length + 1] = crcBytes[1]; // 高字节 + + System.out.print("完整数据帧: "); + for (byte b : fullFrame) { + System.out.printf("%02X ", b); + } + } +} diff --git a/common/src/main/java/cn/unizk/utils/CryptTools.java b/common/src/main/java/cn/unizk/utils/CryptTools.java new file mode 100644 index 0000000..190b27d --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/CryptTools.java @@ -0,0 +1,90 @@ +package cn.unizk.utils; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SignatureException; +import java.util.Base64; + +/** + * @Author hao + * @Date 2025/7/8 18:17 + * @Version 1.0 + **/ +public class CryptTools { + + public static final String HMAC_SHA1 = "HmacSHA1"; + + public static final String HMAC_SHA256 = "HmacSHA256"; + + private static final char[] md5String = { + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'a', 'b', 'c', 'd', 'e', 'f'}; + + + /** + * HMAC加解密 + * + * @param encryptType 加密方式 + * @param plainText 明文 + * @param encryptKey 加密密钥 + * @return + * @throws SignatureException + */ + public static String hmacEncrypt(String encryptType, String plainText, String encryptKey) throws SignatureException { + + try { + byte[] data = encryptKey.getBytes(StandardCharsets.UTF_8); + SecretKeySpec secretKey = new SecretKeySpec(data, encryptType); + Mac mac = Mac.getInstance(encryptType); + mac.init(secretKey); + byte[] text = plainText.getBytes(StandardCharsets.UTF_8); + byte[] rawHmac = mac.doFinal(text); + return Base64.getEncoder().encodeToString(rawHmac); + } catch (InvalidKeyException e) { + throw new SignatureException("InvalidKeyException:" + e.getMessage()); + } catch (NoSuchAlgorithmException e) { + throw new SignatureException("NoSuchAlgorithmException:" + e.getMessage()); + } + } + + /** + * Md5加密 + * + * @param pstr 加密字符串 + * @return + * @throws NoSuchAlgorithmException + */ + public static String md5Encrypt(String pstr) throws SignatureException { + + try { + byte[] btInput = pstr.getBytes(); + MessageDigest mdInst = MessageDigest.getInstance("MD5"); + mdInst.update(btInput); + byte[] md = mdInst.digest(); + int j = md.length; + char[] str = new char[j * 2]; + int k = 0; + for (byte byte0 : md) { + str[k++] = md5String[byte0 >>> 4 & 0xF]; + str[k++] = md5String[byte0 & 0xF]; + } + return new String(str); + } catch (NoSuchAlgorithmException e) { + throw new SignatureException("NoSuchAlgorithmException:" + e.getMessage()); + } + } + + /** + * BASE64加密 + * + * @param plainText + * @return + */ + public static String base64Encode(String plainText) { + return Base64.getEncoder().encodeToString(plainText.getBytes(StandardCharsets.UTF_8)); + } +} diff --git a/common/src/main/java/cn/unizk/utils/HttpUtil.java b/common/src/main/java/cn/unizk/utils/HttpUtil.java new file mode 100644 index 0000000..b164003 --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/HttpUtil.java @@ -0,0 +1,238 @@ +package cn.unizk.utils; + +/** + * @Author hao + * @Date 2025/7/8 15:34 + * @Version 1.0 + **/ +import com.alibaba.fastjson2.JSONObject; +import org.apache.http.HttpEntity; +import org.apache.http.NameValuePair; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpRequestBase; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; +import java.util.*; + +public class HttpUtil { + + private static final String URL_CONCATENATION = "url-concatenation"; + private static final String FORM_URLENCODED = "form-urlencoded"; + private static final String JSON_BODY = "json"; + + public static final String STATUS_CODE = "code"; + public static final String RESPONSE = "res"; + + // 私有构造器防止实例化 + private HttpUtil() {} + + /** + * GET 请求(带 headers 和 params) + */ + public static String doGet(String url, Map headers, Map params) { + return doHttpRequest(url, headers, params, HttpMethod.GET, URL_CONCATENATION); + } + + /** + * POST 请求 - 默认以 JSON 格式发送 body + */ + public static String doPost(String url, Map headers, Map params) { + return doHttpRequest(url, headers, params, HttpMethod.POST, JSON_BODY); + } + + /** + * POST 请求 - 使用 URL 拼接方式传递参数 + */ + public static String doPostWithUrlParams(String url, Map headers, Map params) { + return doHttpRequest(url, headers, params, HttpMethod.POST, URL_CONCATENATION); + } + + /** + * POST 请求 - 使用 application/x-www-form-urlencoded 格式 + */ + public static String doPostFormUrlencoded(String url, Map headers, Map params) { + return doHttpRequest(url, headers, params, HttpMethod.POST, FORM_URLENCODED); + } + + /** + * POST 请求 - 发送原始 JSON 字符串(适合复杂结构) + */ + public static String doPostJson(String url, Map headers, JSONObject jsonObject) { + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpPost post = new HttpPost(url); + addHeaders(post, headers); + + StringEntity entity = new StringEntity( + jsonObject.toString(), + ContentType.APPLICATION_JSON.withCharset(StandardCharsets.UTF_8) + ); + post.setEntity(entity); + + try (CloseableHttpResponse response = httpClient.execute(post)) { + if (response.getEntity() == null){ + return null; + } + return EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); + } + } catch (IOException e) { + throw new RuntimeException("HTTP POST JSON request error", e); + } + } + + + public static byte[] postRtnBytes(String url, Map headers, JSONObject jsonObject){ + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpPost request = new HttpPost(url); + StringEntity entity = new StringEntity( + jsonObject.toString(), + ContentType.APPLICATION_JSON.withCharset(StandardCharsets.UTF_8) + ); + request.setEntity(entity); + + try (CloseableHttpResponse response = httpClient.execute(request)) { + int statusCode = response.getStatusLine().getStatusCode(); // HTTP 状态码 + if (statusCode == 200) { + // 获取响应体输入流 + InputStream inputStream = response.getEntity().getContent(); + + // 将输入流读取为 byte[] + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + int nRead; + byte[] data = new byte[4096]; + while ((nRead = inputStream.read(data, 0, data.length)) != -1) { + buffer.write(data, 0, nRead); + } + buffer.flush(); + + return buffer.toByteArray(); // 返回 byte[] 缓冲区 + } else { + throw new IOException("HTTP error: " + statusCode); + } + } + }catch (IOException e){ + throw new RuntimeException("HTTP POST JSON request error", e); + } + } + + + /** + * 返回状态码 + * @param url + * @param headers + * @param jsonObject + * @return + */ + public static JSONObject postJsonCarryStatusCode(String url, Map headers, JSONObject jsonObject) { + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpPost post = new HttpPost(url); + addHeaders(post, headers); + + StringEntity entity = new StringEntity( + jsonObject.toString(), + ContentType.APPLICATION_JSON.withCharset(StandardCharsets.UTF_8) + ); + post.setEntity(entity); + + try (CloseableHttpResponse response = httpClient.execute(post)) { + int statusCode = response.getStatusLine().getStatusCode(); + if (response.getEntity() != null){ + String data = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); + return JSONObject.of(HttpUtil.STATUS_CODE,statusCode,HttpUtil.RESPONSE,data); + } + return JSONObject.of(HttpUtil.STATUS_CODE,statusCode,HttpUtil.RESPONSE,null); + } + } catch (IOException e) { + throw new RuntimeException("HTTP POST JSON request error", e); + } + } + + /** + * 通用 HTTP 请求方法 + */ + private static String doHttpRequest(String url, Map headers, + Map params, HttpMethod method, String paramType) { + List pairList = new ArrayList<>(); + if (params != null && !params.isEmpty()) { + for (Map.Entry entry : params.entrySet()) { + pairList.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + } + + try (CloseableHttpClient client = HttpClients.createDefault()) { + HttpRequestBase request = createHttpRequest(url, method, params, pairList, paramType); + addHeaders(request, headers); + + try (CloseableHttpResponse response = client.execute(request)) { + HttpEntity entity = response.getEntity(); + return entity == null ? null : EntityUtils.toString(entity, StandardCharsets.UTF_8); + } + } catch (IOException | URISyntaxException e) { + throw new RuntimeException("HTTP request error: " + url, e); + } + } + + /** + * 构建 HTTP 请求对象(GET / POST) + */ + private static HttpRequestBase createHttpRequest(String url, HttpMethod method, + Map params, + List pairList, + String paramType) throws URISyntaxException { + if (method == HttpMethod.GET) { + URIBuilder uriBuilder = new URIBuilder(url); + if (paramType.equals(URL_CONCATENATION) && params != null && !params.isEmpty()) { + for (Map.Entry entry : params.entrySet()) { + uriBuilder.addParameter(entry.getKey(), entry.getValue()); + } + } + return new HttpGet(uriBuilder.build()); + } else if (method == HttpMethod.POST) { + HttpPost post = new HttpPost(url); + + if (paramType.equals(FORM_URLENCODED)) { + post.setEntity(new UrlEncodedFormEntity(pairList, StandardCharsets.UTF_8)); + } else if (paramType.equals(JSON_BODY)) { + JSONObject json = new JSONObject(params); + StringEntity entity = new StringEntity( + json.toString(), + ContentType.APPLICATION_JSON.withCharset(StandardCharsets.UTF_8) + ); + post.setEntity(entity); + } + + return post; + } + throw new IllegalArgumentException("Unsupported HTTP method: " + method); + } + + /** + * 添加请求头 + */ + private static void addHeaders(HttpRequestBase request, Map headers) { + if (headers != null && !headers.isEmpty()) { + for (Map.Entry entry : headers.entrySet()) { + request.addHeader(entry.getKey(), entry.getValue()); + } + } + } + + // 枚举类型定义 + public enum HttpMethod { + GET, POST + } +} diff --git a/common/src/main/java/cn/unizk/utils/HuifuUtil.java b/common/src/main/java/cn/unizk/utils/HuifuUtil.java new file mode 100644 index 0000000..d8953d0 --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/HuifuUtil.java @@ -0,0 +1,77 @@ +package cn.unizk.utils; + +import cn.hutool.core.date.DateUtil; +import cn.unizk.exception.ServiceException; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.RandomStringUtils; + +import java.nio.charset.StandardCharsets; +import java.security.KeyFactory; +import java.security.PrivateKey; +import java.security.Signature; +import java.security.spec.PKCS8EncodedKeySpec; +import java.util.Base64; +import java.util.Date; +import java.util.TreeMap; + +/** + * @Author hao + * @Date 2025/10/23 10:54 + * @Version 1.0 + **/ +@Slf4j +public class HuifuUtil { + + /** + * RSA私钥签名:签名方式SHA256WithRSA + * @param data 待签名字符串 + * @param privateKeyBase64 私钥(Base64编码) + * @return 签名byte[] + * @throws ServiceException + */ + public static String sign(String data, String privateKeyBase64) { + // Base64 --> Key + try { + byte[] bytes = Base64.getDecoder().decode(privateKeyBase64); + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes); + KeyFactory keyFactory; + keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(keySpec); + // Sign + Signature signature = Signature.getInstance("SHA256WithRSA"); + signature.initSign(privateKey); + signature.update(data.getBytes(StandardCharsets.UTF_8)); + return Base64.getEncoder().encodeToString(signature.sign()); + } catch (Exception e) { + log.error("签名异常",e); + throw new ServiceException("签名异常"); + } + } + + public static String sign(JSONObject object, String privateKeyStr) { + TreeMap treeMap = JSONObject.parseObject(object.toString(), TreeMap.class); + JSONObject signBody = new JSONObject(treeMap); + // Base64 --> Key + try { + byte[] bytes = Base64.getDecoder().decode(privateKeyStr); + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes); + KeyFactory keyFactory; + keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(keySpec); + // Sign + Signature signature = Signature.getInstance("SHA256WithRSA"); + signature.initSign(privateKey); + signature.update(signBody.toString().getBytes(StandardCharsets.UTF_8)); + return Base64.getEncoder().encodeToString(signature.sign()); + } catch (Exception e) { + log.error("签名异常",e); + throw new ServiceException("签名异常"); + } + } + + public static String getReqSeqId(){ + return DateUtil.format(new Date(),"yyyyMMddHHmmss") + RandomStringUtils.randomNumeric(18); + } + +} diff --git a/common/src/main/java/cn/unizk/utils/IOFileUtil.java b/common/src/main/java/cn/unizk/utils/IOFileUtil.java new file mode 100644 index 0000000..2507aba --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/IOFileUtil.java @@ -0,0 +1,18 @@ +package cn.unizk.utils; + +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; + +/** + * @Author hao + * @Date 2025/8/28 16:57 + * @Version 1.0 + **/ +public class IOFileUtil { + + public static String readFileToString(String filePath) throws Exception { + byte[] bytes = Files.readAllBytes(Paths.get(filePath)); + return new String(bytes, StandardCharsets.UTF_8); + } +} diff --git a/common/src/main/java/cn/unizk/utils/IatModelZh.java b/common/src/main/java/cn/unizk/utils/IatModelZh.java new file mode 100644 index 0000000..9ed657f --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/IatModelZh.java @@ -0,0 +1,330 @@ +package cn.unizk.utils; + +import cn.unizk.cache.LocalCache; +import com.alibaba.fastjson2.JSONObject; +import com.google.gson.Gson; +import okhttp3.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.CountDownLatch; + +/** + * 大模型语音识别---中文识别 + */ +public class IatModelZh extends WebSocketListener { + private static final String hostUrl = "https://iat.xf-yun.com/v1"; // 注意中文识别的地址 + private static final String appid = "3fa7b7a0"; //在控制台-我的应用获取 + private static final String apiSecret = "N2Q5Y2NiOTZmNThhODZjYTgxMjg1NjA4"; // 在控制台-我的应用获取 + private static final String apiKey = "da390c58ef0f2ad8424c3dccc6d458c7"; // 在控制台-我的应用获取 + private static final String file = "D:\\code\\temp\\temp8661000958794401521.mp3"; // 识别音频位置 + private MultipartFile multipartFile; + private String openid; + public static final int StatusFirstFrame = 0; + public static final int StatusContinueFrame = 1; + public static final int StatusLastFrame = 2; + public static final Gson gson = new Gson(); + // 开始时间 + private static Date dateBegin = new Date(); + // 结束时间 + private static Date dateEnd = new Date(); + private static final SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss.SSS"); + + private List totalResultList = new ArrayList<>(); + + private CountDownLatch latch = new CountDownLatch(1); + + public IatModelZh(){} + + public IatModelZh(MultipartFile file,String openid){ + this.multipartFile = file; + this.openid = openid; + } + + public CountDownLatch getLatch() { + return latch; + } + + @Override + public void onOpen(WebSocket webSocket, Response response) { + super.onOpen(webSocket, response); + new Thread(() -> { + //连接成功,开始发送数据 + int frameSize = 1280; //每一帧音频的大小,建议每 40ms 发送 122B + int intervel = 40; + int status = 0; // 音频的状态 + int seq = 0; //数据序号 + try (InputStream fs = multipartFile.getInputStream()) { + byte[] buffer = new byte[frameSize]; + // 发送音频 + end: + while (true) { + seq++; // 每次循环更新下seq + int len = fs.read(buffer); + if (len == -1) { + status = StatusLastFrame; //文件读完,改变status 为 2 + } + switch (status) { + case StatusFirstFrame: // 第一帧音频status = 0 + String json = "{\n" + + " \"header\": {\n" + + " \"app_id\": \"" + appid + "\",\n" + + " \"status\": " + StatusFirstFrame + "\n" + + " },\n" + + " \"parameter\": {\n" + + " \"iat\": {\n" + + " \"domain\": \"slm\",\n" + + " \"language\": \"zh_cn\",\n" + + " \"accent\": \"mandarin\",\n" + + " \"eos\": 6000,\n" + + " \"vinfo\": 1,\n" + + " \"dwa\": \"wpgs\",\n" + + " \"result\": {\n" + + " \"encoding\": \"utf8\",\n" + + " \"compress\": \"raw\",\n" + + " \"format\": \"json\"\n" + + " }\n" + + " }\n" + + " },\n" + + " \"payload\": {\n" + + " \"audio\": {\n" + + " \"encoding\": \"lame\",\n" + + " \"sample_rate\": 16000,\n" + + " \"channels\": 1,\n" + + " \"bit_depth\": 16,\n" + + " \"seq\": " + seq + ",\n" + + " \"status\": 0,\n" + + " \"audio\": \"" + Base64.getEncoder().encodeToString(Arrays.copyOf(buffer, len)) + "\"\n" + + " }\n" + + " }\n" + + "}"; + webSocket.send(json); + // System.err.println(json); + System.out.println("第一帧音频发送完毕..."); + System.out.println("中间音频将持续发送..."); + status = StatusContinueFrame; // 发送完第一帧改变status 为 1 + break; + case StatusContinueFrame: //中间帧status = 1 + json = "{\n" + + " \"header\": {\n" + + " \"app_id\": \"" + appid + "\",\n" + + " \"status\": 1\n" + + " },\n" + + " \"payload\": {\n" + + " \"audio\": {\n" + + " \"encoding\": \"raw\",\n" + + " \"sample_rate\": 16000,\n" + + " \"channels\": 1,\n" + + " \"bit_depth\": 16,\n" + + " \"seq\": " + seq + ",\n" + + " \"status\": 1,\n" + + " \"audio\": \"" + Base64.getEncoder().encodeToString(Arrays.copyOf(buffer, len)) + "\"\n" + + " }\n" + + " }\n" + + "}"; + webSocket.send(json); + // System.err.println(json); + // System.out.println("中间帧音频发送中..."); + break; + case StatusLastFrame: // 最后一帧音频status = 2 ,标志音频发送结束 + json = "{\n" + + " \"header\": {\n" + + " \"app_id\": \"" + appid + "\",\n" + + " \"status\": 2\n" + + " },\n" + + " \"payload\": {\n" + + " \"audio\": {\n" + + " \"encoding\": \"raw\",\n" + + " \"sample_rate\": 16000,\n" + + " \"channels\": 1,\n" + + " \"bit_depth\": 16,\n" + + " \"seq\": " + seq + ",\n" + + " \"status\": 2,\n" + + " \"audio\": \"\"\n" + + " }\n" + + " }\n" + + "}"; + webSocket.send(json); + // System.err.println(json); + System.out.println("最后一帧音频发送完毕..."); + break end; + } + Thread.sleep(intervel); //模拟音频采样延时 + } + System.out.println("所有音频发送完毕..."); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }).start(); + } + + @Override + public void onMessage(WebSocket webSocket, String text) { + super.onMessage(webSocket, text); + // System.out.println(text); + JsonParse jsonParse = gson.fromJson(text, JsonParse.class); + if (jsonParse != null) { + if (jsonParse.header.code != 0) { + System.out.println("code=>" + jsonParse.header.code + " error=>" + jsonParse.header.message + " sid=" + jsonParse.header.sid); + System.out.println("错误码查询链接:https://www.xfyun.cn/document/error-code"); + return; + } + if (jsonParse.payload != null) { + if (jsonParse.payload.result.text != null) { // 中间结果 + byte[] decodedBytes = Base64.getDecoder().decode(jsonParse.payload.result.text); + String decodeRes = new String(decodedBytes, StandardCharsets.UTF_8); + // System.out.println("中间识别结果 ==》" + decodeRes); + JsonParseText jsonParseText = gson.fromJson(decodeRes, JsonParseText.class); + String mark = ""; + if (jsonParseText.pgs.equals("apd")) { + mark = "结果追加到上面结果"; + } + if (jsonParseText.pgs.equals("rpl")) { + mark = "结果替换前面" + jsonParseText.rg.get(0) + "到" + jsonParseText.rg.get(1) + "次"; + } + List wsList = jsonParseText.ws; + System.out.print("中间识别结果 【" + mark + "】==》"); + StringBuffer sb = new StringBuffer(); + for (Ws ws : wsList) { + List cwList = ws.cw; + for (Cw cw : cwList) { + sb.append(cw.w); + } + } + totalResultList.add(sb.toString()); + System.out.println(); + } + if (jsonParse.payload.result.status == 2) { // 最终结果 说明数据全部返回完毕,可以关闭连接,释放资源 + System.out.println("session end "); + dateEnd = new Date(); + System.out.println(sdf.format(dateBegin) + "开始"); + System.out.println(sdf.format(dateEnd) + "结束"); + System.out.println("耗时:" + (dateEnd.getTime() - dateBegin.getTime()) + "ms"); + // System.out.println("最终识别结果 ==》" + decodeRes); // 按照规则替换与追加出最终识别结果 + String jsonString = JSONObject.toJSONString(totalResultList); + System.out.println("jsonstring=" + jsonString); + String s = totalResultList.get(totalResultList.size() - 2); + LocalCache.IAT_MODEL_MSG_QUEUE.remove(openid); + LocalCache.IAT_MODEL_MSG_QUEUE.put(openid,s); + latch.countDown(); + System.out.println(); + System.out.println("本次识别sid ==》" + jsonParse.header.sid); + webSocket.close(1000, ""); + } + } + } + } + + @Override + public void onFailure(WebSocket webSocket, Throwable t, Response response) { + super.onFailure(webSocket, t, response); + try { + if (null != response) { + int code = response.code(); + System.out.println("onFailure code:" + code); + System.out.println("onFailure body:" + response.body().string()); + if (101 != code) { + System.out.println("connection failed"); + System.exit(0); + } + } + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public static void main(String[] args) throws Exception { + // 构建鉴权url + String authUrl = getAuthUrl(hostUrl, apiKey, apiSecret); + OkHttpClient client = new OkHttpClient.Builder().build(); + //将url中的 schema http://和https://分别替换为ws:// 和 wss:// + String url = authUrl.toString().replace("http://", "ws://").replace("https://", "wss://"); + //System.out.println(url); + Request request = new Request.Builder().url(url).build(); + // System.out.println(client.newCall(request).execute()); + //System.out.println("url===>" + url); + WebSocket webSocket = client.newWebSocket(request, new IatModelZh()); + } + + public static String getAuthUrl() throws Exception { + return getAuthUrl(hostUrl,apiKey,apiSecret); + } + + public static String getAuthUrl(String hostUrl, String apiKey, String apiSecret) throws Exception { + URL url = new URL(hostUrl); + SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US); + format.setTimeZone(TimeZone.getTimeZone("GMT")); + String date = format.format(new Date()); + StringBuilder builder = new StringBuilder("host: ").append(url.getHost()).append("\n").// + append("date: ").append(date).append("\n").// + append("GET ").append(url.getPath()).append(" HTTP/1.1"); + // System.out.println(builder); + Charset charset = Charset.forName("UTF-8"); + Mac mac = Mac.getInstance("hmacsha256"); + SecretKeySpec spec = new SecretKeySpec(apiSecret.getBytes(charset), "hmacsha256"); + mac.init(spec); + byte[] hexDigits = mac.doFinal(builder.toString().getBytes(charset)); + String sha = Base64.getEncoder().encodeToString(hexDigits); + + //System.out.println(sha); + String authorization = String.format("api_key=\"%s\", algorithm=\"%s\", headers=\"%s\", signature=\"%s\"", apiKey, "hmac-sha256", "host date request-line", sha); + //System.out.println(authorization); + HttpUrl httpUrl = HttpUrl.parse("https://" + url.getHost() + url.getPath()).newBuilder().// + addQueryParameter("authorization", Base64.getEncoder().encodeToString(authorization.getBytes(charset))).// + addQueryParameter("date", date).// + addQueryParameter("host", url.getHost()).// + build(); + return httpUrl.toString(); + } + + class JsonParse { + Header header; + Payload payload; + } + + class Header { + int code; + String message; + String sid; + int status; + } + + class Payload { + Result result; + } + + class Result { + String text; + int status; + } + + class JsonParseText { + List ws; + String pgs; + List rg; + } + + class Ws { + List cw; + } + + class Cw { + String w; + } +} + diff --git a/common/src/main/java/cn/unizk/utils/JkStrUtil.java b/common/src/main/java/cn/unizk/utils/JkStrUtil.java new file mode 100644 index 0000000..fb54c0f --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/JkStrUtil.java @@ -0,0 +1,18 @@ +package cn.unizk.utils; + +import org.apache.commons.lang3.StringUtils; + +/** + * @Author hao + * @Date 2025/9/16 14:19 + * @Version 1.0 + **/ +public class JkStrUtil extends StringUtils { + + public static boolean strToBool(String str){ + if (StringUtils.isBlank(str)){ + return false; + } + return str.equals("true"); + } +} diff --git a/common/src/main/java/cn/unizk/utils/MD5Util.java b/common/src/main/java/cn/unizk/utils/MD5Util.java new file mode 100644 index 0000000..e684c65 --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/MD5Util.java @@ -0,0 +1,48 @@ +package cn.unizk.utils; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +/** + * @Author hao + * @Date 2025/9/13 14:42 + * @Version 1.0 + **/ +public class MD5Util { + + private static final String SALT = "Unizk.jkzy@2025"; + + /** + * 对字符串进行 MD5 加盐加密 + * @param input 要加密的原始字符串(如密码) + * @param salt 盐值(可以是随机字符串、用户名、固定值等) + * @return 32位小写 MD5 加密后的字符串 + */ + public static String md5WithSalt(String input, String salt) { + try { + // 拼接原始字符串和盐 + String str = input + salt; + + // 获取 MD5 摘要实例 + MessageDigest md = MessageDigest.getInstance("MD5"); + + // 计算摘要(返回字节数组) + byte[] digest = md.digest(str.getBytes()); + + // 将字节数组转为 16 进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b & 0xff)); + } + + return sb.toString(); // 返回 32 位小写 MD5 + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException("MD5算法不可用", e); + } + } + + public static String md5(String plaintext){ + return md5WithSalt(plaintext,MD5Util.SALT); + } + +} diff --git a/common/src/main/java/cn/unizk/utils/MapUtil.java b/common/src/main/java/cn/unizk/utils/MapUtil.java new file mode 100644 index 0000000..dac2382 --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/MapUtil.java @@ -0,0 +1,123 @@ +package cn.unizk.utils; + +import cn.unizk.entity.po.JkStore; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Map; +import java.util.TreeMap; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2026/7/21 15:50 + * @Version 1.0 + **/ +@Slf4j +public class MapUtil { + + // 请将下方常量替换为您的真实 Key 和 SecretKey + private static final String MAP_KEY = "5UGBZ-CSH65-SE6IV-ISL4S-F2PJV-Q2FJ6"; + private static final String MAP_SK = "tLuApvUQthpKXydz5PZaJjpmtcI6iSi9"; // ⚠️ 极度不安全,仅供测试! + + /** + * 获取带签名的地图请求 URL + */ + public static String getLocationUrl(String address) { + try { + // 1. 使用 TreeMap 确保参数按键名字典序排序 + Map params = new TreeMap<>(); + params.put("key", MAP_KEY); + params.put("address", address); + params.put("output", "json"); + + // 2. 拼接参数字符串 (使用原始值,不编码) + String paramStr = params.entrySet().stream() + .map(entry -> entry.getKey() + "=" + entry.getValue()) + .collect(Collectors.joining("&")); + + // 3. 构造待签名字符串: 路径 + '?' + 参数字符串 + SK + String path = "/ws/geocoder/v1"; + String signStr = path + "?" + paramStr + MAP_SK; + + // 4. 计算 MD5 (小写),得到签名 sig + String sig = md5(signStr); + + // 5. 将签名加入参数 + params.put("sig", sig); + + // 6. 构造最终请求 URL (注意:此时需要对所有参数值进行 URL 编码) + String baseUrl = "https://apis.map.qq.com" + path; + String queryString = params.entrySet().stream() + .map(entry -> { + try { + String encodedKey = URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8.name()); + String encodedValue = URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8.name()); + // URLEncoder 会将空格编码为 '+',这里替换为标准的 '%20' + return encodedKey + "=" + encodedValue.replace("+", "%20"); + } catch (Exception e) { + throw new RuntimeException("URL Encoding failed", e); + } + }) + .collect(Collectors.joining("&")); + + return baseUrl + "?" + queryString; + + } catch (Exception e) { + log.error(e.getMessage()); + } + return null; + } + + /** + * 计算字符串的 MD5 摘要 (小写) + */ + private static String md5(String input) { + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] digest = md.digest(input.getBytes(StandardCharsets.UTF_8)); + + // 将字节数组转换为小写十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b & 0xff)); + } + return sb.toString(); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException("MD5 algorithm not found", e); + } + } + + public static JkStore getLoLa(String address){ + JkStore jkStore = new JkStore(); + String locationUrl = getLocationUrl(address); + if (locationUrl == null){ + jkStore.setLongitude(114.068793); + jkStore.setLatitude(22.531609); + return jkStore; + } + try { + String s = HttpUtil.doGet(locationUrl, null, null); + JSONObject jsonObject = JSONObject.parseObject(s); + JSONObject result = jsonObject.getJSONObject("result"); + JSONObject location = result.getJSONObject("location"); + jkStore.setLongitude(location.getDoubleValue("lng")); + jkStore.setLatitude(location.getDoubleValue("lat")); + return jkStore; + }catch (Exception e){ + log.error(e.getMessage()); + } + return null; + } + + public static void main(String[] args) { + JkStore store = getLoLa("深圳市宝安区"); + System.out.println(store.getLatitude()); + System.out.println(store.getLongitude()); + + } +} diff --git a/common/src/main/java/cn/unizk/utils/MenuTreeUtil.java b/common/src/main/java/cn/unizk/utils/MenuTreeUtil.java new file mode 100644 index 0000000..4acca4e --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/MenuTreeUtil.java @@ -0,0 +1,84 @@ +package cn.unizk.utils; + +import cn.unizk.entity.po.Menu; +import cn.unizk.entity.vo.TreeMenu; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2025/8/26 11:18 + * @Version 1.0 + **/ +public class MenuTreeUtil { + + /** + * 将扁平菜单列表转换为树形结构,按 orderNum 排序 + * @param menuList 扁平菜单列表 + * @return 树形菜单根节点列表 + */ + public static List buildTree(List menuList) { + if (menuList == null || menuList.isEmpty()) { + return new ArrayList<>(); + } + + // 1. 转换为 TreeMenu 列表 + List treeMenuList = menuList.stream() + .map(MenuTreeUtil::convertToTreeMenu) + .collect(Collectors.toList()); + + // 2. 按 orderNum 排序 + treeMenuList.sort(Comparator.comparing(TreeMenu::getOrderNum)); + + // 3. 使用 Map 存储所有节点,便于查找 + Map menuMap = treeMenuList.stream() + .collect(Collectors.toMap(TreeMenu::getMenuId, menu -> menu)); + + // 4. 存储根节点 + List rootList = new ArrayList<>(); + + // 5. 遍历所有节点,构建父子关系 + for (TreeMenu menu : treeMenuList) { + Integer parentId = menu.getParentId(); + + // 判断是否为根节点(parentId 为 null 或 0) + if (parentId == null || parentId == 0) { + rootList.add(menu); + } else { + TreeMenu parent = menuMap.get(parentId); + if (parent != null) { + parent.getChildren().add(menu); + // 对子节点也按 orderNum 排序 + parent.getChildren().sort(Comparator.comparing(TreeMenu::getOrderNum)); + } + } + } + + // 6. 对根节点再次排序(确保根节点有序) + rootList.sort(Comparator.comparing(TreeMenu::getOrderNum)); + + return rootList; + } + + /** + * 将 Menu 转换为 TreeMenu + */ + private static TreeMenu convertToTreeMenu(Menu menu) { + TreeMenu treeMenu = new TreeMenu(); + treeMenu.setMenuId(menu.getMenuId()); + treeMenu.setMenuName(menu.getMenuName()); + treeMenu.setParentId(menu.getParentId()); + treeMenu.setOrderNum(menu.getOrderNum()); + treeMenu.setPath(menu.getPath()); + treeMenu.setComponent(menu.getComponent()); + treeMenu.setStatus(menu.getStatus()); + treeMenu.setPerms(menu.getPerms()); + treeMenu.setIcon(menu.getIcon()); + treeMenu.setCreateTime(menu.getCreateTime()); + return treeMenu; + } +} diff --git a/common/src/main/java/cn/unizk/utils/MinioUtil.java b/common/src/main/java/cn/unizk/utils/MinioUtil.java new file mode 100644 index 0000000..b3b4083 --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/MinioUtil.java @@ -0,0 +1,145 @@ +package cn.unizk.utils; + +import cn.hutool.core.date.DateUtil; +import cn.unizk.config.properties.MinioProperties; +import cn.unizk.entity.vo.MinioRespVO; +import cn.unizk.exception.ServiceException; +import com.google.common.collect.ImmutableSet; +import io.minio.*; +import io.minio.errors.*; +import lombok.extern.slf4j.Slf4j; +import net.coobird.thumbnailator.Thumbnails; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.tomcat.util.http.fileupload.FileItem; +import org.apache.tomcat.util.http.fileupload.FileItemFactory; +import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; + +/** + * @Author hao + * @Date 2025/8/27 17:11 + * @Version 1.0 + **/ +@Component +@Slf4j +public class MinioUtil { + + @Resource + private MinioProperties minioProperties; + @Autowired + private MinioClient minioClient; + + private static final Long maxSize = (long)2048 * 2048; + + + /** + * 创建bucket + * @param bucketName + * @throws IOException + * @throws InvalidKeyException + * @throws InvalidResponseException + * @throws InsufficientDataException + * @throws NoSuchAlgorithmException + * @throws ServerException + * @throws InternalException + * @throws XmlParserException + * @throws ErrorResponseException + */ + public void createBucket(String bucketName) throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException { + if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())){ + minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); + } + } + + public MinioRespVO uploadFile(MultipartFile file, String bucketName) throws Exception { + if (file == null || file.isEmpty()) { + return null; + } + + // 1. 确保桶存在 + createBucket(bucketName); + + // 2. 组装路径:yyyyMMdd/originalName + String originalName = file.getOriginalFilename(); + + if (StringUtils.isBlank(originalName) || !originalName.contains(".")){ + throw new ServiceException("文件格式不正确"); + } + String s = RandomStringUtils.randomNumeric(6); + String fileName = DateUtil.format(new Date(),"yyyyMMddHHmmss") + s + originalName.substring(originalName.lastIndexOf(".")); +// String objectName = fileName + "/" + originalName; + + // 3. 如果超过阈值,先压缩到临时文件 + InputStream uploadStream = file.getInputStream(); + long size = file.getSize(); + log.info("压缩前的图片大小为:{}",size); + String contentType = file.getContentType(); + + Path temp = null; + try { + String fileType = originalName.substring(originalName.lastIndexOf(".")); + Set requireZip = ImmutableSet.of(".png",".jpg",".jpeg",".gif"); + if (size > maxSize && requireZip.contains(fileType)) { + temp = Files.createTempFile("thumb_", fileType); + log.info("临时文件路径是:{}",temp); + try (OutputStream os = Files.newOutputStream(temp); + InputStream in = file.getInputStream()) { + Thumbnails.of(in) + .size(1024, 1024) + .outputQuality(0.85) + .outputFormat(fileType.substring(1)) + .toOutputStream(os); + } + uploadStream = Files.newInputStream(temp); + size = Files.size(temp); + log.info("压缩后的图片大小为:{}",size); +// contentType = "image/jpeg"; + } + + try (InputStream finalStream = uploadStream) { + minioClient.putObject( + PutObjectArgs.builder() + .bucket(bucketName) + .object(fileName) + .stream(finalStream, size, -1) + .contentType(contentType) + .build()); + } + } finally { + if (temp != null) { + Files.deleteIfExists(temp); + } + } + + // 5. 返回结果 + String domain = "https://peaktcm.com:8000"; + String url = String.format("%s/%s/%s", + domain.replaceAll("/+$", ""), + bucketName, + fileName); + + return MinioRespVO.builder() + .minIoUrl(url) + .fileName(originalName) + .build(); + } + + public void deleteFile(String bucketName,String fileName) throws Exception{ + minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(fileName).build()); + } +} diff --git a/common/src/main/java/cn/unizk/utils/MybatisPlusGenerator.java b/common/src/main/java/cn/unizk/utils/MybatisPlusGenerator.java new file mode 100644 index 0000000..c47b0af --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/MybatisPlusGenerator.java @@ -0,0 +1,68 @@ +package cn.unizk.utils; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.rules.DbColumnType; +import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; + +import java.sql.Types; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +/** + * @Author hao + * @Date 2025/8/21 14:00 + * @Version 1.0 + **/ +public class MybatisPlusGenerator { + + public static void main(String[] args) { + FastAutoGenerator.create("jdbc:mysql://139.9.2.195:3306/uni_ai_doctor?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false", "unizk", "Unizk@2025") + .globalConfig(builder -> { + builder.author("niuniu") // 设置作者 + // .enableSwagger() // 开启 swagger 模式 + .outputDir("E:\\code\\unizk\\AI_Questioning\\common\\src\\main\\java"); // 指定输出目录 + }) + .dataSourceConfig(builder -> builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> { + int typeCode = metaInfo.getJdbcType().TYPE_CODE; + if (typeCode == Types.SMALLINT) { + // 自定义类型转换 + return DbColumnType.INTEGER; + } + return typeRegistry.getColumnType(metaInfo); + + })) + .packageConfig(builder -> { + builder.parent("cn.unizk") // 设置父包名 + // .moduleName("") // 设置父包模块名 + .entity("entity.po") + .mapper("mapper") + // .controller("rest") + .pathInfo(Collections.singletonMap(OutputFile.xml, "E:\\code\\unizk\\AI_Questioning\\common\\src\\main\\resources\\mapper")); // 设置mapperXml生成路径 + }) + .strategyConfig(builder -> { + builder.addInclude("user_free_trial_info") // 设置需要生成的表名 + .entityBuilder() + .enableLombok() + .serviceBuilder() + .disableService() + .disableServiceImpl() + .mapperBuilder() + .enableBaseResultMap() + .controllerBuilder() + .disable(); + /*.serviceBuilder() + .formatServiceFileName("%sService") + .formatServiceImplFileName("%sServiceImpl") + .mapperBuilder() + .superClass(UniBaseMapper.class) + .enableBaseResultMap() + .formatMapperFileName("%sMapper") + .formatXmlFileName("%sMapper");*/ + }) + .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/common/src/main/java/cn/unizk/utils/MybatisResultMapUtil.java b/common/src/main/java/cn/unizk/utils/MybatisResultMapUtil.java new file mode 100644 index 0000000..b71d866 --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/MybatisResultMapUtil.java @@ -0,0 +1,67 @@ +package cn.unizk.utils; + +import cn.unizk.entity.po.Device; +import cn.unizk.entity.po.DeviceUsageRecord; +import com.google.common.base.CaseFormat; + +import java.lang.reflect.Field; + +/** + * @Author hao + * @Date 2025/9/4 18:54 + * @Version 1.0 + **/ +public class MybatisResultMapUtil { + public static void main(String[] args) throws Exception { + + String resultMapNew = getResultMapNew(DeviceUsageRecord.class); + System.out.println(resultMapNew); + } + + public static String getResultMapNew(Class cls) throws Exception { + String str = ""; + // 头部 + str = " \r\n"; + // 每一行字符串 + String linestr = ""; + Field[] declaredFields = cls.getDeclaredFields(); + for (Field field : declaredFields) { + if (field.getType().getName().equals("java.lang.String")) { + linestr = ""; + linestr += "\r\n"; + str += linestr; + continue; + } + if (field.getType().getName().equals("java.math.BigDecimal")){ + linestr = ""; + linestr += "\r\n"; + str += linestr; + continue; + } + if (field.getType().getName().equals("java.util.Date")){ + linestr = ""; + linestr += "\r\n"; + str += linestr; + continue; + } + if (field.getType().getName().equals("java.lang.Long")){ + linestr = ""; + linestr += "\r\n"; + str += linestr; + continue; + }else { + linestr = ""; + linestr += "\r\n"; + str += linestr; + } + + } + str+=""; + return str; + } +} diff --git a/common/src/main/java/cn/unizk/utils/QRcodeUtil.java b/common/src/main/java/cn/unizk/utils/QRcodeUtil.java new file mode 100644 index 0000000..26802d4 --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/QRcodeUtil.java @@ -0,0 +1,81 @@ +package cn.unizk.utils; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.extra.qrcode.QrCodeUtil; +import cn.hutool.extra.qrcode.QrConfig; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.awt.*; +import java.io.IOException; +import java.util.Date; + +public class QRcodeUtil { + + public static void generateQrcode(HttpServletResponse response,String url,String optionType) { +// String qrCodeUrl = "https://peaktcm.com/h5/index.html?diviceId=12345"; + + // 创建配置 + QrConfig config = QrConfig.create(); + config.setBackColor(Color.WHITE); // 背景绿色 + + // 必须设置响应头 + response.setContentType("image/png"); + if (optionType != null && optionType.equals("download")){ + String now = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + response.setHeader("Content-Disposition", "attachment; filename=qrcode-"+now+".png"); + }else { + response.setHeader("Content-Disposition", "inline; filename=qrcode.png"); + } + + ServletOutputStream outputStream = null; + try { + outputStream = response.getOutputStream(); + QrCodeUtil.generate(url, config, "png", outputStream); + outputStream.flush(); // 确保数据写出 + } catch (IOException e) { + e.printStackTrace(); + }finally { + if (outputStream != null){ + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + public static void getDeviceQrCode(HttpServletResponse response,String deviceId,String optionType) { + String qrCodeUrl = "https://peaktcm.com/h5/index.html?deviceId=" + deviceId; + + // 创建配置 + QrConfig config = QrConfig.create(); + config.setBackColor(Color.WHITE); + + // 必须设置响应头 + response.setContentType("image/png"); + if (optionType != null && optionType.equals("download")){ + response.setHeader("Content-Disposition", "attachment; filename="+deviceId+".png"); + }else { + response.setHeader("Content-Disposition", "inline; filename=qrcode.png"); + } + + ServletOutputStream outputStream = null; + try { + outputStream = response.getOutputStream(); + QrCodeUtil.generate(qrCodeUrl, config, "png", outputStream); + outputStream.flush(); // 确保数据写出 + } catch (IOException e) { + e.printStackTrace(); + }finally { + if (outputStream != null){ + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } +} diff --git a/common/src/main/java/cn/unizk/utils/SecurePlaintextCryptoUtil.java b/common/src/main/java/cn/unizk/utils/SecurePlaintextCryptoUtil.java new file mode 100644 index 0000000..048697a --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/SecurePlaintextCryptoUtil.java @@ -0,0 +1,36 @@ +package cn.unizk.utils; + +import cn.hutool.crypto.Mode; +import cn.hutool.crypto.Padding; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.symmetric.AES; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; + +/** + * @Author hao + * @Date 2025/8/27 10:21 + * @Version 1.0 + **/ +public class SecurePlaintextCryptoUtil { + + private static final String SECRET_KEY = "Unizk.jkzy@2025"; + private static final String IV = RandomStringUtils.randomNumeric(16); // 初始向量,16位 + + private static final AES aes = new AES(Mode.CBC, Padding.PKCS5Padding, + SECRET_KEY.getBytes(), IV.getBytes()); + + public static String encryptPlaintext(String plaintext) { + if (StringUtils.isBlank(plaintext)) return null; + return aes.encryptBase64(plaintext); + } + + public static String decryptPlaintext(String token) { + if (StringUtils.isBlank(token)) return null; + try { + return aes.decryptStr(token); + } catch (Exception e) { + throw new IllegalArgumentException("解密失败", e); + } + } +} diff --git a/common/src/main/java/cn/unizk/utils/SendSmsUtil.java b/common/src/main/java/cn/unizk/utils/SendSmsUtil.java new file mode 100644 index 0000000..0c827e2 --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/SendSmsUtil.java @@ -0,0 +1,65 @@ +package cn.unizk.utils; + +import com.alibaba.fastjson2.JSONObject; +import com.aliyun.auth.credentials.Credential; +import com.aliyun.auth.credentials.provider.StaticCredentialProvider; +import com.aliyun.sdk.service.dysmsapi20170525.AsyncClient; +import com.aliyun.sdk.service.dysmsapi20170525.models.SendSmsRequest; +import com.aliyun.sdk.service.dysmsapi20170525.models.SendSmsResponse; +import com.google.gson.Gson; +import darabonba.core.client.ClientOverrideConfiguration; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +/** + * @Author hao + * @Date 2025/8/19 16:00 + * @Version 1.0 + **/ +public class SendSmsUtil { + + private static final String SIGN_NAME = "吉客中医"; + private static final String TEMPLATE_CODE = "SMS_493390056"; + + public static String sendPhoneCode(String phoneNumber,String code) throws ExecutionException, InterruptedException { + StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder() + // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set. + .accessKeyId("LTAI5tBQGeqmhe6yhfqupaZD") + .accessKeySecret("YM2lsEtpjCLOF2kJGdsCBcwRHLX8aa") + //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token + .build()); + AsyncClient client = AsyncClient.builder() + .region("cn-shenzhen") + //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient) + .credentialsProvider(provider) + .overrideConfiguration( + ClientOverrideConfiguration.create() + // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi + .setEndpointOverride("dysmsapi.aliyuncs.com") + //.setConnectTimeout(Duration.ofSeconds(30)) + ) + .build(); + SendSmsRequest sendSmsRequest = SendSmsRequest.builder() + .phoneNumbers(phoneNumber) + .signName(SIGN_NAME) + .templateCode(TEMPLATE_CODE) + .templateParam(JSONObject.of("code",code).toString()) + .build(); + + CompletableFuture response = client.sendSms(sendSmsRequest); + SendSmsResponse resp = response.get(); + System.out.println(new Gson().toJson(resp)); + // Asynchronous processing of return values + /*response.thenAccept(resp -> { + System.out.println(new Gson().toJson(resp)); + }).exceptionally(throwable -> { // Handling exceptions + System.out.println(throwable.getMessage()); + return null; + });*/ + + // Finally, close the client + client.close(); + return new Gson().toJson(resp); + } +} diff --git a/common/src/main/java/cn/unizk/utils/ServletUtils.java b/common/src/main/java/cn/unizk/utils/ServletUtils.java new file mode 100644 index 0000000..f64d86f --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/ServletUtils.java @@ -0,0 +1,50 @@ +package cn.unizk.utils; + +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * @Author hao + * @Date 2025/8/21 14:50 + * @Version 1.0 + **/ +public class ServletUtils { + + + public static void renderString(HttpServletResponse response, String string) { + try { + response.setStatus(200); + response.setContentType("application/json"); + response.setCharacterEncoding("utf-8"); + response.getWriter().print(string); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void renderString(HttpServletResponse response, Integer code, String string) { + try { + response.setStatus(code); + response.setContentType("application/json"); + response.setCharacterEncoding("utf-8"); + response.getWriter().print(string); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static HttpServletRequest getRequest() { + return getRequestAttributes().getRequest(); + } + + + private static ServletRequestAttributes getRequestAttributes() { + RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); + return (ServletRequestAttributes) requestAttributes; + } +} diff --git a/common/src/main/java/cn/unizk/utils/SpringUtil.java b/common/src/main/java/cn/unizk/utils/SpringUtil.java new file mode 100644 index 0000000..2b2ffe5 --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/SpringUtil.java @@ -0,0 +1,25 @@ +package cn.unizk.utils; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +/** + * @Author hao + * @Date 2025/8/27 10:26 + * @Version 1.0 + **/ +public final class SpringUtil implements ApplicationContextAware { + + private static ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringUtil.applicationContext = applicationContext; + } + + @SuppressWarnings("unchecked") + public static T getBean(String name){ + return (T) applicationContext.getBean(name); + } +} diff --git a/common/src/main/java/cn/unizk/utils/WebIATWS.java b/common/src/main/java/cn/unizk/utils/WebIATWS.java new file mode 100644 index 0000000..3699530 --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/WebIATWS.java @@ -0,0 +1,398 @@ +package cn.unizk.utils; + +import cn.unizk.cache.LocalCache; +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import okhttp3.*; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.nio.charset.Charset; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * @Author hao + * @Date 2025/7/10 13:50 + * @Version 1.0 + **/ +public class WebIATWS extends WebSocketListener { + private static final String hostUrl = "https://iat-api.xfyun.cn/v2/iat"; //中英文,http url 不支持解析 ws/wss schema + // private static final String hostUrl = "https://iat-niche-api.xfyun.cn/v2/iat";//小语种 + private static final String appid = "3fa7b7a0"; //在控制台-我的应用获取 + private static final String apiSecret = "N2Q5Y2NiOTZmNThhODZjYTgxMjg1NjA4"; //在控制台-我的应用-语音听写(流式版)获取 + private static final String apiKey = "da390c58ef0f2ad8424c3dccc6d458c7"; //在控制台-我的应用-语音听写(流式版)获取 + private static final String file = "resource\\iat\\16k_10.pcm"; // 中文 + public static final int StatusFirstFrame = 0; + public static final int StatusContinueFrame = 1; + public static final int StatusLastFrame = 2; + public static final Gson json = new Gson(); + private MultipartFile multipartFile; + private String openid; + Decoder decoder = new Decoder(); + // 开始时间 + private static Date dateBegin = new Date(); + // 结束时间 + private static Date dateEnd = new Date(); + private static final SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss.SSS"); + + public WebIATWS() { + + } + + public WebIATWS(MultipartFile file, String openid) { + this.multipartFile = file; + this.openid = openid; + } + + @Override + public void onOpen(WebSocket webSocket, Response response) { + super.onOpen(webSocket, response); + new Thread(() -> { + //连接成功,开始发送数据 + int frameSize = 1280; //每一帧音频的大小,建议每 40ms 发送 122B + int intervel = 40; + int status = 0; // 音频的状态 + try (InputStream fs = multipartFile.getInputStream()) { + byte[] buffer = new byte[frameSize]; + // 发送音频 + end: + while (true) { + int len = fs.read(buffer); + if (len == -1) { + status = StatusLastFrame; //文件读完,改变status 为 2 + } + switch (status) { + case StatusFirstFrame: // 第一帧音频status = 0 + JsonObject frame = new JsonObject(); + JsonObject business = new JsonObject(); //第一帧必须发送 + JsonObject common = new JsonObject(); //第一帧必须发送 + JsonObject data = new JsonObject(); //每一帧都要发送 + // 填充common + common.addProperty("app_id", appid); + //填充business + business.addProperty("language", "zh_cn"); + //business.addProperty("language", "en_us");//英文 +// business.addProperty("language", "cantonese");//日语,在控制台可添加试用或购买 + //business.addProperty("language", "ko_kr");//韩语,在控制台可添加试用或购买 + //business.addProperty("language", "ru-ru");//俄语,在控制台可添加试用或购买 + business.addProperty("domain", "xfime-mianqie"); + business.addProperty("accent", "cantonese");//中文方言请在控制台添加试用,添加后即展示相应参数值 + //business.addProperty("nunum", 0); + //business.addProperty("ptt", 0);//标点符号 + //business.addProperty("rlang", "zh-hk"); // zh-cn :简体中文(默认值)zh-hk :繁体香港(若未授权不生效,在控制台可免费开通) + //business.addProperty("vinfo", 1); +// business.addProperty("dwa", "wpgs");//动态修正(若未授权不生效,在控制台可免费开通) + //business.addProperty("nbest", 5);// 句子多候选(若未授权不生效,在控制台可免费开通) + //business.addProperty("wbest", 3);// 词级多候选(若未授权不生效,在控制台可免费开通) + //填充data + data.addProperty("status", StatusFirstFrame); + data.addProperty("format", "audio/L16;rate=16000"); + data.addProperty("encoding", "lame"); + data.addProperty("audio", Base64.getEncoder().encodeToString(Arrays.copyOf(buffer, len))); + //填充frame + frame.add("common", common); + frame.add("business", business); + frame.add("data", data); + webSocket.send(frame.toString()); + status = StatusContinueFrame; // 发送完第一帧改变status 为 1 + break; + case StatusContinueFrame: //中间帧status = 1 + JsonObject frame1 = new JsonObject(); + JsonObject data1 = new JsonObject(); + data1.addProperty("status", StatusContinueFrame); + data1.addProperty("format", "audio/L16;rate=16000"); + data1.addProperty("encoding", "lame"); + data1.addProperty("audio", Base64.getEncoder().encodeToString(Arrays.copyOf(buffer, len))); + frame1.add("data", data1); + webSocket.send(frame1.toString()); + // System.out.println("send continue"); + break; + case StatusLastFrame: // 最后一帧音频status = 2 ,标志音频发送结束 + JsonObject frame2 = new JsonObject(); + JsonObject data2 = new JsonObject(); + data2.addProperty("status", StatusLastFrame); + data2.addProperty("audio", ""); + data2.addProperty("format", "audio/L16;rate=16000"); + data2.addProperty("encoding", "lame"); + frame2.add("data", data2); + webSocket.send(frame2.toString()); + System.out.println("sendlast"); + break end; + } + Thread.sleep(intervel); //模拟音频采样延时 + } + System.out.println("all data is send"); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }).start(); + } + + @Override + public void onMessage(WebSocket webSocket, String text) { + super.onMessage(webSocket, text); + //System.out.println(text); + ResponseData resp = json.fromJson(text, ResponseData.class); + if (resp != null) { + if (resp.getCode() != 0) { + System.out.println("code=>" + resp.getCode() + " error=>" + resp.getMessage() + " sid=" + resp.getSid()); + System.out.println("错误码查询链接:https://www.xfyun.cn/document/error-code"); + return; + } + if (resp.getData() != null) { + if (resp.getData().getResult() != null) { + Text te = resp.getData().getResult().getText(); + //System.out.println(te.toString()); + try { + decoder.decode(te); + System.out.println("中间识别结果 ==》" + decoder.toString()); + } catch (Exception e) { + e.printStackTrace(); + } + } + if (resp.getData().getStatus() == 2) { + // todo resp.data.status ==2 说明数据全部返回完毕,可以关闭连接,释放资源 + System.out.println("session end "); + dateEnd = new Date(); + System.out.println(sdf.format(dateBegin) + "开始"); + System.out.println(sdf.format(dateEnd) + "结束"); + System.out.println("耗时:" + (dateEnd.getTime() - dateBegin.getTime()) + "ms"); + System.out.println("最终识别结果 ==》" + decoder.toString()); + System.out.println("本次识别sid ==》" + resp.getSid()); + String msg = LocalCache.MESSAGE_QUEUE.get(openid); + if (StringUtils.isNotBlank(msg)) { + LocalCache.MESSAGE_QUEUE.remove(openid); + } + LocalCache.MESSAGE_QUEUE.put(openid, decoder.toString()); + decoder.discard(); + webSocket.close(1000, ""); + } else { + // todo 根据返回的数据处理 + } + } + } + } + + @Override + public void onFailure(WebSocket webSocket, Throwable t, Response response) { + super.onFailure(webSocket, t, response); + try { + if (null != response) { + int code = response.code(); + System.out.println("onFailure code:" + code); + System.out.println("onFailure body:" + response.body().string()); + if (101 != code) { + System.out.println("connection failed"); + System.exit(0); + } + } + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public static void main(String[] args) throws Exception { + // 构建鉴权url + String authUrl = getAuthUrl(hostUrl, apiKey, apiSecret); + OkHttpClient client = new OkHttpClient.Builder().build(); + //将url中的 schema http://和https://分别替换为ws:// 和 wss:// + String url = authUrl.toString().replace("http://", "ws://").replace("https://", "wss://"); + //System.out.println(url); + Request request = new Request.Builder().url(url).build(); + // System.out.println(client.newCall(request).execute()); + //System.out.println("url===>" + url); + WebSocket webSocket = client.newWebSocket(request, new WebIATWS()); + } + + public static String getAuthUrl(String hostUrl, String apiKey, String apiSecret) throws Exception { + URL url = new URL(hostUrl); + SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US); + format.setTimeZone(TimeZone.getTimeZone("GMT")); + String date = format.format(new Date()); + StringBuilder builder = new StringBuilder("host: ").append(url.getHost()).append("\n").// + append("date: ").append(date).append("\n").// + append("GET ").append(url.getPath()).append(" HTTP/1.1"); + //System.out.println(builder); + Charset charset = Charset.forName("UTF-8"); + Mac mac = Mac.getInstance("hmacsha256"); + SecretKeySpec spec = new SecretKeySpec(apiSecret.getBytes(charset), "hmacsha256"); + mac.init(spec); + byte[] hexDigits = mac.doFinal(builder.toString().getBytes(charset)); + String sha = Base64.getEncoder().encodeToString(hexDigits); + + //System.out.println(sha); + String authorization = String.format("api_key=\"%s\", algorithm=\"%s\", headers=\"%s\", signature=\"%s\"", apiKey, "hmac-sha256", "host date request-line", sha); + //System.out.println(authorization); + HttpUrl httpUrl = HttpUrl.parse("https://" + url.getHost() + url.getPath()).newBuilder().// + addQueryParameter("authorization", Base64.getEncoder().encodeToString(authorization.getBytes(charset))).// + addQueryParameter("date", date).// + addQueryParameter("host", url.getHost()).// + build(); + return httpUrl.toString(); + } + + public static class ResponseData { + private int code; + private String message; + private String sid; + private Data data; + + public int getCode() { + return code; + } + + public String getMessage() { + return this.message; + } + + public String getSid() { + return sid; + } + + public Data getData() { + return data; + } + } + + public static class Data { + private int status; + private Result result; + + public int getStatus() { + return status; + } + + public Result getResult() { + return result; + } + } + + public static class Result { + int bg; + int ed; + String pgs; + int[] rg; + int sn; + Ws[] ws; + boolean ls; + JsonObject vad; + + public Text getText() { + Text text = new Text(); + StringBuilder sb = new StringBuilder(); + for (Ws ws : this.ws) { + sb.append(ws.cw[0].w); + } + text.sn = this.sn; + text.text = sb.toString(); + text.sn = this.sn; + text.rg = this.rg; + text.pgs = this.pgs; + text.bg = this.bg; + text.ed = this.ed; + text.ls = this.ls; + text.vad = this.vad == null ? null : this.vad; + return text; + } + } + + public static class Ws { + Cw[] cw; + int bg; + int ed; + } + + public static class Cw { + int sc; + String w; + } + + public static class Text { + int sn; + int bg; + int ed; + String text; + String pgs; + int[] rg; + boolean deleted; + boolean ls; + JsonObject vad; + + @Override + public String toString() { + return "Text{" + + "bg=" + bg + + ", ed=" + ed + + ", ls=" + ls + + ", sn=" + sn + + ", text='" + text + '\'' + + ", pgs=" + pgs + + ", rg=" + Arrays.toString(rg) + + ", deleted=" + deleted + + ", vad=" + (vad == null ? "null" : vad.getAsJsonArray("ws").toString()) + + '}'; + } + } + + //解析返回数据,仅供参考 + public static class Decoder { + private Text[] texts; + private int defc = 10; + + public Decoder() { + this.texts = new Text[this.defc]; + } + + public synchronized void decode(Text text) { + if (text.sn >= this.defc) { + this.resize(); + } + if ("rpl".equals(text.pgs)) { + for (int i = text.rg[0]; i <= text.rg[1]; i++) { + this.texts[i].deleted = true; + } + } + this.texts[text.sn] = text; + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + for (Text t : this.texts) { + if (t != null && !t.deleted) { + sb.append(t.text); + } + } + return sb.toString(); + } + + public void resize() { + int oc = this.defc; + this.defc <<= 1; + Text[] old = this.texts; + this.texts = new Text[this.defc]; + for (int i = 0; i < oc; i++) { + this.texts[i] = old[i]; + } + } + + public void discard() { + for (int i = 0; i < this.texts.length; i++) { + this.texts[i] = null; + } + } + } +} diff --git a/common/src/main/java/cn/unizk/utils/XfHttpUtil.java b/common/src/main/java/cn/unizk/utils/XfHttpUtil.java new file mode 100644 index 0000000..25a987b --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/XfHttpUtil.java @@ -0,0 +1,286 @@ +package cn.unizk.utils; + +/** + * @Author hao + * @Date 2025/7/8 15:46 + * @Version 1.0 + **/ +import org.apache.http.Consts; +import org.apache.http.HttpEntity; +import org.apache.http.HttpStatus; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpRequestBase; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.InputStreamEntity; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.*; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLEncoder; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +/** + * HTTP请求工具类 + */ +public class XfHttpUtil { + private XfHttpUtil() { + } + + private static final Logger LOGGER = LoggerFactory.getLogger(HttpUtil.class); + + private static final String UTF8 = "UTF-8"; + /** + * 组件的httpClient + */ + private static CloseableHttpClient httpClient; + + static { + // 听见服务、流控组件连接池 + PoolingHttpClientConnectionManager pool = new PoolingHttpClientConnectionManager(); + pool.setMaxTotal(600);//客户端总并行链接最大数 + pool.setDefaultMaxPerRoute(200);//每个主机的最大并行链接数 + httpClient = HttpClients.createMinimal(pool); + } + + /** + * 请求的upload接口, 发送音频创建转写订单 + * + * @param url 请求地址 + * @param in 需要转写的音频流 + * @return 返回结果 + */ + public static String iflyrecUpload(String url, InputStream in) { + // 1、准备参数 + HttpPost httpPost = new HttpPost(url); + // 设置超时时间, 防止504的时候会耗时30分钟 + RequestConfig requestConfig = RequestConfig.custom() + //从连接池中获取连接的超时时间 + .setConnectionRequestTimeout(5000) + //与服务器连接超时时间, 指的是连接一个url的连接等待时间 + .setConnectTimeout(600000) + // 读取超时, 指的是连接上一个url,获取response的返回等待时间 + .setSocketTimeout(600000).build(); + httpPost.setConfig(requestConfig); + HttpEntity requestEntity = new InputStreamEntity(in, ContentType.APPLICATION_JSON); + //System.out.println("---"+requestEntity); + httpPost.setEntity(requestEntity); + + // 2、执行请求 + return doExecute(httpPost, null); + } + + /** + * 请求听见的获取结果接口 + * + * @param url 请求路径 + * @return 返回结果 + */ + public static String iflyrecGet(String url) { + // 1、准备参数 + HttpGet httpget = new HttpGet(url); + // 2、执行请求 + return doExecute(httpget, UTF8); + } + + /** + * 流控组件调用 + * + * @param url 请求路径 + * @return 返回结果 + */ + public static String flowCtrlGet(String url) { + // 1、准备参数 + HttpGet httpget = new HttpGet(url); + RequestConfig requestConfig = RequestConfig.custom() + //从连接池中获取连接的超时时间 + .setConnectionRequestTimeout(500) + //与服务器连接超时时间 + .setConnectTimeout(500) + // 读取超时 + .setSocketTimeout(500).build(); + httpget.setConfig(requestConfig); + // 2、执行请求 + return doExecute(httpget, null); + } + + /** + * 流传输的post + * + * @param url 请求路径 + * @param body 字节流数据 + * @return 返回结果 + */ + public static String post(String url, byte[] body) { + // 1、准备参数 + HttpPost httpPost = new HttpPost(url); + httpPost.setEntity(new ByteArrayEntity(body, ContentType.create("application/octet-stream", Consts.UTF_8))); + // 2、执行请求 + return doExecute(httpPost, UTF8); + } + + /** + * 带字符串参数的post请求 + * + * @param url 请求路径 + * @param param 字符串参数 + * @return 返回结果 + */ + public static String post(String url, String param) { + // 1、准备参数 + HttpPost httpPost = new HttpPost(url); + // 设置超时时间 + RequestConfig requestConfig = RequestConfig.custom() + //从连接池中获取连接的超时时间 + .setConnectionRequestTimeout(1000) + //与服务器连接超时时间, 指的是连接一个url的连接等待时间 + .setConnectTimeout(10000) + // 读取超时, 指的是连接上一个url,获取response的返回等待时间 + .setSocketTimeout(10000).build(); + httpPost.setConfig(requestConfig); + httpPost.setEntity(new StringEntity(param, ContentType.APPLICATION_JSON)); + // 2、执行请求 + return doExecute(httpPost, null); + } + + /** + * 发送HttpGet请求 + * + * @param url 请求路径 + * @return 返回结果 + */ + public static String sendGet(String url) { + // 1、准备参数 + HttpGet httpget = new HttpGet(url); + // 2、执行请求 + return doExecute(httpget, null); + } + + /** + * 执行网络请求 + * + * @param requestBase http请求对象 + * @param charset 字符集 + * @return 返回结果 + */ + private static String doExecute(HttpRequestBase requestBase, String charset) { + String result = null; + try (CloseableHttpResponse response = httpClient.execute(requestBase)) { + // 3、检查结果状态 + int statusCode = response.getStatusLine().getStatusCode(); + if (statusCode != HttpStatus.SC_OK) { + LOGGER.error("网络异常"); + return null; + } + // 4、获取结果 + result = charset == null + ? EntityUtils.toString(response.getEntity()) + : EntityUtils.toString(response.getEntity(), charset); + } catch (Exception e) { + LOGGER.error("网络异常", e); + } + return result; + } + + /** + * 发送post请求 + * + * @param url 请求路径 + * @param header 请求头 + * @param body 请求数据 + * @return 返回结果 + */ + public static String postWithHeader(String url, Map header, String body) { + StringBuilder result = new StringBuilder(); + BufferedReader in = null; + PrintWriter out = null; + InputStreamReader is = null; + try { + // 设置 url + URL realUrl = new URL(url); + URLConnection connection = realUrl.openConnection(); + // 设置 header + for (Entry entry : header.entrySet()) { + connection.setRequestProperty(entry.getKey(), entry.getValue()); + } + // 设置请求 body + connection.setDoOutput(true); + connection.setDoInput(true); + out = new PrintWriter(connection.getOutputStream()); + // 保存body + out.print(body); + // 发送body + out.flush(); + // 获取响应body + is = new InputStreamReader(connection.getInputStream()); + in = new BufferedReader(is); + String line; + while ((line = in.readLine()) != null) { + result.append(line); + } + } catch (Exception e) { + LOGGER.error("HttpUtil postWithHeader Exception!", e); + return null; + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException e) { + LOGGER.error("close IO resource Exception!", e); + } + } + if (in != null) { + try { + in.close(); + } catch (IOException e) { + LOGGER.error("close IO resource Exception!", e); + } + } + if (out != null) { + out.close(); + } + } + return result.toString(); + } + + /** + * 将集合转换为路径参数 + * + * @param param 集合参数 + * @return 路径参数 + * @author white + */ + public static String parseMapToPathParam(Map param) { + StringBuilder sb = new StringBuilder(); + try { + Set> entryset = param.entrySet(); + boolean isFirst = true; + for (Entry entry : entryset) { + if (!isFirst) { + sb.append("&"); + } else { + isFirst = false; + } + sb.append(URLEncoder.encode(entry.getKey(), UTF8)); + sb.append("="); + sb.append(URLEncoder.encode(entry.getValue().toString(), UTF8)); + } + } catch (UnsupportedEncodingException e) { + LOGGER.error("HttpUtil parseMapToPathParam Exception!", e); + } + + return sb.toString(); + } +} diff --git a/common/src/main/java/cn/unizk/utils/XfSpeechToTextUtil.java b/common/src/main/java/cn/unizk/utils/XfSpeechToTextUtil.java new file mode 100644 index 0000000..157a47e --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/XfSpeechToTextUtil.java @@ -0,0 +1,88 @@ +package cn.unizk.utils; + +import cn.unizk.sign.LfasrSignature; +import com.alibaba.fastjson2.JSONObject; +import com.google.gson.Gson; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.io.InputStream; +import java.security.SignatureException; +import java.util.HashMap; + +/** + * @Author hao + * @Date 2025/7/8 18:52 + * @Version 1.0 + **/ +@Slf4j +public class XfSpeechToTextUtil { + + private static final String HOST = "https://raasr.xfyun.cn"; + private static final Gson gson = new Gson(); + + public static String xfSpeechToText(MultipartFile audio,String appid,String keySecret) throws SignatureException, IOException { + HashMap map = new HashMap<>(16); + String fileName = audio.getOriginalFilename(); + long fileSize = audio.getSize(); + map.put("appId", appid); + map.put("fileSize", fileSize); + map.put("fileName", fileName); + map.put("duration", "200"); + map.put("eng_smoothproc",false); + LfasrSignature lfasrSignature = new LfasrSignature(appid, keySecret); + map.put("signa", lfasrSignature.getSigna()); + map.put("ts", lfasrSignature.getTs()); + String paramString = XfHttpUtil.parseMapToPathParam(map); + log.info("upload paramString:{}",paramString); + String url = HOST + "/v2/api/upload" + "?" + paramString; + log.info("upload_url={}",url); + String response = XfHttpUtil.iflyrecUpload(url, audio.getInputStream()); + log.info("upload response:{}",response); + return response; + } + + public static String getResult(String orderId,String appid,String keySecret) throws SignatureException, InterruptedException, IOException { + HashMap map = new HashMap<>(16); + map.put("orderId", orderId); + LfasrSignature lfasrSignature = new LfasrSignature(appid, keySecret); + map.put("signa", lfasrSignature.getSigna()); + map.put("ts", lfasrSignature.getTs()); + map.put("appId", appid); + map.put("resultType", "transfer"); + String paramString = XfHttpUtil.parseMapToPathParam(map); + String url = HOST + "/v2/api/getResult" + "?" + paramString; + log.info("\nget_result_url:{}",url); + while (true) { + String response = XfHttpUtil.iflyrecGet(url); + JsonParse jsonParse = gson.fromJson(response, JsonParse.class); + if (jsonParse.content.orderInfo.status == 4 || jsonParse.content.orderInfo.status == -1) { + log.info("订单完成:{}",response); + return response; + } else { + System.out.println("进行中...,状态为:" + jsonParse.content.orderInfo.status); + //建议使用回调的方式查询结果,查询接口有请求频率限制 + Thread.sleep(7000); + } + } + } + + class JsonParse { + Content content; + } + + class Content { + OrderInfo orderInfo; +// OrderResult orderResult; + } + + class OrderInfo { + Integer status; + } + + class OrderResult { + String text; + } + +} diff --git a/common/src/main/java/cn/unizk/utils/XorUtil.java b/common/src/main/java/cn/unizk/utils/XorUtil.java new file mode 100644 index 0000000..fefbc6e --- /dev/null +++ b/common/src/main/java/cn/unizk/utils/XorUtil.java @@ -0,0 +1,41 @@ +package cn.unizk.utils; + +/** + * @Author hao + * @Date 2025/9/12 11:53 + * @Version 1.0 + **/ +public final class XorUtil { + private XorUtil() {} + + public static int xorAscii(String s) { + if (s == null) return 0; + int xor = 0; + for (char c : s.toCharArray()) { + xor ^= (c & 0xFF); + } + return xor; + } + + public static String xorAsciiHex(String s) { + return String.format("%02X", xorAscii(s)); + } + + public static String calculateCRC(byte[] data) { + byte crc = 0; + for (byte b : data) { + crc ^= b; + } + return String.format("%02X", crc & 0xFF); + } + + public static void main(String[] args) { +// System.out.println(xorAsciiHex("Hello")); // 0A + byte[] b = new byte[2]; + b[0] = 1; + b[1] = 2; + String s = calculateCRC(b); + System.out.println(s); + + } +} diff --git a/common/src/main/java/cn/unizk/validatedGroup/DefaultGroup.java b/common/src/main/java/cn/unizk/validatedGroup/DefaultGroup.java new file mode 100644 index 0000000..1b95c8a --- /dev/null +++ b/common/src/main/java/cn/unizk/validatedGroup/DefaultGroup.java @@ -0,0 +1,4 @@ +package cn.unizk.validatedGroup; + +public interface DefaultGroup { +} diff --git a/common/src/main/java/cn/unizk/validatedGroup/UpdateGroup.java b/common/src/main/java/cn/unizk/validatedGroup/UpdateGroup.java new file mode 100644 index 0000000..5d4d7f6 --- /dev/null +++ b/common/src/main/java/cn/unizk/validatedGroup/UpdateGroup.java @@ -0,0 +1,4 @@ +package cn.unizk.validatedGroup; + +public interface UpdateGroup extends DefaultGroup { +} diff --git a/common/src/main/resources/city.json b/common/src/main/resources/city.json new file mode 100644 index 0000000..674b99f --- /dev/null +++ b/common/src/main/resources/city.json @@ -0,0 +1 @@ +[{"c":11,"n":"北京市","ch":[{"c":"1101","n":"北京市","ch":[{"c":"110101","n":"东城区"},{"c":"110102","n":"西城区"},{"c":"110105","n":"朝阳区"},{"c":"110106","n":"丰台区"},{"c":"110107","n":"石景山区"},{"c":"110108","n":"海淀区"},{"c":"110109","n":"门头沟区"},{"c":"110111","n":"房山区"},{"c":"110112","n":"通州区"},{"c":"110113","n":"顺义区"},{"c":"110114","n":"昌平区"},{"c":"110115","n":"大兴区"},{"c":"110116","n":"怀柔区"},{"c":"110117","n":"平谷区"},{"c":"110118","n":"密云区"},{"c":"110119","n":"延庆区"}]}]},{"c":12,"n":"天津市","ch":[{"c":"1201","n":"天津市","ch":[{"c":"120101","n":"和平区"},{"c":"120102","n":"河东区"},{"c":"120103","n":"河西区"},{"c":"120104","n":"南开区"},{"c":"120105","n":"河北区"},{"c":"120106","n":"红桥区"},{"c":"120110","n":"东丽区"},{"c":"120111","n":"西青区"},{"c":"120112","n":"津南区"},{"c":"120113","n":"北辰区"},{"c":"120114","n":"武清区"},{"c":"120115","n":"宝坻区"},{"c":"120116","n":"滨海新区"},{"c":"120117","n":"宁河区"},{"c":"120118","n":"静海区"},{"c":"120119","n":"蓟州区"}]}]},{"c":13,"n":"河北省","ch":[{"c":"1301","n":"石家庄市","ch":[{"c":"130102","n":"长安区"},{"c":"130104","n":"桥西区"},{"c":"130105","n":"新华区"},{"c":"130107","n":"井陉矿区"},{"c":"130108","n":"裕华区"},{"c":"130109","n":"藁城区"},{"c":"130110","n":"鹿泉区"},{"c":"130111","n":"栾城区"},{"c":"130121","n":"井陉县"},{"c":"130123","n":"正定县"},{"c":"130125","n":"行唐县"},{"c":"130126","n":"灵寿县"},{"c":"130127","n":"高邑县"},{"c":"130128","n":"深泽县"},{"c":"130129","n":"赞皇县"},{"c":"130130","n":"无极县"},{"c":"130131","n":"平山县"},{"c":"130132","n":"元氏县"},{"c":"130133","n":"赵县"},{"c":"130181","n":"辛集市"},{"c":"130183","n":"晋州市"},{"c":"130184","n":"新乐市"}]},{"c":"1302","n":"唐山市","ch":[{"c":"130202","n":"路南区"},{"c":"130203","n":"路北区"},{"c":"130204","n":"古冶区"},{"c":"130205","n":"开平区"},{"c":"130207","n":"丰南区"},{"c":"130208","n":"丰润区"},{"c":"130209","n":"曹妃甸区"},{"c":"130224","n":"滦南县"},{"c":"130225","n":"乐亭县"},{"c":"130227","n":"迁西县"},{"c":"130229","n":"玉田县"},{"c":"130281","n":"遵化市"},{"c":"130283","n":"迁安市"},{"c":"130284","n":"滦州市"}]},{"c":"1303","n":"秦皇岛市","ch":[{"c":"130302","n":"海港区"},{"c":"130303","n":"山海关区"},{"c":"130304","n":"北戴河区"},{"c":"130306","n":"抚宁区"},{"c":"130321","n":"青龙满族自治县"},{"c":"130322","n":"昌黎县"},{"c":"130324","n":"卢龙县"}]},{"c":"1304","n":"邯郸市","ch":[{"c":"130402","n":"邯山区"},{"c":"130403","n":"丛台区"},{"c":"130404","n":"复兴区"},{"c":"130406","n":"峰峰矿区"},{"c":"130407","n":"肥乡区"},{"c":"130408","n":"永年区"},{"c":"130423","n":"临漳县"},{"c":"130424","n":"成安县"},{"c":"130425","n":"大名县"},{"c":"130426","n":"涉县"},{"c":"130427","n":"磁县"},{"c":"130430","n":"邱县"},{"c":"130431","n":"鸡泽县"},{"c":"130432","n":"广平县"},{"c":"130433","n":"馆陶县"},{"c":"130434","n":"魏县"},{"c":"130435","n":"曲周县"},{"c":"130481","n":"武安市"}]},{"c":"1305","n":"邢台市","ch":[{"c":"130502","n":"襄都区"},{"c":"130503","n":"信都区"},{"c":"130505","n":"任泽区"},{"c":"130506","n":"南和区"},{"c":"130522","n":"临城县"},{"c":"130523","n":"内丘县"},{"c":"130524","n":"柏乡县"},{"c":"130525","n":"隆尧县"},{"c":"130528","n":"宁晋县"},{"c":"130529","n":"巨鹿县"},{"c":"130530","n":"新河县"},{"c":"130531","n":"广宗县"},{"c":"130532","n":"平乡县"},{"c":"130533","n":"威县"},{"c":"130534","n":"清河县"},{"c":"130535","n":"临西县"},{"c":"130581","n":"南宫市"},{"c":"130582","n":"沙河市"}]},{"c":"1306","n":"保定市","ch":[{"c":"130602","n":"竞秀区"},{"c":"130606","n":"莲池区"},{"c":"130607","n":"满城区"},{"c":"130608","n":"清苑区"},{"c":"130609","n":"徐水区"},{"c":"130623","n":"涞水县"},{"c":"130624","n":"阜平县"},{"c":"130626","n":"定兴县"},{"c":"130627","n":"唐县"},{"c":"130628","n":"高阳县"},{"c":"130629","n":"容城县"},{"c":"130630","n":"涞源县"},{"c":"130631","n":"望都县"},{"c":"130632","n":"安新县"},{"c":"130633","n":"易县"},{"c":"130634","n":"曲阳县"},{"c":"130635","n":"蠡县"},{"c":"130636","n":"顺平县"},{"c":"130637","n":"博野县"},{"c":"130638","n":"雄县"},{"c":"130681","n":"涿州市"},{"c":"130682","n":"定州市"},{"c":"130683","n":"安国市"},{"c":"130684","n":"高碑店市"}]},{"c":"1307","n":"张家口市","ch":[{"c":"130702","n":"桥东区"},{"c":"130703","n":"桥西区"},{"c":"130705","n":"宣化区"},{"c":"130706","n":"下花园区"},{"c":"130708","n":"万全区"},{"c":"130709","n":"崇礼区"},{"c":"130722","n":"张北县"},{"c":"130723","n":"康保县"},{"c":"130724","n":"沽源县"},{"c":"130725","n":"尚义县"},{"c":"130726","n":"蔚县"},{"c":"130727","n":"阳原县"},{"c":"130728","n":"怀安县"},{"c":"130730","n":"怀来县"},{"c":"130731","n":"涿鹿县"},{"c":"130732","n":"赤城县"}]},{"c":"1308","n":"承德市","ch":[{"c":"130802","n":"双桥区"},{"c":"130803","n":"双滦区"},{"c":"130804","n":"鹰手营子矿区"},{"c":"130821","n":"承德县"},{"c":"130822","n":"兴隆县"},{"c":"130824","n":"滦平县"},{"c":"130825","n":"隆化县"},{"c":"130826","n":"丰宁满族自治县"},{"c":"130827","n":"宽城满族自治县"},{"c":"130828","n":"围场满族蒙古族自治县"},{"c":"130881","n":"平泉市"}]},{"c":"1309","n":"沧州市","ch":[{"c":"130902","n":"新华区"},{"c":"130903","n":"运河区"},{"c":"130921","n":"沧县"},{"c":"130922","n":"青县"},{"c":"130923","n":"东光县"},{"c":"130924","n":"海兴县"},{"c":"130925","n":"盐山县"},{"c":"130926","n":"肃宁县"},{"c":"130927","n":"南皮县"},{"c":"130928","n":"吴桥县"},{"c":"130929","n":"献县"},{"c":"130930","n":"孟村回族自治县"},{"c":"130981","n":"泊头市"},{"c":"130982","n":"任丘市"},{"c":"130983","n":"黄骅市"},{"c":"130984","n":"河间市"}]},{"c":"1310","n":"廊坊市","ch":[{"c":"131002","n":"安次区"},{"c":"131003","n":"广阳区"},{"c":"131022","n":"固安县"},{"c":"131023","n":"永清县"},{"c":"131024","n":"香河县"},{"c":"131025","n":"大城县"},{"c":"131026","n":"文安县"},{"c":"131028","n":"大厂回族自治县"},{"c":"131081","n":"霸州市"},{"c":"131082","n":"三河市"}]},{"c":"1311","n":"衡水市","ch":[{"c":"131102","n":"桃城区"},{"c":"131103","n":"冀州区"},{"c":"131121","n":"枣强县"},{"c":"131122","n":"武邑县"},{"c":"131123","n":"武强县"},{"c":"131124","n":"饶阳县"},{"c":"131125","n":"安平县"},{"c":"131126","n":"故城县"},{"c":"131127","n":"景县"},{"c":"131128","n":"阜城县"},{"c":"131182","n":"深州市"}]}]},{"c":14,"n":"山西省","ch":[{"c":"1401","n":"太原市","ch":[{"c":"140105","n":"小店区"},{"c":"140106","n":"迎泽区"},{"c":"140107","n":"杏花岭区"},{"c":"140108","n":"尖草坪区"},{"c":"140109","n":"万柏林区"},{"c":"140110","n":"晋源区"},{"c":"140121","n":"清徐县"},{"c":"140122","n":"阳曲县"},{"c":"140123","n":"娄烦县"},{"c":"140181","n":"古交市"}]},{"c":"1402","n":"大同市","ch":[{"c":"140212","n":"新荣区"},{"c":"140213","n":"平城区"},{"c":"140214","n":"云冈区"},{"c":"140215","n":"云州区"},{"c":"140221","n":"阳高县"},{"c":"140222","n":"天镇县"},{"c":"140223","n":"广灵县"},{"c":"140224","n":"灵丘县"},{"c":"140225","n":"浑源县"},{"c":"140226","n":"左云县"}]},{"c":"1403","n":"阳泉市","ch":[{"c":"140302","n":"城区"},{"c":"140303","n":"矿区"},{"c":"140311","n":"郊区"},{"c":"140321","n":"平定县"},{"c":"140322","n":"盂县"}]},{"c":"1404","n":"长治市","ch":[{"c":"140403","n":"潞州区"},{"c":"140404","n":"上党区"},{"c":"140405","n":"屯留区"},{"c":"140406","n":"潞城区"},{"c":"140423","n":"襄垣县"},{"c":"140425","n":"平顺县"},{"c":"140426","n":"黎城县"},{"c":"140427","n":"壶关县"},{"c":"140428","n":"长子县"},{"c":"140429","n":"武乡县"},{"c":"140430","n":"沁县"},{"c":"140431","n":"沁源县"}]},{"c":"1405","n":"晋城市","ch":[{"c":"140502","n":"城区"},{"c":"140521","n":"沁水县"},{"c":"140522","n":"阳城县"},{"c":"140524","n":"陵川县"},{"c":"140525","n":"泽州县"},{"c":"140581","n":"高平市"}]},{"c":"1406","n":"朔州市","ch":[{"c":"140602","n":"朔城区"},{"c":"140603","n":"平鲁区"},{"c":"140621","n":"山阴县"},{"c":"140622","n":"应县"},{"c":"140623","n":"右玉县"},{"c":"140681","n":"怀仁市"}]},{"c":"1407","n":"晋中市","ch":[{"c":"140702","n":"榆次区"},{"c":"140703","n":"太谷区"},{"c":"140721","n":"榆社县"},{"c":"140722","n":"左权县"},{"c":"140723","n":"和顺县"},{"c":"140724","n":"昔阳县"},{"c":"140725","n":"寿阳县"},{"c":"140727","n":"祁县"},{"c":"140728","n":"平遥县"},{"c":"140729","n":"灵石县"},{"c":"140781","n":"介休市"}]},{"c":"1408","n":"运城市","ch":[{"c":"140802","n":"盐湖区"},{"c":"140821","n":"临猗县"},{"c":"140822","n":"万荣县"},{"c":"140823","n":"闻喜县"},{"c":"140824","n":"稷山县"},{"c":"140825","n":"新绛县"},{"c":"140826","n":"绛县"},{"c":"140827","n":"垣曲县"},{"c":"140828","n":"夏县"},{"c":"140829","n":"平陆县"},{"c":"140830","n":"芮城县"},{"c":"140881","n":"永济市"},{"c":"140882","n":"河津市"}]},{"c":"1409","n":"忻州市","ch":[{"c":"140902","n":"忻府区"},{"c":"140921","n":"定襄县"},{"c":"140922","n":"五台县"},{"c":"140923","n":"代县"},{"c":"140924","n":"繁峙县"},{"c":"140925","n":"宁武县"},{"c":"140926","n":"静乐县"},{"c":"140927","n":"神池县"},{"c":"140928","n":"五寨县"},{"c":"140929","n":"岢岚县"},{"c":"140930","n":"河曲县"},{"c":"140931","n":"保德县"},{"c":"140932","n":"偏关县"},{"c":"140981","n":"原平市"}]},{"c":"1410","n":"临汾市","ch":[{"c":"141002","n":"尧都区"},{"c":"141021","n":"曲沃县"},{"c":"141022","n":"翼城县"},{"c":"141023","n":"襄汾县"},{"c":"141024","n":"洪洞县"},{"c":"141025","n":"古县"},{"c":"141026","n":"安泽县"},{"c":"141027","n":"浮山县"},{"c":"141028","n":"吉县"},{"c":"141029","n":"乡宁县"},{"c":"141030","n":"大宁县"},{"c":"141031","n":"隰县"},{"c":"141032","n":"永和县"},{"c":"141033","n":"蒲县"},{"c":"141034","n":"汾西县"},{"c":"141081","n":"侯马市"},{"c":"141082","n":"霍州市"}]},{"c":"1411","n":"吕梁市","ch":[{"c":"141102","n":"离石区"},{"c":"141121","n":"文水县"},{"c":"141122","n":"交城县"},{"c":"141123","n":"兴县"},{"c":"141124","n":"临县"},{"c":"141125","n":"柳林县"},{"c":"141126","n":"石楼县"},{"c":"141127","n":"岚县"},{"c":"141128","n":"方山县"},{"c":"141129","n":"中阳县"},{"c":"141130","n":"交口县"},{"c":"141181","n":"孝义市"},{"c":"141182","n":"汾阳市"}]}]},{"c":15,"n":"内蒙古自治区","ch":[{"c":"1501","n":"呼和浩特市","ch":[{"c":"150102","n":"新城区"},{"c":"150103","n":"回民区"},{"c":"150104","n":"玉泉区"},{"c":"150105","n":"赛罕区"},{"c":"150121","n":"土默特左旗"},{"c":"150122","n":"托克托县"},{"c":"150123","n":"和林格尔县"},{"c":"150124","n":"清水河县"},{"c":"150125","n":"武川县"}]},{"c":"1502","n":"包头市","ch":[{"c":"150202","n":"东河区"},{"c":"150203","n":"昆都仑区"},{"c":"150204","n":"青山区"},{"c":"150205","n":"石拐区"},{"c":"150206","n":"白云鄂博矿区"},{"c":"150207","n":"九原区"},{"c":"150221","n":"土默特右旗"},{"c":"150222","n":"固阳县"},{"c":"150223","n":"达尔罕茂明安联合旗"}]},{"c":"1503","n":"乌海市","ch":[{"c":"150302","n":"海勃湾区"},{"c":"150303","n":"海南区"},{"c":"150304","n":"乌达区"}]},{"c":"1504","n":"赤峰市","ch":[{"c":"150402","n":"红山区"},{"c":"150403","n":"元宝山区"},{"c":"150404","n":"松山区"},{"c":"150421","n":"阿鲁科尔沁旗"},{"c":"150422","n":"巴林左旗"},{"c":"150423","n":"巴林右旗"},{"c":"150424","n":"林西县"},{"c":"150425","n":"克什克腾旗"},{"c":"150426","n":"翁牛特旗"},{"c":"150428","n":"喀喇沁旗"},{"c":"150429","n":"宁城县"},{"c":"150430","n":"敖汉旗"}]},{"c":"1505","n":"通辽市","ch":[{"c":"150502","n":"科尔沁区"},{"c":"150521","n":"科尔沁左翼中旗"},{"c":"150522","n":"科尔沁左翼后旗"},{"c":"150523","n":"开鲁县"},{"c":"150524","n":"库伦旗"},{"c":"150525","n":"奈曼旗"},{"c":"150526","n":"扎鲁特旗"},{"c":"150581","n":"霍林郭勒市"}]},{"c":"1506","n":"鄂尔多斯市","ch":[{"c":"150602","n":"东胜区"},{"c":"150603","n":"康巴什区"},{"c":"150621","n":"达拉特旗"},{"c":"150622","n":"准格尔旗"},{"c":"150623","n":"鄂托克前旗"},{"c":"150624","n":"鄂托克旗"},{"c":"150625","n":"杭锦旗"},{"c":"150626","n":"乌审旗"},{"c":"150627","n":"伊金霍洛旗"}]},{"c":"1507","n":"呼伦贝尔市","ch":[{"c":"150702","n":"海拉尔区"},{"c":"150703","n":"扎赉诺尔区"},{"c":"150721","n":"阿荣旗"},{"c":"150722","n":"莫力达瓦达斡尔族自治旗"},{"c":"150723","n":"鄂伦春自治旗"},{"c":"150724","n":"鄂温克族自治旗"},{"c":"150725","n":"陈巴尔虎旗"},{"c":"150726","n":"新巴尔虎左旗"},{"c":"150727","n":"新巴尔虎右旗"},{"c":"150781","n":"满洲里市"},{"c":"150782","n":"牙克石市"},{"c":"150783","n":"扎兰屯市"},{"c":"150784","n":"额尔古纳市"},{"c":"150785","n":"根河市"}]},{"c":"1508","n":"巴彦淖尔市","ch":[{"c":"150802","n":"临河区"},{"c":"150821","n":"五原县"},{"c":"150822","n":"磴口县"},{"c":"150823","n":"乌拉特前旗"},{"c":"150824","n":"乌拉特中旗"},{"c":"150825","n":"乌拉特后旗"},{"c":"150826","n":"杭锦后旗"}]},{"c":"1509","n":"乌兰察布市","ch":[{"c":"150902","n":"集宁区"},{"c":"150921","n":"卓资县"},{"c":"150922","n":"化德县"},{"c":"150923","n":"商都县"},{"c":"150924","n":"兴和县"},{"c":"150925","n":"凉城县"},{"c":"150926","n":"察哈尔右翼前旗"},{"c":"150927","n":"察哈尔右翼中旗"},{"c":"150928","n":"察哈尔右翼后旗"},{"c":"150929","n":"四子王旗"},{"c":"150981","n":"丰镇市"}]},{"c":"1522","n":"兴安盟","ch":[{"c":"152201","n":"乌兰浩特市"},{"c":"152202","n":"阿尔山市"},{"c":"152221","n":"科尔沁右翼前旗"},{"c":"152222","n":"科尔沁右翼中旗"},{"c":"152223","n":"扎赉特旗"},{"c":"152224","n":"突泉县"}]},{"c":"1525","n":"锡林郭勒盟","ch":[{"c":"152501","n":"二连浩特市"},{"c":"152502","n":"锡林浩特市"},{"c":"152522","n":"阿巴嘎旗"},{"c":"152523","n":"苏尼特左旗"},{"c":"152524","n":"苏尼特右旗"},{"c":"152525","n":"东乌珠穆沁旗"},{"c":"152526","n":"西乌珠穆沁旗"},{"c":"152527","n":"太仆寺旗"},{"c":"152528","n":"镶黄旗"},{"c":"152529","n":"正镶白旗"},{"c":"152530","n":"正蓝旗"},{"c":"152531","n":"多伦县"}]},{"c":"1529","n":"阿拉善盟","ch":[{"c":"152921","n":"阿拉善左旗"},{"c":"152922","n":"阿拉善右旗"},{"c":"152923","n":"额济纳旗"}]}]},{"c":21,"n":"辽宁省","ch":[{"c":"2101","n":"沈阳市","ch":[{"c":"210102","n":"和平区"},{"c":"210103","n":"沈河区"},{"c":"210104","n":"大东区"},{"c":"210105","n":"皇姑区"},{"c":"210106","n":"铁西区"},{"c":"210111","n":"苏家屯区"},{"c":"210112","n":"浑南区"},{"c":"210113","n":"沈北新区"},{"c":"210114","n":"于洪区"},{"c":"210115","n":"辽中区"},{"c":"210123","n":"康平县"},{"c":"210124","n":"法库县"},{"c":"210181","n":"新民市"}]},{"c":"2102","n":"大连市","ch":[{"c":"210202","n":"中山区"},{"c":"210203","n":"西岗区"},{"c":"210204","n":"沙河口区"},{"c":"210211","n":"甘井子区"},{"c":"210212","n":"旅顺口区"},{"c":"210213","n":"金州区"},{"c":"210214","n":"普兰店区"},{"c":"210224","n":"长海县"},{"c":"210281","n":"瓦房店市"},{"c":"210283","n":"庄河市"}]},{"c":"2103","n":"鞍山市","ch":[{"c":"210302","n":"铁东区"},{"c":"210303","n":"铁西区"},{"c":"210304","n":"立山区"},{"c":"210311","n":"千山区"},{"c":"210321","n":"台安县"},{"c":"210323","n":"岫岩满族自治县"},{"c":"210381","n":"海城市"}]},{"c":"2104","n":"抚顺市","ch":[{"c":"210402","n":"新抚区"},{"c":"210403","n":"东洲区"},{"c":"210404","n":"望花区"},{"c":"210411","n":"顺城区"},{"c":"210421","n":"抚顺县"},{"c":"210422","n":"新宾满族自治县"},{"c":"210423","n":"清原满族自治县"}]},{"c":"2105","n":"本溪市","ch":[{"c":"210502","n":"平山区"},{"c":"210503","n":"溪湖区"},{"c":"210504","n":"明山区"},{"c":"210505","n":"南芬区"},{"c":"210521","n":"本溪满族自治县"},{"c":"210522","n":"桓仁满族自治县"}]},{"c":"2106","n":"丹东市","ch":[{"c":"210602","n":"元宝区"},{"c":"210603","n":"振兴区"},{"c":"210604","n":"振安区"},{"c":"210624","n":"宽甸满族自治县"},{"c":"210681","n":"东港市"},{"c":"210682","n":"凤城市"}]},{"c":"2107","n":"锦州市","ch":[{"c":"210702","n":"古塔区"},{"c":"210703","n":"凌河区"},{"c":"210711","n":"太和区"},{"c":"210726","n":"黑山县"},{"c":"210727","n":"义县"},{"c":"210781","n":"凌海市"},{"c":"210782","n":"北镇市"}]},{"c":"2108","n":"营口市","ch":[{"c":"210802","n":"站前区"},{"c":"210803","n":"西市区"},{"c":"210804","n":"鲅鱼圈区"},{"c":"210811","n":"老边区"},{"c":"210881","n":"盖州市"},{"c":"210882","n":"大石桥市"}]},{"c":"2109","n":"阜新市","ch":[{"c":"210902","n":"海州区"},{"c":"210903","n":"新邱区"},{"c":"210904","n":"太平区"},{"c":"210905","n":"清河门区"},{"c":"210911","n":"细河区"},{"c":"210921","n":"阜新蒙古族自治县"},{"c":"210922","n":"彰武县"}]},{"c":"2110","n":"辽阳市","ch":[{"c":"211002","n":"白塔区"},{"c":"211003","n":"文圣区"},{"c":"211004","n":"宏伟区"},{"c":"211005","n":"弓长岭区"},{"c":"211011","n":"太子河区"},{"c":"211021","n":"辽阳县"},{"c":"211081","n":"灯塔市"}]},{"c":"2111","n":"盘锦市","ch":[{"c":"211102","n":"双台子区"},{"c":"211103","n":"兴隆台区"},{"c":"211104","n":"大洼区"},{"c":"211122","n":"盘山县"}]},{"c":"2112","n":"铁岭市","ch":[{"c":"211202","n":"银州区"},{"c":"211204","n":"清河区"},{"c":"211221","n":"铁岭县"},{"c":"211223","n":"西丰县"},{"c":"211224","n":"昌图县"},{"c":"211281","n":"调兵山市"},{"c":"211282","n":"开原市"}]},{"c":"2113","n":"朝阳市","ch":[{"c":"211302","n":"双塔区"},{"c":"211303","n":"龙城区"},{"c":"211321","n":"朝阳县"},{"c":"211322","n":"建平县"},{"c":"211324","n":"喀喇沁左翼蒙古族自治县"},{"c":"211381","n":"北票市"},{"c":"211382","n":"凌源市"}]},{"c":"2114","n":"葫芦岛市","ch":[{"c":"211402","n":"连山区"},{"c":"211403","n":"龙港区"},{"c":"211404","n":"南票区"},{"c":"211421","n":"绥中县"},{"c":"211422","n":"建昌县"},{"c":"211481","n":"兴城市"}]}]},{"c":22,"n":"吉林省","ch":[{"c":"2201","n":"长春市","ch":[{"c":"220102","n":"南关区"},{"c":"220103","n":"宽城区"},{"c":"220104","n":"朝阳区"},{"c":"220105","n":"二道区"},{"c":"220106","n":"绿园区"},{"c":"220112","n":"双阳区"},{"c":"220113","n":"九台区"},{"c":"220122","n":"农安县"},{"c":"220182","n":"榆树市"},{"c":"220183","n":"德惠市"},{"c":"220184","n":"公主岭市"}]},{"c":"2202","n":"吉林市","ch":[{"c":"220202","n":"昌邑区"},{"c":"220203","n":"龙潭区"},{"c":"220204","n":"船营区"},{"c":"220211","n":"丰满区"},{"c":"220221","n":"永吉县"},{"c":"220281","n":"蛟河市"},{"c":"220282","n":"桦甸市"},{"c":"220283","n":"舒兰市"},{"c":"220284","n":"磐石市"}]},{"c":"2203","n":"四平市","ch":[{"c":"220302","n":"铁西区"},{"c":"220303","n":"铁东区"},{"c":"220322","n":"梨树县"},{"c":"220323","n":"伊通满族自治县"},{"c":"220382","n":"双辽市"}]},{"c":"2204","n":"辽源市","ch":[{"c":"220402","n":"龙山区"},{"c":"220403","n":"西安区"},{"c":"220421","n":"东丰县"},{"c":"220422","n":"东辽县"}]},{"c":"2205","n":"通化市","ch":[{"c":"220502","n":"东昌区"},{"c":"220503","n":"二道江区"},{"c":"220521","n":"通化县"},{"c":"220523","n":"辉南县"},{"c":"220524","n":"柳河县"},{"c":"220581","n":"梅河口市"},{"c":"220582","n":"集安市"}]},{"c":"2206","n":"白山市","ch":[{"c":"220602","n":"浑江区"},{"c":"220605","n":"江源区"},{"c":"220621","n":"抚松县"},{"c":"220622","n":"靖宇县"},{"c":"220623","n":"长白朝鲜族自治县"},{"c":"220681","n":"临江市"}]},{"c":"2207","n":"松原市","ch":[{"c":"220702","n":"宁江区"},{"c":"220721","n":"前郭尔罗斯蒙古族自治县"},{"c":"220722","n":"长岭县"},{"c":"220723","n":"乾安县"},{"c":"220781","n":"扶余市"}]},{"c":"2208","n":"白城市","ch":[{"c":"220802","n":"洮北区"},{"c":"220821","n":"镇赉县"},{"c":"220822","n":"通榆县"},{"c":"220881","n":"洮南市"},{"c":"220882","n":"大安市"}]},{"c":"2224","n":"延边朝鲜族自治州","ch":[{"c":"222401","n":"延吉市"},{"c":"222402","n":"图们市"},{"c":"222403","n":"敦化市"},{"c":"222404","n":"珲春市"},{"c":"222405","n":"龙井市"},{"c":"222406","n":"和龙市"},{"c":"222424","n":"汪清县"},{"c":"222426","n":"安图县"}]}]},{"c":23,"n":"黑龙江省","ch":[{"c":"2301","n":"哈尔滨市","ch":[{"c":"230102","n":"道里区"},{"c":"230103","n":"南岗区"},{"c":"230104","n":"道外区"},{"c":"230108","n":"平房区"},{"c":"230109","n":"松北区"},{"c":"230110","n":"香坊区"},{"c":"230111","n":"呼兰区"},{"c":"230112","n":"阿城区"},{"c":"230113","n":"双城区"},{"c":"230123","n":"依兰县"},{"c":"230124","n":"方正县"},{"c":"230125","n":"宾县"},{"c":"230126","n":"巴彦县"},{"c":"230127","n":"木兰县"},{"c":"230128","n":"通河县"},{"c":"230129","n":"延寿县"},{"c":"230183","n":"尚志市"},{"c":"230184","n":"五常市"}]},{"c":"2302","n":"齐齐哈尔市","ch":[{"c":"230202","n":"龙沙区"},{"c":"230203","n":"建华区"},{"c":"230204","n":"铁锋区"},{"c":"230205","n":"昂昂溪区"},{"c":"230206","n":"富拉尔基区"},{"c":"230207","n":"碾子山区"},{"c":"230208","n":"梅里斯达斡尔族区"},{"c":"230221","n":"龙江县"},{"c":"230223","n":"依安县"},{"c":"230224","n":"泰来县"},{"c":"230225","n":"甘南县"},{"c":"230227","n":"富裕县"},{"c":"230229","n":"克山县"},{"c":"230230","n":"克东县"},{"c":"230231","n":"拜泉县"},{"c":"230281","n":"讷河市"}]},{"c":"2303","n":"鸡西市","ch":[{"c":"230302","n":"鸡冠区"},{"c":"230303","n":"恒山区"},{"c":"230304","n":"滴道区"},{"c":"230305","n":"梨树区"},{"c":"230306","n":"城子河区"},{"c":"230307","n":"麻山区"},{"c":"230321","n":"鸡东县"},{"c":"230381","n":"虎林市"},{"c":"230382","n":"密山市"}]},{"c":"2304","n":"鹤岗市","ch":[{"c":"230402","n":"向阳区"},{"c":"230403","n":"工农区"},{"c":"230404","n":"南山区"},{"c":"230405","n":"兴安区"},{"c":"230406","n":"东山区"},{"c":"230407","n":"兴山区"},{"c":"230421","n":"萝北县"},{"c":"230422","n":"绥滨县"}]},{"c":"2305","n":"双鸭山市","ch":[{"c":"230502","n":"尖山区"},{"c":"230503","n":"岭东区"},{"c":"230505","n":"四方台区"},{"c":"230506","n":"宝山区"},{"c":"230521","n":"集贤县"},{"c":"230522","n":"友谊县"},{"c":"230523","n":"宝清县"},{"c":"230524","n":"饶河县"}]},{"c":"2306","n":"大庆市","ch":[{"c":"230602","n":"萨尔图区"},{"c":"230603","n":"龙凤区"},{"c":"230604","n":"让胡路区"},{"c":"230605","n":"红岗区"},{"c":"230606","n":"大同区"},{"c":"230621","n":"肇州县"},{"c":"230622","n":"肇源县"},{"c":"230623","n":"林甸县"},{"c":"230624","n":"杜尔伯特蒙古族自治县"}]},{"c":"2307","n":"伊春市","ch":[{"c":"230717","n":"伊美区"},{"c":"230718","n":"乌翠区"},{"c":"230719","n":"友好区"},{"c":"230722","n":"嘉荫县"},{"c":"230723","n":"汤旺县"},{"c":"230724","n":"丰林县"},{"c":"230725","n":"大箐山县"},{"c":"230726","n":"南岔县"},{"c":"230751","n":"金林区"},{"c":"230781","n":"铁力市"}]},{"c":"2308","n":"佳木斯市","ch":[{"c":"230803","n":"向阳区"},{"c":"230804","n":"前进区"},{"c":"230805","n":"东风区"},{"c":"230811","n":"郊区"},{"c":"230822","n":"桦南县"},{"c":"230826","n":"桦川县"},{"c":"230828","n":"汤原县"},{"c":"230881","n":"同江市"},{"c":"230882","n":"富锦市"},{"c":"230883","n":"抚远市"}]},{"c":"2309","n":"七台河市","ch":[{"c":"230902","n":"新兴区"},{"c":"230903","n":"桃山区"},{"c":"230904","n":"茄子河区"},{"c":"230921","n":"勃利县"}]},{"c":"2310","n":"牡丹江市","ch":[{"c":"231002","n":"东安区"},{"c":"231003","n":"阳明区"},{"c":"231004","n":"爱民区"},{"c":"231005","n":"西安区"},{"c":"231025","n":"林口县"},{"c":"231081","n":"绥芬河市"},{"c":"231083","n":"海林市"},{"c":"231084","n":"宁安市"},{"c":"231085","n":"穆棱市"},{"c":"231086","n":"东宁市"}]},{"c":"2311","n":"黑河市","ch":[{"c":"231102","n":"爱辉区"},{"c":"231123","n":"逊克县"},{"c":"231124","n":"孙吴县"},{"c":"231181","n":"北安市"},{"c":"231182","n":"五大连池市"},{"c":"231183","n":"嫩江市"}]},{"c":"2312","n":"绥化市","ch":[{"c":"231202","n":"北林区"},{"c":"231221","n":"望奎县"},{"c":"231222","n":"兰西县"},{"c":"231223","n":"青冈县"},{"c":"231224","n":"庆安县"},{"c":"231225","n":"明水县"},{"c":"231226","n":"绥棱县"},{"c":"231281","n":"安达市"},{"c":"231282","n":"肇东市"},{"c":"231283","n":"海伦市"}]},{"c":"2327","n":"大兴安岭地区","ch":[{"c":"232701","n":"漠河市"},{"c":"232721","n":"呼玛县"},{"c":"232722","n":"塔河县"},{"c":"232761","n":"加格达奇区"},{"c":"232762","n":"松岭区"},{"c":"232763","n":"新林区"},{"c":"232764","n":"呼中区"}]}]},{"c":31,"n":"上海市","ch":[{"c":"3101","n":"上海市","ch":[{"c":"310101","n":"黄浦区"},{"c":"310104","n":"徐汇区"},{"c":"310105","n":"长宁区"},{"c":"310106","n":"静安区"},{"c":"310107","n":"普陀区"},{"c":"310109","n":"虹口区"},{"c":"310110","n":"杨浦区"},{"c":"310112","n":"闵行区"},{"c":"310113","n":"宝山区"},{"c":"310114","n":"嘉定区"},{"c":"310115","n":"浦东新区"},{"c":"310116","n":"金山区"},{"c":"310117","n":"松江区"},{"c":"310118","n":"青浦区"},{"c":"310120","n":"奉贤区"},{"c":"310151","n":"崇明区"}]}]},{"c":32,"n":"江苏省","ch":[{"c":"3201","n":"南京市","ch":[{"c":"320102","n":"玄武区"},{"c":"320104","n":"秦淮区"},{"c":"320105","n":"建邺区"},{"c":"320106","n":"鼓楼区"},{"c":"320111","n":"浦口区"},{"c":"320113","n":"栖霞区"},{"c":"320114","n":"雨花台区"},{"c":"320115","n":"江宁区"},{"c":"320116","n":"六合区"},{"c":"320117","n":"溧水区"},{"c":"320118","n":"高淳区"}]},{"c":"3202","n":"无锡市","ch":[{"c":"320205","n":"锡山区"},{"c":"320206","n":"惠山区"},{"c":"320211","n":"滨湖区"},{"c":"320213","n":"梁溪区"},{"c":"320214","n":"新吴区"},{"c":"320281","n":"江阴市"},{"c":"320282","n":"宜兴市"}]},{"c":"3203","n":"徐州市","ch":[{"c":"320302","n":"鼓楼区"},{"c":"320303","n":"云龙区"},{"c":"320305","n":"贾汪区"},{"c":"320311","n":"泉山区"},{"c":"320312","n":"铜山区"},{"c":"320321","n":"丰县"},{"c":"320322","n":"沛县"},{"c":"320324","n":"睢宁县"},{"c":"320381","n":"新沂市"},{"c":"320382","n":"邳州市"}]},{"c":"3204","n":"常州市","ch":[{"c":"320402","n":"天宁区"},{"c":"320404","n":"钟楼区"},{"c":"320411","n":"新北区"},{"c":"320412","n":"武进区"},{"c":"320413","n":"金坛区"},{"c":"320481","n":"溧阳市"}]},{"c":"3205","n":"苏州市","ch":[{"c":"320505","n":"虎丘区"},{"c":"320506","n":"吴中区"},{"c":"320507","n":"相城区"},{"c":"320508","n":"姑苏区"},{"c":"320509","n":"吴江区"},{"c":"320581","n":"常熟市"},{"c":"320582","n":"张家港市"},{"c":"320583","n":"昆山市"},{"c":"320585","n":"太仓市"}]},{"c":"3206","n":"南通市","ch":[{"c":"320612","n":"通州区"},{"c":"320613","n":"崇川区"},{"c":"320614","n":"海门区"},{"c":"320623","n":"如东县"},{"c":"320681","n":"启东市"},{"c":"320682","n":"如皋市"},{"c":"320685","n":"海安市"}]},{"c":"3207","n":"连云港市","ch":[{"c":"320703","n":"连云区"},{"c":"320706","n":"海州区"},{"c":"320707","n":"赣榆区"},{"c":"320722","n":"东海县"},{"c":"320723","n":"灌云县"},{"c":"320724","n":"灌南县"}]},{"c":"3208","n":"淮安市","ch":[{"c":"320803","n":"淮安区"},{"c":"320804","n":"淮阴区"},{"c":"320812","n":"清江浦区"},{"c":"320813","n":"洪泽区"},{"c":"320826","n":"涟水县"},{"c":"320830","n":"盱眙县"},{"c":"320831","n":"金湖县"}]},{"c":"3209","n":"盐城市","ch":[{"c":"320902","n":"亭湖区"},{"c":"320903","n":"盐都区"},{"c":"320904","n":"大丰区"},{"c":"320921","n":"响水县"},{"c":"320922","n":"滨海县"},{"c":"320923","n":"阜宁县"},{"c":"320924","n":"射阳县"},{"c":"320925","n":"建湖县"},{"c":"320981","n":"东台市"}]},{"c":"3210","n":"扬州市","ch":[{"c":"321002","n":"广陵区"},{"c":"321003","n":"邗江区"},{"c":"321012","n":"江都区"},{"c":"321023","n":"宝应县"},{"c":"321081","n":"仪征市"},{"c":"321084","n":"高邮市"}]},{"c":"3211","n":"镇江市","ch":[{"c":"321102","n":"京口区"},{"c":"321111","n":"润州区"},{"c":"321112","n":"丹徒区"},{"c":"321181","n":"丹阳市"},{"c":"321182","n":"扬中市"},{"c":"321183","n":"句容市"}]},{"c":"3212","n":"泰州市","ch":[{"c":"321202","n":"海陵区"},{"c":"321203","n":"高港区"},{"c":"321204","n":"姜堰区"},{"c":"321281","n":"兴化市"},{"c":"321282","n":"靖江市"},{"c":"321283","n":"泰兴市"}]},{"c":"3213","n":"宿迁市","ch":[{"c":"321302","n":"宿城区"},{"c":"321311","n":"宿豫区"},{"c":"321322","n":"沭阳县"},{"c":"321323","n":"泗阳县"},{"c":"321324","n":"泗洪县"}]}]},{"c":33,"n":"浙江省","ch":[{"c":"3301","n":"杭州市","ch":[{"c":"330102","n":"上城区"},{"c":"330105","n":"拱墅区"},{"c":"330106","n":"西湖区"},{"c":"330108","n":"滨江区"},{"c":"330109","n":"萧山区"},{"c":"330110","n":"余杭区"},{"c":"330111","n":"富阳区"},{"c":"330112","n":"临安区"},{"c":"330113","n":"临平区"},{"c":"330114","n":"钱塘区"},{"c":"330122","n":"桐庐县"},{"c":"330127","n":"淳安县"},{"c":"330182","n":"建德市"}]},{"c":"3302","n":"宁波市","ch":[{"c":"330203","n":"海曙区"},{"c":"330205","n":"江北区"},{"c":"330206","n":"北仑区"},{"c":"330211","n":"镇海区"},{"c":"330212","n":"鄞州区"},{"c":"330213","n":"奉化区"},{"c":"330225","n":"象山县"},{"c":"330226","n":"宁海县"},{"c":"330281","n":"余姚市"},{"c":"330282","n":"慈溪市"}]},{"c":"3303","n":"温州市","ch":[{"c":"330302","n":"鹿城区"},{"c":"330303","n":"龙湾区"},{"c":"330304","n":"瓯海区"},{"c":"330305","n":"洞头区"},{"c":"330324","n":"永嘉县"},{"c":"330326","n":"平阳县"},{"c":"330327","n":"苍南县"},{"c":"330328","n":"文成县"},{"c":"330329","n":"泰顺县"},{"c":"330381","n":"瑞安市"},{"c":"330382","n":"乐清市"},{"c":"330383","n":"龙港市"}]},{"c":"3304","n":"嘉兴市","ch":[{"c":"330402","n":"南湖区"},{"c":"330411","n":"秀洲区"},{"c":"330421","n":"嘉善县"},{"c":"330424","n":"海盐县"},{"c":"330481","n":"海宁市"},{"c":"330482","n":"平湖市"},{"c":"330483","n":"桐乡市"}]},{"c":"3305","n":"湖州市","ch":[{"c":"330502","n":"吴兴区"},{"c":"330503","n":"南浔区"},{"c":"330521","n":"德清县"},{"c":"330522","n":"长兴县"},{"c":"330523","n":"安吉县"}]},{"c":"3306","n":"绍兴市","ch":[{"c":"330602","n":"越城区"},{"c":"330603","n":"柯桥区"},{"c":"330604","n":"上虞区"},{"c":"330624","n":"新昌县"},{"c":"330681","n":"诸暨市"},{"c":"330683","n":"嵊州市"}]},{"c":"3307","n":"金华市","ch":[{"c":"330702","n":"婺城区"},{"c":"330703","n":"金东区"},{"c":"330723","n":"武义县"},{"c":"330726","n":"浦江县"},{"c":"330727","n":"磐安县"},{"c":"330781","n":"兰溪市"},{"c":"330782","n":"义乌市"},{"c":"330783","n":"东阳市"},{"c":"330784","n":"永康市"}]},{"c":"3308","n":"衢州市","ch":[{"c":"330802","n":"柯城区"},{"c":"330803","n":"衢江区"},{"c":"330822","n":"常山县"},{"c":"330824","n":"开化县"},{"c":"330825","n":"龙游县"},{"c":"330881","n":"江山市"}]},{"c":"3309","n":"舟山市","ch":[{"c":"330902","n":"定海区"},{"c":"330903","n":"普陀区"},{"c":"330921","n":"岱山县"},{"c":"330922","n":"嵊泗县"}]},{"c":"3310","n":"台州市","ch":[{"c":"331002","n":"椒江区"},{"c":"331003","n":"黄岩区"},{"c":"331004","n":"路桥区"},{"c":"331022","n":"三门县"},{"c":"331023","n":"天台县"},{"c":"331024","n":"仙居县"},{"c":"331081","n":"温岭市"},{"c":"331082","n":"临海市"},{"c":"331083","n":"玉环市"}]},{"c":"3311","n":"丽水市","ch":[{"c":"331102","n":"莲都区"},{"c":"331121","n":"青田县"},{"c":"331122","n":"缙云县"},{"c":"331123","n":"遂昌县"},{"c":"331124","n":"松阳县"},{"c":"331125","n":"云和县"},{"c":"331126","n":"庆元县"},{"c":"331127","n":"景宁畲族自治县"},{"c":"331181","n":"龙泉市"}]}]},{"c":34,"n":"安徽省","ch":[{"c":"3401","n":"合肥市","ch":[{"c":"340102","n":"瑶海区"},{"c":"340103","n":"庐阳区"},{"c":"340104","n":"蜀山区"},{"c":"340111","n":"包河区"},{"c":"340121","n":"长丰县"},{"c":"340122","n":"肥东县"},{"c":"340123","n":"肥西县"},{"c":"340124","n":"庐江县"},{"c":"340181","n":"巢湖市"}]},{"c":"3402","n":"芜湖市","ch":[{"c":"340202","n":"镜湖区"},{"c":"340207","n":"鸠江区"},{"c":"340209","n":"弋江区"},{"c":"340210","n":"湾沚区"},{"c":"340212","n":"繁昌区"},{"c":"340223","n":"南陵县"},{"c":"340281","n":"无为市"}]},{"c":"3403","n":"蚌埠市","ch":[{"c":"340302","n":"龙子湖区"},{"c":"340303","n":"蚌山区"},{"c":"340304","n":"禹会区"},{"c":"340311","n":"淮上区"},{"c":"340321","n":"怀远县"},{"c":"340322","n":"五河县"},{"c":"340323","n":"固镇县"}]},{"c":"3404","n":"淮南市","ch":[{"c":"340402","n":"大通区"},{"c":"340403","n":"田家庵区"},{"c":"340404","n":"谢家集区"},{"c":"340405","n":"八公山区"},{"c":"340406","n":"潘集区"},{"c":"340421","n":"凤台县"},{"c":"340422","n":"寿县"}]},{"c":"3405","n":"马鞍山市","ch":[{"c":"340503","n":"花山区"},{"c":"340504","n":"雨山区"},{"c":"340506","n":"博望区"},{"c":"340521","n":"当涂县"},{"c":"340522","n":"含山县"},{"c":"340523","n":"和县"}]},{"c":"3406","n":"淮北市","ch":[{"c":"340602","n":"杜集区"},{"c":"340603","n":"相山区"},{"c":"340604","n":"烈山区"},{"c":"340621","n":"濉溪县"}]},{"c":"3407","n":"铜陵市","ch":[{"c":"340705","n":"铜官区"},{"c":"340706","n":"义安区"},{"c":"340711","n":"郊区"},{"c":"340722","n":"枞阳县"}]},{"c":"3408","n":"安庆市","ch":[{"c":"340802","n":"迎江区"},{"c":"340803","n":"大观区"},{"c":"340811","n":"宜秀区"},{"c":"340822","n":"怀宁县"},{"c":"340825","n":"太湖县"},{"c":"340826","n":"宿松县"},{"c":"340827","n":"望江县"},{"c":"340828","n":"岳西县"},{"c":"340881","n":"桐城市"},{"c":"340882","n":"潜山市"}]},{"c":"3410","n":"黄山市","ch":[{"c":"341002","n":"屯溪区"},{"c":"341003","n":"黄山区"},{"c":"341004","n":"徽州区"},{"c":"341021","n":"歙县"},{"c":"341022","n":"休宁县"},{"c":"341023","n":"黟县"},{"c":"341024","n":"祁门县"}]},{"c":"3411","n":"滁州市","ch":[{"c":"341102","n":"琅琊区"},{"c":"341103","n":"南谯区"},{"c":"341122","n":"来安县"},{"c":"341124","n":"全椒县"},{"c":"341125","n":"定远县"},{"c":"341126","n":"凤阳县"},{"c":"341181","n":"天长市"},{"c":"341182","n":"明光市"}]},{"c":"3412","n":"阜阳市","ch":[{"c":"341202","n":"颍州区"},{"c":"341203","n":"颍东区"},{"c":"341204","n":"颍泉区"},{"c":"341221","n":"临泉县"},{"c":"341222","n":"太和县"},{"c":"341225","n":"阜南县"},{"c":"341226","n":"颍上县"},{"c":"341282","n":"界首市"}]},{"c":"3413","n":"宿州市","ch":[{"c":"341302","n":"埇桥区"},{"c":"341321","n":"砀山县"},{"c":"341322","n":"萧县"},{"c":"341323","n":"灵璧县"},{"c":"341324","n":"泗县"}]},{"c":"3415","n":"六安市","ch":[{"c":"341502","n":"金安区"},{"c":"341503","n":"裕安区"},{"c":"341504","n":"叶集区"},{"c":"341522","n":"霍邱县"},{"c":"341523","n":"舒城县"},{"c":"341524","n":"金寨县"},{"c":"341525","n":"霍山县"}]},{"c":"3416","n":"亳州市","ch":[{"c":"341602","n":"谯城区"},{"c":"341621","n":"涡阳县"},{"c":"341622","n":"蒙城县"},{"c":"341623","n":"利辛县"}]},{"c":"3417","n":"池州市","ch":[{"c":"341702","n":"贵池区"},{"c":"341721","n":"东至县"},{"c":"341722","n":"石台县"},{"c":"341723","n":"青阳县"}]},{"c":"3418","n":"宣城市","ch":[{"c":"341802","n":"宣州区"},{"c":"341821","n":"郎溪县"},{"c":"341823","n":"泾县"},{"c":"341824","n":"绩溪县"},{"c":"341825","n":"旌德县"},{"c":"341881","n":"宁国市"},{"c":"341882","n":"广德市"}]}]},{"c":35,"n":"福建省","ch":[{"c":"3501","n":"福州市","ch":[{"c":"350102","n":"鼓楼区"},{"c":"350103","n":"台江区"},{"c":"350104","n":"仓山区"},{"c":"350105","n":"马尾区"},{"c":"350111","n":"晋安区"},{"c":"350112","n":"长乐区"},{"c":"350121","n":"闽侯县"},{"c":"350122","n":"连江县"},{"c":"350123","n":"罗源县"},{"c":"350124","n":"闽清县"},{"c":"350125","n":"永泰县"},{"c":"350128","n":"平潭县"},{"c":"350181","n":"福清市"}]},{"c":"3502","n":"厦门市","ch":[{"c":"350203","n":"思明区"},{"c":"350205","n":"海沧区"},{"c":"350206","n":"湖里区"},{"c":"350211","n":"集美区"},{"c":"350212","n":"同安区"},{"c":"350213","n":"翔安区"}]},{"c":"3503","n":"莆田市","ch":[{"c":"350302","n":"城厢区"},{"c":"350303","n":"涵江区"},{"c":"350304","n":"荔城区"},{"c":"350305","n":"秀屿区"},{"c":"350322","n":"仙游县"}]},{"c":"3504","n":"三明市","ch":[{"c":"350404","n":"三元区"},{"c":"350405","n":"沙县区"},{"c":"350421","n":"明溪县"},{"c":"350423","n":"清流县"},{"c":"350424","n":"宁化县"},{"c":"350425","n":"大田县"},{"c":"350426","n":"尤溪县"},{"c":"350428","n":"将乐县"},{"c":"350429","n":"泰宁县"},{"c":"350430","n":"建宁县"},{"c":"350481","n":"永安市"}]},{"c":"3505","n":"泉州市","ch":[{"c":"350502","n":"鲤城区"},{"c":"350503","n":"丰泽区"},{"c":"350504","n":"洛江区"},{"c":"350505","n":"泉港区"},{"c":"350521","n":"惠安县"},{"c":"350524","n":"安溪县"},{"c":"350525","n":"永春县"},{"c":"350526","n":"德化县"},{"c":"350527","n":"金门县"},{"c":"350581","n":"石狮市"},{"c":"350582","n":"晋江市"},{"c":"350583","n":"南安市"}]},{"c":"3506","n":"漳州市","ch":[{"c":"350602","n":"芗城区"},{"c":"350603","n":"龙文区"},{"c":"350604","n":"龙海区"},{"c":"350605","n":"长泰区"},{"c":"350622","n":"云霄县"},{"c":"350623","n":"漳浦县"},{"c":"350624","n":"诏安县"},{"c":"350626","n":"东山县"},{"c":"350627","n":"南靖县"},{"c":"350628","n":"平和县"},{"c":"350629","n":"华安县"}]},{"c":"3507","n":"南平市","ch":[{"c":"350702","n":"延平区"},{"c":"350703","n":"建阳区"},{"c":"350721","n":"顺昌县"},{"c":"350722","n":"浦城县"},{"c":"350723","n":"光泽县"},{"c":"350724","n":"松溪县"},{"c":"350725","n":"政和县"},{"c":"350781","n":"邵武市"},{"c":"350782","n":"武夷山市"},{"c":"350783","n":"建瓯市"}]},{"c":"3508","n":"龙岩市","ch":[{"c":"350802","n":"新罗区"},{"c":"350803","n":"永定区"},{"c":"350821","n":"长汀县"},{"c":"350823","n":"上杭县"},{"c":"350824","n":"武平县"},{"c":"350825","n":"连城县"},{"c":"350881","n":"漳平市"}]},{"c":"3509","n":"宁德市","ch":[{"c":"350902","n":"蕉城区"},{"c":"350921","n":"霞浦县"},{"c":"350922","n":"古田县"},{"c":"350923","n":"屏南县"},{"c":"350924","n":"寿宁县"},{"c":"350925","n":"周宁县"},{"c":"350926","n":"柘荣县"},{"c":"350981","n":"福安市"},{"c":"350982","n":"福鼎市"}]}]},{"c":36,"n":"江西省","ch":[{"c":"3601","n":"南昌市","ch":[{"c":"360102","n":"东湖区"},{"c":"360103","n":"西湖区"},{"c":"360104","n":"青云谱区"},{"c":"360111","n":"青山湖区"},{"c":"360112","n":"新建区"},{"c":"360113","n":"红谷滩区"},{"c":"360121","n":"南昌县"},{"c":"360123","n":"安义县"},{"c":"360124","n":"进贤县"}]},{"c":"3602","n":"景德镇市","ch":[{"c":"360202","n":"昌江区"},{"c":"360203","n":"珠山区"},{"c":"360222","n":"浮梁县"},{"c":"360281","n":"乐平市"}]},{"c":"3603","n":"萍乡市","ch":[{"c":"360302","n":"安源区"},{"c":"360313","n":"湘东区"},{"c":"360321","n":"莲花县"},{"c":"360322","n":"上栗县"},{"c":"360323","n":"芦溪县"}]},{"c":"3604","n":"九江市","ch":[{"c":"360402","n":"濂溪区"},{"c":"360403","n":"浔阳区"},{"c":"360404","n":"柴桑区"},{"c":"360423","n":"武宁县"},{"c":"360424","n":"修水县"},{"c":"360425","n":"永修县"},{"c":"360426","n":"德安县"},{"c":"360428","n":"都昌县"},{"c":"360429","n":"湖口县"},{"c":"360430","n":"彭泽县"},{"c":"360481","n":"瑞昌市"},{"c":"360482","n":"共青城市"},{"c":"360483","n":"庐山市"}]},{"c":"3605","n":"新余市","ch":[{"c":"360502","n":"渝水区"},{"c":"360521","n":"分宜县"}]},{"c":"3606","n":"鹰潭市","ch":[{"c":"360602","n":"月湖区"},{"c":"360603","n":"余江区"},{"c":"360681","n":"贵溪市"}]},{"c":"3607","n":"赣州市","ch":[{"c":"360702","n":"章贡区"},{"c":"360703","n":"南康区"},{"c":"360704","n":"赣县区"},{"c":"360722","n":"信丰县"},{"c":"360723","n":"大余县"},{"c":"360724","n":"上犹县"},{"c":"360725","n":"崇义县"},{"c":"360726","n":"安远县"},{"c":"360728","n":"定南县"},{"c":"360729","n":"全南县"},{"c":"360730","n":"宁都县"},{"c":"360731","n":"于都县"},{"c":"360732","n":"兴国县"},{"c":"360733","n":"会昌县"},{"c":"360734","n":"寻乌县"},{"c":"360735","n":"石城县"},{"c":"360781","n":"瑞金市"},{"c":"360783","n":"龙南市"}]},{"c":"3608","n":"吉安市","ch":[{"c":"360802","n":"吉州区"},{"c":"360803","n":"青原区"},{"c":"360821","n":"吉安县"},{"c":"360822","n":"吉水县"},{"c":"360823","n":"峡江县"},{"c":"360824","n":"新干县"},{"c":"360825","n":"永丰县"},{"c":"360826","n":"泰和县"},{"c":"360827","n":"遂川县"},{"c":"360828","n":"万安县"},{"c":"360829","n":"安福县"},{"c":"360830","n":"永新县"},{"c":"360881","n":"井冈山市"}]},{"c":"3609","n":"宜春市","ch":[{"c":"360902","n":"袁州区"},{"c":"360921","n":"奉新县"},{"c":"360922","n":"万载县"},{"c":"360923","n":"上高县"},{"c":"360924","n":"宜丰县"},{"c":"360925","n":"靖安县"},{"c":"360926","n":"铜鼓县"},{"c":"360981","n":"丰城市"},{"c":"360982","n":"樟树市"},{"c":"360983","n":"高安市"}]},{"c":"3610","n":"抚州市","ch":[{"c":"361002","n":"临川区"},{"c":"361003","n":"东乡区"},{"c":"361021","n":"南城县"},{"c":"361022","n":"黎川县"},{"c":"361023","n":"南丰县"},{"c":"361024","n":"崇仁县"},{"c":"361025","n":"乐安县"},{"c":"361026","n":"宜黄县"},{"c":"361027","n":"金溪县"},{"c":"361028","n":"资溪县"},{"c":"361030","n":"广昌县"}]},{"c":"3611","n":"上饶市","ch":[{"c":"361102","n":"信州区"},{"c":"361103","n":"广丰区"},{"c":"361104","n":"广信区"},{"c":"361123","n":"玉山县"},{"c":"361124","n":"铅山县"},{"c":"361125","n":"横峰县"},{"c":"361126","n":"弋阳县"},{"c":"361127","n":"余干县"},{"c":"361128","n":"鄱阳县"},{"c":"361129","n":"万年县"},{"c":"361130","n":"婺源县"},{"c":"361181","n":"德兴市"}]}]},{"c":37,"n":"山东省","ch":[{"c":"3701","n":"济南市","ch":[{"c":"370102","n":"历下区"},{"c":"370103","n":"市中区"},{"c":"370104","n":"槐荫区"},{"c":"370105","n":"天桥区"},{"c":"370112","n":"历城区"},{"c":"370113","n":"长清区"},{"c":"370114","n":"章丘区"},{"c":"370115","n":"济阳区"},{"c":"370116","n":"莱芜区"},{"c":"370117","n":"钢城区"},{"c":"370124","n":"平阴县"},{"c":"370126","n":"商河县"}]},{"c":"3702","n":"青岛市","ch":[{"c":"370202","n":"市南区"},{"c":"370203","n":"市北区"},{"c":"370211","n":"黄岛区"},{"c":"370212","n":"崂山区"},{"c":"370213","n":"李沧区"},{"c":"370214","n":"城阳区"},{"c":"370215","n":"即墨区"},{"c":"370281","n":"胶州市"},{"c":"370283","n":"平度市"},{"c":"370285","n":"莱西市"}]},{"c":"3703","n":"淄博市","ch":[{"c":"370302","n":"淄川区"},{"c":"370303","n":"张店区"},{"c":"370304","n":"博山区"},{"c":"370305","n":"临淄区"},{"c":"370306","n":"周村区"},{"c":"370321","n":"桓台县"},{"c":"370322","n":"高青县"},{"c":"370323","n":"沂源县"}]},{"c":"3704","n":"枣庄市","ch":[{"c":"370402","n":"市中区"},{"c":"370403","n":"薛城区"},{"c":"370404","n":"峄城区"},{"c":"370405","n":"台儿庄区"},{"c":"370406","n":"山亭区"},{"c":"370481","n":"滕州市"}]},{"c":"3705","n":"东营市","ch":[{"c":"370502","n":"东营区"},{"c":"370503","n":"河口区"},{"c":"370505","n":"垦利区"},{"c":"370522","n":"利津县"},{"c":"370523","n":"广饶县"}]},{"c":"3706","n":"烟台市","ch":[{"c":"370602","n":"芝罘区"},{"c":"370611","n":"福山区"},{"c":"370612","n":"牟平区"},{"c":"370613","n":"莱山区"},{"c":"370614","n":"蓬莱区"},{"c":"370681","n":"龙口市"},{"c":"370682","n":"莱阳市"},{"c":"370683","n":"莱州市"},{"c":"370685","n":"招远市"},{"c":"370686","n":"栖霞市"},{"c":"370687","n":"海阳市"}]},{"c":"3707","n":"潍坊市","ch":[{"c":"370702","n":"潍城区"},{"c":"370703","n":"寒亭区"},{"c":"370704","n":"坊子区"},{"c":"370705","n":"奎文区"},{"c":"370724","n":"临朐县"},{"c":"370725","n":"昌乐县"},{"c":"370781","n":"青州市"},{"c":"370782","n":"诸城市"},{"c":"370783","n":"寿光市"},{"c":"370784","n":"安丘市"},{"c":"370785","n":"高密市"},{"c":"370786","n":"昌邑市"}]},{"c":"3708","n":"济宁市","ch":[{"c":"370811","n":"任城区"},{"c":"370812","n":"兖州区"},{"c":"370826","n":"微山县"},{"c":"370827","n":"鱼台县"},{"c":"370828","n":"金乡县"},{"c":"370829","n":"嘉祥县"},{"c":"370830","n":"汶上县"},{"c":"370831","n":"泗水县"},{"c":"370832","n":"梁山县"},{"c":"370881","n":"曲阜市"},{"c":"370883","n":"邹城市"}]},{"c":"3709","n":"泰安市","ch":[{"c":"370902","n":"泰山区"},{"c":"370911","n":"岱岳区"},{"c":"370921","n":"宁阳县"},{"c":"370923","n":"东平县"},{"c":"370982","n":"新泰市"},{"c":"370983","n":"肥城市"}]},{"c":"3710","n":"威海市","ch":[{"c":"371002","n":"环翠区"},{"c":"371003","n":"文登区"},{"c":"371082","n":"荣成市"},{"c":"371083","n":"乳山市"}]},{"c":"3711","n":"日照市","ch":[{"c":"371102","n":"东港区"},{"c":"371103","n":"岚山区"},{"c":"371121","n":"五莲县"},{"c":"371122","n":"莒县"}]},{"c":"3713","n":"临沂市","ch":[{"c":"371302","n":"兰山区"},{"c":"371311","n":"罗庄区"},{"c":"371312","n":"河东区"},{"c":"371321","n":"沂南县"},{"c":"371322","n":"郯城县"},{"c":"371323","n":"沂水县"},{"c":"371324","n":"兰陵县"},{"c":"371325","n":"费县"},{"c":"371326","n":"平邑县"},{"c":"371327","n":"莒南县"},{"c":"371328","n":"蒙阴县"},{"c":"371329","n":"临沭县"}]},{"c":"3714","n":"德州市","ch":[{"c":"371402","n":"德城区"},{"c":"371403","n":"陵城区"},{"c":"371422","n":"宁津县"},{"c":"371423","n":"庆云县"},{"c":"371424","n":"临邑县"},{"c":"371425","n":"齐河县"},{"c":"371426","n":"平原县"},{"c":"371427","n":"夏津县"},{"c":"371428","n":"武城县"},{"c":"371481","n":"乐陵市"},{"c":"371482","n":"禹城市"}]},{"c":"3715","n":"聊城市","ch":[{"c":"371502","n":"东昌府区"},{"c":"371503","n":"茌平区"},{"c":"371521","n":"阳谷县"},{"c":"371522","n":"莘县"},{"c":"371524","n":"东阿县"},{"c":"371525","n":"冠县"},{"c":"371526","n":"高唐县"},{"c":"371581","n":"临清市"}]},{"c":"3716","n":"滨州市","ch":[{"c":"371602","n":"滨城区"},{"c":"371603","n":"沾化区"},{"c":"371621","n":"惠民县"},{"c":"371622","n":"阳信县"},{"c":"371623","n":"无棣县"},{"c":"371625","n":"博兴县"},{"c":"371681","n":"邹平市"}]},{"c":"3717","n":"菏泽市","ch":[{"c":"371702","n":"牡丹区"},{"c":"371703","n":"定陶区"},{"c":"371721","n":"曹县"},{"c":"371722","n":"单县"},{"c":"371723","n":"成武县"},{"c":"371724","n":"巨野县"},{"c":"371725","n":"郓城县"},{"c":"371726","n":"鄄城县"},{"c":"371728","n":"东明县"}]}]},{"c":41,"n":"河南省","ch":[{"c":"4101","n":"郑州市","ch":[{"c":"410102","n":"中原区"},{"c":"410103","n":"二七区"},{"c":"410104","n":"管城回族区"},{"c":"410105","n":"金水区"},{"c":"410106","n":"上街区"},{"c":"410108","n":"惠济区"},{"c":"410122","n":"中牟县"},{"c":"410181","n":"巩义市"},{"c":"410182","n":"荥阳市"},{"c":"410183","n":"新密市"},{"c":"410184","n":"新郑市"},{"c":"410185","n":"登封市"}]},{"c":"4102","n":"开封市","ch":[{"c":"410202","n":"龙亭区"},{"c":"410203","n":"顺河回族区"},{"c":"410204","n":"鼓楼区"},{"c":"410205","n":"禹王台区"},{"c":"410212","n":"祥符区"},{"c":"410221","n":"杞县"},{"c":"410222","n":"通许县"},{"c":"410223","n":"尉氏县"},{"c":"410225","n":"兰考县"}]},{"c":"4103","n":"洛阳市","ch":[{"c":"410302","n":"老城区"},{"c":"410303","n":"西工区"},{"c":"410304","n":"瀍河回族区"},{"c":"410305","n":"涧西区"},{"c":"410307","n":"偃师区"},{"c":"410308","n":"孟津区"},{"c":"410311","n":"洛龙区"},{"c":"410323","n":"新安县"},{"c":"410324","n":"栾川县"},{"c":"410325","n":"嵩县"},{"c":"410326","n":"汝阳县"},{"c":"410327","n":"宜阳县"},{"c":"410328","n":"洛宁县"},{"c":"410329","n":"伊川县"}]},{"c":"4104","n":"平顶山市","ch":[{"c":"410402","n":"新华区"},{"c":"410403","n":"卫东区"},{"c":"410404","n":"石龙区"},{"c":"410411","n":"湛河区"},{"c":"410421","n":"宝丰县"},{"c":"410422","n":"叶县"},{"c":"410423","n":"鲁山县"},{"c":"410425","n":"郏县"},{"c":"410481","n":"舞钢市"},{"c":"410482","n":"汝州市"}]},{"c":"4105","n":"安阳市","ch":[{"c":"410502","n":"文峰区"},{"c":"410503","n":"北关区"},{"c":"410505","n":"殷都区"},{"c":"410506","n":"龙安区"},{"c":"410522","n":"安阳县"},{"c":"410523","n":"汤阴县"},{"c":"410526","n":"滑县"},{"c":"410527","n":"内黄县"},{"c":"410581","n":"林州市"}]},{"c":"4106","n":"鹤壁市","ch":[{"c":"410602","n":"鹤山区"},{"c":"410603","n":"山城区"},{"c":"410611","n":"淇滨区"},{"c":"410621","n":"浚县"},{"c":"410622","n":"淇县"}]},{"c":"4107","n":"新乡市","ch":[{"c":"410702","n":"红旗区"},{"c":"410703","n":"卫滨区"},{"c":"410704","n":"凤泉区"},{"c":"410711","n":"牧野区"},{"c":"410721","n":"新乡县"},{"c":"410724","n":"获嘉县"},{"c":"410725","n":"原阳县"},{"c":"410726","n":"延津县"},{"c":"410727","n":"封丘县"},{"c":"410781","n":"卫辉市"},{"c":"410782","n":"辉县市"},{"c":"410783","n":"长垣市"}]},{"c":"4108","n":"焦作市","ch":[{"c":"410802","n":"解放区"},{"c":"410803","n":"中站区"},{"c":"410804","n":"马村区"},{"c":"410811","n":"山阳区"},{"c":"410821","n":"修武县"},{"c":"410822","n":"博爱县"},{"c":"410823","n":"武陟县"},{"c":"410825","n":"温县"},{"c":"410882","n":"沁阳市"},{"c":"410883","n":"孟州市"}]},{"c":"4109","n":"濮阳市","ch":[{"c":"410902","n":"华龙区"},{"c":"410922","n":"清丰县"},{"c":"410923","n":"南乐县"},{"c":"410926","n":"范县"},{"c":"410927","n":"台前县"},{"c":"410928","n":"濮阳县"}]},{"c":"4110","n":"许昌市","ch":[{"c":"411002","n":"魏都区"},{"c":"411003","n":"建安区"},{"c":"411024","n":"鄢陵县"},{"c":"411025","n":"襄城县"},{"c":"411081","n":"禹州市"},{"c":"411082","n":"长葛市"}]},{"c":"4111","n":"漯河市","ch":[{"c":"411102","n":"源汇区"},{"c":"411103","n":"郾城区"},{"c":"411104","n":"召陵区"},{"c":"411121","n":"舞阳县"},{"c":"411122","n":"临颍县"}]},{"c":"4112","n":"三门峡市","ch":[{"c":"411202","n":"湖滨区"},{"c":"411203","n":"陕州区"},{"c":"411221","n":"渑池县"},{"c":"411224","n":"卢氏县"},{"c":"411281","n":"义马市"},{"c":"411282","n":"灵宝市"}]},{"c":"4113","n":"南阳市","ch":[{"c":"411302","n":"宛城区"},{"c":"411303","n":"卧龙区"},{"c":"411321","n":"南召县"},{"c":"411322","n":"方城县"},{"c":"411323","n":"西峡县"},{"c":"411324","n":"镇平县"},{"c":"411325","n":"内乡县"},{"c":"411326","n":"淅川县"},{"c":"411327","n":"社旗县"},{"c":"411328","n":"唐河县"},{"c":"411329","n":"新野县"},{"c":"411330","n":"桐柏县"},{"c":"411381","n":"邓州市"}]},{"c":"4114","n":"商丘市","ch":[{"c":"411402","n":"梁园区"},{"c":"411403","n":"睢阳区"},{"c":"411421","n":"民权县"},{"c":"411422","n":"睢县"},{"c":"411423","n":"宁陵县"},{"c":"411424","n":"柘城县"},{"c":"411425","n":"虞城县"},{"c":"411426","n":"夏邑县"},{"c":"411481","n":"永城市"}]},{"c":"4115","n":"信阳市","ch":[{"c":"411502","n":"浉河区"},{"c":"411503","n":"平桥区"},{"c":"411521","n":"罗山县"},{"c":"411522","n":"光山县"},{"c":"411523","n":"新县"},{"c":"411524","n":"商城县"},{"c":"411525","n":"固始县"},{"c":"411526","n":"潢川县"},{"c":"411527","n":"淮滨县"},{"c":"411528","n":"息县"}]},{"c":"4116","n":"周口市","ch":[{"c":"411602","n":"川汇区"},{"c":"411603","n":"淮阳区"},{"c":"411621","n":"扶沟县"},{"c":"411622","n":"西华县"},{"c":"411623","n":"商水县"},{"c":"411624","n":"沈丘县"},{"c":"411625","n":"郸城县"},{"c":"411627","n":"太康县"},{"c":"411628","n":"鹿邑县"},{"c":"411681","n":"项城市"}]},{"c":"4117","n":"驻马店市","ch":[{"c":"411702","n":"驿城区"},{"c":"411721","n":"西平县"},{"c":"411722","n":"上蔡县"},{"c":"411723","n":"平舆县"},{"c":"411724","n":"正阳县"},{"c":"411725","n":"确山县"},{"c":"411726","n":"泌阳县"},{"c":"411727","n":"汝南县"},{"c":"411728","n":"遂平县"},{"c":"411729","n":"新蔡县"}]},{"c":"4190","n":"河南省","ch":[{"c":"419001","n":"济源市"}]}]},{"c":42,"n":"湖北省","ch":[{"c":"4201","n":"武汉市","ch":[{"c":"420102","n":"江岸区"},{"c":"420103","n":"江汉区"},{"c":"420104","n":"硚口区"},{"c":"420105","n":"汉阳区"},{"c":"420106","n":"武昌区"},{"c":"420107","n":"青山区"},{"c":"420111","n":"洪山区"},{"c":"420112","n":"东西湖区"},{"c":"420113","n":"汉南区"},{"c":"420114","n":"蔡甸区"},{"c":"420115","n":"江夏区"},{"c":"420116","n":"黄陂区"},{"c":"420117","n":"新洲区"}]},{"c":"4202","n":"黄石市","ch":[{"c":"420202","n":"黄石港区"},{"c":"420203","n":"西塞山区"},{"c":"420204","n":"下陆区"},{"c":"420205","n":"铁山区"},{"c":"420222","n":"阳新县"},{"c":"420281","n":"大冶市"}]},{"c":"4203","n":"十堰市","ch":[{"c":"420302","n":"茅箭区"},{"c":"420303","n":"张湾区"},{"c":"420304","n":"郧阳区"},{"c":"420322","n":"郧西县"},{"c":"420323","n":"竹山县"},{"c":"420324","n":"竹溪县"},{"c":"420325","n":"房县"},{"c":"420381","n":"丹江口市"}]},{"c":"4205","n":"宜昌市","ch":[{"c":"420502","n":"西陵区"},{"c":"420503","n":"伍家岗区"},{"c":"420504","n":"点军区"},{"c":"420505","n":"猇亭区"},{"c":"420506","n":"夷陵区"},{"c":"420525","n":"远安县"},{"c":"420526","n":"兴山县"},{"c":"420527","n":"秭归县"},{"c":"420528","n":"长阳土家族自治县"},{"c":"420529","n":"五峰土家族自治县"},{"c":"420581","n":"宜都市"},{"c":"420582","n":"当阳市"},{"c":"420583","n":"枝江市"}]},{"c":"4206","n":"襄阳市","ch":[{"c":"420602","n":"襄城区"},{"c":"420606","n":"樊城区"},{"c":"420607","n":"襄州区"},{"c":"420624","n":"南漳县"},{"c":"420625","n":"谷城县"},{"c":"420626","n":"保康县"},{"c":"420682","n":"老河口市"},{"c":"420683","n":"枣阳市"},{"c":"420684","n":"宜城市"}]},{"c":"4207","n":"鄂州市","ch":[{"c":"420702","n":"梁子湖区"},{"c":"420703","n":"华容区"},{"c":"420704","n":"鄂城区"}]},{"c":"4208","n":"荆门市","ch":[{"c":"420802","n":"东宝区"},{"c":"420804","n":"掇刀区"},{"c":"420822","n":"沙洋县"},{"c":"420881","n":"钟祥市"},{"c":"420882","n":"京山市"}]},{"c":"4209","n":"孝感市","ch":[{"c":"420902","n":"孝南区"},{"c":"420921","n":"孝昌县"},{"c":"420922","n":"大悟县"},{"c":"420923","n":"云梦县"},{"c":"420981","n":"应城市"},{"c":"420982","n":"安陆市"},{"c":"420984","n":"汉川市"}]},{"c":"4210","n":"荆州市","ch":[{"c":"421002","n":"沙市区"},{"c":"421003","n":"荆州区"},{"c":"421022","n":"公安县"},{"c":"421024","n":"江陵县"},{"c":"421081","n":"石首市"},{"c":"421083","n":"洪湖市"},{"c":"421087","n":"松滋市"},{"c":"421088","n":"监利市"}]},{"c":"4211","n":"黄冈市","ch":[{"c":"421102","n":"黄州区"},{"c":"421121","n":"团风县"},{"c":"421122","n":"红安县"},{"c":"421123","n":"罗田县"},{"c":"421124","n":"英山县"},{"c":"421125","n":"浠水县"},{"c":"421126","n":"蕲春县"},{"c":"421127","n":"黄梅县"},{"c":"421181","n":"麻城市"},{"c":"421182","n":"武穴市"}]},{"c":"4212","n":"咸宁市","ch":[{"c":"421202","n":"咸安区"},{"c":"421221","n":"嘉鱼县"},{"c":"421222","n":"通城县"},{"c":"421223","n":"崇阳县"},{"c":"421224","n":"通山县"},{"c":"421281","n":"赤壁市"}]},{"c":"4213","n":"随州市","ch":[{"c":"421303","n":"曾都区"},{"c":"421321","n":"随县"},{"c":"421381","n":"广水市"}]},{"c":"4228","n":"恩施土家族苗族自治州","ch":[{"c":"422801","n":"恩施市"},{"c":"422802","n":"利川市"},{"c":"422822","n":"建始县"},{"c":"422823","n":"巴东县"},{"c":"422825","n":"宣恩县"},{"c":"422826","n":"咸丰县"},{"c":"422827","n":"来凤县"},{"c":"422828","n":"鹤峰县"}]},{"c":"4290","n":"湖北省","ch":[{"c":"429004","n":"仙桃市"},{"c":"429005","n":"潜江市"},{"c":"429006","n":"天门市"},{"c":"429021","n":"神农架林区"}]}]},{"c":43,"n":"湖南省","ch":[{"c":"4301","n":"长沙市","ch":[{"c":"430102","n":"芙蓉区"},{"c":"430103","n":"天心区"},{"c":"430104","n":"岳麓区"},{"c":"430105","n":"开福区"},{"c":"430111","n":"雨花区"},{"c":"430112","n":"望城区"},{"c":"430121","n":"长沙县"},{"c":"430181","n":"浏阳市"},{"c":"430182","n":"宁乡市"}]},{"c":"4302","n":"株洲市","ch":[{"c":"430202","n":"荷塘区"},{"c":"430203","n":"芦淞区"},{"c":"430204","n":"石峰区"},{"c":"430211","n":"天元区"},{"c":"430212","n":"渌口区"},{"c":"430223","n":"攸县"},{"c":"430224","n":"茶陵县"},{"c":"430225","n":"炎陵县"},{"c":"430281","n":"醴陵市"}]},{"c":"4303","n":"湘潭市","ch":[{"c":"430302","n":"雨湖区"},{"c":"430304","n":"岳塘区"},{"c":"430321","n":"湘潭县"},{"c":"430381","n":"湘乡市"},{"c":"430382","n":"韶山市"}]},{"c":"4304","n":"衡阳市","ch":[{"c":"430405","n":"珠晖区"},{"c":"430406","n":"雁峰区"},{"c":"430407","n":"石鼓区"},{"c":"430408","n":"蒸湘区"},{"c":"430412","n":"南岳区"},{"c":"430421","n":"衡阳县"},{"c":"430422","n":"衡南县"},{"c":"430423","n":"衡山县"},{"c":"430424","n":"衡东县"},{"c":"430426","n":"祁东县"},{"c":"430481","n":"耒阳市"},{"c":"430482","n":"常宁市"}]},{"c":"4305","n":"邵阳市","ch":[{"c":"430502","n":"双清区"},{"c":"430503","n":"大祥区"},{"c":"430511","n":"北塔区"},{"c":"430522","n":"新邵县"},{"c":"430523","n":"邵阳县"},{"c":"430524","n":"隆回县"},{"c":"430525","n":"洞口县"},{"c":"430527","n":"绥宁县"},{"c":"430528","n":"新宁县"},{"c":"430529","n":"城步苗族自治县"},{"c":"430581","n":"武冈市"},{"c":"430582","n":"邵东市"}]},{"c":"4306","n":"岳阳市","ch":[{"c":"430602","n":"岳阳楼区"},{"c":"430603","n":"云溪区"},{"c":"430611","n":"君山区"},{"c":"430621","n":"岳阳县"},{"c":"430623","n":"华容县"},{"c":"430624","n":"湘阴县"},{"c":"430626","n":"平江县"},{"c":"430681","n":"汨罗市"},{"c":"430682","n":"临湘市"}]},{"c":"4307","n":"常德市","ch":[{"c":"430702","n":"武陵区"},{"c":"430703","n":"鼎城区"},{"c":"430721","n":"安乡县"},{"c":"430722","n":"汉寿县"},{"c":"430723","n":"澧县"},{"c":"430724","n":"临澧县"},{"c":"430725","n":"桃源县"},{"c":"430726","n":"石门县"},{"c":"430781","n":"津市市"}]},{"c":"4308","n":"张家界市","ch":[{"c":"430802","n":"永定区"},{"c":"430811","n":"武陵源区"},{"c":"430821","n":"慈利县"},{"c":"430822","n":"桑植县"}]},{"c":"4309","n":"益阳市","ch":[{"c":"430902","n":"资阳区"},{"c":"430903","n":"赫山区"},{"c":"430921","n":"南县"},{"c":"430922","n":"桃江县"},{"c":"430923","n":"安化县"},{"c":"430981","n":"沅江市"}]},{"c":"4310","n":"郴州市","ch":[{"c":"431002","n":"北湖区"},{"c":"431003","n":"苏仙区"},{"c":"431021","n":"桂阳县"},{"c":"431022","n":"宜章县"},{"c":"431023","n":"永兴县"},{"c":"431024","n":"嘉禾县"},{"c":"431025","n":"临武县"},{"c":"431026","n":"汝城县"},{"c":"431027","n":"桂东县"},{"c":"431028","n":"安仁县"},{"c":"431081","n":"资兴市"}]},{"c":"4311","n":"永州市","ch":[{"c":"431102","n":"零陵区"},{"c":"431103","n":"冷水滩区"},{"c":"431122","n":"东安县"},{"c":"431123","n":"双牌县"},{"c":"431124","n":"道县"},{"c":"431125","n":"江永县"},{"c":"431126","n":"宁远县"},{"c":"431127","n":"蓝山县"},{"c":"431128","n":"新田县"},{"c":"431129","n":"江华瑶族自治县"},{"c":"431181","n":"祁阳市"}]},{"c":"4312","n":"怀化市","ch":[{"c":"431202","n":"鹤城区"},{"c":"431221","n":"中方县"},{"c":"431222","n":"沅陵县"},{"c":"431223","n":"辰溪县"},{"c":"431224","n":"溆浦县"},{"c":"431225","n":"会同县"},{"c":"431226","n":"麻阳苗族自治县"},{"c":"431227","n":"新晃侗族自治县"},{"c":"431228","n":"芷江侗族自治县"},{"c":"431229","n":"靖州苗族侗族自治县"},{"c":"431230","n":"通道侗族自治县"},{"c":"431281","n":"洪江市"}]},{"c":"4313","n":"娄底市","ch":[{"c":"431302","n":"娄星区"},{"c":"431321","n":"双峰县"},{"c":"431322","n":"新化县"},{"c":"431381","n":"冷水江市"},{"c":"431382","n":"涟源市"}]},{"c":"4331","n":"湘西土家族苗族自治州","ch":[{"c":"433101","n":"吉首市"},{"c":"433122","n":"泸溪县"},{"c":"433123","n":"凤凰县"},{"c":"433124","n":"花垣县"},{"c":"433125","n":"保靖县"},{"c":"433126","n":"古丈县"},{"c":"433127","n":"永顺县"},{"c":"433130","n":"龙山县"}]}]},{"c":44,"n":"广东省","ch":[{"c":"4401","n":"广州市","ch":[{"c":"440103","n":"荔湾区"},{"c":"440104","n":"越秀区"},{"c":"440105","n":"海珠区"},{"c":"440106","n":"天河区"},{"c":"440111","n":"白云区"},{"c":"440112","n":"黄埔区"},{"c":"440113","n":"番禺区"},{"c":"440114","n":"花都区"},{"c":"440115","n":"南沙区"},{"c":"440117","n":"从化区"},{"c":"440118","n":"增城区"}]},{"c":"4402","n":"韶关市","ch":[{"c":"440203","n":"武江区"},{"c":"440204","n":"浈江区"},{"c":"440205","n":"曲江区"},{"c":"440222","n":"始兴县"},{"c":"440224","n":"仁化县"},{"c":"440229","n":"翁源县"},{"c":"440232","n":"乳源瑶族自治县"},{"c":"440233","n":"新丰县"},{"c":"440281","n":"乐昌市"},{"c":"440282","n":"南雄市"}]},{"c":"4403","n":"深圳市","ch":[{"c":"440303","n":"罗湖区"},{"c":"440304","n":"福田区"},{"c":"440305","n":"南山区"},{"c":"440306","n":"宝安区"},{"c":"440307","n":"龙岗区"},{"c":"440308","n":"盐田区"},{"c":"440309","n":"龙华区"},{"c":"440310","n":"坪山区"},{"c":"440311","n":"光明区"}]},{"c":"4404","n":"珠海市","ch":[{"c":"440402","n":"香洲区"},{"c":"440403","n":"斗门区"},{"c":"440404","n":"金湾区"}]},{"c":"4405","n":"汕头市","ch":[{"c":"440507","n":"龙湖区"},{"c":"440511","n":"金平区"},{"c":"440512","n":"濠江区"},{"c":"440513","n":"潮阳区"},{"c":"440514","n":"潮南区"},{"c":"440515","n":"澄海区"},{"c":"440523","n":"南澳县"}]},{"c":"4406","n":"佛山市","ch":[{"c":"440604","n":"禅城区"},{"c":"440605","n":"南海区"},{"c":"440606","n":"顺德区"},{"c":"440607","n":"三水区"},{"c":"440608","n":"高明区"}]},{"c":"4407","n":"江门市","ch":[{"c":"440703","n":"蓬江区"},{"c":"440704","n":"江海区"},{"c":"440705","n":"新会区"},{"c":"440781","n":"台山市"},{"c":"440783","n":"开平市"},{"c":"440784","n":"鹤山市"},{"c":"440785","n":"恩平市"}]},{"c":"4408","n":"湛江市","ch":[{"c":"440802","n":"赤坎区"},{"c":"440803","n":"霞山区"},{"c":"440804","n":"坡头区"},{"c":"440811","n":"麻章区"},{"c":"440823","n":"遂溪县"},{"c":"440825","n":"徐闻县"},{"c":"440881","n":"廉江市"},{"c":"440882","n":"雷州市"},{"c":"440883","n":"吴川市"}]},{"c":"4409","n":"茂名市","ch":[{"c":"440902","n":"茂南区"},{"c":"440904","n":"电白区"},{"c":"440981","n":"高州市"},{"c":"440982","n":"化州市"},{"c":"440983","n":"信宜市"}]},{"c":"4412","n":"肇庆市","ch":[{"c":"441202","n":"端州区"},{"c":"441203","n":"鼎湖区"},{"c":"441204","n":"高要区"},{"c":"441223","n":"广宁县"},{"c":"441224","n":"怀集县"},{"c":"441225","n":"封开县"},{"c":"441226","n":"德庆县"},{"c":"441284","n":"四会市"}]},{"c":"4413","n":"惠州市","ch":[{"c":"441302","n":"惠城区"},{"c":"441303","n":"惠阳区"},{"c":"441322","n":"博罗县"},{"c":"441323","n":"惠东县"},{"c":"441324","n":"龙门县"}]},{"c":"4414","n":"梅州市","ch":[{"c":"441402","n":"梅江区"},{"c":"441403","n":"梅县区"},{"c":"441422","n":"大埔县"},{"c":"441423","n":"丰顺县"},{"c":"441424","n":"五华县"},{"c":"441426","n":"平远县"},{"c":"441427","n":"蕉岭县"},{"c":"441481","n":"兴宁市"}]},{"c":"4415","n":"汕尾市","ch":[{"c":"441502","n":"城区"},{"c":"441521","n":"海丰县"},{"c":"441523","n":"陆河县"},{"c":"441581","n":"陆丰市"}]},{"c":"4416","n":"河源市","ch":[{"c":"441602","n":"源城区"},{"c":"441621","n":"紫金县"},{"c":"441622","n":"龙川县"},{"c":"441623","n":"连平县"},{"c":"441624","n":"和平县"},{"c":"441625","n":"东源县"}]},{"c":"4417","n":"阳江市","ch":[{"c":"441702","n":"江城区"},{"c":"441704","n":"阳东区"},{"c":"441721","n":"阳西县"},{"c":"441781","n":"阳春市"}]},{"c":"4418","n":"清远市","ch":[{"c":"441802","n":"清城区"},{"c":"441803","n":"清新区"},{"c":"441821","n":"佛冈县"},{"c":"441823","n":"阳山县"},{"c":"441825","n":"连山壮族瑶族自治县"},{"c":"441826","n":"连南瑶族自治县"},{"c":"441881","n":"英德市"},{"c":"441882","n":"连州市"}]},{"c":"4419","n":"东莞市","ch":[{"c":"441900003000","n":"东城街道"},{"c":"441900004000","n":"南城街道"},{"c":"441900005000","n":"万江街道"},{"c":"441900006000","n":"莞城街道"},{"c":"441900101000","n":"石碣镇"},{"c":"441900102000","n":"石龙镇"},{"c":"441900103000","n":"茶山镇"},{"c":"441900104000","n":"石排镇"},{"c":"441900105000","n":"企石镇"},{"c":"441900106000","n":"横沥镇"},{"c":"441900107000","n":"桥头镇"},{"c":"441900108000","n":"谢岗镇"},{"c":"441900109000","n":"东坑镇"},{"c":"441900110000","n":"常平镇"},{"c":"441900111000","n":"寮步镇"},{"c":"441900112000","n":"樟木头镇"},{"c":"441900113000","n":"大朗镇"},{"c":"441900114000","n":"黄江镇"},{"c":"441900115000","n":"清溪镇"},{"c":"441900116000","n":"塘厦镇"},{"c":"441900117000","n":"凤岗镇"},{"c":"441900118000","n":"大岭山镇"},{"c":"441900119000","n":"长安镇"},{"c":"441900121000","n":"虎门镇"},{"c":"441900122000","n":"厚街镇"},{"c":"441900123000","n":"沙田镇"},{"c":"441900124000","n":"道滘镇"},{"c":"441900125000","n":"洪梅镇"},{"c":"441900126000","n":"麻涌镇"},{"c":"441900127000","n":"望牛墩镇"},{"c":"441900128000","n":"中堂镇"},{"c":"441900129000","n":"高埗镇"},{"c":"441900401000","n":"松山湖"},{"c":"441900402000","n":"东莞港"},{"c":"441900403000","n":"东莞生态园"},{"c":"441900404000","n":"东莞滨海湾新区"}]},{"c":"4420","n":"中山市","ch":[{"c":"442000001000","n":"石岐街道"},{"c":"442000002000","n":"东区街道"},{"c":"442000003000","n":"中山港街道"},{"c":"442000004000","n":"西区街道"},{"c":"442000005000","n":"南区街道"},{"c":"442000006000","n":"五桂山街道"},{"c":"442000007000","n":"民众街道"},{"c":"442000008000","n":"南朗街道"},{"c":"442000101000","n":"黄圃镇"},{"c":"442000103000","n":"东凤镇"},{"c":"442000105000","n":"古镇镇"},{"c":"442000106000","n":"沙溪镇"},{"c":"442000107000","n":"坦洲镇"},{"c":"442000108000","n":"港口镇"},{"c":"442000109000","n":"三角镇"},{"c":"442000110000","n":"横栏镇"},{"c":"442000111000","n":"南头镇"},{"c":"442000112000","n":"阜沙镇"},{"c":"442000114000","n":"三乡镇"},{"c":"442000115000","n":"板芙镇"},{"c":"442000116000","n":"大涌镇"},{"c":"442000117000","n":"神湾镇"},{"c":"442000118000","n":"小榄镇"}]},{"c":"4451","n":"潮州市","ch":[{"c":"445102","n":"湘桥区"},{"c":"445103","n":"潮安区"},{"c":"445122","n":"饶平县"}]},{"c":"4452","n":"揭阳市","ch":[{"c":"445202","n":"榕城区"},{"c":"445203","n":"揭东区"},{"c":"445222","n":"揭西县"},{"c":"445224","n":"惠来县"},{"c":"445281","n":"普宁市"}]},{"c":"4453","n":"云浮市","ch":[{"c":"445302","n":"云城区"},{"c":"445303","n":"云安区"},{"c":"445321","n":"新兴县"},{"c":"445322","n":"郁南县"},{"c":"445381","n":"罗定市"}]}]},{"c":45,"n":"广西壮族自治区","ch":[{"c":"4501","n":"南宁市","ch":[{"c":"450102","n":"兴宁区"},{"c":"450103","n":"青秀区"},{"c":"450105","n":"江南区"},{"c":"450107","n":"西乡塘区"},{"c":"450108","n":"良庆区"},{"c":"450109","n":"邕宁区"},{"c":"450110","n":"武鸣区"},{"c":"450123","n":"隆安县"},{"c":"450124","n":"马山县"},{"c":"450125","n":"上林县"},{"c":"450126","n":"宾阳县"},{"c":"450181","n":"横州市"}]},{"c":"4502","n":"柳州市","ch":[{"c":"450202","n":"城中区"},{"c":"450203","n":"鱼峰区"},{"c":"450204","n":"柳南区"},{"c":"450205","n":"柳北区"},{"c":"450206","n":"柳江区"},{"c":"450222","n":"柳城县"},{"c":"450223","n":"鹿寨县"},{"c":"450224","n":"融安县"},{"c":"450225","n":"融水苗族自治县"},{"c":"450226","n":"三江侗族自治县"}]},{"c":"4503","n":"桂林市","ch":[{"c":"450302","n":"秀峰区"},{"c":"450303","n":"叠彩区"},{"c":"450304","n":"象山区"},{"c":"450305","n":"七星区"},{"c":"450311","n":"雁山区"},{"c":"450312","n":"临桂区"},{"c":"450321","n":"阳朔县"},{"c":"450323","n":"灵川县"},{"c":"450324","n":"全州县"},{"c":"450325","n":"兴安县"},{"c":"450326","n":"永福县"},{"c":"450327","n":"灌阳县"},{"c":"450328","n":"龙胜各族自治县"},{"c":"450329","n":"资源县"},{"c":"450330","n":"平乐县"},{"c":"450332","n":"恭城瑶族自治县"},{"c":"450381","n":"荔浦市"}]},{"c":"4504","n":"梧州市","ch":[{"c":"450403","n":"万秀区"},{"c":"450405","n":"长洲区"},{"c":"450406","n":"龙圩区"},{"c":"450421","n":"苍梧县"},{"c":"450422","n":"藤县"},{"c":"450423","n":"蒙山县"},{"c":"450481","n":"岑溪市"}]},{"c":"4505","n":"北海市","ch":[{"c":"450502","n":"海城区"},{"c":"450503","n":"银海区"},{"c":"450512","n":"铁山港区"},{"c":"450521","n":"合浦县"}]},{"c":"4506","n":"防城港市","ch":[{"c":"450602","n":"港口区"},{"c":"450603","n":"防城区"},{"c":"450621","n":"上思县"},{"c":"450681","n":"东兴市"}]},{"c":"4507","n":"钦州市","ch":[{"c":"450702","n":"钦南区"},{"c":"450703","n":"钦北区"},{"c":"450721","n":"灵山县"},{"c":"450722","n":"浦北县"}]},{"c":"4508","n":"贵港市","ch":[{"c":"450802","n":"港北区"},{"c":"450803","n":"港南区"},{"c":"450804","n":"覃塘区"},{"c":"450821","n":"平南县"},{"c":"450881","n":"桂平市"}]},{"c":"4509","n":"玉林市","ch":[{"c":"450902","n":"玉州区"},{"c":"450903","n":"福绵区"},{"c":"450921","n":"容县"},{"c":"450922","n":"陆川县"},{"c":"450923","n":"博白县"},{"c":"450924","n":"兴业县"},{"c":"450981","n":"北流市"}]},{"c":"4510","n":"百色市","ch":[{"c":"451002","n":"右江区"},{"c":"451003","n":"田阳区"},{"c":"451022","n":"田东县"},{"c":"451024","n":"德保县"},{"c":"451026","n":"那坡县"},{"c":"451027","n":"凌云县"},{"c":"451028","n":"乐业县"},{"c":"451029","n":"田林县"},{"c":"451030","n":"西林县"},{"c":"451031","n":"隆林各族自治县"},{"c":"451081","n":"靖西市"},{"c":"451082","n":"平果市"}]},{"c":"4511","n":"贺州市","ch":[{"c":"451102","n":"八步区"},{"c":"451103","n":"平桂区"},{"c":"451121","n":"昭平县"},{"c":"451122","n":"钟山县"},{"c":"451123","n":"富川瑶族自治县"}]},{"c":"4512","n":"河池市","ch":[{"c":"451202","n":"金城江区"},{"c":"451203","n":"宜州区"},{"c":"451221","n":"南丹县"},{"c":"451222","n":"天峨县"},{"c":"451223","n":"凤山县"},{"c":"451224","n":"东兰县"},{"c":"451225","n":"罗城仫佬族自治县"},{"c":"451226","n":"环江毛南族自治县"},{"c":"451227","n":"巴马瑶族自治县"},{"c":"451228","n":"都安瑶族自治县"},{"c":"451229","n":"大化瑶族自治县"}]},{"c":"4513","n":"来宾市","ch":[{"c":"451302","n":"兴宾区"},{"c":"451321","n":"忻城县"},{"c":"451322","n":"象州县"},{"c":"451323","n":"武宣县"},{"c":"451324","n":"金秀瑶族自治县"},{"c":"451381","n":"合山市"}]},{"c":"4514","n":"崇左市","ch":[{"c":"451402","n":"江州区"},{"c":"451421","n":"扶绥县"},{"c":"451422","n":"宁明县"},{"c":"451423","n":"龙州县"},{"c":"451424","n":"大新县"},{"c":"451425","n":"天等县"},{"c":"451481","n":"凭祥市"}]}]},{"c":46,"n":"海南省","ch":[{"c":"4601","n":"海口市","ch":[{"c":"460105","n":"秀英区"},{"c":"460106","n":"龙华区"},{"c":"460107","n":"琼山区"},{"c":"460108","n":"美兰区"}]},{"c":"4602","n":"三亚市","ch":[{"c":"460202","n":"海棠区"},{"c":"460203","n":"吉阳区"},{"c":"460204","n":"天涯区"},{"c":"460205","n":"崖州区"}]},{"c":"4603","n":"三沙市","ch":[{"c":"460302","n":"西沙区"},{"c":"460303","n":"南沙区"}]},{"c":"4604","n":"儋州市","ch":[{"c":"460400001000","n":"三都街道"},{"c":"460400100000","n":"那大镇"},{"c":"460400101000","n":"和庆镇"},{"c":"460400102000","n":"南丰镇"},{"c":"460400103000","n":"大成镇"},{"c":"460400104000","n":"雅星镇"},{"c":"460400105000","n":"兰洋镇"},{"c":"460400106000","n":"光村镇"},{"c":"460400107000","n":"木棠镇"},{"c":"460400108000","n":"海头镇"},{"c":"460400109000","n":"峨蔓镇"},{"c":"460400111000","n":"王五镇"},{"c":"460400112000","n":"白马井镇"},{"c":"460400113000","n":"中和镇"},{"c":"460400114000","n":"排浦镇"},{"c":"460400115000","n":"东成镇"},{"c":"460400116000","n":"新州镇"},{"c":"460400499000","n":"洋浦经济开发区"},{"c":"460400500000","n":"华南热作学院"}]},{"c":"4690","n":"海南省","ch":[{"c":"469001","n":"五指山市"},{"c":"469002","n":"琼海市"},{"c":"469005","n":"文昌市"},{"c":"469006","n":"万宁市"},{"c":"469007","n":"东方市"},{"c":"469021","n":"定安县"},{"c":"469022","n":"屯昌县"},{"c":"469023","n":"澄迈县"},{"c":"469024","n":"临高县"},{"c":"469025","n":"白沙黎族自治县"},{"c":"469026","n":"昌江黎族自治县"},{"c":"469027","n":"乐东黎族自治县"},{"c":"469028","n":"陵水黎族自治县"},{"c":"469029","n":"保亭黎族苗族自治县"},{"c":"469030","n":"琼中黎族苗族自治县"}]}]},{"c":50,"n":"重庆市","ch":[{"c":"5001","n":"重庆市","ch":[{"c":"500101","n":"万州区"},{"c":"500102","n":"涪陵区"},{"c":"500103","n":"渝中区"},{"c":"500104","n":"大渡口区"},{"c":"500106","n":"沙坪坝区"},{"c":"500107","n":"九龙坡区"},{"c":"500108","n":"南岸区"},{"c":"500109","n":"北碚区"},{"c":"500110","n":"綦江区"},{"c":"500111","n":"大足区"},{"c":"500113","n":"巴南区"},{"c":"500114","n":"黔江区"},{"c":"500115","n":"长寿区"},{"c":"500116","n":"江津区"},{"c":"500117","n":"合川区"},{"c":"500118","n":"永川区"},{"c":"500119","n":"南川区"},{"c":"500120","n":"璧山区"},{"c":"500151","n":"铜梁区"},{"c":"500152","n":"潼南区"},{"c":"500153","n":"荣昌区"},{"c":"500154","n":"开州区"},{"c":"500155","n":"梁平区"},{"c":"500156","n":"武隆区"},{"c":"500157","n":"两江新区"}]},{"c":"5002","n":"县","ch":[{"c":"500229","n":"城口县"},{"c":"500230","n":"丰都县"},{"c":"500231","n":"垫江县"},{"c":"500233","n":"忠县"},{"c":"500235","n":"云阳县"},{"c":"500236","n":"奉节县"},{"c":"500237","n":"巫山县"},{"c":"500238","n":"巫溪县"},{"c":"500240","n":"石柱土家族自治县"},{"c":"500241","n":"秀山土家族苗族自治县"},{"c":"500242","n":"酉阳土家族苗族自治县"},{"c":"500243","n":"彭水苗族土家族自治县"}]}]},{"c":51,"n":"四川省","ch":[{"c":"5101","n":"成都市","ch":[{"c":"510104","n":"锦江区"},{"c":"510105","n":"青羊区"},{"c":"510106","n":"金牛区"},{"c":"510107","n":"武侯区"},{"c":"510108","n":"成华区"},{"c":"510112","n":"龙泉驿区"},{"c":"510113","n":"青白江区"},{"c":"510114","n":"新都区"},{"c":"510115","n":"温江区"},{"c":"510116","n":"双流区"},{"c":"510117","n":"郫都区"},{"c":"510118","n":"新津区"},{"c":"510121","n":"金堂县"},{"c":"510129","n":"大邑县"},{"c":"510131","n":"蒲江县"},{"c":"510181","n":"都江堰市"},{"c":"510182","n":"彭州市"},{"c":"510183","n":"邛崃市"},{"c":"510184","n":"崇州市"},{"c":"510185","n":"简阳市"}]},{"c":"5103","n":"自贡市","ch":[{"c":"510302","n":"自流井区"},{"c":"510303","n":"贡井区"},{"c":"510304","n":"大安区"},{"c":"510311","n":"沿滩区"},{"c":"510321","n":"荣县"},{"c":"510322","n":"富顺县"}]},{"c":"5104","n":"攀枝花市","ch":[{"c":"510402","n":"东区"},{"c":"510403","n":"西区"},{"c":"510411","n":"仁和区"},{"c":"510421","n":"米易县"},{"c":"510422","n":"盐边县"}]},{"c":"5105","n":"泸州市","ch":[{"c":"510502","n":"江阳区"},{"c":"510503","n":"纳溪区"},{"c":"510504","n":"龙马潭区"},{"c":"510521","n":"泸县"},{"c":"510522","n":"合江县"},{"c":"510524","n":"叙永县"},{"c":"510525","n":"古蔺县"}]},{"c":"5106","n":"德阳市","ch":[{"c":"510603","n":"旌阳区"},{"c":"510604","n":"罗江区"},{"c":"510623","n":"中江县"},{"c":"510681","n":"广汉市"},{"c":"510682","n":"什邡市"},{"c":"510683","n":"绵竹市"}]},{"c":"5107","n":"绵阳市","ch":[{"c":"510703","n":"涪城区"},{"c":"510704","n":"游仙区"},{"c":"510705","n":"安州区"},{"c":"510722","n":"三台县"},{"c":"510723","n":"盐亭县"},{"c":"510725","n":"梓潼县"},{"c":"510726","n":"北川羌族自治县"},{"c":"510727","n":"平武县"},{"c":"510781","n":"江油市"}]},{"c":"5108","n":"广元市","ch":[{"c":"510802","n":"利州区"},{"c":"510811","n":"昭化区"},{"c":"510812","n":"朝天区"},{"c":"510821","n":"旺苍县"},{"c":"510822","n":"青川县"},{"c":"510823","n":"剑阁县"},{"c":"510824","n":"苍溪县"}]},{"c":"5109","n":"遂宁市","ch":[{"c":"510903","n":"船山区"},{"c":"510904","n":"安居区"},{"c":"510921","n":"蓬溪县"},{"c":"510923","n":"大英县"},{"c":"510981","n":"射洪市"}]},{"c":"5110","n":"内江市","ch":[{"c":"511002","n":"市中区"},{"c":"511011","n":"东兴区"},{"c":"511024","n":"威远县"},{"c":"511025","n":"资中县"},{"c":"511083","n":"隆昌市"}]},{"c":"5111","n":"乐山市","ch":[{"c":"511102","n":"市中区"},{"c":"511111","n":"沙湾区"},{"c":"511112","n":"五通桥区"},{"c":"511113","n":"金口河区"},{"c":"511123","n":"犍为县"},{"c":"511124","n":"井研县"},{"c":"511126","n":"夹江县"},{"c":"511129","n":"沐川县"},{"c":"511132","n":"峨边彝族自治县"},{"c":"511133","n":"马边彝族自治县"},{"c":"511181","n":"峨眉山市"}]},{"c":"5113","n":"南充市","ch":[{"c":"511302","n":"顺庆区"},{"c":"511303","n":"高坪区"},{"c":"511304","n":"嘉陵区"},{"c":"511321","n":"南部县"},{"c":"511322","n":"营山县"},{"c":"511323","n":"蓬安县"},{"c":"511324","n":"仪陇县"},{"c":"511325","n":"西充县"},{"c":"511381","n":"阆中市"}]},{"c":"5114","n":"眉山市","ch":[{"c":"511402","n":"东坡区"},{"c":"511403","n":"彭山区"},{"c":"511421","n":"仁寿县"},{"c":"511423","n":"洪雅县"},{"c":"511424","n":"丹棱县"},{"c":"511425","n":"青神县"}]},{"c":"5115","n":"宜宾市","ch":[{"c":"511502","n":"翠屏区"},{"c":"511503","n":"南溪区"},{"c":"511504","n":"叙州区"},{"c":"511523","n":"江安县"},{"c":"511524","n":"长宁县"},{"c":"511525","n":"高县"},{"c":"511526","n":"珙县"},{"c":"511527","n":"筠连县"},{"c":"511528","n":"兴文县"},{"c":"511529","n":"屏山县"}]},{"c":"5116","n":"广安市","ch":[{"c":"511602","n":"广安区"},{"c":"511603","n":"前锋区"},{"c":"511621","n":"岳池县"},{"c":"511622","n":"武胜县"},{"c":"511623","n":"邻水县"},{"c":"511681","n":"华蓥市"}]},{"c":"5117","n":"达州市","ch":[{"c":"511702","n":"通川区"},{"c":"511703","n":"达川区"},{"c":"511722","n":"宣汉县"},{"c":"511723","n":"开江县"},{"c":"511724","n":"大竹县"},{"c":"511725","n":"渠县"},{"c":"511781","n":"万源市"}]},{"c":"5118","n":"雅安市","ch":[{"c":"511802","n":"雨城区"},{"c":"511803","n":"名山区"},{"c":"511822","n":"荥经县"},{"c":"511823","n":"汉源县"},{"c":"511824","n":"石棉县"},{"c":"511825","n":"天全县"},{"c":"511826","n":"芦山县"},{"c":"511827","n":"宝兴县"}]},{"c":"5119","n":"巴中市","ch":[{"c":"511902","n":"巴州区"},{"c":"511903","n":"恩阳区"},{"c":"511921","n":"通江县"},{"c":"511922","n":"南江县"},{"c":"511923","n":"平昌县"}]},{"c":"5120","n":"资阳市","ch":[{"c":"512002","n":"雁江区"},{"c":"512021","n":"安岳县"},{"c":"512022","n":"乐至县"}]},{"c":"5132","n":"阿坝藏族羌族自治州","ch":[{"c":"513201","n":"马尔康市"},{"c":"513221","n":"汶川县"},{"c":"513222","n":"理县"},{"c":"513223","n":"茂县"},{"c":"513224","n":"松潘县"},{"c":"513225","n":"九寨沟县"},{"c":"513226","n":"金川县"},{"c":"513227","n":"小金县"},{"c":"513228","n":"黑水县"},{"c":"513230","n":"壤塘县"},{"c":"513231","n":"阿坝县"},{"c":"513232","n":"若尔盖县"},{"c":"513233","n":"红原县"}]},{"c":"5133","n":"甘孜藏族自治州","ch":[{"c":"513301","n":"康定市"},{"c":"513322","n":"泸定县"},{"c":"513323","n":"丹巴县"},{"c":"513324","n":"九龙县"},{"c":"513325","n":"雅江县"},{"c":"513326","n":"道孚县"},{"c":"513327","n":"炉霍县"},{"c":"513328","n":"甘孜县"},{"c":"513329","n":"新龙县"},{"c":"513330","n":"德格县"},{"c":"513331","n":"白玉县"},{"c":"513332","n":"石渠县"},{"c":"513333","n":"色达县"},{"c":"513334","n":"理塘县"},{"c":"513335","n":"巴塘县"},{"c":"513336","n":"乡城县"},{"c":"513337","n":"稻城县"},{"c":"513338","n":"得荣县"}]},{"c":"5134","n":"凉山彝族自治州","ch":[{"c":"513401","n":"西昌市"},{"c":"513402","n":"会理市"},{"c":"513422","n":"木里藏族自治县"},{"c":"513423","n":"盐源县"},{"c":"513424","n":"德昌县"},{"c":"513426","n":"会东县"},{"c":"513427","n":"宁南县"},{"c":"513428","n":"普格县"},{"c":"513429","n":"布拖县"},{"c":"513430","n":"金阳县"},{"c":"513431","n":"昭觉县"},{"c":"513432","n":"喜德县"},{"c":"513433","n":"冕宁县"},{"c":"513434","n":"越西县"},{"c":"513435","n":"甘洛县"},{"c":"513436","n":"美姑县"},{"c":"513437","n":"雷波县"}]}]},{"c":52,"n":"贵州省","ch":[{"c":"5201","n":"贵阳市","ch":[{"c":"520102","n":"南明区"},{"c":"520103","n":"云岩区"},{"c":"520111","n":"花溪区"},{"c":"520112","n":"乌当区"},{"c":"520113","n":"白云区"},{"c":"520115","n":"观山湖区"},{"c":"520121","n":"开阳县"},{"c":"520122","n":"息烽县"},{"c":"520123","n":"修文县"},{"c":"520181","n":"清镇市"}]},{"c":"5202","n":"六盘水市","ch":[{"c":"520201","n":"钟山区"},{"c":"520203","n":"六枝特区"},{"c":"520204","n":"水城区"},{"c":"520281","n":"盘州市"}]},{"c":"5203","n":"遵义市","ch":[{"c":"520302","n":"红花岗区"},{"c":"520303","n":"汇川区"},{"c":"520304","n":"播州区"},{"c":"520322","n":"桐梓县"},{"c":"520323","n":"绥阳县"},{"c":"520324","n":"正安县"},{"c":"520325","n":"道真仡佬族苗族自治县"},{"c":"520326","n":"务川仡佬族苗族自治县"},{"c":"520327","n":"凤冈县"},{"c":"520328","n":"湄潭县"},{"c":"520329","n":"余庆县"},{"c":"520330","n":"习水县"},{"c":"520381","n":"赤水市"},{"c":"520382","n":"仁怀市"}]},{"c":"5204","n":"安顺市","ch":[{"c":"520402","n":"西秀区"},{"c":"520403","n":"平坝区"},{"c":"520422","n":"普定县"},{"c":"520423","n":"镇宁布依族苗族自治县"},{"c":"520424","n":"关岭布依族苗族自治县"},{"c":"520425","n":"紫云苗族布依族自治县"}]},{"c":"5205","n":"毕节市","ch":[{"c":"520502","n":"七星关区"},{"c":"520521","n":"大方县"},{"c":"520523","n":"金沙县"},{"c":"520524","n":"织金县"},{"c":"520525","n":"纳雍县"},{"c":"520526","n":"威宁彝族回族苗族自治县"},{"c":"520527","n":"赫章县"},{"c":"520581","n":"黔西市"}]},{"c":"5206","n":"铜仁市","ch":[{"c":"520602","n":"碧江区"},{"c":"520603","n":"万山区"},{"c":"520621","n":"江口县"},{"c":"520622","n":"玉屏侗族自治县"},{"c":"520623","n":"石阡县"},{"c":"520624","n":"思南县"},{"c":"520625","n":"印江土家族苗族自治县"},{"c":"520626","n":"德江县"},{"c":"520627","n":"沿河土家族自治县"},{"c":"520628","n":"松桃苗族自治县"}]},{"c":"5223","n":"黔西南布依族苗族自治州","ch":[{"c":"522301","n":"兴义市"},{"c":"522302","n":"兴仁市"},{"c":"522323","n":"普安县"},{"c":"522324","n":"晴隆县"},{"c":"522325","n":"贞丰县"},{"c":"522326","n":"望谟县"},{"c":"522327","n":"册亨县"},{"c":"522328","n":"安龙县"}]},{"c":"5226","n":"黔东南苗族侗族自治州","ch":[{"c":"522601","n":"凯里市"},{"c":"522622","n":"黄平县"},{"c":"522623","n":"施秉县"},{"c":"522624","n":"三穗县"},{"c":"522625","n":"镇远县"},{"c":"522626","n":"岑巩县"},{"c":"522627","n":"天柱县"},{"c":"522628","n":"锦屏县"},{"c":"522629","n":"剑河县"},{"c":"522630","n":"台江县"},{"c":"522631","n":"黎平县"},{"c":"522632","n":"榕江县"},{"c":"522633","n":"从江县"},{"c":"522634","n":"雷山县"},{"c":"522635","n":"麻江县"},{"c":"522636","n":"丹寨县"}]},{"c":"5227","n":"黔南布依族苗族自治州","ch":[{"c":"522701","n":"都匀市"},{"c":"522702","n":"福泉市"},{"c":"522722","n":"荔波县"},{"c":"522723","n":"贵定县"},{"c":"522725","n":"瓮安县"},{"c":"522726","n":"独山县"},{"c":"522727","n":"平塘县"},{"c":"522728","n":"罗甸县"},{"c":"522729","n":"长顺县"},{"c":"522730","n":"龙里县"},{"c":"522731","n":"惠水县"},{"c":"522732","n":"三都水族自治县"}]}]},{"c":53,"n":"云南省","ch":[{"c":"5301","n":"昆明市","ch":[{"c":"530102","n":"五华区"},{"c":"530103","n":"盘龙区"},{"c":"530111","n":"官渡区"},{"c":"530112","n":"西山区"},{"c":"530113","n":"东川区"},{"c":"530114","n":"呈贡区"},{"c":"530115","n":"晋宁区"},{"c":"530124","n":"富民县"},{"c":"530125","n":"宜良县"},{"c":"530126","n":"石林彝族自治县"},{"c":"530127","n":"嵩明县"},{"c":"530128","n":"禄劝彝族苗族自治县"},{"c":"530129","n":"寻甸回族彝族自治县"},{"c":"530181","n":"安宁市"}]},{"c":"5303","n":"曲靖市","ch":[{"c":"530302","n":"麒麟区"},{"c":"530303","n":"沾益区"},{"c":"530304","n":"马龙区"},{"c":"530322","n":"陆良县"},{"c":"530323","n":"师宗县"},{"c":"530324","n":"罗平县"},{"c":"530325","n":"富源县"},{"c":"530326","n":"会泽县"},{"c":"530381","n":"宣威市"}]},{"c":"5304","n":"玉溪市","ch":[{"c":"530402","n":"红塔区"},{"c":"530403","n":"江川区"},{"c":"530423","n":"通海县"},{"c":"530424","n":"华宁县"},{"c":"530425","n":"易门县"},{"c":"530426","n":"峨山彝族自治县"},{"c":"530427","n":"新平彝族傣族自治县"},{"c":"530428","n":"元江哈尼族彝族傣族自治县"},{"c":"530481","n":"澄江市"}]},{"c":"5305","n":"保山市","ch":[{"c":"530502","n":"隆阳区"},{"c":"530521","n":"施甸县"},{"c":"530523","n":"龙陵县"},{"c":"530524","n":"昌宁县"},{"c":"530581","n":"腾冲市"}]},{"c":"5306","n":"昭通市","ch":[{"c":"530602","n":"昭阳区"},{"c":"530621","n":"鲁甸县"},{"c":"530622","n":"巧家县"},{"c":"530623","n":"盐津县"},{"c":"530624","n":"大关县"},{"c":"530625","n":"永善县"},{"c":"530626","n":"绥江县"},{"c":"530627","n":"镇雄县"},{"c":"530628","n":"彝良县"},{"c":"530629","n":"威信县"},{"c":"530681","n":"水富市"}]},{"c":"5307","n":"丽江市","ch":[{"c":"530702","n":"古城区"},{"c":"530721","n":"玉龙纳西族自治县"},{"c":"530722","n":"永胜县"},{"c":"530723","n":"华坪县"},{"c":"530724","n":"宁蒗彝族自治县"}]},{"c":"5308","n":"普洱市","ch":[{"c":"530802","n":"思茅区"},{"c":"530821","n":"宁洱哈尼族彝族自治县"},{"c":"530822","n":"墨江哈尼族自治县"},{"c":"530823","n":"景东彝族自治县"},{"c":"530824","n":"景谷傣族彝族自治县"},{"c":"530825","n":"镇沅彝族哈尼族拉祜族自治县"},{"c":"530826","n":"江城哈尼族彝族自治县"},{"c":"530827","n":"孟连傣族拉祜族佤族自治县"},{"c":"530828","n":"澜沧拉祜族自治县"},{"c":"530829","n":"西盟佤族自治县"}]},{"c":"5309","n":"临沧市","ch":[{"c":"530902","n":"临翔区"},{"c":"530921","n":"凤庆县"},{"c":"530922","n":"云县"},{"c":"530923","n":"永德县"},{"c":"530924","n":"镇康县"},{"c":"530925","n":"双江拉祜族佤族布朗族傣族自治县"},{"c":"530926","n":"耿马傣族佤族自治县"},{"c":"530927","n":"沧源佤族自治县"}]},{"c":"5323","n":"楚雄彝族自治州","ch":[{"c":"532301","n":"楚雄市"},{"c":"532302","n":"禄丰市"},{"c":"532322","n":"双柏县"},{"c":"532323","n":"牟定县"},{"c":"532324","n":"南华县"},{"c":"532325","n":"姚安县"},{"c":"532326","n":"大姚县"},{"c":"532327","n":"永仁县"},{"c":"532328","n":"元谋县"},{"c":"532329","n":"武定县"}]},{"c":"5325","n":"红河哈尼族彝族自治州","ch":[{"c":"532501","n":"个旧市"},{"c":"532502","n":"开远市"},{"c":"532503","n":"蒙自市"},{"c":"532504","n":"弥勒市"},{"c":"532523","n":"屏边苗族自治县"},{"c":"532524","n":"建水县"},{"c":"532525","n":"石屏县"},{"c":"532527","n":"泸西县"},{"c":"532528","n":"元阳县"},{"c":"532529","n":"红河县"},{"c":"532530","n":"金平苗族瑶族傣族自治县"},{"c":"532531","n":"绿春县"},{"c":"532532","n":"河口瑶族自治县"}]},{"c":"5326","n":"文山壮族苗族自治州","ch":[{"c":"532601","n":"文山市"},{"c":"532622","n":"砚山县"},{"c":"532623","n":"西畴县"},{"c":"532624","n":"麻栗坡县"},{"c":"532625","n":"马关县"},{"c":"532626","n":"丘北县"},{"c":"532627","n":"广南县"},{"c":"532628","n":"富宁县"}]},{"c":"5328","n":"西双版纳傣族自治州","ch":[{"c":"532801","n":"景洪市"},{"c":"532822","n":"勐海县"},{"c":"532823","n":"勐腊县"}]},{"c":"5329","n":"大理白族自治州","ch":[{"c":"532901","n":"大理市"},{"c":"532922","n":"漾濞彝族自治县"},{"c":"532923","n":"祥云县"},{"c":"532924","n":"宾川县"},{"c":"532925","n":"弥渡县"},{"c":"532926","n":"南涧彝族自治县"},{"c":"532927","n":"巍山彝族回族自治县"},{"c":"532928","n":"永平县"},{"c":"532929","n":"云龙县"},{"c":"532930","n":"洱源县"},{"c":"532931","n":"剑川县"},{"c":"532932","n":"鹤庆县"}]},{"c":"5331","n":"德宏傣族景颇族自治州","ch":[{"c":"533102","n":"瑞丽市"},{"c":"533103","n":"芒市"},{"c":"533122","n":"梁河县"},{"c":"533123","n":"盈江县"},{"c":"533124","n":"陇川县"}]},{"c":"5333","n":"怒江傈僳族自治州","ch":[{"c":"533301","n":"泸水市"},{"c":"533323","n":"福贡县"},{"c":"533324","n":"贡山独龙族怒族自治县"},{"c":"533325","n":"兰坪白族普米族自治县"}]},{"c":"5334","n":"迪庆藏族自治州","ch":[{"c":"533401","n":"香格里拉市"},{"c":"533422","n":"德钦县"},{"c":"533423","n":"维西傈僳族自治县"}]}]},{"c":54,"n":"西藏自治区","ch":[{"c":"5401","n":"拉萨市","ch":[{"c":"540102","n":"城关区"},{"c":"540103","n":"堆龙德庆区"},{"c":"540104","n":"达孜区"},{"c":"540121","n":"林周县"},{"c":"540122","n":"当雄县"},{"c":"540123","n":"尼木县"},{"c":"540124","n":"曲水县"},{"c":"540127","n":"墨竹工卡县"}]},{"c":"5402","n":"日喀则市","ch":[{"c":"540202","n":"桑珠孜区"},{"c":"540221","n":"南木林县"},{"c":"540222","n":"江孜县"},{"c":"540223","n":"定日县"},{"c":"540224","n":"萨迦县"},{"c":"540225","n":"拉孜县"},{"c":"540226","n":"昂仁县"},{"c":"540227","n":"谢通门县"},{"c":"540228","n":"白朗县"},{"c":"540229","n":"仁布县"},{"c":"540230","n":"康马县"},{"c":"540231","n":"定结县"},{"c":"540232","n":"仲巴县"},{"c":"540233","n":"亚东县"},{"c":"540234","n":"吉隆县"},{"c":"540235","n":"聂拉木县"},{"c":"540236","n":"萨嘎县"},{"c":"540237","n":"岗巴县"}]},{"c":"5403","n":"昌都市","ch":[{"c":"540302","n":"卡若区"},{"c":"540321","n":"江达县"},{"c":"540322","n":"贡觉县"},{"c":"540323","n":"类乌齐县"},{"c":"540324","n":"丁青县"},{"c":"540325","n":"察雅县"},{"c":"540326","n":"八宿县"},{"c":"540327","n":"左贡县"},{"c":"540328","n":"芒康县"},{"c":"540329","n":"洛隆县"},{"c":"540330","n":"边坝县"}]},{"c":"5404","n":"林芝市","ch":[{"c":"540402","n":"巴宜区"},{"c":"540421","n":"工布江达县"},{"c":"540423","n":"墨脱县"},{"c":"540424","n":"波密县"},{"c":"540425","n":"察隅县"},{"c":"540426","n":"朗县"},{"c":"540481","n":"米林市"}]},{"c":"5405","n":"山南市","ch":[{"c":"540502","n":"乃东区"},{"c":"540521","n":"扎囊县"},{"c":"540522","n":"贡嘎县"},{"c":"540523","n":"桑日县"},{"c":"540524","n":"琼结县"},{"c":"540525","n":"曲松县"},{"c":"540526","n":"措美县"},{"c":"540527","n":"洛扎县"},{"c":"540528","n":"加查县"},{"c":"540529","n":"隆子县"},{"c":"540531","n":"浪卡子县"},{"c":"540581","n":"错那市"}]},{"c":"5406","n":"那曲市","ch":[{"c":"540602","n":"色尼区"},{"c":"540621","n":"嘉黎县"},{"c":"540622","n":"比如县"},{"c":"540623","n":"聂荣县"},{"c":"540624","n":"安多县"},{"c":"540625","n":"申扎县"},{"c":"540626","n":"索县"},{"c":"540627","n":"班戈县"},{"c":"540628","n":"巴青县"},{"c":"540629","n":"尼玛县"},{"c":"540630","n":"双湖县"}]},{"c":"5425","n":"阿里地区","ch":[{"c":"542521","n":"普兰县"},{"c":"542522","n":"札达县"},{"c":"542523","n":"噶尔县"},{"c":"542524","n":"日土县"},{"c":"542525","n":"革吉县"},{"c":"542526","n":"改则县"},{"c":"542527","n":"措勤县"}]}]},{"c":61,"n":"陕西省","ch":[{"c":"6101","n":"西安市","ch":[{"c":"610102","n":"新城区"},{"c":"610103","n":"碑林区"},{"c":"610104","n":"莲湖区"},{"c":"610111","n":"灞桥区"},{"c":"610112","n":"未央区"},{"c":"610113","n":"雁塔区"},{"c":"610114","n":"阎良区"},{"c":"610115","n":"临潼区"},{"c":"610116","n":"长安区"},{"c":"610117","n":"高陵区"},{"c":"610118","n":"鄠邑区"},{"c":"610122","n":"蓝田县"},{"c":"610124","n":"周至县"}]},{"c":"6102","n":"铜川市","ch":[{"c":"610202","n":"王益区"},{"c":"610203","n":"印台区"},{"c":"610204","n":"耀州区"},{"c":"610222","n":"宜君县"}]},{"c":"6103","n":"宝鸡市","ch":[{"c":"610302","n":"渭滨区"},{"c":"610303","n":"金台区"},{"c":"610304","n":"陈仓区"},{"c":"610305","n":"凤翔区"},{"c":"610323","n":"岐山县"},{"c":"610324","n":"扶风县"},{"c":"610326","n":"眉县"},{"c":"610327","n":"陇县"},{"c":"610328","n":"千阳县"},{"c":"610329","n":"麟游县"},{"c":"610330","n":"凤县"},{"c":"610331","n":"太白县"}]},{"c":"6104","n":"咸阳市","ch":[{"c":"610402","n":"秦都区"},{"c":"610403","n":"杨陵区"},{"c":"610404","n":"渭城区"},{"c":"610422","n":"三原县"},{"c":"610423","n":"泾阳县"},{"c":"610424","n":"乾县"},{"c":"610425","n":"礼泉县"},{"c":"610426","n":"永寿县"},{"c":"610428","n":"长武县"},{"c":"610429","n":"旬邑县"},{"c":"610430","n":"淳化县"},{"c":"610431","n":"武功县"},{"c":"610481","n":"兴平市"},{"c":"610482","n":"彬州市"}]},{"c":"6105","n":"渭南市","ch":[{"c":"610502","n":"临渭区"},{"c":"610503","n":"华州区"},{"c":"610522","n":"潼关县"},{"c":"610523","n":"大荔县"},{"c":"610524","n":"合阳县"},{"c":"610525","n":"澄城县"},{"c":"610526","n":"蒲城县"},{"c":"610527","n":"白水县"},{"c":"610528","n":"富平县"},{"c":"610581","n":"韩城市"},{"c":"610582","n":"华阴市"}]},{"c":"6106","n":"延安市","ch":[{"c":"610602","n":"宝塔区"},{"c":"610603","n":"安塞区"},{"c":"610621","n":"延长县"},{"c":"610622","n":"延川县"},{"c":"610625","n":"志丹县"},{"c":"610626","n":"吴起县"},{"c":"610627","n":"甘泉县"},{"c":"610628","n":"富县"},{"c":"610629","n":"洛川县"},{"c":"610630","n":"宜川县"},{"c":"610631","n":"黄龙县"},{"c":"610632","n":"黄陵县"},{"c":"610681","n":"子长市"}]},{"c":"6107","n":"汉中市","ch":[{"c":"610702","n":"汉台区"},{"c":"610703","n":"南郑区"},{"c":"610722","n":"城固县"},{"c":"610723","n":"洋县"},{"c":"610724","n":"西乡县"},{"c":"610725","n":"勉县"},{"c":"610726","n":"宁强县"},{"c":"610727","n":"略阳县"},{"c":"610728","n":"镇巴县"},{"c":"610729","n":"留坝县"},{"c":"610730","n":"佛坪县"}]},{"c":"6108","n":"榆林市","ch":[{"c":"610802","n":"榆阳区"},{"c":"610803","n":"横山区"},{"c":"610822","n":"府谷县"},{"c":"610824","n":"靖边县"},{"c":"610825","n":"定边县"},{"c":"610826","n":"绥德县"},{"c":"610827","n":"米脂县"},{"c":"610828","n":"佳县"},{"c":"610829","n":"吴堡县"},{"c":"610830","n":"清涧县"},{"c":"610831","n":"子洲县"},{"c":"610881","n":"神木市"}]},{"c":"6109","n":"安康市","ch":[{"c":"610902","n":"汉滨区"},{"c":"610921","n":"汉阴县"},{"c":"610922","n":"石泉县"},{"c":"610923","n":"宁陕县"},{"c":"610924","n":"紫阳县"},{"c":"610925","n":"岚皋县"},{"c":"610926","n":"平利县"},{"c":"610927","n":"镇坪县"},{"c":"610929","n":"白河县"},{"c":"610981","n":"旬阳市"}]},{"c":"6110","n":"商洛市","ch":[{"c":"611002","n":"商州区"},{"c":"611021","n":"洛南县"},{"c":"611022","n":"丹凤县"},{"c":"611023","n":"商南县"},{"c":"611024","n":"山阳县"},{"c":"611025","n":"镇安县"},{"c":"611026","n":"柞水县"}]}]},{"c":62,"n":"甘肃省","ch":[{"c":"6201","n":"兰州市","ch":[{"c":"620102","n":"城关区"},{"c":"620103","n":"七里河区"},{"c":"620104","n":"西固区"},{"c":"620105","n":"安宁区"},{"c":"620111","n":"红古区"},{"c":"620121","n":"永登县"},{"c":"620122","n":"皋兰县"},{"c":"620123","n":"榆中县"}]},{"c":"6202","n":"嘉峪关市","ch":[{"c":"620200001000","n":"第一街道"},{"c":"620200002000","n":"雄关街道"},{"c":"620200003000","n":"钢城街道"},{"c":"620200100000","n":"峪泉镇"},{"c":"620200101000","n":"新城镇"},{"c":"620200102000","n":"文殊镇"}]},{"c":"6203","n":"金昌市","ch":[{"c":"620302","n":"金川区"},{"c":"620321","n":"永昌县"}]},{"c":"6204","n":"白银市","ch":[{"c":"620402","n":"白银区"},{"c":"620403","n":"平川区"},{"c":"620421","n":"靖远县"},{"c":"620422","n":"会宁县"},{"c":"620423","n":"景泰县"}]},{"c":"6205","n":"天水市","ch":[{"c":"620502","n":"秦州区"},{"c":"620503","n":"麦积区"},{"c":"620521","n":"清水县"},{"c":"620522","n":"秦安县"},{"c":"620523","n":"甘谷县"},{"c":"620524","n":"武山县"},{"c":"620525","n":"张家川回族自治县"}]},{"c":"6206","n":"武威市","ch":[{"c":"620602","n":"凉州区"},{"c":"620621","n":"民勤县"},{"c":"620622","n":"古浪县"},{"c":"620623","n":"天祝藏族自治县"}]},{"c":"6207","n":"张掖市","ch":[{"c":"620702","n":"甘州区"},{"c":"620721","n":"肃南裕固族自治县"},{"c":"620722","n":"民乐县"},{"c":"620723","n":"临泽县"},{"c":"620724","n":"高台县"},{"c":"620725","n":"山丹县"}]},{"c":"6208","n":"平凉市","ch":[{"c":"620802","n":"崆峒区"},{"c":"620821","n":"泾川县"},{"c":"620822","n":"灵台县"},{"c":"620823","n":"崇信县"},{"c":"620825","n":"庄浪县"},{"c":"620826","n":"静宁县"},{"c":"620881","n":"华亭市"}]},{"c":"6209","n":"酒泉市","ch":[{"c":"620902","n":"肃州区"},{"c":"620921","n":"金塔县"},{"c":"620922","n":"瓜州县"},{"c":"620923","n":"肃北蒙古族自治县"},{"c":"620924","n":"阿克塞哈萨克族自治县"},{"c":"620981","n":"玉门市"},{"c":"620982","n":"敦煌市"}]},{"c":"6210","n":"庆阳市","ch":[{"c":"621002","n":"西峰区"},{"c":"621021","n":"庆城县"},{"c":"621022","n":"环县"},{"c":"621023","n":"华池县"},{"c":"621024","n":"合水县"},{"c":"621025","n":"正宁县"},{"c":"621026","n":"宁县"},{"c":"621027","n":"镇原县"}]},{"c":"6211","n":"定西市","ch":[{"c":"621102","n":"安定区"},{"c":"621121","n":"通渭县"},{"c":"621122","n":"陇西县"},{"c":"621123","n":"渭源县"},{"c":"621124","n":"临洮县"},{"c":"621125","n":"漳县"},{"c":"621126","n":"岷县"}]},{"c":"6212","n":"陇南市","ch":[{"c":"621202","n":"武都区"},{"c":"621221","n":"成县"},{"c":"621222","n":"文县"},{"c":"621223","n":"宕昌县"},{"c":"621224","n":"康县"},{"c":"621225","n":"西和县"},{"c":"621226","n":"礼县"},{"c":"621227","n":"徽县"},{"c":"621228","n":"两当县"}]},{"c":"6229","n":"临夏回族自治州","ch":[{"c":"622901","n":"临夏市"},{"c":"622921","n":"临夏县"},{"c":"622922","n":"康乐县"},{"c":"622923","n":"永靖县"},{"c":"622924","n":"广河县"},{"c":"622925","n":"和政县"},{"c":"622926","n":"东乡族自治县"},{"c":"622927","n":"积石山保安族东乡族撒拉族自治县"}]},{"c":"6230","n":"甘南藏族自治州","ch":[{"c":"623001","n":"合作市"},{"c":"623021","n":"临潭县"},{"c":"623022","n":"卓尼县"},{"c":"623023","n":"舟曲县"},{"c":"623024","n":"迭部县"},{"c":"623025","n":"玛曲县"},{"c":"623026","n":"碌曲县"},{"c":"623027","n":"夏河县"}]}]},{"c":63,"n":"青海省","ch":[{"c":"6301","n":"西宁市","ch":[{"c":"630102","n":"城东区"},{"c":"630103","n":"城中区"},{"c":"630104","n":"城西区"},{"c":"630105","n":"城北区"},{"c":"630106","n":"湟中区"},{"c":"630121","n":"大通回族土族自治县"},{"c":"630123","n":"湟源县"}]},{"c":"6302","n":"海东市","ch":[{"c":"630202","n":"乐都区"},{"c":"630203","n":"平安区"},{"c":"630222","n":"民和回族土族自治县"},{"c":"630223","n":"互助土族自治县"},{"c":"630224","n":"化隆回族自治县"},{"c":"630225","n":"循化撒拉族自治县"}]},{"c":"6322","n":"海北藏族自治州","ch":[{"c":"632221","n":"门源回族自治县"},{"c":"632222","n":"祁连县"},{"c":"632223","n":"海晏县"},{"c":"632224","n":"刚察县"}]},{"c":"6323","n":"黄南藏族自治州","ch":[{"c":"632301","n":"同仁市"},{"c":"632322","n":"尖扎县"},{"c":"632323","n":"泽库县"},{"c":"632324","n":"河南蒙古族自治县"}]},{"c":"6325","n":"海南藏族自治州","ch":[{"c":"632521","n":"共和县"},{"c":"632522","n":"同德县"},{"c":"632523","n":"贵德县"},{"c":"632524","n":"兴海县"},{"c":"632525","n":"贵南县"}]},{"c":"6326","n":"果洛藏族自治州","ch":[{"c":"632621","n":"玛沁县"},{"c":"632622","n":"班玛县"},{"c":"632623","n":"甘德县"},{"c":"632624","n":"达日县"},{"c":"632625","n":"久治县"},{"c":"632626","n":"玛多县"}]},{"c":"6327","n":"玉树藏族自治州","ch":[{"c":"632701","n":"玉树市"},{"c":"632722","n":"杂多县"},{"c":"632723","n":"称多县"},{"c":"632724","n":"治多县"},{"c":"632725","n":"囊谦县"},{"c":"632726","n":"曲麻莱县"}]},{"c":"6328","n":"海西蒙古族藏族自治州","ch":[{"c":"632801","n":"格尔木市"},{"c":"632802","n":"德令哈市"},{"c":"632803","n":"茫崖市"},{"c":"632821","n":"乌兰县"},{"c":"632822","n":"都兰县"},{"c":"632823","n":"天峻县"}]}]},{"c":64,"n":"宁夏回族自治区","ch":[{"c":"6401","n":"银川市","ch":[{"c":"640104","n":"兴庆区"},{"c":"640105","n":"西夏区"},{"c":"640106","n":"金凤区"},{"c":"640121","n":"永宁县"},{"c":"640122","n":"贺兰县"},{"c":"640181","n":"灵武市"}]},{"c":"6402","n":"石嘴山市","ch":[{"c":"640202","n":"大武口区"},{"c":"640205","n":"惠农区"},{"c":"640221","n":"平罗县"}]},{"c":"6403","n":"吴忠市","ch":[{"c":"640302","n":"利通区"},{"c":"640303","n":"红寺堡区"},{"c":"640323","n":"盐池县"},{"c":"640324","n":"同心县"},{"c":"640381","n":"青铜峡市"}]},{"c":"6404","n":"固原市","ch":[{"c":"640402","n":"原州区"},{"c":"640422","n":"西吉县"},{"c":"640423","n":"隆德县"},{"c":"640424","n":"泾源县"},{"c":"640425","n":"彭阳县"}]},{"c":"6405","n":"中卫市","ch":[{"c":"640502","n":"沙坡头区"},{"c":"640521","n":"中宁县"},{"c":"640522","n":"海原县"}]}]},{"c":65,"n":"新疆维吾尔自治区","ch":[{"c":"6501","n":"乌鲁木齐市","ch":[{"c":"650102","n":"天山区"},{"c":"650103","n":"沙依巴克区"},{"c":"650104","n":"新市区"},{"c":"650105","n":"水磨沟区"},{"c":"650106","n":"头屯河区"},{"c":"650107","n":"达坂城区"},{"c":"650109","n":"米东区"},{"c":"650121","n":"乌鲁木齐县"}]},{"c":"6502","n":"克拉玛依市","ch":[{"c":"650202","n":"独山子区"},{"c":"650203","n":"克拉玛依区"},{"c":"650204","n":"白碱滩区"},{"c":"650205","n":"乌尔禾区"}]},{"c":"6504","n":"吐鲁番市","ch":[{"c":"650402","n":"高昌区"},{"c":"650421","n":"鄯善县"},{"c":"650422","n":"托克逊县"}]},{"c":"6505","n":"哈密市","ch":[{"c":"650502","n":"伊州区"},{"c":"650521","n":"巴里坤哈萨克自治县"},{"c":"650522","n":"伊吾县"}]},{"c":"6523","n":"昌吉回族自治州","ch":[{"c":"652301","n":"昌吉市"},{"c":"652302","n":"阜康市"},{"c":"652323","n":"呼图壁县"},{"c":"652324","n":"玛纳斯县"},{"c":"652325","n":"奇台县"},{"c":"652327","n":"吉木萨尔县"},{"c":"652328","n":"木垒哈萨克自治县"}]},{"c":"6527","n":"博尔塔拉蒙古自治州","ch":[{"c":"652701","n":"博乐市"},{"c":"652702","n":"阿拉山口市"},{"c":"652722","n":"精河县"},{"c":"652723","n":"温泉县"}]},{"c":"6528","n":"巴音郭楞蒙古自治州","ch":[{"c":"652801","n":"库尔勒市"},{"c":"652822","n":"轮台县"},{"c":"652823","n":"尉犁县"},{"c":"652824","n":"若羌县"},{"c":"652825","n":"且末县"},{"c":"652826","n":"焉耆回族自治县"},{"c":"652827","n":"和静县"},{"c":"652828","n":"和硕县"},{"c":"652829","n":"博湖县"}]},{"c":"6529","n":"阿克苏地区","ch":[{"c":"652901","n":"阿克苏市"},{"c":"652902","n":"库车市"},{"c":"652922","n":"温宿县"},{"c":"652924","n":"沙雅县"},{"c":"652925","n":"新和县"},{"c":"652926","n":"拜城县"},{"c":"652927","n":"乌什县"},{"c":"652928","n":"阿瓦提县"},{"c":"652929","n":"柯坪县"}]},{"c":"6530","n":"克孜勒苏柯尔克孜自治州","ch":[{"c":"653001","n":"阿图什市"},{"c":"653022","n":"阿克陶县"},{"c":"653023","n":"阿合奇县"},{"c":"653024","n":"乌恰县"}]},{"c":"6531","n":"喀什地区","ch":[{"c":"653101","n":"喀什市"},{"c":"653121","n":"疏附县"},{"c":"653122","n":"疏勒县"},{"c":"653123","n":"英吉沙县"},{"c":"653124","n":"泽普县"},{"c":"653125","n":"莎车县"},{"c":"653126","n":"叶城县"},{"c":"653127","n":"麦盖提县"},{"c":"653128","n":"岳普湖县"},{"c":"653129","n":"伽师县"},{"c":"653130","n":"巴楚县"},{"c":"653131","n":"塔什库尔干塔吉克自治县"}]},{"c":"6532","n":"和田地区","ch":[{"c":"653201","n":"和田市"},{"c":"653221","n":"和田县"},{"c":"653222","n":"墨玉县"},{"c":"653223","n":"皮山县"},{"c":"653224","n":"洛浦县"},{"c":"653225","n":"策勒县"},{"c":"653226","n":"于田县"},{"c":"653227","n":"民丰县"},{"c":"653228","n":"和康县"},{"c":"653229","n":"和安县"}]},{"c":"6540","n":"伊犁哈萨克自治州","ch":[{"c":"654002","n":"伊宁市"},{"c":"654003","n":"奎屯市"},{"c":"654004","n":"霍尔果斯市"},{"c":"654021","n":"伊宁县"},{"c":"654022","n":"察布查尔锡伯自治县"},{"c":"654023","n":"霍城县"},{"c":"654024","n":"巩留县"},{"c":"654025","n":"新源县"},{"c":"654026","n":"昭苏县"},{"c":"654027","n":"特克斯县"},{"c":"654028","n":"尼勒克县"}]},{"c":"6542","n":"塔城地区","ch":[{"c":"654201","n":"塔城市"},{"c":"654202","n":"乌苏市"},{"c":"654203","n":"沙湾市"},{"c":"654221","n":"额敏县"},{"c":"654224","n":"托里县"},{"c":"654225","n":"裕民县"},{"c":"654226","n":"和布克赛尔蒙古自治县"}]},{"c":"6543","n":"阿勒泰地区","ch":[{"c":"654301","n":"阿勒泰市"},{"c":"654321","n":"布尔津县"},{"c":"654322","n":"富蕴县"},{"c":"654323","n":"福海县"},{"c":"654324","n":"哈巴河县"},{"c":"654325","n":"青河县"},{"c":"654326","n":"吉木乃县"}]},{"c":"6590","n":"新疆维吾尔自治区","ch":[{"c":"659001","n":"石河子市"},{"c":"659002","n":"阿拉尔市"},{"c":"659003","n":"图木舒克市"},{"c":"659004","n":"五家渠市"},{"c":"659005","n":"北屯市"},{"c":"659006","n":"铁门关市"},{"c":"659007","n":"双河市"},{"c":"659008","n":"可克达拉市"},{"c":"659009","n":"昆玉市"},{"c":"659010","n":"胡杨河市"},{"c":"659011","n":"新星市"},{"c":"659012","n":"白杨市"}]}]}] diff --git a/common/src/main/resources/mapper/AppletModuleMapper.xml b/common/src/main/resources/mapper/AppletModuleMapper.xml new file mode 100644 index 0000000..734e124 --- /dev/null +++ b/common/src/main/resources/mapper/AppletModuleMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/AppointmentConfigMapper.xml b/common/src/main/resources/mapper/AppointmentConfigMapper.xml new file mode 100644 index 0000000..ab94031 --- /dev/null +++ b/common/src/main/resources/mapper/AppointmentConfigMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/AppointmentsMapper.xml b/common/src/main/resources/mapper/AppointmentsMapper.xml new file mode 100644 index 0000000..e1b50c1 --- /dev/null +++ b/common/src/main/resources/mapper/AppointmentsMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/ChapterMapper.xml b/common/src/main/resources/mapper/ChapterMapper.xml new file mode 100644 index 0000000..7201a31 --- /dev/null +++ b/common/src/main/resources/mapper/ChapterMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/ChildStoreAccountMapper.xml b/common/src/main/resources/mapper/ChildStoreAccountMapper.xml new file mode 100644 index 0000000..2d087a6 --- /dev/null +++ b/common/src/main/resources/mapper/ChildStoreAccountMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/ClinicWorkLogMapper.xml b/common/src/main/resources/mapper/ClinicWorkLogMapper.xml new file mode 100644 index 0000000..14e0770 --- /dev/null +++ b/common/src/main/resources/mapper/ClinicWorkLogMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/CourseMapper.xml b/common/src/main/resources/mapper/CourseMapper.xml new file mode 100644 index 0000000..2105251 --- /dev/null +++ b/common/src/main/resources/mapper/CourseMapper.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/DailySchedulesMapper.xml b/common/src/main/resources/mapper/DailySchedulesMapper.xml new file mode 100644 index 0000000..21c4806 --- /dev/null +++ b/common/src/main/resources/mapper/DailySchedulesMapper.xml @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO daily_schedules ( physio_id, schedule_date, time_slot_code, max_bookings, booked_count, STATUS ) SELECT + ps.physio_id, + target_date.schedule_date, + ts.slot_code, + COALESCE ( ps.max_bookings, jp.max_bookings_per_slot ) AS max_bookings, + 0 AS booked_count, + 'available' AS STATUS + FROM + ( + WITH RECURSIVE date_list AS ( + SELECT + CURDATE() AS schedule_date UNION ALL + SELECT + DATE_ADD( schedule_date, INTERVAL 1 DAY ) + FROM + date_list + + WHERE + schedule_date < DATE_ADD( CURDATE(), INTERVAL 14 DAY ) + ) SELECT + schedule_date + FROM + date_list + ) target_date + CROSS JOIN physio_schedules ps + JOIN jk_physio jp ON ps.physio_id = jp.id + JOIN time_slots ts ON ts.slot_code = ps.time_slot_code + WHERE + ps.active = 1 + AND jp.STATUS = '启用' + AND NOT EXISTS ( + SELECT + 1 + FROM + daily_schedules ds_existing + WHERE + ds_existing.physio_id = jp.id + AND ds_existing.schedule_date = target_date.schedule_date + AND ds_existing.time_slot_code = ts.slot_code) + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/DeviceUpgradeMapper.xml b/common/src/main/resources/mapper/DeviceUpgradeMapper.xml new file mode 100644 index 0000000..45c6a93 --- /dev/null +++ b/common/src/main/resources/mapper/DeviceUpgradeMapper.xml @@ -0,0 +1,11 @@ + + + + + + update device_upgrade set be_current_version = 0 where be_current_version = 1 + + + diff --git a/common/src/main/resources/mapper/DeviceUsageDetailMapper2.xml b/common/src/main/resources/mapper/DeviceUsageDetailMapper2.xml new file mode 100644 index 0000000..735378a --- /dev/null +++ b/common/src/main/resources/mapper/DeviceUsageDetailMapper2.xml @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/common/src/main/resources/mapper/DeviceUsageRecordMapper.xml b/common/src/main/resources/mapper/DeviceUsageRecordMapper.xml new file mode 100644 index 0000000..0d59378 --- /dev/null +++ b/common/src/main/resources/mapper/DeviceUsageRecordMapper.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + update device_usage_record set start_use_flag = 'false',end_time = now() where start_use_flag = 'true' and id in + + #{item} + + + + + update device_usage_record set start_use_flag = 'false',end_time = now() where start_use_flag = 'true' and device_id in + + #{item} + + + diff --git a/common/src/main/resources/mapper/DiaRecordMapper.xml b/common/src/main/resources/mapper/DiaRecordMapper.xml new file mode 100644 index 0000000..97acb06 --- /dev/null +++ b/common/src/main/resources/mapper/DiaRecordMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/GolfCustInfoMapper.xml b/common/src/main/resources/mapper/GolfCustInfoMapper.xml new file mode 100644 index 0000000..232055b --- /dev/null +++ b/common/src/main/resources/mapper/GolfCustInfoMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/InventoryStatisticsMapper.xml b/common/src/main/resources/mapper/InventoryStatisticsMapper.xml new file mode 100644 index 0000000..ba5b069 --- /dev/null +++ b/common/src/main/resources/mapper/InventoryStatisticsMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/JointMapper.xml b/common/src/main/resources/mapper/JointMapper.xml new file mode 100644 index 0000000..8afb0bc --- /dev/null +++ b/common/src/main/resources/mapper/JointMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/MobileAppUserAccountMapper.xml b/common/src/main/resources/mapper/MobileAppUserAccountMapper.xml new file mode 100644 index 0000000..6760b66 --- /dev/null +++ b/common/src/main/resources/mapper/MobileAppUserAccountMapper.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/MobileAppUserMapper.xml b/common/src/main/resources/mapper/MobileAppUserMapper.xml new file mode 100644 index 0000000..8be0203 --- /dev/null +++ b/common/src/main/resources/mapper/MobileAppUserMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + update mobile_app_user set phone_number = #{phoneNumber} where id = #{userId} + + + + diff --git a/common/src/main/resources/mapper/MobileAppointmentsMapper.xml b/common/src/main/resources/mapper/MobileAppointmentsMapper.xml new file mode 100644 index 0000000..c9b8418 --- /dev/null +++ b/common/src/main/resources/mapper/MobileAppointmentsMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/MobileChapterMapper.xml b/common/src/main/resources/mapper/MobileChapterMapper.xml new file mode 100644 index 0000000..742c3a7 --- /dev/null +++ b/common/src/main/resources/mapper/MobileChapterMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/MobileComboMapper.xml b/common/src/main/resources/mapper/MobileComboMapper.xml new file mode 100644 index 0000000..fbf4ba0 --- /dev/null +++ b/common/src/main/resources/mapper/MobileComboMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/MobileCourseMapper.xml b/common/src/main/resources/mapper/MobileCourseMapper.xml new file mode 100644 index 0000000..8b9d8d2 --- /dev/null +++ b/common/src/main/resources/mapper/MobileCourseMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/MobileOrderItemMapper.xml b/common/src/main/resources/mapper/MobileOrderItemMapper.xml new file mode 100644 index 0000000..0486c2f --- /dev/null +++ b/common/src/main/resources/mapper/MobileOrderItemMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/MobileOrderMapper.xml b/common/src/main/resources/mapper/MobileOrderMapper.xml new file mode 100644 index 0000000..670b97e --- /dev/null +++ b/common/src/main/resources/mapper/MobileOrderMapper.xml @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + update wx_order set status = 'paid',pay_time = NOW() where order_id = #{orderId} and status = 'unpaid' + + + + update wx_order set status = 'canceled' where order_id = #{orderId} and status = 'unpaid' + + + + + + + + + + diff --git a/common/src/main/resources/mapper/MobileUserAddressMapper.xml b/common/src/main/resources/mapper/MobileUserAddressMapper.xml new file mode 100644 index 0000000..b0a79e7 --- /dev/null +++ b/common/src/main/resources/mapper/MobileUserAddressMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/MobileUserHaveCourseMapper.xml b/common/src/main/resources/mapper/MobileUserHaveCourseMapper.xml new file mode 100644 index 0000000..1db94d4 --- /dev/null +++ b/common/src/main/resources/mapper/MobileUserHaveCourseMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/MobileUserMedicalVisitInfoMapper.xml b/common/src/main/resources/mapper/MobileUserMedicalVisitInfoMapper.xml new file mode 100644 index 0000000..0004d8a --- /dev/null +++ b/common/src/main/resources/mapper/MobileUserMedicalVisitInfoMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/MobileUserVideoProgressMapper.xml b/common/src/main/resources/mapper/MobileUserVideoProgressMapper.xml new file mode 100644 index 0000000..3135d9f --- /dev/null +++ b/common/src/main/resources/mapper/MobileUserVideoProgressMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/ModulePermsMapper.xml b/common/src/main/resources/mapper/ModulePermsMapper.xml new file mode 100644 index 0000000..9bac419 --- /dev/null +++ b/common/src/main/resources/mapper/ModulePermsMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/PhysioSchedulesMapper.xml b/common/src/main/resources/mapper/PhysioSchedulesMapper.xml new file mode 100644 index 0000000..e906f6d --- /dev/null +++ b/common/src/main/resources/mapper/PhysioSchedulesMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/PhysioThirteenAreaMapper.xml b/common/src/main/resources/mapper/PhysioThirteenAreaMapper.xml new file mode 100644 index 0000000..0fe5ca4 --- /dev/null +++ b/common/src/main/resources/mapper/PhysioThirteenAreaMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/RunConsultationMapper.xml b/common/src/main/resources/mapper/RunConsultationMapper.xml new file mode 100644 index 0000000..ebf07d1 --- /dev/null +++ b/common/src/main/resources/mapper/RunConsultationMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/SubHealthMapper.xml b/common/src/main/resources/mapper/SubHealthMapper.xml new file mode 100644 index 0000000..ddce1a8 --- /dev/null +++ b/common/src/main/resources/mapper/SubHealthMapper.xml @@ -0,0 +1,24 @@ + + + + + + + diff --git a/common/src/main/resources/mapper/TimeSlotsMapper.xml b/common/src/main/resources/mapper/TimeSlotsMapper.xml new file mode 100644 index 0000000..58be492 --- /dev/null +++ b/common/src/main/resources/mapper/TimeSlotsMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/TreatParameterMapper.xml b/common/src/main/resources/mapper/TreatParameterMapper.xml new file mode 100644 index 0000000..5c50f28 --- /dev/null +++ b/common/src/main/resources/mapper/TreatParameterMapper.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/common/src/main/resources/mapper/UserConsultationRecordMapper.xml b/common/src/main/resources/mapper/UserConsultationRecordMapper.xml new file mode 100644 index 0000000..ec97681 --- /dev/null +++ b/common/src/main/resources/mapper/UserConsultationRecordMapper.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/UserFreeTrialInfoMapper.xml b/common/src/main/resources/mapper/UserFreeTrialInfoMapper.xml new file mode 100644 index 0000000..277d94b --- /dev/null +++ b/common/src/main/resources/mapper/UserFreeTrialInfoMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/common/src/main/resources/mapper/UserHaveCourseMapper.xml b/common/src/main/resources/mapper/UserHaveCourseMapper.xml new file mode 100644 index 0000000..12c65a4 --- /dev/null +++ b/common/src/main/resources/mapper/UserHaveCourseMapper.xml @@ -0,0 +1,14 @@ + + + + + + + diff --git a/common/src/main/resources/mapper/UserTreatmentParametersMapper.xml b/common/src/main/resources/mapper/UserTreatmentParametersMapper.xml new file mode 100644 index 0000000..67cae29 --- /dev/null +++ b/common/src/main/resources/mapper/UserTreatmentParametersMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + update user_treatment_parameters set status = 0 + WHERE create_time < NOW() - INTERVAL 30 MINUTE; + + + diff --git a/common/src/main/resources/mapper/WxUserAccountMapper.xml b/common/src/main/resources/mapper/WxUserAccountMapper.xml new file mode 100644 index 0000000..62da919 --- /dev/null +++ b/common/src/main/resources/mapper/WxUserAccountMapper.xml @@ -0,0 +1,14 @@ + + + + + + + diff --git a/common/src/main/resources/mapper/WxUserMedicalVisitInfoMapper.xml b/common/src/main/resources/mapper/WxUserMedicalVisitInfoMapper.xml new file mode 100644 index 0000000..b69cc1a --- /dev/null +++ b/common/src/main/resources/mapper/WxUserMedicalVisitInfoMapper.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/common/src/main/resources/mapper/WxUserVideoProgressMapper.xml b/common/src/main/resources/mapper/WxUserVideoProgressMapper.xml new file mode 100644 index 0000000..7a49b1d --- /dev/null +++ b/common/src/main/resources/mapper/WxUserVideoProgressMapper.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/common/src/main/resources/mapper/WxVipRechargeMapper.xml b/common/src/main/resources/mapper/WxVipRechargeMapper.xml new file mode 100644 index 0000000..c8e0950 --- /dev/null +++ b/common/src/main/resources/mapper/WxVipRechargeMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/common/target/classes/city.json b/common/target/classes/city.json new file mode 100644 index 0000000..674b99f --- /dev/null +++ b/common/target/classes/city.json @@ -0,0 +1 @@ +[{"c":11,"n":"北京市","ch":[{"c":"1101","n":"北京市","ch":[{"c":"110101","n":"东城区"},{"c":"110102","n":"西城区"},{"c":"110105","n":"朝阳区"},{"c":"110106","n":"丰台区"},{"c":"110107","n":"石景山区"},{"c":"110108","n":"海淀区"},{"c":"110109","n":"门头沟区"},{"c":"110111","n":"房山区"},{"c":"110112","n":"通州区"},{"c":"110113","n":"顺义区"},{"c":"110114","n":"昌平区"},{"c":"110115","n":"大兴区"},{"c":"110116","n":"怀柔区"},{"c":"110117","n":"平谷区"},{"c":"110118","n":"密云区"},{"c":"110119","n":"延庆区"}]}]},{"c":12,"n":"天津市","ch":[{"c":"1201","n":"天津市","ch":[{"c":"120101","n":"和平区"},{"c":"120102","n":"河东区"},{"c":"120103","n":"河西区"},{"c":"120104","n":"南开区"},{"c":"120105","n":"河北区"},{"c":"120106","n":"红桥区"},{"c":"120110","n":"东丽区"},{"c":"120111","n":"西青区"},{"c":"120112","n":"津南区"},{"c":"120113","n":"北辰区"},{"c":"120114","n":"武清区"},{"c":"120115","n":"宝坻区"},{"c":"120116","n":"滨海新区"},{"c":"120117","n":"宁河区"},{"c":"120118","n":"静海区"},{"c":"120119","n":"蓟州区"}]}]},{"c":13,"n":"河北省","ch":[{"c":"1301","n":"石家庄市","ch":[{"c":"130102","n":"长安区"},{"c":"130104","n":"桥西区"},{"c":"130105","n":"新华区"},{"c":"130107","n":"井陉矿区"},{"c":"130108","n":"裕华区"},{"c":"130109","n":"藁城区"},{"c":"130110","n":"鹿泉区"},{"c":"130111","n":"栾城区"},{"c":"130121","n":"井陉县"},{"c":"130123","n":"正定县"},{"c":"130125","n":"行唐县"},{"c":"130126","n":"灵寿县"},{"c":"130127","n":"高邑县"},{"c":"130128","n":"深泽县"},{"c":"130129","n":"赞皇县"},{"c":"130130","n":"无极县"},{"c":"130131","n":"平山县"},{"c":"130132","n":"元氏县"},{"c":"130133","n":"赵县"},{"c":"130181","n":"辛集市"},{"c":"130183","n":"晋州市"},{"c":"130184","n":"新乐市"}]},{"c":"1302","n":"唐山市","ch":[{"c":"130202","n":"路南区"},{"c":"130203","n":"路北区"},{"c":"130204","n":"古冶区"},{"c":"130205","n":"开平区"},{"c":"130207","n":"丰南区"},{"c":"130208","n":"丰润区"},{"c":"130209","n":"曹妃甸区"},{"c":"130224","n":"滦南县"},{"c":"130225","n":"乐亭县"},{"c":"130227","n":"迁西县"},{"c":"130229","n":"玉田县"},{"c":"130281","n":"遵化市"},{"c":"130283","n":"迁安市"},{"c":"130284","n":"滦州市"}]},{"c":"1303","n":"秦皇岛市","ch":[{"c":"130302","n":"海港区"},{"c":"130303","n":"山海关区"},{"c":"130304","n":"北戴河区"},{"c":"130306","n":"抚宁区"},{"c":"130321","n":"青龙满族自治县"},{"c":"130322","n":"昌黎县"},{"c":"130324","n":"卢龙县"}]},{"c":"1304","n":"邯郸市","ch":[{"c":"130402","n":"邯山区"},{"c":"130403","n":"丛台区"},{"c":"130404","n":"复兴区"},{"c":"130406","n":"峰峰矿区"},{"c":"130407","n":"肥乡区"},{"c":"130408","n":"永年区"},{"c":"130423","n":"临漳县"},{"c":"130424","n":"成安县"},{"c":"130425","n":"大名县"},{"c":"130426","n":"涉县"},{"c":"130427","n":"磁县"},{"c":"130430","n":"邱县"},{"c":"130431","n":"鸡泽县"},{"c":"130432","n":"广平县"},{"c":"130433","n":"馆陶县"},{"c":"130434","n":"魏县"},{"c":"130435","n":"曲周县"},{"c":"130481","n":"武安市"}]},{"c":"1305","n":"邢台市","ch":[{"c":"130502","n":"襄都区"},{"c":"130503","n":"信都区"},{"c":"130505","n":"任泽区"},{"c":"130506","n":"南和区"},{"c":"130522","n":"临城县"},{"c":"130523","n":"内丘县"},{"c":"130524","n":"柏乡县"},{"c":"130525","n":"隆尧县"},{"c":"130528","n":"宁晋县"},{"c":"130529","n":"巨鹿县"},{"c":"130530","n":"新河县"},{"c":"130531","n":"广宗县"},{"c":"130532","n":"平乡县"},{"c":"130533","n":"威县"},{"c":"130534","n":"清河县"},{"c":"130535","n":"临西县"},{"c":"130581","n":"南宫市"},{"c":"130582","n":"沙河市"}]},{"c":"1306","n":"保定市","ch":[{"c":"130602","n":"竞秀区"},{"c":"130606","n":"莲池区"},{"c":"130607","n":"满城区"},{"c":"130608","n":"清苑区"},{"c":"130609","n":"徐水区"},{"c":"130623","n":"涞水县"},{"c":"130624","n":"阜平县"},{"c":"130626","n":"定兴县"},{"c":"130627","n":"唐县"},{"c":"130628","n":"高阳县"},{"c":"130629","n":"容城县"},{"c":"130630","n":"涞源县"},{"c":"130631","n":"望都县"},{"c":"130632","n":"安新县"},{"c":"130633","n":"易县"},{"c":"130634","n":"曲阳县"},{"c":"130635","n":"蠡县"},{"c":"130636","n":"顺平县"},{"c":"130637","n":"博野县"},{"c":"130638","n":"雄县"},{"c":"130681","n":"涿州市"},{"c":"130682","n":"定州市"},{"c":"130683","n":"安国市"},{"c":"130684","n":"高碑店市"}]},{"c":"1307","n":"张家口市","ch":[{"c":"130702","n":"桥东区"},{"c":"130703","n":"桥西区"},{"c":"130705","n":"宣化区"},{"c":"130706","n":"下花园区"},{"c":"130708","n":"万全区"},{"c":"130709","n":"崇礼区"},{"c":"130722","n":"张北县"},{"c":"130723","n":"康保县"},{"c":"130724","n":"沽源县"},{"c":"130725","n":"尚义县"},{"c":"130726","n":"蔚县"},{"c":"130727","n":"阳原县"},{"c":"130728","n":"怀安县"},{"c":"130730","n":"怀来县"},{"c":"130731","n":"涿鹿县"},{"c":"130732","n":"赤城县"}]},{"c":"1308","n":"承德市","ch":[{"c":"130802","n":"双桥区"},{"c":"130803","n":"双滦区"},{"c":"130804","n":"鹰手营子矿区"},{"c":"130821","n":"承德县"},{"c":"130822","n":"兴隆县"},{"c":"130824","n":"滦平县"},{"c":"130825","n":"隆化县"},{"c":"130826","n":"丰宁满族自治县"},{"c":"130827","n":"宽城满族自治县"},{"c":"130828","n":"围场满族蒙古族自治县"},{"c":"130881","n":"平泉市"}]},{"c":"1309","n":"沧州市","ch":[{"c":"130902","n":"新华区"},{"c":"130903","n":"运河区"},{"c":"130921","n":"沧县"},{"c":"130922","n":"青县"},{"c":"130923","n":"东光县"},{"c":"130924","n":"海兴县"},{"c":"130925","n":"盐山县"},{"c":"130926","n":"肃宁县"},{"c":"130927","n":"南皮县"},{"c":"130928","n":"吴桥县"},{"c":"130929","n":"献县"},{"c":"130930","n":"孟村回族自治县"},{"c":"130981","n":"泊头市"},{"c":"130982","n":"任丘市"},{"c":"130983","n":"黄骅市"},{"c":"130984","n":"河间市"}]},{"c":"1310","n":"廊坊市","ch":[{"c":"131002","n":"安次区"},{"c":"131003","n":"广阳区"},{"c":"131022","n":"固安县"},{"c":"131023","n":"永清县"},{"c":"131024","n":"香河县"},{"c":"131025","n":"大城县"},{"c":"131026","n":"文安县"},{"c":"131028","n":"大厂回族自治县"},{"c":"131081","n":"霸州市"},{"c":"131082","n":"三河市"}]},{"c":"1311","n":"衡水市","ch":[{"c":"131102","n":"桃城区"},{"c":"131103","n":"冀州区"},{"c":"131121","n":"枣强县"},{"c":"131122","n":"武邑县"},{"c":"131123","n":"武强县"},{"c":"131124","n":"饶阳县"},{"c":"131125","n":"安平县"},{"c":"131126","n":"故城县"},{"c":"131127","n":"景县"},{"c":"131128","n":"阜城县"},{"c":"131182","n":"深州市"}]}]},{"c":14,"n":"山西省","ch":[{"c":"1401","n":"太原市","ch":[{"c":"140105","n":"小店区"},{"c":"140106","n":"迎泽区"},{"c":"140107","n":"杏花岭区"},{"c":"140108","n":"尖草坪区"},{"c":"140109","n":"万柏林区"},{"c":"140110","n":"晋源区"},{"c":"140121","n":"清徐县"},{"c":"140122","n":"阳曲县"},{"c":"140123","n":"娄烦县"},{"c":"140181","n":"古交市"}]},{"c":"1402","n":"大同市","ch":[{"c":"140212","n":"新荣区"},{"c":"140213","n":"平城区"},{"c":"140214","n":"云冈区"},{"c":"140215","n":"云州区"},{"c":"140221","n":"阳高县"},{"c":"140222","n":"天镇县"},{"c":"140223","n":"广灵县"},{"c":"140224","n":"灵丘县"},{"c":"140225","n":"浑源县"},{"c":"140226","n":"左云县"}]},{"c":"1403","n":"阳泉市","ch":[{"c":"140302","n":"城区"},{"c":"140303","n":"矿区"},{"c":"140311","n":"郊区"},{"c":"140321","n":"平定县"},{"c":"140322","n":"盂县"}]},{"c":"1404","n":"长治市","ch":[{"c":"140403","n":"潞州区"},{"c":"140404","n":"上党区"},{"c":"140405","n":"屯留区"},{"c":"140406","n":"潞城区"},{"c":"140423","n":"襄垣县"},{"c":"140425","n":"平顺县"},{"c":"140426","n":"黎城县"},{"c":"140427","n":"壶关县"},{"c":"140428","n":"长子县"},{"c":"140429","n":"武乡县"},{"c":"140430","n":"沁县"},{"c":"140431","n":"沁源县"}]},{"c":"1405","n":"晋城市","ch":[{"c":"140502","n":"城区"},{"c":"140521","n":"沁水县"},{"c":"140522","n":"阳城县"},{"c":"140524","n":"陵川县"},{"c":"140525","n":"泽州县"},{"c":"140581","n":"高平市"}]},{"c":"1406","n":"朔州市","ch":[{"c":"140602","n":"朔城区"},{"c":"140603","n":"平鲁区"},{"c":"140621","n":"山阴县"},{"c":"140622","n":"应县"},{"c":"140623","n":"右玉县"},{"c":"140681","n":"怀仁市"}]},{"c":"1407","n":"晋中市","ch":[{"c":"140702","n":"榆次区"},{"c":"140703","n":"太谷区"},{"c":"140721","n":"榆社县"},{"c":"140722","n":"左权县"},{"c":"140723","n":"和顺县"},{"c":"140724","n":"昔阳县"},{"c":"140725","n":"寿阳县"},{"c":"140727","n":"祁县"},{"c":"140728","n":"平遥县"},{"c":"140729","n":"灵石县"},{"c":"140781","n":"介休市"}]},{"c":"1408","n":"运城市","ch":[{"c":"140802","n":"盐湖区"},{"c":"140821","n":"临猗县"},{"c":"140822","n":"万荣县"},{"c":"140823","n":"闻喜县"},{"c":"140824","n":"稷山县"},{"c":"140825","n":"新绛县"},{"c":"140826","n":"绛县"},{"c":"140827","n":"垣曲县"},{"c":"140828","n":"夏县"},{"c":"140829","n":"平陆县"},{"c":"140830","n":"芮城县"},{"c":"140881","n":"永济市"},{"c":"140882","n":"河津市"}]},{"c":"1409","n":"忻州市","ch":[{"c":"140902","n":"忻府区"},{"c":"140921","n":"定襄县"},{"c":"140922","n":"五台县"},{"c":"140923","n":"代县"},{"c":"140924","n":"繁峙县"},{"c":"140925","n":"宁武县"},{"c":"140926","n":"静乐县"},{"c":"140927","n":"神池县"},{"c":"140928","n":"五寨县"},{"c":"140929","n":"岢岚县"},{"c":"140930","n":"河曲县"},{"c":"140931","n":"保德县"},{"c":"140932","n":"偏关县"},{"c":"140981","n":"原平市"}]},{"c":"1410","n":"临汾市","ch":[{"c":"141002","n":"尧都区"},{"c":"141021","n":"曲沃县"},{"c":"141022","n":"翼城县"},{"c":"141023","n":"襄汾县"},{"c":"141024","n":"洪洞县"},{"c":"141025","n":"古县"},{"c":"141026","n":"安泽县"},{"c":"141027","n":"浮山县"},{"c":"141028","n":"吉县"},{"c":"141029","n":"乡宁县"},{"c":"141030","n":"大宁县"},{"c":"141031","n":"隰县"},{"c":"141032","n":"永和县"},{"c":"141033","n":"蒲县"},{"c":"141034","n":"汾西县"},{"c":"141081","n":"侯马市"},{"c":"141082","n":"霍州市"}]},{"c":"1411","n":"吕梁市","ch":[{"c":"141102","n":"离石区"},{"c":"141121","n":"文水县"},{"c":"141122","n":"交城县"},{"c":"141123","n":"兴县"},{"c":"141124","n":"临县"},{"c":"141125","n":"柳林县"},{"c":"141126","n":"石楼县"},{"c":"141127","n":"岚县"},{"c":"141128","n":"方山县"},{"c":"141129","n":"中阳县"},{"c":"141130","n":"交口县"},{"c":"141181","n":"孝义市"},{"c":"141182","n":"汾阳市"}]}]},{"c":15,"n":"内蒙古自治区","ch":[{"c":"1501","n":"呼和浩特市","ch":[{"c":"150102","n":"新城区"},{"c":"150103","n":"回民区"},{"c":"150104","n":"玉泉区"},{"c":"150105","n":"赛罕区"},{"c":"150121","n":"土默特左旗"},{"c":"150122","n":"托克托县"},{"c":"150123","n":"和林格尔县"},{"c":"150124","n":"清水河县"},{"c":"150125","n":"武川县"}]},{"c":"1502","n":"包头市","ch":[{"c":"150202","n":"东河区"},{"c":"150203","n":"昆都仑区"},{"c":"150204","n":"青山区"},{"c":"150205","n":"石拐区"},{"c":"150206","n":"白云鄂博矿区"},{"c":"150207","n":"九原区"},{"c":"150221","n":"土默特右旗"},{"c":"150222","n":"固阳县"},{"c":"150223","n":"达尔罕茂明安联合旗"}]},{"c":"1503","n":"乌海市","ch":[{"c":"150302","n":"海勃湾区"},{"c":"150303","n":"海南区"},{"c":"150304","n":"乌达区"}]},{"c":"1504","n":"赤峰市","ch":[{"c":"150402","n":"红山区"},{"c":"150403","n":"元宝山区"},{"c":"150404","n":"松山区"},{"c":"150421","n":"阿鲁科尔沁旗"},{"c":"150422","n":"巴林左旗"},{"c":"150423","n":"巴林右旗"},{"c":"150424","n":"林西县"},{"c":"150425","n":"克什克腾旗"},{"c":"150426","n":"翁牛特旗"},{"c":"150428","n":"喀喇沁旗"},{"c":"150429","n":"宁城县"},{"c":"150430","n":"敖汉旗"}]},{"c":"1505","n":"通辽市","ch":[{"c":"150502","n":"科尔沁区"},{"c":"150521","n":"科尔沁左翼中旗"},{"c":"150522","n":"科尔沁左翼后旗"},{"c":"150523","n":"开鲁县"},{"c":"150524","n":"库伦旗"},{"c":"150525","n":"奈曼旗"},{"c":"150526","n":"扎鲁特旗"},{"c":"150581","n":"霍林郭勒市"}]},{"c":"1506","n":"鄂尔多斯市","ch":[{"c":"150602","n":"东胜区"},{"c":"150603","n":"康巴什区"},{"c":"150621","n":"达拉特旗"},{"c":"150622","n":"准格尔旗"},{"c":"150623","n":"鄂托克前旗"},{"c":"150624","n":"鄂托克旗"},{"c":"150625","n":"杭锦旗"},{"c":"150626","n":"乌审旗"},{"c":"150627","n":"伊金霍洛旗"}]},{"c":"1507","n":"呼伦贝尔市","ch":[{"c":"150702","n":"海拉尔区"},{"c":"150703","n":"扎赉诺尔区"},{"c":"150721","n":"阿荣旗"},{"c":"150722","n":"莫力达瓦达斡尔族自治旗"},{"c":"150723","n":"鄂伦春自治旗"},{"c":"150724","n":"鄂温克族自治旗"},{"c":"150725","n":"陈巴尔虎旗"},{"c":"150726","n":"新巴尔虎左旗"},{"c":"150727","n":"新巴尔虎右旗"},{"c":"150781","n":"满洲里市"},{"c":"150782","n":"牙克石市"},{"c":"150783","n":"扎兰屯市"},{"c":"150784","n":"额尔古纳市"},{"c":"150785","n":"根河市"}]},{"c":"1508","n":"巴彦淖尔市","ch":[{"c":"150802","n":"临河区"},{"c":"150821","n":"五原县"},{"c":"150822","n":"磴口县"},{"c":"150823","n":"乌拉特前旗"},{"c":"150824","n":"乌拉特中旗"},{"c":"150825","n":"乌拉特后旗"},{"c":"150826","n":"杭锦后旗"}]},{"c":"1509","n":"乌兰察布市","ch":[{"c":"150902","n":"集宁区"},{"c":"150921","n":"卓资县"},{"c":"150922","n":"化德县"},{"c":"150923","n":"商都县"},{"c":"150924","n":"兴和县"},{"c":"150925","n":"凉城县"},{"c":"150926","n":"察哈尔右翼前旗"},{"c":"150927","n":"察哈尔右翼中旗"},{"c":"150928","n":"察哈尔右翼后旗"},{"c":"150929","n":"四子王旗"},{"c":"150981","n":"丰镇市"}]},{"c":"1522","n":"兴安盟","ch":[{"c":"152201","n":"乌兰浩特市"},{"c":"152202","n":"阿尔山市"},{"c":"152221","n":"科尔沁右翼前旗"},{"c":"152222","n":"科尔沁右翼中旗"},{"c":"152223","n":"扎赉特旗"},{"c":"152224","n":"突泉县"}]},{"c":"1525","n":"锡林郭勒盟","ch":[{"c":"152501","n":"二连浩特市"},{"c":"152502","n":"锡林浩特市"},{"c":"152522","n":"阿巴嘎旗"},{"c":"152523","n":"苏尼特左旗"},{"c":"152524","n":"苏尼特右旗"},{"c":"152525","n":"东乌珠穆沁旗"},{"c":"152526","n":"西乌珠穆沁旗"},{"c":"152527","n":"太仆寺旗"},{"c":"152528","n":"镶黄旗"},{"c":"152529","n":"正镶白旗"},{"c":"152530","n":"正蓝旗"},{"c":"152531","n":"多伦县"}]},{"c":"1529","n":"阿拉善盟","ch":[{"c":"152921","n":"阿拉善左旗"},{"c":"152922","n":"阿拉善右旗"},{"c":"152923","n":"额济纳旗"}]}]},{"c":21,"n":"辽宁省","ch":[{"c":"2101","n":"沈阳市","ch":[{"c":"210102","n":"和平区"},{"c":"210103","n":"沈河区"},{"c":"210104","n":"大东区"},{"c":"210105","n":"皇姑区"},{"c":"210106","n":"铁西区"},{"c":"210111","n":"苏家屯区"},{"c":"210112","n":"浑南区"},{"c":"210113","n":"沈北新区"},{"c":"210114","n":"于洪区"},{"c":"210115","n":"辽中区"},{"c":"210123","n":"康平县"},{"c":"210124","n":"法库县"},{"c":"210181","n":"新民市"}]},{"c":"2102","n":"大连市","ch":[{"c":"210202","n":"中山区"},{"c":"210203","n":"西岗区"},{"c":"210204","n":"沙河口区"},{"c":"210211","n":"甘井子区"},{"c":"210212","n":"旅顺口区"},{"c":"210213","n":"金州区"},{"c":"210214","n":"普兰店区"},{"c":"210224","n":"长海县"},{"c":"210281","n":"瓦房店市"},{"c":"210283","n":"庄河市"}]},{"c":"2103","n":"鞍山市","ch":[{"c":"210302","n":"铁东区"},{"c":"210303","n":"铁西区"},{"c":"210304","n":"立山区"},{"c":"210311","n":"千山区"},{"c":"210321","n":"台安县"},{"c":"210323","n":"岫岩满族自治县"},{"c":"210381","n":"海城市"}]},{"c":"2104","n":"抚顺市","ch":[{"c":"210402","n":"新抚区"},{"c":"210403","n":"东洲区"},{"c":"210404","n":"望花区"},{"c":"210411","n":"顺城区"},{"c":"210421","n":"抚顺县"},{"c":"210422","n":"新宾满族自治县"},{"c":"210423","n":"清原满族自治县"}]},{"c":"2105","n":"本溪市","ch":[{"c":"210502","n":"平山区"},{"c":"210503","n":"溪湖区"},{"c":"210504","n":"明山区"},{"c":"210505","n":"南芬区"},{"c":"210521","n":"本溪满族自治县"},{"c":"210522","n":"桓仁满族自治县"}]},{"c":"2106","n":"丹东市","ch":[{"c":"210602","n":"元宝区"},{"c":"210603","n":"振兴区"},{"c":"210604","n":"振安区"},{"c":"210624","n":"宽甸满族自治县"},{"c":"210681","n":"东港市"},{"c":"210682","n":"凤城市"}]},{"c":"2107","n":"锦州市","ch":[{"c":"210702","n":"古塔区"},{"c":"210703","n":"凌河区"},{"c":"210711","n":"太和区"},{"c":"210726","n":"黑山县"},{"c":"210727","n":"义县"},{"c":"210781","n":"凌海市"},{"c":"210782","n":"北镇市"}]},{"c":"2108","n":"营口市","ch":[{"c":"210802","n":"站前区"},{"c":"210803","n":"西市区"},{"c":"210804","n":"鲅鱼圈区"},{"c":"210811","n":"老边区"},{"c":"210881","n":"盖州市"},{"c":"210882","n":"大石桥市"}]},{"c":"2109","n":"阜新市","ch":[{"c":"210902","n":"海州区"},{"c":"210903","n":"新邱区"},{"c":"210904","n":"太平区"},{"c":"210905","n":"清河门区"},{"c":"210911","n":"细河区"},{"c":"210921","n":"阜新蒙古族自治县"},{"c":"210922","n":"彰武县"}]},{"c":"2110","n":"辽阳市","ch":[{"c":"211002","n":"白塔区"},{"c":"211003","n":"文圣区"},{"c":"211004","n":"宏伟区"},{"c":"211005","n":"弓长岭区"},{"c":"211011","n":"太子河区"},{"c":"211021","n":"辽阳县"},{"c":"211081","n":"灯塔市"}]},{"c":"2111","n":"盘锦市","ch":[{"c":"211102","n":"双台子区"},{"c":"211103","n":"兴隆台区"},{"c":"211104","n":"大洼区"},{"c":"211122","n":"盘山县"}]},{"c":"2112","n":"铁岭市","ch":[{"c":"211202","n":"银州区"},{"c":"211204","n":"清河区"},{"c":"211221","n":"铁岭县"},{"c":"211223","n":"西丰县"},{"c":"211224","n":"昌图县"},{"c":"211281","n":"调兵山市"},{"c":"211282","n":"开原市"}]},{"c":"2113","n":"朝阳市","ch":[{"c":"211302","n":"双塔区"},{"c":"211303","n":"龙城区"},{"c":"211321","n":"朝阳县"},{"c":"211322","n":"建平县"},{"c":"211324","n":"喀喇沁左翼蒙古族自治县"},{"c":"211381","n":"北票市"},{"c":"211382","n":"凌源市"}]},{"c":"2114","n":"葫芦岛市","ch":[{"c":"211402","n":"连山区"},{"c":"211403","n":"龙港区"},{"c":"211404","n":"南票区"},{"c":"211421","n":"绥中县"},{"c":"211422","n":"建昌县"},{"c":"211481","n":"兴城市"}]}]},{"c":22,"n":"吉林省","ch":[{"c":"2201","n":"长春市","ch":[{"c":"220102","n":"南关区"},{"c":"220103","n":"宽城区"},{"c":"220104","n":"朝阳区"},{"c":"220105","n":"二道区"},{"c":"220106","n":"绿园区"},{"c":"220112","n":"双阳区"},{"c":"220113","n":"九台区"},{"c":"220122","n":"农安县"},{"c":"220182","n":"榆树市"},{"c":"220183","n":"德惠市"},{"c":"220184","n":"公主岭市"}]},{"c":"2202","n":"吉林市","ch":[{"c":"220202","n":"昌邑区"},{"c":"220203","n":"龙潭区"},{"c":"220204","n":"船营区"},{"c":"220211","n":"丰满区"},{"c":"220221","n":"永吉县"},{"c":"220281","n":"蛟河市"},{"c":"220282","n":"桦甸市"},{"c":"220283","n":"舒兰市"},{"c":"220284","n":"磐石市"}]},{"c":"2203","n":"四平市","ch":[{"c":"220302","n":"铁西区"},{"c":"220303","n":"铁东区"},{"c":"220322","n":"梨树县"},{"c":"220323","n":"伊通满族自治县"},{"c":"220382","n":"双辽市"}]},{"c":"2204","n":"辽源市","ch":[{"c":"220402","n":"龙山区"},{"c":"220403","n":"西安区"},{"c":"220421","n":"东丰县"},{"c":"220422","n":"东辽县"}]},{"c":"2205","n":"通化市","ch":[{"c":"220502","n":"东昌区"},{"c":"220503","n":"二道江区"},{"c":"220521","n":"通化县"},{"c":"220523","n":"辉南县"},{"c":"220524","n":"柳河县"},{"c":"220581","n":"梅河口市"},{"c":"220582","n":"集安市"}]},{"c":"2206","n":"白山市","ch":[{"c":"220602","n":"浑江区"},{"c":"220605","n":"江源区"},{"c":"220621","n":"抚松县"},{"c":"220622","n":"靖宇县"},{"c":"220623","n":"长白朝鲜族自治县"},{"c":"220681","n":"临江市"}]},{"c":"2207","n":"松原市","ch":[{"c":"220702","n":"宁江区"},{"c":"220721","n":"前郭尔罗斯蒙古族自治县"},{"c":"220722","n":"长岭县"},{"c":"220723","n":"乾安县"},{"c":"220781","n":"扶余市"}]},{"c":"2208","n":"白城市","ch":[{"c":"220802","n":"洮北区"},{"c":"220821","n":"镇赉县"},{"c":"220822","n":"通榆县"},{"c":"220881","n":"洮南市"},{"c":"220882","n":"大安市"}]},{"c":"2224","n":"延边朝鲜族自治州","ch":[{"c":"222401","n":"延吉市"},{"c":"222402","n":"图们市"},{"c":"222403","n":"敦化市"},{"c":"222404","n":"珲春市"},{"c":"222405","n":"龙井市"},{"c":"222406","n":"和龙市"},{"c":"222424","n":"汪清县"},{"c":"222426","n":"安图县"}]}]},{"c":23,"n":"黑龙江省","ch":[{"c":"2301","n":"哈尔滨市","ch":[{"c":"230102","n":"道里区"},{"c":"230103","n":"南岗区"},{"c":"230104","n":"道外区"},{"c":"230108","n":"平房区"},{"c":"230109","n":"松北区"},{"c":"230110","n":"香坊区"},{"c":"230111","n":"呼兰区"},{"c":"230112","n":"阿城区"},{"c":"230113","n":"双城区"},{"c":"230123","n":"依兰县"},{"c":"230124","n":"方正县"},{"c":"230125","n":"宾县"},{"c":"230126","n":"巴彦县"},{"c":"230127","n":"木兰县"},{"c":"230128","n":"通河县"},{"c":"230129","n":"延寿县"},{"c":"230183","n":"尚志市"},{"c":"230184","n":"五常市"}]},{"c":"2302","n":"齐齐哈尔市","ch":[{"c":"230202","n":"龙沙区"},{"c":"230203","n":"建华区"},{"c":"230204","n":"铁锋区"},{"c":"230205","n":"昂昂溪区"},{"c":"230206","n":"富拉尔基区"},{"c":"230207","n":"碾子山区"},{"c":"230208","n":"梅里斯达斡尔族区"},{"c":"230221","n":"龙江县"},{"c":"230223","n":"依安县"},{"c":"230224","n":"泰来县"},{"c":"230225","n":"甘南县"},{"c":"230227","n":"富裕县"},{"c":"230229","n":"克山县"},{"c":"230230","n":"克东县"},{"c":"230231","n":"拜泉县"},{"c":"230281","n":"讷河市"}]},{"c":"2303","n":"鸡西市","ch":[{"c":"230302","n":"鸡冠区"},{"c":"230303","n":"恒山区"},{"c":"230304","n":"滴道区"},{"c":"230305","n":"梨树区"},{"c":"230306","n":"城子河区"},{"c":"230307","n":"麻山区"},{"c":"230321","n":"鸡东县"},{"c":"230381","n":"虎林市"},{"c":"230382","n":"密山市"}]},{"c":"2304","n":"鹤岗市","ch":[{"c":"230402","n":"向阳区"},{"c":"230403","n":"工农区"},{"c":"230404","n":"南山区"},{"c":"230405","n":"兴安区"},{"c":"230406","n":"东山区"},{"c":"230407","n":"兴山区"},{"c":"230421","n":"萝北县"},{"c":"230422","n":"绥滨县"}]},{"c":"2305","n":"双鸭山市","ch":[{"c":"230502","n":"尖山区"},{"c":"230503","n":"岭东区"},{"c":"230505","n":"四方台区"},{"c":"230506","n":"宝山区"},{"c":"230521","n":"集贤县"},{"c":"230522","n":"友谊县"},{"c":"230523","n":"宝清县"},{"c":"230524","n":"饶河县"}]},{"c":"2306","n":"大庆市","ch":[{"c":"230602","n":"萨尔图区"},{"c":"230603","n":"龙凤区"},{"c":"230604","n":"让胡路区"},{"c":"230605","n":"红岗区"},{"c":"230606","n":"大同区"},{"c":"230621","n":"肇州县"},{"c":"230622","n":"肇源县"},{"c":"230623","n":"林甸县"},{"c":"230624","n":"杜尔伯特蒙古族自治县"}]},{"c":"2307","n":"伊春市","ch":[{"c":"230717","n":"伊美区"},{"c":"230718","n":"乌翠区"},{"c":"230719","n":"友好区"},{"c":"230722","n":"嘉荫县"},{"c":"230723","n":"汤旺县"},{"c":"230724","n":"丰林县"},{"c":"230725","n":"大箐山县"},{"c":"230726","n":"南岔县"},{"c":"230751","n":"金林区"},{"c":"230781","n":"铁力市"}]},{"c":"2308","n":"佳木斯市","ch":[{"c":"230803","n":"向阳区"},{"c":"230804","n":"前进区"},{"c":"230805","n":"东风区"},{"c":"230811","n":"郊区"},{"c":"230822","n":"桦南县"},{"c":"230826","n":"桦川县"},{"c":"230828","n":"汤原县"},{"c":"230881","n":"同江市"},{"c":"230882","n":"富锦市"},{"c":"230883","n":"抚远市"}]},{"c":"2309","n":"七台河市","ch":[{"c":"230902","n":"新兴区"},{"c":"230903","n":"桃山区"},{"c":"230904","n":"茄子河区"},{"c":"230921","n":"勃利县"}]},{"c":"2310","n":"牡丹江市","ch":[{"c":"231002","n":"东安区"},{"c":"231003","n":"阳明区"},{"c":"231004","n":"爱民区"},{"c":"231005","n":"西安区"},{"c":"231025","n":"林口县"},{"c":"231081","n":"绥芬河市"},{"c":"231083","n":"海林市"},{"c":"231084","n":"宁安市"},{"c":"231085","n":"穆棱市"},{"c":"231086","n":"东宁市"}]},{"c":"2311","n":"黑河市","ch":[{"c":"231102","n":"爱辉区"},{"c":"231123","n":"逊克县"},{"c":"231124","n":"孙吴县"},{"c":"231181","n":"北安市"},{"c":"231182","n":"五大连池市"},{"c":"231183","n":"嫩江市"}]},{"c":"2312","n":"绥化市","ch":[{"c":"231202","n":"北林区"},{"c":"231221","n":"望奎县"},{"c":"231222","n":"兰西县"},{"c":"231223","n":"青冈县"},{"c":"231224","n":"庆安县"},{"c":"231225","n":"明水县"},{"c":"231226","n":"绥棱县"},{"c":"231281","n":"安达市"},{"c":"231282","n":"肇东市"},{"c":"231283","n":"海伦市"}]},{"c":"2327","n":"大兴安岭地区","ch":[{"c":"232701","n":"漠河市"},{"c":"232721","n":"呼玛县"},{"c":"232722","n":"塔河县"},{"c":"232761","n":"加格达奇区"},{"c":"232762","n":"松岭区"},{"c":"232763","n":"新林区"},{"c":"232764","n":"呼中区"}]}]},{"c":31,"n":"上海市","ch":[{"c":"3101","n":"上海市","ch":[{"c":"310101","n":"黄浦区"},{"c":"310104","n":"徐汇区"},{"c":"310105","n":"长宁区"},{"c":"310106","n":"静安区"},{"c":"310107","n":"普陀区"},{"c":"310109","n":"虹口区"},{"c":"310110","n":"杨浦区"},{"c":"310112","n":"闵行区"},{"c":"310113","n":"宝山区"},{"c":"310114","n":"嘉定区"},{"c":"310115","n":"浦东新区"},{"c":"310116","n":"金山区"},{"c":"310117","n":"松江区"},{"c":"310118","n":"青浦区"},{"c":"310120","n":"奉贤区"},{"c":"310151","n":"崇明区"}]}]},{"c":32,"n":"江苏省","ch":[{"c":"3201","n":"南京市","ch":[{"c":"320102","n":"玄武区"},{"c":"320104","n":"秦淮区"},{"c":"320105","n":"建邺区"},{"c":"320106","n":"鼓楼区"},{"c":"320111","n":"浦口区"},{"c":"320113","n":"栖霞区"},{"c":"320114","n":"雨花台区"},{"c":"320115","n":"江宁区"},{"c":"320116","n":"六合区"},{"c":"320117","n":"溧水区"},{"c":"320118","n":"高淳区"}]},{"c":"3202","n":"无锡市","ch":[{"c":"320205","n":"锡山区"},{"c":"320206","n":"惠山区"},{"c":"320211","n":"滨湖区"},{"c":"320213","n":"梁溪区"},{"c":"320214","n":"新吴区"},{"c":"320281","n":"江阴市"},{"c":"320282","n":"宜兴市"}]},{"c":"3203","n":"徐州市","ch":[{"c":"320302","n":"鼓楼区"},{"c":"320303","n":"云龙区"},{"c":"320305","n":"贾汪区"},{"c":"320311","n":"泉山区"},{"c":"320312","n":"铜山区"},{"c":"320321","n":"丰县"},{"c":"320322","n":"沛县"},{"c":"320324","n":"睢宁县"},{"c":"320381","n":"新沂市"},{"c":"320382","n":"邳州市"}]},{"c":"3204","n":"常州市","ch":[{"c":"320402","n":"天宁区"},{"c":"320404","n":"钟楼区"},{"c":"320411","n":"新北区"},{"c":"320412","n":"武进区"},{"c":"320413","n":"金坛区"},{"c":"320481","n":"溧阳市"}]},{"c":"3205","n":"苏州市","ch":[{"c":"320505","n":"虎丘区"},{"c":"320506","n":"吴中区"},{"c":"320507","n":"相城区"},{"c":"320508","n":"姑苏区"},{"c":"320509","n":"吴江区"},{"c":"320581","n":"常熟市"},{"c":"320582","n":"张家港市"},{"c":"320583","n":"昆山市"},{"c":"320585","n":"太仓市"}]},{"c":"3206","n":"南通市","ch":[{"c":"320612","n":"通州区"},{"c":"320613","n":"崇川区"},{"c":"320614","n":"海门区"},{"c":"320623","n":"如东县"},{"c":"320681","n":"启东市"},{"c":"320682","n":"如皋市"},{"c":"320685","n":"海安市"}]},{"c":"3207","n":"连云港市","ch":[{"c":"320703","n":"连云区"},{"c":"320706","n":"海州区"},{"c":"320707","n":"赣榆区"},{"c":"320722","n":"东海县"},{"c":"320723","n":"灌云县"},{"c":"320724","n":"灌南县"}]},{"c":"3208","n":"淮安市","ch":[{"c":"320803","n":"淮安区"},{"c":"320804","n":"淮阴区"},{"c":"320812","n":"清江浦区"},{"c":"320813","n":"洪泽区"},{"c":"320826","n":"涟水县"},{"c":"320830","n":"盱眙县"},{"c":"320831","n":"金湖县"}]},{"c":"3209","n":"盐城市","ch":[{"c":"320902","n":"亭湖区"},{"c":"320903","n":"盐都区"},{"c":"320904","n":"大丰区"},{"c":"320921","n":"响水县"},{"c":"320922","n":"滨海县"},{"c":"320923","n":"阜宁县"},{"c":"320924","n":"射阳县"},{"c":"320925","n":"建湖县"},{"c":"320981","n":"东台市"}]},{"c":"3210","n":"扬州市","ch":[{"c":"321002","n":"广陵区"},{"c":"321003","n":"邗江区"},{"c":"321012","n":"江都区"},{"c":"321023","n":"宝应县"},{"c":"321081","n":"仪征市"},{"c":"321084","n":"高邮市"}]},{"c":"3211","n":"镇江市","ch":[{"c":"321102","n":"京口区"},{"c":"321111","n":"润州区"},{"c":"321112","n":"丹徒区"},{"c":"321181","n":"丹阳市"},{"c":"321182","n":"扬中市"},{"c":"321183","n":"句容市"}]},{"c":"3212","n":"泰州市","ch":[{"c":"321202","n":"海陵区"},{"c":"321203","n":"高港区"},{"c":"321204","n":"姜堰区"},{"c":"321281","n":"兴化市"},{"c":"321282","n":"靖江市"},{"c":"321283","n":"泰兴市"}]},{"c":"3213","n":"宿迁市","ch":[{"c":"321302","n":"宿城区"},{"c":"321311","n":"宿豫区"},{"c":"321322","n":"沭阳县"},{"c":"321323","n":"泗阳县"},{"c":"321324","n":"泗洪县"}]}]},{"c":33,"n":"浙江省","ch":[{"c":"3301","n":"杭州市","ch":[{"c":"330102","n":"上城区"},{"c":"330105","n":"拱墅区"},{"c":"330106","n":"西湖区"},{"c":"330108","n":"滨江区"},{"c":"330109","n":"萧山区"},{"c":"330110","n":"余杭区"},{"c":"330111","n":"富阳区"},{"c":"330112","n":"临安区"},{"c":"330113","n":"临平区"},{"c":"330114","n":"钱塘区"},{"c":"330122","n":"桐庐县"},{"c":"330127","n":"淳安县"},{"c":"330182","n":"建德市"}]},{"c":"3302","n":"宁波市","ch":[{"c":"330203","n":"海曙区"},{"c":"330205","n":"江北区"},{"c":"330206","n":"北仑区"},{"c":"330211","n":"镇海区"},{"c":"330212","n":"鄞州区"},{"c":"330213","n":"奉化区"},{"c":"330225","n":"象山县"},{"c":"330226","n":"宁海县"},{"c":"330281","n":"余姚市"},{"c":"330282","n":"慈溪市"}]},{"c":"3303","n":"温州市","ch":[{"c":"330302","n":"鹿城区"},{"c":"330303","n":"龙湾区"},{"c":"330304","n":"瓯海区"},{"c":"330305","n":"洞头区"},{"c":"330324","n":"永嘉县"},{"c":"330326","n":"平阳县"},{"c":"330327","n":"苍南县"},{"c":"330328","n":"文成县"},{"c":"330329","n":"泰顺县"},{"c":"330381","n":"瑞安市"},{"c":"330382","n":"乐清市"},{"c":"330383","n":"龙港市"}]},{"c":"3304","n":"嘉兴市","ch":[{"c":"330402","n":"南湖区"},{"c":"330411","n":"秀洲区"},{"c":"330421","n":"嘉善县"},{"c":"330424","n":"海盐县"},{"c":"330481","n":"海宁市"},{"c":"330482","n":"平湖市"},{"c":"330483","n":"桐乡市"}]},{"c":"3305","n":"湖州市","ch":[{"c":"330502","n":"吴兴区"},{"c":"330503","n":"南浔区"},{"c":"330521","n":"德清县"},{"c":"330522","n":"长兴县"},{"c":"330523","n":"安吉县"}]},{"c":"3306","n":"绍兴市","ch":[{"c":"330602","n":"越城区"},{"c":"330603","n":"柯桥区"},{"c":"330604","n":"上虞区"},{"c":"330624","n":"新昌县"},{"c":"330681","n":"诸暨市"},{"c":"330683","n":"嵊州市"}]},{"c":"3307","n":"金华市","ch":[{"c":"330702","n":"婺城区"},{"c":"330703","n":"金东区"},{"c":"330723","n":"武义县"},{"c":"330726","n":"浦江县"},{"c":"330727","n":"磐安县"},{"c":"330781","n":"兰溪市"},{"c":"330782","n":"义乌市"},{"c":"330783","n":"东阳市"},{"c":"330784","n":"永康市"}]},{"c":"3308","n":"衢州市","ch":[{"c":"330802","n":"柯城区"},{"c":"330803","n":"衢江区"},{"c":"330822","n":"常山县"},{"c":"330824","n":"开化县"},{"c":"330825","n":"龙游县"},{"c":"330881","n":"江山市"}]},{"c":"3309","n":"舟山市","ch":[{"c":"330902","n":"定海区"},{"c":"330903","n":"普陀区"},{"c":"330921","n":"岱山县"},{"c":"330922","n":"嵊泗县"}]},{"c":"3310","n":"台州市","ch":[{"c":"331002","n":"椒江区"},{"c":"331003","n":"黄岩区"},{"c":"331004","n":"路桥区"},{"c":"331022","n":"三门县"},{"c":"331023","n":"天台县"},{"c":"331024","n":"仙居县"},{"c":"331081","n":"温岭市"},{"c":"331082","n":"临海市"},{"c":"331083","n":"玉环市"}]},{"c":"3311","n":"丽水市","ch":[{"c":"331102","n":"莲都区"},{"c":"331121","n":"青田县"},{"c":"331122","n":"缙云县"},{"c":"331123","n":"遂昌县"},{"c":"331124","n":"松阳县"},{"c":"331125","n":"云和县"},{"c":"331126","n":"庆元县"},{"c":"331127","n":"景宁畲族自治县"},{"c":"331181","n":"龙泉市"}]}]},{"c":34,"n":"安徽省","ch":[{"c":"3401","n":"合肥市","ch":[{"c":"340102","n":"瑶海区"},{"c":"340103","n":"庐阳区"},{"c":"340104","n":"蜀山区"},{"c":"340111","n":"包河区"},{"c":"340121","n":"长丰县"},{"c":"340122","n":"肥东县"},{"c":"340123","n":"肥西县"},{"c":"340124","n":"庐江县"},{"c":"340181","n":"巢湖市"}]},{"c":"3402","n":"芜湖市","ch":[{"c":"340202","n":"镜湖区"},{"c":"340207","n":"鸠江区"},{"c":"340209","n":"弋江区"},{"c":"340210","n":"湾沚区"},{"c":"340212","n":"繁昌区"},{"c":"340223","n":"南陵县"},{"c":"340281","n":"无为市"}]},{"c":"3403","n":"蚌埠市","ch":[{"c":"340302","n":"龙子湖区"},{"c":"340303","n":"蚌山区"},{"c":"340304","n":"禹会区"},{"c":"340311","n":"淮上区"},{"c":"340321","n":"怀远县"},{"c":"340322","n":"五河县"},{"c":"340323","n":"固镇县"}]},{"c":"3404","n":"淮南市","ch":[{"c":"340402","n":"大通区"},{"c":"340403","n":"田家庵区"},{"c":"340404","n":"谢家集区"},{"c":"340405","n":"八公山区"},{"c":"340406","n":"潘集区"},{"c":"340421","n":"凤台县"},{"c":"340422","n":"寿县"}]},{"c":"3405","n":"马鞍山市","ch":[{"c":"340503","n":"花山区"},{"c":"340504","n":"雨山区"},{"c":"340506","n":"博望区"},{"c":"340521","n":"当涂县"},{"c":"340522","n":"含山县"},{"c":"340523","n":"和县"}]},{"c":"3406","n":"淮北市","ch":[{"c":"340602","n":"杜集区"},{"c":"340603","n":"相山区"},{"c":"340604","n":"烈山区"},{"c":"340621","n":"濉溪县"}]},{"c":"3407","n":"铜陵市","ch":[{"c":"340705","n":"铜官区"},{"c":"340706","n":"义安区"},{"c":"340711","n":"郊区"},{"c":"340722","n":"枞阳县"}]},{"c":"3408","n":"安庆市","ch":[{"c":"340802","n":"迎江区"},{"c":"340803","n":"大观区"},{"c":"340811","n":"宜秀区"},{"c":"340822","n":"怀宁县"},{"c":"340825","n":"太湖县"},{"c":"340826","n":"宿松县"},{"c":"340827","n":"望江县"},{"c":"340828","n":"岳西县"},{"c":"340881","n":"桐城市"},{"c":"340882","n":"潜山市"}]},{"c":"3410","n":"黄山市","ch":[{"c":"341002","n":"屯溪区"},{"c":"341003","n":"黄山区"},{"c":"341004","n":"徽州区"},{"c":"341021","n":"歙县"},{"c":"341022","n":"休宁县"},{"c":"341023","n":"黟县"},{"c":"341024","n":"祁门县"}]},{"c":"3411","n":"滁州市","ch":[{"c":"341102","n":"琅琊区"},{"c":"341103","n":"南谯区"},{"c":"341122","n":"来安县"},{"c":"341124","n":"全椒县"},{"c":"341125","n":"定远县"},{"c":"341126","n":"凤阳县"},{"c":"341181","n":"天长市"},{"c":"341182","n":"明光市"}]},{"c":"3412","n":"阜阳市","ch":[{"c":"341202","n":"颍州区"},{"c":"341203","n":"颍东区"},{"c":"341204","n":"颍泉区"},{"c":"341221","n":"临泉县"},{"c":"341222","n":"太和县"},{"c":"341225","n":"阜南县"},{"c":"341226","n":"颍上县"},{"c":"341282","n":"界首市"}]},{"c":"3413","n":"宿州市","ch":[{"c":"341302","n":"埇桥区"},{"c":"341321","n":"砀山县"},{"c":"341322","n":"萧县"},{"c":"341323","n":"灵璧县"},{"c":"341324","n":"泗县"}]},{"c":"3415","n":"六安市","ch":[{"c":"341502","n":"金安区"},{"c":"341503","n":"裕安区"},{"c":"341504","n":"叶集区"},{"c":"341522","n":"霍邱县"},{"c":"341523","n":"舒城县"},{"c":"341524","n":"金寨县"},{"c":"341525","n":"霍山县"}]},{"c":"3416","n":"亳州市","ch":[{"c":"341602","n":"谯城区"},{"c":"341621","n":"涡阳县"},{"c":"341622","n":"蒙城县"},{"c":"341623","n":"利辛县"}]},{"c":"3417","n":"池州市","ch":[{"c":"341702","n":"贵池区"},{"c":"341721","n":"东至县"},{"c":"341722","n":"石台县"},{"c":"341723","n":"青阳县"}]},{"c":"3418","n":"宣城市","ch":[{"c":"341802","n":"宣州区"},{"c":"341821","n":"郎溪县"},{"c":"341823","n":"泾县"},{"c":"341824","n":"绩溪县"},{"c":"341825","n":"旌德县"},{"c":"341881","n":"宁国市"},{"c":"341882","n":"广德市"}]}]},{"c":35,"n":"福建省","ch":[{"c":"3501","n":"福州市","ch":[{"c":"350102","n":"鼓楼区"},{"c":"350103","n":"台江区"},{"c":"350104","n":"仓山区"},{"c":"350105","n":"马尾区"},{"c":"350111","n":"晋安区"},{"c":"350112","n":"长乐区"},{"c":"350121","n":"闽侯县"},{"c":"350122","n":"连江县"},{"c":"350123","n":"罗源县"},{"c":"350124","n":"闽清县"},{"c":"350125","n":"永泰县"},{"c":"350128","n":"平潭县"},{"c":"350181","n":"福清市"}]},{"c":"3502","n":"厦门市","ch":[{"c":"350203","n":"思明区"},{"c":"350205","n":"海沧区"},{"c":"350206","n":"湖里区"},{"c":"350211","n":"集美区"},{"c":"350212","n":"同安区"},{"c":"350213","n":"翔安区"}]},{"c":"3503","n":"莆田市","ch":[{"c":"350302","n":"城厢区"},{"c":"350303","n":"涵江区"},{"c":"350304","n":"荔城区"},{"c":"350305","n":"秀屿区"},{"c":"350322","n":"仙游县"}]},{"c":"3504","n":"三明市","ch":[{"c":"350404","n":"三元区"},{"c":"350405","n":"沙县区"},{"c":"350421","n":"明溪县"},{"c":"350423","n":"清流县"},{"c":"350424","n":"宁化县"},{"c":"350425","n":"大田县"},{"c":"350426","n":"尤溪县"},{"c":"350428","n":"将乐县"},{"c":"350429","n":"泰宁县"},{"c":"350430","n":"建宁县"},{"c":"350481","n":"永安市"}]},{"c":"3505","n":"泉州市","ch":[{"c":"350502","n":"鲤城区"},{"c":"350503","n":"丰泽区"},{"c":"350504","n":"洛江区"},{"c":"350505","n":"泉港区"},{"c":"350521","n":"惠安县"},{"c":"350524","n":"安溪县"},{"c":"350525","n":"永春县"},{"c":"350526","n":"德化县"},{"c":"350527","n":"金门县"},{"c":"350581","n":"石狮市"},{"c":"350582","n":"晋江市"},{"c":"350583","n":"南安市"}]},{"c":"3506","n":"漳州市","ch":[{"c":"350602","n":"芗城区"},{"c":"350603","n":"龙文区"},{"c":"350604","n":"龙海区"},{"c":"350605","n":"长泰区"},{"c":"350622","n":"云霄县"},{"c":"350623","n":"漳浦县"},{"c":"350624","n":"诏安县"},{"c":"350626","n":"东山县"},{"c":"350627","n":"南靖县"},{"c":"350628","n":"平和县"},{"c":"350629","n":"华安县"}]},{"c":"3507","n":"南平市","ch":[{"c":"350702","n":"延平区"},{"c":"350703","n":"建阳区"},{"c":"350721","n":"顺昌县"},{"c":"350722","n":"浦城县"},{"c":"350723","n":"光泽县"},{"c":"350724","n":"松溪县"},{"c":"350725","n":"政和县"},{"c":"350781","n":"邵武市"},{"c":"350782","n":"武夷山市"},{"c":"350783","n":"建瓯市"}]},{"c":"3508","n":"龙岩市","ch":[{"c":"350802","n":"新罗区"},{"c":"350803","n":"永定区"},{"c":"350821","n":"长汀县"},{"c":"350823","n":"上杭县"},{"c":"350824","n":"武平县"},{"c":"350825","n":"连城县"},{"c":"350881","n":"漳平市"}]},{"c":"3509","n":"宁德市","ch":[{"c":"350902","n":"蕉城区"},{"c":"350921","n":"霞浦县"},{"c":"350922","n":"古田县"},{"c":"350923","n":"屏南县"},{"c":"350924","n":"寿宁县"},{"c":"350925","n":"周宁县"},{"c":"350926","n":"柘荣县"},{"c":"350981","n":"福安市"},{"c":"350982","n":"福鼎市"}]}]},{"c":36,"n":"江西省","ch":[{"c":"3601","n":"南昌市","ch":[{"c":"360102","n":"东湖区"},{"c":"360103","n":"西湖区"},{"c":"360104","n":"青云谱区"},{"c":"360111","n":"青山湖区"},{"c":"360112","n":"新建区"},{"c":"360113","n":"红谷滩区"},{"c":"360121","n":"南昌县"},{"c":"360123","n":"安义县"},{"c":"360124","n":"进贤县"}]},{"c":"3602","n":"景德镇市","ch":[{"c":"360202","n":"昌江区"},{"c":"360203","n":"珠山区"},{"c":"360222","n":"浮梁县"},{"c":"360281","n":"乐平市"}]},{"c":"3603","n":"萍乡市","ch":[{"c":"360302","n":"安源区"},{"c":"360313","n":"湘东区"},{"c":"360321","n":"莲花县"},{"c":"360322","n":"上栗县"},{"c":"360323","n":"芦溪县"}]},{"c":"3604","n":"九江市","ch":[{"c":"360402","n":"濂溪区"},{"c":"360403","n":"浔阳区"},{"c":"360404","n":"柴桑区"},{"c":"360423","n":"武宁县"},{"c":"360424","n":"修水县"},{"c":"360425","n":"永修县"},{"c":"360426","n":"德安县"},{"c":"360428","n":"都昌县"},{"c":"360429","n":"湖口县"},{"c":"360430","n":"彭泽县"},{"c":"360481","n":"瑞昌市"},{"c":"360482","n":"共青城市"},{"c":"360483","n":"庐山市"}]},{"c":"3605","n":"新余市","ch":[{"c":"360502","n":"渝水区"},{"c":"360521","n":"分宜县"}]},{"c":"3606","n":"鹰潭市","ch":[{"c":"360602","n":"月湖区"},{"c":"360603","n":"余江区"},{"c":"360681","n":"贵溪市"}]},{"c":"3607","n":"赣州市","ch":[{"c":"360702","n":"章贡区"},{"c":"360703","n":"南康区"},{"c":"360704","n":"赣县区"},{"c":"360722","n":"信丰县"},{"c":"360723","n":"大余县"},{"c":"360724","n":"上犹县"},{"c":"360725","n":"崇义县"},{"c":"360726","n":"安远县"},{"c":"360728","n":"定南县"},{"c":"360729","n":"全南县"},{"c":"360730","n":"宁都县"},{"c":"360731","n":"于都县"},{"c":"360732","n":"兴国县"},{"c":"360733","n":"会昌县"},{"c":"360734","n":"寻乌县"},{"c":"360735","n":"石城县"},{"c":"360781","n":"瑞金市"},{"c":"360783","n":"龙南市"}]},{"c":"3608","n":"吉安市","ch":[{"c":"360802","n":"吉州区"},{"c":"360803","n":"青原区"},{"c":"360821","n":"吉安县"},{"c":"360822","n":"吉水县"},{"c":"360823","n":"峡江县"},{"c":"360824","n":"新干县"},{"c":"360825","n":"永丰县"},{"c":"360826","n":"泰和县"},{"c":"360827","n":"遂川县"},{"c":"360828","n":"万安县"},{"c":"360829","n":"安福县"},{"c":"360830","n":"永新县"},{"c":"360881","n":"井冈山市"}]},{"c":"3609","n":"宜春市","ch":[{"c":"360902","n":"袁州区"},{"c":"360921","n":"奉新县"},{"c":"360922","n":"万载县"},{"c":"360923","n":"上高县"},{"c":"360924","n":"宜丰县"},{"c":"360925","n":"靖安县"},{"c":"360926","n":"铜鼓县"},{"c":"360981","n":"丰城市"},{"c":"360982","n":"樟树市"},{"c":"360983","n":"高安市"}]},{"c":"3610","n":"抚州市","ch":[{"c":"361002","n":"临川区"},{"c":"361003","n":"东乡区"},{"c":"361021","n":"南城县"},{"c":"361022","n":"黎川县"},{"c":"361023","n":"南丰县"},{"c":"361024","n":"崇仁县"},{"c":"361025","n":"乐安县"},{"c":"361026","n":"宜黄县"},{"c":"361027","n":"金溪县"},{"c":"361028","n":"资溪县"},{"c":"361030","n":"广昌县"}]},{"c":"3611","n":"上饶市","ch":[{"c":"361102","n":"信州区"},{"c":"361103","n":"广丰区"},{"c":"361104","n":"广信区"},{"c":"361123","n":"玉山县"},{"c":"361124","n":"铅山县"},{"c":"361125","n":"横峰县"},{"c":"361126","n":"弋阳县"},{"c":"361127","n":"余干县"},{"c":"361128","n":"鄱阳县"},{"c":"361129","n":"万年县"},{"c":"361130","n":"婺源县"},{"c":"361181","n":"德兴市"}]}]},{"c":37,"n":"山东省","ch":[{"c":"3701","n":"济南市","ch":[{"c":"370102","n":"历下区"},{"c":"370103","n":"市中区"},{"c":"370104","n":"槐荫区"},{"c":"370105","n":"天桥区"},{"c":"370112","n":"历城区"},{"c":"370113","n":"长清区"},{"c":"370114","n":"章丘区"},{"c":"370115","n":"济阳区"},{"c":"370116","n":"莱芜区"},{"c":"370117","n":"钢城区"},{"c":"370124","n":"平阴县"},{"c":"370126","n":"商河县"}]},{"c":"3702","n":"青岛市","ch":[{"c":"370202","n":"市南区"},{"c":"370203","n":"市北区"},{"c":"370211","n":"黄岛区"},{"c":"370212","n":"崂山区"},{"c":"370213","n":"李沧区"},{"c":"370214","n":"城阳区"},{"c":"370215","n":"即墨区"},{"c":"370281","n":"胶州市"},{"c":"370283","n":"平度市"},{"c":"370285","n":"莱西市"}]},{"c":"3703","n":"淄博市","ch":[{"c":"370302","n":"淄川区"},{"c":"370303","n":"张店区"},{"c":"370304","n":"博山区"},{"c":"370305","n":"临淄区"},{"c":"370306","n":"周村区"},{"c":"370321","n":"桓台县"},{"c":"370322","n":"高青县"},{"c":"370323","n":"沂源县"}]},{"c":"3704","n":"枣庄市","ch":[{"c":"370402","n":"市中区"},{"c":"370403","n":"薛城区"},{"c":"370404","n":"峄城区"},{"c":"370405","n":"台儿庄区"},{"c":"370406","n":"山亭区"},{"c":"370481","n":"滕州市"}]},{"c":"3705","n":"东营市","ch":[{"c":"370502","n":"东营区"},{"c":"370503","n":"河口区"},{"c":"370505","n":"垦利区"},{"c":"370522","n":"利津县"},{"c":"370523","n":"广饶县"}]},{"c":"3706","n":"烟台市","ch":[{"c":"370602","n":"芝罘区"},{"c":"370611","n":"福山区"},{"c":"370612","n":"牟平区"},{"c":"370613","n":"莱山区"},{"c":"370614","n":"蓬莱区"},{"c":"370681","n":"龙口市"},{"c":"370682","n":"莱阳市"},{"c":"370683","n":"莱州市"},{"c":"370685","n":"招远市"},{"c":"370686","n":"栖霞市"},{"c":"370687","n":"海阳市"}]},{"c":"3707","n":"潍坊市","ch":[{"c":"370702","n":"潍城区"},{"c":"370703","n":"寒亭区"},{"c":"370704","n":"坊子区"},{"c":"370705","n":"奎文区"},{"c":"370724","n":"临朐县"},{"c":"370725","n":"昌乐县"},{"c":"370781","n":"青州市"},{"c":"370782","n":"诸城市"},{"c":"370783","n":"寿光市"},{"c":"370784","n":"安丘市"},{"c":"370785","n":"高密市"},{"c":"370786","n":"昌邑市"}]},{"c":"3708","n":"济宁市","ch":[{"c":"370811","n":"任城区"},{"c":"370812","n":"兖州区"},{"c":"370826","n":"微山县"},{"c":"370827","n":"鱼台县"},{"c":"370828","n":"金乡县"},{"c":"370829","n":"嘉祥县"},{"c":"370830","n":"汶上县"},{"c":"370831","n":"泗水县"},{"c":"370832","n":"梁山县"},{"c":"370881","n":"曲阜市"},{"c":"370883","n":"邹城市"}]},{"c":"3709","n":"泰安市","ch":[{"c":"370902","n":"泰山区"},{"c":"370911","n":"岱岳区"},{"c":"370921","n":"宁阳县"},{"c":"370923","n":"东平县"},{"c":"370982","n":"新泰市"},{"c":"370983","n":"肥城市"}]},{"c":"3710","n":"威海市","ch":[{"c":"371002","n":"环翠区"},{"c":"371003","n":"文登区"},{"c":"371082","n":"荣成市"},{"c":"371083","n":"乳山市"}]},{"c":"3711","n":"日照市","ch":[{"c":"371102","n":"东港区"},{"c":"371103","n":"岚山区"},{"c":"371121","n":"五莲县"},{"c":"371122","n":"莒县"}]},{"c":"3713","n":"临沂市","ch":[{"c":"371302","n":"兰山区"},{"c":"371311","n":"罗庄区"},{"c":"371312","n":"河东区"},{"c":"371321","n":"沂南县"},{"c":"371322","n":"郯城县"},{"c":"371323","n":"沂水县"},{"c":"371324","n":"兰陵县"},{"c":"371325","n":"费县"},{"c":"371326","n":"平邑县"},{"c":"371327","n":"莒南县"},{"c":"371328","n":"蒙阴县"},{"c":"371329","n":"临沭县"}]},{"c":"3714","n":"德州市","ch":[{"c":"371402","n":"德城区"},{"c":"371403","n":"陵城区"},{"c":"371422","n":"宁津县"},{"c":"371423","n":"庆云县"},{"c":"371424","n":"临邑县"},{"c":"371425","n":"齐河县"},{"c":"371426","n":"平原县"},{"c":"371427","n":"夏津县"},{"c":"371428","n":"武城县"},{"c":"371481","n":"乐陵市"},{"c":"371482","n":"禹城市"}]},{"c":"3715","n":"聊城市","ch":[{"c":"371502","n":"东昌府区"},{"c":"371503","n":"茌平区"},{"c":"371521","n":"阳谷县"},{"c":"371522","n":"莘县"},{"c":"371524","n":"东阿县"},{"c":"371525","n":"冠县"},{"c":"371526","n":"高唐县"},{"c":"371581","n":"临清市"}]},{"c":"3716","n":"滨州市","ch":[{"c":"371602","n":"滨城区"},{"c":"371603","n":"沾化区"},{"c":"371621","n":"惠民县"},{"c":"371622","n":"阳信县"},{"c":"371623","n":"无棣县"},{"c":"371625","n":"博兴县"},{"c":"371681","n":"邹平市"}]},{"c":"3717","n":"菏泽市","ch":[{"c":"371702","n":"牡丹区"},{"c":"371703","n":"定陶区"},{"c":"371721","n":"曹县"},{"c":"371722","n":"单县"},{"c":"371723","n":"成武县"},{"c":"371724","n":"巨野县"},{"c":"371725","n":"郓城县"},{"c":"371726","n":"鄄城县"},{"c":"371728","n":"东明县"}]}]},{"c":41,"n":"河南省","ch":[{"c":"4101","n":"郑州市","ch":[{"c":"410102","n":"中原区"},{"c":"410103","n":"二七区"},{"c":"410104","n":"管城回族区"},{"c":"410105","n":"金水区"},{"c":"410106","n":"上街区"},{"c":"410108","n":"惠济区"},{"c":"410122","n":"中牟县"},{"c":"410181","n":"巩义市"},{"c":"410182","n":"荥阳市"},{"c":"410183","n":"新密市"},{"c":"410184","n":"新郑市"},{"c":"410185","n":"登封市"}]},{"c":"4102","n":"开封市","ch":[{"c":"410202","n":"龙亭区"},{"c":"410203","n":"顺河回族区"},{"c":"410204","n":"鼓楼区"},{"c":"410205","n":"禹王台区"},{"c":"410212","n":"祥符区"},{"c":"410221","n":"杞县"},{"c":"410222","n":"通许县"},{"c":"410223","n":"尉氏县"},{"c":"410225","n":"兰考县"}]},{"c":"4103","n":"洛阳市","ch":[{"c":"410302","n":"老城区"},{"c":"410303","n":"西工区"},{"c":"410304","n":"瀍河回族区"},{"c":"410305","n":"涧西区"},{"c":"410307","n":"偃师区"},{"c":"410308","n":"孟津区"},{"c":"410311","n":"洛龙区"},{"c":"410323","n":"新安县"},{"c":"410324","n":"栾川县"},{"c":"410325","n":"嵩县"},{"c":"410326","n":"汝阳县"},{"c":"410327","n":"宜阳县"},{"c":"410328","n":"洛宁县"},{"c":"410329","n":"伊川县"}]},{"c":"4104","n":"平顶山市","ch":[{"c":"410402","n":"新华区"},{"c":"410403","n":"卫东区"},{"c":"410404","n":"石龙区"},{"c":"410411","n":"湛河区"},{"c":"410421","n":"宝丰县"},{"c":"410422","n":"叶县"},{"c":"410423","n":"鲁山县"},{"c":"410425","n":"郏县"},{"c":"410481","n":"舞钢市"},{"c":"410482","n":"汝州市"}]},{"c":"4105","n":"安阳市","ch":[{"c":"410502","n":"文峰区"},{"c":"410503","n":"北关区"},{"c":"410505","n":"殷都区"},{"c":"410506","n":"龙安区"},{"c":"410522","n":"安阳县"},{"c":"410523","n":"汤阴县"},{"c":"410526","n":"滑县"},{"c":"410527","n":"内黄县"},{"c":"410581","n":"林州市"}]},{"c":"4106","n":"鹤壁市","ch":[{"c":"410602","n":"鹤山区"},{"c":"410603","n":"山城区"},{"c":"410611","n":"淇滨区"},{"c":"410621","n":"浚县"},{"c":"410622","n":"淇县"}]},{"c":"4107","n":"新乡市","ch":[{"c":"410702","n":"红旗区"},{"c":"410703","n":"卫滨区"},{"c":"410704","n":"凤泉区"},{"c":"410711","n":"牧野区"},{"c":"410721","n":"新乡县"},{"c":"410724","n":"获嘉县"},{"c":"410725","n":"原阳县"},{"c":"410726","n":"延津县"},{"c":"410727","n":"封丘县"},{"c":"410781","n":"卫辉市"},{"c":"410782","n":"辉县市"},{"c":"410783","n":"长垣市"}]},{"c":"4108","n":"焦作市","ch":[{"c":"410802","n":"解放区"},{"c":"410803","n":"中站区"},{"c":"410804","n":"马村区"},{"c":"410811","n":"山阳区"},{"c":"410821","n":"修武县"},{"c":"410822","n":"博爱县"},{"c":"410823","n":"武陟县"},{"c":"410825","n":"温县"},{"c":"410882","n":"沁阳市"},{"c":"410883","n":"孟州市"}]},{"c":"4109","n":"濮阳市","ch":[{"c":"410902","n":"华龙区"},{"c":"410922","n":"清丰县"},{"c":"410923","n":"南乐县"},{"c":"410926","n":"范县"},{"c":"410927","n":"台前县"},{"c":"410928","n":"濮阳县"}]},{"c":"4110","n":"许昌市","ch":[{"c":"411002","n":"魏都区"},{"c":"411003","n":"建安区"},{"c":"411024","n":"鄢陵县"},{"c":"411025","n":"襄城县"},{"c":"411081","n":"禹州市"},{"c":"411082","n":"长葛市"}]},{"c":"4111","n":"漯河市","ch":[{"c":"411102","n":"源汇区"},{"c":"411103","n":"郾城区"},{"c":"411104","n":"召陵区"},{"c":"411121","n":"舞阳县"},{"c":"411122","n":"临颍县"}]},{"c":"4112","n":"三门峡市","ch":[{"c":"411202","n":"湖滨区"},{"c":"411203","n":"陕州区"},{"c":"411221","n":"渑池县"},{"c":"411224","n":"卢氏县"},{"c":"411281","n":"义马市"},{"c":"411282","n":"灵宝市"}]},{"c":"4113","n":"南阳市","ch":[{"c":"411302","n":"宛城区"},{"c":"411303","n":"卧龙区"},{"c":"411321","n":"南召县"},{"c":"411322","n":"方城县"},{"c":"411323","n":"西峡县"},{"c":"411324","n":"镇平县"},{"c":"411325","n":"内乡县"},{"c":"411326","n":"淅川县"},{"c":"411327","n":"社旗县"},{"c":"411328","n":"唐河县"},{"c":"411329","n":"新野县"},{"c":"411330","n":"桐柏县"},{"c":"411381","n":"邓州市"}]},{"c":"4114","n":"商丘市","ch":[{"c":"411402","n":"梁园区"},{"c":"411403","n":"睢阳区"},{"c":"411421","n":"民权县"},{"c":"411422","n":"睢县"},{"c":"411423","n":"宁陵县"},{"c":"411424","n":"柘城县"},{"c":"411425","n":"虞城县"},{"c":"411426","n":"夏邑县"},{"c":"411481","n":"永城市"}]},{"c":"4115","n":"信阳市","ch":[{"c":"411502","n":"浉河区"},{"c":"411503","n":"平桥区"},{"c":"411521","n":"罗山县"},{"c":"411522","n":"光山县"},{"c":"411523","n":"新县"},{"c":"411524","n":"商城县"},{"c":"411525","n":"固始县"},{"c":"411526","n":"潢川县"},{"c":"411527","n":"淮滨县"},{"c":"411528","n":"息县"}]},{"c":"4116","n":"周口市","ch":[{"c":"411602","n":"川汇区"},{"c":"411603","n":"淮阳区"},{"c":"411621","n":"扶沟县"},{"c":"411622","n":"西华县"},{"c":"411623","n":"商水县"},{"c":"411624","n":"沈丘县"},{"c":"411625","n":"郸城县"},{"c":"411627","n":"太康县"},{"c":"411628","n":"鹿邑县"},{"c":"411681","n":"项城市"}]},{"c":"4117","n":"驻马店市","ch":[{"c":"411702","n":"驿城区"},{"c":"411721","n":"西平县"},{"c":"411722","n":"上蔡县"},{"c":"411723","n":"平舆县"},{"c":"411724","n":"正阳县"},{"c":"411725","n":"确山县"},{"c":"411726","n":"泌阳县"},{"c":"411727","n":"汝南县"},{"c":"411728","n":"遂平县"},{"c":"411729","n":"新蔡县"}]},{"c":"4190","n":"河南省","ch":[{"c":"419001","n":"济源市"}]}]},{"c":42,"n":"湖北省","ch":[{"c":"4201","n":"武汉市","ch":[{"c":"420102","n":"江岸区"},{"c":"420103","n":"江汉区"},{"c":"420104","n":"硚口区"},{"c":"420105","n":"汉阳区"},{"c":"420106","n":"武昌区"},{"c":"420107","n":"青山区"},{"c":"420111","n":"洪山区"},{"c":"420112","n":"东西湖区"},{"c":"420113","n":"汉南区"},{"c":"420114","n":"蔡甸区"},{"c":"420115","n":"江夏区"},{"c":"420116","n":"黄陂区"},{"c":"420117","n":"新洲区"}]},{"c":"4202","n":"黄石市","ch":[{"c":"420202","n":"黄石港区"},{"c":"420203","n":"西塞山区"},{"c":"420204","n":"下陆区"},{"c":"420205","n":"铁山区"},{"c":"420222","n":"阳新县"},{"c":"420281","n":"大冶市"}]},{"c":"4203","n":"十堰市","ch":[{"c":"420302","n":"茅箭区"},{"c":"420303","n":"张湾区"},{"c":"420304","n":"郧阳区"},{"c":"420322","n":"郧西县"},{"c":"420323","n":"竹山县"},{"c":"420324","n":"竹溪县"},{"c":"420325","n":"房县"},{"c":"420381","n":"丹江口市"}]},{"c":"4205","n":"宜昌市","ch":[{"c":"420502","n":"西陵区"},{"c":"420503","n":"伍家岗区"},{"c":"420504","n":"点军区"},{"c":"420505","n":"猇亭区"},{"c":"420506","n":"夷陵区"},{"c":"420525","n":"远安县"},{"c":"420526","n":"兴山县"},{"c":"420527","n":"秭归县"},{"c":"420528","n":"长阳土家族自治县"},{"c":"420529","n":"五峰土家族自治县"},{"c":"420581","n":"宜都市"},{"c":"420582","n":"当阳市"},{"c":"420583","n":"枝江市"}]},{"c":"4206","n":"襄阳市","ch":[{"c":"420602","n":"襄城区"},{"c":"420606","n":"樊城区"},{"c":"420607","n":"襄州区"},{"c":"420624","n":"南漳县"},{"c":"420625","n":"谷城县"},{"c":"420626","n":"保康县"},{"c":"420682","n":"老河口市"},{"c":"420683","n":"枣阳市"},{"c":"420684","n":"宜城市"}]},{"c":"4207","n":"鄂州市","ch":[{"c":"420702","n":"梁子湖区"},{"c":"420703","n":"华容区"},{"c":"420704","n":"鄂城区"}]},{"c":"4208","n":"荆门市","ch":[{"c":"420802","n":"东宝区"},{"c":"420804","n":"掇刀区"},{"c":"420822","n":"沙洋县"},{"c":"420881","n":"钟祥市"},{"c":"420882","n":"京山市"}]},{"c":"4209","n":"孝感市","ch":[{"c":"420902","n":"孝南区"},{"c":"420921","n":"孝昌县"},{"c":"420922","n":"大悟县"},{"c":"420923","n":"云梦县"},{"c":"420981","n":"应城市"},{"c":"420982","n":"安陆市"},{"c":"420984","n":"汉川市"}]},{"c":"4210","n":"荆州市","ch":[{"c":"421002","n":"沙市区"},{"c":"421003","n":"荆州区"},{"c":"421022","n":"公安县"},{"c":"421024","n":"江陵县"},{"c":"421081","n":"石首市"},{"c":"421083","n":"洪湖市"},{"c":"421087","n":"松滋市"},{"c":"421088","n":"监利市"}]},{"c":"4211","n":"黄冈市","ch":[{"c":"421102","n":"黄州区"},{"c":"421121","n":"团风县"},{"c":"421122","n":"红安县"},{"c":"421123","n":"罗田县"},{"c":"421124","n":"英山县"},{"c":"421125","n":"浠水县"},{"c":"421126","n":"蕲春县"},{"c":"421127","n":"黄梅县"},{"c":"421181","n":"麻城市"},{"c":"421182","n":"武穴市"}]},{"c":"4212","n":"咸宁市","ch":[{"c":"421202","n":"咸安区"},{"c":"421221","n":"嘉鱼县"},{"c":"421222","n":"通城县"},{"c":"421223","n":"崇阳县"},{"c":"421224","n":"通山县"},{"c":"421281","n":"赤壁市"}]},{"c":"4213","n":"随州市","ch":[{"c":"421303","n":"曾都区"},{"c":"421321","n":"随县"},{"c":"421381","n":"广水市"}]},{"c":"4228","n":"恩施土家族苗族自治州","ch":[{"c":"422801","n":"恩施市"},{"c":"422802","n":"利川市"},{"c":"422822","n":"建始县"},{"c":"422823","n":"巴东县"},{"c":"422825","n":"宣恩县"},{"c":"422826","n":"咸丰县"},{"c":"422827","n":"来凤县"},{"c":"422828","n":"鹤峰县"}]},{"c":"4290","n":"湖北省","ch":[{"c":"429004","n":"仙桃市"},{"c":"429005","n":"潜江市"},{"c":"429006","n":"天门市"},{"c":"429021","n":"神农架林区"}]}]},{"c":43,"n":"湖南省","ch":[{"c":"4301","n":"长沙市","ch":[{"c":"430102","n":"芙蓉区"},{"c":"430103","n":"天心区"},{"c":"430104","n":"岳麓区"},{"c":"430105","n":"开福区"},{"c":"430111","n":"雨花区"},{"c":"430112","n":"望城区"},{"c":"430121","n":"长沙县"},{"c":"430181","n":"浏阳市"},{"c":"430182","n":"宁乡市"}]},{"c":"4302","n":"株洲市","ch":[{"c":"430202","n":"荷塘区"},{"c":"430203","n":"芦淞区"},{"c":"430204","n":"石峰区"},{"c":"430211","n":"天元区"},{"c":"430212","n":"渌口区"},{"c":"430223","n":"攸县"},{"c":"430224","n":"茶陵县"},{"c":"430225","n":"炎陵县"},{"c":"430281","n":"醴陵市"}]},{"c":"4303","n":"湘潭市","ch":[{"c":"430302","n":"雨湖区"},{"c":"430304","n":"岳塘区"},{"c":"430321","n":"湘潭县"},{"c":"430381","n":"湘乡市"},{"c":"430382","n":"韶山市"}]},{"c":"4304","n":"衡阳市","ch":[{"c":"430405","n":"珠晖区"},{"c":"430406","n":"雁峰区"},{"c":"430407","n":"石鼓区"},{"c":"430408","n":"蒸湘区"},{"c":"430412","n":"南岳区"},{"c":"430421","n":"衡阳县"},{"c":"430422","n":"衡南县"},{"c":"430423","n":"衡山县"},{"c":"430424","n":"衡东县"},{"c":"430426","n":"祁东县"},{"c":"430481","n":"耒阳市"},{"c":"430482","n":"常宁市"}]},{"c":"4305","n":"邵阳市","ch":[{"c":"430502","n":"双清区"},{"c":"430503","n":"大祥区"},{"c":"430511","n":"北塔区"},{"c":"430522","n":"新邵县"},{"c":"430523","n":"邵阳县"},{"c":"430524","n":"隆回县"},{"c":"430525","n":"洞口县"},{"c":"430527","n":"绥宁县"},{"c":"430528","n":"新宁县"},{"c":"430529","n":"城步苗族自治县"},{"c":"430581","n":"武冈市"},{"c":"430582","n":"邵东市"}]},{"c":"4306","n":"岳阳市","ch":[{"c":"430602","n":"岳阳楼区"},{"c":"430603","n":"云溪区"},{"c":"430611","n":"君山区"},{"c":"430621","n":"岳阳县"},{"c":"430623","n":"华容县"},{"c":"430624","n":"湘阴县"},{"c":"430626","n":"平江县"},{"c":"430681","n":"汨罗市"},{"c":"430682","n":"临湘市"}]},{"c":"4307","n":"常德市","ch":[{"c":"430702","n":"武陵区"},{"c":"430703","n":"鼎城区"},{"c":"430721","n":"安乡县"},{"c":"430722","n":"汉寿县"},{"c":"430723","n":"澧县"},{"c":"430724","n":"临澧县"},{"c":"430725","n":"桃源县"},{"c":"430726","n":"石门县"},{"c":"430781","n":"津市市"}]},{"c":"4308","n":"张家界市","ch":[{"c":"430802","n":"永定区"},{"c":"430811","n":"武陵源区"},{"c":"430821","n":"慈利县"},{"c":"430822","n":"桑植县"}]},{"c":"4309","n":"益阳市","ch":[{"c":"430902","n":"资阳区"},{"c":"430903","n":"赫山区"},{"c":"430921","n":"南县"},{"c":"430922","n":"桃江县"},{"c":"430923","n":"安化县"},{"c":"430981","n":"沅江市"}]},{"c":"4310","n":"郴州市","ch":[{"c":"431002","n":"北湖区"},{"c":"431003","n":"苏仙区"},{"c":"431021","n":"桂阳县"},{"c":"431022","n":"宜章县"},{"c":"431023","n":"永兴县"},{"c":"431024","n":"嘉禾县"},{"c":"431025","n":"临武县"},{"c":"431026","n":"汝城县"},{"c":"431027","n":"桂东县"},{"c":"431028","n":"安仁县"},{"c":"431081","n":"资兴市"}]},{"c":"4311","n":"永州市","ch":[{"c":"431102","n":"零陵区"},{"c":"431103","n":"冷水滩区"},{"c":"431122","n":"东安县"},{"c":"431123","n":"双牌县"},{"c":"431124","n":"道县"},{"c":"431125","n":"江永县"},{"c":"431126","n":"宁远县"},{"c":"431127","n":"蓝山县"},{"c":"431128","n":"新田县"},{"c":"431129","n":"江华瑶族自治县"},{"c":"431181","n":"祁阳市"}]},{"c":"4312","n":"怀化市","ch":[{"c":"431202","n":"鹤城区"},{"c":"431221","n":"中方县"},{"c":"431222","n":"沅陵县"},{"c":"431223","n":"辰溪县"},{"c":"431224","n":"溆浦县"},{"c":"431225","n":"会同县"},{"c":"431226","n":"麻阳苗族自治县"},{"c":"431227","n":"新晃侗族自治县"},{"c":"431228","n":"芷江侗族自治县"},{"c":"431229","n":"靖州苗族侗族自治县"},{"c":"431230","n":"通道侗族自治县"},{"c":"431281","n":"洪江市"}]},{"c":"4313","n":"娄底市","ch":[{"c":"431302","n":"娄星区"},{"c":"431321","n":"双峰县"},{"c":"431322","n":"新化县"},{"c":"431381","n":"冷水江市"},{"c":"431382","n":"涟源市"}]},{"c":"4331","n":"湘西土家族苗族自治州","ch":[{"c":"433101","n":"吉首市"},{"c":"433122","n":"泸溪县"},{"c":"433123","n":"凤凰县"},{"c":"433124","n":"花垣县"},{"c":"433125","n":"保靖县"},{"c":"433126","n":"古丈县"},{"c":"433127","n":"永顺县"},{"c":"433130","n":"龙山县"}]}]},{"c":44,"n":"广东省","ch":[{"c":"4401","n":"广州市","ch":[{"c":"440103","n":"荔湾区"},{"c":"440104","n":"越秀区"},{"c":"440105","n":"海珠区"},{"c":"440106","n":"天河区"},{"c":"440111","n":"白云区"},{"c":"440112","n":"黄埔区"},{"c":"440113","n":"番禺区"},{"c":"440114","n":"花都区"},{"c":"440115","n":"南沙区"},{"c":"440117","n":"从化区"},{"c":"440118","n":"增城区"}]},{"c":"4402","n":"韶关市","ch":[{"c":"440203","n":"武江区"},{"c":"440204","n":"浈江区"},{"c":"440205","n":"曲江区"},{"c":"440222","n":"始兴县"},{"c":"440224","n":"仁化县"},{"c":"440229","n":"翁源县"},{"c":"440232","n":"乳源瑶族自治县"},{"c":"440233","n":"新丰县"},{"c":"440281","n":"乐昌市"},{"c":"440282","n":"南雄市"}]},{"c":"4403","n":"深圳市","ch":[{"c":"440303","n":"罗湖区"},{"c":"440304","n":"福田区"},{"c":"440305","n":"南山区"},{"c":"440306","n":"宝安区"},{"c":"440307","n":"龙岗区"},{"c":"440308","n":"盐田区"},{"c":"440309","n":"龙华区"},{"c":"440310","n":"坪山区"},{"c":"440311","n":"光明区"}]},{"c":"4404","n":"珠海市","ch":[{"c":"440402","n":"香洲区"},{"c":"440403","n":"斗门区"},{"c":"440404","n":"金湾区"}]},{"c":"4405","n":"汕头市","ch":[{"c":"440507","n":"龙湖区"},{"c":"440511","n":"金平区"},{"c":"440512","n":"濠江区"},{"c":"440513","n":"潮阳区"},{"c":"440514","n":"潮南区"},{"c":"440515","n":"澄海区"},{"c":"440523","n":"南澳县"}]},{"c":"4406","n":"佛山市","ch":[{"c":"440604","n":"禅城区"},{"c":"440605","n":"南海区"},{"c":"440606","n":"顺德区"},{"c":"440607","n":"三水区"},{"c":"440608","n":"高明区"}]},{"c":"4407","n":"江门市","ch":[{"c":"440703","n":"蓬江区"},{"c":"440704","n":"江海区"},{"c":"440705","n":"新会区"},{"c":"440781","n":"台山市"},{"c":"440783","n":"开平市"},{"c":"440784","n":"鹤山市"},{"c":"440785","n":"恩平市"}]},{"c":"4408","n":"湛江市","ch":[{"c":"440802","n":"赤坎区"},{"c":"440803","n":"霞山区"},{"c":"440804","n":"坡头区"},{"c":"440811","n":"麻章区"},{"c":"440823","n":"遂溪县"},{"c":"440825","n":"徐闻县"},{"c":"440881","n":"廉江市"},{"c":"440882","n":"雷州市"},{"c":"440883","n":"吴川市"}]},{"c":"4409","n":"茂名市","ch":[{"c":"440902","n":"茂南区"},{"c":"440904","n":"电白区"},{"c":"440981","n":"高州市"},{"c":"440982","n":"化州市"},{"c":"440983","n":"信宜市"}]},{"c":"4412","n":"肇庆市","ch":[{"c":"441202","n":"端州区"},{"c":"441203","n":"鼎湖区"},{"c":"441204","n":"高要区"},{"c":"441223","n":"广宁县"},{"c":"441224","n":"怀集县"},{"c":"441225","n":"封开县"},{"c":"441226","n":"德庆县"},{"c":"441284","n":"四会市"}]},{"c":"4413","n":"惠州市","ch":[{"c":"441302","n":"惠城区"},{"c":"441303","n":"惠阳区"},{"c":"441322","n":"博罗县"},{"c":"441323","n":"惠东县"},{"c":"441324","n":"龙门县"}]},{"c":"4414","n":"梅州市","ch":[{"c":"441402","n":"梅江区"},{"c":"441403","n":"梅县区"},{"c":"441422","n":"大埔县"},{"c":"441423","n":"丰顺县"},{"c":"441424","n":"五华县"},{"c":"441426","n":"平远县"},{"c":"441427","n":"蕉岭县"},{"c":"441481","n":"兴宁市"}]},{"c":"4415","n":"汕尾市","ch":[{"c":"441502","n":"城区"},{"c":"441521","n":"海丰县"},{"c":"441523","n":"陆河县"},{"c":"441581","n":"陆丰市"}]},{"c":"4416","n":"河源市","ch":[{"c":"441602","n":"源城区"},{"c":"441621","n":"紫金县"},{"c":"441622","n":"龙川县"},{"c":"441623","n":"连平县"},{"c":"441624","n":"和平县"},{"c":"441625","n":"东源县"}]},{"c":"4417","n":"阳江市","ch":[{"c":"441702","n":"江城区"},{"c":"441704","n":"阳东区"},{"c":"441721","n":"阳西县"},{"c":"441781","n":"阳春市"}]},{"c":"4418","n":"清远市","ch":[{"c":"441802","n":"清城区"},{"c":"441803","n":"清新区"},{"c":"441821","n":"佛冈县"},{"c":"441823","n":"阳山县"},{"c":"441825","n":"连山壮族瑶族自治县"},{"c":"441826","n":"连南瑶族自治县"},{"c":"441881","n":"英德市"},{"c":"441882","n":"连州市"}]},{"c":"4419","n":"东莞市","ch":[{"c":"441900003000","n":"东城街道"},{"c":"441900004000","n":"南城街道"},{"c":"441900005000","n":"万江街道"},{"c":"441900006000","n":"莞城街道"},{"c":"441900101000","n":"石碣镇"},{"c":"441900102000","n":"石龙镇"},{"c":"441900103000","n":"茶山镇"},{"c":"441900104000","n":"石排镇"},{"c":"441900105000","n":"企石镇"},{"c":"441900106000","n":"横沥镇"},{"c":"441900107000","n":"桥头镇"},{"c":"441900108000","n":"谢岗镇"},{"c":"441900109000","n":"东坑镇"},{"c":"441900110000","n":"常平镇"},{"c":"441900111000","n":"寮步镇"},{"c":"441900112000","n":"樟木头镇"},{"c":"441900113000","n":"大朗镇"},{"c":"441900114000","n":"黄江镇"},{"c":"441900115000","n":"清溪镇"},{"c":"441900116000","n":"塘厦镇"},{"c":"441900117000","n":"凤岗镇"},{"c":"441900118000","n":"大岭山镇"},{"c":"441900119000","n":"长安镇"},{"c":"441900121000","n":"虎门镇"},{"c":"441900122000","n":"厚街镇"},{"c":"441900123000","n":"沙田镇"},{"c":"441900124000","n":"道滘镇"},{"c":"441900125000","n":"洪梅镇"},{"c":"441900126000","n":"麻涌镇"},{"c":"441900127000","n":"望牛墩镇"},{"c":"441900128000","n":"中堂镇"},{"c":"441900129000","n":"高埗镇"},{"c":"441900401000","n":"松山湖"},{"c":"441900402000","n":"东莞港"},{"c":"441900403000","n":"东莞生态园"},{"c":"441900404000","n":"东莞滨海湾新区"}]},{"c":"4420","n":"中山市","ch":[{"c":"442000001000","n":"石岐街道"},{"c":"442000002000","n":"东区街道"},{"c":"442000003000","n":"中山港街道"},{"c":"442000004000","n":"西区街道"},{"c":"442000005000","n":"南区街道"},{"c":"442000006000","n":"五桂山街道"},{"c":"442000007000","n":"民众街道"},{"c":"442000008000","n":"南朗街道"},{"c":"442000101000","n":"黄圃镇"},{"c":"442000103000","n":"东凤镇"},{"c":"442000105000","n":"古镇镇"},{"c":"442000106000","n":"沙溪镇"},{"c":"442000107000","n":"坦洲镇"},{"c":"442000108000","n":"港口镇"},{"c":"442000109000","n":"三角镇"},{"c":"442000110000","n":"横栏镇"},{"c":"442000111000","n":"南头镇"},{"c":"442000112000","n":"阜沙镇"},{"c":"442000114000","n":"三乡镇"},{"c":"442000115000","n":"板芙镇"},{"c":"442000116000","n":"大涌镇"},{"c":"442000117000","n":"神湾镇"},{"c":"442000118000","n":"小榄镇"}]},{"c":"4451","n":"潮州市","ch":[{"c":"445102","n":"湘桥区"},{"c":"445103","n":"潮安区"},{"c":"445122","n":"饶平县"}]},{"c":"4452","n":"揭阳市","ch":[{"c":"445202","n":"榕城区"},{"c":"445203","n":"揭东区"},{"c":"445222","n":"揭西县"},{"c":"445224","n":"惠来县"},{"c":"445281","n":"普宁市"}]},{"c":"4453","n":"云浮市","ch":[{"c":"445302","n":"云城区"},{"c":"445303","n":"云安区"},{"c":"445321","n":"新兴县"},{"c":"445322","n":"郁南县"},{"c":"445381","n":"罗定市"}]}]},{"c":45,"n":"广西壮族自治区","ch":[{"c":"4501","n":"南宁市","ch":[{"c":"450102","n":"兴宁区"},{"c":"450103","n":"青秀区"},{"c":"450105","n":"江南区"},{"c":"450107","n":"西乡塘区"},{"c":"450108","n":"良庆区"},{"c":"450109","n":"邕宁区"},{"c":"450110","n":"武鸣区"},{"c":"450123","n":"隆安县"},{"c":"450124","n":"马山县"},{"c":"450125","n":"上林县"},{"c":"450126","n":"宾阳县"},{"c":"450181","n":"横州市"}]},{"c":"4502","n":"柳州市","ch":[{"c":"450202","n":"城中区"},{"c":"450203","n":"鱼峰区"},{"c":"450204","n":"柳南区"},{"c":"450205","n":"柳北区"},{"c":"450206","n":"柳江区"},{"c":"450222","n":"柳城县"},{"c":"450223","n":"鹿寨县"},{"c":"450224","n":"融安县"},{"c":"450225","n":"融水苗族自治县"},{"c":"450226","n":"三江侗族自治县"}]},{"c":"4503","n":"桂林市","ch":[{"c":"450302","n":"秀峰区"},{"c":"450303","n":"叠彩区"},{"c":"450304","n":"象山区"},{"c":"450305","n":"七星区"},{"c":"450311","n":"雁山区"},{"c":"450312","n":"临桂区"},{"c":"450321","n":"阳朔县"},{"c":"450323","n":"灵川县"},{"c":"450324","n":"全州县"},{"c":"450325","n":"兴安县"},{"c":"450326","n":"永福县"},{"c":"450327","n":"灌阳县"},{"c":"450328","n":"龙胜各族自治县"},{"c":"450329","n":"资源县"},{"c":"450330","n":"平乐县"},{"c":"450332","n":"恭城瑶族自治县"},{"c":"450381","n":"荔浦市"}]},{"c":"4504","n":"梧州市","ch":[{"c":"450403","n":"万秀区"},{"c":"450405","n":"长洲区"},{"c":"450406","n":"龙圩区"},{"c":"450421","n":"苍梧县"},{"c":"450422","n":"藤县"},{"c":"450423","n":"蒙山县"},{"c":"450481","n":"岑溪市"}]},{"c":"4505","n":"北海市","ch":[{"c":"450502","n":"海城区"},{"c":"450503","n":"银海区"},{"c":"450512","n":"铁山港区"},{"c":"450521","n":"合浦县"}]},{"c":"4506","n":"防城港市","ch":[{"c":"450602","n":"港口区"},{"c":"450603","n":"防城区"},{"c":"450621","n":"上思县"},{"c":"450681","n":"东兴市"}]},{"c":"4507","n":"钦州市","ch":[{"c":"450702","n":"钦南区"},{"c":"450703","n":"钦北区"},{"c":"450721","n":"灵山县"},{"c":"450722","n":"浦北县"}]},{"c":"4508","n":"贵港市","ch":[{"c":"450802","n":"港北区"},{"c":"450803","n":"港南区"},{"c":"450804","n":"覃塘区"},{"c":"450821","n":"平南县"},{"c":"450881","n":"桂平市"}]},{"c":"4509","n":"玉林市","ch":[{"c":"450902","n":"玉州区"},{"c":"450903","n":"福绵区"},{"c":"450921","n":"容县"},{"c":"450922","n":"陆川县"},{"c":"450923","n":"博白县"},{"c":"450924","n":"兴业县"},{"c":"450981","n":"北流市"}]},{"c":"4510","n":"百色市","ch":[{"c":"451002","n":"右江区"},{"c":"451003","n":"田阳区"},{"c":"451022","n":"田东县"},{"c":"451024","n":"德保县"},{"c":"451026","n":"那坡县"},{"c":"451027","n":"凌云县"},{"c":"451028","n":"乐业县"},{"c":"451029","n":"田林县"},{"c":"451030","n":"西林县"},{"c":"451031","n":"隆林各族自治县"},{"c":"451081","n":"靖西市"},{"c":"451082","n":"平果市"}]},{"c":"4511","n":"贺州市","ch":[{"c":"451102","n":"八步区"},{"c":"451103","n":"平桂区"},{"c":"451121","n":"昭平县"},{"c":"451122","n":"钟山县"},{"c":"451123","n":"富川瑶族自治县"}]},{"c":"4512","n":"河池市","ch":[{"c":"451202","n":"金城江区"},{"c":"451203","n":"宜州区"},{"c":"451221","n":"南丹县"},{"c":"451222","n":"天峨县"},{"c":"451223","n":"凤山县"},{"c":"451224","n":"东兰县"},{"c":"451225","n":"罗城仫佬族自治县"},{"c":"451226","n":"环江毛南族自治县"},{"c":"451227","n":"巴马瑶族自治县"},{"c":"451228","n":"都安瑶族自治县"},{"c":"451229","n":"大化瑶族自治县"}]},{"c":"4513","n":"来宾市","ch":[{"c":"451302","n":"兴宾区"},{"c":"451321","n":"忻城县"},{"c":"451322","n":"象州县"},{"c":"451323","n":"武宣县"},{"c":"451324","n":"金秀瑶族自治县"},{"c":"451381","n":"合山市"}]},{"c":"4514","n":"崇左市","ch":[{"c":"451402","n":"江州区"},{"c":"451421","n":"扶绥县"},{"c":"451422","n":"宁明县"},{"c":"451423","n":"龙州县"},{"c":"451424","n":"大新县"},{"c":"451425","n":"天等县"},{"c":"451481","n":"凭祥市"}]}]},{"c":46,"n":"海南省","ch":[{"c":"4601","n":"海口市","ch":[{"c":"460105","n":"秀英区"},{"c":"460106","n":"龙华区"},{"c":"460107","n":"琼山区"},{"c":"460108","n":"美兰区"}]},{"c":"4602","n":"三亚市","ch":[{"c":"460202","n":"海棠区"},{"c":"460203","n":"吉阳区"},{"c":"460204","n":"天涯区"},{"c":"460205","n":"崖州区"}]},{"c":"4603","n":"三沙市","ch":[{"c":"460302","n":"西沙区"},{"c":"460303","n":"南沙区"}]},{"c":"4604","n":"儋州市","ch":[{"c":"460400001000","n":"三都街道"},{"c":"460400100000","n":"那大镇"},{"c":"460400101000","n":"和庆镇"},{"c":"460400102000","n":"南丰镇"},{"c":"460400103000","n":"大成镇"},{"c":"460400104000","n":"雅星镇"},{"c":"460400105000","n":"兰洋镇"},{"c":"460400106000","n":"光村镇"},{"c":"460400107000","n":"木棠镇"},{"c":"460400108000","n":"海头镇"},{"c":"460400109000","n":"峨蔓镇"},{"c":"460400111000","n":"王五镇"},{"c":"460400112000","n":"白马井镇"},{"c":"460400113000","n":"中和镇"},{"c":"460400114000","n":"排浦镇"},{"c":"460400115000","n":"东成镇"},{"c":"460400116000","n":"新州镇"},{"c":"460400499000","n":"洋浦经济开发区"},{"c":"460400500000","n":"华南热作学院"}]},{"c":"4690","n":"海南省","ch":[{"c":"469001","n":"五指山市"},{"c":"469002","n":"琼海市"},{"c":"469005","n":"文昌市"},{"c":"469006","n":"万宁市"},{"c":"469007","n":"东方市"},{"c":"469021","n":"定安县"},{"c":"469022","n":"屯昌县"},{"c":"469023","n":"澄迈县"},{"c":"469024","n":"临高县"},{"c":"469025","n":"白沙黎族自治县"},{"c":"469026","n":"昌江黎族自治县"},{"c":"469027","n":"乐东黎族自治县"},{"c":"469028","n":"陵水黎族自治县"},{"c":"469029","n":"保亭黎族苗族自治县"},{"c":"469030","n":"琼中黎族苗族自治县"}]}]},{"c":50,"n":"重庆市","ch":[{"c":"5001","n":"重庆市","ch":[{"c":"500101","n":"万州区"},{"c":"500102","n":"涪陵区"},{"c":"500103","n":"渝中区"},{"c":"500104","n":"大渡口区"},{"c":"500106","n":"沙坪坝区"},{"c":"500107","n":"九龙坡区"},{"c":"500108","n":"南岸区"},{"c":"500109","n":"北碚区"},{"c":"500110","n":"綦江区"},{"c":"500111","n":"大足区"},{"c":"500113","n":"巴南区"},{"c":"500114","n":"黔江区"},{"c":"500115","n":"长寿区"},{"c":"500116","n":"江津区"},{"c":"500117","n":"合川区"},{"c":"500118","n":"永川区"},{"c":"500119","n":"南川区"},{"c":"500120","n":"璧山区"},{"c":"500151","n":"铜梁区"},{"c":"500152","n":"潼南区"},{"c":"500153","n":"荣昌区"},{"c":"500154","n":"开州区"},{"c":"500155","n":"梁平区"},{"c":"500156","n":"武隆区"},{"c":"500157","n":"两江新区"}]},{"c":"5002","n":"县","ch":[{"c":"500229","n":"城口县"},{"c":"500230","n":"丰都县"},{"c":"500231","n":"垫江县"},{"c":"500233","n":"忠县"},{"c":"500235","n":"云阳县"},{"c":"500236","n":"奉节县"},{"c":"500237","n":"巫山县"},{"c":"500238","n":"巫溪县"},{"c":"500240","n":"石柱土家族自治县"},{"c":"500241","n":"秀山土家族苗族自治县"},{"c":"500242","n":"酉阳土家族苗族自治县"},{"c":"500243","n":"彭水苗族土家族自治县"}]}]},{"c":51,"n":"四川省","ch":[{"c":"5101","n":"成都市","ch":[{"c":"510104","n":"锦江区"},{"c":"510105","n":"青羊区"},{"c":"510106","n":"金牛区"},{"c":"510107","n":"武侯区"},{"c":"510108","n":"成华区"},{"c":"510112","n":"龙泉驿区"},{"c":"510113","n":"青白江区"},{"c":"510114","n":"新都区"},{"c":"510115","n":"温江区"},{"c":"510116","n":"双流区"},{"c":"510117","n":"郫都区"},{"c":"510118","n":"新津区"},{"c":"510121","n":"金堂县"},{"c":"510129","n":"大邑县"},{"c":"510131","n":"蒲江县"},{"c":"510181","n":"都江堰市"},{"c":"510182","n":"彭州市"},{"c":"510183","n":"邛崃市"},{"c":"510184","n":"崇州市"},{"c":"510185","n":"简阳市"}]},{"c":"5103","n":"自贡市","ch":[{"c":"510302","n":"自流井区"},{"c":"510303","n":"贡井区"},{"c":"510304","n":"大安区"},{"c":"510311","n":"沿滩区"},{"c":"510321","n":"荣县"},{"c":"510322","n":"富顺县"}]},{"c":"5104","n":"攀枝花市","ch":[{"c":"510402","n":"东区"},{"c":"510403","n":"西区"},{"c":"510411","n":"仁和区"},{"c":"510421","n":"米易县"},{"c":"510422","n":"盐边县"}]},{"c":"5105","n":"泸州市","ch":[{"c":"510502","n":"江阳区"},{"c":"510503","n":"纳溪区"},{"c":"510504","n":"龙马潭区"},{"c":"510521","n":"泸县"},{"c":"510522","n":"合江县"},{"c":"510524","n":"叙永县"},{"c":"510525","n":"古蔺县"}]},{"c":"5106","n":"德阳市","ch":[{"c":"510603","n":"旌阳区"},{"c":"510604","n":"罗江区"},{"c":"510623","n":"中江县"},{"c":"510681","n":"广汉市"},{"c":"510682","n":"什邡市"},{"c":"510683","n":"绵竹市"}]},{"c":"5107","n":"绵阳市","ch":[{"c":"510703","n":"涪城区"},{"c":"510704","n":"游仙区"},{"c":"510705","n":"安州区"},{"c":"510722","n":"三台县"},{"c":"510723","n":"盐亭县"},{"c":"510725","n":"梓潼县"},{"c":"510726","n":"北川羌族自治县"},{"c":"510727","n":"平武县"},{"c":"510781","n":"江油市"}]},{"c":"5108","n":"广元市","ch":[{"c":"510802","n":"利州区"},{"c":"510811","n":"昭化区"},{"c":"510812","n":"朝天区"},{"c":"510821","n":"旺苍县"},{"c":"510822","n":"青川县"},{"c":"510823","n":"剑阁县"},{"c":"510824","n":"苍溪县"}]},{"c":"5109","n":"遂宁市","ch":[{"c":"510903","n":"船山区"},{"c":"510904","n":"安居区"},{"c":"510921","n":"蓬溪县"},{"c":"510923","n":"大英县"},{"c":"510981","n":"射洪市"}]},{"c":"5110","n":"内江市","ch":[{"c":"511002","n":"市中区"},{"c":"511011","n":"东兴区"},{"c":"511024","n":"威远县"},{"c":"511025","n":"资中县"},{"c":"511083","n":"隆昌市"}]},{"c":"5111","n":"乐山市","ch":[{"c":"511102","n":"市中区"},{"c":"511111","n":"沙湾区"},{"c":"511112","n":"五通桥区"},{"c":"511113","n":"金口河区"},{"c":"511123","n":"犍为县"},{"c":"511124","n":"井研县"},{"c":"511126","n":"夹江县"},{"c":"511129","n":"沐川县"},{"c":"511132","n":"峨边彝族自治县"},{"c":"511133","n":"马边彝族自治县"},{"c":"511181","n":"峨眉山市"}]},{"c":"5113","n":"南充市","ch":[{"c":"511302","n":"顺庆区"},{"c":"511303","n":"高坪区"},{"c":"511304","n":"嘉陵区"},{"c":"511321","n":"南部县"},{"c":"511322","n":"营山县"},{"c":"511323","n":"蓬安县"},{"c":"511324","n":"仪陇县"},{"c":"511325","n":"西充县"},{"c":"511381","n":"阆中市"}]},{"c":"5114","n":"眉山市","ch":[{"c":"511402","n":"东坡区"},{"c":"511403","n":"彭山区"},{"c":"511421","n":"仁寿县"},{"c":"511423","n":"洪雅县"},{"c":"511424","n":"丹棱县"},{"c":"511425","n":"青神县"}]},{"c":"5115","n":"宜宾市","ch":[{"c":"511502","n":"翠屏区"},{"c":"511503","n":"南溪区"},{"c":"511504","n":"叙州区"},{"c":"511523","n":"江安县"},{"c":"511524","n":"长宁县"},{"c":"511525","n":"高县"},{"c":"511526","n":"珙县"},{"c":"511527","n":"筠连县"},{"c":"511528","n":"兴文县"},{"c":"511529","n":"屏山县"}]},{"c":"5116","n":"广安市","ch":[{"c":"511602","n":"广安区"},{"c":"511603","n":"前锋区"},{"c":"511621","n":"岳池县"},{"c":"511622","n":"武胜县"},{"c":"511623","n":"邻水县"},{"c":"511681","n":"华蓥市"}]},{"c":"5117","n":"达州市","ch":[{"c":"511702","n":"通川区"},{"c":"511703","n":"达川区"},{"c":"511722","n":"宣汉县"},{"c":"511723","n":"开江县"},{"c":"511724","n":"大竹县"},{"c":"511725","n":"渠县"},{"c":"511781","n":"万源市"}]},{"c":"5118","n":"雅安市","ch":[{"c":"511802","n":"雨城区"},{"c":"511803","n":"名山区"},{"c":"511822","n":"荥经县"},{"c":"511823","n":"汉源县"},{"c":"511824","n":"石棉县"},{"c":"511825","n":"天全县"},{"c":"511826","n":"芦山县"},{"c":"511827","n":"宝兴县"}]},{"c":"5119","n":"巴中市","ch":[{"c":"511902","n":"巴州区"},{"c":"511903","n":"恩阳区"},{"c":"511921","n":"通江县"},{"c":"511922","n":"南江县"},{"c":"511923","n":"平昌县"}]},{"c":"5120","n":"资阳市","ch":[{"c":"512002","n":"雁江区"},{"c":"512021","n":"安岳县"},{"c":"512022","n":"乐至县"}]},{"c":"5132","n":"阿坝藏族羌族自治州","ch":[{"c":"513201","n":"马尔康市"},{"c":"513221","n":"汶川县"},{"c":"513222","n":"理县"},{"c":"513223","n":"茂县"},{"c":"513224","n":"松潘县"},{"c":"513225","n":"九寨沟县"},{"c":"513226","n":"金川县"},{"c":"513227","n":"小金县"},{"c":"513228","n":"黑水县"},{"c":"513230","n":"壤塘县"},{"c":"513231","n":"阿坝县"},{"c":"513232","n":"若尔盖县"},{"c":"513233","n":"红原县"}]},{"c":"5133","n":"甘孜藏族自治州","ch":[{"c":"513301","n":"康定市"},{"c":"513322","n":"泸定县"},{"c":"513323","n":"丹巴县"},{"c":"513324","n":"九龙县"},{"c":"513325","n":"雅江县"},{"c":"513326","n":"道孚县"},{"c":"513327","n":"炉霍县"},{"c":"513328","n":"甘孜县"},{"c":"513329","n":"新龙县"},{"c":"513330","n":"德格县"},{"c":"513331","n":"白玉县"},{"c":"513332","n":"石渠县"},{"c":"513333","n":"色达县"},{"c":"513334","n":"理塘县"},{"c":"513335","n":"巴塘县"},{"c":"513336","n":"乡城县"},{"c":"513337","n":"稻城县"},{"c":"513338","n":"得荣县"}]},{"c":"5134","n":"凉山彝族自治州","ch":[{"c":"513401","n":"西昌市"},{"c":"513402","n":"会理市"},{"c":"513422","n":"木里藏族自治县"},{"c":"513423","n":"盐源县"},{"c":"513424","n":"德昌县"},{"c":"513426","n":"会东县"},{"c":"513427","n":"宁南县"},{"c":"513428","n":"普格县"},{"c":"513429","n":"布拖县"},{"c":"513430","n":"金阳县"},{"c":"513431","n":"昭觉县"},{"c":"513432","n":"喜德县"},{"c":"513433","n":"冕宁县"},{"c":"513434","n":"越西县"},{"c":"513435","n":"甘洛县"},{"c":"513436","n":"美姑县"},{"c":"513437","n":"雷波县"}]}]},{"c":52,"n":"贵州省","ch":[{"c":"5201","n":"贵阳市","ch":[{"c":"520102","n":"南明区"},{"c":"520103","n":"云岩区"},{"c":"520111","n":"花溪区"},{"c":"520112","n":"乌当区"},{"c":"520113","n":"白云区"},{"c":"520115","n":"观山湖区"},{"c":"520121","n":"开阳县"},{"c":"520122","n":"息烽县"},{"c":"520123","n":"修文县"},{"c":"520181","n":"清镇市"}]},{"c":"5202","n":"六盘水市","ch":[{"c":"520201","n":"钟山区"},{"c":"520203","n":"六枝特区"},{"c":"520204","n":"水城区"},{"c":"520281","n":"盘州市"}]},{"c":"5203","n":"遵义市","ch":[{"c":"520302","n":"红花岗区"},{"c":"520303","n":"汇川区"},{"c":"520304","n":"播州区"},{"c":"520322","n":"桐梓县"},{"c":"520323","n":"绥阳县"},{"c":"520324","n":"正安县"},{"c":"520325","n":"道真仡佬族苗族自治县"},{"c":"520326","n":"务川仡佬族苗族自治县"},{"c":"520327","n":"凤冈县"},{"c":"520328","n":"湄潭县"},{"c":"520329","n":"余庆县"},{"c":"520330","n":"习水县"},{"c":"520381","n":"赤水市"},{"c":"520382","n":"仁怀市"}]},{"c":"5204","n":"安顺市","ch":[{"c":"520402","n":"西秀区"},{"c":"520403","n":"平坝区"},{"c":"520422","n":"普定县"},{"c":"520423","n":"镇宁布依族苗族自治县"},{"c":"520424","n":"关岭布依族苗族自治县"},{"c":"520425","n":"紫云苗族布依族自治县"}]},{"c":"5205","n":"毕节市","ch":[{"c":"520502","n":"七星关区"},{"c":"520521","n":"大方县"},{"c":"520523","n":"金沙县"},{"c":"520524","n":"织金县"},{"c":"520525","n":"纳雍县"},{"c":"520526","n":"威宁彝族回族苗族自治县"},{"c":"520527","n":"赫章县"},{"c":"520581","n":"黔西市"}]},{"c":"5206","n":"铜仁市","ch":[{"c":"520602","n":"碧江区"},{"c":"520603","n":"万山区"},{"c":"520621","n":"江口县"},{"c":"520622","n":"玉屏侗族自治县"},{"c":"520623","n":"石阡县"},{"c":"520624","n":"思南县"},{"c":"520625","n":"印江土家族苗族自治县"},{"c":"520626","n":"德江县"},{"c":"520627","n":"沿河土家族自治县"},{"c":"520628","n":"松桃苗族自治县"}]},{"c":"5223","n":"黔西南布依族苗族自治州","ch":[{"c":"522301","n":"兴义市"},{"c":"522302","n":"兴仁市"},{"c":"522323","n":"普安县"},{"c":"522324","n":"晴隆县"},{"c":"522325","n":"贞丰县"},{"c":"522326","n":"望谟县"},{"c":"522327","n":"册亨县"},{"c":"522328","n":"安龙县"}]},{"c":"5226","n":"黔东南苗族侗族自治州","ch":[{"c":"522601","n":"凯里市"},{"c":"522622","n":"黄平县"},{"c":"522623","n":"施秉县"},{"c":"522624","n":"三穗县"},{"c":"522625","n":"镇远县"},{"c":"522626","n":"岑巩县"},{"c":"522627","n":"天柱县"},{"c":"522628","n":"锦屏县"},{"c":"522629","n":"剑河县"},{"c":"522630","n":"台江县"},{"c":"522631","n":"黎平县"},{"c":"522632","n":"榕江县"},{"c":"522633","n":"从江县"},{"c":"522634","n":"雷山县"},{"c":"522635","n":"麻江县"},{"c":"522636","n":"丹寨县"}]},{"c":"5227","n":"黔南布依族苗族自治州","ch":[{"c":"522701","n":"都匀市"},{"c":"522702","n":"福泉市"},{"c":"522722","n":"荔波县"},{"c":"522723","n":"贵定县"},{"c":"522725","n":"瓮安县"},{"c":"522726","n":"独山县"},{"c":"522727","n":"平塘县"},{"c":"522728","n":"罗甸县"},{"c":"522729","n":"长顺县"},{"c":"522730","n":"龙里县"},{"c":"522731","n":"惠水县"},{"c":"522732","n":"三都水族自治县"}]}]},{"c":53,"n":"云南省","ch":[{"c":"5301","n":"昆明市","ch":[{"c":"530102","n":"五华区"},{"c":"530103","n":"盘龙区"},{"c":"530111","n":"官渡区"},{"c":"530112","n":"西山区"},{"c":"530113","n":"东川区"},{"c":"530114","n":"呈贡区"},{"c":"530115","n":"晋宁区"},{"c":"530124","n":"富民县"},{"c":"530125","n":"宜良县"},{"c":"530126","n":"石林彝族自治县"},{"c":"530127","n":"嵩明县"},{"c":"530128","n":"禄劝彝族苗族自治县"},{"c":"530129","n":"寻甸回族彝族自治县"},{"c":"530181","n":"安宁市"}]},{"c":"5303","n":"曲靖市","ch":[{"c":"530302","n":"麒麟区"},{"c":"530303","n":"沾益区"},{"c":"530304","n":"马龙区"},{"c":"530322","n":"陆良县"},{"c":"530323","n":"师宗县"},{"c":"530324","n":"罗平县"},{"c":"530325","n":"富源县"},{"c":"530326","n":"会泽县"},{"c":"530381","n":"宣威市"}]},{"c":"5304","n":"玉溪市","ch":[{"c":"530402","n":"红塔区"},{"c":"530403","n":"江川区"},{"c":"530423","n":"通海县"},{"c":"530424","n":"华宁县"},{"c":"530425","n":"易门县"},{"c":"530426","n":"峨山彝族自治县"},{"c":"530427","n":"新平彝族傣族自治县"},{"c":"530428","n":"元江哈尼族彝族傣族自治县"},{"c":"530481","n":"澄江市"}]},{"c":"5305","n":"保山市","ch":[{"c":"530502","n":"隆阳区"},{"c":"530521","n":"施甸县"},{"c":"530523","n":"龙陵县"},{"c":"530524","n":"昌宁县"},{"c":"530581","n":"腾冲市"}]},{"c":"5306","n":"昭通市","ch":[{"c":"530602","n":"昭阳区"},{"c":"530621","n":"鲁甸县"},{"c":"530622","n":"巧家县"},{"c":"530623","n":"盐津县"},{"c":"530624","n":"大关县"},{"c":"530625","n":"永善县"},{"c":"530626","n":"绥江县"},{"c":"530627","n":"镇雄县"},{"c":"530628","n":"彝良县"},{"c":"530629","n":"威信县"},{"c":"530681","n":"水富市"}]},{"c":"5307","n":"丽江市","ch":[{"c":"530702","n":"古城区"},{"c":"530721","n":"玉龙纳西族自治县"},{"c":"530722","n":"永胜县"},{"c":"530723","n":"华坪县"},{"c":"530724","n":"宁蒗彝族自治县"}]},{"c":"5308","n":"普洱市","ch":[{"c":"530802","n":"思茅区"},{"c":"530821","n":"宁洱哈尼族彝族自治县"},{"c":"530822","n":"墨江哈尼族自治县"},{"c":"530823","n":"景东彝族自治县"},{"c":"530824","n":"景谷傣族彝族自治县"},{"c":"530825","n":"镇沅彝族哈尼族拉祜族自治县"},{"c":"530826","n":"江城哈尼族彝族自治县"},{"c":"530827","n":"孟连傣族拉祜族佤族自治县"},{"c":"530828","n":"澜沧拉祜族自治县"},{"c":"530829","n":"西盟佤族自治县"}]},{"c":"5309","n":"临沧市","ch":[{"c":"530902","n":"临翔区"},{"c":"530921","n":"凤庆县"},{"c":"530922","n":"云县"},{"c":"530923","n":"永德县"},{"c":"530924","n":"镇康县"},{"c":"530925","n":"双江拉祜族佤族布朗族傣族自治县"},{"c":"530926","n":"耿马傣族佤族自治县"},{"c":"530927","n":"沧源佤族自治县"}]},{"c":"5323","n":"楚雄彝族自治州","ch":[{"c":"532301","n":"楚雄市"},{"c":"532302","n":"禄丰市"},{"c":"532322","n":"双柏县"},{"c":"532323","n":"牟定县"},{"c":"532324","n":"南华县"},{"c":"532325","n":"姚安县"},{"c":"532326","n":"大姚县"},{"c":"532327","n":"永仁县"},{"c":"532328","n":"元谋县"},{"c":"532329","n":"武定县"}]},{"c":"5325","n":"红河哈尼族彝族自治州","ch":[{"c":"532501","n":"个旧市"},{"c":"532502","n":"开远市"},{"c":"532503","n":"蒙自市"},{"c":"532504","n":"弥勒市"},{"c":"532523","n":"屏边苗族自治县"},{"c":"532524","n":"建水县"},{"c":"532525","n":"石屏县"},{"c":"532527","n":"泸西县"},{"c":"532528","n":"元阳县"},{"c":"532529","n":"红河县"},{"c":"532530","n":"金平苗族瑶族傣族自治县"},{"c":"532531","n":"绿春县"},{"c":"532532","n":"河口瑶族自治县"}]},{"c":"5326","n":"文山壮族苗族自治州","ch":[{"c":"532601","n":"文山市"},{"c":"532622","n":"砚山县"},{"c":"532623","n":"西畴县"},{"c":"532624","n":"麻栗坡县"},{"c":"532625","n":"马关县"},{"c":"532626","n":"丘北县"},{"c":"532627","n":"广南县"},{"c":"532628","n":"富宁县"}]},{"c":"5328","n":"西双版纳傣族自治州","ch":[{"c":"532801","n":"景洪市"},{"c":"532822","n":"勐海县"},{"c":"532823","n":"勐腊县"}]},{"c":"5329","n":"大理白族自治州","ch":[{"c":"532901","n":"大理市"},{"c":"532922","n":"漾濞彝族自治县"},{"c":"532923","n":"祥云县"},{"c":"532924","n":"宾川县"},{"c":"532925","n":"弥渡县"},{"c":"532926","n":"南涧彝族自治县"},{"c":"532927","n":"巍山彝族回族自治县"},{"c":"532928","n":"永平县"},{"c":"532929","n":"云龙县"},{"c":"532930","n":"洱源县"},{"c":"532931","n":"剑川县"},{"c":"532932","n":"鹤庆县"}]},{"c":"5331","n":"德宏傣族景颇族自治州","ch":[{"c":"533102","n":"瑞丽市"},{"c":"533103","n":"芒市"},{"c":"533122","n":"梁河县"},{"c":"533123","n":"盈江县"},{"c":"533124","n":"陇川县"}]},{"c":"5333","n":"怒江傈僳族自治州","ch":[{"c":"533301","n":"泸水市"},{"c":"533323","n":"福贡县"},{"c":"533324","n":"贡山独龙族怒族自治县"},{"c":"533325","n":"兰坪白族普米族自治县"}]},{"c":"5334","n":"迪庆藏族自治州","ch":[{"c":"533401","n":"香格里拉市"},{"c":"533422","n":"德钦县"},{"c":"533423","n":"维西傈僳族自治县"}]}]},{"c":54,"n":"西藏自治区","ch":[{"c":"5401","n":"拉萨市","ch":[{"c":"540102","n":"城关区"},{"c":"540103","n":"堆龙德庆区"},{"c":"540104","n":"达孜区"},{"c":"540121","n":"林周县"},{"c":"540122","n":"当雄县"},{"c":"540123","n":"尼木县"},{"c":"540124","n":"曲水县"},{"c":"540127","n":"墨竹工卡县"}]},{"c":"5402","n":"日喀则市","ch":[{"c":"540202","n":"桑珠孜区"},{"c":"540221","n":"南木林县"},{"c":"540222","n":"江孜县"},{"c":"540223","n":"定日县"},{"c":"540224","n":"萨迦县"},{"c":"540225","n":"拉孜县"},{"c":"540226","n":"昂仁县"},{"c":"540227","n":"谢通门县"},{"c":"540228","n":"白朗县"},{"c":"540229","n":"仁布县"},{"c":"540230","n":"康马县"},{"c":"540231","n":"定结县"},{"c":"540232","n":"仲巴县"},{"c":"540233","n":"亚东县"},{"c":"540234","n":"吉隆县"},{"c":"540235","n":"聂拉木县"},{"c":"540236","n":"萨嘎县"},{"c":"540237","n":"岗巴县"}]},{"c":"5403","n":"昌都市","ch":[{"c":"540302","n":"卡若区"},{"c":"540321","n":"江达县"},{"c":"540322","n":"贡觉县"},{"c":"540323","n":"类乌齐县"},{"c":"540324","n":"丁青县"},{"c":"540325","n":"察雅县"},{"c":"540326","n":"八宿县"},{"c":"540327","n":"左贡县"},{"c":"540328","n":"芒康县"},{"c":"540329","n":"洛隆县"},{"c":"540330","n":"边坝县"}]},{"c":"5404","n":"林芝市","ch":[{"c":"540402","n":"巴宜区"},{"c":"540421","n":"工布江达县"},{"c":"540423","n":"墨脱县"},{"c":"540424","n":"波密县"},{"c":"540425","n":"察隅县"},{"c":"540426","n":"朗县"},{"c":"540481","n":"米林市"}]},{"c":"5405","n":"山南市","ch":[{"c":"540502","n":"乃东区"},{"c":"540521","n":"扎囊县"},{"c":"540522","n":"贡嘎县"},{"c":"540523","n":"桑日县"},{"c":"540524","n":"琼结县"},{"c":"540525","n":"曲松县"},{"c":"540526","n":"措美县"},{"c":"540527","n":"洛扎县"},{"c":"540528","n":"加查县"},{"c":"540529","n":"隆子县"},{"c":"540531","n":"浪卡子县"},{"c":"540581","n":"错那市"}]},{"c":"5406","n":"那曲市","ch":[{"c":"540602","n":"色尼区"},{"c":"540621","n":"嘉黎县"},{"c":"540622","n":"比如县"},{"c":"540623","n":"聂荣县"},{"c":"540624","n":"安多县"},{"c":"540625","n":"申扎县"},{"c":"540626","n":"索县"},{"c":"540627","n":"班戈县"},{"c":"540628","n":"巴青县"},{"c":"540629","n":"尼玛县"},{"c":"540630","n":"双湖县"}]},{"c":"5425","n":"阿里地区","ch":[{"c":"542521","n":"普兰县"},{"c":"542522","n":"札达县"},{"c":"542523","n":"噶尔县"},{"c":"542524","n":"日土县"},{"c":"542525","n":"革吉县"},{"c":"542526","n":"改则县"},{"c":"542527","n":"措勤县"}]}]},{"c":61,"n":"陕西省","ch":[{"c":"6101","n":"西安市","ch":[{"c":"610102","n":"新城区"},{"c":"610103","n":"碑林区"},{"c":"610104","n":"莲湖区"},{"c":"610111","n":"灞桥区"},{"c":"610112","n":"未央区"},{"c":"610113","n":"雁塔区"},{"c":"610114","n":"阎良区"},{"c":"610115","n":"临潼区"},{"c":"610116","n":"长安区"},{"c":"610117","n":"高陵区"},{"c":"610118","n":"鄠邑区"},{"c":"610122","n":"蓝田县"},{"c":"610124","n":"周至县"}]},{"c":"6102","n":"铜川市","ch":[{"c":"610202","n":"王益区"},{"c":"610203","n":"印台区"},{"c":"610204","n":"耀州区"},{"c":"610222","n":"宜君县"}]},{"c":"6103","n":"宝鸡市","ch":[{"c":"610302","n":"渭滨区"},{"c":"610303","n":"金台区"},{"c":"610304","n":"陈仓区"},{"c":"610305","n":"凤翔区"},{"c":"610323","n":"岐山县"},{"c":"610324","n":"扶风县"},{"c":"610326","n":"眉县"},{"c":"610327","n":"陇县"},{"c":"610328","n":"千阳县"},{"c":"610329","n":"麟游县"},{"c":"610330","n":"凤县"},{"c":"610331","n":"太白县"}]},{"c":"6104","n":"咸阳市","ch":[{"c":"610402","n":"秦都区"},{"c":"610403","n":"杨陵区"},{"c":"610404","n":"渭城区"},{"c":"610422","n":"三原县"},{"c":"610423","n":"泾阳县"},{"c":"610424","n":"乾县"},{"c":"610425","n":"礼泉县"},{"c":"610426","n":"永寿县"},{"c":"610428","n":"长武县"},{"c":"610429","n":"旬邑县"},{"c":"610430","n":"淳化县"},{"c":"610431","n":"武功县"},{"c":"610481","n":"兴平市"},{"c":"610482","n":"彬州市"}]},{"c":"6105","n":"渭南市","ch":[{"c":"610502","n":"临渭区"},{"c":"610503","n":"华州区"},{"c":"610522","n":"潼关县"},{"c":"610523","n":"大荔县"},{"c":"610524","n":"合阳县"},{"c":"610525","n":"澄城县"},{"c":"610526","n":"蒲城县"},{"c":"610527","n":"白水县"},{"c":"610528","n":"富平县"},{"c":"610581","n":"韩城市"},{"c":"610582","n":"华阴市"}]},{"c":"6106","n":"延安市","ch":[{"c":"610602","n":"宝塔区"},{"c":"610603","n":"安塞区"},{"c":"610621","n":"延长县"},{"c":"610622","n":"延川县"},{"c":"610625","n":"志丹县"},{"c":"610626","n":"吴起县"},{"c":"610627","n":"甘泉县"},{"c":"610628","n":"富县"},{"c":"610629","n":"洛川县"},{"c":"610630","n":"宜川县"},{"c":"610631","n":"黄龙县"},{"c":"610632","n":"黄陵县"},{"c":"610681","n":"子长市"}]},{"c":"6107","n":"汉中市","ch":[{"c":"610702","n":"汉台区"},{"c":"610703","n":"南郑区"},{"c":"610722","n":"城固县"},{"c":"610723","n":"洋县"},{"c":"610724","n":"西乡县"},{"c":"610725","n":"勉县"},{"c":"610726","n":"宁强县"},{"c":"610727","n":"略阳县"},{"c":"610728","n":"镇巴县"},{"c":"610729","n":"留坝县"},{"c":"610730","n":"佛坪县"}]},{"c":"6108","n":"榆林市","ch":[{"c":"610802","n":"榆阳区"},{"c":"610803","n":"横山区"},{"c":"610822","n":"府谷县"},{"c":"610824","n":"靖边县"},{"c":"610825","n":"定边县"},{"c":"610826","n":"绥德县"},{"c":"610827","n":"米脂县"},{"c":"610828","n":"佳县"},{"c":"610829","n":"吴堡县"},{"c":"610830","n":"清涧县"},{"c":"610831","n":"子洲县"},{"c":"610881","n":"神木市"}]},{"c":"6109","n":"安康市","ch":[{"c":"610902","n":"汉滨区"},{"c":"610921","n":"汉阴县"},{"c":"610922","n":"石泉县"},{"c":"610923","n":"宁陕县"},{"c":"610924","n":"紫阳县"},{"c":"610925","n":"岚皋县"},{"c":"610926","n":"平利县"},{"c":"610927","n":"镇坪县"},{"c":"610929","n":"白河县"},{"c":"610981","n":"旬阳市"}]},{"c":"6110","n":"商洛市","ch":[{"c":"611002","n":"商州区"},{"c":"611021","n":"洛南县"},{"c":"611022","n":"丹凤县"},{"c":"611023","n":"商南县"},{"c":"611024","n":"山阳县"},{"c":"611025","n":"镇安县"},{"c":"611026","n":"柞水县"}]}]},{"c":62,"n":"甘肃省","ch":[{"c":"6201","n":"兰州市","ch":[{"c":"620102","n":"城关区"},{"c":"620103","n":"七里河区"},{"c":"620104","n":"西固区"},{"c":"620105","n":"安宁区"},{"c":"620111","n":"红古区"},{"c":"620121","n":"永登县"},{"c":"620122","n":"皋兰县"},{"c":"620123","n":"榆中县"}]},{"c":"6202","n":"嘉峪关市","ch":[{"c":"620200001000","n":"第一街道"},{"c":"620200002000","n":"雄关街道"},{"c":"620200003000","n":"钢城街道"},{"c":"620200100000","n":"峪泉镇"},{"c":"620200101000","n":"新城镇"},{"c":"620200102000","n":"文殊镇"}]},{"c":"6203","n":"金昌市","ch":[{"c":"620302","n":"金川区"},{"c":"620321","n":"永昌县"}]},{"c":"6204","n":"白银市","ch":[{"c":"620402","n":"白银区"},{"c":"620403","n":"平川区"},{"c":"620421","n":"靖远县"},{"c":"620422","n":"会宁县"},{"c":"620423","n":"景泰县"}]},{"c":"6205","n":"天水市","ch":[{"c":"620502","n":"秦州区"},{"c":"620503","n":"麦积区"},{"c":"620521","n":"清水县"},{"c":"620522","n":"秦安县"},{"c":"620523","n":"甘谷县"},{"c":"620524","n":"武山县"},{"c":"620525","n":"张家川回族自治县"}]},{"c":"6206","n":"武威市","ch":[{"c":"620602","n":"凉州区"},{"c":"620621","n":"民勤县"},{"c":"620622","n":"古浪县"},{"c":"620623","n":"天祝藏族自治县"}]},{"c":"6207","n":"张掖市","ch":[{"c":"620702","n":"甘州区"},{"c":"620721","n":"肃南裕固族自治县"},{"c":"620722","n":"民乐县"},{"c":"620723","n":"临泽县"},{"c":"620724","n":"高台县"},{"c":"620725","n":"山丹县"}]},{"c":"6208","n":"平凉市","ch":[{"c":"620802","n":"崆峒区"},{"c":"620821","n":"泾川县"},{"c":"620822","n":"灵台县"},{"c":"620823","n":"崇信县"},{"c":"620825","n":"庄浪县"},{"c":"620826","n":"静宁县"},{"c":"620881","n":"华亭市"}]},{"c":"6209","n":"酒泉市","ch":[{"c":"620902","n":"肃州区"},{"c":"620921","n":"金塔县"},{"c":"620922","n":"瓜州县"},{"c":"620923","n":"肃北蒙古族自治县"},{"c":"620924","n":"阿克塞哈萨克族自治县"},{"c":"620981","n":"玉门市"},{"c":"620982","n":"敦煌市"}]},{"c":"6210","n":"庆阳市","ch":[{"c":"621002","n":"西峰区"},{"c":"621021","n":"庆城县"},{"c":"621022","n":"环县"},{"c":"621023","n":"华池县"},{"c":"621024","n":"合水县"},{"c":"621025","n":"正宁县"},{"c":"621026","n":"宁县"},{"c":"621027","n":"镇原县"}]},{"c":"6211","n":"定西市","ch":[{"c":"621102","n":"安定区"},{"c":"621121","n":"通渭县"},{"c":"621122","n":"陇西县"},{"c":"621123","n":"渭源县"},{"c":"621124","n":"临洮县"},{"c":"621125","n":"漳县"},{"c":"621126","n":"岷县"}]},{"c":"6212","n":"陇南市","ch":[{"c":"621202","n":"武都区"},{"c":"621221","n":"成县"},{"c":"621222","n":"文县"},{"c":"621223","n":"宕昌县"},{"c":"621224","n":"康县"},{"c":"621225","n":"西和县"},{"c":"621226","n":"礼县"},{"c":"621227","n":"徽县"},{"c":"621228","n":"两当县"}]},{"c":"6229","n":"临夏回族自治州","ch":[{"c":"622901","n":"临夏市"},{"c":"622921","n":"临夏县"},{"c":"622922","n":"康乐县"},{"c":"622923","n":"永靖县"},{"c":"622924","n":"广河县"},{"c":"622925","n":"和政县"},{"c":"622926","n":"东乡族自治县"},{"c":"622927","n":"积石山保安族东乡族撒拉族自治县"}]},{"c":"6230","n":"甘南藏族自治州","ch":[{"c":"623001","n":"合作市"},{"c":"623021","n":"临潭县"},{"c":"623022","n":"卓尼县"},{"c":"623023","n":"舟曲县"},{"c":"623024","n":"迭部县"},{"c":"623025","n":"玛曲县"},{"c":"623026","n":"碌曲县"},{"c":"623027","n":"夏河县"}]}]},{"c":63,"n":"青海省","ch":[{"c":"6301","n":"西宁市","ch":[{"c":"630102","n":"城东区"},{"c":"630103","n":"城中区"},{"c":"630104","n":"城西区"},{"c":"630105","n":"城北区"},{"c":"630106","n":"湟中区"},{"c":"630121","n":"大通回族土族自治县"},{"c":"630123","n":"湟源县"}]},{"c":"6302","n":"海东市","ch":[{"c":"630202","n":"乐都区"},{"c":"630203","n":"平安区"},{"c":"630222","n":"民和回族土族自治县"},{"c":"630223","n":"互助土族自治县"},{"c":"630224","n":"化隆回族自治县"},{"c":"630225","n":"循化撒拉族自治县"}]},{"c":"6322","n":"海北藏族自治州","ch":[{"c":"632221","n":"门源回族自治县"},{"c":"632222","n":"祁连县"},{"c":"632223","n":"海晏县"},{"c":"632224","n":"刚察县"}]},{"c":"6323","n":"黄南藏族自治州","ch":[{"c":"632301","n":"同仁市"},{"c":"632322","n":"尖扎县"},{"c":"632323","n":"泽库县"},{"c":"632324","n":"河南蒙古族自治县"}]},{"c":"6325","n":"海南藏族自治州","ch":[{"c":"632521","n":"共和县"},{"c":"632522","n":"同德县"},{"c":"632523","n":"贵德县"},{"c":"632524","n":"兴海县"},{"c":"632525","n":"贵南县"}]},{"c":"6326","n":"果洛藏族自治州","ch":[{"c":"632621","n":"玛沁县"},{"c":"632622","n":"班玛县"},{"c":"632623","n":"甘德县"},{"c":"632624","n":"达日县"},{"c":"632625","n":"久治县"},{"c":"632626","n":"玛多县"}]},{"c":"6327","n":"玉树藏族自治州","ch":[{"c":"632701","n":"玉树市"},{"c":"632722","n":"杂多县"},{"c":"632723","n":"称多县"},{"c":"632724","n":"治多县"},{"c":"632725","n":"囊谦县"},{"c":"632726","n":"曲麻莱县"}]},{"c":"6328","n":"海西蒙古族藏族自治州","ch":[{"c":"632801","n":"格尔木市"},{"c":"632802","n":"德令哈市"},{"c":"632803","n":"茫崖市"},{"c":"632821","n":"乌兰县"},{"c":"632822","n":"都兰县"},{"c":"632823","n":"天峻县"}]}]},{"c":64,"n":"宁夏回族自治区","ch":[{"c":"6401","n":"银川市","ch":[{"c":"640104","n":"兴庆区"},{"c":"640105","n":"西夏区"},{"c":"640106","n":"金凤区"},{"c":"640121","n":"永宁县"},{"c":"640122","n":"贺兰县"},{"c":"640181","n":"灵武市"}]},{"c":"6402","n":"石嘴山市","ch":[{"c":"640202","n":"大武口区"},{"c":"640205","n":"惠农区"},{"c":"640221","n":"平罗县"}]},{"c":"6403","n":"吴忠市","ch":[{"c":"640302","n":"利通区"},{"c":"640303","n":"红寺堡区"},{"c":"640323","n":"盐池县"},{"c":"640324","n":"同心县"},{"c":"640381","n":"青铜峡市"}]},{"c":"6404","n":"固原市","ch":[{"c":"640402","n":"原州区"},{"c":"640422","n":"西吉县"},{"c":"640423","n":"隆德县"},{"c":"640424","n":"泾源县"},{"c":"640425","n":"彭阳县"}]},{"c":"6405","n":"中卫市","ch":[{"c":"640502","n":"沙坡头区"},{"c":"640521","n":"中宁县"},{"c":"640522","n":"海原县"}]}]},{"c":65,"n":"新疆维吾尔自治区","ch":[{"c":"6501","n":"乌鲁木齐市","ch":[{"c":"650102","n":"天山区"},{"c":"650103","n":"沙依巴克区"},{"c":"650104","n":"新市区"},{"c":"650105","n":"水磨沟区"},{"c":"650106","n":"头屯河区"},{"c":"650107","n":"达坂城区"},{"c":"650109","n":"米东区"},{"c":"650121","n":"乌鲁木齐县"}]},{"c":"6502","n":"克拉玛依市","ch":[{"c":"650202","n":"独山子区"},{"c":"650203","n":"克拉玛依区"},{"c":"650204","n":"白碱滩区"},{"c":"650205","n":"乌尔禾区"}]},{"c":"6504","n":"吐鲁番市","ch":[{"c":"650402","n":"高昌区"},{"c":"650421","n":"鄯善县"},{"c":"650422","n":"托克逊县"}]},{"c":"6505","n":"哈密市","ch":[{"c":"650502","n":"伊州区"},{"c":"650521","n":"巴里坤哈萨克自治县"},{"c":"650522","n":"伊吾县"}]},{"c":"6523","n":"昌吉回族自治州","ch":[{"c":"652301","n":"昌吉市"},{"c":"652302","n":"阜康市"},{"c":"652323","n":"呼图壁县"},{"c":"652324","n":"玛纳斯县"},{"c":"652325","n":"奇台县"},{"c":"652327","n":"吉木萨尔县"},{"c":"652328","n":"木垒哈萨克自治县"}]},{"c":"6527","n":"博尔塔拉蒙古自治州","ch":[{"c":"652701","n":"博乐市"},{"c":"652702","n":"阿拉山口市"},{"c":"652722","n":"精河县"},{"c":"652723","n":"温泉县"}]},{"c":"6528","n":"巴音郭楞蒙古自治州","ch":[{"c":"652801","n":"库尔勒市"},{"c":"652822","n":"轮台县"},{"c":"652823","n":"尉犁县"},{"c":"652824","n":"若羌县"},{"c":"652825","n":"且末县"},{"c":"652826","n":"焉耆回族自治县"},{"c":"652827","n":"和静县"},{"c":"652828","n":"和硕县"},{"c":"652829","n":"博湖县"}]},{"c":"6529","n":"阿克苏地区","ch":[{"c":"652901","n":"阿克苏市"},{"c":"652902","n":"库车市"},{"c":"652922","n":"温宿县"},{"c":"652924","n":"沙雅县"},{"c":"652925","n":"新和县"},{"c":"652926","n":"拜城县"},{"c":"652927","n":"乌什县"},{"c":"652928","n":"阿瓦提县"},{"c":"652929","n":"柯坪县"}]},{"c":"6530","n":"克孜勒苏柯尔克孜自治州","ch":[{"c":"653001","n":"阿图什市"},{"c":"653022","n":"阿克陶县"},{"c":"653023","n":"阿合奇县"},{"c":"653024","n":"乌恰县"}]},{"c":"6531","n":"喀什地区","ch":[{"c":"653101","n":"喀什市"},{"c":"653121","n":"疏附县"},{"c":"653122","n":"疏勒县"},{"c":"653123","n":"英吉沙县"},{"c":"653124","n":"泽普县"},{"c":"653125","n":"莎车县"},{"c":"653126","n":"叶城县"},{"c":"653127","n":"麦盖提县"},{"c":"653128","n":"岳普湖县"},{"c":"653129","n":"伽师县"},{"c":"653130","n":"巴楚县"},{"c":"653131","n":"塔什库尔干塔吉克自治县"}]},{"c":"6532","n":"和田地区","ch":[{"c":"653201","n":"和田市"},{"c":"653221","n":"和田县"},{"c":"653222","n":"墨玉县"},{"c":"653223","n":"皮山县"},{"c":"653224","n":"洛浦县"},{"c":"653225","n":"策勒县"},{"c":"653226","n":"于田县"},{"c":"653227","n":"民丰县"},{"c":"653228","n":"和康县"},{"c":"653229","n":"和安县"}]},{"c":"6540","n":"伊犁哈萨克自治州","ch":[{"c":"654002","n":"伊宁市"},{"c":"654003","n":"奎屯市"},{"c":"654004","n":"霍尔果斯市"},{"c":"654021","n":"伊宁县"},{"c":"654022","n":"察布查尔锡伯自治县"},{"c":"654023","n":"霍城县"},{"c":"654024","n":"巩留县"},{"c":"654025","n":"新源县"},{"c":"654026","n":"昭苏县"},{"c":"654027","n":"特克斯县"},{"c":"654028","n":"尼勒克县"}]},{"c":"6542","n":"塔城地区","ch":[{"c":"654201","n":"塔城市"},{"c":"654202","n":"乌苏市"},{"c":"654203","n":"沙湾市"},{"c":"654221","n":"额敏县"},{"c":"654224","n":"托里县"},{"c":"654225","n":"裕民县"},{"c":"654226","n":"和布克赛尔蒙古自治县"}]},{"c":"6543","n":"阿勒泰地区","ch":[{"c":"654301","n":"阿勒泰市"},{"c":"654321","n":"布尔津县"},{"c":"654322","n":"富蕴县"},{"c":"654323","n":"福海县"},{"c":"654324","n":"哈巴河县"},{"c":"654325","n":"青河县"},{"c":"654326","n":"吉木乃县"}]},{"c":"6590","n":"新疆维吾尔自治区","ch":[{"c":"659001","n":"石河子市"},{"c":"659002","n":"阿拉尔市"},{"c":"659003","n":"图木舒克市"},{"c":"659004","n":"五家渠市"},{"c":"659005","n":"北屯市"},{"c":"659006","n":"铁门关市"},{"c":"659007","n":"双河市"},{"c":"659008","n":"可克达拉市"},{"c":"659009","n":"昆玉市"},{"c":"659010","n":"胡杨河市"},{"c":"659011","n":"新星市"},{"c":"659012","n":"白杨市"}]}]}] diff --git a/common/target/classes/cn/unizk/cache/KryoRedisSerializer.class b/common/target/classes/cn/unizk/cache/KryoRedisSerializer.class new file mode 100644 index 0000000..f4cc318 Binary files /dev/null and b/common/target/classes/cn/unizk/cache/KryoRedisSerializer.class differ diff --git a/common/target/classes/cn/unizk/cache/LocalCache$WxAccessTokenCache.class b/common/target/classes/cn/unizk/cache/LocalCache$WxAccessTokenCache.class new file mode 100644 index 0000000..d0d6ed2 Binary files /dev/null and b/common/target/classes/cn/unizk/cache/LocalCache$WxAccessTokenCache.class differ diff --git a/common/target/classes/cn/unizk/cache/LocalCache.class b/common/target/classes/cn/unizk/cache/LocalCache.class new file mode 100644 index 0000000..d999678 Binary files /dev/null and b/common/target/classes/cn/unizk/cache/LocalCache.class differ diff --git a/common/target/classes/cn/unizk/config/MinioConfig.class b/common/target/classes/cn/unizk/config/MinioConfig.class new file mode 100644 index 0000000..ca44911 Binary files /dev/null and b/common/target/classes/cn/unizk/config/MinioConfig.class differ diff --git a/common/target/classes/cn/unizk/config/MybatisPlusConfig.class b/common/target/classes/cn/unizk/config/MybatisPlusConfig.class new file mode 100644 index 0000000..30f62d9 Binary files /dev/null and b/common/target/classes/cn/unizk/config/MybatisPlusConfig.class differ diff --git a/common/target/classes/cn/unizk/config/RedisConfig.class b/common/target/classes/cn/unizk/config/RedisConfig.class new file mode 100644 index 0000000..87b15ac Binary files /dev/null and b/common/target/classes/cn/unizk/config/RedisConfig.class differ diff --git a/common/target/classes/cn/unizk/config/ThreadPoolConfig.class b/common/target/classes/cn/unizk/config/ThreadPoolConfig.class new file mode 100644 index 0000000..a9accdc Binary files /dev/null and b/common/target/classes/cn/unizk/config/ThreadPoolConfig.class differ diff --git a/common/target/classes/cn/unizk/config/properties/HfProperties.class b/common/target/classes/cn/unizk/config/properties/HfProperties.class new file mode 100644 index 0000000..9da57bc Binary files /dev/null and b/common/target/classes/cn/unizk/config/properties/HfProperties.class differ diff --git a/common/target/classes/cn/unizk/config/properties/HuaweiyunProperties.class b/common/target/classes/cn/unizk/config/properties/HuaweiyunProperties.class new file mode 100644 index 0000000..b9843db Binary files /dev/null and b/common/target/classes/cn/unizk/config/properties/HuaweiyunProperties.class differ diff --git a/common/target/classes/cn/unizk/config/properties/MinioProperties.class b/common/target/classes/cn/unizk/config/properties/MinioProperties.class new file mode 100644 index 0000000..7830d5e Binary files /dev/null and b/common/target/classes/cn/unizk/config/properties/MinioProperties.class differ diff --git a/common/target/classes/cn/unizk/constant/UniConstant.class b/common/target/classes/cn/unizk/constant/UniConstant.class new file mode 100644 index 0000000..90c65a7 Binary files /dev/null and b/common/target/classes/cn/unizk/constant/UniConstant.class differ diff --git a/common/target/classes/cn/unizk/constant/VideoUploadConstants.class b/common/target/classes/cn/unizk/constant/VideoUploadConstants.class new file mode 100644 index 0000000..7bb20a2 Binary files /dev/null and b/common/target/classes/cn/unizk/constant/VideoUploadConstants.class differ diff --git a/common/target/classes/cn/unizk/convert/device/CfConverter.class b/common/target/classes/cn/unizk/convert/device/CfConverter.class new file mode 100644 index 0000000..4ab397d Binary files /dev/null and b/common/target/classes/cn/unizk/convert/device/CfConverter.class differ diff --git a/common/target/classes/cn/unizk/convert/device/LocalDateTimeConverter.class b/common/target/classes/cn/unizk/convert/device/LocalDateTimeConverter.class new file mode 100644 index 0000000..428e974 Binary files /dev/null and b/common/target/classes/cn/unizk/convert/device/LocalDateTimeConverter.class differ diff --git a/common/target/classes/cn/unizk/convert/device/OperatingStatusConverter.class b/common/target/classes/cn/unizk/convert/device/OperatingStatusConverter.class new file mode 100644 index 0000000..d54df11 Binary files /dev/null and b/common/target/classes/cn/unizk/convert/device/OperatingStatusConverter.class differ diff --git a/common/target/classes/cn/unizk/convert/device/StatusConverter.class b/common/target/classes/cn/unizk/convert/device/StatusConverter.class new file mode 100644 index 0000000..88c57f1 Binary files /dev/null and b/common/target/classes/cn/unizk/convert/device/StatusConverter.class differ diff --git a/common/target/classes/cn/unizk/convert/device/WmConverter.class b/common/target/classes/cn/unizk/convert/device/WmConverter.class new file mode 100644 index 0000000..844171f Binary files /dev/null and b/common/target/classes/cn/unizk/convert/device/WmConverter.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/CashOutDTO.class b/common/target/classes/cn/unizk/entity/dto/CashOutDTO.class new file mode 100644 index 0000000..32916e6 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/CashOutDTO.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/CashOutResponse.class b/common/target/classes/cn/unizk/entity/dto/CashOutResponse.class new file mode 100644 index 0000000..21cd0e2 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/CashOutResponse.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/CommonRequestDTO.class b/common/target/classes/cn/unizk/entity/dto/CommonRequestDTO.class new file mode 100644 index 0000000..daa3c28 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/CommonRequestDTO.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/DeviceExcelDTO.class b/common/target/classes/cn/unizk/entity/dto/DeviceExcelDTO.class new file mode 100644 index 0000000..36ef043 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/DeviceExcelDTO.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/ElectronicSignatureDTO.class b/common/target/classes/cn/unizk/entity/dto/ElectronicSignatureDTO.class new file mode 100644 index 0000000..868bfff Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/ElectronicSignatureDTO.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/HuifuSyncRefundResDTO$RefundResData.class b/common/target/classes/cn/unizk/entity/dto/HuifuSyncRefundResDTO$RefundResData.class new file mode 100644 index 0000000..8329da8 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/HuifuSyncRefundResDTO$RefundResData.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/HuifuSyncRefundResDTO.class b/common/target/classes/cn/unizk/entity/dto/HuifuSyncRefundResDTO.class new file mode 100644 index 0000000..535b1dc Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/HuifuSyncRefundResDTO.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/IsoDTO.class b/common/target/classes/cn/unizk/entity/dto/IsoDTO.class new file mode 100644 index 0000000..94200ad Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/IsoDTO.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/MajorJointsDTO.class b/common/target/classes/cn/unizk/entity/dto/MajorJointsDTO.class new file mode 100644 index 0000000..c2775b5 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/MajorJointsDTO.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/PlaceOrderCommonDTO.class b/common/target/classes/cn/unizk/entity/dto/PlaceOrderCommonDTO.class new file mode 100644 index 0000000..fb877de Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/PlaceOrderCommonDTO.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/PrDTO$PrItem.class b/common/target/classes/cn/unizk/entity/dto/PrDTO$PrItem.class new file mode 100644 index 0000000..1d4fb7f Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/PrDTO$PrItem.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/PrDTO.class b/common/target/classes/cn/unizk/entity/dto/PrDTO.class new file mode 100644 index 0000000..0b39847 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/PrDTO.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/ProfitSharingRefundDTO$AcctSplitBunch$AcctInfos.class b/common/target/classes/cn/unizk/entity/dto/ProfitSharingRefundDTO$AcctSplitBunch$AcctInfos.class new file mode 100644 index 0000000..e262cd9 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/ProfitSharingRefundDTO$AcctSplitBunch$AcctInfos.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/ProfitSharingRefundDTO$AcctSplitBunch.class b/common/target/classes/cn/unizk/entity/dto/ProfitSharingRefundDTO$AcctSplitBunch.class new file mode 100644 index 0000000..ef7982e Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/ProfitSharingRefundDTO$AcctSplitBunch.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/ProfitSharingRefundDTO.class b/common/target/classes/cn/unizk/entity/dto/ProfitSharingRefundDTO.class new file mode 100644 index 0000000..1c6dc58 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/ProfitSharingRefundDTO.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/RefundDTO.class b/common/target/classes/cn/unizk/entity/dto/RefundDTO.class new file mode 100644 index 0000000..b848ef7 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/RefundDTO.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/WxPayPlaceOrder$Amount.class b/common/target/classes/cn/unizk/entity/dto/WxPayPlaceOrder$Amount.class new file mode 100644 index 0000000..c72a8c8 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/WxPayPlaceOrder$Amount.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/WxPayPlaceOrder$Payer.class b/common/target/classes/cn/unizk/entity/dto/WxPayPlaceOrder$Payer.class new file mode 100644 index 0000000..568ff0e Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/WxPayPlaceOrder$Payer.class differ diff --git a/common/target/classes/cn/unizk/entity/dto/WxPayPlaceOrder.class b/common/target/classes/cn/unizk/entity/dto/WxPayPlaceOrder.class new file mode 100644 index 0000000..f3291c8 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/dto/WxPayPlaceOrder.class differ diff --git a/common/target/classes/cn/unizk/entity/po/AppletModule.class b/common/target/classes/cn/unizk/entity/po/AppletModule.class new file mode 100644 index 0000000..ae2de89 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/AppletModule.class differ diff --git a/common/target/classes/cn/unizk/entity/po/AppointmentConfig.class b/common/target/classes/cn/unizk/entity/po/AppointmentConfig.class new file mode 100644 index 0000000..f513c98 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/AppointmentConfig.class differ diff --git a/common/target/classes/cn/unizk/entity/po/Appointments.class b/common/target/classes/cn/unizk/entity/po/Appointments.class new file mode 100644 index 0000000..39ee599 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/Appointments.class differ diff --git a/common/target/classes/cn/unizk/entity/po/BaseEntity.class b/common/target/classes/cn/unizk/entity/po/BaseEntity.class new file mode 100644 index 0000000..ed06664 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/BaseEntity.class differ diff --git a/common/target/classes/cn/unizk/entity/po/BusinessChannel.class b/common/target/classes/cn/unizk/entity/po/BusinessChannel.class new file mode 100644 index 0000000..85ad9af Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/BusinessChannel.class differ diff --git a/common/target/classes/cn/unizk/entity/po/CashOutRecord.class b/common/target/classes/cn/unizk/entity/po/CashOutRecord.class new file mode 100644 index 0000000..897e15d Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/CashOutRecord.class differ diff --git a/common/target/classes/cn/unizk/entity/po/Chapter.class b/common/target/classes/cn/unizk/entity/po/Chapter.class new file mode 100644 index 0000000..02f96e4 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/Chapter.class differ diff --git a/common/target/classes/cn/unizk/entity/po/ChildStoreAccount.class b/common/target/classes/cn/unizk/entity/po/ChildStoreAccount.class new file mode 100644 index 0000000..e1db8a2 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/ChildStoreAccount.class differ diff --git a/common/target/classes/cn/unizk/entity/po/ClinicWorkLog.class b/common/target/classes/cn/unizk/entity/po/ClinicWorkLog.class new file mode 100644 index 0000000..9487d3d Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/ClinicWorkLog.class differ diff --git a/common/target/classes/cn/unizk/entity/po/Combo.class b/common/target/classes/cn/unizk/entity/po/Combo.class new file mode 100644 index 0000000..203fd80 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/Combo.class differ diff --git a/common/target/classes/cn/unizk/entity/po/Conversation.class b/common/target/classes/cn/unizk/entity/po/Conversation.class new file mode 100644 index 0000000..693a605 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/Conversation.class differ diff --git a/common/target/classes/cn/unizk/entity/po/Course.class b/common/target/classes/cn/unizk/entity/po/Course.class new file mode 100644 index 0000000..f2d1f02 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/Course.class differ diff --git a/common/target/classes/cn/unizk/entity/po/DailySchedules.class b/common/target/classes/cn/unizk/entity/po/DailySchedules.class new file mode 100644 index 0000000..6e462fc Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/DailySchedules.class differ diff --git a/common/target/classes/cn/unizk/entity/po/Device.class b/common/target/classes/cn/unizk/entity/po/Device.class new file mode 100644 index 0000000..dd34f67 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/Device.class differ diff --git a/common/target/classes/cn/unizk/entity/po/DeviceRechargeRecord.class b/common/target/classes/cn/unizk/entity/po/DeviceRechargeRecord.class new file mode 100644 index 0000000..eb5c97d Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/DeviceRechargeRecord.class differ diff --git a/common/target/classes/cn/unizk/entity/po/DeviceUpgrade.class b/common/target/classes/cn/unizk/entity/po/DeviceUpgrade.class new file mode 100644 index 0000000..0eeee31 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/DeviceUpgrade.class differ diff --git a/common/target/classes/cn/unizk/entity/po/DeviceUsageDetail.class b/common/target/classes/cn/unizk/entity/po/DeviceUsageDetail.class new file mode 100644 index 0000000..3c07401 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/DeviceUsageDetail.class differ diff --git a/common/target/classes/cn/unizk/entity/po/DeviceUsageRecord.class b/common/target/classes/cn/unizk/entity/po/DeviceUsageRecord.class new file mode 100644 index 0000000..1183850 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/DeviceUsageRecord.class differ diff --git a/common/target/classes/cn/unizk/entity/po/DiaRecord.class b/common/target/classes/cn/unizk/entity/po/DiaRecord.class new file mode 100644 index 0000000..9020b4b Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/DiaRecord.class differ diff --git a/common/target/classes/cn/unizk/entity/po/DiagnosisTemplate.class b/common/target/classes/cn/unizk/entity/po/DiagnosisTemplate.class new file mode 100644 index 0000000..8ab8f62 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/DiagnosisTemplate.class differ diff --git a/common/target/classes/cn/unizk/entity/po/DiagnosticReport.class b/common/target/classes/cn/unizk/entity/po/DiagnosticReport.class new file mode 100644 index 0000000..964a51e Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/DiagnosticReport.class differ diff --git a/common/target/classes/cn/unizk/entity/po/ExamScore.class b/common/target/classes/cn/unizk/entity/po/ExamScore.class new file mode 100644 index 0000000..3f28cc0 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/ExamScore.class differ diff --git a/common/target/classes/cn/unizk/entity/po/GolfCustInfo.class b/common/target/classes/cn/unizk/entity/po/GolfCustInfo.class new file mode 100644 index 0000000..5562b84 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/GolfCustInfo.class differ diff --git a/common/target/classes/cn/unizk/entity/po/GrfPj.class b/common/target/classes/cn/unizk/entity/po/GrfPj.class new file mode 100644 index 0000000..56166d6 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/GrfPj.class differ diff --git a/common/target/classes/cn/unizk/entity/po/HuifuData.class b/common/target/classes/cn/unizk/entity/po/HuifuData.class new file mode 100644 index 0000000..895c37f Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/HuifuData.class differ diff --git a/common/target/classes/cn/unizk/entity/po/InventoryStatistics.class b/common/target/classes/cn/unizk/entity/po/InventoryStatistics.class new file mode 100644 index 0000000..60e7fdf Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/InventoryStatistics.class differ diff --git a/common/target/classes/cn/unizk/entity/po/JkPhysio.class b/common/target/classes/cn/unizk/entity/po/JkPhysio.class new file mode 100644 index 0000000..98617db Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/JkPhysio.class differ diff --git a/common/target/classes/cn/unizk/entity/po/JkProduct.class b/common/target/classes/cn/unizk/entity/po/JkProduct.class new file mode 100644 index 0000000..c3fc3af Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/JkProduct.class differ diff --git a/common/target/classes/cn/unizk/entity/po/JkStore.class b/common/target/classes/cn/unizk/entity/po/JkStore.class new file mode 100644 index 0000000..480667f Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/JkStore.class differ diff --git a/common/target/classes/cn/unizk/entity/po/Joint.class b/common/target/classes/cn/unizk/entity/po/Joint.class new file mode 100644 index 0000000..ef52bad Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/Joint.class differ diff --git a/common/target/classes/cn/unizk/entity/po/Menu.class b/common/target/classes/cn/unizk/entity/po/Menu.class new file mode 100644 index 0000000..23ac5bd Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/Menu.class differ diff --git a/common/target/classes/cn/unizk/entity/po/Message.class b/common/target/classes/cn/unizk/entity/po/Message.class new file mode 100644 index 0000000..bf5a2b7 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/Message.class differ diff --git a/common/target/classes/cn/unizk/entity/po/MobileAppUser.class b/common/target/classes/cn/unizk/entity/po/MobileAppUser.class new file mode 100644 index 0000000..0931573 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/MobileAppUser.class differ diff --git a/common/target/classes/cn/unizk/entity/po/MobileAppUserAccount.class b/common/target/classes/cn/unizk/entity/po/MobileAppUserAccount.class new file mode 100644 index 0000000..2abedbc Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/MobileAppUserAccount.class differ diff --git a/common/target/classes/cn/unizk/entity/po/MobileAppointments.class b/common/target/classes/cn/unizk/entity/po/MobileAppointments.class new file mode 100644 index 0000000..f02be7c Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/MobileAppointments.class differ diff --git a/common/target/classes/cn/unizk/entity/po/MobileChapter.class b/common/target/classes/cn/unizk/entity/po/MobileChapter.class new file mode 100644 index 0000000..b9aa379 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/MobileChapter.class differ diff --git a/common/target/classes/cn/unizk/entity/po/MobileCombo.class b/common/target/classes/cn/unizk/entity/po/MobileCombo.class new file mode 100644 index 0000000..53f0ba0 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/MobileCombo.class differ diff --git a/common/target/classes/cn/unizk/entity/po/MobileCourse.class b/common/target/classes/cn/unizk/entity/po/MobileCourse.class new file mode 100644 index 0000000..21bc25c Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/MobileCourse.class differ diff --git a/common/target/classes/cn/unizk/entity/po/MobileOrder.class b/common/target/classes/cn/unizk/entity/po/MobileOrder.class new file mode 100644 index 0000000..bcfdb61 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/MobileOrder.class differ diff --git a/common/target/classes/cn/unizk/entity/po/MobileOrderItem.class b/common/target/classes/cn/unizk/entity/po/MobileOrderItem.class new file mode 100644 index 0000000..e0c9f89 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/MobileOrderItem.class differ diff --git a/common/target/classes/cn/unizk/entity/po/MobileUserAddress.class b/common/target/classes/cn/unizk/entity/po/MobileUserAddress.class new file mode 100644 index 0000000..64ed821 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/MobileUserAddress.class differ diff --git a/common/target/classes/cn/unizk/entity/po/MobileUserHaveCourse.class b/common/target/classes/cn/unizk/entity/po/MobileUserHaveCourse.class new file mode 100644 index 0000000..af29416 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/MobileUserHaveCourse.class differ diff --git a/common/target/classes/cn/unizk/entity/po/MobileUserMedicalVisitInfo.class b/common/target/classes/cn/unizk/entity/po/MobileUserMedicalVisitInfo.class new file mode 100644 index 0000000..101d5ce Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/MobileUserMedicalVisitInfo.class differ diff --git a/common/target/classes/cn/unizk/entity/po/MobileUserVideoProgress.class b/common/target/classes/cn/unizk/entity/po/MobileUserVideoProgress.class new file mode 100644 index 0000000..6506b36 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/MobileUserVideoProgress.class differ diff --git a/common/target/classes/cn/unizk/entity/po/ModulePerms.class b/common/target/classes/cn/unizk/entity/po/ModulePerms.class new file mode 100644 index 0000000..21286a7 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/ModulePerms.class differ diff --git a/common/target/classes/cn/unizk/entity/po/OrderReview.class b/common/target/classes/cn/unizk/entity/po/OrderReview.class new file mode 100644 index 0000000..deb3532 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/OrderReview.class differ diff --git a/common/target/classes/cn/unizk/entity/po/PhysioExam.class b/common/target/classes/cn/unizk/entity/po/PhysioExam.class new file mode 100644 index 0000000..7a7df3a Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/PhysioExam.class differ diff --git a/common/target/classes/cn/unizk/entity/po/PhysioSchedules.class b/common/target/classes/cn/unizk/entity/po/PhysioSchedules.class new file mode 100644 index 0000000..2aa127c Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/PhysioSchedules.class differ diff --git a/common/target/classes/cn/unizk/entity/po/PhysioThirteenArea.class b/common/target/classes/cn/unizk/entity/po/PhysioThirteenArea.class new file mode 100644 index 0000000..259aff6 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/PhysioThirteenArea.class differ diff --git a/common/target/classes/cn/unizk/entity/po/ProductCarousel.class b/common/target/classes/cn/unizk/entity/po/ProductCarousel.class new file mode 100644 index 0000000..3295aef Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/ProductCarousel.class differ diff --git a/common/target/classes/cn/unizk/entity/po/Question.class b/common/target/classes/cn/unizk/entity/po/Question.class new file mode 100644 index 0000000..41e4e11 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/Question.class differ diff --git a/common/target/classes/cn/unizk/entity/po/RechargePackage.class b/common/target/classes/cn/unizk/entity/po/RechargePackage.class new file mode 100644 index 0000000..3c74db8 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/RechargePackage.class differ diff --git a/common/target/classes/cn/unizk/entity/po/ReportTemplate.class b/common/target/classes/cn/unizk/entity/po/ReportTemplate.class new file mode 100644 index 0000000..96b33eb Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/ReportTemplate.class differ diff --git a/common/target/classes/cn/unizk/entity/po/RunConsultation.class b/common/target/classes/cn/unizk/entity/po/RunConsultation.class new file mode 100644 index 0000000..0a0bb45 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/RunConsultation.class differ diff --git a/common/target/classes/cn/unizk/entity/po/StoreAccount.class b/common/target/classes/cn/unizk/entity/po/StoreAccount.class new file mode 100644 index 0000000..4dfdce3 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/StoreAccount.class differ diff --git a/common/target/classes/cn/unizk/entity/po/SubHealthDietaryRegulation.class b/common/target/classes/cn/unizk/entity/po/SubHealthDietaryRegulation.class new file mode 100644 index 0000000..5c0bb69 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/SubHealthDietaryRegulation.class differ diff --git a/common/target/classes/cn/unizk/entity/po/SysDict.class b/common/target/classes/cn/unizk/entity/po/SysDict.class new file mode 100644 index 0000000..ae6d75f Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/SysDict.class differ diff --git a/common/target/classes/cn/unizk/entity/po/SysFile.class b/common/target/classes/cn/unizk/entity/po/SysFile.class new file mode 100644 index 0000000..5361ff4 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/SysFile.class differ diff --git a/common/target/classes/cn/unizk/entity/po/SysUser.class b/common/target/classes/cn/unizk/entity/po/SysUser.class new file mode 100644 index 0000000..956394c Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/SysUser.class differ diff --git a/common/target/classes/cn/unizk/entity/po/TimeSlots.class b/common/target/classes/cn/unizk/entity/po/TimeSlots.class new file mode 100644 index 0000000..4cffefe Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/TimeSlots.class differ diff --git a/common/target/classes/cn/unizk/entity/po/TreatParameter.class b/common/target/classes/cn/unizk/entity/po/TreatParameter.class new file mode 100644 index 0000000..2a0557a Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/TreatParameter.class differ diff --git a/common/target/classes/cn/unizk/entity/po/UserConsultationRecord.class b/common/target/classes/cn/unizk/entity/po/UserConsultationRecord.class new file mode 100644 index 0000000..27d8030 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/UserConsultationRecord.class differ diff --git a/common/target/classes/cn/unizk/entity/po/UserDeviceTreatRecord.class b/common/target/classes/cn/unizk/entity/po/UserDeviceTreatRecord.class new file mode 100644 index 0000000..0890115 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/UserDeviceTreatRecord.class differ diff --git a/common/target/classes/cn/unizk/entity/po/UserFreeTrialInfo.class b/common/target/classes/cn/unizk/entity/po/UserFreeTrialInfo.class new file mode 100644 index 0000000..c03952c Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/UserFreeTrialInfo.class differ diff --git a/common/target/classes/cn/unizk/entity/po/UserTreatmentParameters.class b/common/target/classes/cn/unizk/entity/po/UserTreatmentParameters.class new file mode 100644 index 0000000..ea4fa4a Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/UserTreatmentParameters.class differ diff --git a/common/target/classes/cn/unizk/entity/po/WxUserSession.class b/common/target/classes/cn/unizk/entity/po/WxUserSession.class new file mode 100644 index 0000000..538805a Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/WxUserSession.class differ diff --git a/common/target/classes/cn/unizk/entity/po/WxVipRecharge.class b/common/target/classes/cn/unizk/entity/po/WxVipRecharge.class new file mode 100644 index 0000000..ac01f7b Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/WxVipRecharge.class differ diff --git a/common/target/classes/cn/unizk/entity/po/XunfuAccount.class b/common/target/classes/cn/unizk/entity/po/XunfuAccount.class new file mode 100644 index 0000000..23589b7 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/XunfuAccount.class differ diff --git a/common/target/classes/cn/unizk/entity/po/XunfuAccountImage.class b/common/target/classes/cn/unizk/entity/po/XunfuAccountImage.class new file mode 100644 index 0000000..6d52d47 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/XunfuAccountImage.class differ diff --git a/common/target/classes/cn/unizk/entity/po/YnzkSystemDevice.class b/common/target/classes/cn/unizk/entity/po/YnzkSystemDevice.class new file mode 100644 index 0000000..7b96a8e Binary files /dev/null and b/common/target/classes/cn/unizk/entity/po/YnzkSystemDevice.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/AppUserDetailsVO.class b/common/target/classes/cn/unizk/entity/vo/AppUserDetailsVO.class new file mode 100644 index 0000000..c3f6447 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/AppUserDetailsVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/AppointmentVO.class b/common/target/classes/cn/unizk/entity/vo/AppointmentVO.class new file mode 100644 index 0000000..f82e420 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/AppointmentVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/AppointmentVO2.class b/common/target/classes/cn/unizk/entity/vo/AppointmentVO2.class new file mode 100644 index 0000000..b2d4f05 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/AppointmentVO2.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/AppointmentVO3.class b/common/target/classes/cn/unizk/entity/vo/AppointmentVO3.class new file mode 100644 index 0000000..4777184 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/AppointmentVO3.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/AppointmentVO4.class b/common/target/classes/cn/unizk/entity/vo/AppointmentVO4.class new file mode 100644 index 0000000..aa7e5e2 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/AppointmentVO4.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/AppointmentsVO5.class b/common/target/classes/cn/unizk/entity/vo/AppointmentsVO5.class new file mode 100644 index 0000000..2a2b48e Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/AppointmentsVO5.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/BuyCourseVO.class b/common/target/classes/cn/unizk/entity/vo/BuyCourseVO.class new file mode 100644 index 0000000..b80cfea Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/BuyCourseVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/CallbackResponse.class b/common/target/classes/cn/unizk/entity/vo/CallbackResponse.class new file mode 100644 index 0000000..14f3734 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/CallbackResponse.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/ChapterVO.class b/common/target/classes/cn/unizk/entity/vo/ChapterVO.class new file mode 100644 index 0000000..e4a76ff Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/ChapterVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/ComboVO.class b/common/target/classes/cn/unizk/entity/vo/ComboVO.class new file mode 100644 index 0000000..a46468e Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/ComboVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/CourseVO.class b/common/target/classes/cn/unizk/entity/vo/CourseVO.class new file mode 100644 index 0000000..bc1a750 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/CourseVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/DailySchedulesVO.class b/common/target/classes/cn/unizk/entity/vo/DailySchedulesVO.class new file mode 100644 index 0000000..f39c233 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/DailySchedulesVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/DeviceConfigVO.class b/common/target/classes/cn/unizk/entity/vo/DeviceConfigVO.class new file mode 100644 index 0000000..6b63e40 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/DeviceConfigVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/DeviceOutboundVO.class b/common/target/classes/cn/unizk/entity/vo/DeviceOutboundVO.class new file mode 100644 index 0000000..d34cafa Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/DeviceOutboundVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/DeviceUsageDetailVO.class b/common/target/classes/cn/unizk/entity/vo/DeviceUsageDetailVO.class new file mode 100644 index 0000000..5d090e9 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/DeviceUsageDetailVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/DeviceUsageRecordVO.class b/common/target/classes/cn/unizk/entity/vo/DeviceUsageRecordVO.class new file mode 100644 index 0000000..862da64 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/DeviceUsageRecordVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/DeviceUsageRecordVO2.class b/common/target/classes/cn/unizk/entity/vo/DeviceUsageRecordVO2.class new file mode 100644 index 0000000..7023123 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/DeviceUsageRecordVO2.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/DeviceVO.class b/common/target/classes/cn/unizk/entity/vo/DeviceVO.class new file mode 100644 index 0000000..ce440cb Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/DeviceVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/EightMajorJointsVO$Joints.class b/common/target/classes/cn/unizk/entity/vo/EightMajorJointsVO$Joints.class new file mode 100644 index 0000000..c6707ff Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/EightMajorJointsVO$Joints.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/EightMajorJointsVO.class b/common/target/classes/cn/unizk/entity/vo/EightMajorJointsVO.class new file mode 100644 index 0000000..d7b9261 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/EightMajorJointsVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/GradeExamVO.class b/common/target/classes/cn/unizk/entity/vo/GradeExamVO.class new file mode 100644 index 0000000..e27d83f Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/GradeExamVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/GrfReportVO.class b/common/target/classes/cn/unizk/entity/vo/GrfReportVO.class new file mode 100644 index 0000000..99e4f78 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/GrfReportVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/GrfdialogueVO.class b/common/target/classes/cn/unizk/entity/vo/GrfdialogueVO.class new file mode 100644 index 0000000..4599957 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/GrfdialogueVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/InStockVO.class b/common/target/classes/cn/unizk/entity/vo/InStockVO.class new file mode 100644 index 0000000..76fb7ee Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/InStockVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/JkProductVO.class b/common/target/classes/cn/unizk/entity/vo/JkProductVO.class new file mode 100644 index 0000000..d0f5f7c Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/JkProductVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/JkStoreReqVO.class b/common/target/classes/cn/unizk/entity/vo/JkStoreReqVO.class new file mode 100644 index 0000000..756414c Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/JkStoreReqVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/JkStoreResVO.class b/common/target/classes/cn/unizk/entity/vo/JkStoreResVO.class new file mode 100644 index 0000000..521ba5f Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/JkStoreResVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/JointVO.class b/common/target/classes/cn/unizk/entity/vo/JointVO.class new file mode 100644 index 0000000..50fc7a2 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/JointVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/ManualAnswerVO.class b/common/target/classes/cn/unizk/entity/vo/ManualAnswerVO.class new file mode 100644 index 0000000..20486dd Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/ManualAnswerVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/MinioRespVO$MinioRespVOBuilder.class b/common/target/classes/cn/unizk/entity/vo/MinioRespVO$MinioRespVOBuilder.class new file mode 100644 index 0000000..3093deb Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/MinioRespVO$MinioRespVOBuilder.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/MinioRespVO.class b/common/target/classes/cn/unizk/entity/vo/MinioRespVO.class new file mode 100644 index 0000000..fde1a48 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/MinioRespVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/MobileAppLoginRequestVO.class b/common/target/classes/cn/unizk/entity/vo/MobileAppLoginRequestVO.class new file mode 100644 index 0000000..8e08df0 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/MobileAppLoginRequestVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/MobileAppUserVO.class b/common/target/classes/cn/unizk/entity/vo/MobileAppUserVO.class new file mode 100644 index 0000000..9429594 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/MobileAppUserVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/MobileOrderDetailVO.class b/common/target/classes/cn/unizk/entity/vo/MobileOrderDetailVO.class new file mode 100644 index 0000000..dc6aa63 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/MobileOrderDetailVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/MobileOrderItemVO.class b/common/target/classes/cn/unizk/entity/vo/MobileOrderItemVO.class new file mode 100644 index 0000000..7059c06 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/MobileOrderItemVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/MobileOrderVO.class b/common/target/classes/cn/unizk/entity/vo/MobileOrderVO.class new file mode 100644 index 0000000..30ed9cc Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/MobileOrderVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/OneClickVO.class b/common/target/classes/cn/unizk/entity/vo/OneClickVO.class new file mode 100644 index 0000000..0cdde2a Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/OneClickVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/OrderReqVO.class b/common/target/classes/cn/unizk/entity/vo/OrderReqVO.class new file mode 100644 index 0000000..bdcdad0 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/OrderReqVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/PayCourseVO.class b/common/target/classes/cn/unizk/entity/vo/PayCourseVO.class new file mode 100644 index 0000000..ade88eb Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/PayCourseVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/PhysioExamVO.class b/common/target/classes/cn/unizk/entity/vo/PhysioExamVO.class new file mode 100644 index 0000000..f6ae6b1 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/PhysioExamVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/PhysioVO.class b/common/target/classes/cn/unizk/entity/vo/PhysioVO.class new file mode 100644 index 0000000..b4bacbc Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/PhysioVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/ProductReqVO.class b/common/target/classes/cn/unizk/entity/vo/ProductReqVO.class new file mode 100644 index 0000000..c1847db Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/ProductReqVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/ProductVO.class b/common/target/classes/cn/unizk/entity/vo/ProductVO.class new file mode 100644 index 0000000..03ef606 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/ProductVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/ProvinceNode.class b/common/target/classes/cn/unizk/entity/vo/ProvinceNode.class new file mode 100644 index 0000000..1fb9eee Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/ProvinceNode.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/ProvinceTreeVO$City$District.class b/common/target/classes/cn/unizk/entity/vo/ProvinceTreeVO$City$District.class new file mode 100644 index 0000000..7ac142f Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/ProvinceTreeVO$City$District.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/ProvinceTreeVO$City.class b/common/target/classes/cn/unizk/entity/vo/ProvinceTreeVO$City.class new file mode 100644 index 0000000..2fe13c0 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/ProvinceTreeVO$City.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/ProvinceTreeVO.class b/common/target/classes/cn/unizk/entity/vo/ProvinceTreeVO.class new file mode 100644 index 0000000..5d9c3ae Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/ProvinceTreeVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/QuestionAnswerVO.class b/common/target/classes/cn/unizk/entity/vo/QuestionAnswerVO.class new file mode 100644 index 0000000..4ff05b3 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/QuestionAnswerVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/QuestionVo.class b/common/target/classes/cn/unizk/entity/vo/QuestionVo.class new file mode 100644 index 0000000..707b812 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/QuestionVo.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/RegulationVO.class b/common/target/classes/cn/unizk/entity/vo/RegulationVO.class new file mode 100644 index 0000000..73294a6 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/RegulationVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/ReplyVo.class b/common/target/classes/cn/unizk/entity/vo/ReplyVo.class new file mode 100644 index 0000000..b1dd468 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/ReplyVo.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/ReportReqVO.class b/common/target/classes/cn/unizk/entity/vo/ReportReqVO.class new file mode 100644 index 0000000..09e0d32 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/ReportReqVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/ReportTemplateVO.class b/common/target/classes/cn/unizk/entity/vo/ReportTemplateVO.class new file mode 100644 index 0000000..a2e2d58 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/ReportTemplateVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/ResultData.class b/common/target/classes/cn/unizk/entity/vo/ResultData.class new file mode 100644 index 0000000..ce09b81 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/ResultData.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/RosterVO$DateColumnVO.class b/common/target/classes/cn/unizk/entity/vo/RosterVO$DateColumnVO.class new file mode 100644 index 0000000..1d58b01 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/RosterVO$DateColumnVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/RosterVO$RosterCellVO.class b/common/target/classes/cn/unizk/entity/vo/RosterVO$RosterCellVO.class new file mode 100644 index 0000000..2c464ff Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/RosterVO$RosterCellVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/RosterVO$RosterRowVO.class b/common/target/classes/cn/unizk/entity/vo/RosterVO$RosterRowVO.class new file mode 100644 index 0000000..26c8343 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/RosterVO$RosterRowVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/RosterVO$SlotVO.class b/common/target/classes/cn/unizk/entity/vo/RosterVO$SlotVO.class new file mode 100644 index 0000000..d943b25 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/RosterVO$SlotVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/RosterVO.class b/common/target/classes/cn/unizk/entity/vo/RosterVO.class new file mode 100644 index 0000000..acc0a2d Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/RosterVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/SeverityVO.class b/common/target/classes/cn/unizk/entity/vo/SeverityVO.class new file mode 100644 index 0000000..64b4e22 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/SeverityVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/SpeakVO.class b/common/target/classes/cn/unizk/entity/vo/SpeakVO.class new file mode 100644 index 0000000..41a0ead Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/SpeakVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/StoreAccountVO.class b/common/target/classes/cn/unizk/entity/vo/StoreAccountVO.class new file mode 100644 index 0000000..974b90b Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/StoreAccountVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/SysUserVO2.class b/common/target/classes/cn/unizk/entity/vo/SysUserVO2.class new file mode 100644 index 0000000..e5336c2 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/SysUserVO2.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/TreeMenu.class b/common/target/classes/cn/unizk/entity/vo/TreeMenu.class new file mode 100644 index 0000000..11d0a1f Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/TreeMenu.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/UniPage.class b/common/target/classes/cn/unizk/entity/vo/UniPage.class new file mode 100644 index 0000000..67d3b50 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/UniPage.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/UsageDetailVO.class b/common/target/classes/cn/unizk/entity/vo/UsageDetailVO.class new file mode 100644 index 0000000..97a4133 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/UsageDetailVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/UserConsultationRecordVO.class b/common/target/classes/cn/unizk/entity/vo/UserConsultationRecordVO.class new file mode 100644 index 0000000..2876fb7 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/UserConsultationRecordVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/VideoProgressVO.class b/common/target/classes/cn/unizk/entity/vo/VideoProgressVO.class new file mode 100644 index 0000000..09a8ac7 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/VideoProgressVO.class differ diff --git a/common/target/classes/cn/unizk/entity/vo/XunfuAccountVO.class b/common/target/classes/cn/unizk/entity/vo/XunfuAccountVO.class new file mode 100644 index 0000000..5236566 Binary files /dev/null and b/common/target/classes/cn/unizk/entity/vo/XunfuAccountVO.class differ diff --git a/common/target/classes/cn/unizk/enums/ContentTypeEnum.class b/common/target/classes/cn/unizk/enums/ContentTypeEnum.class new file mode 100644 index 0000000..3be2d61 Binary files /dev/null and b/common/target/classes/cn/unizk/enums/ContentTypeEnum.class differ diff --git a/common/target/classes/cn/unizk/enums/DictType.class b/common/target/classes/cn/unizk/enums/DictType.class new file mode 100644 index 0000000..8a88518 Binary files /dev/null and b/common/target/classes/cn/unizk/enums/DictType.class differ diff --git a/common/target/classes/cn/unizk/enums/FileType.class b/common/target/classes/cn/unizk/enums/FileType.class new file mode 100644 index 0000000..0135368 Binary files /dev/null and b/common/target/classes/cn/unizk/enums/FileType.class differ diff --git a/common/target/classes/cn/unizk/enums/MinioBucketType.class b/common/target/classes/cn/unizk/enums/MinioBucketType.class new file mode 100644 index 0000000..0869c2a Binary files /dev/null and b/common/target/classes/cn/unizk/enums/MinioBucketType.class differ diff --git a/common/target/classes/cn/unizk/enums/OrderAfterSaleStatus.class b/common/target/classes/cn/unizk/enums/OrderAfterSaleStatus.class new file mode 100644 index 0000000..c1a9126 Binary files /dev/null and b/common/target/classes/cn/unizk/enums/OrderAfterSaleStatus.class differ diff --git a/common/target/classes/cn/unizk/enums/OrderStatus.class b/common/target/classes/cn/unizk/enums/OrderStatus.class new file mode 100644 index 0000000..088aa39 Binary files /dev/null and b/common/target/classes/cn/unizk/enums/OrderStatus.class differ diff --git a/common/target/classes/cn/unizk/enums/OrderTypeEnum.class b/common/target/classes/cn/unizk/enums/OrderTypeEnum.class new file mode 100644 index 0000000..f5d9aaf Binary files /dev/null and b/common/target/classes/cn/unizk/enums/OrderTypeEnum.class differ diff --git a/common/target/classes/cn/unizk/enums/PlatformType.class b/common/target/classes/cn/unizk/enums/PlatformType.class new file mode 100644 index 0000000..8d51e9f Binary files /dev/null and b/common/target/classes/cn/unizk/enums/PlatformType.class differ diff --git a/common/target/classes/cn/unizk/enums/ProductType.class b/common/target/classes/cn/unizk/enums/ProductType.class new file mode 100644 index 0000000..f268c11 Binary files /dev/null and b/common/target/classes/cn/unizk/enums/ProductType.class differ diff --git a/common/target/classes/cn/unizk/exception/BusinessException.class b/common/target/classes/cn/unizk/exception/BusinessException.class new file mode 100644 index 0000000..7d5bf14 Binary files /dev/null and b/common/target/classes/cn/unizk/exception/BusinessException.class differ diff --git a/common/target/classes/cn/unizk/exception/ResponseExceptionHandler.class b/common/target/classes/cn/unizk/exception/ResponseExceptionHandler.class new file mode 100644 index 0000000..5551eea Binary files /dev/null and b/common/target/classes/cn/unizk/exception/ResponseExceptionHandler.class differ diff --git a/common/target/classes/cn/unizk/exception/ServiceException.class b/common/target/classes/cn/unizk/exception/ServiceException.class new file mode 100644 index 0000000..e97e58f Binary files /dev/null and b/common/target/classes/cn/unizk/exception/ServiceException.class differ diff --git a/common/target/classes/cn/unizk/function/BeanCopyCallBack.class b/common/target/classes/cn/unizk/function/BeanCopyCallBack.class new file mode 100644 index 0000000..8322212 Binary files /dev/null and b/common/target/classes/cn/unizk/function/BeanCopyCallBack.class differ diff --git a/common/target/classes/cn/unizk/mapper/AppletModuleMapper.class b/common/target/classes/cn/unizk/mapper/AppletModuleMapper.class new file mode 100644 index 0000000..5ccfa2c Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/AppletModuleMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/AppointmentConfigMapper.class b/common/target/classes/cn/unizk/mapper/AppointmentConfigMapper.class new file mode 100644 index 0000000..a3d0b1a Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/AppointmentConfigMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/AppointmentsMapper.class b/common/target/classes/cn/unizk/mapper/AppointmentsMapper.class new file mode 100644 index 0000000..239da5b Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/AppointmentsMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/BusinessChannelMapper.class b/common/target/classes/cn/unizk/mapper/BusinessChannelMapper.class new file mode 100644 index 0000000..27523a4 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/BusinessChannelMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/CashOutRecordMapper.class b/common/target/classes/cn/unizk/mapper/CashOutRecordMapper.class new file mode 100644 index 0000000..bc4effa Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/CashOutRecordMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/ChapterMapper.class b/common/target/classes/cn/unizk/mapper/ChapterMapper.class new file mode 100644 index 0000000..72b15e2 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/ChapterMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/ChildStoreAccountMapper.class b/common/target/classes/cn/unizk/mapper/ChildStoreAccountMapper.class new file mode 100644 index 0000000..6539d07 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/ChildStoreAccountMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/ClinicWorkLogMapper.class b/common/target/classes/cn/unizk/mapper/ClinicWorkLogMapper.class new file mode 100644 index 0000000..ebf9773 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/ClinicWorkLogMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/ComboMapper.class b/common/target/classes/cn/unizk/mapper/ComboMapper.class new file mode 100644 index 0000000..df5b5b3 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/ComboMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/CourseMapper.class b/common/target/classes/cn/unizk/mapper/CourseMapper.class new file mode 100644 index 0000000..ed1f37b Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/CourseMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/DailySchedulesMapper.class b/common/target/classes/cn/unizk/mapper/DailySchedulesMapper.class new file mode 100644 index 0000000..6bb6d3e Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/DailySchedulesMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/DeviceMapper.class b/common/target/classes/cn/unizk/mapper/DeviceMapper.class new file mode 100644 index 0000000..05de931 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/DeviceMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/DeviceRechargeRecordMapper.class b/common/target/classes/cn/unizk/mapper/DeviceRechargeRecordMapper.class new file mode 100644 index 0000000..85387f6 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/DeviceRechargeRecordMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/DeviceUpgradeMapper.class b/common/target/classes/cn/unizk/mapper/DeviceUpgradeMapper.class new file mode 100644 index 0000000..7aff2f9 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/DeviceUpgradeMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/DeviceUsageDetailMapper.class b/common/target/classes/cn/unizk/mapper/DeviceUsageDetailMapper.class new file mode 100644 index 0000000..037f554 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/DeviceUsageDetailMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/DeviceUsageRecordMapper.class b/common/target/classes/cn/unizk/mapper/DeviceUsageRecordMapper.class new file mode 100644 index 0000000..089afcd Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/DeviceUsageRecordMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/DiaRecordMapper.class b/common/target/classes/cn/unizk/mapper/DiaRecordMapper.class new file mode 100644 index 0000000..c176875 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/DiaRecordMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/DiagnosisTemplateMapper.class b/common/target/classes/cn/unizk/mapper/DiagnosisTemplateMapper.class new file mode 100644 index 0000000..b4da2a6 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/DiagnosisTemplateMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/ExamScoreMapper.class b/common/target/classes/cn/unizk/mapper/ExamScoreMapper.class new file mode 100644 index 0000000..c8950d6 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/ExamScoreMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/GolfCustInfoMapper.class b/common/target/classes/cn/unizk/mapper/GolfCustInfoMapper.class new file mode 100644 index 0000000..c056304 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/GolfCustInfoMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/GrfPjMapper.class b/common/target/classes/cn/unizk/mapper/GrfPjMapper.class new file mode 100644 index 0000000..9aed631 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/GrfPjMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/HuifuDataMapper.class b/common/target/classes/cn/unizk/mapper/HuifuDataMapper.class new file mode 100644 index 0000000..7d46f5c Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/HuifuDataMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/InventoryStatisticsMapper.class b/common/target/classes/cn/unizk/mapper/InventoryStatisticsMapper.class new file mode 100644 index 0000000..62176f8 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/InventoryStatisticsMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/JointMapper.class b/common/target/classes/cn/unizk/mapper/JointMapper.class new file mode 100644 index 0000000..1c538c6 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/JointMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/MobileAppUserAccountMapper.class b/common/target/classes/cn/unizk/mapper/MobileAppUserAccountMapper.class new file mode 100644 index 0000000..abb1437 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/MobileAppUserAccountMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/MobileAppUserMapper.class b/common/target/classes/cn/unizk/mapper/MobileAppUserMapper.class new file mode 100644 index 0000000..846d126 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/MobileAppUserMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/MobileAppointmentsMapper.class b/common/target/classes/cn/unizk/mapper/MobileAppointmentsMapper.class new file mode 100644 index 0000000..d156a90 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/MobileAppointmentsMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/MobileChapterMapper.class b/common/target/classes/cn/unizk/mapper/MobileChapterMapper.class new file mode 100644 index 0000000..6313bf7 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/MobileChapterMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/MobileComboMapper.class b/common/target/classes/cn/unizk/mapper/MobileComboMapper.class new file mode 100644 index 0000000..452a9c6 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/MobileComboMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/MobileCourseMapper.class b/common/target/classes/cn/unizk/mapper/MobileCourseMapper.class new file mode 100644 index 0000000..215e2f3 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/MobileCourseMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/MobileOrderItemMapper.class b/common/target/classes/cn/unizk/mapper/MobileOrderItemMapper.class new file mode 100644 index 0000000..c661e30 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/MobileOrderItemMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/MobileOrderMapper.class b/common/target/classes/cn/unizk/mapper/MobileOrderMapper.class new file mode 100644 index 0000000..0ba2d5a Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/MobileOrderMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/MobileUserAddressMapper.class b/common/target/classes/cn/unizk/mapper/MobileUserAddressMapper.class new file mode 100644 index 0000000..7504eda Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/MobileUserAddressMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/MobileUserHaveCourseMapper.class b/common/target/classes/cn/unizk/mapper/MobileUserHaveCourseMapper.class new file mode 100644 index 0000000..fd07916 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/MobileUserHaveCourseMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/MobileUserMedicalVisitInfoMapper.class b/common/target/classes/cn/unizk/mapper/MobileUserMedicalVisitInfoMapper.class new file mode 100644 index 0000000..4913f38 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/MobileUserMedicalVisitInfoMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/MobileUserVideoProgressMapper.class b/common/target/classes/cn/unizk/mapper/MobileUserVideoProgressMapper.class new file mode 100644 index 0000000..78d66e1 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/MobileUserVideoProgressMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/ModulePermsMapper.class b/common/target/classes/cn/unizk/mapper/ModulePermsMapper.class new file mode 100644 index 0000000..ae1d502 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/ModulePermsMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/OrderReviewMapper.class b/common/target/classes/cn/unizk/mapper/OrderReviewMapper.class new file mode 100644 index 0000000..2c4c7c7 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/OrderReviewMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/PhysioExamMapper.class b/common/target/classes/cn/unizk/mapper/PhysioExamMapper.class new file mode 100644 index 0000000..b21d62e Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/PhysioExamMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/PhysioSchedulesMapper.class b/common/target/classes/cn/unizk/mapper/PhysioSchedulesMapper.class new file mode 100644 index 0000000..80d0b82 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/PhysioSchedulesMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/PhysioThirteenAreaMapper.class b/common/target/classes/cn/unizk/mapper/PhysioThirteenAreaMapper.class new file mode 100644 index 0000000..068ccde Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/PhysioThirteenAreaMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/RechargePackageMapper.class b/common/target/classes/cn/unizk/mapper/RechargePackageMapper.class new file mode 100644 index 0000000..ebf3a0d Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/RechargePackageMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/ReportTemplateMapper.class b/common/target/classes/cn/unizk/mapper/ReportTemplateMapper.class new file mode 100644 index 0000000..9154d4a Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/ReportTemplateMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/RunConsultationMapper.class b/common/target/classes/cn/unizk/mapper/RunConsultationMapper.class new file mode 100644 index 0000000..7eab5cd Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/RunConsultationMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/StoreAccountMapper.class b/common/target/classes/cn/unizk/mapper/StoreAccountMapper.class new file mode 100644 index 0000000..b074612 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/StoreAccountMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/SubHealthDietaryRegulationMapper.class b/common/target/classes/cn/unizk/mapper/SubHealthDietaryRegulationMapper.class new file mode 100644 index 0000000..2c76093 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/SubHealthDietaryRegulationMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/SysFileCommonMapper.class b/common/target/classes/cn/unizk/mapper/SysFileCommonMapper.class new file mode 100644 index 0000000..b77d90c Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/SysFileCommonMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/TimeSlotsMapper.class b/common/target/classes/cn/unizk/mapper/TimeSlotsMapper.class new file mode 100644 index 0000000..494a408 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/TimeSlotsMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/TreatParameterMapper.class b/common/target/classes/cn/unizk/mapper/TreatParameterMapper.class new file mode 100644 index 0000000..0dc55ac Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/TreatParameterMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/UserConsultationRecordMapper.class b/common/target/classes/cn/unizk/mapper/UserConsultationRecordMapper.class new file mode 100644 index 0000000..5e2964f Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/UserConsultationRecordMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/UserDeviceTreatRecordMapper.class b/common/target/classes/cn/unizk/mapper/UserDeviceTreatRecordMapper.class new file mode 100644 index 0000000..db047ec Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/UserDeviceTreatRecordMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/UserFreeTrialInfoMapper.class b/common/target/classes/cn/unizk/mapper/UserFreeTrialInfoMapper.class new file mode 100644 index 0000000..58a221f Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/UserFreeTrialInfoMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/UserTreatmentParametersMapper.class b/common/target/classes/cn/unizk/mapper/UserTreatmentParametersMapper.class new file mode 100644 index 0000000..7411357 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/UserTreatmentParametersMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/WxVipRechargeMapper.class b/common/target/classes/cn/unizk/mapper/WxVipRechargeMapper.class new file mode 100644 index 0000000..3feda67 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/WxVipRechargeMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/XunfuAccountMapper.class b/common/target/classes/cn/unizk/mapper/XunfuAccountMapper.class new file mode 100644 index 0000000..7026faa Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/XunfuAccountMapper.class differ diff --git a/common/target/classes/cn/unizk/mapper/YnzkSystemDeviceMapper.class b/common/target/classes/cn/unizk/mapper/YnzkSystemDeviceMapper.class new file mode 100644 index 0000000..ea82486 Binary files /dev/null and b/common/target/classes/cn/unizk/mapper/YnzkSystemDeviceMapper.class differ diff --git a/common/target/classes/cn/unizk/pay/dto/ActiveMemberPayParam.class b/common/target/classes/cn/unizk/pay/dto/ActiveMemberPayParam.class new file mode 100644 index 0000000..2f0aaef Binary files /dev/null and b/common/target/classes/cn/unizk/pay/dto/ActiveMemberPayParam.class differ diff --git a/common/target/classes/cn/unizk/pay/dto/AlipayResp.class b/common/target/classes/cn/unizk/pay/dto/AlipayResp.class new file mode 100644 index 0000000..93bc3b7 Binary files /dev/null and b/common/target/classes/cn/unizk/pay/dto/AlipayResp.class differ diff --git a/common/target/classes/cn/unizk/pay/dto/BasePayResponse.class b/common/target/classes/cn/unizk/pay/dto/BasePayResponse.class new file mode 100644 index 0000000..e3c4845 Binary files /dev/null and b/common/target/classes/cn/unizk/pay/dto/BasePayResponse.class differ diff --git a/common/target/classes/cn/unizk/pay/dto/CartPayParam.class b/common/target/classes/cn/unizk/pay/dto/CartPayParam.class new file mode 100644 index 0000000..019f674 Binary files /dev/null and b/common/target/classes/cn/unizk/pay/dto/CartPayParam.class differ diff --git a/common/target/classes/cn/unizk/pay/dto/CoursePayParam.class b/common/target/classes/cn/unizk/pay/dto/CoursePayParam.class new file mode 100644 index 0000000..fd4d8ec Binary files /dev/null and b/common/target/classes/cn/unizk/pay/dto/CoursePayParam.class differ diff --git a/common/target/classes/cn/unizk/pay/dto/GolfServicePayParam.class b/common/target/classes/cn/unizk/pay/dto/GolfServicePayParam.class new file mode 100644 index 0000000..e5eadfd Binary files /dev/null and b/common/target/classes/cn/unizk/pay/dto/GolfServicePayParam.class differ diff --git a/common/target/classes/cn/unizk/pay/dto/HGJPayParam.class b/common/target/classes/cn/unizk/pay/dto/HGJPayParam.class new file mode 100644 index 0000000..f744871 Binary files /dev/null and b/common/target/classes/cn/unizk/pay/dto/HGJPayParam.class differ diff --git a/common/target/classes/cn/unizk/pay/dto/PayBaseRequest.class b/common/target/classes/cn/unizk/pay/dto/PayBaseRequest.class new file mode 100644 index 0000000..35e4a4c Binary files /dev/null and b/common/target/classes/cn/unizk/pay/dto/PayBaseRequest.class differ diff --git a/common/target/classes/cn/unizk/pay/dto/ProductPayParam.class b/common/target/classes/cn/unizk/pay/dto/ProductPayParam.class new file mode 100644 index 0000000..193b43c Binary files /dev/null and b/common/target/classes/cn/unizk/pay/dto/ProductPayParam.class differ diff --git a/common/target/classes/cn/unizk/pay/dto/RechargePayParam.class b/common/target/classes/cn/unizk/pay/dto/RechargePayParam.class new file mode 100644 index 0000000..120534f Binary files /dev/null and b/common/target/classes/cn/unizk/pay/dto/RechargePayParam.class differ diff --git a/common/target/classes/cn/unizk/pay/dto/ScanToPowerOnPayParam.class b/common/target/classes/cn/unizk/pay/dto/ScanToPowerOnPayParam.class new file mode 100644 index 0000000..7c4b224 Binary files /dev/null and b/common/target/classes/cn/unizk/pay/dto/ScanToPowerOnPayParam.class differ diff --git a/common/target/classes/cn/unizk/pay/dto/WechatPayResp.class b/common/target/classes/cn/unizk/pay/dto/WechatPayResp.class new file mode 100644 index 0000000..41335de Binary files /dev/null and b/common/target/classes/cn/unizk/pay/dto/WechatPayResp.class differ diff --git a/common/target/classes/cn/unizk/poi/SubHealthReadListener.class b/common/target/classes/cn/unizk/poi/SubHealthReadListener.class new file mode 100644 index 0000000..0c96b89 Binary files /dev/null and b/common/target/classes/cn/unizk/poi/SubHealthReadListener.class differ diff --git a/common/target/classes/cn/unizk/service/FileUploadService.class b/common/target/classes/cn/unizk/service/FileUploadService.class new file mode 100644 index 0000000..5ba2b7a Binary files /dev/null and b/common/target/classes/cn/unizk/service/FileUploadService.class differ diff --git a/common/target/classes/cn/unizk/service/HuaWeiYunService.class b/common/target/classes/cn/unizk/service/HuaWeiYunService.class new file mode 100644 index 0000000..7c94ca8 Binary files /dev/null and b/common/target/classes/cn/unizk/service/HuaWeiYunService.class differ diff --git a/common/target/classes/cn/unizk/service/WxAuthService.class b/common/target/classes/cn/unizk/service/WxAuthService.class new file mode 100644 index 0000000..670f231 Binary files /dev/null and b/common/target/classes/cn/unizk/service/WxAuthService.class differ diff --git a/common/target/classes/cn/unizk/service/impl/FileUploadServiceImpl.class b/common/target/classes/cn/unizk/service/impl/FileUploadServiceImpl.class new file mode 100644 index 0000000..eeb2a68 Binary files /dev/null and b/common/target/classes/cn/unizk/service/impl/FileUploadServiceImpl.class differ diff --git a/common/target/classes/cn/unizk/sign/AbstractSignature.class b/common/target/classes/cn/unizk/sign/AbstractSignature.class new file mode 100644 index 0000000..ddc8553 Binary files /dev/null and b/common/target/classes/cn/unizk/sign/AbstractSignature.class differ diff --git a/common/target/classes/cn/unizk/sign/LfasrSignature.class b/common/target/classes/cn/unizk/sign/LfasrSignature.class new file mode 100644 index 0000000..0999434 Binary files /dev/null and b/common/target/classes/cn/unizk/sign/LfasrSignature.class differ diff --git a/common/target/classes/cn/unizk/utils/AESUtil.class b/common/target/classes/cn/unizk/utils/AESUtil.class new file mode 100644 index 0000000..93cdeac Binary files /dev/null and b/common/target/classes/cn/unizk/utils/AESUtil.class differ diff --git a/common/target/classes/cn/unizk/utils/BeanCopyUtils.class b/common/target/classes/cn/unizk/utils/BeanCopyUtils.class new file mode 100644 index 0000000..20382dd Binary files /dev/null and b/common/target/classes/cn/unizk/utils/BeanCopyUtils.class differ diff --git a/common/target/classes/cn/unizk/utils/CaptchaGenerator.class b/common/target/classes/cn/unizk/utils/CaptchaGenerator.class new file mode 100644 index 0000000..4d0e611 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/CaptchaGenerator.class differ diff --git a/common/target/classes/cn/unizk/utils/CityDataUtil.class b/common/target/classes/cn/unizk/utils/CityDataUtil.class new file mode 100644 index 0000000..4600e09 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/CityDataUtil.class differ diff --git a/common/target/classes/cn/unizk/utils/Crc16Util.class b/common/target/classes/cn/unizk/utils/Crc16Util.class new file mode 100644 index 0000000..b759598 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/Crc16Util.class differ diff --git a/common/target/classes/cn/unizk/utils/CryptTools.class b/common/target/classes/cn/unizk/utils/CryptTools.class new file mode 100644 index 0000000..4466eff Binary files /dev/null and b/common/target/classes/cn/unizk/utils/CryptTools.class differ diff --git a/common/target/classes/cn/unizk/utils/HttpUtil$HttpMethod.class b/common/target/classes/cn/unizk/utils/HttpUtil$HttpMethod.class new file mode 100644 index 0000000..30ad2b7 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/HttpUtil$HttpMethod.class differ diff --git a/common/target/classes/cn/unizk/utils/HttpUtil.class b/common/target/classes/cn/unizk/utils/HttpUtil.class new file mode 100644 index 0000000..4b099f7 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/HttpUtil.class differ diff --git a/common/target/classes/cn/unizk/utils/HuifuUtil.class b/common/target/classes/cn/unizk/utils/HuifuUtil.class new file mode 100644 index 0000000..7f2e333 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/HuifuUtil.class differ diff --git a/common/target/classes/cn/unizk/utils/IOFileUtil.class b/common/target/classes/cn/unizk/utils/IOFileUtil.class new file mode 100644 index 0000000..4256fa5 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/IOFileUtil.class differ diff --git a/common/target/classes/cn/unizk/utils/IatModelZh$Cw.class b/common/target/classes/cn/unizk/utils/IatModelZh$Cw.class new file mode 100644 index 0000000..86e3f91 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/IatModelZh$Cw.class differ diff --git a/common/target/classes/cn/unizk/utils/IatModelZh$Header.class b/common/target/classes/cn/unizk/utils/IatModelZh$Header.class new file mode 100644 index 0000000..b85a360 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/IatModelZh$Header.class differ diff --git a/common/target/classes/cn/unizk/utils/IatModelZh$JsonParse.class b/common/target/classes/cn/unizk/utils/IatModelZh$JsonParse.class new file mode 100644 index 0000000..fb8bc1b Binary files /dev/null and b/common/target/classes/cn/unizk/utils/IatModelZh$JsonParse.class differ diff --git a/common/target/classes/cn/unizk/utils/IatModelZh$JsonParseText.class b/common/target/classes/cn/unizk/utils/IatModelZh$JsonParseText.class new file mode 100644 index 0000000..22eadef Binary files /dev/null and b/common/target/classes/cn/unizk/utils/IatModelZh$JsonParseText.class differ diff --git a/common/target/classes/cn/unizk/utils/IatModelZh$Payload.class b/common/target/classes/cn/unizk/utils/IatModelZh$Payload.class new file mode 100644 index 0000000..2d81716 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/IatModelZh$Payload.class differ diff --git a/common/target/classes/cn/unizk/utils/IatModelZh$Result.class b/common/target/classes/cn/unizk/utils/IatModelZh$Result.class new file mode 100644 index 0000000..3b6fb1a Binary files /dev/null and b/common/target/classes/cn/unizk/utils/IatModelZh$Result.class differ diff --git a/common/target/classes/cn/unizk/utils/IatModelZh$Ws.class b/common/target/classes/cn/unizk/utils/IatModelZh$Ws.class new file mode 100644 index 0000000..c806774 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/IatModelZh$Ws.class differ diff --git a/common/target/classes/cn/unizk/utils/IatModelZh.class b/common/target/classes/cn/unizk/utils/IatModelZh.class new file mode 100644 index 0000000..6b8f03c Binary files /dev/null and b/common/target/classes/cn/unizk/utils/IatModelZh.class differ diff --git a/common/target/classes/cn/unizk/utils/JkStrUtil.class b/common/target/classes/cn/unizk/utils/JkStrUtil.class new file mode 100644 index 0000000..ce52a36 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/JkStrUtil.class differ diff --git a/common/target/classes/cn/unizk/utils/MD5Util.class b/common/target/classes/cn/unizk/utils/MD5Util.class new file mode 100644 index 0000000..932371a Binary files /dev/null and b/common/target/classes/cn/unizk/utils/MD5Util.class differ diff --git a/common/target/classes/cn/unizk/utils/MapUtil.class b/common/target/classes/cn/unizk/utils/MapUtil.class new file mode 100644 index 0000000..66c3269 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/MapUtil.class differ diff --git a/common/target/classes/cn/unizk/utils/MenuTreeUtil.class b/common/target/classes/cn/unizk/utils/MenuTreeUtil.class new file mode 100644 index 0000000..9fe6547 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/MenuTreeUtil.class differ diff --git a/common/target/classes/cn/unizk/utils/MinioUtil.class b/common/target/classes/cn/unizk/utils/MinioUtil.class new file mode 100644 index 0000000..8ce790a Binary files /dev/null and b/common/target/classes/cn/unizk/utils/MinioUtil.class differ diff --git a/common/target/classes/cn/unizk/utils/MybatisPlusGenerator.class b/common/target/classes/cn/unizk/utils/MybatisPlusGenerator.class new file mode 100644 index 0000000..390c87f Binary files /dev/null and b/common/target/classes/cn/unizk/utils/MybatisPlusGenerator.class differ diff --git a/common/target/classes/cn/unizk/utils/MybatisResultMapUtil.class b/common/target/classes/cn/unizk/utils/MybatisResultMapUtil.class new file mode 100644 index 0000000..8bd03c8 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/MybatisResultMapUtil.class differ diff --git a/common/target/classes/cn/unizk/utils/QRcodeUtil.class b/common/target/classes/cn/unizk/utils/QRcodeUtil.class new file mode 100644 index 0000000..b58ab6d Binary files /dev/null and b/common/target/classes/cn/unizk/utils/QRcodeUtil.class differ diff --git a/common/target/classes/cn/unizk/utils/SecurePlaintextCryptoUtil.class b/common/target/classes/cn/unizk/utils/SecurePlaintextCryptoUtil.class new file mode 100644 index 0000000..a65f1b3 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/SecurePlaintextCryptoUtil.class differ diff --git a/common/target/classes/cn/unizk/utils/SendSmsUtil.class b/common/target/classes/cn/unizk/utils/SendSmsUtil.class new file mode 100644 index 0000000..b8a1c13 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/SendSmsUtil.class differ diff --git a/common/target/classes/cn/unizk/utils/ServletUtils.class b/common/target/classes/cn/unizk/utils/ServletUtils.class new file mode 100644 index 0000000..a9bfcee Binary files /dev/null and b/common/target/classes/cn/unizk/utils/ServletUtils.class differ diff --git a/common/target/classes/cn/unizk/utils/SpringUtil.class b/common/target/classes/cn/unizk/utils/SpringUtil.class new file mode 100644 index 0000000..9075114 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/SpringUtil.class differ diff --git a/common/target/classes/cn/unizk/utils/WebIATWS$Cw.class b/common/target/classes/cn/unizk/utils/WebIATWS$Cw.class new file mode 100644 index 0000000..1d6742e Binary files /dev/null and b/common/target/classes/cn/unizk/utils/WebIATWS$Cw.class differ diff --git a/common/target/classes/cn/unizk/utils/WebIATWS$Data.class b/common/target/classes/cn/unizk/utils/WebIATWS$Data.class new file mode 100644 index 0000000..2f9066d Binary files /dev/null and b/common/target/classes/cn/unizk/utils/WebIATWS$Data.class differ diff --git a/common/target/classes/cn/unizk/utils/WebIATWS$Decoder.class b/common/target/classes/cn/unizk/utils/WebIATWS$Decoder.class new file mode 100644 index 0000000..b14869b Binary files /dev/null and b/common/target/classes/cn/unizk/utils/WebIATWS$Decoder.class differ diff --git a/common/target/classes/cn/unizk/utils/WebIATWS$ResponseData.class b/common/target/classes/cn/unizk/utils/WebIATWS$ResponseData.class new file mode 100644 index 0000000..8d3611a Binary files /dev/null and b/common/target/classes/cn/unizk/utils/WebIATWS$ResponseData.class differ diff --git a/common/target/classes/cn/unizk/utils/WebIATWS$Result.class b/common/target/classes/cn/unizk/utils/WebIATWS$Result.class new file mode 100644 index 0000000..4073eb1 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/WebIATWS$Result.class differ diff --git a/common/target/classes/cn/unizk/utils/WebIATWS$Text.class b/common/target/classes/cn/unizk/utils/WebIATWS$Text.class new file mode 100644 index 0000000..094e55b Binary files /dev/null and b/common/target/classes/cn/unizk/utils/WebIATWS$Text.class differ diff --git a/common/target/classes/cn/unizk/utils/WebIATWS$Ws.class b/common/target/classes/cn/unizk/utils/WebIATWS$Ws.class new file mode 100644 index 0000000..b62dd90 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/WebIATWS$Ws.class differ diff --git a/common/target/classes/cn/unizk/utils/WebIATWS.class b/common/target/classes/cn/unizk/utils/WebIATWS.class new file mode 100644 index 0000000..ea92c37 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/WebIATWS.class differ diff --git a/common/target/classes/cn/unizk/utils/XfHttpUtil.class b/common/target/classes/cn/unizk/utils/XfHttpUtil.class new file mode 100644 index 0000000..b51d438 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/XfHttpUtil.class differ diff --git a/common/target/classes/cn/unizk/utils/XfSpeechToTextUtil$Content.class b/common/target/classes/cn/unizk/utils/XfSpeechToTextUtil$Content.class new file mode 100644 index 0000000..8672958 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/XfSpeechToTextUtil$Content.class differ diff --git a/common/target/classes/cn/unizk/utils/XfSpeechToTextUtil$JsonParse.class b/common/target/classes/cn/unizk/utils/XfSpeechToTextUtil$JsonParse.class new file mode 100644 index 0000000..53aec20 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/XfSpeechToTextUtil$JsonParse.class differ diff --git a/common/target/classes/cn/unizk/utils/XfSpeechToTextUtil$OrderInfo.class b/common/target/classes/cn/unizk/utils/XfSpeechToTextUtil$OrderInfo.class new file mode 100644 index 0000000..9f3f4fd Binary files /dev/null and b/common/target/classes/cn/unizk/utils/XfSpeechToTextUtil$OrderInfo.class differ diff --git a/common/target/classes/cn/unizk/utils/XfSpeechToTextUtil$OrderResult.class b/common/target/classes/cn/unizk/utils/XfSpeechToTextUtil$OrderResult.class new file mode 100644 index 0000000..6d336cc Binary files /dev/null and b/common/target/classes/cn/unizk/utils/XfSpeechToTextUtil$OrderResult.class differ diff --git a/common/target/classes/cn/unizk/utils/XfSpeechToTextUtil.class b/common/target/classes/cn/unizk/utils/XfSpeechToTextUtil.class new file mode 100644 index 0000000..af0225b Binary files /dev/null and b/common/target/classes/cn/unizk/utils/XfSpeechToTextUtil.class differ diff --git a/common/target/classes/cn/unizk/utils/XorUtil.class b/common/target/classes/cn/unizk/utils/XorUtil.class new file mode 100644 index 0000000..7eac5d3 Binary files /dev/null and b/common/target/classes/cn/unizk/utils/XorUtil.class differ diff --git a/common/target/classes/cn/unizk/validatedGroup/DefaultGroup.class b/common/target/classes/cn/unizk/validatedGroup/DefaultGroup.class new file mode 100644 index 0000000..ffa739c Binary files /dev/null and b/common/target/classes/cn/unizk/validatedGroup/DefaultGroup.class differ diff --git a/common/target/classes/cn/unizk/validatedGroup/UpdateGroup.class b/common/target/classes/cn/unizk/validatedGroup/UpdateGroup.class new file mode 100644 index 0000000..ca831c6 Binary files /dev/null and b/common/target/classes/cn/unizk/validatedGroup/UpdateGroup.class differ diff --git a/common/target/classes/mapper/AppletModuleMapper.xml b/common/target/classes/mapper/AppletModuleMapper.xml new file mode 100644 index 0000000..734e124 --- /dev/null +++ b/common/target/classes/mapper/AppletModuleMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/AppointmentConfigMapper.xml b/common/target/classes/mapper/AppointmentConfigMapper.xml new file mode 100644 index 0000000..ab94031 --- /dev/null +++ b/common/target/classes/mapper/AppointmentConfigMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/AppointmentsMapper.xml b/common/target/classes/mapper/AppointmentsMapper.xml new file mode 100644 index 0000000..e1b50c1 --- /dev/null +++ b/common/target/classes/mapper/AppointmentsMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/ChapterMapper.xml b/common/target/classes/mapper/ChapterMapper.xml new file mode 100644 index 0000000..7201a31 --- /dev/null +++ b/common/target/classes/mapper/ChapterMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/ChildStoreAccountMapper.xml b/common/target/classes/mapper/ChildStoreAccountMapper.xml new file mode 100644 index 0000000..2d087a6 --- /dev/null +++ b/common/target/classes/mapper/ChildStoreAccountMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/ClinicWorkLogMapper.xml b/common/target/classes/mapper/ClinicWorkLogMapper.xml new file mode 100644 index 0000000..14e0770 --- /dev/null +++ b/common/target/classes/mapper/ClinicWorkLogMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/CourseMapper.xml b/common/target/classes/mapper/CourseMapper.xml new file mode 100644 index 0000000..2105251 --- /dev/null +++ b/common/target/classes/mapper/CourseMapper.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/DailySchedulesMapper.xml b/common/target/classes/mapper/DailySchedulesMapper.xml new file mode 100644 index 0000000..21c4806 --- /dev/null +++ b/common/target/classes/mapper/DailySchedulesMapper.xml @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO daily_schedules ( physio_id, schedule_date, time_slot_code, max_bookings, booked_count, STATUS ) SELECT + ps.physio_id, + target_date.schedule_date, + ts.slot_code, + COALESCE ( ps.max_bookings, jp.max_bookings_per_slot ) AS max_bookings, + 0 AS booked_count, + 'available' AS STATUS + FROM + ( + WITH RECURSIVE date_list AS ( + SELECT + CURDATE() AS schedule_date UNION ALL + SELECT + DATE_ADD( schedule_date, INTERVAL 1 DAY ) + FROM + date_list + + WHERE + schedule_date < DATE_ADD( CURDATE(), INTERVAL 14 DAY ) + ) SELECT + schedule_date + FROM + date_list + ) target_date + CROSS JOIN physio_schedules ps + JOIN jk_physio jp ON ps.physio_id = jp.id + JOIN time_slots ts ON ts.slot_code = ps.time_slot_code + WHERE + ps.active = 1 + AND jp.STATUS = '启用' + AND NOT EXISTS ( + SELECT + 1 + FROM + daily_schedules ds_existing + WHERE + ds_existing.physio_id = jp.id + AND ds_existing.schedule_date = target_date.schedule_date + AND ds_existing.time_slot_code = ts.slot_code) + + + + + + + + + + + + diff --git a/common/target/classes/mapper/DeviceUpgradeMapper.xml b/common/target/classes/mapper/DeviceUpgradeMapper.xml new file mode 100644 index 0000000..45c6a93 --- /dev/null +++ b/common/target/classes/mapper/DeviceUpgradeMapper.xml @@ -0,0 +1,11 @@ + + + + + + update device_upgrade set be_current_version = 0 where be_current_version = 1 + + + diff --git a/common/target/classes/mapper/DeviceUsageDetailMapper2.xml b/common/target/classes/mapper/DeviceUsageDetailMapper2.xml new file mode 100644 index 0000000..735378a --- /dev/null +++ b/common/target/classes/mapper/DeviceUsageDetailMapper2.xml @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/common/target/classes/mapper/DeviceUsageRecordMapper.xml b/common/target/classes/mapper/DeviceUsageRecordMapper.xml new file mode 100644 index 0000000..0d59378 --- /dev/null +++ b/common/target/classes/mapper/DeviceUsageRecordMapper.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + update device_usage_record set start_use_flag = 'false',end_time = now() where start_use_flag = 'true' and id in + + #{item} + + + + + update device_usage_record set start_use_flag = 'false',end_time = now() where start_use_flag = 'true' and device_id in + + #{item} + + + diff --git a/common/target/classes/mapper/DiaRecordMapper.xml b/common/target/classes/mapper/DiaRecordMapper.xml new file mode 100644 index 0000000..97acb06 --- /dev/null +++ b/common/target/classes/mapper/DiaRecordMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/GolfCustInfoMapper.xml b/common/target/classes/mapper/GolfCustInfoMapper.xml new file mode 100644 index 0000000..232055b --- /dev/null +++ b/common/target/classes/mapper/GolfCustInfoMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/InventoryStatisticsMapper.xml b/common/target/classes/mapper/InventoryStatisticsMapper.xml new file mode 100644 index 0000000..ba5b069 --- /dev/null +++ b/common/target/classes/mapper/InventoryStatisticsMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/JointMapper.xml b/common/target/classes/mapper/JointMapper.xml new file mode 100644 index 0000000..8afb0bc --- /dev/null +++ b/common/target/classes/mapper/JointMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/MobileAppUserAccountMapper.xml b/common/target/classes/mapper/MobileAppUserAccountMapper.xml new file mode 100644 index 0000000..6760b66 --- /dev/null +++ b/common/target/classes/mapper/MobileAppUserAccountMapper.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/MobileAppUserMapper.xml b/common/target/classes/mapper/MobileAppUserMapper.xml new file mode 100644 index 0000000..8be0203 --- /dev/null +++ b/common/target/classes/mapper/MobileAppUserMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + update mobile_app_user set phone_number = #{phoneNumber} where id = #{userId} + + + + diff --git a/common/target/classes/mapper/MobileAppointmentsMapper.xml b/common/target/classes/mapper/MobileAppointmentsMapper.xml new file mode 100644 index 0000000..c9b8418 --- /dev/null +++ b/common/target/classes/mapper/MobileAppointmentsMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/MobileChapterMapper.xml b/common/target/classes/mapper/MobileChapterMapper.xml new file mode 100644 index 0000000..742c3a7 --- /dev/null +++ b/common/target/classes/mapper/MobileChapterMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/MobileComboMapper.xml b/common/target/classes/mapper/MobileComboMapper.xml new file mode 100644 index 0000000..fbf4ba0 --- /dev/null +++ b/common/target/classes/mapper/MobileComboMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/MobileCourseMapper.xml b/common/target/classes/mapper/MobileCourseMapper.xml new file mode 100644 index 0000000..8b9d8d2 --- /dev/null +++ b/common/target/classes/mapper/MobileCourseMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/MobileOrderItemMapper.xml b/common/target/classes/mapper/MobileOrderItemMapper.xml new file mode 100644 index 0000000..0486c2f --- /dev/null +++ b/common/target/classes/mapper/MobileOrderItemMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/MobileOrderMapper.xml b/common/target/classes/mapper/MobileOrderMapper.xml new file mode 100644 index 0000000..670b97e --- /dev/null +++ b/common/target/classes/mapper/MobileOrderMapper.xml @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + update wx_order set status = 'paid',pay_time = NOW() where order_id = #{orderId} and status = 'unpaid' + + + + update wx_order set status = 'canceled' where order_id = #{orderId} and status = 'unpaid' + + + + + + + + + + diff --git a/common/target/classes/mapper/MobileUserAddressMapper.xml b/common/target/classes/mapper/MobileUserAddressMapper.xml new file mode 100644 index 0000000..b0a79e7 --- /dev/null +++ b/common/target/classes/mapper/MobileUserAddressMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/MobileUserHaveCourseMapper.xml b/common/target/classes/mapper/MobileUserHaveCourseMapper.xml new file mode 100644 index 0000000..1db94d4 --- /dev/null +++ b/common/target/classes/mapper/MobileUserHaveCourseMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/MobileUserMedicalVisitInfoMapper.xml b/common/target/classes/mapper/MobileUserMedicalVisitInfoMapper.xml new file mode 100644 index 0000000..0004d8a --- /dev/null +++ b/common/target/classes/mapper/MobileUserMedicalVisitInfoMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/MobileUserVideoProgressMapper.xml b/common/target/classes/mapper/MobileUserVideoProgressMapper.xml new file mode 100644 index 0000000..3135d9f --- /dev/null +++ b/common/target/classes/mapper/MobileUserVideoProgressMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/ModulePermsMapper.xml b/common/target/classes/mapper/ModulePermsMapper.xml new file mode 100644 index 0000000..9bac419 --- /dev/null +++ b/common/target/classes/mapper/ModulePermsMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/PhysioSchedulesMapper.xml b/common/target/classes/mapper/PhysioSchedulesMapper.xml new file mode 100644 index 0000000..e906f6d --- /dev/null +++ b/common/target/classes/mapper/PhysioSchedulesMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/PhysioThirteenAreaMapper.xml b/common/target/classes/mapper/PhysioThirteenAreaMapper.xml new file mode 100644 index 0000000..0fe5ca4 --- /dev/null +++ b/common/target/classes/mapper/PhysioThirteenAreaMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/RunConsultationMapper.xml b/common/target/classes/mapper/RunConsultationMapper.xml new file mode 100644 index 0000000..ebf07d1 --- /dev/null +++ b/common/target/classes/mapper/RunConsultationMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/SubHealthMapper.xml b/common/target/classes/mapper/SubHealthMapper.xml new file mode 100644 index 0000000..ddce1a8 --- /dev/null +++ b/common/target/classes/mapper/SubHealthMapper.xml @@ -0,0 +1,24 @@ + + + + + + + diff --git a/common/target/classes/mapper/TimeSlotsMapper.xml b/common/target/classes/mapper/TimeSlotsMapper.xml new file mode 100644 index 0000000..58be492 --- /dev/null +++ b/common/target/classes/mapper/TimeSlotsMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/TreatParameterMapper.xml b/common/target/classes/mapper/TreatParameterMapper.xml new file mode 100644 index 0000000..5c50f28 --- /dev/null +++ b/common/target/classes/mapper/TreatParameterMapper.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/common/target/classes/mapper/UserConsultationRecordMapper.xml b/common/target/classes/mapper/UserConsultationRecordMapper.xml new file mode 100644 index 0000000..ec97681 --- /dev/null +++ b/common/target/classes/mapper/UserConsultationRecordMapper.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/UserFreeTrialInfoMapper.xml b/common/target/classes/mapper/UserFreeTrialInfoMapper.xml new file mode 100644 index 0000000..277d94b --- /dev/null +++ b/common/target/classes/mapper/UserFreeTrialInfoMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/common/target/classes/mapper/UserHaveCourseMapper.xml b/common/target/classes/mapper/UserHaveCourseMapper.xml new file mode 100644 index 0000000..12c65a4 --- /dev/null +++ b/common/target/classes/mapper/UserHaveCourseMapper.xml @@ -0,0 +1,14 @@ + + + + + + + diff --git a/common/target/classes/mapper/UserTreatmentParametersMapper.xml b/common/target/classes/mapper/UserTreatmentParametersMapper.xml new file mode 100644 index 0000000..67cae29 --- /dev/null +++ b/common/target/classes/mapper/UserTreatmentParametersMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + update user_treatment_parameters set status = 0 + WHERE create_time < NOW() - INTERVAL 30 MINUTE; + + + diff --git a/common/target/classes/mapper/WxUserAccountMapper.xml b/common/target/classes/mapper/WxUserAccountMapper.xml new file mode 100644 index 0000000..62da919 --- /dev/null +++ b/common/target/classes/mapper/WxUserAccountMapper.xml @@ -0,0 +1,14 @@ + + + + + + + diff --git a/common/target/classes/mapper/WxUserMedicalVisitInfoMapper.xml b/common/target/classes/mapper/WxUserMedicalVisitInfoMapper.xml new file mode 100644 index 0000000..b69cc1a --- /dev/null +++ b/common/target/classes/mapper/WxUserMedicalVisitInfoMapper.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/common/target/classes/mapper/WxUserVideoProgressMapper.xml b/common/target/classes/mapper/WxUserVideoProgressMapper.xml new file mode 100644 index 0000000..7a49b1d --- /dev/null +++ b/common/target/classes/mapper/WxUserVideoProgressMapper.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/common/target/classes/mapper/WxVipRechargeMapper.xml b/common/target/classes/mapper/WxVipRechargeMapper.xml new file mode 100644 index 0000000..c8e0950 --- /dev/null +++ b/common/target/classes/mapper/WxVipRechargeMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/common/target/common-1.0.0.jar b/common/target/common-1.0.0.jar new file mode 100644 index 0000000..d52d51a Binary files /dev/null and b/common/target/common-1.0.0.jar differ diff --git a/common/target/maven-archiver/pom.properties b/common/target/maven-archiver/pom.properties new file mode 100644 index 0000000..fbc9d1e --- /dev/null +++ b/common/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Tue Aug 25 11:32:57 CST 2026 +version=1.0.0 +groupId=cn.unizk +artifactId=common diff --git a/common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..7780553 --- /dev/null +++ b/common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,297 @@ +cn\unizk\mapper\DeviceUsageRecordMapper.class +cn\unizk\mapper\ComboMapper.class +cn\unizk\utils\IatModelZh.class +cn\unizk\mapper\DeviceUsageDetailMapper.class +cn\unizk\pay\dto\HGJPayParam.class +cn\unizk\utils\XfSpeechToTextUtil.class +cn\unizk\entity\vo\JkStoreReqVO.class +cn\unizk\enums\FileType.class +cn\unizk\entity\vo\TreeMenu.class +cn\unizk\utils\SpringUtil.class +cn\unizk\entity\dto\HuifuSyncRefundResDTO.class +cn\unizk\entity\vo\UserConsultationRecordVO.class +cn\unizk\mapper\GrfPjMapper.class +cn\unizk\entity\vo\ReportTemplateVO.class +cn\unizk\mapper\MobileAppUserAccountMapper.class +cn\unizk\service\HuaWeiYunService.class +cn\unizk\entity\po\DeviceUsageRecord.class +cn\unizk\utils\WebIATWS$Data.class +cn\unizk\entity\vo\AppointmentVO3.class +cn\unizk\entity\po\PhysioExam.class +cn\unizk\enums\MinioBucketType.class +cn\unizk\utils\WebIATWS$Result.class +cn\unizk\entity\po\Combo.class +cn\unizk\mapper\RechargePackageMapper.class +cn\unizk\convert\device\CfConverter.class +cn\unizk\entity\po\UserTreatmentParameters.class +cn\unizk\pay\dto\AlipayResp.class +cn\unizk\entity\po\Course.class +cn\unizk\mapper\MobileUserMedicalVisitInfoMapper.class +cn\unizk\utils\AESUtil.class +cn\unizk\entity\vo\ProvinceTreeVO.class +cn\unizk\cache\KryoRedisSerializer.class +cn\unizk\entity\po\Chapter.class +cn\unizk\mapper\SysFileCommonMapper.class +cn\unizk\entity\vo\BuyCourseVO.class +cn\unizk\entity\vo\DeviceUsageRecordVO2.class +cn\unizk\utils\XfSpeechToTextUtil$OrderResult.class +cn\unizk\pay\dto\CoursePayParam.class +cn\unizk\entity\dto\PrDTO$PrItem.class +cn\unizk\mapper\RunConsultationMapper.class +cn\unizk\entity\vo\RegulationVO.class +cn\unizk\utils\MD5Util.class +cn\unizk\entity\po\UserConsultationRecord.class +cn\unizk\entity\po\DeviceRechargeRecord.class +cn\unizk\utils\MenuTreeUtil.class +cn\unizk\entity\po\InventoryStatistics.class +cn\unizk\mapper\MobileUserAddressMapper.class +cn\unizk\entity\po\MobileAppUser.class +cn\unizk\entity\dto\RefundDTO.class +cn\unizk\entity\po\DeviceUsageDetail.class +cn\unizk\entity\vo\UsageDetailVO.class +cn\unizk\mapper\DeviceMapper.class +cn\unizk\entity\vo\MobileAppUserVO.class +cn\unizk\entity\vo\InStockVO.class +cn\unizk\pay\dto\CartPayParam.class +cn\unizk\entity\vo\SysUserVO2.class +cn\unizk\entity\vo\XunfuAccountVO.class +cn\unizk\pay\dto\GolfServicePayParam.class +cn\unizk\mapper\ClinicWorkLogMapper.class +cn\unizk\entity\dto\ProfitSharingRefundDTO$AcctSplitBunch.class +cn\unizk\entity\po\XunfuAccount.class +cn\unizk\entity\po\ClinicWorkLog.class +cn\unizk\entity\po\MobileChapter.class +cn\unizk\entity\po\MobileUserVideoProgress.class +cn\unizk\entity\vo\CallbackResponse.class +cn\unizk\entity\vo\SpeakVO.class +cn\unizk\pay\dto\BasePayResponse.class +cn\unizk\utils\SendSmsUtil.class +cn\unizk\entity\dto\CommonRequestDTO.class +cn\unizk\mapper\TimeSlotsMapper.class +cn\unizk\service\impl\FileUploadServiceImpl.class +cn\unizk\entity\po\MobileUserMedicalVisitInfo.class +cn\unizk\mapper\ModulePermsMapper.class +cn\unizk\mapper\MobileUserVideoProgressMapper.class +cn\unizk\entity\vo\DeviceConfigVO.class +cn\unizk\mapper\DeviceUpgradeMapper.class +cn\unizk\mapper\UserDeviceTreatRecordMapper.class +cn\unizk\entity\dto\DeviceExcelDTO.class +cn\unizk\entity\vo\GradeExamVO.class +cn\unizk\config\MybatisPlusConfig.class +cn\unizk\entity\po\SysUser.class +cn\unizk\entity\po\MobileOrder.class +cn\unizk\utils\JkStrUtil.class +cn\unizk\entity\vo\ReportReqVO.class +cn\unizk\entity\vo\AppointmentVO4.class +cn\unizk\entity\vo\QuestionVo.class +cn\unizk\pay\dto\ProductPayParam.class +cn\unizk\utils\XfHttpUtil.class +cn\unizk\mapper\DiagnosisTemplateMapper.class +cn\unizk\entity\vo\OneClickVO.class +cn\unizk\mapper\DeviceRechargeRecordMapper.class +cn\unizk\entity\vo\PhysioExamVO.class +cn\unizk\utils\IatModelZh$Payload.class +cn\unizk\utils\MybatisResultMapUtil.class +cn\unizk\entity\po\SysDict.class +cn\unizk\mapper\ChapterMapper.class +cn\unizk\entity\vo\OrderReqVO.class +cn\unizk\entity\dto\PrDTO.class +cn\unizk\pay\dto\PayBaseRequest.class +cn\unizk\utils\HttpUtil.class +cn\unizk\entity\vo\ResultData.class +cn\unizk\entity\dto\ProfitSharingRefundDTO.class +cn\unizk\entity\po\TreatParameter.class +cn\unizk\entity\po\UserDeviceTreatRecord.class +cn\unizk\mapper\BusinessChannelMapper.class +cn\unizk\entity\po\MobileCombo.class +cn\unizk\enums\OrderTypeEnum.class +cn\unizk\utils\XfSpeechToTextUtil$Content.class +cn\unizk\service\WxAuthService.class +cn\unizk\mapper\SubHealthDietaryRegulationMapper.class +cn\unizk\validatedGroup\UpdateGroup.class +cn\unizk\entity\dto\HuifuSyncRefundResDTO$RefundResData.class +cn\unizk\convert\device\LocalDateTimeConverter.class +cn\unizk\convert\device\OperatingStatusConverter.class +cn\unizk\entity\vo\JkProductVO.class +cn\unizk\utils\WebIATWS$ResponseData.class +cn\unizk\mapper\AppointmentsMapper.class +cn\unizk\entity\dto\IsoDTO.class +cn\unizk\mapper\DailySchedulesMapper.class +cn\unizk\mapper\UserTreatmentParametersMapper.class +cn\unizk\mapper\UserConsultationRecordMapper.class +cn\unizk\entity\po\DiagnosticReport.class +cn\unizk\entity\vo\AppointmentVO2.class +cn\unizk\entity\dto\WxPayPlaceOrder$Payer.class +cn\unizk\entity\po\AppletModule.class +cn\unizk\entity\dto\WxPayPlaceOrder.class +cn\unizk\entity\po\BusinessChannel.class +cn\unizk\utils\BeanCopyUtils.class +cn\unizk\entity\po\Menu.class +cn\unizk\entity\dto\CashOutDTO.class +cn\unizk\entity\po\MobileUserAddress.class +cn\unizk\utils\IatModelZh$Ws.class +cn\unizk\entity\po\MobileAppUserAccount.class +cn\unizk\enums\ProductType.class +cn\unizk\entity\po\TimeSlots.class +cn\unizk\entity\vo\PhysioVO.class +cn\unizk\entity\po\CashOutRecord.class +cn\unizk\entity\po\GolfCustInfo.class +cn\unizk\entity\po\MobileOrderItem.class +cn\unizk\entity\po\ReportTemplate.class +cn\unizk\mapper\OrderReviewMapper.class +cn\unizk\utils\IatModelZh$Header.class +cn\unizk\utils\XfSpeechToTextUtil$JsonParse.class +cn\unizk\mapper\MobileOrderMapper.class +cn\unizk\entity\vo\QuestionAnswerVO.class +cn\unizk\function\BeanCopyCallBack.class +cn\unizk\entity\dto\WxPayPlaceOrder$Amount.class +cn\unizk\validatedGroup\DefaultGroup.class +cn\unizk\entity\po\WxUserSession.class +cn\unizk\mapper\StoreAccountMapper.class +cn\unizk\entity\vo\ProvinceNode.class +cn\unizk\mapper\CashOutRecordMapper.class +cn\unizk\sign\AbstractSignature.class +cn\unizk\config\ThreadPoolConfig.class +cn\unizk\entity\vo\JkStoreResVO.class +cn\unizk\config\RedisConfig.class +cn\unizk\entity\vo\ComboVO.class +cn\unizk\entity\po\DailySchedules.class +cn\unizk\mapper\AppletModuleMapper.class +cn\unizk\mapper\CourseMapper.class +cn\unizk\entity\po\PhysioSchedules.class +cn\unizk\entity\dto\PlaceOrderCommonDTO.class +cn\unizk\enums\OrderAfterSaleStatus.class +cn\unizk\mapper\PhysioExamMapper.class +cn\unizk\entity\po\AppointmentConfig.class +cn\unizk\entity\po\ModulePerms.class +cn\unizk\utils\HttpUtil$HttpMethod.class +cn\unizk\config\properties\HfProperties.class +cn\unizk\entity\vo\MobileOrderVO.class +cn\unizk\entity\vo\GrfdialogueVO.class +cn\unizk\entity\po\MobileUserHaveCourse.class +cn\unizk\entity\dto\ProfitSharingRefundDTO$AcctSplitBunch$AcctInfos.class +cn\unizk\entity\vo\AppointmentVO.class +cn\unizk\entity\vo\ManualAnswerVO.class +cn\unizk\utils\CaptchaGenerator.class +cn\unizk\entity\vo\ProductVO.class +cn\unizk\exception\ResponseExceptionHandler.class +cn\unizk\convert\device\WmConverter.class +cn\unizk\utils\Crc16Util.class +cn\unizk\utils\WebIATWS.class +cn\unizk\entity\po\MobileCourse.class +cn\unizk\entity\vo\ProvinceTreeVO$City$District.class +cn\unizk\entity\vo\ProvinceTreeVO$City.class +cn\unizk\entity\po\GrfPj.class +cn\unizk\config\properties\HuaweiyunProperties.class +cn\unizk\entity\po\JkProduct.class +cn\unizk\utils\WebIATWS$Cw.class +cn\unizk\entity\vo\DeviceVO.class +cn\unizk\enums\ContentTypeEnum.class +cn\unizk\entity\vo\MobileAppLoginRequestVO.class +cn\unizk\mapper\MobileChapterMapper.class +cn\unizk\entity\po\OrderReview.class +cn\unizk\entity\vo\DailySchedulesVO.class +cn\unizk\entity\vo\ChapterVO.class +cn\unizk\entity\dto\MajorJointsDTO.class +cn\unizk\exception\ServiceException.class +cn\unizk\entity\vo\MobileOrderDetailVO.class +cn\unizk\mapper\ReportTemplateMapper.class +cn\unizk\service\FileUploadService.class +cn\unizk\convert\device\StatusConverter.class +cn\unizk\entity\po\DiagnosisTemplate.class +cn\unizk\entity\vo\DeviceOutboundVO.class +cn\unizk\entity\vo\StoreAccountVO.class +cn\unizk\entity\vo\SeverityVO.class +cn\unizk\utils\MinioUtil.class +cn\unizk\entity\dto\CashOutResponse.class +cn\unizk\entity\po\ChildStoreAccount.class +cn\unizk\utils\WebIATWS$Ws.class +cn\unizk\entity\vo\AppointmentsVO5.class +cn\unizk\utils\WebIATWS$Text.class +cn\unizk\entity\po\WxVipRecharge.class +cn\unizk\enums\PlatformType.class +cn\unizk\entity\vo\UniPage.class +cn\unizk\mapper\MobileAppUserMapper.class +cn\unizk\utils\IatModelZh$JsonParse.class +cn\unizk\mapper\XunfuAccountMapper.class +cn\unizk\entity\vo\ProductReqVO.class +cn\unizk\utils\IatModelZh$Cw.class +cn\unizk\mapper\DiaRecordMapper.class +cn\unizk\mapper\HuifuDataMapper.class +cn\unizk\enums\OrderStatus.class +cn\unizk\utils\MapUtil.class +cn\unizk\entity\po\XunfuAccountImage.class +cn\unizk\config\MinioConfig.class +cn\unizk\entity\vo\PayCourseVO.class +cn\unizk\entity\po\StoreAccount.class +cn\unizk\entity\vo\EightMajorJointsVO.class +cn\unizk\utils\HuifuUtil.class +cn\unizk\utils\MybatisPlusGenerator.class +cn\unizk\entity\po\YnzkSystemDevice.class +cn\unizk\entity\vo\MinioRespVO$MinioRespVOBuilder.class +cn\unizk\mapper\InventoryStatisticsMapper.class +cn\unizk\entity\po\BaseEntity.class +cn\unizk\sign\LfasrSignature.class +cn\unizk\cache\LocalCache$WxAccessTokenCache.class +cn\unizk\poi\SubHealthReadListener.class +cn\unizk\cache\LocalCache.class +cn\unizk\pay\dto\ScanToPowerOnPayParam.class +cn\unizk\entity\po\Device.class +cn\unizk\entity\po\SubHealthDietaryRegulation.class +cn\unizk\entity\dto\ElectronicSignatureDTO.class +cn\unizk\utils\QRcodeUtil.class +cn\unizk\exception\BusinessException.class +cn\unizk\mapper\ChildStoreAccountMapper.class +cn\unizk\mapper\MobileAppointmentsMapper.class +cn\unizk\utils\ServletUtils.class +cn\unizk\entity\po\DeviceUpgrade.class +cn\unizk\entity\po\ExamScore.class +cn\unizk\mapper\ExamScoreMapper.class +cn\unizk\mapper\MobileCourseMapper.class +cn\unizk\config\properties\MinioProperties.class +cn\unizk\entity\po\HuifuData.class +cn\unizk\utils\IOFileUtil.class +cn\unizk\entity\vo\MinioRespVO.class +cn\unizk\entity\po\RechargePackage.class +cn\unizk\entity\vo\DeviceUsageDetailVO.class +cn\unizk\utils\CityDataUtil.class +cn\unizk\entity\vo\CourseVO.class +cn\unizk\utils\XorUtil.class +cn\unizk\mapper\MobileOrderItemMapper.class +cn\unizk\mapper\MobileComboMapper.class +cn\unizk\entity\vo\EightMajorJointsVO$Joints.class +cn\unizk\entity\po\Question.class +cn\unizk\mapper\TreatParameterMapper.class +cn\unizk\mapper\WxVipRechargeMapper.class +cn\unizk\pay\dto\ActiveMemberPayParam.class +cn\unizk\pay\dto\RechargePayParam.class +cn\unizk\entity\po\DiaRecord.class +cn\unizk\constant\VideoUploadConstants.class +cn\unizk\mapper\GolfCustInfoMapper.class +cn\unizk\utils\IatModelZh$JsonParseText.class +cn\unizk\entity\po\JkPhysio.class +cn\unizk\entity\vo\ReplyVo.class +cn\unizk\entity\po\RunConsultation.class +cn\unizk\entity\po\Appointments.class +cn\unizk\entity\po\ProductCarousel.class +cn\unizk\enums\DictType.class +cn\unizk\constant\UniConstant.class +cn\unizk\mapper\YnzkSystemDeviceMapper.class +cn\unizk\utils\XfSpeechToTextUtil$OrderInfo.class +cn\unizk\utils\IatModelZh$Result.class +cn\unizk\entity\po\MobileAppointments.class +cn\unizk\utils\WebIATWS$Decoder.class +cn\unizk\entity\po\SysFile.class +cn\unizk\entity\vo\GrfReportVO.class +cn\unizk\mapper\AppointmentConfigMapper.class +cn\unizk\mapper\MobileUserHaveCourseMapper.class +cn\unizk\entity\vo\MobileOrderItemVO.class +cn\unizk\pay\dto\WechatPayResp.class +cn\unizk\utils\SecurePlaintextCryptoUtil.class +cn\unizk\entity\vo\DeviceUsageRecordVO.class +cn\unizk\entity\po\Message.class +cn\unizk\entity\vo\VideoProgressVO.class +cn\unizk\entity\po\Conversation.class +cn\unizk\entity\po\JkStore.class +cn\unizk\mapper\PhysioSchedulesMapper.class +cn\unizk\utils\CryptTools.class diff --git a/common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..11d7edc --- /dev/null +++ b/common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,287 @@ +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\GolfCustInfo.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\InventoryStatistics.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\OrderReview.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\MobileAppUserAccount.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\dto\CashOutResponse.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\Conversation.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\convert\device\WmConverter.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\TreatParameter.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\MobileAppLoginRequestVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\function\BeanCopyCallBack.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\InventoryStatisticsMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\DeviceUsageRecordVO2.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\ReportTemplateVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\UserAddressMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\config\MybatisPlusConfig.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\MobileAppointmentsMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\MobileChapter.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\pay\dto\BasePayResponse.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\AppointmentsMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\config\properties\HfProperties.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\convert\device\LocalDateTimeConverter.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\enums\FileType.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\WxVipRecharge.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\DeviceUsageRecordVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\PayCourseVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\MobileUserAddress.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\DeviceVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\JkProductVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\service\FileUploadService.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\WxUserAccount.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\JkStore.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\dto\PrDTO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\ClinicWorkLogMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\pay\dto\ProductPayParam.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\UniPage.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\config\ThreadPoolConfig.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\convert\device\CfConverter.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\enums\ProductType.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\GrfPjMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\ModulePermsMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\enums\ContentTypeEnum.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\CashOutRecord.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\UserConsultationRecord.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\DiagnosisTemplate.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\MobileCombo.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\Message.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\PhysioExamVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\DailySchedulesMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\SubHealthDietaryRegulationMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\XfSpeechToTextUtil.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\pay\dto\CoursePayParam.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\MobileOrderVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\enums\DictType.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\SecurePlaintextCryptoUtil.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\MobileUserMedicalVisitInfo.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\WxOrderItem.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\UsageDetailVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\poi\SubHealthReadListener.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\XunfuAccountMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\enums\OrderStatus.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\MobileUserHaveCourseMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\constant\UniConstant.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\dto\CashOutDTO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\dto\WxPayPlaceOrder.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\WxUserMedicalVisitInfo.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\DeviceUsageRecordMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\TimeSlotsMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\MobileUserVideoProgressMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\WxOrderItemVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\ChapterMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\ReportTemplate.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\XunfuAccount.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\QRcodeUtil.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\WxUser.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\XorUtil.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\dto\CommonRequestDTO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\SpeakVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\MobileUserMedicalVisitInfoMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\DeviceUsageDetailVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\WxUserVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\WxUserAccountMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\DailySchedulesVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\config\RedisConfig.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\WxOrder.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\MobileUserHaveCourse.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\MybatisPlusGenerator.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\ChildStoreAccount.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\CityDataUtil.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\TreeMenu.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\Question.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\QuestionAnswerVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\ManualAnswerVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\OneClickVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\StoreAccountVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\ProductReqVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\Combo.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\exception\ServiceException.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\DiagnosticReport.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\ExamScoreMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\BusinessChannelMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\pay\dto\HGJPayParam.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\IatModelZh.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\SysDict.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\CourseMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\WxUserMedicalVisitInfoMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\BaseEntity.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\MobileOrderItemMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\sign\LfasrSignature.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\enums\OrderAfterSaleStatus.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\MobileCourse.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\UserTreatmentParameters.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\cache\LocalCache.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\enums\PlatformType.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\ChapterVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\CallbackResponse.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\config\properties\HuaweiyunProperties.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\SysUserVO2.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\dto\ProfitSharingRefundDTO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\TreatParameterMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\CashOutRecordMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\MobileComboMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\ExamScore.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\PhysioExam.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\MobileCourseMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\DeviceOutboundVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\ChildStoreAccountMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\enums\OrderTypeEnum.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\constant\VideoUploadConstants.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\MobileAppUserMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\dto\PlaceOrderCommonDTO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\dto\IsoDTO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\RunConsultation.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\MobileAppUserVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\WxUserAddress.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\UserHaveCourse.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\MobileUserAddressMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\MobileOrderItem.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\QuestionVo.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\DiagnosisTemplateMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\AppointmentConfig.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\SeverityVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\GolfCustInfoMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\WxOrderVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\pay\dto\ScanToPowerOnPayParam.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\GradeExamVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\DeviceRechargeRecordMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\config\properties\MinioProperties.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\PhysioExamMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\OrderDetailVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\exception\BusinessException.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\DeviceUsageDetailMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\TimeSlots.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\GrfReportVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\pay\dto\WechatPayResp.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\SubHealthDietaryRegulation.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\PhysioSchedulesMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\IOFileUtil.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\BeanCopyUtils.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\convert\device\OperatingStatusConverter.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\StoreAccount.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\ClinicWorkLog.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\RechargePackage.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\CourseVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\PhysioVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\DeviceConfigVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\Course.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\SendSmsUtil.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\UserConsultationRecordMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\pay\dto\CartPayParam.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\ReportReqVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\DeviceUpgradeMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\pay\dto\PayBaseRequest.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\ServletUtils.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\DeviceUsageRecord.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\DailySchedules.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\DeviceRechargeRecord.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\AppointmentConfigMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\EightMajorJointsVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\MobileChapterMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\DeviceUpgrade.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\RechargePackageMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\XunfuAccountVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\MobileAppUserAccountMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\MD5Util.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\JkProduct.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\GrfdialogueVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\MenuTreeUtil.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\WxUserSession.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\AESUtil.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\DiaRecord.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\ResultData.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\VideoProgressVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\WxOrderComboRespVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\CryptTools.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\OrderReqVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\DiaRecordMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\HuifuDataMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\dto\RefundDTO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\AppointmentVO3.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\MapUtil.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\MobileOrderMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\UserDeviceTreatRecord.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\MobileOrderItemVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\MobileAppointments.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\WebIATWS.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\YnzkSystemDeviceMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\AppletModule.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\dto\ElectronicSignatureDTO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\MobileOrderDetailVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\Menu.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\AssumeRoleUtil.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\CaptchaGenerator.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\StoreAccountMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\BusinessChannel.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\MybatisResultMapUtil.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\service\impl\FileUploadServiceImpl.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\HttpUtil.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\Device.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\ReportTemplateMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\HuifuUtil.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\WxVipRechargeMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\XfHttpUtil.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\ProductVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\SysFileCommonMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\service\WxAuthService.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\validatedGroup\UpdateGroup.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\service\HuaWeiYunService.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\JkStoreReqVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\JkStoreResVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\ReplyVo.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\JkStrUtil.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\UserHaveCourseMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\UserTreatmentParametersMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\WxUserVideoProgressMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\WxUserVideoProgress.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\AppointmentsVO5.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\Appointments.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\OrderReviewMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\ModulePerms.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\XunfuAccountImage.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\SysFile.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\RunConsultationMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\UserConsultationRecordVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\JkPhysio.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\validatedGroup\DefaultGroup.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\AppletModuleMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\AppointmentVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\AppointmentVO4.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\ProvinceNode.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\sign\AbstractSignature.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\ProvinceTreeVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\dto\MajorJointsDTO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\ComboVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\pay\dto\AlipayResp.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\cache\KryoRedisSerializer.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\dto\HuifuSyncRefundResDTO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\MinioRespVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\dto\DeviceExcelDTO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\PhysioSchedules.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\GrfPj.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\RegulationVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\MobileUserVideoProgress.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\AppointmentVO2.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\InStockVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\config\MinioConfig.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\YnzkSystemDevice.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\pay\dto\GolfServicePayParam.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\ComboMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\SpringUtil.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\HuifuData.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\vo\BuyCourseVO.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\exception\ResponseExceptionHandler.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\MinioUtil.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\MobileAppUser.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\convert\device\StatusConverter.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\utils\Crc16Util.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\DeviceUsageDetail.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\ProductCarousel.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\enums\MinioBucketType.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\MobileOrder.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\UserDeviceTreatRecordMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\WxOrderItemMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\pay\dto\ActiveMemberPayParam.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\mapper\DeviceMapper.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\Chapter.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\pay\dto\RechargePayParam.java +E:\code\unizk\AI_Questioning\common\src\main\java\cn\unizk\entity\po\SysUser.java diff --git a/mobileApp/.mvn/jvm.config b/mobileApp/.mvn/jvm.config new file mode 100644 index 0000000..e69de29 diff --git a/mobileApp/.mvn/maven.config b/mobileApp/.mvn/maven.config new file mode 100644 index 0000000..e69de29 diff --git a/mobileApp/pom.xml b/mobileApp/pom.xml new file mode 100644 index 0000000..78a7dcb --- /dev/null +++ b/mobileApp/pom.xml @@ -0,0 +1,116 @@ + + + + AI_Questioning + cn.unizk + 1.0.0 + + 4.0.0 + + mobileApp + + mobileApp + + http://www.example.com + + + UTF-8 + 8 + + + + + + + cn.unizk + common + + + org.springframework.boot + spring-boot-starter + + + org.apache.commons + commons-collections4 + + + + + io.jsonwebtoken + jjwt-api + 0.11.5 + + + + io.jsonwebtoken + jjwt-impl + 0.11.5 + runtime + + + + io.jsonwebtoken + jjwt-jackson + 0.11.5 + runtime + + + + org.java-websocket + Java-WebSocket + + + + + com.squareup.okio + okio + + + + com.volcengine + volcengine-java-sdk-ark-runtime + LATEST + + + + org.bouncycastle + bcprov-jdk18on + + + + + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.1.1.RELEASE + + true + + + + + repackage + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + diff --git a/mobileApp/src/main/java/cn/unizk/MobileApp.java b/mobileApp/src/main/java/cn/unizk/MobileApp.java new file mode 100644 index 0000000..45da595 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/MobileApp.java @@ -0,0 +1,15 @@ +package cn.unizk; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; + +@SpringBootApplication +@MapperScan(basePackages = {"cn.unizk.mapper"}) +@EnableScheduling +public class MobileApp { + public static void main(String[] args) { + SpringApplication.run(MobileApp.class,args); + } +} diff --git a/mobileApp/src/main/java/cn/unizk/MobileAppConstant.java b/mobileApp/src/main/java/cn/unizk/MobileAppConstant.java new file mode 100644 index 0000000..547b028 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/MobileAppConstant.java @@ -0,0 +1,13 @@ +package cn.unizk; + +/** + * @Author hao + * @Date 2026/6/30 14:54 + * @Version 1.0 + **/ +public class MobileAppConstant { + + public static final String CACHE_TOKEN_PREFIX = "mobile-t:"; + + public static final String REQUEST_TOKEN_HEADER = "mobile-t"; +} diff --git a/mobileApp/src/main/java/cn/unizk/config/ResourceConfig.java b/mobileApp/src/main/java/cn/unizk/config/ResourceConfig.java new file mode 100644 index 0000000..1cd29af --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/config/ResourceConfig.java @@ -0,0 +1,29 @@ +package cn.unizk.config; + +import cn.unizk.interceptor.MobileAppLoginInterceptor; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import javax.annotation.Resource; + +/** + * @Author hao + * @Date 2026/6/30 11:21 + * @Version 1.0 + **/ +@Configuration +public class ResourceConfig implements WebMvcConfigurer { + + @Resource + private MobileAppLoginInterceptor loginInterceptor; + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(loginInterceptor).addPathPatterns("/**") + .excludePathPatterns("/mobileApp/login/**", + "/hf/webhook/**", + "/test/**", + "/mobileApp/module/**"); + } +} diff --git a/mobileApp/src/main/java/cn/unizk/config/WxProperties.java b/mobileApp/src/main/java/cn/unizk/config/WxProperties.java new file mode 100644 index 0000000..bf36b71 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/config/WxProperties.java @@ -0,0 +1,22 @@ +package cn.unizk.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Author hao + * @Date 2026/7/24 17:48 + * @Version 1.0 + **/ + +@ConfigurationProperties(prefix = "wx") +@Component +@Getter +@Setter +public class WxProperties { + + private String appid; + private String secret; +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/AppModuleController.java b/mobileApp/src/main/java/cn/unizk/controller/AppModuleController.java new file mode 100644 index 0000000..c24a38f --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/AppModuleController.java @@ -0,0 +1,46 @@ +package cn.unizk.controller; + +import cn.unizk.MobileAppConstant; +import cn.unizk.entity.po.AppletModule; +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.mapper.AppletModuleMapper; +import cn.unizk.utils.MobileAppSecurityUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/8/11 15:34 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/module") +public class AppModuleController { + + @Resource + private AppletModuleMapper appletModuleMapper; + + @GetMapping("/getModule") + public List getModule(HttpServletRequest request){ + String token = request.getHeader(MobileAppConstant.REQUEST_TOKEN_HEADER); + if (StringUtils.isBlank(token)){ + return appletModuleMapper.getModule("app","C"); + } + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(token); + if (Objects.isNull(currentUser)){ + return appletModuleMapper.getModule("app","C"); + } + String userType = currentUser.getUserType(); + if (StringUtils.isBlank(userType)){ + userType = "C"; + } + return appletModuleMapper.getModule("app",userType); + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/AppointmentController.java b/mobileApp/src/main/java/cn/unizk/controller/AppointmentController.java new file mode 100644 index 0000000..f1a05ef --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/AppointmentController.java @@ -0,0 +1,208 @@ +package cn.unizk.controller; + +import cn.hutool.core.util.IdUtil; +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.*; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.*; +import cn.unizk.utils.BeanCopyUtils; +import cn.unizk.utils.MobileAppSecurityUtil; +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 lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.Collection; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2026/7/1 11:32 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/appointment") +@Slf4j +public class AppointmentController { + + @Resource + private DailySchedulesMapper dailySchedulesMapper; + @Resource + private MobileUserMedicalVisitInfoMapper medicalVisitInfoMapper; + @Resource + private MobileAppointmentsMapper mobileAppointmentsMapper; + @Resource + private MobilePhysioMapper jkPhysioMapper; + @Resource + private MobileStoreMapper storeMapper; + @Resource + private TimeSlotsMapper timeSlotsMapper; + + @PostMapping("/getPhysioAppointment") + public List getPhysioAppointment(@RequestBody AppointmentVO vo){ + return dailySchedulesMapper.getCanAppointment(vo.getPhysioId(),vo.getDateTime()); + } + + @PostMapping("/appointment") + @Transactional(rollbackFor = Exception.class) + public ResultData appointment(HttpServletRequest request, @RequestBody AppointmentVO2 vo2){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + DailySchedules dailySchedules = dailySchedulesMapper.selectById(vo2.getDailyScheduleId()); + if (Objects.isNull(dailySchedules)){ + throw new ServiceException("无法预约,请稍后重试"); + } + if (dailySchedules.getMaxBookings() - dailySchedules.getBookedCount() < 1){ + if ("available".equals(dailySchedules.getStatus())){ + dailySchedules.setStatus("full"); + dailySchedulesMapper.updateById(dailySchedules); + } + throw new ServiceException("该时间段已满号,请预约其他时间"); + } + MobileUserMedicalVisitInfo mobileUserMedicalVisitInfo = medicalVisitInfoMapper.selectById(vo2.getMedicalVisitId()); + MobileAppointments appointments = new MobileAppointments(); + String appointment_no = IdUtil.getSnowflakeNextIdStr(); + appointments.setAppointmentNo(appointment_no); + appointments.setMobileUserId(currentUser.getId()); + appointments.setDailyScheduleId(vo2.getDailyScheduleId()); + appointments.setVisitDate(dailySchedules.getScheduleDate()); + appointments.setTimeSlotCode(vo2.getTimeSlotCode()); + appointments.setPayAmount(vo2.getPayAmount()); + appointments.setPayStatus(1); + appointments.setPhysioId(dailySchedules.getPhysioId()); + appointments.setPatientName(mobileUserMedicalVisitInfo.getName()); + appointments.setPatientPhone(mobileUserMedicalVisitInfo.getPhoneNumber()); + appointments.setStatus("confirmed"); + appointments.setRemark(vo2.getRemark()); + mobileAppointmentsMapper.insert(appointments); + if (dailySchedules.getMaxBookings() - dailySchedules.getBookedCount() < 2){ + dailySchedules.setStatus("full"); + } + dailySchedules.setBookedCount(dailySchedules.getBookedCount() + 1); + dailySchedulesMapper.updateById(dailySchedules); + return ResultData.success(); + } + + @PostMapping("/addOrUpdateMedicalVisitInfo") + public ResultData addMedicalVisitInfo(HttpServletRequest request, @RequestBody MobileUserMedicalVisitInfo info){ + if (info.getId() == null){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + List mobileUserMedicalVisitInfos = medicalVisitInfoMapper.selectList(new LambdaQueryWrapper().eq(MobileUserMedicalVisitInfo::getMobileUserId, currentUser + .getId())); + if (mobileUserMedicalVisitInfos.size() >= 3){ + throw new ServiceException("最多只能添加3张就诊卡"); + } + info.setMobileUserId(currentUser.getId()); + info.setCreateTime(LocalDateTime.now()); + medicalVisitInfoMapper.insert(info); + }else { + if (info.getItsDefault() == 1){ + medicalVisitInfoMapper.update(new LambdaUpdateWrapper().set(MobileUserMedicalVisitInfo::getItsDefault,0)); + } + medicalVisitInfoMapper.updateById(info); + } + return ResultData.success(); + } + + @GetMapping("/getDefaultVisitInfo") + public ResultData getDefVisitInfo(HttpServletRequest request){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + MobileUserMedicalVisitInfo mobileUserMedicalVisitInfo = medicalVisitInfoMapper.selectOne(new LambdaQueryWrapper().eq(MobileUserMedicalVisitInfo::getMobileUserId, currentUser.getId()).eq(MobileUserMedicalVisitInfo::getItsDefault, 1)); + ResultData resultData = new ResultData<>(); + if (Objects.nonNull(mobileUserMedicalVisitInfo)){ + resultData.setData(mobileUserMedicalVisitInfo); + }else { + MobileUserMedicalVisitInfo visitInfo = medicalVisitInfoMapper.selectLatest(currentUser.getId()); + resultData.setData(visitInfo); + } + resultData.setCode(200); + return resultData; + } + + @DeleteMapping("/deleteVisitInfo") + public ResultData deleteVisitInfo(@RequestParam("id") Integer id){ + medicalVisitInfoMapper.deleteById(id); + return ResultData.success(); + } + + @GetMapping("/getVisitInfo") + public ResultData getVisitInfo(HttpServletRequest request){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + List wxUserMedicalVisitInfos = medicalVisitInfoMapper.selectList(new LambdaQueryWrapper().eq(MobileUserMedicalVisitInfo::getMobileUserId, currentUser.getId())); + return ResultData.success(wxUserMedicalVisitInfos); + } + + @GetMapping("/getAvailableSituation") + public List getAv(@RequestParam(value = "physioId",required = false) Integer physioId, @RequestParam("storeId") Integer storeId){ + List jkPhysios = jkPhysioMapper.selectList(new LambdaQueryWrapper().eq(JkPhysio::getStoreId, storeId)); + List physioIds = jkPhysios.stream().map(JkPhysio::getId).collect(Collectors.toList()); + List appointmentVO3s = dailySchedulesMapper.selectMedicalyoumeihao(physioId,physioIds); + for (AppointmentVO3 appointmentVO3 : appointmentVO3s) { + if (appointmentVO3.getScheduleDate().equals(LocalDate.now())){ + LocalTime time = LocalTime.now(); + TimeSlots timeSlots = timeSlotsMapper.selectLastOne(); + if (time.isAfter(timeSlots.getStartTime())){ + appointmentVO3.setHasAvailable("无号"); + appointmentVO3.setAvailableSlotsCount(0); + appointmentVO3.setTotalAvailableCount(0); + } + } + } + return appointmentVO3s; + } + + @PostMapping("/getAllPhysioActive") + public List getAll(@RequestBody DailySchedulesVO dailySchedules){ + if (Objects.isNull(dailySchedules) || dailySchedules.getScheduleDate() == null){ + throw new ServiceException("scheduleDate cannot null"); + } + if (dailySchedules.getStoreId() == null){ + throw new ServiceException("storeId cannot null"); + } + List jkPhysios = jkPhysioMapper.selectList(new LambdaQueryWrapper().eq(JkPhysio::getStoreId, dailySchedules.getStoreId())); + List physioIds = jkPhysios.stream().map(JkPhysio::getId).collect(Collectors.toList()); + return dailySchedulesMapper.selectYoumeihaoByDate(dailySchedules.getScheduleDate(),physioIds); + } + + @GetMapping("/getAppointments") + public Page getAppointments(HttpServletRequest request, @RequestParam(value = "currentPage",required = false,defaultValue = "1") Integer currentPage, + @RequestParam(value = "pageSize",required = false,defaultValue = "10") Integer pageSize){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"请重新登录"); + } + Page page = new Page<>(currentPage,pageSize); + Page mobileAppointmentsPage = mobileAppointmentsMapper.selectPage(page, new LambdaQueryWrapper().eq(MobileAppointments::getMobileUserId, currentUser.getId()) + .orderByDesc(MobileAppointments::getCreatedAt)); + List appointments = mobileAppointmentsPage.getRecords(); + if (CollectionUtils.isEmpty(appointments)){ + return new Page<>(); + } + Collection appointmentsVO5s = BeanCopyUtils.copyArrays(appointments, AppointmentsVO5::new); + for (AppointmentsVO5 vo5 : appointmentsVO5s) { + JkPhysio jkPhysio = jkPhysioMapper.selectById(vo5.getPhysioId()); + JkStore jkStore = storeMapper.selectById(jkPhysio.getStoreId()); + vo5.setPhysioName(jkPhysio.getPhysioName()); + vo5.setStoreName(jkStore.getStoreName()); + vo5.setStoreAddress(jkStore.getAddress()); + TimeSlots timeSlots = timeSlotsMapper.selectOne(new LambdaQueryWrapper().eq(TimeSlots::getSlotCode, vo5.getTimeSlotCode())); + vo5.setTimeSlots(timeSlots); + } + Page vo5Page = new Page<>(); + vo5Page.setTotal(page.getTotal()); + vo5Page.setRecords((List) appointmentsVO5s); + vo5Page.setCurrent(page.getCurrent()); + vo5Page.setSize(page.getSize()); + return vo5Page; + } + +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/ComboController.java b/mobileApp/src/main/java/cn/unizk/controller/ComboController.java new file mode 100644 index 0000000..7f82dd8 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/ComboController.java @@ -0,0 +1,97 @@ +package cn.unizk.controller; + +import cn.unizk.constant.UniConstant; +import cn.unizk.entity.po.Combo; +import cn.unizk.entity.po.Device; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.mapper.ComboMapper; +import cn.unizk.service.DeviceService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2026/6/30 14:34 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/combo") +@Slf4j +public class ComboController { + + @Resource + private ComboMapper comboMapper; + @Resource + private DeviceService deviceService; + + @GetMapping("/listByDevice") + public Page list(UniPage uniPage, @RequestParam(value = "deviceId", required = false) String deviceId, HttpServletRequest request) { + String channelId = request.getHeader(UniConstant.CHANNEL_HEADER); + log.info("从请求体中获取到的channelId={}",channelId); + Page page = new Page<>(); + page.setCurrent(uniPage.getCurrentPage()); + page.setSize(uniPage.getPageSize()); + if (StringUtils.isNotBlank(channelId)) { + return comboMapper.selectPage(page, new LambdaQueryWrapper() + .eq(Combo::getChannelId, channelId) + .and(w -> { + w.eq(StringUtils.isNotBlank(deviceId), Combo::getDeviceId, deviceId) + .or() + .isNull(Combo::getDeviceId) + .or() + .isNull(Combo::getChannelId); + }) + .orderByAsc(Combo::getComboPrice)); + } + return comboMapper.selectPage(page, new LambdaQueryWrapper() + .isNull(Combo::getChannelId) + .and(w -> { + w.eq(StringUtils.isNotBlank(deviceId), Combo::getDeviceId, deviceId) + .or() + .isNull(Combo::getDeviceId); + }) + .orderByAsc(Combo::getComboPrice)); + } + + @GetMapping("/getCombos") + public Page getCombos(@RequestParam("storeId") Integer storeId, @RequestParam(value = "comboName", required = false) String comboName, UniPage uniPage, HttpServletRequest request) { + /*WxUser currentUser = JkSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)) { + throw new ServiceException(401, "登录已过期"); + }*/ + String channelId = request.getHeader("channelId"); + log.info("从请求体中获取到的channelId={}",channelId); + Page page = new Page<>(uniPage.getCurrentPage(), uniPage.getPageSize()); + List devices = deviceService.list(new LambdaQueryWrapper().eq(Device::getStoreId, storeId)); + if (CollectionUtils.isNotEmpty(devices)) { + List deviceIds = devices.stream().map(Device::getDeviceId).collect(Collectors.toList()); + return comboMapper.selectPage(page, new LambdaQueryWrapper() + .and(wrapper ->{ + wrapper.in(Combo::getDeviceId, deviceIds) + .or() + .isNull(Combo::getDeviceId); + }) + .like(StringUtils.isNotBlank(comboName), Combo::getComboName, comboName) + .and(wrapper -> { + wrapper.eq(StringUtils.isNotBlank(channelId), Combo::getChannelId, channelId) + .or() + .isNull(Combo::getChannelId); + })); + } + page.setRecords(new ArrayList<>()); + return page; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/CourseStudyController.java b/mobileApp/src/main/java/cn/unizk/controller/CourseStudyController.java new file mode 100644 index 0000000..9123f6a --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/CourseStudyController.java @@ -0,0 +1,187 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.ChapterVO; +import cn.unizk.entity.vo.CourseVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.VideoProgressVO; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.*; +import cn.unizk.utils.BeanCopyUtils; +import cn.unizk.utils.MobileAppSecurityUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2026/6/30 14:49 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/course") +public class CourseStudyController { + + @Resource + private CourseMapper courseMapper; + @Resource + private MobileUserHaveCourseMapper haveCourseMapper; + @Resource + private MobileUserVideoProgressMapper videoProgressMapper; + @Resource + private ChapterMapper chapterMapper; + @Resource(name = "kryoRedisTemplate") + private RedisTemplate redisTemplate; + + @GetMapping("/coursePage") + public Page courseVOPage(@RequestParam(value = "currentPage", required = false, defaultValue = "1") int currentPage, + @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize, + @RequestParam(value = "title", required = false) String title, HttpServletRequest request) { + + /*MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)) { + throw new ServiceException(401, "登录已过期,请重新登录"); + } + List userHaveCourses = haveCourseMapper.selectList(new LambdaQueryWrapper().eq(MobileUserHaveCourse::getMobileUserId, currentUser.getId()));*/ + Page page = new Page<>(currentPage, pageSize); + List courseVOS = courseMapper.voPage(page, title); + courseVOS.forEach(vo -> vo.setUnlock(1)); +/* if (CollectionUtils.isEmpty(userHaveCourses)) { + courseVOS.forEach(vo -> { + vo.setUnlock(0); + }); + } else { + List courseIds = userHaveCourses.stream().map(MobileUserHaveCourse::getCourseId).collect(Collectors.toList()); + for (CourseVO courseVO : courseVOS) { + if (courseIds.contains(courseVO.getCourseId())) { + courseVO.setUnlock(1); + List chapters = chapterMapper.selectList(new LambdaQueryWrapper().eq(Chapter::getCourseId, courseVO.getCourseId())); + if (CollectionUtils.isEmpty(chapters)){ + continue; + } + List collect = chapters.stream().map(Chapter::getChapterId).collect(Collectors.toList()); + List wxUserVideoProgresses = videoProgressMapper.selectList(new LambdaQueryWrapper().eq(MobileUserVideoProgress::getMobileUserId, currentUser.getId()) + .in(MobileUserVideoProgress::getChapterId, collect)); + if (CollectionUtils.isEmpty(wxUserVideoProgresses)) { + courseVO.setProgress(0); + } else { + List progresses = wxUserVideoProgresses.stream().map(MobileUserVideoProgress::getProgress).collect(Collectors.toList()); + int sum = 0; + for (Integer progress : progresses) { + sum += progress; + } + int i = sum / progresses.size(); + courseVO.setProgress(i); + } + } else { + courseVO.setUnlock(0); + } + } + }*/ + page.setRecords(courseVOS); + return page; + } + + @GetMapping("/chapters") + public Page voPage(@RequestParam(value = "currentPage", required = false, defaultValue = "1") int currentPage, + @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize, + @RequestParam("courseId") Integer courseId, HttpServletRequest request) { + +/* MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401, "登录已过期,请重新登录"); + } + MobileUserHaveCourse userHaveCourse = haveCourseMapper.selectOne(new LambdaQueryWrapper().eq(MobileUserHaveCourse::getMobileUserId, currentUser.getId()) + .eq(MobileUserHaveCourse::getCourseId, courseId)); + if (Objects.isNull(userHaveCourse)){ + return new Page<>(); + } + Page page = new Page<>(currentPage,pageSize); + Page chapterPage = chapterMapper.selectPage(page, new LambdaQueryWrapper().eq(Chapter::getCourseId, courseId)); + List chapters = chapterPage.getRecords(); + if (CollectionUtils.isEmpty(chapters)){ + return new Page<>(); + } + Collection chapterVOS = BeanCopyUtils.copyArrays(chapters, ChapterVO::new); + for (ChapterVO chapterVO : chapterVOS) { + MobileUserVideoProgress wxUserVideoProgress = videoProgressMapper.selectOne(new LambdaQueryWrapper() + .eq(MobileUserVideoProgress::getMobileUserId, currentUser.getId()) + .eq(MobileUserVideoProgress::getChapterId, chapterVO.getChapterId())); + if (Objects.isNull(wxUserVideoProgress)){ + chapterVO.setProgress(0); + }else { + chapterVO.setProgress(wxUserVideoProgress.getProgress()); + } + } + Page voPage = new Page<>(chapterPage.getCurrent(),chapterPage.getSize()); + voPage.setTotal(chapterPage.getTotal()); + voPage.setRecords((List) chapterVOS);*/ + + + Page page = new Page<>(currentPage,pageSize); + Page chapterPage = chapterMapper.selectPage(page, new LambdaQueryWrapper().eq(Chapter::getCourseId, courseId)); + List chapters = chapterPage.getRecords(); + if (CollectionUtils.isEmpty(chapters)){ + return new Page<>(); + } + Collection chapterVOS = BeanCopyUtils.copyArrays(chapters, ChapterVO::new); + Page voPage = new Page<>(chapterPage.getCurrent(),chapterPage.getSize()); + voPage.setTotal(chapterPage.getTotal()); + chapterVOS.forEach(chapterVO -> chapterVO.setProgress(80)); + voPage.setRecords((List) chapterVOS); + return voPage; + } + + @PostMapping("/reportWatch") + public ResultData reportWatch(@RequestBody @Validated VideoProgressVO videoProgressVO, HttpServletRequest request){ + /* MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401, "登录已过期,请重新登录"); + } + + MobileUserVideoProgress wxUserVideoProgress = videoProgressMapper.selectOne(new LambdaQueryWrapper().eq(MobileUserVideoProgress::getChapterId, videoProgressVO.getChapterId()) + .eq(MobileUserVideoProgress::getMobileUserId, currentUser.getId())); + if (Objects.isNull(wxUserVideoProgress)){ + MobileUserVideoProgress videoProgress = new MobileUserVideoProgress(); + videoProgress.setChapterId(videoProgressVO.getChapterId()); + videoProgress.setMobileUserId(currentUser.getId()); + videoProgress.setLastPosition(videoProgressVO.getLastPosition()); + videoProgress.setSpentTime(videoProgressVO.getSpentTime()); + videoProgress.setUpdateTime(LocalDateTime.now()); + Chapter chapter = chapterMapper.selectById(videoProgressVO.getChapterId()); + Integer p = (videoProgressVO.getLastPosition() * 100) / chapter.getVideoDuration(); + videoProgress.setProgress(p); + videoProgressMapper.insert(videoProgress); + }else { + wxUserVideoProgress.setSpentTime(videoProgressVO.getSpentTime()); + if (videoProgressVO.getLastPosition() > wxUserVideoProgress.getLastPosition()){ + wxUserVideoProgress.setLastPosition(videoProgressVO.getLastPosition()); + Chapter chapter = chapterMapper.selectById(videoProgressVO.getChapterId()); + Integer p = (videoProgressVO.getLastPosition() * 100) / chapter.getVideoDuration(); + wxUserVideoProgress.setProgress(p); + } + videoProgressMapper.updateById(wxUserVideoProgress); + }*/ + return ResultData.success(); + } + + @PostMapping("/reportTotalDuration") + public ResultData reportTotalDuration(@RequestParam("totalDuration") Integer totalDuration,@RequestParam("chapterId") Integer chapterId){ + Chapter chapter = new Chapter(); + chapter.setChapterId(chapterId); + chapter.setVideoDuration(totalDuration); + chapterMapper.updateById(chapter); + return ResultData.success(); + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/DeviceController.java b/mobileApp/src/main/java/cn/unizk/controller/DeviceController.java new file mode 100644 index 0000000..633e808 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/DeviceController.java @@ -0,0 +1,34 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.Device; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.service.DeviceService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @Author hao + * @Date 2026/7/8 17:12 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/device") +public class DeviceController { + + @Resource + private DeviceService deviceService; + + @GetMapping("/list") + public Page list(UniPage uniPage, @RequestParam("storeId") Integer storeId){ + Page page = new Page<>(); + page.setCurrent(uniPage.getCurrentPage()); + page.setSize(uniPage.getPageSize()); + return deviceService.page(page,new LambdaQueryWrapper().eq(Device::getStatus,"1").eq(Device::getStoreId,storeId)); + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/DoubaoAIController.java b/mobileApp/src/main/java/cn/unizk/controller/DoubaoAIController.java new file mode 100644 index 0000000..931fc49 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/DoubaoAIController.java @@ -0,0 +1,91 @@ +package cn.unizk.controller; + +import cn.unizk.entity.vo.QuestionAnswerVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.SeverityVO; +import cn.unizk.exception.ServiceException; +import cn.unizk.service.DoubaoService; +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; + +import javax.annotation.Resource; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/6/30 18:06 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/doubao") +@Slf4j +public class DoubaoAIController { + + @Resource + private DoubaoService doubaoService; + + @PostMapping("/getAnswer") + public ResultData getAnswer(@RequestBody QuestionAnswerVO vo){ + log.info("进入getAnswer接口,AI判断回答---------------"); + String input1 = String.format("问题:%s?回答:%s",vo.getQuestion(),vo.getAnswer()); + String input2 = "请判断:回答和问题是否相干?只需要回答【相干】或【不相干】,不要多余文字。"; + String result = doubaoService.drawConclusion(input1, input2); + ResultData data = new ResultData(); + if ("【相干】".equals(result)){ + data.setCode(200); + }else { + data.setCode(300); + } + return data; + } + + @PostMapping("/severity") + public ResultData severity(@RequestBody SeverityVO vo){ + if (Objects.isNull(vo)){ + throw new ServiceException("requestBody cannot empty"); + } + if (vo.getId() != 6 && vo.getId() != 8){ + throw new ServiceException("无效ID"); + } + ResultData data = new ResultData<>(); + data.setCode(200); + if (vo.getId() == 6){ + String input2 = "请判断:回答内容包含的时间是否小于或等于一个月?只需要回答【yes】或【no】,不要多余文字"; + String input1 = String.format("回答内容:%s",vo.getAnswer()); + String s = doubaoService.drawConclusion(input1, input2); + log.info("ai回复:",s); + if ("【yes】".contains(s)){ + data.setData("000"); + }else { + data.setData("111"); + } + return data; + } + if (vo.getId() == 8){ + String input2 = "假设回复内容是患者回复疼痛程度情况的,请判断:回复内容的疼痛程度是否是轻度或者比轻度更轻?只需要回答【yes】或【no】,不要多余文字"; + String input1 = String.format("回复内容:%s",vo.getAnswer()); + String s = doubaoService.drawConclusion(input1, input2); + log.info("豆包返回:",s); + if ("【yes】".contains(s)){ + data.setData("000"); + }else { + data.setData("111"); + } + return data; + } + throw new ServiceException("系统异常"); + } + + @PostMapping("/getReport") + public ResultData getReport(@RequestBody String text){ + String input2 = "请你将上述这句话用尽可能简洁的文字总结出来"; + String conclusion = doubaoService.drawConclusion(text, input2); + ResultData data = new ResultData<>(); + data.setCode(200); + data.setData(conclusion); + return data; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/FileController.java b/mobileApp/src/main/java/cn/unizk/controller/FileController.java new file mode 100644 index 0000000..3b3cd3b --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/FileController.java @@ -0,0 +1,52 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.SysFile; +import cn.unizk.entity.vo.MinioRespVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.enums.FileType; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.FileMapper; +import cn.unizk.service.FileUploadService; +import com.google.common.collect.ImmutableSet; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.util.Set; + +/** + * @Author hao + * @Date 2026/7/1 17:01 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/file") +public class FileController { + + @Resource + private FileMapper fileMapper; + @Resource + private FileUploadService fileUploadService; + + + @GetMapping("/getById/{id}") + public SysFile getById(@PathVariable("id") Integer id){ + return fileMapper.selectById(id); + } + + @PostMapping("/uploadFile") + public ResultData uploadFile(@RequestParam("file") MultipartFile file){ + String originalFilename = file.getOriginalFilename(); + if (StringUtils.isBlank(originalFilename) || originalFilename.lastIndexOf(".") == -1){ + throw new ServiceException("文件格式不正确"); + } + String fileType = originalFilename.substring(originalFilename.lastIndexOf(".")); + Set types = ImmutableSet.of(".png",".jpg",".jpeg",".ico"); + if (!types.contains(fileType)){ + throw new ServiceException("目前只支持上传png,jpg,jpeg,ico类型文件"); + } + String bucketName = FileType.getMinioBucketName(file.getContentType()).getBucketName(); + return fileUploadService.simpleUpload(file, bucketName); + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/GolfController.java b/mobileApp/src/main/java/cn/unizk/controller/GolfController.java new file mode 100644 index 0000000..46c03ea --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/GolfController.java @@ -0,0 +1,136 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.GrfReportVO; +import cn.unizk.entity.vo.GrfdialogueVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.mapper.AppointmentsMapper; +import cn.unizk.mapper.GolfCustInfoMapper; +import cn.unizk.mapper.MobileAppUserMapper; +import cn.unizk.mapper.MobileAppointmentsMapper; +import cn.unizk.service.DoubaoService; +import cn.unizk.utils.MobileAppSecurityUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * @Author hao + * @Date 2026/7/7 10:33 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/golf") +@Slf4j +public class GolfController { + + @Resource + private DoubaoService doubaoService; + @Resource + private GolfCustInfoMapper golfCustInfoMapper; + @Resource + private MobileAppUserMapper appUserMapper; + @Resource + private MobileAppointmentsMapper mobileAppointmentsMapper; + + @PostMapping("/judgeOne") + public ResultData judgeOne(@Validated @RequestBody GrfdialogueVO vo){ + ResultData data = new ResultData(); + if (StringUtils.isBlank(vo.getQuestion())){ + String input1 = "请判断下面的回答是否是肩部,腰部,肘部,手腕,膝关节,髋关节,颈部,踝关节有关这8个部位的内容,只需要回答是或不是。"; + String s = doubaoService.drawConclusion(input1, vo.getAnswer()); + log.info(s); + System.out.println(String.format("【%s】",s)); + if ("是".equals(s)){ + data.setCode(200); + return data; + } + data.setCode(300); + return data; + }else { + String question = vo.getQuestion(); + switch (question){ + case "2": + vo.setQuestion("请问您肌肉发紧僵硬吗?"); + break; + case "3": + vo.setQuestion("请问您关节活动怎么样?"); + break; + case "4": + vo.setQuestion("请问您挥杆有没有不适症状?"); + break; + } + String input1 = String.format("问题:%s;回答:%s",vo.getQuestion(),vo.getAnswer()); + String input2 = "请判断:回答和问题是否相干?只需要回答相干或不相干,不要多余文字。"; + String s = doubaoService.drawConclusion(input1, input2); + if ("相干".equals(s)){ + data.setCode(200); + }else { + data.setCode(300); + } + return data; + } + } + + @PostMapping("/saveCustInfo") + public ResultData saveCustInfo(@Validated @RequestBody GolfCustInfo custInfo){ + golfCustInfoMapper.insert(custInfo); + return ResultData.success(custInfo.getId()); + } + + @PostMapping("/getReport") + public ResultData getReport(@RequestParam("id") Integer id, + HttpServletRequest request, + @RequestBody GrfReportVO vo){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + GolfCustInfo golfCustInfo = golfCustInfoMapper.selectById(id); + String sex = golfCustInfo.getGender() == 0 ? "女" : "男"; + StringBuilder sb = new StringBuilder(); + sb.append("就诊人:").append(golfCustInfo.getCustName()) + .append("性别:").append(sex).append("年龄:").append(golfCustInfo.getAge()) + .append("高尔夫球龄:").append(golfCustInfo.getGolfingAge()) + .append("每周打球次数:").append(golfCustInfo.getWeekFrequency()) + .append("患者陈述:").append(vo.getAnswer1()).append(",").append(vo.getAnswer2()) + .append(",").append(vo.getAnswer3()).append(",").append(vo.getAnswer4()); + + String conclusion = doubaoService.drawConclusion("请你把下面内容总结成一段话,并且这段话要包括病情分析,比如是得了肩周炎,腰椎间盘突出还是其他什么病,并给出调理建议", sb.toString()); + vo.setReport(conclusion); + vo.setName(golfCustInfo.getCustName()); + vo.setGender(golfCustInfo.getGender()==0 ? "女" : "男"); + vo.setAge(golfCustInfo.getAge()); + vo.setPhoneNumber(golfCustInfo.getPhoneNumber()); + vo.setGolfingAge(golfCustInfo.getGolfingAge()); + vo.setWeekFrequency(golfCustInfo.getWeekFrequency()); + new Thread(() -> { + List numbers = new ArrayList<>(); + for (int i = 1; i <= 13; i++) { + numbers.add(i); + } + Collections.shuffle(numbers); + MobileAppUser user = new MobileAppUser(); + user.setId(currentUser.getId()); + user.setPainNumber(String.valueOf(numbers.get(0)) + "," + numbers.get(1)); + appUserMapper.updateById(user); + }).start(); + return ResultData.success(vo); + + } + + @PostMapping("/evaluation") + public ResultData evaluation(@RequestBody Appointments appointments){ + MobileAppointments app = new MobileAppointments(); + app.setId(appointments.getId()); + app.setTreatRating(appointments.getTreatRating()); + app.setEvaluation(appointments.getEvaluation()); + app.setStatus("commented"); + mobileAppointmentsMapper.updateById(app); + return ResultData.success(); + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/HFPayController.java b/mobileApp/src/main/java/cn/unizk/controller/HFPayController.java new file mode 100644 index 0000000..d2b70c9 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/HFPayController.java @@ -0,0 +1,53 @@ +package cn.unizk.controller; + +import cn.hutool.core.util.IdUtil; +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.entity.po.MobileOrder; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.exception.BusinessException; +import cn.unizk.pay.dto.BasePayResponse; +import cn.unizk.pay.dto.PayBaseRequest; +import cn.unizk.pay.enums.PayChannelEnum; +import cn.unizk.pay.service.HFPayService; +import cn.unizk.utils.MobileAppSecurityUtil; +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 javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.Map; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/7/2 11:22 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/hf") +public class HFPayController { + + @Resource + private Map payMap; + + @PostMapping("/pay") + public R pay(HttpServletRequest request, @RequestBody PayBaseRequest param){ + if (param.getPayChannel().equals(PayChannelEnum.WECHAT.name()) && param.getStep() == null){ + param.setStep(1); + } + boolean b = Arrays.stream(PayChannelEnum.values()).anyMatch(e -> e.name().equals(param.getPayChannel())); + if (!b){ + throw new BusinessException("不支持的支付渠道"); + } + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new BusinessException(401,"登录已过期"); + } + param.setMobileAppUserId(currentUser.getId()); + HFPayService hfPayService = payMap.get(param.getPayChannel()); + return (R) hfPayService.pay(param); + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/HFPayWebhookController.java b/mobileApp/src/main/java/cn/unizk/controller/HFPayWebhookController.java new file mode 100644 index 0000000..3ea0914 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/HFPayWebhookController.java @@ -0,0 +1,151 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.*; +import cn.unizk.enums.OrderStatus; +import cn.unizk.enums.OrderTypeEnum; +import cn.unizk.mapper.*; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.net.URLDecoder; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/7/8 14:20 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/hf/webhook") +@Slf4j +public class HFPayWebhookController { + + @Resource + private MobileOrderMapper mobileOrderMapper; + @Resource + private MobileStoreMapper mobileStoreMapper; + @Resource + private MobileAppUserAccountMapper mobileAppUserAccountMapper; + @Resource + private MobileUserHaveCourseMapper mobileUserHaveCourseMapper; + + @RequestMapping("/callback") + public void callback(@RequestBody String messageBody){ + log.info("汇付支付回调数据:{}",messageBody); + try { + String decode = URLDecoder.decode(messageBody, "utf-8"); + String resp_data = decode.split("&resp_data=")[1]; + JSONObject jsonObject = JSONObject.parseObject(resp_data); + String trans_stat = jsonObject.getString("trans_stat"); + String req_seq_id = jsonObject.getString("req_seq_id"); + List mobileOrders = mobileOrderMapper.selectList(new LambdaQueryWrapper() + .eq(MobileOrder::getOutTradeNo, req_seq_id)); + if (CollectionUtils.isEmpty(mobileOrders)){ + log.error("没有这个订单,订单out_trade_no:{}",req_seq_id); + return; + } + MobileOrder mobileOrder = mobileOrders.get(0); + if (Objects.isNull(mobileOrder)){ + log.error("没有这个订单,订单out_trade_no:{}",req_seq_id); + return; + } + if (OrderStatus.paid.name().equals(mobileOrder.getStatus())){ + return; + } + if ("S".equals(trans_stat)){ + log.info("交易成功-------+++++++++"); + if (mobileOrder.getOrderType() != null && mobileOrder.getOrderType().equals(OrderTypeEnum.SCAN_PAY.getCode())){ + scanToPower(mobileOrder); + }else if (mobileOrder.getOrderType() != null && mobileOrder.getOrderType().equals(OrderTypeEnum.MEMBER_RECHARGE.getCode())){ + recharge(mobileOrder); + }else if (mobileOrder.getOrderType() != null && mobileOrder.getOrderType().equals(OrderTypeEnum.COURSE_PAY.getCode())){ + courseBuy(mobileOrder); + }else if (mobileOrder.getOrderType() != null && mobileOrder.getOrderType().equals(OrderTypeEnum.HGJ_PAY.getCode())){ + hgjPay(mobileOrder); + }else if (mobileOrder.getOrderType() != null && mobileOrder.getOrderType().equals(OrderTypeEnum.GOLF_SERVICE_PAY.getCode())){ + golfService(mobileOrder); + }else if (mobileOrder.getOrderType() != null && mobileOrder.getOrderType().equals(OrderTypeEnum.PRODUCT_PAY.getCode())){ + productPay(mobileOrder); + }else if (mobileOrder.getOrderType() != null && mobileOrder.getOrderType().equals(OrderTypeEnum.SHOPPING_CART_PAY.getCode())){ + shoppingCartPay(mobileOrders); + } + } + + }catch (Exception e){ + e.printStackTrace(); + } + } + + private void scanToPower(MobileOrder order){ + order.setStatus(OrderStatus.paid.name()); + JkStore jkStore = mobileStoreMapper.selectById(order.getDeviceId()); + order.setStoreId(jkStore.getId()); + order.setPayTime(LocalDateTime.now()); + mobileOrderMapper.updateById(order); + } + + private void recharge(MobileOrder order){ + order.setStatus(OrderStatus.paid.name()); + order.setPayTime(LocalDateTime.now()); + MobileAppUserAccount mobileAppUserAccount = mobileAppUserAccountMapper.selectOne(new LambdaQueryWrapper() + .eq(MobileAppUserAccount::getMobileUserId, order.getMobileUserId())); + if (Objects.isNull(mobileAppUserAccount)){ + MobileAppUserAccount account = new MobileAppUserAccount(); + account.setMobileUserId(order.getMobileUserId()); + account.setAccountBalance(order.getTotalPrice()); + mobileAppUserAccountMapper.insert(account); + }else { + BigDecimal add = mobileAppUserAccount.getAccountBalance().add(order.getTotalPrice()); + mobileAppUserAccount.setAccountBalance(add); + mobileAppUserAccountMapper.updateById(mobileAppUserAccount); + } + mobileOrderMapper.updateById(order); + } + + private void courseBuy(MobileOrder order){ + order.setStatus(OrderStatus.paid.name()); + order.setPayTime(LocalDateTime.now()); + MobileUserHaveCourse userHaveCourse = new MobileUserHaveCourse(); + userHaveCourse.setBuyTime(LocalDateTime.now()); + userHaveCourse.setCourseId(order.getCourseId()); + userHaveCourse.setMobileUserId(order.getMobileUserId()); + userHaveCourse.setStatus(1); + mobileUserHaveCourseMapper.insert(userHaveCourse); + mobileOrderMapper.updateById(order); + } + + private void hgjPay(MobileOrder order){ + order.setStatus(OrderStatus.paid.name()); + order.setPayTime(LocalDateTime.now()); + mobileOrderMapper.updateById(order); + } + + private void golfService(MobileOrder order){ + order.setStatus(OrderStatus.paid.name()); + order.setPayTime(LocalDateTime.now()); + mobileOrderMapper.updateById(order); + } + + private void productPay(MobileOrder order){ + order.setStatus(OrderStatus.paid.name()); + order.setPayTime(LocalDateTime.now()); + mobileOrderMapper.updateById(order); + } + + private void shoppingCartPay(List mobileOrders){ + for (MobileOrder order : mobileOrders) { + order.setPayTime(LocalDateTime.now()); + order.setStatus(OrderStatus.paid.name()); + } + mobileOrderMapper.updateById(mobileOrders); + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/LoginController.java b/mobileApp/src/main/java/cn/unizk/controller/LoginController.java new file mode 100644 index 0000000..6ffc234 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/LoginController.java @@ -0,0 +1,154 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.entity.vo.MobileAppLoginRequestVO; +import cn.unizk.entity.vo.MobileAppUserVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.exception.BusinessException; +import cn.unizk.service.UniCloudClient; +import cn.unizk.service.UserService; +import cn.unizk.utils.AESUtil; +import cn.unizk.utils.CaptchaGenerator; +import cn.unizk.utils.MobileJwtUtil; +import cn.unizk.utils.SendSmsUtil; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.imageio.ImageIO; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; + +/** + * @Author hao + * @Date 2026/6/30 11:18 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/login") +@Slf4j +public class LoginController { + + @Resource + private UserService userService; + @Resource + private CaptchaGenerator captchaGenerator; + @Value("${spring.profiles.active}") + private String active; + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + private static final String PLAIN_TEXT = "unizk.jkzy"; + + @PostMapping("/oneClick") + public ResultData loginByPhone(@RequestBody MobileAppLoginRequestVO vo) throws Exception { + String decrypt = AESUtil.decrypt(vo.getPlainText()); + if (!PLAIN_TEXT.equals(decrypt)){ + throw new BusinessException("密文错误"); + } +// String phoneNumber = UniCloudClient.getPhoneNumber(vo.getAccessToken()); + MobileAppUser appUser = userService.userLogin(vo.getPhoneNumber()); + String token = MobileJwtUtil.generateToken(appUser.getPhoneNumber()); + ResultData resultData = new ResultData<>(); + resultData.setCode(200); + MobileAppUserVO userVO = new MobileAppUserVO(); + BeanUtils.copyProperties(appUser,userVO); + userVO.setToken(token); + resultData.setData(userVO); + return resultData; + } + + @PostMapping("/loginByPhoneCode") + public ResultData loginByPhoneCode(@RequestParam("phoneNumber") String phoneNumber, + @RequestParam("code") String code){ + if ("prod".equals(active)){ + String cacheCode = (String) redisTemplate.opsForValue().get(phoneNumber); + if (StringUtils.isBlank(cacheCode)){ + throw new BusinessException("手机验证码已过期"); + } + if (!cacheCode.equals(code)){ + throw new BusinessException("验证码错误"); + } + } + MobileAppUser appUser = userService.userLogin(phoneNumber); + String token = MobileJwtUtil.generateToken(appUser.getPhoneNumber()); + ResultData resultData = new ResultData<>(); + resultData.setCode(200); + MobileAppUserVO userVO = new MobileAppUserVO(); + BeanUtils.copyProperties(appUser,userVO); + userVO.setToken(token); + resultData.setData(userVO); + return resultData; + } + + @PostMapping("/sendPhoneCode") + public ResultData sendPhoneCode(@RequestParam("phoneNumber") String phoneNumber, + @RequestParam("captcha") String captcha, + @RequestParam("uuid") String uuid){ + captchaGenerator.verifyCaptcha(captcha,uuid); + if ("prod".equals(active)){ + String phoneCode = RandomStringUtils.randomNumeric(6); + log.info("手机验证码:{}",phoneCode); + try { + String s = SendSmsUtil.sendPhoneCode(phoneNumber, phoneCode); + JSONObject res = JSONObject.parseObject(s); + Integer statusCode = res.getInteger("statusCode"); + if (statusCode != null && statusCode == 200){ + redisTemplate.opsForValue().set(phoneNumber,phoneCode,300, TimeUnit.SECONDS); + return ResultData.success(); + } + return ResultData.failure(500,"验证码发送失败"); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + throw new BusinessException("验证码发送失败"); + } + }else { + redisTemplate.opsForValue().set(phoneNumber,"888888",300, TimeUnit.SECONDS); + return ResultData.success(); + } + } + + @GetMapping("/getUuid") + public ResultData getUuid(){ + String uuid = RandomStringUtils.randomNumeric(16); + ResultData data = new ResultData<>(); + data.setCode(200); + data.setData(uuid); + return data; + } + + @GetMapping("/getCaptcha") + public void getCaptcha(HttpServletResponse response,@RequestParam("uuid") String uuid){ + + BufferedImage bufferedImage = captchaGenerator.generateCaptcha(uuid); + ServletOutputStream outputStream = null; + try { + outputStream = response.getOutputStream(); + ImageIO.write(bufferedImage,"jpg",outputStream); + } catch (IOException e) { + e.printStackTrace(); + throw new BusinessException("图片验证码生成异常"); + }finally { + if (outputStream != null){ + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/LogoutController.java b/mobileApp/src/main/java/cn/unizk/controller/LogoutController.java new file mode 100644 index 0000000..7b32812 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/LogoutController.java @@ -0,0 +1,41 @@ +package cn.unizk.controller; + +import cn.unizk.MobileAppConstant; +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.utils.MobileAppSecurityUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/8/11 15:56 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp") +public class LogoutController { + + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + + + @GetMapping("/logout") + public ResultData logout(HttpServletRequest request){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + return ResultData.success(); + } + redisTemplate.delete(MobileAppConstant.CACHE_TOKEN_PREFIX + currentUser.getPhoneNumber()); + return ResultData.success(); + } + +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/MClinicWorkLogController.java b/mobileApp/src/main/java/cn/unizk/controller/MClinicWorkLogController.java new file mode 100644 index 0000000..0d0e5fc --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/MClinicWorkLogController.java @@ -0,0 +1,60 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.ClinicWorkLog; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.mapper.ClinicWorkLogMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.lang3.StringUtils; +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 javax.annotation.Resource; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2026/8/20 15:50 + * @Version 1.0 + **/ + +@RestController +@RequestMapping("/mobileApp/clinic") +public class MClinicWorkLogController { + + + @Resource + private ClinicWorkLogMapper clinicWorkLogMapper; + + @PostMapping("/list") + public Page list(@RequestBody UniPage uniPage){ + Page page = (Page) uniPage.getPage(); + LambdaQueryWrapper queryWrapper = uniPage.buildQueryWrapper(query -> { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.like(StringUtils.isNotBlank(query.getName()), ClinicWorkLog::getName, query.getName()); + wrapper.like(StringUtils.isNotBlank(query.getPhoneNumber()), ClinicWorkLog::getPhoneNumber, query.getPhoneNumber()); + wrapper.orderByDesc(ClinicWorkLog::getCreateTime); + return wrapper; + }); + return clinicWorkLogMapper.selectPage(page,queryWrapper); + } + + @PostMapping("/addLog") + public ResultData addLog(@RequestBody ClinicWorkLog log){ + if (log.getCreateTime() == null){ + log.setCreateTime(LocalDate.now()); + } + clinicWorkLogMapper.insert(log); + return ResultData.success(); + } + + @PostMapping("/editLog") + public ResultData editLog(@RequestBody ClinicWorkLog log){ + clinicWorkLogMapper.updateById(log); + return ResultData.success(); + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/MInventoryController.java b/mobileApp/src/main/java/cn/unizk/controller/MInventoryController.java new file mode 100644 index 0000000..6a93467 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/MInventoryController.java @@ -0,0 +1,62 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.InventoryStatistics; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.mapper.InventoryStatisticsMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * @Author hao + * @Date 2026/8/20 11:39 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/inventory") +public class MInventoryController { + + @Resource + InventoryStatisticsMapper inventoryStatisticsMapper; + + + @PostMapping("/getStatistics") + public Page page(@RequestBody UniPage uniPage){ + Page page = (Page) uniPage.getPage(); + LambdaQueryWrapper queryWrapper = uniPage.buildQueryWrapper(query -> { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(query.getType() != null,InventoryStatistics::getType,query.getType()); + wrapper.like(StringUtils.isNotBlank(query.getProductName()), InventoryStatistics::getProductName, query.getProductName()); + wrapper.orderByDesc(InventoryStatistics::getCreateTime); + return wrapper; + }); + return inventoryStatisticsMapper.selectPage(page,queryWrapper); + } + + @PostMapping("/addStatistics") + public ResultData addStatistics(@RequestBody InventoryStatistics statistics){ + statistics.setRemainingQuantity(statistics.getQuantityInStock() - statistics.getOutboundQuantity()); + statistics.setCreateTime(LocalDate.now()); + inventoryStatisticsMapper.insert(statistics); + return ResultData.success(); + } + + @PostMapping("/updateStatistics") + public ResultData updateStatistics(@RequestBody InventoryStatistics statistics){ + statistics.setRemainingQuantity(statistics.getQuantityInStock() - statistics.getOutboundQuantity()); + inventoryStatisticsMapper.updateById(statistics); + return ResultData.success(); + } + + @PostMapping("/deleteStatistics") + public ResultData deleteStatistics(@RequestParam("id") Integer id){ + inventoryStatisticsMapper.deleteById(id); + return ResultData.success(); + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/MobileAppUserController.java b/mobileApp/src/main/java/cn/unizk/controller/MobileAppUserController.java new file mode 100644 index 0000000..6576252 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/MobileAppUserController.java @@ -0,0 +1,329 @@ +package cn.unizk.controller; + +import cn.unizk.MobileAppConstant; +import cn.unizk.config.WxProperties; +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.ReportReqVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.enums.OrderStatus; +import cn.unizk.exception.BusinessException; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.*; +import cn.unizk.utils.HttpUtil; +import cn.unizk.utils.MobileAppSecurityUtil; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.time.Clock; +import java.time.LocalDateTime; +import java.util.*; +import java.util.concurrent.TimeUnit; + +/** + * @Author hao + * @Date 2026/7/1 17:23 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/user") +@Slf4j +public class MobileAppUserController { + + @Resource + private MobileAppUserMapper mobileAppUserMapper; + @Resource + private MobileUserAddressMapper mobileUserAddressMapper; + @Resource + private MobileOrderMapper orderMapper; + @Resource + private SysDictMapper sysDictMapper; + @Resource + private GrfPjMapper grfPjMapper; + @Resource + private MobileAppUserAccountMapper mobileAppUserAccountMapper; + @Resource + private RechargePackageMapper rechargePackageMapper; + @Resource + private WxProperties wxProperties; + @Resource + private MobilePhysioMapper mobilePhysioMapper; + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + + + @PostMapping("/editUserInfo") + public ResultData editUserInfo(@RequestBody MobileAppUser user){ + mobileAppUserMapper.updateById(user); + return ResultData.success(); + } + + @GetMapping("/getUserIdType") + public ResultData getUserIdType(HttpServletRequest request){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + JkPhysio one = mobilePhysioMapper.selectOne(new LambdaQueryWrapper().eq(JkPhysio::getPhysioTel, currentUser.getPhoneNumber())); + ResultData data = new ResultData<>(); + data.setCode(200); + if (Objects.isNull(one)){ + data.setData(0); + }else { + data.setData(1); + } + return data; + } + + + @PostMapping("/switchIdType") + public ResultData switchIdType(HttpServletRequest request,@RequestParam("type") String type){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + if (!type.equals("C") && !type.equals("P")){ + throw new ServiceException("未知的身份类型"); + } + currentUser.setUserType(type); + mobileAppUserMapper.updateById(currentUser); + redisTemplate.delete(MobileAppConstant.CACHE_TOKEN_PREFIX + currentUser.getPhoneNumber()); + redisTemplate.opsForValue().set(MobileAppConstant.CACHE_TOKEN_PREFIX + currentUser.getPhoneNumber(), currentUser, 90, TimeUnit.DAYS); + return ResultData.success(); + } + + @GetMapping("/getCurrentUser") + public MobileAppUser getCurrentUser(HttpServletRequest request){ + return MobileAppSecurityUtil.getCurrentUser(request); + } + + @PostMapping("/rememberDia") + public ResultData rememberDia(HttpServletRequest request, @Validated @RequestBody ReportReqVO vo){ + /*MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + }*/ + MobileAppUser user = new MobileAppUser(); + /*user.setId(currentUser.getId()); + user.setSymptom(vo.getReport()); + user.setAge(vo.getAge()); + user.setHeight(vo.getHeight()); + user.setWeight(vo.getWeight()); + user.setTemplateId(vo.getTemplateId()); + user.setPainNumber(vo.getPainNumber()); + mobileAppUserMapper.updateById(user);*/ + List integers = Lists.newArrayList("1", "2", "4", "8"); + boolean b = false; + int t = 2; + if (vo.getPainNumber().contains(",")){ + List ids = Arrays.asList(vo.getPainNumber().split(",")); + for (String id : ids) { + if (!integers.contains(id)){ + b = true; + break; + } + } + if (!b){ + if ("000".equals(vo.getCode1()) && "000".equals(vo.getCode2())){ + t = 1; + } + } + }else { + if (!integers.contains(vo.getPainNumber())){ + b = true; + }else { + if ("000".equals(vo.getCode1()) && "000".equals(vo.getCode2())){ + t = 1; + } + } + } + ResultData data = new ResultData<>(); + data.setCode(200); + data.setData(t); + return data; + } + + @GetMapping("/addresses") + public List addresses(HttpServletRequest request){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + return mobileUserAddressMapper.selectList(new LambdaQueryWrapper() + .eq(MobileUserAddress::getMobileUserId,currentUser.getId())); + } + + @PostMapping("/addOrUpdateAddress") + public int addOrUpdateAddress(@RequestBody MobileUserAddress address,HttpServletRequest request){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (currentUser == null){ + throw new ServiceException(401,"登陆已过期"); + } + address.setMobileUserId(currentUser.getId()); + /*if (!currentUser.getId().equals(address.getMobileUserId())){ + throw new ServiceException(403,"无权访问"); + }*/ + List userAddresses = mobileUserAddressMapper.selectList(null); + if (CollectionUtils.isEmpty(userAddresses)){ + address.setDefaultAddr(0); + } + if (address.getAddressId() == null && address.getDefaultAddr() == 0){ + MobileUserAddress one = mobileUserAddressMapper.selectOne(new LambdaQueryWrapper().eq(MobileUserAddress::getDefaultAddr, 0)); + if (Objects.nonNull(one)){ + one.setDefaultAddr(1); + mobileUserAddressMapper.updateById(one); + } + } + if (address.getAddressId() != null && address.getDefaultAddr() == 0){ + MobileUserAddress userAddress = mobileUserAddressMapper.selectById(address.getAddressId()); + if (Objects.isNull(userAddress)){ + throw new ServiceException("no this address"); + } + if (userAddress.getDefaultAddr() != 0){ + MobileUserAddress one = mobileUserAddressMapper.selectOne(new LambdaQueryWrapper().eq(MobileUserAddress::getDefaultAddr, 0)); + if (Objects.nonNull(one)){ + one.setDefaultAddr(1); + mobileUserAddressMapper.updateById(one); + } + } + } + if (address.getAddressId() == null){ + address.setCreateTime(LocalDateTime.now(Clock.systemDefaultZone())); + }else { + address.setUpdateTime(LocalDateTime.now(Clock.systemDefaultZone())); + } + mobileUserAddressMapper.insertOrUpdate(address); + return address.getAddressId(); + } + + @PostMapping("/deleteAddr") + public boolean deleteAddr(@RequestParam("addressId") Integer addressId,HttpServletRequest request){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (currentUser == null){ + throw new ServiceException(401,"登陆已过期"); + } + MobileUserAddress userAddress = mobileUserAddressMapper.selectById(addressId); + if (Objects.isNull(userAddress)){ + throw new ServiceException("地址不存在"); + } + if (!currentUser.getId().equals(userAddress.getMobileUserId())){ + throw new ServiceException(403,"无权访问"); + } + return mobileUserAddressMapper.deleteById(addressId) > 0; + } + + @PostMapping("/applyRefund") + public boolean applyRefund(@RequestBody MobileOrder order, HttpServletRequest request){ + MobileOrder mobileOrder = orderMapper.selectById(order.getOrderId()); + if (Objects.isNull(mobileOrder)){ + throw new ServiceException("查无此单"); + } + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (currentUser == null || !currentUser.getId().equals(mobileOrder.getMobileUserId())){ + throw new ServiceException("无权访问"); + } +// wxOrder.setStatus(OrderStatus.request_refund.name()); + mobileOrder.setApplyRefundTime(LocalDateTime.now()); + mobileOrder.setRefundReason(order.getRefundReason()); + mobileOrder.setRefundTrackingNumber(order.getRefundTrackingNumber()); + mobileOrder.setAfterSaleStatus(order.getAfterSaleStatus()); + mobileOrder.setStatus(OrderStatus.request_refund.name()); + return orderMapper.updateById(mobileOrder) > 0; + } + + @PostMapping("/refundReason") + public boolean refundReason(@RequestParam("orderId") String orderId,@RequestParam("reason") String reason,HttpServletRequest request){ + MobileOrder mobileOrder = orderMapper.selectById(orderId); + if (Objects.isNull(mobileOrder)){ + throw new ServiceException("无此订单"); + } + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (currentUser == null || !currentUser.getId().equals(mobileOrder.getMobileUserId())){ + throw new ServiceException("无权访问"); + } + mobileOrder.setRefundReason(reason); + return orderMapper.updateById(mobileOrder) > 0; + } + + @GetMapping("/getGrfScanPrice") + public ResultData getGrfScanPrice(HttpServletRequest request,@RequestParam(value = "id",required = false) Integer id){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + List wxOrders = orderMapper.selectList(new LambdaQueryWrapper() + .eq(MobileOrder::getMobileUserId, currentUser.getId()) + .eq(MobileOrder::getStatus, OrderStatus.paid.name()) + .eq(MobileOrder::getOrderType, 1)); + ResultData data = new ResultData<>(); + if (CollectionUtils.isEmpty(wxOrders)){ + data.setCode(200); + SysDict sysDict = sysDictMapper.selectOne(new LambdaQueryWrapper().eq(SysDict::getDictType, "grf")); + data.setData(Objects.nonNull(sysDict) ? sysDict.getDictValue() : "99"); + return data; + }else { + if (id == null){ + throw new ServiceException("您不是首次体验用户!"); + } + GrfPj grfPj = grfPjMapper.selectById(id); + data.setCode(200); + data.setData(grfPj.getPrice().toString()); + return data; + } + } + + @GetMapping("/getGrfPrice") + public List list(){ + return grfPjMapper.selectList(null); + } + + + @GetMapping("/getVipRechargePackage") + public List rechargePackages(){ + return rechargePackageMapper.selectList(null); + } + + @GetMapping("/getAccountBalance") + public MobileAppUserAccount account(HttpServletRequest request){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + MobileAppUserAccount account = mobileAppUserAccountMapper.selectOne(new LambdaQueryWrapper().eq(MobileAppUserAccount::getMobileUserId, currentUser.getId())); + if (account == null){ + return new MobileAppUserAccount(); + } + return account; + } + + @GetMapping("/getOpenid") + public ResultData getOpenid(@RequestParam("code") String code){ + log.info("小程序登录传参:{}",code); + Map params = new HashMap<>(); + params.put("appid",wxProperties.getAppid()); + params.put("secret",wxProperties.getSecret()); + params.put("js_code",code); + params.put("grant_type","authorization_code"); + try { + String s = HttpUtil.doGet("https://api.weixin.qq.com/sns/jscode2session", null, params); + log.info("小程序登录返回:{}", s); + JSONObject loginResp = JSONObject.parseObject(s); + if (loginResp.containsKey("errcode")) { + throw new ServiceException("小程序登录失败"); + } + String session_key = (String) loginResp.get("session_key"); + String openid = (String) loginResp.get("openid"); + log.info("sessionKey={};openid={}", session_key, openid); + ResultData resultData = new ResultData<>(); + resultData.setCode(200); + resultData.setData(openid); + return resultData; + }catch (Exception e){ + throw new BusinessException("获取openid失败"); + } + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/MobileMemberController.java b/mobileApp/src/main/java/cn/unizk/controller/MobileMemberController.java new file mode 100644 index 0000000..f6e7812 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/MobileMemberController.java @@ -0,0 +1,37 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.SysDict; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.mapper.SysDictMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @Author hao + * @Date 2026/7/1 16:55 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/member") +public class MobileMemberController { + + @Resource + private SysDictMapper sysDictMapper; + + @GetMapping("/getCost") + public ResultData getCost(){ + SysDict activeMember = sysDictMapper.selectOne(new LambdaQueryWrapper().eq(SysDict::getDictType, "active_member")); + ResultData data = new ResultData<>(); + if (activeMember == null){ + data.setData("888.00"); + }else { + data.setData(activeMember.getDictValue()); + } + data.setCode(200); + return data; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/MobileOrderController.java b/mobileApp/src/main/java/cn/unizk/controller/MobileOrderController.java new file mode 100644 index 0000000..6922416 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/MobileOrderController.java @@ -0,0 +1,257 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.*; +import cn.unizk.enums.OrderAfterSaleStatus; +import cn.unizk.enums.OrderStatus; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.*; +import cn.unizk.service.JkProductService; +import cn.unizk.utils.BeanCopyUtils; +import cn.unizk.utils.MobileAppSecurityUtil; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2026/7/8 14:43 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/order") +public class MobileOrderController { + + @Resource + private MobileOrderMapper mobileOrderMapper; + @Resource + private MobileOrderItemMapper mobileOrderItemMapper; + @Resource + private JkProductService productService; + @Resource + private ComboMapper comboMapper; + @Resource + private MobileStoreMapper mobileStoreMapper; + @Resource + private PhysioMapper physioMapper; + @Resource + private MobileAppUserMapper mobileAppUserMapper; + @Resource + private CourseMapper courseMapper; + @Resource + private OrderReviewMapper reviewMapper; + + + @GetMapping("/getOrderById") + public ResultData getOrderById(@RequestParam("orderId") String orderId){ + return ResultData.success(mobileOrderMapper.selectById(orderId)); + } + + @GetMapping("/getSortSum") + public JSONObject getSum(HttpServletRequest request) { + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + JSONObject of = JSONObject.of(); + List list = mobileOrderMapper.selectList(new LambdaQueryWrapper().eq(MobileOrder::getMobileUserId, currentUser.getId())); + List noAfterSales = list.stream().filter(o -> o.getAfterSaleStatus().equals(0)).collect(Collectors.toList()); + long unpaid = noAfterSales.stream().filter(o -> OrderStatus.unpaid.name().equals(o.getStatus())).count(); + of.put("待付款", unpaid); + long daifahuo = noAfterSales.stream().filter(o -> OrderStatus.not_shipped.name().equals(o.getStatus())).count(); + of.put("待发货", daifahuo); + long daishouhuo = noAfterSales.stream().filter(o -> (OrderStatus.shipped.name().equals(o.getStatus()) || OrderStatus.unverified.name().equals(o.getStatus()))).count(); + of.put("待收货/使用", daishouhuo); + long daipingjia = noAfterSales.stream().filter(o -> (OrderStatus.received.name().equals(o.getStatus()) || OrderStatus.verified.name().equals(o.getStatus()))).count(); + of.put("待评价", daipingjia); + ArrayList integers = Lists.newArrayList(0, 5, 6, 7); + long tuikuan = list.stream().filter(o -> !integers.contains(o.getAfterSaleStatus())).count(); + of.put("退款", tuikuan); + return of; + } + + @PostMapping("/deleteInvalidOrder") + public ResultData deleteInvalidOrder(@RequestParam("orderId") String orderId, HttpServletRequest request) { + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)) { + throw new ServiceException(401, "无权访问"); + } + MobileOrder one = mobileOrderMapper.selectOne(new LambdaQueryWrapper() + .eq(MobileOrder::getOrderId, orderId) + .eq(MobileOrder::getMobileUserId, currentUser.getId())); + if (Objects.isNull(one)) { + throw new ServiceException("您无权限删除"); + } + mobileOrderMapper.deleteById(orderId); + return ResultData.success(); + } + + @GetMapping("/getPersonOrders") + public Page getPersonOrders(HttpServletRequest request, UniPage uniPage, @RequestParam(value = "orderStatus", required = false) String orderStatus) { + boolean afterSale = false; + if ("request_refund,refunded,refund_refusal".equals(orderStatus)) { + orderStatus = ""; + afterSale = true; + } + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)) { + return null; + } + List orderStatusList = null; + if (StringUtils.isNotBlank(orderStatus) && orderStatus.contains(",")) { + String[] split = orderStatus.split(","); + orderStatusList = Arrays.asList(split); + } else if (StringUtils.isNotBlank(orderStatus)) { + orderStatusList = new ArrayList<>(); + orderStatusList.add(orderStatus); + } + Page page = new Page<>(); + page.setSize(uniPage.getPageSize()); + page.setCurrent(uniPage.getCurrentPage()); +// ArrayList strings = Lists.newArrayList("unpaid", "not_shipped", "shipped", "to_be_evaluate"); + Page orderPage = mobileOrderMapper.selectPage(page, new LambdaQueryWrapper() + .eq(MobileOrder::getMobileUserId, currentUser.getId()) + .in(CollectionUtils.isNotEmpty(orderStatusList), MobileOrder::getStatus, orderStatusList) + .eq(!afterSale && StringUtils.isNotBlank(orderStatus), MobileOrder::getAfterSaleStatus, 0) + .ne(afterSale, MobileOrder::getAfterSaleStatus, 0) + .orderByDesc(MobileOrder::getCreateTime) + /*.in(WxOrder::getStatus,strings)*/); + List records = orderPage.getRecords(); + /*List collect = records.stream().filter(o -> { + return strings.contains(o.getStatus()); + }).collect(Collectors.toList());*/ + List vos = new ArrayList<>(); + for (MobileOrder order : records) { + MobileOrderVO vo = new MobileOrderVO(); + BeanUtils.copyProperties(order, vo); + /*if (order.getAfterSaleStatus() != 0){ + vo.setStatus(OrderAfterSaleStatus.getValueByKey(order.getAfterSaleStatus())); + }*/ + if (order.getProductId() != null){ + + JkProduct jkProduct = productService.getById(order.getProductId()); + vo.setProductName(jkProduct.getProductName()); + } + if (order.getComboId() != null){ + Combo combo = comboMapper.selectById(order.getComboId()); + vo.setProductName(combo.getComboName()); + } + if (order.getCourseId() != null){ + Course course = courseMapper.selectById(order.getCourseId()); + vo.setProductName(course.getTitle()); + } + List wxOrderItems = mobileOrderItemMapper.selectList(new LambdaQueryWrapper().eq(MobileOrderItem::getMobileOrderId, order.getOrderId())); + Collection wxOrderItemVOS = BeanCopyUtils.copyArrays(wxOrderItems, MobileOrderItemVO::new); + if (CollectionUtils.isEmpty(wxOrderItemVOS)) { + vos.add(vo); + continue; + } + for (MobileOrderItemVO wxOrderItemVO : wxOrderItemVOS) { + System.out.println(wxOrderItemVO.getStoreId()); + if (wxOrderItemVO.getProductId() != null) { + JkProduct product = productService.getById(wxOrderItemVO.getProductId()); + if (product != null){ + wxOrderItemVO.setProductName(product.getProductName()); + wxOrderItemVO.setImage(product.getProductImage()); + } + } else if (wxOrderItemVO.getComboId() != null) { + Combo combo = comboMapper.selectById(wxOrderItemVO.getComboId()); + if (combo != null){ + wxOrderItemVO.setProductName(combo.getComboName()); + wxOrderItemVO.setImage(combo.getImage()); + } + } + } + vo.setOrderItemVOS((List) wxOrderItemVOS); + vos.add(vo); + } + Page voPage = new Page<>(); + voPage.setTotal(orderPage.getTotal()); + voPage.setSize(orderPage.getSize()); + voPage.setCurrent(orderPage.getCurrent()); + voPage.setRecords(vos); + return voPage; + } + + @GetMapping("/getSelfOneOrder") + public MobileOrderDetailVO getSelfOneOrder(@RequestParam("orderId") String orderId, HttpServletRequest request) { + MobileOrder order = mobileOrderMapper.selectById(orderId); + if (Objects.isNull(order)) { + return new MobileOrderDetailVO(); + } + MobileOrderDetailVO vo = new MobileOrderDetailVO(); + BeanUtils.copyProperties(order, vo); + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser) || !currentUser.getId().equals(order.getMobileUserId())) { + throw new ServiceException(401, "无权限访问"); + } + if (order.getStoreId() != null) { + JkStore jkStore = mobileStoreMapper.selectById(order.getStoreId()); + vo.setJkStore(jkStore); + } + if (order.getPhysioId() != null) { + JkPhysio jkPhysio = physioMapper.selectById(order.getPhysioId()); + vo.setJkPhysio(jkPhysio); + } + if (order.getProductId() != null){ + JkProduct jkProduct = productService.getById(order.getProductId()); + vo.setProductName(jkProduct.getProductName()); + } + if (order.getComboId() != null){ + Combo combo = comboMapper.selectById(order.getComboId()); + vo.setProductName(combo.getComboName()); + } + if (order.getCourseId() != null){ + Course course = courseMapper.selectById(order.getCourseId()); + vo.setProductName(course.getTitle()); + } + List wxOrderItems = mobileOrderItemMapper.selectList(new LambdaQueryWrapper().eq(MobileOrderItem::getMobileOrderId, order.getOrderId())); + if (CollectionUtils.isNotEmpty(wxOrderItems)) { + Collection wxOrderItemVOS = BeanCopyUtils.copyArrays(wxOrderItems, MobileOrderItemVO::new); + for (MobileOrderItemVO itemVO : wxOrderItemVOS) { + if (itemVO.getProductId() != null) { + JkProduct product = productService.getById(itemVO.getProductId()); + itemVO.setProductName(product.getProductName()); + itemVO.setImage(product.getProductImage()); + } else if (itemVO.getComboId() != null) { + Combo combo = comboMapper.selectById(itemVO.getComboId()); + itemVO.setImage(combo.getImage()); + itemVO.setProductName(combo.getComboName()); + } + } + vo.setOrderItemVOS((List) wxOrderItemVOS); + } + MobileAppUser user = mobileAppUserMapper.selectOne(new LambdaQueryWrapper().eq(MobileAppUser::getId, order.getMobileUserId())); + vo.setMobileAppUser(user); + return vo; + } + + @PostMapping("/comment") + @Transactional(rollbackFor = Exception.class) + public ResultData comment(@Validated @RequestBody OrderReview review){ + MobileOrder mobileOrder = mobileOrderMapper.selectById(review.getOrderId()); + if (Objects.isNull(mobileOrder)){ + throw new ServiceException("无此订单"); + } + MobileAppUser mobileAppUser = mobileAppUserMapper.selectOne(new LambdaQueryWrapper().eq(MobileAppUser::getId, mobileOrder.getMobileUserId())); + if (Objects.isNull(mobileAppUser)){ + throw new ServiceException("数据出现异常"); + } +// mobileAppUser.setPoints(wxUser.getPoints() + 1); +// mobileAppUserMapper.updateById(mobileAppUser); + reviewMapper.insert(review); + mobileOrder.setStatus(OrderStatus.commented.name()); + mobileOrderMapper.updateById(mobileOrder); + return ResultData.success(); + } + +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/MobilePhysioController.java b/mobileApp/src/main/java/cn/unizk/controller/MobilePhysioController.java new file mode 100644 index 0000000..7872a52 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/MobilePhysioController.java @@ -0,0 +1,214 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.*; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.*; +import cn.unizk.pojo.vo.ReportTypeVO2; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.constraints.NotBlank; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2026/7/1 18:39 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/physio") +public class MobilePhysioController { + + @Resource + private PhysioMapper physioMapper; + @Resource + private ReportTemplateMapper reportTemplateMapper; + @Resource + private SubHealthDietaryRegulationMapper regulationMapper; + @Resource + private PhysioExamMapper examMapper; + @Resource + private ExamScoreMapper scoreMapper; + + + @GetMapping("/getPhysios") + public IPage getPhysios(@RequestParam("storeId") Integer storeId, UniPage uniPage) { + Page page = new Page<>(); + page.setCurrent(uniPage.getCurrentPage()); + return physioMapper.selectPage(page, new LambdaQueryWrapper() + .eq(JkPhysio::getStoreId, storeId).eq(JkPhysio::getAudit, 1).eq(JkPhysio::getStatus, "启用")); + } + + @PostMapping("/getReportById/{id}") + public ReportTemplateVO getReportById(@PathVariable("id") Integer id, @RequestBody ReportTypeVO2 vo) { + String text = "

      尊敬的客户您好!非常理解您正承受着膝关节疼痛带来的不适与困扰," + + "考虑到您目前关节疼痛症状较为严重,为了能精准对症缓解您的病痛," + + "我们现将您的相关情况转接至上一级专业接待机构。那边配备经验更丰富的护理人员与配" + + "套诊疗资源,会为您提供更全面、专业且细致优质的诊疗服务,请您稍作等候配合转接。

      "; + ReportTemplateVO templateVO = new ReportTemplateVO(); + if (vo.getResult() == 2) { + templateVO.setType(vo.getResult()); + templateVO.setId(randomNum()); + templateVO.setText(text); + return templateVO; + } + if (vo.getResult() == 1) { + ReportTemplate reportTemplate = reportTemplateMapper.selectById(id); + BeanUtils.copyProperties(reportTemplate, templateVO); + templateVO.setType(vo.getResult()); + return templateVO; + } + throw new ServiceException("系统异常"); + } + + private Integer randomNum() { + List numbers = new ArrayList<>(); + for (int i = 1; i <= 13; i++) { + numbers.add(i); + } + + // 2. 打乱列表顺序 + Collections.shuffle(numbers); + return numbers.get(0); + } + + @GetMapping("/getRegulation") + public List getRegulation(@RequestParam(value = "name", required = false) String name) { + return regulationMapper.selectList(new LambdaQueryWrapper() + .like(StringUtils.isNotBlank(name), SubHealthDietaryRegulation::getSymptomDescription, name)); + } + + @PostMapping("/getFoodTherapy") + public ResultData getFoodTherapy(@RequestBody RegulationVO vo) { + if (Objects.isNull(vo) || CollectionUtils.isEmpty(vo.getNumbers())) { + return null; + } + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + ResultData data = new ResultData<>(); + data.setCode(200); + String s = "根据您的症状以及过往病史的描述,您可能由于{reason}的原因引起的,并且身体可能缺乏{n},建议您做一下{z},更精准地查出病因。日常食疗建议多补充{f}。{s}"; + List numbers = vo.getNumbers(); + if (numbers.size() == 1) { + SubHealthDietaryRegulation regulation = regulationMapper.selectById(vo.getNumbers().get(0)); + String f = regulation.getFruitSuggestion() + ";" + regulation.getVegetableSuggestion(); + String result = s.replace("{reason}", regulation.getCommonReasons()).replace("{n}", regulation.getLackNutrients()).replace("{z}", regulation.getDiagnosticReference()) + .replace("{f}", f).replace("{s}", regulation.getDetectAndAdd()); + data.setData(result); + } else { + List regulations = regulationMapper.selectByIds(numbers); + List reasons = new ArrayList<>(); + List zd = new ArrayList<>(); + List ns = new ArrayList<>(); + List sgs = new ArrayList<>(); + List vgs = new ArrayList<>(); + List jcbc = new ArrayList<>(); + for (SubHealthDietaryRegulation regulation : regulations) { + String commonReasons = regulation.getCommonReasons(); + String diagnosticReference = regulation.getDiagnosticReference(); + String vegetableSuggestion = regulation.getVegetableSuggestion(); + String fruitSuggestion = regulation.getFruitSuggestion(); + @NotBlank(message = "lackNutrients cannot be empty") String lackNutrients = regulation.getLackNutrients(); + hb(commonReasons, reasons); + hb(diagnosticReference, zd); + hb(vegetableSuggestion, vgs); + hb(fruitSuggestion, sgs); + hb(lackNutrients, ns); + @NotBlank(message = "detectAndAdd cannot be empty") String detectAndAdd = regulation.getDetectAndAdd(); + String replace = detectAndAdd.replace("检测:", "").replace("补充:", ""); + jcbc.add(replace); + } + String r = String.join("、", reasons); + String n = String.join("、", ns); + String z = String.join("、", zd); + sgs.addAll(vgs); + String f = String.join("、", sgs); + String jb = "微量元素检测与补充:" + String.join(";", jcbc); + String replace = s.replace("{reason}", r).replace("{n}", n).replace("{z}", z).replace("{f}", f).replace("{s}", jb); + data.setData(replace); + } + return data; + } + + private void hb(String s, List list) { + if (s.contains("、")) { + String[] split = s.split("、"); + List item = new ArrayList<>(); + for (String t : split) { + if (!list.contains(t)) { + item.add(t); + } + } + list.addAll(item); + } else { + if (!list.contains(s)) { + list.add(s); + } + } + } + + @PostMapping("/physioExams") + public List physioExams(@RequestParam("subject") Integer subject) { + List physioExams = examMapper.selectList(new LambdaQueryWrapper() + .eq(PhysioExam::getSubject, subject)); + if (CollectionUtils.isEmpty(physioExams)) { + return new ArrayList<>(); + } + List vos = new ArrayList<>(); + for (PhysioExam physioExam : physioExams) { + PhysioExamVO vo = new PhysioExamVO(); + vo.setId(physioExam.getId()); + vo.setType(physioExam.getType()); + vo.setAnswers(Arrays.asList(physioExam.getAnswer().split("&"))); + vo.setTitle(physioExam.getTitle()); + vos.add(vo); + } + return vos; + } + + @PostMapping("/gradeExam") + public Integer gradeExam(@RequestBody List examVOS) { + if (CollectionUtils.isEmpty(examVOS)) { + return 0; + } + List collect = examVOS.stream().map(GradeExamVO::getExamId) + .collect(Collectors.toList()); + List physioExams = examMapper.selectByIds(collect); + Map map = physioExams.stream() + .collect(Collectors.toMap(PhysioExam::getId, Function.identity())); + List list = new ArrayList<>(); + for (GradeExamVO examVO : examVOS) { + if (StringUtils.isBlank(examVO.getAnswer())) { + continue; + } + if (map.get(examVO.getExamId()).getCorrectAnswer().equals(examVO.getAnswer())) { + list.add(map.get(examVO.getExamId()).getType()); + } + } + if (CollectionUtils.isEmpty(list)) { + return 0; + } + List distInt = list.stream().distinct().collect(Collectors.toList()); + // examScoreMapper.selectByIds(distInt),查出examScore,再统计分数。 + List scoreList = scoreMapper.selectByIds(distInt); + Map scoreMap = scoreList.stream().collect(Collectors.toMap(ExamScore::getId, ExamScore::getScore)); + int totalScore = 0; + for (Integer integer : list) { + Integer score = scoreMap.get(integer); + totalScore += score; + } + return totalScore; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/MobileProductController.java b/mobileApp/src/main/java/cn/unizk/controller/MobileProductController.java new file mode 100644 index 0000000..61ba79a --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/MobileProductController.java @@ -0,0 +1,79 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.JkProduct; +import cn.unizk.entity.po.ProductCarousel; +import cn.unizk.entity.vo.JkProductVO; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.service.JkProductService; +import cn.unizk.service.ProductCarouselService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/6/30 16:00 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/product") +public class MobileProductController { + + @Resource + private JkProductService productService; + @Resource + private ProductCarouselService carouselService; + + @GetMapping("/list") + public Page list(UniPage uniPage, @RequestParam(value = "dictValue",required = false) String dictValue, + @RequestParam(value = "product",required = false) String product, + @RequestParam(value = "priceSort",required = false) String priceSort, + @RequestParam(value = "saleSort",required = false) String saleSort) { + Page page = new Page<>(); + page.setCurrent(uniPage.getCurrentPage()); + page.setSize(uniPage.getPageSize()); + boolean priceS = !"desc".equals(priceSort); + boolean saleS = !"desc".equals(saleSort); + return productService.page(page, new LambdaQueryWrapper() + .eq(JkProduct::getProductStatus, "上架") + .eq(StringUtils.isNotBlank(dictValue),JkProduct::getProductType, dictValue) + .like(StringUtils.isNotBlank(product),JkProduct::getProductName,product) + .gt(JkProduct::getProductStock, 0) + .orderBy(StringUtils.isNotBlank(priceSort),priceS,JkProduct::getProductPrice) + .orderBy(StringUtils.isNotBlank(saleSort),saleS,JkProduct::getSales)); + } + + @GetMapping("/getExquisite") + public Page listExquisite(UniPage uniPage){ + Page page = uniPage.getPage(); + return productService.page(page,new LambdaQueryWrapper().eq(JkProduct::getExquisite,"true")); + } + + @GetMapping("/carousel") + public List getCarousel(){ + return carouselService.list(new LambdaQueryWrapper() + .eq(ProductCarousel::getType,"outer")); + } + + @GetMapping("/byId") + public JkProductVO byId(@RequestParam("productId") Integer productId){ + JkProduct jkProduct = productService.getById(productId); + if (Objects.isNull(jkProduct)){ + return new JkProductVO(); + } + List list = carouselService.list(new LambdaQueryWrapper().eq(ProductCarousel::getProductId, productId)); + JkProductVO jkProductVO = new JkProductVO(); + BeanUtils.copyProperties(jkProduct,jkProductVO); + jkProductVO.setProductCarousels(list); + return jkProductVO; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/MobileStoreController.java b/mobileApp/src/main/java/cn/unizk/controller/MobileStoreController.java new file mode 100644 index 0000000..2f681e8 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/MobileStoreController.java @@ -0,0 +1,74 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.JkStore; +import cn.unizk.entity.po.SysDict; +import cn.unizk.entity.vo.JkStoreReqVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.mapper.MobileStoreMapper; +import cn.unizk.mapper.SysDictMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @Author hao + * @Date 2026/7/1 11:03 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/store") +@Slf4j +public class MobileStoreController { + + @Resource + private MobileStoreMapper mobileStoreMapper; + @Resource + private SysDictMapper sysDictMapper; + + + @PostMapping("/getStores") + public IPage getStores(@RequestBody UniPage uniPage){ + Page page = new Page<>(); + page.setCurrent(uniPage.getCurrentPage()); + page.setSize(uniPage.getPageSize()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(JkStore::getStatus, "营业"); + JkStore jkStore = uniPage.getQueryBody(); + if (jkStore != null && StringUtils.isNotBlank(jkStore.getType())){ + wrapper.eq(JkStore::getType,jkStore.getType()); + } + return mobileStoreMapper.selectPage(page, wrapper); + } + + @GetMapping("/getStoreById") + public JkStore getStoreById(@RequestParam("storeId") Integer storeId){ + return mobileStoreMapper.selectById(storeId); + } + + /** + * + * @param vo + * @return + */ + @PostMapping("/nearest") + public JkStore nearest(@RequestBody JkStoreReqVO vo){ + return null; + } + + + @GetMapping("/getScanPayPrice") + public ResultData getScanPayPrice(@RequestParam(value = "storeId",required = false) Integer storeId, @RequestParam(value = "deviceId",required = false) String deviceId){ + log.info("storeId={},deviceId={}",storeId,deviceId); + SysDict sysDict = sysDictMapper.selectById(26); + ResultData data = new ResultData<>(); + data.setCode(200); + data.setData(sysDict.getDictValue()); + return data; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/MobileUserAddrController.java b/mobileApp/src/main/java/cn/unizk/controller/MobileUserAddrController.java new file mode 100644 index 0000000..3094c60 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/MobileUserAddrController.java @@ -0,0 +1,32 @@ +package cn.unizk.controller; + +import cn.unizk.entity.vo.ProvinceTreeVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @Author hao + * @Date 2026/7/9 18:27 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/address") +public class MobileUserAddrController { + + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + + @GetMapping("/getCity") + public List getCity(){ + List cityData = (List) redisTemplate.opsForValue().get("cityData"); + return cityData; + } + +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/RatingController.java b/mobileApp/src/main/java/cn/unizk/controller/RatingController.java new file mode 100644 index 0000000..158eb2a --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/RatingController.java @@ -0,0 +1,436 @@ +package cn.unizk.controller; + +import cn.unizk.entity.dto.MajorJointsDTO; +import cn.unizk.entity.po.DiaRecord; +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.entity.vo.EightMajorJointsVO; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.SpeakVO; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.DiaRecordMapper; +import cn.unizk.mapper.MobileAppUserMapper; +import cn.unizk.utils.MobileAppSecurityUtil; +import com.alibaba.fastjson2.JSONObject; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.RandomStringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2026/8/10 14:45 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/rating") +public class RatingController { + + @Resource + private MobileAppUserMapper mobileAppUserMapper; + @Resource + private DiaRecordMapper diaRecordMapper; + + private static final Map JOINTS_DTO_MAP1; + private static final Map JOINTS_DTO_MAP2; + private static final Map WAN_ZHOU_MAP; + private static final Map YAO_MAP; + + + static { + JOINTS_DTO_MAP1 = new HashMap<>(); + MajorJointsDTO dto = new MajorJointsDTO(); + Map questionMap1 = new HashMap<>(); + questionMap1.put(1,"1.肩膀前面锁骨下面凹窝处会不会闷痛、按压疼?"); + questionMap1.put(2,"2.抬手向前举胳膊、抱重物时,肩膀前侧扯着刺痛吗?"); + questionMap1.put(3,"3.胳膊向后背、穿脱套头衫时,肩膀前面牵拉难受吗?"); + dto.setTitle("肩前侧锁骨下方"); + dto.setReport("肩膀前侧肌腱劳损、肩关节前侧滑膜发炎,长期抬手干活、抱重物诱发"); + dto.setMap(questionMap1); + JOINTS_DTO_MAP1.put(1,dto); + MajorJointsDTO dto2 = new MajorJointsDTO(); + dto2.setTitle("肩顶端凸起骨头"); + dto2.setReport("肩峰滑囊炎、肩袖上方肌腱磨损,长期抬手、侧睡压肩引发"); + Map questionMap2 = new HashMap<>(); + questionMap2.put(1,"1.肩膀最顶端那块骨头,一按就酸胀疼吗?"); + questionMap2.put(2,"2.胳膊侧平举、举过头顶时,肩膀顶刺痛卡住吗?"); + questionMap2.put(3,"3.侧卧压着肩膀睡觉,第二天肩顶疼痛感明显加重吗?"); + dto2.setMap(questionMap2); + JOINTS_DTO_MAP1.put(2,dto2); + MajorJointsDTO dto3 = new MajorJointsDTO(); + dto3.setTitle("肩膀外侧三角肌整块"); + dto3.setReport("肩部外侧肌肉劳损、肩袖外侧轻微损伤,单侧负重、长期外展发力导致"); + Map questionMap3 = new HashMap<>(); + questionMap3.put(1,"1.肩膀外侧一大块肌肉经常发酸发沉吗?"); + questionMap3.put(2,"2.向外抬胳膊、拎手提东西,外侧牵拉酸痛吗?"); + questionMap3.put(3,"运动干活后,肩膀外侧发胀,抬胳膊无力吗?"); + dto3.setMap(questionMap3); + JOINTS_DTO_MAP1.put(3,dto3); + + MajorJointsDTO dto4 = new MajorJointsDTO(); + dto4.setTitle("肩膀后侧肩胛骨"); + dto4.setReport("肩后筋膜僵硬、肩关节后侧韧带劳损,含胸驼背、后背内旋动作诱发"); + Map questionMap4 = new HashMap<>(); + questionMap4.put(1,"后背肩膀骨头边缘隐隐拉扯酸胀吗?"); + questionMap4.put(2,"手往后背、反手抓后背腰带,肩膀后侧刺痛吗?"); + questionMap4.put(3,"含胸久坐、低头玩手机,肩后发紧僵硬疼吗?"); + dto4.setMap(questionMap4); + JOINTS_DTO_MAP1.put(4,dto4); + + MajorJointsDTO dto5 = new MajorJointsDTO(); + dto5.setTitle("肩胛骨内侧缝"); + dto5.setReport("肩胛内侧筋膜劳损、菱形肌紧张,长期久坐低头、圆肩驼背造成"); + Map questionMap5 = new HashMap<>(); + questionMap5.put(1,"1.后背两块肩胛骨中间、靠近脖子那条缝酸胀疼吗?"); + questionMap5.put(2,"久坐伏案、低头看手机,肩缝发沉像压了重物吗?"); + questionMap5.put(3,"胳膊向前环抱、含胸,肩内侧牵扯刺痛吗?"); + dto5.setMap(questionMap5); + JOINTS_DTO_MAP1.put(5,dto5); + + MajorJointsDTO dto6 = new MajorJointsDTO(); + dto6.setTitle("腋下肩胛内侧区"); + dto6.setReport("肩峰撞击、长头腱炎症、肩胛下肌损伤"); + Map questionMap6 = new HashMap<>(); + questionMap6.put(1,"后背手腋下深处疼吗?"); + questionMap6.put(2,"屈肘内旋用力腋下酸胀?"); + questionMap6.put(3,"侧卧夹臂睡觉会不会闷痛?"); + dto6.setMap(questionMap6); + JOINTS_DTO_MAP1.put(6,dto6); + } + + //手指 + static { + JOINTS_DTO_MAP2 = new HashMap<>(); + MajorJointsDTO dto = new MajorJointsDTO(); + Map questionMap1 = new HashMap<>(); + questionMap1.put(1,"大拇指整根手指、指关节、根部位置,按压有没有酸胀、刺痛、发硬的感觉?"); + questionMap1.put(2,"频繁划手机、捏东西、开门锁、捏筷子发力时,大拇指会不会扯着疼?"); + questionMap1.put(3,"大拇指弯曲、伸直的时候,有没有卡顿、发僵、活动不顺畅的情况?"); + dto.setTitle("拇指区"); + dto.setReport("拇指腱鞘劳损、拇指关节疲劳、拇指肌腱卡压"); + dto.setMap(questionMap1); + JOINTS_DTO_MAP2.put(1,dto); + MajorJointsDTO dto2 = new MajorJointsDTO(); + dto2.setTitle("食指区"); + dto2.setReport("食指关节劳损、食指腱鞘轻微发炎、指关节筋膜紧张"); + Map questionMap2 = new HashMap<>(); + questionMap2.put(1,"食指整根手指、各个关节按压有没有酸痛、隐痛、刺痛感?"); + questionMap2.put(2,"打字、写字、点屏幕、捏取细小物品时,食指发力会不会牵扯疼痛?"); + questionMap2.put(3,"食指用力弯曲、伸直、单独抬起时,有没有僵硬、扯痛的感觉?"); + dto2.setMap(questionMap2); + JOINTS_DTO_MAP2.put(2,dto2); + MajorJointsDTO dto3 = new MajorJointsDTO(); + dto3.setTitle("中指区"); + dto3.setReport("中指肌腱劳损、指关节压力性疲劳、腱鞘紧张"); + Map questionMap3 = new HashMap<>(); + questionMap3.put(1,"中指各关节、手指整条位置按压,有没有酸胀、压痛的情况?"); + questionMap3.put(2,"握拳发力、拎东西、写字按压、干活用力时,中指会不会牵扯疼?"); + questionMap3.put(3,"中指弯曲伸直、大幅度活动时,有没有发紧、卡顿、不舒服的感觉?"); + dto3.setMap(questionMap3); + JOINTS_DTO_MAP2.put(3,dto3); + + MajorJointsDTO dto4 = new MajorJointsDTO(); + dto4.setTitle("无名指区"); + dto4.setReport("无名指关节劳损、腱鞘循环不畅、手指筋膜紧张"); + Map questionMap4 = new HashMap<>(); + questionMap4.put(1,"无名指整条手指、关节位置按压,有没有隐隐酸痛、发胀的感觉?"); + questionMap4.put(2,"握拳、抓握物品、抬手发力时,无名指会不会跟着牵扯隐痛?"); + questionMap4.put(3,"手指并拢、分开活动时,无名指有没有发紧、活动受限、轻微刺痛?"); + dto4.setMap(questionMap4); + JOINTS_DTO_MAP2.put(4,dto4); + + MajorJointsDTO dto5 = new MajorJointsDTO(); + dto5.setTitle("小指区"); + dto5.setReport("小指腱鞘劳损、小指关节牵拉损伤、末梢循环不畅"); + Map questionMap5 = new HashMap<>(); + questionMap5.put(1,"小拇指整条手指、关节按压,有没有酸痛、刺痛、发麻发木的感觉?"); + questionMap5.put(2,"撑手、趴桌子、手部偏向小指侧用力时,小拇指会不会扯着疼?"); + questionMap5.put(3,"小指弯曲伸直、单独活动时,有没有僵硬、不灵活、牵扯不适?"); + dto5.setMap(questionMap5); + JOINTS_DTO_MAP2.put(5,dto5); + + MajorJointsDTO dto6 = new MajorJointsDTO(); + dto6.setTitle("屈肌总腱鞘区"); + dto6.setReport("手部总腱鞘劳损、掌心筋膜紧张、手指屈肌疲劳,多由双手长期重复抓握、持续发力、受凉僵硬导致,是多手指整体劳损的核心区域"); + Map questionMap6 = new HashMap<>(); + questionMap6.put(1,"手指根部、掌心上方整片位置,按压有没有发紧、发胀、闷痛的感觉?"); + questionMap6.put(2," 用力握拳、持续抓东西、反复屈伸所有手指时,整片区域会不会牵扯疼?"); + questionMap6.put(3,"长时间握鼠标、玩手机、干活后,掌心手指根部会不会发硬、发僵?"); + dto6.setMap(questionMap6); + JOINTS_DTO_MAP2.put(6,dto6); + } + + //腕肘 + static { + WAN_ZHOU_MAP = new HashMap<>(); + MajorJointsDTO dto = new MajorJointsDTO(); + Map questionMap1 = new HashMap<>(); + questionMap1.put(1,"手肘外侧突出的小骨头,一按就酸痛吗?"); + questionMap1.put(2,"拧毛巾、拎重物、拿水杯发力时,外侧骨头扯着刺痛吗?"); + questionMap1.put(3,"长时间打字、拖地、反复抬手,手肘外侧发酸发沉吗?"); + dto.setTitle("手肘外侧骨头凸起"); + dto.setReport("手肘外侧肌腱劳损、网球肘,反复抓握、拧转发力诱发"); + dto.setMap(questionMap1); + WAN_ZHOU_MAP.put(1,dto); + MajorJointsDTO dto2 = new MajorJointsDTO(); + dto2.setTitle("手肘内侧骨头凸起"); + dto2.setReport("手肘内侧肌腱发炎、高尔夫肘,长期屈肘抓握、支撑发力导致"); + Map questionMap2 = new HashMap<>(); + questionMap2.put(1,"手肘内侧凸起骨头按压闷痛吗?"); + questionMap2.put(2,"用力攥拳头、屈肘搬东西,手肘内侧牵扯疼吗?"); + questionMap2.put(3,"长期屈肘玩手机、趴着撑胳膊,内侧酸胀加重吗?"); + dto2.setMap(questionMap2); + WAN_ZHOU_MAP.put(2,dto2); + MajorJointsDTO dto3 = new MajorJointsDTO(); + dto3.setTitle("手肘后侧鹰嘴骨头"); + dto3.setReport("肘后滑囊发炎、胳膊后侧肌腱劳损,长期支撑、完全伸肘发力诱发"); + Map questionMap3 = new HashMap<>(); + questionMap3.put(1,"1.手肘后面凸起那块骨头,撑桌面按压疼吗?"); + questionMap3.put(2,"2.完全伸直、用力向后顶东西,肘后刺痛吗?"); + questionMap3.put(3,"3.长期趴着睡觉、硬桌子撑手肘,后侧发胀红肿吗?"); + dto3.setMap(questionMap3); + WAN_ZHOU_MAP.put(3,dto3); + + MajorJointsDTO dto4 = new MajorJointsDTO(); + dto4.setTitle("手腕外侧"); + dto4.setReport("拇指腱鞘发炎、手腕外侧肌腱劳损,频繁用大拇指发力造成"); + Map questionMap4 = new HashMap<>(); + questionMap4.put(1,"1.手腕靠近大拇指的凸起骨头按压酸胀吗?"); + questionMap4.put(2,"拧瓶盖、抱小孩、反复划手机,这个位置扯着疼吗?"); + questionMap4.put(3,"3.大拇指用力张开、握拳发力,手腕外侧刺痛吗?"); + dto4.setMap(questionMap4); + WAN_ZHOU_MAP.put(4,dto4); + + MajorJointsDTO dto5 = new MajorJointsDTO(); + dto5.setTitle("手腕掌心内侧正中"); + dto5.setReport("腕管受压、手腕内侧筋膜劳损,长期弯曲手腕、持续抓握诱发"); + Map questionMap5 = new HashMap<>(); + questionMap5.put(1,".手掌根手腕内侧窝窝发闷胀痛吗?"); + questionMap5.put(2,"2.长时间屈腕玩手机、握鼠标,手指发麻连带手腕疼吗?"); + questionMap5.put(3,"3.睡觉手腕弯着,早上醒来手指僵硬、发麻吗?"); + dto5.setMap(questionMap5); + WAN_ZHOU_MAP.put(5,dto5); + + MajorJointsDTO dto6 = new MajorJointsDTO(); + dto6.setTitle("手腕内侧"); + dto6.setReport("手腕侧边韧带劳损、尺骨茎突磨损,手腕偏斜负重、撑地发力导致"); + Map questionMap6 = new HashMap<>(); + questionMap6.put(1,"1.手腕靠近小拇指这边骨头按压疼吗?"); + questionMap6.put(2,"2.手掌往小指方向歪、撑地起身,手腕侧边刺痛吗?"); +// questionMap6.put(3,"侧卧夹臂睡觉会不会闷痛?"); + dto6.setMap(questionMap6); + WAN_ZHOU_MAP.put(6,dto6); + + MajorJointsDTO dto7 = new MajorJointsDTO(); + dto7.setTitle("手腕掌心中间整片"); + dto7.setReport("手指屈肌腱劳损、掌心筋膜紧张,长期重复抓握、受凉诱发"); + Map qu7 = new HashMap<>(); + qu7.put(1,"手腕掌心连接手指的整片位置发紧酸胀吗?"); + qu7.put(2,"2.用力握拳、反复屈伸手指,手腕掌心牵扯疼吗?"); + qu7.put(3,"冷水洗手、受凉后,握拳僵硬疼痛感加重吗?"); + dto7.setMap(qu7); + WAN_ZHOU_MAP.put(7,dto7); + } + + //腰 + static { + YAO_MAP = new HashMap<>(); + MajorJointsDTO dto = new MajorJointsDTO(); + Map questionMap1 = new HashMap<>(); + questionMap1.put(1,"肋骨下方、后腰上方这块经常发酸发胀吗?"); + questionMap1.put(2,"2.长时间低头久坐、弯腰干活之后,这里疼得更明显吗?"); + questionMap1.put(3,"3.挺直腰、向后舒展后腰时,这块有拉扯难受的感觉吗?"); + dto.setTitle("上腰段"); + dto.setReport("腰背筋膜上段、后腰浅层肌肉劳损,长期驼背、受凉、扭腰引发代偿酸痛"); + dto.setMap(questionMap1); + YAO_MAP.put(1,dto); + MajorJointsDTO dto2 = new MajorJointsDTO(); + dto2.setTitle("中下腰椎"); + dto2.setReport("腰肌劳损、腰椎关节错位、轻度腰间盘膨出"); + Map questionMap2 = new HashMap<>(); + questionMap2.put(1,"1.腰带对应的后腰位置持续发酸、发疼吗?"); + questionMap2.put(2,"2.弯腰捡东西、久坐刚站起来的一瞬间,后腰会刺痛吗?"); + questionMap2.put(3,"3.用手按压后腰骨头两边,肌肉发硬、一按就疼吗?"); + dto2.setMap(questionMap2); + YAO_MAP.put(2,dto2); + MajorJointsDTO dto3 = new MajorJointsDTO(); + dto3.setTitle("腰骶结合处"); + dto3.setReport("腰底韧带劳损、腰五骶一椎间盘不适,翘腿、拖地、骨盆前倾诱发疼痛"); + Map questionMap3 = new HashMap<>(); + questionMap3.put(1,"1.腰最底下、屁股上方凹进去的地方疼吗?"); + questionMap3.put(2,"久坐、躺床上翻身的时候,这块扯着牵拉疼吗?"); + questionMap3.put(3,"走路久了腰底部发沉,还连带屁股一起酸胀吗?"); + dto3.setMap(questionMap3); + YAO_MAP.put(3,dto3); + + MajorJointsDTO dto4 = new MajorJointsDTO(); + dto4.setTitle("腰椎棘突正中"); + dto4.setReport("后腰中间韧带发炎、长期弓背塌腰造成韧带劳损"); + Map questionMap4 = new HashMap<>(); + questionMap4.put(1,"1.后腰正中间这条骨头,用手按压有痛感吗?"); + questionMap4.put(2,"长时间弯腰,或是刻意向后仰腰时,骨头缝刺痛吗?"); + questionMap4.put(3,"3.睡硬床平躺,后腰中间被硌到后难受加重吗?"); + dto4.setMap(questionMap4); + YAO_MAP.put(4,dto4); + + MajorJointsDTO dto5 = new MajorJointsDTO(); + dto5.setTitle("腰侧方"); + dto5.setReport("腰侧肌肉痉挛、歪坐、高低腿导致单侧腰部代偿劳损"); + Map questionMap5 = new HashMap<>(); + questionMap5.put(1,"1.左右两侧腰窝经常拉扯酸胀吗?"); + questionMap5.put(2,"单侧侧身弯腰、单手提重物时,一边腰扯着疼吗?"); + questionMap5.put(3,"3.长期侧躺睡觉,受压一侧腰部僵硬酸痛吗?"); + dto5.setMap(questionMap5); + YAO_MAP.put(5,dto5); + + MajorJointsDTO dto6 = new MajorJointsDTO(); + dto6.setTitle(" 髋前侧腹股沟"); + dto6.setReport("大腿根胯部肌肉紧张、髋关节前侧滑膜发炎,久蹲、爬坡诱发疼痛"); + Map questionMap6 = new HashMap<>(); + questionMap6.put(1,"大腿根里面凹陷处闷闷胀痛吗?"); + questionMap6.put(2,"2.深蹲、抬腿、久坐起身时,大腿根扯着刺痛吗?"); + questionMap6.put(3,"3.做弓步向前压腿,胯骨前面牵拉难受吗?"); + dto6.setMap(questionMap6); + YAO_MAP.put(6,dto6); + + MajorJointsDTO dto7 = new MajorJointsDTO(); + dto7.setTitle("髋外侧大转子"); + dto7.setReport("胯外侧滑囊发炎、臀部外侧肌肉劳损,长期侧睡、走路外八引发"); + Map questionMap7 = new HashMap<>(); + questionMap7.put(1,"胯外侧突出的那块骨头,轻轻按压就疼吗?"); + questionMap7.put(2,"2.侧躺压住胯骨时,刺痛感会明显加重吗?"); + questionMap7.put(3,"走路、上下台阶,胯外侧酸胀还放射到大腿吗?"); + dto7.setMap(questionMap7); + YAO_MAP.put(7,dto7); + + MajorJointsDTO dto8 = new MajorJointsDTO(); + dto8.setTitle("髋后侧臀深处"); + dto8.setReport("臀部深层肌肉痉挛、坐骨神经受刺激,久坐盘腿诱发不适"); + Map questionMap8 = new HashMap<>(); + questionMap8.put(1,"1.屁股里面深处隐隐胀痛吗?"); + questionMap8.put(2,"2.久坐、跷二郎腿之后,屁股深处一条筋扯着大腿后侧发麻疼吗?"); + questionMap8.put(3,"3.拉伸臀部的时候,深层有明显牵拉痛感吗?"); + dto8.setMap(questionMap8); + YAO_MAP.put(8,dto8); + + } + + @PostMapping("/score") + public ResultData score(HttpServletRequest request,@RequestBody List vos){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + List collect = vos.stream().filter(vo -> vo.getNo() == 3).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(collect)){ + throw new ServiceException("数据错误"); + } + SpeakVO speakVO = collect.get(0); + String join = String.join(",", speakVO.getOptions()); + MobileAppUser appUser = mobileAppUserMapper.selectById(currentUser.getId()); + appUser.setTherapy(join); + mobileAppUserMapper.updateById(appUser); + return ResultData.success(); + } + + @PostMapping("/save4SRating") + public ResultData save4S(HttpServletRequest request,@RequestBody MobileAppUser user){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + MobileAppUser appUser = mobileAppUserMapper.selectById(currentUser.getId()); + appUser.setFoursRating(user.getFoursRating()); + appUser.setEvaluationResult(user.getEvaluationResult()); + mobileAppUserMapper.updateById(appUser); + return ResultData.success(); + } + + @GetMapping("/getRating") + public ResultData getRating(HttpServletRequest request){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + MobileAppUser appUser = mobileAppUserMapper.selectById(currentUser.getId()); + ResultData data = new ResultData<>(); + data.setData(appUser); + data.setCode(200); + return data; + } + + + private Map scoreMap(){ + Map map = new HashMap<>(); + JSONObject one = new JSONObject(); + one.put("A",2); + one.put("B",8); + one.put("C",12); + map.put(1,one); + JSONObject two = new JSONObject(); + two.put("A",0); + two.put("B",4); + two.put("C",15); + map.put(2,two); + + JSONObject three = new JSONObject(); + three.put("A",0); + three.put("B",4); + three.put("C",15); + three.put("D",0); + three.put("E",0); + map.put(2,three); + return map; + } + + @PostMapping("/eightMajorJoints") + public ResultData eightMajorJoints(@RequestBody EightMajorJointsVO vo){ + List records = new ArrayList<>(); + String s = RandomStringUtils.randomNumeric(16); + MajorJointsDTO dto = JOINTS_DTO_MAP1.get(vo.getArea()); + Map map = dto.getMap(); + List joints = vo.getJoints(); + joints.forEach(j -> { + DiaRecord diaRecord = new DiaRecord(); + diaRecord.setPart(vo.getPart()); + diaRecord.setArea(dto.getTitle()); + diaRecord.setQuestion(map.get(j.getNumber())); + diaRecord.setBatchNumber(s); + diaRecord.setResponse(j.getPatientResponse()); + records.add(diaRecord); + }); + diaRecordMapper.insert(records); + return ResultData.success(); + } + + @PostMapping("/getReport") + public ResultData getReport(@RequestBody EightMajorJointsVO vo){ + ResultData data = new ResultData<>(); + data.setCode(200); + switch (vo.getPart()){ + case "肩关节": + MajorJointsDTO dto = JOINTS_DTO_MAP1.get(vo.getArea()); + data.setData(dto.getReport()); + return data; + case "腱鞘指关节": + MajorJointsDTO dto1 = JOINTS_DTO_MAP2.get(vo.getArea()); + data.setData(dto1.getReport()); + return data; + case "腕肘关节": + MajorJointsDTO dto2 = WAN_ZHOU_MAP.get(vo.getArea()); + data.setData(dto2.getReport()); + return data; + case "腰髋关节": + MajorJointsDTO dto3 = YAO_MAP.get(vo.getArea()); + data.setData(dto3.getReport()); + return data; + } + return ResultData.success(); + } + + +} + diff --git a/mobileApp/src/main/java/cn/unizk/controller/RunningController.java b/mobileApp/src/main/java/cn/unizk/controller/RunningController.java new file mode 100644 index 0000000..4f10bfe --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/RunningController.java @@ -0,0 +1,49 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.RunConsultation; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.RunConsultationMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2026/7/15 15:49 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/running") +public class RunningController { + + @Resource + private RunConsultationMapper runConsultationMapper; + + @GetMapping("/getRunConsults") + public Page getRunConsult(@RequestParam("currentPage") Integer currentPage, + @RequestParam("pageSize") Integer pageSize) { + + Page page = new Page<>(currentPage, pageSize); + return runConsultationMapper.selectPage(page, null); + } + + @PostMapping("/getRunConsultByIds") + public RunConsultation getRunConsultByIds(@RequestBody List ids) { + if (CollectionUtils.isEmpty(ids)) { + throw new ServiceException("参数ids不能为空"); + } + List runConsultations = runConsultationMapper.selectByIds(ids); + RunConsultation consultation = new RunConsultation(); + String lesion = runConsultations.stream().map(RunConsultation::getLesion).distinct().collect(Collectors.joining(";")); + consultation.setLesion(lesion); + String conclusion = runConsultations.stream().map(RunConsultation::getConclusion).distinct().collect(Collectors.joining("\n")); + consultation.setConclusion(conclusion); + String plan = runConsultations.stream().map(RunConsultation::getPlan).distinct().collect(Collectors.joining("\n")); + consultation.setPlan(plan); + return consultation; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/SysDictController.java b/mobileApp/src/main/java/cn/unizk/controller/SysDictController.java new file mode 100644 index 0000000..ac3187c --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/SysDictController.java @@ -0,0 +1,40 @@ +package cn.unizk.controller; + +import cn.unizk.entity.po.SysDict; +import cn.unizk.mapper.SysDictMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2026/7/1 16:51 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/dict") +public class SysDictController { + + @Resource + private SysDictMapper sysDictMapper; + + @GetMapping("/getDictByType") + public List getDictByType(@RequestParam("type") String type){ + return sysDictMapper.selectList(new LambdaQueryWrapper() + .eq(SysDict::getDictType,type) + .eq(SysDict::getStatus,"display")); + } + + @GetMapping("/getDictType") + public List getDictType(){ + return sysDictMapper.selectList(null).stream().map(SysDict::getDictType) + .distinct() + .collect(Collectors.toList()); + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/TestController.java b/mobileApp/src/main/java/cn/unizk/controller/TestController.java new file mode 100644 index 0000000..a8bb858 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/TestController.java @@ -0,0 +1,31 @@ +package cn.unizk.controller; + +import cn.unizk.entity.vo.ProvinceTreeVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @Author hao + * @Date 2026/7/9 18:22 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/test") +public class TestController { + + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + + @GetMapping("/") + public List getCity(){ + List cityData = (List) redisTemplate.opsForValue().get("cityData"); + return cityData; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/UserConsultationRecordController.java b/mobileApp/src/main/java/cn/unizk/controller/UserConsultationRecordController.java new file mode 100644 index 0000000..10d40a0 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/UserConsultationRecordController.java @@ -0,0 +1,265 @@ +package cn.unizk.controller; + +import cn.hutool.core.date.DateUtil; +import cn.unizk.entity.dto.ElectronicSignatureDTO; +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.entity.vo.UniPage; +import cn.unizk.entity.vo.UserConsultationRecordVO; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.*; +import cn.unizk.service.DoubaoService; +import cn.unizk.utils.MobileAppSecurityUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.Map; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/8/19 17:30 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/consultation") +@Slf4j +public class UserConsultationRecordController { + + @Resource + private UserConsultationRecordMapper consultationRecordMapper; + @Resource + private DoubaoService doubaoService; + @Resource + private TreatParameterMapper treatParameterMapper; + @Resource + private MobileAppUserMapper mobileAppUserMapper; + @Resource + private PhysioMapper physioMapper; + @Resource + private ClinicWorkLogMapper clinicWorkLogMapper; + + + @PostMapping("/electronicSignature") + public ResultData electronicSignature(@RequestBody ElectronicSignatureDTO dto){ + UserConsultationRecord consultationRecord = consultationRecordMapper.selectById(dto.getId()); + if ("electronicPrescriptionUrl".equals(dto.getName())){ + consultationRecord.setElectronicPrescriptionUrl(dto.getUrl()); + } + if ("coordinatorSignUrl".equals(dto.getName())){ + consultationRecord.setCoordinatorSignUrl(dto.getUrl()); + } + if ("proofreaderSignUrl".equals(dto.getName())){ + consultationRecord.setProofreaderSignUrl(dto.getUrl()); + } + consultationRecordMapper.updateById(consultationRecord); + return ResultData.success(); + } + + @PostMapping("/saveRecord") + public UserConsultationRecordVO saveRecord(HttpServletRequest request, @RequestBody UserConsultationRecordVO vo){ + if (vo.getPattern() == null){ + throw new ServiceException("pattern???"); + } + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + TreatParameter treatParameter = null; + StringBuilder part = new StringBuilder(); + StringBuilder syName = new StringBuilder(); + if (!vo.getPainAreaNo().contains(",")){ + treatParameter = treatParameterMapper.selectById(Integer.parseInt(vo.getPainAreaNo())); + part.append(treatParameter.getPart()); + syName.append(treatParameter.getSymptomsName()); + }else { + String[] split = vo.getPainAreaNo().split(","); + for (String s : split) { + TreatParameter parameter = treatParameterMapper.selectById(Integer.parseInt(s)); + part.append(parameter.getPart()).append(";"); + syName.append(parameter.getSymptomsName()).append(";"); + } + } + String s = RandomStringUtils.randomNumeric(10); + String yyyyMMdd = DateUtil.format(new Date(), "yyyyMMdd"); + UserConsultationRecord consultationRecord = new UserConsultationRecord(); + BeanUtils.copyProperties(vo,consultationRecord); + String number = "JK-" + yyyyMMdd + s; + consultationRecord.setBatchNumber(number); + consultationRecord.setUserId(currentUser.getId()); + consultationRecord.setPainArea(part.toString()); + Map cqs = vo.getCqs(); + String one = cqs.get(11); + String two = cqs.get(12); + String three = cqs.get(13); + String four = cqs.get(14); + StringBuilder cb = new StringBuilder(); + if (vo.getPattern() == 1){ + if (one.equals("怕冷,遇冷加重,热敷舒服") || two.equals("膝盖沉重肿胀,阴天积液加重")){ + cb.append("寒湿痹阻型,"); + } + if (one.equals("怕热,局部发热,冷敷舒服")){ + cb.append("湿热瘀阻型,"); + } + if (three.equals("走路、干活后疼得厉害,休息减轻") || four.equals("腰部腿脚无酸软乏力")){ + cb.append("筋脉瘀滞劳损型,"); + } + if (four.equals("经常腰酸腿软,上下楼无力打软腿") && (vo.getPainDuration().equals("一年以上") || vo.getPainDuration().equals("三年以上"))){ + cb.append("肝肾亏虚型"); + } + }else { + String input1 = "患者回答:" + one; + String input2 = "请判断患者回答的内容意思如果是怕冷,遇冷加重,热敷舒服则回复yes;如果是怕热,局部发热,冷敷舒服则回复no;如果都不是则回复false。不要回复其他多余文字"; + String drawConclusion = doubaoService.drawConclusion(input1, input2); + if (drawConclusion.equals("yes")){ + cb.append("寒湿痹阻型,"); + } + if (drawConclusion.equals("no")){ + cb.append("湿热瘀阻型,"); + } + input1 = "患者回答:" + two; + input2 = "请判断患者回答的内容意思如果是膝盖沉重肿胀,阴天积液加重则回复yes;如果不是则回复no。不要回复其他多余文字"; + String yy = doubaoService.drawConclusion(input1, input2); + if (yy.equals("yes")){ + cb.append("寒湿痹阻型,"); + } + input1 = "患者回答:" + three; + input2 = "请判断患者回答的内容意思如果是走路、干活后疼得厉害,休息减轻则回复yes;如果不是则回复no。不要回复其他多余文字"; + String a = doubaoService.drawConclusion(input1, input2); + if (a.equals("yes")){ + cb.append("筋脉瘀滞劳损型,"); + } + input1 = "患者回答:" + four; + input2 = "请判断患者回答的内容意思如果是腰部腿脚无酸软乏力则回复yes;如果是经常腰酸腿软,上下楼无力打软腿则回复no;如果都不是则回复false。不要回复其他多余文字"; + String n = doubaoService.drawConclusion(input1, input2); + if (n.equals("yes")){ + cb.append("筋脉瘀滞劳损型,"); + } + if (n.equals("no")){ + cb.append("肝肾亏虚型"); + } + } + StringBuilder desc = new StringBuilder(); + StringBuilder append = desc.append("患者姓名:").append(vo.getPatientName()).append(",").append("病因:").append(syName) + .append(",").append("疼痛等级:").append(vo.getLevel()).append(",").append("诱发动作:").append(vo.getInducedAction()) + .append(",").append("伴随症状:").append(vo.getSymptoms()).append(",").append("中医诊断:").append(cb); + String input2 = "上述是患者的病痛信息,请你给出禁忌与注意事项,50字左右"; + String taboo = doubaoService.drawConclusion(append.toString(), input2); + MobileAppUser user = mobileAppUserMapper.selectById(currentUser.getId()); + log.info("taboo:{}",taboo); + consultationRecord.setTaboo(taboo); + String drugPrice = getDrugPrice(); + consultationRecord.setDrugPrice(drugPrice); + consultationRecord.setChineseDiagnosis(cb.toString()); + consultationRecord.setWesternDiagnosis(syName.toString()); + consultationRecord.setDepartment("中医科"); + consultationRecord.setPhoneNumber(user.getPhoneNumber()); + consultationRecord.setCreateTime(LocalDate.now()); + consultationRecordMapper.insert(consultationRecord); + UserConsultationRecordVO recordVO = new UserConsultationRecordVO(); + BeanUtils.copyProperties(consultationRecord,recordVO); + recordVO.setClinicalDia(syName.toString()); + int month = DateUtil.month(new Date()) + 1; + int day = DateUtil.thisDayOfMonth(); + String yyyy = DateUtil.format(new Date(), "yyyy"); + String currentTime = yyyy + "年" + month + "月" + day + "日"; + recordVO.setCurrentTime(currentTime); + recordVO.setDrugPrice(drugPrice); + recordVO.setGender(user.getGender()); + recordVO.setAge(user.getAge()); + recordVO.setPhoneNumber(currentUser.getPhoneNumber()); + ClinicWorkLog clinicWorkLog = clinicWorkLogMapper.selectOne(new LambdaQueryWrapper().eq(ClinicWorkLog::getPhoneNumber, user.getPhoneNumber()) + .eq(ClinicWorkLog::getCreateTime, consultationRecord.getCreateTime()) + .orderByDesc(ClinicWorkLog::getId) + .last("limit 1")); + + if (Objects.nonNull(clinicWorkLog)){ + recordVO.setMedicalTreatment(clinicWorkLog.getMedicalTreatment()); + } + return recordVO; + } + + + @PostMapping("/getPrescriptionList") + public Page getPrescriptionList(HttpServletRequest request, @RequestBody UniPage uniPage){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + JkPhysio jkPhysio = physioMapper.selectOne(new LambdaQueryWrapper().eq(JkPhysio::getPhysioTel, currentUser.getPhoneNumber())); + if (Objects.isNull(jkPhysio)){ + throw new ServiceException("暂无理疗师身份信息!"); + } + LambdaQueryWrapper lambdaQueryWrapper = uniPage.buildQueryWrapper(query -> { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(StringUtils.isNotBlank(query.getPatientName()), UserConsultationRecord::getPatientName, query.getPatientName()); + wrapper.orderByDesc(UserConsultationRecord::getCreateTime); + return wrapper; + }); + Page page = (Page) uniPage.getPage(); + return consultationRecordMapper.selectPage(page,lambdaQueryWrapper); + } + + + @GetMapping("/getPrescription") + public UserConsultationRecordVO prescription(@RequestParam("id") Integer id){ + UserConsultationRecord consultationRecord = consultationRecordMapper.selectById(id); + MobileAppUser user = mobileAppUserMapper.selectById(consultationRecord.getUserId()); + ClinicWorkLog clinicWorkLog = clinicWorkLogMapper.selectOne(new LambdaQueryWrapper().eq(ClinicWorkLog::getPhoneNumber, consultationRecord.getPhoneNumber()) + .eq(ClinicWorkLog::getCreateTime, consultationRecord.getCreateTime()) + .orderByDesc(ClinicWorkLog::getId) + .last("limit 1")); + UserConsultationRecordVO vo = new UserConsultationRecordVO(); + BeanUtils.copyProperties(consultationRecord,vo); + int month = DateUtil.month(new Date()) + 1; + int day = DateUtil.thisDayOfMonth(); + String yyyy = DateUtil.format(new Date(), "yyyy"); + String currentTime = yyyy + "年" + month + "月" + day + "日"; + vo.setCurrentTime(currentTime); + vo.setAge(user.getAge()); + vo.setGender(user.getGender()); + vo.setClinicalDia(consultationRecord.getWesternDiagnosis()); + if (Objects.nonNull(clinicWorkLog)){ + vo.setMedicalTreatment(clinicWorkLog.getMedicalTreatment()); + } + return vo; + } + + + @PostMapping("/getOwnPrescriptionList") + public Page getOwnPrescriptionList(HttpServletRequest request,@RequestBody UniPage uniPage){ + MobileAppUser currentUser = MobileAppSecurityUtil.getCurrentUser(request); + if (Objects.isNull(currentUser)){ + throw new ServiceException(401,"登录已过期"); + } + Page page = (Page) uniPage.getPage(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(UserConsultationRecord::getUserId,currentUser.getId()); + wrapper.orderByDesc(UserConsultationRecord::getCreateTime); + return consultationRecordMapper.selectPage(page,wrapper); + } + + /*@GetMapping("/getOwnPrescription") + public UserConsultationRecordVO getOwnPrescription(@RequestParam("id") Integer id){ + + }*/ + + private String getDrugPrice(){ + while (true){ + String s = RandomStringUtils.randomNumeric(3); + if (!s.startsWith("0")){ + return s; + } + } + } +} diff --git a/mobileApp/src/main/java/cn/unizk/controller/XunFeiAiController.java b/mobileApp/src/main/java/cn/unizk/controller/XunFeiAiController.java new file mode 100644 index 0000000..55731a4 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/controller/XunFeiAiController.java @@ -0,0 +1,500 @@ +package cn.unizk.controller; + +import cn.unizk.cache.LocalCache; +import cn.unizk.entity.po.*; +import cn.unizk.entity.vo.*; +import cn.unizk.exception.ServiceException; +import cn.unizk.mapper.DiagnosisTemplateMapper; +import cn.unizk.mapper.StoreAccountMapper; +import cn.unizk.mapper.SysDictMapper; +import cn.unizk.mapper.TreatParameterMapper; +import cn.unizk.service.QuestionService; +import cn.unizk.service.WebTtsWsService; +import cn.unizk.utils.WebIATWS; +import cn.unizk.utils.XfSpeechToTextUtil; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.WebSocket; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.InputStreamResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.security.SignatureException; +import java.time.LocalDateTime; +import java.util.*; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.regex.Pattern; + +/** + * @Author hao + * @Date 2026/6/30 14:13 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/mobileApp/xf") +@Slf4j +public class XunFeiAiController { + + @Value("${xf.appid}") + private String appid; + @Value("${xf.long-sound.keySecret}") + private String longSoundKeySecret; + @Value("${xf.instant.host}") + private String hostUrl; + @Value("${xf.instant.APISecret}") + private String apiSecret; + @Value("${xf.instant.apiKey}") + private String apiKey; + + @Resource + private QuestionService questionService; + @Resource + private StoreAccountMapper accountMapper; + + /*@Resource + private AIAdviceService aiAdviceService;*/ + @Value("${spring.profiles.active}") + private String active; + @Resource + private DiagnosisTemplateMapper diagnosisTemplateMapper; + @Resource + private TreatParameterMapper treatParameterMapper; + + @Resource + private SysDictMapper sysDictMapper; + + + + +/* @PostMapping("/askForAdvice") + public ReplyVo reply(@RequestBody ReplyVo vo){ + *//** + * 如果下一条消息要展示图片,那么vo.setNextContentType(ContentTypeEnum.IMAGE.name()); + * 如果下一条消息要弹出性别选择,那么vo.setNextContentType(ContentTypeEnum.SEX.name()); + * 如果下一条消息要弹出年龄选择,那么vo.setNextContentType(ContentTypeEnum.AGE.name()); + * 如果下一条消息要弹出体重选择,那么vo.setNextContentType(ContentTypeEnum.WEIGHT.name()); + *//* + vo.setType("AI"); + return aiAdviceService.reply(vo); + }*/ + + +/* @PostMapping("/saveConversation") + public ReplyVo saveConversation(@RequestBody List>> conversation, @RequestParam("openid") String openid){ +// List> maps = new ArrayList<>(); +// for (Map> stringListMap : conversation) { +// for (Map.Entry> stringListEntry : stringListMap.entrySet()) { +// List value = stringListEntry.getValue(); +// Map map = new HashMap<>(); +// map.put(stringListEntry.getKey(),value.get(0)); +// maps.add(map); +// } +// } + + return aiAdviceService.saveConversation(conversation,openid); + }*/ + + /* + * + * 获取诊疗报告 诊疗师,暂放 + * */ + + /* @PostMapping("/getTreatmentPlan") + public JSONObject getTreatmentPlan(@RequestBody String sessionId){ + + return aiAdviceService.getTreatmentPlan(sessionId); + }*/ + + + + @GetMapping("/getQustion/{sort}") + public QuestionVo getQuestion(@PathVariable("sort") int sort){ + Question question = questionService.getOne(new LambdaQueryWrapper().eq(Question::getSort, sort)); + JSONObject options = JSONObject.parseObject(question.getOptions()); + List> optionValues = new ArrayList<>(); + options.forEach((k,v) -> { + Map item = new HashMap<>(); + item.put("value", (String) v); + item.put("text", (String) v); + optionValues.add(item); + }); + QuestionVo questionVo = new QuestionVo(); + BeanUtils.copyProperties(question,questionVo); + questionVo.setOptionValues(optionValues); + return questionVo; + } + + @PostMapping("/speechToText") + public String speechToText(@RequestParam("file") MultipartFile file) { + log.info("originalFilename:{}",file.getOriginalFilename()); + log.info("name={},size={}",file.getName(),file.getSize()); + try { + String s = XfSpeechToTextUtil.xfSpeechToText(file, appid, longSoundKeySecret); + JSONObject res = JSONObject.parseObject(s); + String orderId = res.getJSONObject("content").getString("orderId"); + String result = XfSpeechToTextUtil.getResult(orderId, appid, longSoundKeySecret); + String parseStr = newJavaLfasr(result).toString(); + log.info("解析后的内容:{}",parseStr); + return parseStr; + } catch (SignatureException | InterruptedException | IOException e) { + e.printStackTrace(); + throw new ServiceException("语音识别失败"); + } + } + + @PostMapping("/instantToText/{openid}") + public String instantToText(@RequestParam("file") MultipartFile file,@PathVariable("openid") String openid){ + try { + String authUrl = WebIATWS.getAuthUrl(hostUrl, apiKey, apiSecret); + OkHttpClient client = new OkHttpClient.Builder().build(); + //将url中的 schema http://和https://分别替换为ws:// 和 wss:// + String url = authUrl.toString().replace("http://", "ws://").replace("https://", "wss://"); + //System.out.println(url); + Request request = new Request.Builder().url(url).build(); + // System.out.println(client.newCall(request).execute()); + //System.out.println("url===>" + url); + WebSocket webSocket = client.newWebSocket(request, new WebIATWS(file,openid)); + long end = System.currentTimeMillis() + 5 * 1000; + while (true){ + String msg = LocalCache.MESSAGE_QUEUE.get(openid); + if (StringUtils.isNotBlank(msg)){ + LocalCache.MESSAGE_QUEUE.remove(openid); + return msg; + }else { + if (System.currentTimeMillis() > end){ + throw new ServiceException("翻译结果等待超时"); + } + log.info("等待翻译结果返回"); + Thread.sleep(1000); + } + } + }catch (Exception e){ + e.printStackTrace(); + throw new ServiceException("语音识别失败"); + } + } + + /** + * 中文识别大模型API + * @param file + * @param openid + * @return + */ + @PostMapping("/iatModelToText") + public String iatModelToText(@RequestParam("file") MultipartFile file,@RequestParam("openid") String openid){ + /*try { + String authUrl = IatModelZh.getAuthUrl(); + OkHttpClient client = new OkHttpClient.Builder().build(); + String url = authUrl.toString().replace("http://", "ws://").replace("https://", "wss://"); + Request request = new Request.Builder().url(url).build(); + InputStream inputStream = file.getInputStream(); + IatModelZh iatModelZh = new IatModelZh(file, openid); + WebSocket webSocket = client.newWebSocket(request, iatModelZh); + if (!iatModelZh.getLatch().await(10, TimeUnit.SECONDS)) { + throw new ServiceException("大模型听写 超时"); + } + String s = LocalCache.IAT_MODEL_MSG_QUEUE.get(openid); + LocalCache.IAT_MODEL_MSG_QUEUE.remove(openid); + return s; + }catch (Exception e){ + log.error("大模型语音识别失败",e); + throw new ServiceException("大模型语音识别失败"); + }*/ + return instantToText(file,openid); + } + + private static StringBuilder newJavaLfasr(String a){ + StringBuilder result= new StringBuilder(); + JSONObject jsonObject = JSON.parseObject(a); + String str = jsonObject.getJSONObject("content").getString("orderResult"); + JSONArray json = JSONObject.parseObject(str).getJSONArray("lattice2"); + int length = json.size(); + for(int i = 0;i sessions, @PathVariable("openid") String openid){ + Long maxSessionId = userSessionService.findMaxSessionId(openid); + sessions.forEach(userSession -> { + userSession.setOpenid(openid); +// userSession.setSessionId(maxSessionId == null ? 1 : maxSessionId+1); + userSession.setSessionTime(LocalDateTime.now()); + }); + userSessionService.saveBatch(sessions); + return ResultData.success(); + }*/ + + @PostMapping("/manualAnswer") + public ResultData manualAnswer(@RequestBody ManualAnswerVO vo){ + ResultData data = new ResultData<>(); + data.setCode(200); + if (Objects.isNull(vo) || StringUtils.isBlank(vo.getMessage())){ + return ResultData.success(); + } + String message = vo.getMessage(); + if ("1".equals(vo.getNumber())){ + if (message.contains("膝")){ + data.setData("true"); + return data; + } + data.setData("false"); + return data; + }else if ("4".equals(vo.getNumber()) || "2".equals(vo.getNumber())){ + if (message.contains("不对")){ + data.setData("false"); + return data; + } + if (message.contains("不是")){ + data.setData("false"); + return data; + } + if (message.contains("对")){ + data.setData("true"); + return data; + } + if (message.contains("是")){ + data.setData("true"); + return data; + } + data.setData("false"); + return data; + }else if ("3".equals(vo.getNumber())){ + message = parseStrTen(message); + message = message.replace("和",",").replace("还有",",").replace("跟",",").replace("号",",").replace("区",","); + List list = new ArrayList<>(); + if (containsStandaloneOne(message)){ + list.add("1"); + } + if (containsStandaloneTwo(message)){ + list.add("2"); + } + if (containsStandaloneThree(message)){ + list.add("3"); + } + if (message.contains("4")){ + list.add("4"); + } + if (message.contains("5")){ + list.add("5"); + } + if (message.contains("6")){ + list.add("6"); + } + if ( message.contains("7")){ + list.add("7"); + } + if (message.contains("8")){ + list.add("8"); + } + if (message.contains("9")){ + list.add("9"); + } + if (message.contains("10")){ + list.add("10"); + } + if (message.contains("11")){ + list.add("11"); + } + if (message.contains("12")){ + list.add("12"); + } + if (message.contains("13")){ + list.add("13"); + } + if (CollectionUtils.isNotEmpty(list)){ + String collect = String.join(",", list); + data.setData(collect); + return data; + }else { + data.setData("false"); + return data; + } + }else { + List list = new ArrayList<>(); + if (message.contains("一") || message.contains("1")){ + list.add("1"); + } + if (message.contains("二") || message.contains("2")){ + list.add("2"); + } + if (message.contains("三") || message.contains("3")){ + list.add("3"); + } + if (message.contains("四") || message.contains("4")){ + list.add("4"); + } + if (message.contains("五") || message.contains("5")){ + list.add("5"); + } + if (message.contains("六") || message.contains("6")){ + list.add("6"); + } + if (CollectionUtils.isNotEmpty(list)){ + String join = String.join(",", list); + data.setData(join); + return data; + }else { + data.setData("false"); + return data; + } + } + } + + @PostMapping("/answer") + public ResultData answer(@RequestBody QuestionAnswerVO vo){ + ResultData data = new ResultData<>(); + data.setCode(200); + return data; + } + + private boolean containsStandaloneOne(String str) { + if (str == null) { + return false; + } + return Pattern.compile("\\b1\\b").matcher(str).find(); + } + private boolean containsStandaloneTwo(String str) { + if (str == null) { + return false; + } + return Pattern.compile("\\b2\\b").matcher(str).find(); + } + private boolean containsStandaloneThree(String str) { + if (str == null) { + return false; + } + return Pattern.compile("\\b3\\b").matcher(str).find(); + } + + private String parseStrTen(String msg){ + if (msg == null){ + return msg; + } + String s = msg; + + if (msg.contains("十一") || msg.contains("十二") || msg.contains("十三")){ + s = msg.replace("十一", "11").replace("十二", "12").replace("十三", "13"); + }else { + if (msg.contains("十")){ + s = msg.replace("十","10"); + } + } + if (msg.contains("一")){ + s = s.replace("一","1"); + } + if (msg.contains("二")){ + s = s.replace("二","2"); + } + if (msg.contains("三")){ + s = s.replace("三","3"); + } + if (msg.contains("四")){ + s = s.replace("四","4"); + } + if (msg.contains("五")){ + s = s.replace("五","5"); + } + if (msg.contains("六")){ + s = s.replace("六","6"); + } + if (msg.contains("七")){ + s = s.replace("七","7"); + } + if (msg.contains("八")){ + s = s.replace("八","8"); + } + if (msg.contains("九")){ + s = s.replace("九","9"); + } + return s; + } + + @GetMapping("/toVoice") + public ResponseEntity toVoice(@RequestParam("text") String text){ + SysDict sysDict = sysDictMapper.selectOne(new LambdaQueryWrapper().eq(SysDict::getDictType, "xf_voice")); + if (sysDict == null || "0".equals(sysDict.getDictValue())){ + return ResponseEntity.ok(null); + } + File tempFile = null; + File dir; + try { + if ("dev".equals(active)){ + dir = new File("D:\\code\\temp"); + }else { + dir = new File("/opt/jkzyjava/temp"); + } + dir.mkdirs(); + tempFile = File.createTempFile("temp", ".mp3",dir); + String filePath = tempFile.getAbsolutePath(); + CountDownLatch latch = new CountDownLatch(1); + WebTtsWsService.tts(text,filePath,latch); + if (!latch.await(10, TimeUnit.SECONDS)) { + throw new ServiceException("TTS 超时"); + } + + byte[] audioData = Files.readAllBytes(tempFile.toPath()); + InputStreamResource resource = new InputStreamResource(new ByteArrayInputStream(audioData)); + return ResponseEntity.ok() + .contentType(MediaType.parseMediaType("audio/mpeg")) + .header(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=\"speech.mp3\"") + .body(resource); + } catch (Exception e) { + log.error("文字转语音发生异常",e); + throw new ServiceException("服务异常"); + }finally { + if (tempFile != null){ + File file = tempFile; + new Thread(() -> { + try { + Thread.sleep(5000); + log.info("删除临时文件"); + file.delete(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + log.warn("删除临时文件线程被中断"); + e.printStackTrace(); + } + }).start(); + } + } + } + + @GetMapping("/addTreat") + public boolean addTreat(){ + List diagnosisTemplates = diagnosisTemplateMapper.selectList(null); + for (DiagnosisTemplate diagnosisTemplate : diagnosisTemplates) { + TreatParameter treatParameter = new TreatParameter(); + treatParameter.setSymptomsName(diagnosisTemplate.getLocation()); + treatParameterMapper.insert(treatParameter); + } + return true; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/interceptor/MobileAppLoginInterceptor.java b/mobileApp/src/main/java/cn/unizk/interceptor/MobileAppLoginInterceptor.java new file mode 100644 index 0000000..b6f2e11 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/interceptor/MobileAppLoginInterceptor.java @@ -0,0 +1,66 @@ +package cn.unizk.interceptor; + +import cn.unizk.MobileAppConstant; +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.entity.vo.ResultData; +import cn.unizk.mapper.MobileAppUserMapper; +import cn.unizk.utils.MobileJwtUtil; +import cn.unizk.utils.ServletUtils; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/6/30 11:24 + * @Version 1.0 + **/ +@Component +public class MobileAppLoginInterceptor implements HandlerInterceptor { + + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + @Resource + private MobileAppUserMapper userMapper; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + String token = request.getHeader("mobile-t"); + if (StringUtils.isBlank(token)){ + toRes(response,401); + return false; + } + String phoneNumber = MobileJwtUtil.parsePlaintext(token); + MobileAppUser mobileAppUser = (MobileAppUser) redisTemplate.opsForValue().get(MobileAppConstant.CACHE_TOKEN_PREFIX + phoneNumber); + if (Objects.isNull(mobileAppUser)){ + toRes(response,403); + return false; + } + return true; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + + } + + private void toRes(HttpServletResponse response,Integer statusCode){ + ResultData data = new ResultData(); + data.setCode(statusCode); + data.setMessage("Authentication failed"); + ServletUtils.renderString(response, JSONObject.toJSONString(data)); + } + +} diff --git a/mobileApp/src/main/java/cn/unizk/mapper/FileMapper.java b/mobileApp/src/main/java/cn/unizk/mapper/FileMapper.java new file mode 100644 index 0000000..e6f7a06 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/mapper/FileMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.SysFile; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface FileMapper extends BaseMapper { +} diff --git a/mobileApp/src/main/java/cn/unizk/mapper/JkProductMapper.java b/mobileApp/src/main/java/cn/unizk/mapper/JkProductMapper.java new file mode 100644 index 0000000..f5568fd --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/mapper/JkProductMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.JkProduct; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface JkProductMapper extends BaseMapper { +} diff --git a/mobileApp/src/main/java/cn/unizk/mapper/MobilePhysioMapper.java b/mobileApp/src/main/java/cn/unizk/mapper/MobilePhysioMapper.java new file mode 100644 index 0000000..4dc596e --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/mapper/MobilePhysioMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.JkPhysio; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface MobilePhysioMapper extends BaseMapper { +} diff --git a/mobileApp/src/main/java/cn/unizk/mapper/MobileStoreMapper.java b/mobileApp/src/main/java/cn/unizk/mapper/MobileStoreMapper.java new file mode 100644 index 0000000..cf1bac1 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/mapper/MobileStoreMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.JkStore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface MobileStoreMapper extends BaseMapper { +} diff --git a/mobileApp/src/main/java/cn/unizk/mapper/PhysioMapper.java b/mobileApp/src/main/java/cn/unizk/mapper/PhysioMapper.java new file mode 100644 index 0000000..eceaeb4 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/mapper/PhysioMapper.java @@ -0,0 +1,12 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.JkPhysio; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Author hao + * @Date 2026/7/1 18:42 + * @Version 1.0 + **/ +public interface PhysioMapper extends BaseMapper { +} diff --git a/mobileApp/src/main/java/cn/unizk/mapper/ProductCarouselMapper.java b/mobileApp/src/main/java/cn/unizk/mapper/ProductCarouselMapper.java new file mode 100644 index 0000000..756a134 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/mapper/ProductCarouselMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.ProductCarousel; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface ProductCarouselMapper extends BaseMapper { +} diff --git a/mobileApp/src/main/java/cn/unizk/mapper/QuestionMapper.java b/mobileApp/src/main/java/cn/unizk/mapper/QuestionMapper.java new file mode 100644 index 0000000..9707479 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/mapper/QuestionMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.Question; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface QuestionMapper extends BaseMapper { +} diff --git a/mobileApp/src/main/java/cn/unizk/mapper/SysDictMapper.java b/mobileApp/src/main/java/cn/unizk/mapper/SysDictMapper.java new file mode 100644 index 0000000..885a31b --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/mapper/SysDictMapper.java @@ -0,0 +1,7 @@ +package cn.unizk.mapper; + +import cn.unizk.entity.po.SysDict; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface SysDictMapper extends BaseMapper { +} diff --git a/mobileApp/src/main/java/cn/unizk/pay/PayStrategy.java b/mobileApp/src/main/java/cn/unizk/pay/PayStrategy.java new file mode 100644 index 0000000..18d108d --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/pay/PayStrategy.java @@ -0,0 +1,9 @@ +package cn.unizk.pay; + +import cn.unizk.pay.dto.BasePayResponse; +import cn.unizk.pay.dto.PayBaseRequest; + +public interface PayStrategy { + + R pay(T param); +} diff --git a/mobileApp/src/main/java/cn/unizk/pay/enums/PayChannelEnum.java b/mobileApp/src/main/java/cn/unizk/pay/enums/PayChannelEnum.java new file mode 100644 index 0000000..fa989b7 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/pay/enums/PayChannelEnum.java @@ -0,0 +1,32 @@ +package cn.unizk.pay.enums; + +public enum PayChannelEnum { + WECHAT("微信支付","T_MINIAPP"), + ALIPAY("支付宝支付","A_NATIVE"); + + private String description; + private String tradeType; + + PayChannelEnum(){} + + PayChannelEnum(String description,String tradeType){ + this.description = description; + this.tradeType = tradeType; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getTradeType() { + return tradeType; + } + + public void setTradeType(String tradeType) { + this.tradeType = tradeType; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/pay/enums/PaySceneEnum.java b/mobileApp/src/main/java/cn/unizk/pay/enums/PaySceneEnum.java new file mode 100644 index 0000000..7dc9754 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/pay/enums/PaySceneEnum.java @@ -0,0 +1,50 @@ +package cn.unizk.pay.enums; + +import cn.unizk.exception.BusinessException; +import cn.unizk.pay.handler.PaySceneHandler; +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; + +@Getter +public enum PaySceneEnum { + + HGJ_PAY("10000","好关节预约下单","hGJPayHandler"), + SHOPPING_CART_PAY("20000","购物车下单支付","shoppingCartPayHandler"), + RECHARGE_PAY("30000","充值支付","rechargePayHandler"), + SCAN_TO_POWER_ON_PAY("40000","扫码开机支付","scanToPowerOnHandler"), + GOLF_SERVICE_PAY("50000","高尔夫服务套餐支付","golfServicePayHandler"), + COURSE_PAY("60000","视频课程购买支付","coursePayHandler"), + ACTIVE_MEMBER_PAY("70000","开通会员","activeMemberPayHandler"), + PRODUCT_PAY("80000","商品购买","productPayHandler"); + + + private String code; + private String description; + private String paySceneHandlerName; + + PaySceneEnum(){} + + PaySceneEnum(String code,String description){ + this.code = code; + this.description = description; + } + + PaySceneEnum(String code,String description,String paySceneHandlerName){ + this.code = code; + this.description = description; + this.paySceneHandlerName = paySceneHandlerName; + } + + public static String getHandlerNameByCode(String code){ + if (StringUtils.isBlank(code)){ + throw new BusinessException("code 不能为空"); + } + for (PaySceneEnum sceneEnum : PaySceneEnum.values()) { + if (code.equals(sceneEnum.getCode())){ + return sceneEnum.paySceneHandlerName; + } + } + throw new RuntimeException("无此类型的枚举"); + } + +} diff --git a/mobileApp/src/main/java/cn/unizk/pay/factory/PaySceneFactory.java b/mobileApp/src/main/java/cn/unizk/pay/factory/PaySceneFactory.java new file mode 100644 index 0000000..372a186 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/pay/factory/PaySceneFactory.java @@ -0,0 +1,42 @@ +package cn.unizk.pay.factory; + +import cn.unizk.exception.BusinessException; +import cn.unizk.pay.enums.PaySceneEnum; +import cn.unizk.pay.handler.PaySceneHandler; +import cn.unizk.pay.handler.ScanToPowerOnHandler; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Author hao + * @Date 2026/7/2 17:23 + * @Version 1.0 + **/ +@Component +@Slf4j +public class PaySceneFactory { + + final private Map paySceneMap; + + @Autowired + public PaySceneFactory(Map paySceneMap){ + this.paySceneMap = paySceneMap; + } + + + public PaySceneHandler getPaySceneHandler(String sceneCode){ + String handlerName = PaySceneEnum.getHandlerNameByCode(sceneCode); + List codes = Arrays.stream(PaySceneEnum.values()).map(PaySceneEnum::getCode).collect(Collectors.toList()); + if (!codes.contains(sceneCode)){ + throw new BusinessException("No PaySceneHandler of this type exists"); + } + return paySceneMap.get(handlerName); + + } +} diff --git a/mobileApp/src/main/java/cn/unizk/pay/handler/ActiveMemberPayHandler.java b/mobileApp/src/main/java/cn/unizk/pay/handler/ActiveMemberPayHandler.java new file mode 100644 index 0000000..831fa0e --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/pay/handler/ActiveMemberPayHandler.java @@ -0,0 +1,115 @@ +package cn.unizk.pay.handler; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.unizk.entity.dto.PlaceOrderCommonDTO; +import cn.unizk.entity.po.MobileOrder; +import cn.unizk.enums.OrderStatus; +import cn.unizk.enums.OrderTypeEnum; +import cn.unizk.exception.BusinessException; +import cn.unizk.mapper.MobileOrderMapper; +import cn.unizk.pay.dto.ActiveMemberPayParam; +import cn.unizk.pay.dto.BasePayResponse; +import cn.unizk.pay.dto.PayBaseRequest; +import cn.unizk.pay.enums.PayChannelEnum; +import cn.unizk.pay.enums.PaySceneEnum; +import cn.unizk.properties.HuiFuVendorProperties; +import cn.unizk.utils.HFSignUtil; +import cn.unizk.utils.HttpUtil; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/7/9 15:59 + * @Version 1.0 + **/ +@Component +@Slf4j +public class ActiveMemberPayHandler extends PaySceneHandler { + + @Resource + private HuiFuVendorProperties vendorProperties; + @Resource + private MobileOrderMapper mobileOrderMapper; + + @Override + public R scenePay(ActiveMemberPayParam param) { + if (param.getPayChannel().equals(PayChannelEnum.WECHAT.name()) && param.getStep() == 1){ + BasePayResponse basePayResponse = new BasePayResponse(); + MobileOrder mobileOrder = new MobileOrder(); + String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr(); + mobileOrder.setOrderId(snowflakeNextIdStr); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrder.setDescription(PaySceneEnum.ACTIVE_MEMBER_PAY.getDescription()); + BigDecimal price = new BigDecimal(param.getActualPayPrice()); + price = price.setScale(2, RoundingMode.DOWN); + mobileOrder.setTotalPrice(price); + mobileOrder.setStatus(OrderStatus.unpaid.name()); + mobileOrder.setCreateTime(LocalDateTime.now()); + mobileOrderMapper.insert(mobileOrder); + basePayResponse.setOrderId(snowflakeNextIdStr); + return (R) basePayResponse; + } + log.info("param={}",param); + String now = DateUtil.format(new Date(), "yyyyMMdd"); + BigDecimal price = new BigDecimal(param.getActualPayPrice()); + price = price.setScale(2, RoundingMode.DOWN); + PlaceOrderCommonDTO dto = new PlaceOrderCommonDTO(); + dto.setPrice(price.toString()); + dto.setReqDate(now); + String reqSeqId = HFSignUtil.getReqSeqId(); + dto.setReqSeqId(reqSeqId); + dto.setDescribe(PaySceneEnum.ACTIVE_MEMBER_PAY.getDescription()); + JSONObject commonParams = super.createCommonParams(param,dto); + String res = HttpUtil.doPostJson(vendorProperties.getPayApi(), null, commonParams); + log.info("汇付下单返回:{}", res); + JSONObject response = JSONObject.parseObject(res); + if (response == null) { + throw new BusinessException("下单失败"); + } + JSONObject responseData = response.getJSONObject("data"); + String resp_code = responseData.getString("resp_code"); + if ("00000000".equals(resp_code) || "00000100".equals(resp_code)){ + if (param.getPayChannel().equals(PayChannelEnum.ALIPAY.name())){ + MobileOrder mobileOrder = new MobileOrder(); + String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr(); + mobileOrder.setOrderId(snowflakeNextIdStr); + mobileOrder.setOutTradeNo(reqSeqId); + mobileOrder.setStatus(OrderStatus.unpaid.name()); + mobileOrder.setOrderType(OrderTypeEnum.ACTIVE_MEMBER.getCode()); + mobileOrder.setDescription(PaySceneEnum.ACTIVE_MEMBER_PAY.getDescription()); + mobileOrder.setTotalPrice(price); + mobileOrder.setDeliveryWay("自提"); + mobileOrder.setCreateTime(LocalDateTime.now()); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrderMapper.insert(mobileOrder); + responseData.put("orderId",snowflakeNextIdStr); + }else if (param.getPayChannel().equals(PayChannelEnum.WECHAT.name()) && param.getStep() == 2){ + MobileOrder mobileOrder = mobileOrderMapper.selectById(param.getOrderId()); + if (Objects.isNull(mobileOrder)){ + throw new BusinessException(String.format("orderId:%s不存在",param.getOrderId())); + } + mobileOrder.setOutTradeNo(reqSeqId); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrder.setOrderType(OrderTypeEnum.ACTIVE_MEMBER.getCode()); + mobileOrderMapper.updateById(mobileOrder); + } + return super.createResponse(param.getPayChannel(),responseData); + } + throw new BusinessException("下单失败"); + } + + @Override + public PaySceneEnum getSceneEnum() { + return null; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/pay/handler/CoursePayHandler.java b/mobileApp/src/main/java/cn/unizk/pay/handler/CoursePayHandler.java new file mode 100644 index 0000000..2c6c800 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/pay/handler/CoursePayHandler.java @@ -0,0 +1,129 @@ +package cn.unizk.pay.handler; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.unizk.entity.dto.PlaceOrderCommonDTO; +import cn.unizk.entity.po.MobileOrder; +import cn.unizk.entity.po.MobileOrderItem; +import cn.unizk.enums.OrderStatus; +import cn.unizk.enums.OrderTypeEnum; +import cn.unizk.exception.BusinessException; +import cn.unizk.mapper.MobileOrderItemMapper; +import cn.unizk.mapper.MobileOrderMapper; +import cn.unizk.pay.dto.BasePayResponse; +import cn.unizk.pay.dto.CoursePayParam; +import cn.unizk.pay.dto.PayBaseRequest; +import cn.unizk.pay.enums.PayChannelEnum; +import cn.unizk.pay.enums.PaySceneEnum; +import cn.unizk.properties.HuiFuVendorProperties; +import cn.unizk.utils.HFSignUtil; +import cn.unizk.utils.HttpUtil; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/7/7 17:01 + * @Version 1.0 + **/ +@Component +@Slf4j +public class CoursePayHandler extends PaySceneHandler { + + @Resource + private HuiFuVendorProperties vendorProperties; + @Resource + private MobileOrderMapper mobileOrderMapper; + @Resource + private MobileOrderItemMapper mobileOrderItemMapper; + + @Override + public R scenePay(CoursePayParam param) { + if (param.getPayChannel().equals(PayChannelEnum.WECHAT.name()) && param.getStep() == 1){ + BasePayResponse basePayResponse = new BasePayResponse(); + MobileOrder mobileOrder = new MobileOrder(); + String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr(); + mobileOrder.setOrderId(snowflakeNextIdStr); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrder.setCourseId(param.getCourseId()); + mobileOrder.setDescription(PaySceneEnum.COURSE_PAY.getDescription()); + BigDecimal price = new BigDecimal(param.getActualPayPrice()); + price = price.setScale(2, RoundingMode.DOWN); + mobileOrder.setTotalPrice(price); + mobileOrder.setStatus(OrderStatus.unpaid.name()); + mobileOrder.setCreateTime(LocalDateTime.now()); + mobileOrderMapper.insert(mobileOrder); + basePayResponse.setOrderId(snowflakeNextIdStr); + return (R) basePayResponse; + } + log.info("param={}",param); + String now = DateUtil.format(new Date(), "yyyyMMdd"); + BigDecimal price = new BigDecimal(param.getActualPayPrice()); + price = price.setScale(2, RoundingMode.DOWN); + PlaceOrderCommonDTO dto = new PlaceOrderCommonDTO(); + dto.setPrice(price.toString()); + dto.setReqDate(now); + String reqSeqId = HFSignUtil.getReqSeqId(); + dto.setReqSeqId(reqSeqId); + dto.setDescribe(PaySceneEnum.COURSE_PAY.getDescription()); + JSONObject commonParams = super.createCommonParams(param,dto); + String res = HttpUtil.doPostJson(vendorProperties.getPayApi(), null, commonParams); + log.info("汇付下单返回:{}", res); + JSONObject response = JSONObject.parseObject(res); + if (response == null) { + throw new BusinessException("下单失败"); + } + JSONObject responseData = response.getJSONObject("data"); + String resp_code = responseData.getString("resp_code"); + String pay_info = responseData.getString("pay_info"); + log.info("下单返回支付信息pay_info={}",pay_info); + if ("00000000".equals(resp_code) || "00000100".equals(resp_code)){ + if (param.getPayChannel().equals(PayChannelEnum.ALIPAY.name())){ + MobileOrder mobileOrder = new MobileOrder(); + String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr(); + mobileOrder.setOrderId(snowflakeNextIdStr); + mobileOrder.setOutTradeNo(reqSeqId); + mobileOrder.setStatus(OrderStatus.unpaid.name()); + mobileOrder.setOrderType(OrderTypeEnum.COURSE_PAY.getCode()); + mobileOrder.setDescription(param.getGoodDesc()); + mobileOrder.setCourseId(param.getCourseId()); + mobileOrder.setTotalPrice(price); + mobileOrder.setDeliveryWay("自提"); + mobileOrder.setCreateTime(LocalDateTime.now()); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrderMapper.insert(mobileOrder); + /*MobileOrderItem mobileOrderItem = new MobileOrderItem(); + mobileOrderItem.setMobileOrderId(mobileOrder.getOrderId()); + mobileOrderItem.setQuantity(1); + mobileOrderItem.setPrice(price); + mobileOrderItem.setCourseId(param.getCourseId()); + mobileOrderItemMapper.insert(mobileOrderItem);*/ + responseData.put("orderId",snowflakeNextIdStr); + }else if (param.getPayChannel().equals(PayChannelEnum.WECHAT.name()) && param.getStep() == 2){ + MobileOrder mobileOrder = mobileOrderMapper.selectById(param.getOrderId()); + if (Objects.isNull(mobileOrder)){ + throw new BusinessException(String.format("orderId:%s不存在",param.getOrderId())); + } + mobileOrder.setOutTradeNo(reqSeqId); + mobileOrder.setOrderType(OrderTypeEnum.COURSE_PAY.getCode()); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrderMapper.updateById(mobileOrder); + } + return super.createResponse(param.getPayChannel(),responseData); + } + throw new BusinessException("下单失败"); + } + + @Override + public PaySceneEnum getSceneEnum() { + return null; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/pay/handler/GolfServicePayHandler.java b/mobileApp/src/main/java/cn/unizk/pay/handler/GolfServicePayHandler.java new file mode 100644 index 0000000..34b7d78 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/pay/handler/GolfServicePayHandler.java @@ -0,0 +1,113 @@ +package cn.unizk.pay.handler; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.unizk.entity.dto.PlaceOrderCommonDTO; +import cn.unizk.entity.po.MobileOrder; +import cn.unizk.enums.OrderStatus; +import cn.unizk.enums.OrderTypeEnum; +import cn.unizk.exception.BusinessException; +import cn.unizk.mapper.MobileOrderMapper; +import cn.unizk.pay.dto.BasePayResponse; +import cn.unizk.pay.dto.GolfServicePayParam; +import cn.unizk.pay.enums.PayChannelEnum; +import cn.unizk.pay.enums.PaySceneEnum; +import cn.unizk.properties.HuiFuVendorProperties; +import cn.unizk.utils.HFSignUtil; +import cn.unizk.utils.HttpUtil; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/7/9 11:31 + * @Version 1.0 + **/ +@Component +@Slf4j +public class GolfServicePayHandler extends PaySceneHandler { + + @Resource + private HuiFuVendorProperties vendorProperties; + @Resource + private MobileOrderMapper mobileOrderMapper; + + @Override + public R scenePay(GolfServicePayParam param) { + if (param.getPayChannel().equals(PayChannelEnum.WECHAT.name()) && param.getStep() == 1){ + BasePayResponse basePayResponse = new BasePayResponse(); + MobileOrder mobileOrder = new MobileOrder(); + String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr(); + mobileOrder.setOrderId(snowflakeNextIdStr); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrder.setDescription(param.getProjectName()); + BigDecimal price = new BigDecimal(param.getActualPayPrice()); + price = price.setScale(2, RoundingMode.DOWN); + mobileOrder.setTotalPrice(price); + mobileOrder.setStatus(OrderStatus.unpaid.name()); + mobileOrder.setCreateTime(LocalDateTime.now()); + mobileOrderMapper.insert(mobileOrder); + basePayResponse.setOrderId(snowflakeNextIdStr); + return (R) basePayResponse; + } + String now = DateUtil.format(new Date(), "yyyyMMdd"); + BigDecimal price = new BigDecimal(param.getActualPayPrice()); + price = price.setScale(2, RoundingMode.DOWN); + PlaceOrderCommonDTO dto = new PlaceOrderCommonDTO(); + dto.setPrice(price.toString()); + dto.setReqDate(now); + String reqSeqId = HFSignUtil.getReqSeqId(); + dto.setReqSeqId(reqSeqId); + dto.setDescribe(PaySceneEnum.GOLF_SERVICE_PAY.getDescription()); + JSONObject commonParams = super.createCommonParams(param,dto); + String res = HttpUtil.doPostJson(vendorProperties.getPayApi(), null, commonParams); + log.info("汇付下单返回:{}", res); + JSONObject response = JSONObject.parseObject(res); + if (response == null) { + throw new BusinessException("下单失败"); + } + JSONObject responseData = response.getJSONObject("data"); + String resp_code = responseData.getString("resp_code"); + if ("00000000".equals(resp_code) || "00000100".equals(resp_code)){ + if (param.getPayChannel().equals(PayChannelEnum.ALIPAY.name())){ + MobileOrder mobileOrder = new MobileOrder(); + String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr(); + mobileOrder.setOrderId(snowflakeNextIdStr); + mobileOrder.setOutTradeNo(reqSeqId); + mobileOrder.setStatus(OrderStatus.unpaid.name()); + mobileOrder.setOrderType(OrderTypeEnum.GOLF_SERVICE_PAY.getCode()); + mobileOrder.setDescription(param.getProjectName()); + mobileOrder.setTotalPrice(price); + mobileOrder.setDeliveryWay("自提"); + mobileOrder.setCreateTime(LocalDateTime.now()); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrderMapper.insert(mobileOrder); + responseData.put("orderId",snowflakeNextIdStr); + }else if (param.getPayChannel().equals(PayChannelEnum.WECHAT.name()) && param.getStep() == 2){ + MobileOrder mobileOrder = mobileOrderMapper.selectById(param.getOrderId()); + if (Objects.isNull(mobileOrder)){ + throw new BusinessException(String.format("orderId:%s不存在",param.getOrderId())); + } + mobileOrder.setOutTradeNo(reqSeqId); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrder.setOrderType(OrderTypeEnum.GOLF_SERVICE_PAY.getCode()); + mobileOrderMapper.updateById(mobileOrder); + } + return super.createResponse(param.getPayChannel(),responseData); + } + throw new BusinessException("下单失败"); + } + + @Override + public PaySceneEnum getSceneEnum() { + return null; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/pay/handler/HGJPayHandler.java b/mobileApp/src/main/java/cn/unizk/pay/handler/HGJPayHandler.java new file mode 100644 index 0000000..3da2a24 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/pay/handler/HGJPayHandler.java @@ -0,0 +1,122 @@ +package cn.unizk.pay.handler; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.unizk.entity.dto.PlaceOrderCommonDTO; +import cn.unizk.entity.po.MobileOrder; +import cn.unizk.enums.OrderStatus; +import cn.unizk.enums.OrderTypeEnum; +import cn.unizk.exception.BusinessException; +import cn.unizk.mapper.MobileOrderMapper; +import cn.unizk.pay.dto.BasePayResponse; +import cn.unizk.pay.dto.HGJPayParam; +import cn.unizk.pay.enums.PayChannelEnum; +import cn.unizk.pay.enums.PaySceneEnum; +import cn.unizk.properties.HuiFuVendorProperties; +import cn.unizk.utils.HFSignUtil; +import cn.unizk.utils.HttpUtil; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/7/9 10:34 + * @Version 1.0 + **/ +@Component +@Slf4j +public class HGJPayHandler extends PaySceneHandler { + + @Resource + private HuiFuVendorProperties vendorProperties; + @Resource + private MobileOrderMapper mobileOrderMapper; + + @Override + public R scenePay(HGJPayParam param) { + if (param.getPayChannel().equals(PayChannelEnum.WECHAT.name()) && param.getStep() == 1){ + BasePayResponse basePayResponse = new BasePayResponse(); + MobileOrder mobileOrder = new MobileOrder(); + String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr(); + mobileOrder.setOrderId(snowflakeNextIdStr); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrder.setDeviceId(param.getDeviceId()); + mobileOrder.setComboId(param.getComboId()); + mobileOrder.setPhysioId(param.getPhysioId()); + mobileOrder.setStoreId(param.getStoreId()); + mobileOrder.setDescription(PaySceneEnum.HGJ_PAY.getDescription()); + BigDecimal price = new BigDecimal(param.getActualPayPrice()); + price = price.setScale(2, RoundingMode.DOWN); + mobileOrder.setTotalPrice(price); + mobileOrder.setStatus(OrderStatus.unpaid.name()); + mobileOrder.setCreateTime(LocalDateTime.now()); + mobileOrderMapper.insert(mobileOrder); + basePayResponse.setOrderId(snowflakeNextIdStr); + return (R) basePayResponse; + } + log.info("param={}",param); + String now = DateUtil.format(new Date(), "yyyyMMdd"); + BigDecimal price = new BigDecimal(param.getActualPayPrice()); + price = price.setScale(2, RoundingMode.DOWN); + PlaceOrderCommonDTO dto = new PlaceOrderCommonDTO(); + dto.setPrice(price.toString()); + dto.setReqDate(now); + String reqSeqId = HFSignUtil.getReqSeqId(); + dto.setReqSeqId(reqSeqId); + dto.setDescribe(PaySceneEnum.HGJ_PAY.getDescription()); + JSONObject commonParams = super.createCommonParams(param,dto); + String res = HttpUtil.doPostJson(vendorProperties.getPayApi(), null, commonParams); + log.info("汇付下单返回:{}", res); + JSONObject response = JSONObject.parseObject(res); + if (response == null) { + throw new BusinessException("下单失败"); + } + JSONObject responseData = response.getJSONObject("data"); + String resp_code = responseData.getString("resp_code"); + if ("00000000".equals(resp_code) || "00000100".equals(resp_code)){ + if (param.getPayChannel().equals(PayChannelEnum.ALIPAY.name())){ + MobileOrder mobileOrder = new MobileOrder(); + String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr(); + mobileOrder.setOrderId(snowflakeNextIdStr); + mobileOrder.setOutTradeNo(reqSeqId); + mobileOrder.setStatus(OrderStatus.unpaid.name()); + mobileOrder.setOrderType(OrderTypeEnum.HGJ_PAY.getCode()); + mobileOrder.setDescription(PaySceneEnum.HGJ_PAY.getDescription()); + mobileOrder.setTotalPrice(price); + mobileOrder.setDeviceId(param.getDeviceId()); + mobileOrder.setStoreId(param.getStoreId()); + mobileOrder.setPhysioId(param.getPhysioId()); + mobileOrder.setComboId(param.getComboId()); + mobileOrder.setDeliveryWay("自提"); + mobileOrder.setCreateTime(LocalDateTime.now()); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrderMapper.insert(mobileOrder); + responseData.put("orderId",snowflakeNextIdStr); + }else if (param.getPayChannel().equals(PayChannelEnum.WECHAT.name()) && param.getStep() == 2){ + MobileOrder mobileOrder = mobileOrderMapper.selectById(param.getOrderId()); + if (Objects.isNull(mobileOrder)){ + throw new BusinessException(String.format("orderId:%s不存在",param.getOrderId())); + } + mobileOrder.setOutTradeNo(reqSeqId); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrder.setOrderType(OrderTypeEnum.HGJ_PAY.getCode()); + mobileOrderMapper.updateById(mobileOrder); + } + return super.createResponse(param.getPayChannel(),responseData); + } + throw new BusinessException("下单失败"); + } + + @Override + public PaySceneEnum getSceneEnum() { + return null; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/pay/handler/PaySceneHandler.java b/mobileApp/src/main/java/cn/unizk/pay/handler/PaySceneHandler.java new file mode 100644 index 0000000..9efa4ee --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/pay/handler/PaySceneHandler.java @@ -0,0 +1,91 @@ +package cn.unizk.pay.handler; + + +import cn.hutool.core.date.DateUtil; +import cn.unizk.config.WxProperties; +import cn.unizk.entity.dto.PlaceOrderCommonDTO; +import cn.unizk.exception.BusinessException; +import cn.unizk.pay.dto.AlipayResp; +import cn.unizk.pay.dto.BasePayResponse; +import cn.unizk.pay.dto.PayBaseRequest; +import cn.unizk.pay.dto.WechatPayResp; +import cn.unizk.pay.enums.PayChannelEnum; +import cn.unizk.pay.enums.PaySceneEnum; +import cn.unizk.properties.HuiFuVendorProperties; +import cn.unizk.utils.HFSignUtil; +import cn.unizk.utils.HttpUtil; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Date; + +@Slf4j +public abstract class PaySceneHandler { + + @Resource + private HuiFuVendorProperties vendorProperties; + @Resource + private WxProperties wxProperties; + + public abstract R scenePay(T param); + + public abstract PaySceneEnum getSceneEnum(); + + protected JSONObject createCommonParams(T param, PlaceOrderCommonDTO dto){ + JSONObject data = new JSONObject(); + data.put("req_date", dto.getReqDate()); + data.put("req_seq_id",dto.getReqSeqId()); + data.put("huifu_id",vendorProperties.getHuifuId()); + data.put("goods_desc",dto.getDescribe()); + String tradeType = PayChannelEnum.valueOf(param.getPayChannel()).getTradeType(); + data.put("trade_type",tradeType); + if (PayChannelEnum.WECHAT.name().equals(param.getPayChannel())){ + log.info("使用微信支付----使用微信支付"); + JSONObject wxData = new JSONObject(); + wxData.put("sub_appid",wxProperties.getAppid()); + wxData.put("sub_openid",param.getOpenid()); + data.put("wx_data",wxData); + } + data.put("trans_amt",dto.getPrice()); + data.put("notify_url",vendorProperties.getNotifyUrl()); + String sign = HFSignUtil.sign(data, vendorProperties.getPrivateKey()); + JSONObject commonParams = JSONObject.of(); + commonParams.put("sys_id",vendorProperties.getSysId()); + commonParams.put("product_id",vendorProperties.getProductId()); + commonParams.put("sign",sign); + commonParams.put("data",data); + log.info("commonParams={}", commonParams); + return commonParams; + } + + protected R createResponse(String payChannel,JSONObject object){ + if (payChannel.equals(PayChannelEnum.WECHAT.name())){ + JSONObject pay_info = object.getJSONObject("pay_info"); + String orderId = object.getString("orderId"); + WechatPayResp wechatPayResp = new WechatPayResp(); + wechatPayResp.setOrderId(orderId); + String timeStamp = pay_info.getString("timeStamp"); + wechatPayResp.setTimestamp(timeStamp); + String paySign = pay_info.getString("paySign"); + wechatPayResp.setPaySign(paySign); + String aPackage = pay_info.getString("package").split("=")[1]; + wechatPayResp.setPrepayId(aPackage); + String nonceStr = pay_info.getString("nonceStr"); + wechatPayResp.setNonceStr(nonceStr); + return (R) wechatPayResp; + } + if (payChannel.equals(PayChannelEnum.ALIPAY.name())){ + AlipayResp alipayResp = new AlipayResp(); + String qrCode = object.getString("qr_code"); + String orderId = object.getString("orderId"); + alipayResp.setQrCode(qrCode); + alipayResp.setOrderId(orderId); + return (R) alipayResp; + } + throw new BusinessException("不支持的支付渠道!"); + } + +} diff --git a/mobileApp/src/main/java/cn/unizk/pay/handler/ProductPayHandler.java b/mobileApp/src/main/java/cn/unizk/pay/handler/ProductPayHandler.java new file mode 100644 index 0000000..adf7a9d --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/pay/handler/ProductPayHandler.java @@ -0,0 +1,145 @@ +package cn.unizk.pay.handler; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.unizk.entity.dto.PlaceOrderCommonDTO; +import cn.unizk.entity.po.MobileOrder; +import cn.unizk.entity.po.MobileOrderItem; +import cn.unizk.entity.po.MobileUserAddress; +import cn.unizk.enums.OrderStatus; +import cn.unizk.enums.OrderTypeEnum; +import cn.unizk.exception.BusinessException; +import cn.unizk.mapper.MobileOrderItemMapper; +import cn.unizk.mapper.MobileOrderMapper; +import cn.unizk.mapper.MobileUserAddressMapper; +import cn.unizk.pay.dto.BasePayResponse; +import cn.unizk.pay.dto.ProductPayParam; +import cn.unizk.pay.enums.PayChannelEnum; +import cn.unizk.pay.enums.PaySceneEnum; +import cn.unizk.properties.HuiFuVendorProperties; +import cn.unizk.utils.HFSignUtil; +import cn.unizk.utils.HttpUtil; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/7/10 10:24 + * @Version 1.0 + **/ +@Component +@Slf4j +public class ProductPayHandler extends PaySceneHandler { + + @Resource + private HuiFuVendorProperties vendorProperties; + @Resource + private MobileOrderMapper mobileOrderMapper; + @Resource + private MobileUserAddressMapper mobileUserAddressMapper; + @Resource + private MobileOrderItemMapper mobileOrderItemMapper; + + @Override + public R scenePay(ProductPayParam param) { + if (param.getPayChannel().equals(PayChannelEnum.WECHAT.name()) && param.getStep() == 1){ + BasePayResponse basePayResponse = new BasePayResponse(); + MobileOrder mobileOrder = new MobileOrder(); + String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr(); + mobileOrder.setOrderId(snowflakeNextIdStr); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrder.setProductId(param.getProductId()); + mobileOrder.setComboId(param.getComboId()); + mobileOrder.setDescription(PaySceneEnum.PRODUCT_PAY.getDescription()); + BigDecimal price = new BigDecimal(param.getActualPayPrice()); + price = price.setScale(2, RoundingMode.DOWN); + mobileOrder.setTotalPrice(price); + mobileOrder.setStatus(OrderStatus.unpaid.name()); + mobileOrder.setCreateTime(LocalDateTime.now()); + mobileOrderMapper.insert(mobileOrder); + basePayResponse.setOrderId(snowflakeNextIdStr); + return (R) basePayResponse; + } + log.info("param={}",param); + String now = DateUtil.format(new Date(), "yyyyMMdd"); + BigDecimal price = new BigDecimal(param.getActualPayPrice()); + price = price.setScale(2, RoundingMode.DOWN); + PlaceOrderCommonDTO dto = new PlaceOrderCommonDTO(); + dto.setPrice(price.toString()); + dto.setReqDate(now); + String reqSeqId = HFSignUtil.getReqSeqId(); + dto.setReqSeqId(reqSeqId); + dto.setDescribe(PaySceneEnum.PRODUCT_PAY.getDescription()); + JSONObject commonParams = super.createCommonParams(param,dto); + String res = HttpUtil.doPostJson(vendorProperties.getPayApi(), null, commonParams); + log.info("汇付下单返回:{}", res); + JSONObject response = JSONObject.parseObject(res); + if (response == null) { + throw new BusinessException("下单失败"); + } + JSONObject responseData = response.getJSONObject("data"); + String resp_code = responseData.getString("resp_code"); + if ("00000000".equals(resp_code) || "00000100".equals(resp_code)){ + if (param.getPayChannel().equals(PayChannelEnum.ALIPAY.name())){ + MobileOrder mobileOrder = new MobileOrder(); + String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr(); + mobileOrder.setOrderId(snowflakeNextIdStr); + mobileOrder.setOutTradeNo(reqSeqId); + mobileOrder.setProductId(param.getProductId()); + mobileOrder.setComboId(param.getComboId()); + mobileOrder.setDeliveryWay(param.getDeliveryWay()); + MobileUserAddress mobileUserAddress = mobileUserAddressMapper.selectById(param.getAddressId()); + + if ("配送".equals(param.getDeliveryWay())){ + if (Objects.isNull(mobileUserAddress)){ + String msg = String.format("收货地址不存在!addressId: %d",param.getAddressId()); + throw new BusinessException(msg); + } + mobileOrder.setRecipientPhone(mobileUserAddress.getPhone()); + mobileOrder.setRecipientName(mobileUserAddress.getReceiverName()); + mobileOrder.setReceivingAddress(mobileUserAddress.getAddress()); + } + mobileOrder.setStatus(OrderStatus.unpaid.name()); + mobileOrder.setOrderType(OrderTypeEnum.PRODUCT_PAY.getCode()); + mobileOrder.setDescription(PaySceneEnum.PRODUCT_PAY.getDescription()); + mobileOrder.setTotalPrice(price); + mobileOrder.setDeliveryWay("自提"); + mobileOrder.setCreateTime(LocalDateTime.now()); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrderMapper.insert(mobileOrder); + MobileOrderItem orderItem = new MobileOrderItem(); + orderItem.setMobileOrderId(mobileOrder.getOrderId()); + orderItem.setProductId(param.getProductId()); + orderItem.setComboId(param.getComboId()); + orderItem.setPrice(price); + orderItem.setQuantity(param.getQuantity()); + mobileOrderItemMapper.insert(orderItem); + responseData.put("orderId",snowflakeNextIdStr); + }else if (param.getPayChannel().equals(PayChannelEnum.WECHAT.name()) && param.getStep() == 2){ + MobileOrder mobileOrder = mobileOrderMapper.selectById(param.getOrderId()); + if (Objects.isNull(mobileOrder)){ + throw new BusinessException(String.format("orderId:%s不存在",param.getOrderId())); + } + mobileOrder.setOutTradeNo(reqSeqId); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrder.setOrderType(OrderTypeEnum.PRODUCT_PAY.getCode()); + mobileOrderMapper.updateById(mobileOrder); + } + return super.createResponse(param.getPayChannel(),responseData); + } + throw new BusinessException("下单失败"); + } + + @Override + public PaySceneEnum getSceneEnum() { + return null; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/pay/handler/RechargePayHandler.java b/mobileApp/src/main/java/cn/unizk/pay/handler/RechargePayHandler.java new file mode 100644 index 0000000..380750b --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/pay/handler/RechargePayHandler.java @@ -0,0 +1,115 @@ +package cn.unizk.pay.handler; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.unizk.entity.dto.PlaceOrderCommonDTO; +import cn.unizk.entity.po.MobileOrder; +import cn.unizk.enums.OrderStatus; +import cn.unizk.enums.OrderTypeEnum; +import cn.unizk.exception.BusinessException; +import cn.unizk.mapper.MobileOrderMapper; +import cn.unizk.pay.dto.BasePayResponse; +import cn.unizk.pay.dto.PayBaseRequest; +import cn.unizk.pay.dto.RechargePayParam; +import cn.unizk.pay.enums.PayChannelEnum; +import cn.unizk.pay.enums.PaySceneEnum; +import cn.unizk.properties.HuiFuVendorProperties; +import cn.unizk.utils.HFSignUtil; +import cn.unizk.utils.HttpUtil; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/7/7 16:04 + * @Version 1.0 + **/ +@Component +@Slf4j +public class RechargePayHandler extends PaySceneHandler { + + @Resource + private HuiFuVendorProperties vendorProperties; + @Resource + private MobileOrderMapper mobileOrderMapper; + + + @Override + public R scenePay(RechargePayParam param) { + if (param.getPayChannel().equals(PayChannelEnum.WECHAT.name()) && param.getStep() == 1){ + BasePayResponse basePayResponse = new BasePayResponse(); + MobileOrder mobileOrder = new MobileOrder(); + String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr(); + mobileOrder.setOrderId(snowflakeNextIdStr); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrder.setDescription(PaySceneEnum.RECHARGE_PAY.getDescription()); + BigDecimal price = new BigDecimal(param.getActualPayPrice()); + price = price.setScale(2, RoundingMode.DOWN); + mobileOrder.setTotalPrice(price); + mobileOrder.setStatus(OrderStatus.unpaid.name()); + mobileOrder.setCreateTime(LocalDateTime.now()); + mobileOrderMapper.insert(mobileOrder); + basePayResponse.setOrderId(snowflakeNextIdStr); + return (R) basePayResponse; + } + String now = DateUtil.format(new Date(), "yyyyMMdd"); + BigDecimal price = new BigDecimal(param.getActualPayPrice()); + price = price.setScale(2, RoundingMode.DOWN); + PlaceOrderCommonDTO dto = new PlaceOrderCommonDTO(); + dto.setPrice(price.toString()); + dto.setReqDate(now); + String reqSeqId = HFSignUtil.getReqSeqId(); + dto.setReqSeqId(reqSeqId); + dto.setDescribe(PaySceneEnum.RECHARGE_PAY.getDescription()); + JSONObject commonParams = super.createCommonParams(param,dto); + String res = HttpUtil.doPostJson(vendorProperties.getPayApi(), null, commonParams); + log.info("汇付下单返回:{}", res); + JSONObject response = JSONObject.parseObject(res); + if (response == null) { + throw new BusinessException("下单失败"); + } + JSONObject responseData = response.getJSONObject("data"); + String resp_code = responseData.getString("resp_code"); + if ("00000000".equals(resp_code) || "00000100".equals(resp_code)){ + if (param.getPayChannel().equals(PayChannelEnum.ALIPAY.name())){ + MobileOrder mobileOrder = new MobileOrder(); + String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr(); + mobileOrder.setOrderId(snowflakeNextIdStr); + mobileOrder.setOutTradeNo(reqSeqId); + mobileOrder.setStatus(OrderStatus.unpaid.name()); + mobileOrder.setOrderType(OrderTypeEnum.MEMBER_RECHARGE.getCode()); + mobileOrder.setDescription(PaySceneEnum.RECHARGE_PAY.getDescription()); + mobileOrder.setTotalPrice(price); + mobileOrder.setDeliveryWay("自提"); + mobileOrder.setCreateTime(LocalDateTime.now()); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrderMapper.insert(mobileOrder); + responseData.put("orderId",snowflakeNextIdStr); + }else if (param.getPayChannel().equals(PayChannelEnum.WECHAT.name()) && param.getStep() == 2){ + MobileOrder mobileOrder = mobileOrderMapper.selectById(param.getOrderId()); + if (Objects.isNull(mobileOrder)){ + throw new BusinessException(String.format("orderId:%s不存在",param.getOrderId())); + } + mobileOrder.setOutTradeNo(reqSeqId); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrder.setOrderType(OrderTypeEnum.MEMBER_RECHARGE.getCode()); + mobileOrderMapper.updateById(mobileOrder); + } + return super.createResponse(param.getPayChannel(),responseData); + } + throw new BusinessException("下单失败"); + } + + @Override + public PaySceneEnum getSceneEnum() { + return null; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/pay/handler/ScanToPowerOnHandler.java b/mobileApp/src/main/java/cn/unizk/pay/handler/ScanToPowerOnHandler.java new file mode 100644 index 0000000..3d2c867 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/pay/handler/ScanToPowerOnHandler.java @@ -0,0 +1,117 @@ +package cn.unizk.pay.handler; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.unizk.entity.dto.PlaceOrderCommonDTO; +import cn.unizk.entity.po.MobileOrder; +import cn.unizk.enums.OrderStatus; +import cn.unizk.enums.OrderTypeEnum; +import cn.unizk.exception.BusinessException; +import cn.unizk.mapper.MobileOrderMapper; +import cn.unizk.pay.dto.BasePayResponse; +import cn.unizk.pay.dto.PayBaseRequest; +import cn.unizk.pay.dto.ScanToPowerOnPayParam; +import cn.unizk.pay.enums.PayChannelEnum; +import cn.unizk.pay.enums.PaySceneEnum; +import cn.unizk.properties.HuiFuVendorProperties; +import cn.unizk.utils.HFSignUtil; +import cn.unizk.utils.HttpUtil; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/7/2 17:12 + * @Version 1.0 + **/ +@Component +@Slf4j +public class ScanToPowerOnHandler extends PaySceneHandler { + + @Resource + private HuiFuVendorProperties vendorProperties; + @Resource + private MobileOrderMapper mobileOrderMapper; + + @Override + public R scenePay(ScanToPowerOnPayParam param) { + if (param.getPayChannel().equals(PayChannelEnum.WECHAT.name()) && param.getStep() == 1){ + BasePayResponse basePayResponse = new BasePayResponse(); + MobileOrder mobileOrder = new MobileOrder(); + String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr(); + mobileOrder.setOrderId(snowflakeNextIdStr); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrder.setDeviceId(param.getDeviceId()); + mobileOrder.setDescription(PaySceneEnum.SCAN_TO_POWER_ON_PAY.getDescription()); + BigDecimal price = new BigDecimal(param.getActualPayPrice()); + price = price.setScale(2, RoundingMode.DOWN); + mobileOrder.setTotalPrice(price); + mobileOrder.setStatus(OrderStatus.unpaid.name()); + mobileOrder.setCreateTime(LocalDateTime.now()); + mobileOrderMapper.insert(mobileOrder); + basePayResponse.setOrderId(snowflakeNextIdStr); + return (R) basePayResponse; + } + log.info("param={}",param); + String now = DateUtil.format(new Date(), "yyyyMMdd"); + BigDecimal price = new BigDecimal(param.getActualPayPrice()); + price = price.setScale(2, RoundingMode.DOWN); + PlaceOrderCommonDTO dto = new PlaceOrderCommonDTO(); + dto.setPrice(price.toString()); + dto.setReqDate(now); + String reqSeqId = HFSignUtil.getReqSeqId(); + dto.setReqSeqId(reqSeqId); + dto.setDescribe(PaySceneEnum.SCAN_TO_POWER_ON_PAY.getDescription()); + JSONObject commonParams = super.createCommonParams(param,dto); + String res = HttpUtil.doPostJson(vendorProperties.getPayApi(), null, commonParams); + log.info("汇付下单返回:{}", res); + JSONObject response = JSONObject.parseObject(res); + if (response == null) { + throw new BusinessException("下单失败"); + } + JSONObject responseData = response.getJSONObject("data"); + String resp_code = responseData.getString("resp_code"); + if ("00000000".equals(resp_code) || "00000100".equals(resp_code)){ + if (param.getPayChannel().equals(PayChannelEnum.ALIPAY.name())){ + MobileOrder mobileOrder = new MobileOrder(); + String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr(); + mobileOrder.setOrderId(snowflakeNextIdStr); + mobileOrder.setOutTradeNo(reqSeqId); + mobileOrder.setStatus(OrderStatus.unpaid.name()); + mobileOrder.setOrderType(OrderTypeEnum.SCAN_PAY.getCode()); + mobileOrder.setDescription(PaySceneEnum.SCAN_TO_POWER_ON_PAY.getDescription()); + mobileOrder.setTotalPrice(price); + mobileOrder.setDeviceId(param.getDeviceId()); + mobileOrder.setDeliveryWay("自提"); + mobileOrder.setCreateTime(LocalDateTime.now()); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrderMapper.insert(mobileOrder); + responseData.put("orderId",snowflakeNextIdStr); + }else if (param.getPayChannel().equals(PayChannelEnum.WECHAT.name()) && param.getStep() == 2){ + MobileOrder mobileOrder = mobileOrderMapper.selectById(param.getOrderId()); + if (Objects.isNull(mobileOrder)){ + throw new BusinessException(String.format("orderId:%s不存在",param.getOrderId())); + } + mobileOrder.setOutTradeNo(reqSeqId); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrder.setOrderType(OrderTypeEnum.SCAN_PAY.getCode()); + mobileOrderMapper.updateById(mobileOrder); + } + return super.createResponse(param.getPayChannel(),responseData); + } + throw new BusinessException("下单失败"); + } + + @Override + public PaySceneEnum getSceneEnum() { + return PaySceneEnum.SCAN_TO_POWER_ON_PAY; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/pay/handler/ShoppingCartPayHandler.java b/mobileApp/src/main/java/cn/unizk/pay/handler/ShoppingCartPayHandler.java new file mode 100644 index 0000000..b0d4681 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/pay/handler/ShoppingCartPayHandler.java @@ -0,0 +1,162 @@ +package cn.unizk.pay.handler; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.unizk.entity.dto.PlaceOrderCommonDTO; +import cn.unizk.entity.po.MobileOrder; +import cn.unizk.entity.po.MobileOrderItem; +import cn.unizk.entity.po.MobileUserAddress; +import cn.unizk.enums.OrderStatus; +import cn.unizk.enums.OrderTypeEnum; +import cn.unizk.exception.BusinessException; +import cn.unizk.mapper.MobileOrderItemMapper; +import cn.unizk.mapper.MobileOrderMapper; +import cn.unizk.mapper.MobileUserAddressMapper; +import cn.unizk.pay.dto.BasePayResponse; +import cn.unizk.pay.dto.CartPayParam; +import cn.unizk.pay.enums.PayChannelEnum; +import cn.unizk.pay.enums.PaySceneEnum; +import cn.unizk.properties.HuiFuVendorProperties; +import cn.unizk.utils.HFSignUtil; +import cn.unizk.utils.HttpUtil; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + * @Author hao + * @Date 2026/7/10 10:57 + * @Version 1.0 + **/ +@Component +@Slf4j +public class ShoppingCartPayHandler extends PaySceneHandler { + + @Resource + private HuiFuVendorProperties vendorProperties; + @Resource + private MobileOrderMapper mobileOrderMapper; + @Resource + private MobileOrderItemMapper mobileOrderItemMapper; + @Resource + private MobileUserAddressMapper mobileUserAddressMapper; + + @Override + public R scenePay(CartPayParam param) { + if (param.getPayChannel().equals(PayChannelEnum.WECHAT.name()) && param.getStep() == 1){ + BasePayResponse basePayResponse = new BasePayResponse(); + MobileOrder mobileOrder = new MobileOrder(); + String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr(); + mobileOrder.setOrderId(snowflakeNextIdStr); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrder.setDeliveryWay(param.getDeliveryWay()); + MobileUserAddress mobileUserAddress = mobileUserAddressMapper.selectById(param.getAddressId()); + + if ("配送".equals(param.getDeliveryWay())) { + if (Objects.isNull(mobileUserAddress)) { + String msg = String.format("收货地址不存在!addressId: %d", param.getAddressId()); + throw new BusinessException(msg); + } + mobileOrder.setRecipientPhone(mobileUserAddress.getPhone()); + mobileOrder.setRecipientName(mobileUserAddress.getReceiverName()); + mobileOrder.setReceivingAddress(mobileUserAddress.getAddress()); + } + mobileOrder.setStatus(OrderStatus.unpaid.name()); + mobileOrder.setOrderType(OrderTypeEnum.SHOPPING_CART_PAY.getCode()); + mobileOrder.setDescription(PaySceneEnum.SHOPPING_CART_PAY.getDescription()); + mobileOrder.setDeliveryWay("自提"); + mobileOrder.setCreateTime(LocalDateTime.now()); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + BigDecimal price = new BigDecimal(param.getActualPayPrice()); + price = price.setScale(2, RoundingMode.DOWN); + mobileOrder.setTotalPrice(price); + mobileOrder.setStatus(OrderStatus.unpaid.name()); + mobileOrder.setCreateTime(LocalDateTime.now()); + mobileOrderMapper.insert(mobileOrder); + basePayResponse.setOrderId(snowflakeNextIdStr); + return (R) basePayResponse; + } + log.info("param={}", param); + String now = DateUtil.format(new Date(), "yyyyMMdd"); + BigDecimal price = new BigDecimal(param.getActualPayPrice()); + price = price.setScale(2, RoundingMode.DOWN); + PlaceOrderCommonDTO dto = new PlaceOrderCommonDTO(); + dto.setPrice(price.toString()); + dto.setReqDate(now); + String reqSeqId = HFSignUtil.getReqSeqId(); + dto.setReqSeqId(reqSeqId); + dto.setDescribe(PaySceneEnum.SHOPPING_CART_PAY.getDescription()); + JSONObject commonParams = super.createCommonParams(param, dto); + String res = HttpUtil.doPostJson(vendorProperties.getPayApi(), null, commonParams); + log.info("汇付下单返回:{}", res); + JSONObject response = JSONObject.parseObject(res); + if (response == null) { + throw new BusinessException("下单失败"); + } + JSONObject responseData = response.getJSONObject("data"); + String resp_code = responseData.getString("resp_code"); + if ("00000000".equals(resp_code) || "00000100".equals(resp_code)) { + if (param.getPayChannel().equals(PayChannelEnum.ALIPAY.name())){ + MobileOrder mobileOrder = new MobileOrder(); + String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr(); + mobileOrder.setOrderId(snowflakeNextIdStr); + mobileOrder.setOutTradeNo(reqSeqId); + mobileOrder.setDeliveryWay(param.getDeliveryWay()); + MobileUserAddress mobileUserAddress = mobileUserAddressMapper.selectById(param.getAddressId()); + + if ("配送".equals(param.getDeliveryWay())) { + if (Objects.isNull(mobileUserAddress)) { + String msg = String.format("收货地址不存在!addressId: %d", param.getAddressId()); + throw new BusinessException(msg); + } + mobileOrder.setRecipientPhone(mobileUserAddress.getPhone()); + mobileOrder.setRecipientName(mobileUserAddress.getReceiverName()); + mobileOrder.setReceivingAddress(mobileUserAddress.getAddress()); + } + mobileOrder.setStatus(OrderStatus.unpaid.name()); + mobileOrder.setOrderType(OrderTypeEnum.SHOPPING_CART_PAY.getCode()); + mobileOrder.setDescription(PaySceneEnum.SHOPPING_CART_PAY.getDescription()); + mobileOrder.setTotalPrice(price); + mobileOrder.setDeliveryWay("自提"); + mobileOrder.setCreateTime(LocalDateTime.now()); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrderMapper.insert(mobileOrder); + List items = param.getItems(); + if (CollectionUtils.isEmpty(items)){ + throw new BusinessException("购物车商品为空"); + } + for (MobileOrderItem orderItem : items) { + orderItem.setMobileOrderId(mobileOrder.getOrderId()); + } + mobileOrderItemMapper.insert(items); + responseData.put("orderId", snowflakeNextIdStr); + }else if (param.getPayChannel().equals(PayChannelEnum.WECHAT.name()) && param.getStep() == 2){ + MobileOrder mobileOrder = mobileOrderMapper.selectById(param.getOrderId()); + if (Objects.isNull(mobileOrder)){ + throw new BusinessException(String.format("orderId:%s不存在",param.getOrderId())); + } + mobileOrder.setOutTradeNo(reqSeqId); + mobileOrder.setOrderType(OrderTypeEnum.SHOPPING_CART_PAY.getCode()); + mobileOrder.setMobileUserId(param.getMobileAppUserId()); + mobileOrderMapper.updateById(mobileOrder); + } + return super.createResponse(param.getPayChannel(), responseData); + } + throw new BusinessException("下单失败"); + } + + @Override + public PaySceneEnum getSceneEnum() { + return null; + } + +} diff --git a/mobileApp/src/main/java/cn/unizk/pay/service/HFPayService.java b/mobileApp/src/main/java/cn/unizk/pay/service/HFPayService.java new file mode 100644 index 0000000..260633b --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/pay/service/HFPayService.java @@ -0,0 +1,9 @@ +package cn.unizk.pay.service; + +import cn.unizk.pay.dto.BasePayResponse; +import cn.unizk.pay.dto.PayBaseRequest; + +public interface HFPayService { + + R pay(T param); +} diff --git a/mobileApp/src/main/java/cn/unizk/pay/service/impl/AliPayService.java b/mobileApp/src/main/java/cn/unizk/pay/service/impl/AliPayService.java new file mode 100644 index 0000000..6352fe3 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/pay/service/impl/AliPayService.java @@ -0,0 +1,30 @@ +package cn.unizk.pay.service.impl; + +import cn.unizk.pay.dto.BasePayResponse; +import cn.unizk.pay.dto.PayBaseRequest; +import cn.unizk.pay.factory.PaySceneFactory; +import cn.unizk.pay.handler.PaySceneHandler; +import cn.unizk.pay.service.HFPayService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * @Author hao + * @Date 2026/7/3 10:35 + * @Version 1.0 + **/ +@Service("ALIPAY") +@Slf4j +public class AliPayService implements HFPayService { + + @Resource + private PaySceneFactory paySceneFactory; + + @Override + public R pay(T param) { + PaySceneHandler paySceneHandler = paySceneFactory.getPaySceneHandler(param.getSceneCode()); + return (R) paySceneHandler.scenePay(param); + } +} diff --git a/mobileApp/src/main/java/cn/unizk/pay/service/impl/WechatPayService.java b/mobileApp/src/main/java/cn/unizk/pay/service/impl/WechatPayService.java new file mode 100644 index 0000000..c3230d7 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/pay/service/impl/WechatPayService.java @@ -0,0 +1,28 @@ +package cn.unizk.pay.service.impl; + +import cn.unizk.pay.dto.BasePayResponse; +import cn.unizk.pay.dto.PayBaseRequest; +import cn.unizk.pay.factory.PaySceneFactory; +import cn.unizk.pay.handler.PaySceneHandler; +import cn.unizk.pay.service.HFPayService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * @Author hao + * @Date 2026/7/2 17:01 + * @Version 1.0 + **/ +@Service("WECHAT") +public class WechatPayService implements HFPayService { + + @Resource + private PaySceneFactory sceneFactory; + + @Override + public R pay(T param) { + PaySceneHandler paySceneHandler = sceneFactory.getPaySceneHandler(param.getSceneCode()); + return (R) paySceneHandler.scenePay(param); + } +} diff --git a/mobileApp/src/main/java/cn/unizk/pojo/vo/ReportTypeVO2.java b/mobileApp/src/main/java/cn/unizk/pojo/vo/ReportTypeVO2.java new file mode 100644 index 0000000..4cd61d6 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/pojo/vo/ReportTypeVO2.java @@ -0,0 +1,18 @@ +package cn.unizk.pojo.vo; + +import lombok.Data; + +/** + * @Author hao + * @Date 2026/7/1 18:43 + * @Version 1.0 + **/ +@Data +public class ReportTypeVO2 { + + private String code1; + + private String code2; + + private Integer result; +} diff --git a/mobileApp/src/main/java/cn/unizk/properties/HuiFuProperties.java b/mobileApp/src/main/java/cn/unizk/properties/HuiFuProperties.java new file mode 100644 index 0000000..5dc85c6 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/properties/HuiFuProperties.java @@ -0,0 +1,34 @@ +package cn.unizk.properties; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Author hao + * @Date 2026/6/30 11:01 + * @Version 1.0 + **/ +@Getter +@Setter +@Component +@ConfigurationProperties(prefix = "huifu") +public class HuiFuProperties { + + private String huifuId; + + private String payApi; + + private String refundApi; + + private String publicKey; + + private String privateKey; + + private String notifyUrl; + + private String productId; + + private String configureAppletCallbackUrl; +} diff --git a/mobileApp/src/main/java/cn/unizk/properties/HuiFuVendorProperties.java b/mobileApp/src/main/java/cn/unizk/properties/HuiFuVendorProperties.java new file mode 100644 index 0000000..85652c0 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/properties/HuiFuVendorProperties.java @@ -0,0 +1,31 @@ +package cn.unizk.properties; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Author hao + * @Date 2026/6/30 11:07 + * @Version 1.0 + **/ +@ConfigurationProperties(prefix = "huifu-vendor") +@Component +@Getter +@Setter +public class HuiFuVendorProperties { + private String sysId; + + private String huifuId; + + private String publicKey; + + private String privateKey; + + private String productId; + + private String notifyUrl; + + private String payApi; +} diff --git a/mobileApp/src/main/java/cn/unizk/service/DeviceService.java b/mobileApp/src/main/java/cn/unizk/service/DeviceService.java new file mode 100644 index 0000000..dcd071f --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/service/DeviceService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.Device; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface DeviceService extends IService { +} diff --git a/mobileApp/src/main/java/cn/unizk/service/DoubaoService.java b/mobileApp/src/main/java/cn/unizk/service/DoubaoService.java new file mode 100644 index 0000000..ca254d4 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/service/DoubaoService.java @@ -0,0 +1,52 @@ +package cn.unizk.service; + +import com.volcengine.ark.runtime.model.responses.constant.ResponsesConstants; +import com.volcengine.ark.runtime.model.responses.content.InputContentItemText; +import com.volcengine.ark.runtime.model.responses.content.OutputContentItemText; +import com.volcengine.ark.runtime.model.responses.item.ItemEasyMessage; +import com.volcengine.ark.runtime.model.responses.item.ItemOutputMessage; +import com.volcengine.ark.runtime.model.responses.item.MessageContent; +import com.volcengine.ark.runtime.model.responses.request.CreateResponsesRequest; +import com.volcengine.ark.runtime.model.responses.request.ResponsesInput; +import com.volcengine.ark.runtime.model.responses.response.ResponseObject; +import com.volcengine.ark.runtime.service.ArkService; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2026/6/30 18:08 + * @Version 1.0 + **/ +@Service +public class DoubaoService { + + public String drawConclusion(String input1,String input2){ + String apiKey = "ark-9da95e96-cffe-4e7d-afc5-771990873320-24c67"; + // 创建ArkService实例 + ArkService arkService = ArkService.builder().apiKey(apiKey).baseUrl("https://ark.cn-beijing.volces.com/api/v3").build(); + CreateResponsesRequest request = CreateResponsesRequest.builder() + .model("doubao-seed-1-8-251228") + .input(ResponsesInput.builder().addListItem( + ItemEasyMessage.builder().role(ResponsesConstants.MESSAGE_ROLE_USER).content( + MessageContent.builder() + .addListItem(InputContentItemText.builder().text(input1).build()) + .addListItem(InputContentItemText.builder().text(input2).build()) + .build() + ).build() + ).build()) + .build(); + ResponseObject resp = arkService.createResponse(request); + System.out.println(resp); + String result = resp.getOutput().stream() + .filter(item -> item instanceof ItemOutputMessage) + .map(item -> (ItemOutputMessage) item) + .flatMap(msg -> msg.getContent().stream()) + .filter(c -> c instanceof OutputContentItemText) + .map(c -> ((OutputContentItemText) c).getText()) + .findFirst() + .orElse("获取答案失败"); + System.out.println("result="+result); + arkService.shutdownExecutor(); + return result; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/service/JkProductService.java b/mobileApp/src/main/java/cn/unizk/service/JkProductService.java new file mode 100644 index 0000000..0893bf2 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/service/JkProductService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.JkProduct; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface JkProductService extends IService { +} diff --git a/mobileApp/src/main/java/cn/unizk/service/ProductCarouselService.java b/mobileApp/src/main/java/cn/unizk/service/ProductCarouselService.java new file mode 100644 index 0000000..b51ef49 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/service/ProductCarouselService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.ProductCarousel; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface ProductCarouselService extends IService { +} diff --git a/mobileApp/src/main/java/cn/unizk/service/QuestionService.java b/mobileApp/src/main/java/cn/unizk/service/QuestionService.java new file mode 100644 index 0000000..7a57621 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/service/QuestionService.java @@ -0,0 +1,7 @@ +package cn.unizk.service; + +import cn.unizk.entity.po.Question; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface QuestionService extends IService { +} diff --git a/mobileApp/src/main/java/cn/unizk/service/UniCloudClient.java b/mobileApp/src/main/java/cn/unizk/service/UniCloudClient.java new file mode 100644 index 0000000..e8a3fb6 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/service/UniCloudClient.java @@ -0,0 +1,13 @@ +package cn.unizk.service; + +/** + * @Author hao + * @Date 2026/6/30 11:48 + * @Version 1.0 + **/ +public class UniCloudClient { + + public static String getPhoneNumber(String accessToken){ + return "1234567890"; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/service/UserService.java b/mobileApp/src/main/java/cn/unizk/service/UserService.java new file mode 100644 index 0000000..cdf67b8 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/service/UserService.java @@ -0,0 +1,45 @@ +package cn.unizk.service; + +import cn.unizk.MobileAppConstant; +import cn.unizk.entity.po.MobileAppUser; +import cn.unizk.mapper.MobileAppUserMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * @Author hao + * @Date 2026/6/30 11:51 + * @Version 1.0 + **/ +@Service +public class UserService { + + @Resource + private MobileAppUserMapper userMapper; + @Autowired + @Qualifier("kryoRedisTemplate") + private RedisTemplate redisTemplate; + @Value("${token.expireTime}") + private Long expireTime; + + public MobileAppUser userLogin(String phoneNumber){ + MobileAppUser mobileAppUser = userMapper.selectOne(new LambdaQueryWrapper().eq(MobileAppUser::getPhoneNumber, phoneNumber)); + if (Objects.isNull(mobileAppUser)){ + MobileAppUser appUser = new MobileAppUser(); + appUser.setPhoneNumber(phoneNumber); + userMapper.insert(appUser); + redisTemplate.opsForValue().set(MobileAppConstant.CACHE_TOKEN_PREFIX+phoneNumber,appUser,expireTime, TimeUnit.DAYS); + return appUser; + } + redisTemplate.opsForValue().set(MobileAppConstant.CACHE_TOKEN_PREFIX+mobileAppUser.getPhoneNumber(),mobileAppUser,expireTime,TimeUnit.DAYS); + return mobileAppUser; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/service/WebTtsWsService.java b/mobileApp/src/main/java/cn/unizk/service/WebTtsWsService.java new file mode 100644 index 0000000..d298914 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/service/WebTtsWsService.java @@ -0,0 +1,209 @@ +package cn.unizk.service; + +import com.google.gson.Gson; +import okhttp3.HttpUrl; +import org.java_websocket.WebSocket; +import org.java_websocket.client.WebSocketClient; +import org.java_websocket.handshake.ServerHandshake; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.net.URI; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.CountDownLatch; + +/** + * @Author hao + * @Date 2026/6/30 14:27 + * @Version 1.0 + **/ +public class WebTtsWsService { + // 地址与鉴权信息 + public static final String hostUrl = "https://tts-api.xfyun.cn/v2/tts"; + // 均到控制台-语音合成页面获取 + public static final String APPID = "3fa7b7a0"; + public static final String APISecret = "N2Q5Y2NiOTZmNThhODZjYTgxMjg1NjA4"; + public static final String APIKey = "da390c58ef0f2ad8424c3dccc6d458c7"; + // 合成文本 + public static String text = "欢迎来到讯飞开放平台"; + // 合成文本编码格式 + public static final String TTE = "UTF8"; // 小语种必须使用UNICODE编码作为值 + // 发音人参数。到控制台-我的应用-语音合成-添加试用或购买发音人,添加后即显示该发音人参数值,若试用未添加的发音人会报错11200 + public static final String VCN = "x4_yezi"; + // 合成文件存储地址以及名称 + public static final String OUTPUT_FILE_PATH = "D:\\code\\temp\\" + System.currentTimeMillis() + ".mp3"; + // json + public static final Gson gson = new Gson(); + public static volatile boolean wsCloseFlag = false; + + /*public static void main(String[] args) throws Exception { + String wsUrl = getAuthUrl(hostUrl, APIKey, APISecret).replace("https://", "wss://"); + OutputStream outputStream = new FileOutputStream(OUTPUT_FILE_PATH); + websocketWork(wsUrl, outputStream); + }*/ + + public static void tts(String text, String filePath, CountDownLatch latch) throws Exception { + WebTtsWsService.text = text; + OutputStream outputStream = new FileOutputStream(filePath); + String wsUrl = getAuthUrl(hostUrl, APIKey, APISecret).replace("https://", "wss://"); + websocketWork(wsUrl,outputStream,latch); + } + + + // Websocket方法 + private static void websocketWork(String wsUrl, OutputStream outputStream,CountDownLatch latch) { + try { + URI uri = new URI(wsUrl); + WebSocketClient webSocketClient = new WebSocketClient(uri) { + @Override + public void onOpen(ServerHandshake serverHandshake) { + System.out.println("ws建立连接成功..."); + } + + @Override + public void onMessage(String text) { +// System.out.println("本次转换的内容是:"+ text); + JsonParse myJsonParse = gson.fromJson(text, JsonParse.class); + if (myJsonParse.code != 0) { + System.out.println("发生错误,错误码为:" + myJsonParse.code); + System.out.println("本次请求的sid为:" + myJsonParse.sid); + } + if (myJsonParse.data != null) { + try { + byte[] textBase64Decode = Base64.getDecoder().decode(myJsonParse.data.audio); + outputStream.write(textBase64Decode); + outputStream.flush(); + } catch (Exception e) { + e.printStackTrace(); + } + if (myJsonParse.data.status == 2) { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + System.out.println("本次请求的sid==>" + myJsonParse.sid); + System.out.println("合成成功,文件保存路径为==>" + OUTPUT_FILE_PATH); + // 可以关闭连接,释放资源 + wsCloseFlag = true; + latch.countDown(); + } + } + } + + @Override + public void onClose(int i, String s, boolean b) { + System.out.println("ws链接已关闭,本次请求完成..."); + } + + @Override + public void onError(Exception e) { + System.out.println("发生错误 " + e.getMessage()); + } + }; + // 建立连接 + webSocketClient.connect(); + while (!webSocketClient.getReadyState().equals(WebSocket.READYSTATE.OPEN)) { + //System.out.println("正在连接..."); + Thread.sleep(100); + } + MyThread webSocketThread = new MyThread(webSocketClient); + webSocketThread.start(); + } catch (Exception e) { + System.out.println(e.getMessage()); + } + } + + // 线程来发送音频与参数 + static class MyThread extends Thread { + WebSocketClient webSocketClient; + + public MyThread(WebSocketClient webSocketClient) { + this.webSocketClient = webSocketClient; + } + + public void run() { + System.out.println("多线程发送文字内容------"); + wsCloseFlag = false; + String requestJson;//请求参数json串 + try { + requestJson = "{\n" + + " \"common\": {\n" + + " \"app_id\": \"" + APPID + "\"\n" + + " },\n" + + " \"business\": {\n" + + " \"aue\": \"lame\",\n" + + " \"sfl\": 1,\n" + + " \"tte\": \"" + TTE + "\",\n" + + " \"ent\": \"intp65\",\n" + + " \"vcn\": \"" + VCN + "\",\n" + + " \"pitch\": 50,\n" + + " \"speed\": 39\n" + + " },\n" + + " \"data\": {\n" + + " \"status\": 2,\n" + + " \"text\": \"" + Base64.getEncoder().encodeToString(text.getBytes(StandardCharsets.UTF_8)) + "\"\n" + + //" \"text\": \"" + Base64.getEncoder().encodeToString(TEXT.getBytes("UTF-16LE")) + "\"\n" + + " }\n" + + "}"; + webSocketClient.send(requestJson); + // 等待服务端返回完毕后关闭 + while (!wsCloseFlag) { + Thread.sleep(200); + } + webSocketClient.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + // 鉴权方法 + public static String getAuthUrl(String hostUrl, String apiKey, String apiSecret) throws Exception { + URL url = new URL(hostUrl); + // 时间 + SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US); + format.setTimeZone(TimeZone.getTimeZone("GMT")); + String date = format.format(new Date()); + // 拼接 + String preStr = "host: " + url.getHost() + "\n" + + "date: " + date + "\n" + + "GET " + url.getPath() + " HTTP/1.1"; + //System.out.println(preStr); + // SHA256加密 + Mac mac = Mac.getInstance("hmacsha256"); + SecretKeySpec spec = new SecretKeySpec(apiSecret.getBytes(StandardCharsets.UTF_8), "hmacsha256"); + mac.init(spec); + byte[] hexDigits = mac.doFinal(preStr.getBytes(StandardCharsets.UTF_8)); + // Base64加密 + String sha = Base64.getEncoder().encodeToString(hexDigits); + // 拼接 + String authorization = String.format("api_key=\"%s\", algorithm=\"%s\", headers=\"%s\", signature=\"%s\"", apiKey, "hmac-sha256", "host date request-line", sha); + // 拼接地址 + HttpUrl httpUrl = Objects.requireNonNull(HttpUrl.parse("https://" + url.getHost() + url.getPath())).newBuilder().// + addQueryParameter("authorization", Base64.getEncoder().encodeToString(authorization.getBytes(StandardCharsets.UTF_8))).// + addQueryParameter("date", date).// + addQueryParameter("host", url.getHost()).// + build(); + + return httpUrl.toString(); + } + + //返回的json结果拆解 + class JsonParse { + int code; + String sid; + Data data; + } + + class Data { + int status; + String audio; + } +} diff --git a/mobileApp/src/main/java/cn/unizk/service/impl/DeviceServiceImpl.java b/mobileApp/src/main/java/cn/unizk/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..c9f3cd3 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/service/impl/DeviceServiceImpl.java @@ -0,0 +1,16 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.Device; +import cn.unizk.mapper.DeviceMapper; +import cn.unizk.service.DeviceService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2026/6/30 14:38 + * @Version 1.0 + **/ +@Service +public class DeviceServiceImpl extends ServiceImpl implements DeviceService { +} diff --git a/mobileApp/src/main/java/cn/unizk/service/impl/JkProductServiceImpl.java b/mobileApp/src/main/java/cn/unizk/service/impl/JkProductServiceImpl.java new file mode 100644 index 0000000..a39c06d --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/service/impl/JkProductServiceImpl.java @@ -0,0 +1,16 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.JkProduct; +import cn.unizk.mapper.JkProductMapper; +import cn.unizk.service.JkProductService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2026/6/30 16:03 + * @Version 1.0 + **/ +@Service +public class JkProductServiceImpl extends ServiceImpl implements JkProductService { +} diff --git a/mobileApp/src/main/java/cn/unizk/service/impl/ProductCarouselServiceImpl.java b/mobileApp/src/main/java/cn/unizk/service/impl/ProductCarouselServiceImpl.java new file mode 100644 index 0000000..0208c0d --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/service/impl/ProductCarouselServiceImpl.java @@ -0,0 +1,16 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.ProductCarousel; +import cn.unizk.mapper.ProductCarouselMapper; +import cn.unizk.service.ProductCarouselService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2026/6/30 16:10 + * @Version 1.0 + **/ +@Service +public class ProductCarouselServiceImpl extends ServiceImpl implements ProductCarouselService { +} diff --git a/mobileApp/src/main/java/cn/unizk/service/impl/QuestionServiceImpl.java b/mobileApp/src/main/java/cn/unizk/service/impl/QuestionServiceImpl.java new file mode 100644 index 0000000..c5f95cf --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/service/impl/QuestionServiceImpl.java @@ -0,0 +1,16 @@ +package cn.unizk.service.impl; + +import cn.unizk.entity.po.Question; +import cn.unizk.mapper.QuestionMapper; +import cn.unizk.service.QuestionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @Author hao + * @Date 2026/6/30 14:18 + * @Version 1.0 + **/ +@Service +public class QuestionServiceImpl extends ServiceImpl implements QuestionService { +} diff --git a/mobileApp/src/main/java/cn/unizk/utils/HFSignUtil.java b/mobileApp/src/main/java/cn/unizk/utils/HFSignUtil.java new file mode 100644 index 0000000..6180ba2 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/utils/HFSignUtil.java @@ -0,0 +1,76 @@ +package cn.unizk.utils; + +import cn.hutool.core.date.DateUtil; +import cn.unizk.exception.ServiceException; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.RandomStringUtils; + +import java.nio.charset.StandardCharsets; +import java.security.KeyFactory; +import java.security.PrivateKey; +import java.security.Signature; +import java.security.spec.PKCS8EncodedKeySpec; +import java.util.Base64; +import java.util.Date; +import java.util.TreeMap; + +/** + * @Author hao + * @Date 2026/7/2 10:45 + * @Version 1.0 + **/ +@Slf4j +public class HFSignUtil { + + /** + * RSA私钥签名:签名方式SHA256WithRSA + * @param data 待签名字符串 + * @param privateKeyBase64 私钥(Base64编码) + * @return 签名byte[] + * @throws ServiceException + */ + public static String sign(String data, String privateKeyBase64) { + // Base64 --> Key + try { + byte[] bytes = Base64.getDecoder().decode(privateKeyBase64); + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes); + KeyFactory keyFactory; + keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(keySpec); + // Sign + Signature signature = Signature.getInstance("SHA256WithRSA"); + signature.initSign(privateKey); + signature.update(data.getBytes(StandardCharsets.UTF_8)); + return Base64.getEncoder().encodeToString(signature.sign()); + } catch (Exception e) { + log.error("签名异常",e); + throw new ServiceException("签名异常"); + } + } + + public static String sign(JSONObject object, String privateKeyStr) { + TreeMap treeMap = JSONObject.parseObject(object.toString(), TreeMap.class); + JSONObject signBody = new JSONObject(treeMap); + // Base64 --> Key + try { + byte[] bytes = Base64.getDecoder().decode(privateKeyStr); + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes); + KeyFactory keyFactory; + keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(keySpec); + // Sign + Signature signature = Signature.getInstance("SHA256WithRSA"); + signature.initSign(privateKey); + signature.update(signBody.toString().getBytes(StandardCharsets.UTF_8)); + return Base64.getEncoder().encodeToString(signature.sign()); + } catch (Exception e) { + log.error("签名异常",e); + throw new ServiceException("签名异常"); + } + } + + public static String getReqSeqId(){ + return DateUtil.format(new Date(),"yyyyMMddHHmmss") + RandomStringUtils.randomNumeric(18); + } +} diff --git a/mobileApp/src/main/java/cn/unizk/utils/MobileAppSecurityUtil.java b/mobileApp/src/main/java/cn/unizk/utils/MobileAppSecurityUtil.java new file mode 100644 index 0000000..5863db8 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/utils/MobileAppSecurityUtil.java @@ -0,0 +1,52 @@ +package cn.unizk.utils; + +import cn.unizk.MobileAppConstant; +import cn.unizk.entity.po.MobileAppUser; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +/** + * @Author hao + * @Date 2026/6/30 14:52 + * @Version 1.0 + **/ +@Component +public class MobileAppSecurityUtil { + + @Resource(name = "kryoRedisTemplate") + private RedisTemplate kryoRedisTemplate; + + private static MobileAppSecurityUtil instance; + + @PostConstruct + private void init() { + instance = this; + } + + + private MobileAppSecurityUtil() {} + + /** + * 静态方法,推荐的调用方式 + */ + public static MobileAppUser getCurrentUser(String token) { + if (instance == null) { + throw new IllegalStateException("JkSecurityUtil 未初始化"); + } + String phoneNumber = MobileJwtUtil.parsePlaintext(token); + return (MobileAppUser) instance.kryoRedisTemplate.opsForValue().get(MobileAppConstant.CACHE_TOKEN_PREFIX + phoneNumber); + } + + public static MobileAppUser getCurrentUser(HttpServletRequest request){ + if (instance == null) { + throw new IllegalStateException("JkSecurityUtil 未初始化"); + } + String token = request.getHeader(MobileAppConstant.REQUEST_TOKEN_HEADER); + String phoneNumber = MobileJwtUtil.parsePlaintext(token); + return (MobileAppUser) instance.kryoRedisTemplate.opsForValue().get(MobileAppConstant.CACHE_TOKEN_PREFIX + phoneNumber); + } +} diff --git a/mobileApp/src/main/java/cn/unizk/utils/MobileJwtUtil.java b/mobileApp/src/main/java/cn/unizk/utils/MobileJwtUtil.java new file mode 100644 index 0000000..6021b48 --- /dev/null +++ b/mobileApp/src/main/java/cn/unizk/utils/MobileJwtUtil.java @@ -0,0 +1,67 @@ +package cn.unizk.utils; + +import cn.unizk.exception.ServiceException; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.JwtException; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import io.jsonwebtoken.security.Keys; +import lombok.extern.slf4j.Slf4j; + +import javax.crypto.SecretKey; +import java.nio.charset.StandardCharsets; +import java.util.Date; + +/** + * @Author hao + * @Date 2026/6/30 11:30 + * @Version 1.0 + **/ +@Slf4j +public class MobileJwtUtil { + private static final long TTL = 30 * 24 * 60 * 60 * 1000L; + +// private static final SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS512); + + private static final String secretKey = "F8YlTp0TlknHG2arQBTxHhZox7tRpbJYYH0vLDOHuH6K276X9ntadC9ZLv5FNOq6X5E4bgPRv2AumgjDav2Vi2WVW8M845E8EAyvEJGFietkXTnbbfhCGa70kUVA2cnD"; + private static final SecretKey key = Keys.hmacShaKeyFor(secretKey.getBytes(StandardCharsets.UTF_8)); + + private MobileJwtUtil() {} + + /** + * 生成 token + * @param plaintext 明文 + * @return token 字符串 + */ + public static String generateToken(String plaintext) { + //使用自定义的secretKey,但长度必须大于512bit(64字节),否则会报错 +// SecretKey key = Keys.hmacShaKeyFor(secretKey.getBytes(StandardCharsets.UTF_8)); + Date now = new Date(); + return Jwts.builder() + .setSubject(plaintext) // 手机号放在 sub 字段 + .setIssuedAt(now) // 签发时间 + .setExpiration(new Date(now.getTime() + TTL)) + .signWith(key, SignatureAlgorithm.HS512) + .compact(); + } + + /** + * 从 token 解析出手机号 + * @param token token + * @return 手机号;如果 token 无效(过期、篡改、格式错误)返回 null + */ + public static String parsePlaintext(String token) { + try { + Claims body = Jwts.parserBuilder() + .setSigningKey(key) + .build() + .parseClaimsJws(token) + .getBody(); + return body.getSubject(); + } catch (JwtException e) { + log.info("token解析失败"); + throw new ServiceException(401,"token无效"); + } + } + +} diff --git a/mobileApp/src/main/resources/application-dev.yml b/mobileApp/src/main/resources/application-dev.yml new file mode 100644 index 0000000..a134fcf --- /dev/null +++ b/mobileApp/src/main/resources/application-dev.yml @@ -0,0 +1,80 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + druid: + url: jdbc:mysql://139.9.2.195:3306/uni_ai_doctor?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true + username: unizk + password: Unizk@2025 + + redis: + port: 6379 + host: 139.9.2.195 + username: + password: Unizk@2025.Jkzy + database: 0 + lettuce: + pool: + max-active: 8 + max-idle: 6 + min-idle: 2 + max-wait: -1ms + shutdown-timeout: 360 + timeout: 5000 + + +huifu: + huifuId: 6666000179463008 + payApi: https://api.huifu.com/v3/trade/payment/jspay + refundApi: https://api.huifu.com/v3/trade/payment/scanpay/refund + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3IcOEDMBOiHaa5dLsPWVVx+9yE/VEGjRSVZFUAospbCEhGDimE7UEL8ecXwbG9AN5k8yX+Ltj6zaeLIt3KgxbX5/4pnrOoPqFhtaoNuQrwl8/9/rkgGkoksH9e//mRan2+TjbHLKXWZKUduksaoWw4VehOx0nxE+wx7Bk7/VQAegnrDz4z/8zEd2Mcm51THceHJ5wVoMoXvo5e8nhUUAFJeHtlI5jxC85lK6kz2UNhGQ7Kutc7sBzK1U/mi29j/iStN3Z0fzND7+nRfgWPu4b0cKNnNwlIaGiabFTbpVZyV8LTg1BandmHJLNUUJyrc/s3W72VFUdp+BwgoERDcEwwIDAQAB + privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDchw4QMwE6Idprl0uw9ZVXH73IT9UQaNFJVkVQCiylsISEYOKYTtQQvx5xfBsb0A3mTzJf4u2PrNp4si3cqDFtfn/imes6g+oWG1qg25CvCXz/3+uSAaSiSwf17/+ZFqfb5ONscspdZkpR26SxqhbDhV6E7HSfET7DHsGTv9VAB6CesPPjP/zMR3YxybnVMdx4cnnBWgyhe+jl7yeFRQAUl4e2UjmPELzmUrqTPZQ2EZDsq61zuwHMrVT+aLb2P+JK03dnR/M0Pv6dF+BY+7hvRwo2c3CUhoaJpsVNulVnJXwtODUFqd2Ycks1RQnKtz+zdbvZUVR2n4HCCgRENwTDAgMBAAECggEAbFWAaB7WVHt69G3fxi/uzF0Qe04UijojzhYueLJ22nKLtwhtaIsZDJ0G1JM2MgSUP3badVZig7lTngVSGFsb5QFGy8f3Ucip/3AypmEWg5ZyrLSQ4ioieYPIhl3/P3Jsxc58lrMRjK6KhgoTrx+yjRyAoWYTqGztWydJy05q8UekdbIn9K2Dq0294hHbarCjB3C/3SXX4xniEbDtVBTdjP81731gxnM2HJ98GDrvUf5MDrX4SdExvCYV0P0mU8uaRPK8ylWCmtsEuMxKupFUFePJNZdyG+P/RZs6CbgUgJyYUzKlOyeWH8KwQF1FLntipkIPlJ+uVkdwK2eDD6bzWQKBgQDylFiSnlFy0fwXSpWHDnDgukaLYxm2GNWaPyg0f2IqK/368o/Xu4TWOPuknR6ngeiJZz3SVA/kFeCz3+UxtDlbUheoSkkbo0cZg8PaKx875gE97oCHgRkaPS4l44kmu1ZwOMgfZDQPrLZMEbAfjqvMEa7ci5kXk1quOGeSJRIg3QKBgQDoumM2dZ+RxYxtxB2k1kJJIndZX3hhVyMfDIh5TwHHKNml1poa/s+aoT27BZgiM8snLR55xk4cQ59kr9Yic9Oa4seECsrAgP8mbB6eC/y7lRDZDFjJvHXl6a1ePo+hBlYarL83AUMIE1/SfZrdyM5yRmp3+cwHkKVpAQuiEXOSHwKBgEDkpn0ylR9eRU4FydKDbnbv3gdTz4EDS8EjvCGvIheeBSeo1AomQ/b673auAZFWE1sOn18w1b9yitYTw0B0shNX9rQyizQ1jcOpmC848fYYJaTntMKLKqf2Te4c3Ifb/devmPms2LCIx4u5/5+xjwvcfybIwX+pD80jkbFq8VqRAoGBAKulTKdN+XK6EOikTHjWzezCzuPL1i105yJvS/isnNMW/e+iZ+ahKN0TL0RQy/Pt31f1nxSRfeq6tUS9q2Gdq+QAfsaUbxWsDoN4GtzWWoC/YL20rYecyBfaUVPBMI3C7p6d6inXdGjwYSwOF7qb8Ce4Z641PpYVyOm5K6tM08BhAoGBALNkfH3ZPImRKN19bGcHAtrzoDMFAAQrhjyMr9aUpMGLoAjxh1U2pYbj1y0e03ArUT/TRzOXNbHuST82tDZEarVSF8RmU8DNUAHSI9dmtXPtgeKpG8TNyP5q3VnJEHdSRZVLb5pGfZuo3tegsHwZF/oCGK+GHD/fhmSFB04GPJon + notifyUrl: https://peaktcm.com/applet/huifuPay/callback + productId: EDUSTD + configureAppletCallbackUrl: https://peaktcm.com/applet/huifuPay/configureAppletCallback + + +huifu-vendor: + sysId: 6666000188069628 + huifuId: 6666000188735389 + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0uJDRMFj1xoQCJbReVaNdiqjL9vdKolMzWKe2vMhZwkBlgQMpaqtHqNKNCn3DPL/7ugPUNzj4PLr3PSR4DK+TBOOa3xRuKLt3s2x6wouVNpiRRglUzh5OgciXXYPPl7QGu2YlJZ9F7ikiaD7KG9PJI7oidbA7lQ4qMcIGlSBUF4l3TeoOpad0zLs41IRJJPIMKPf5Jj9HS/1Tggcn7f36h1l4JWpTRyfB8HyF66IHzA3mQa5yskUHf1LLuO0hxtIfy9Ua+xJYqEWD334xaMzauZQsLM98d1Pj7I1YRvzNohabpCJqO1wF6PDB3rqdLarAZagN/JhYIHHGXMBGfQZxwIDAQAB + privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDS4kNEwWPXGhAIltF5Vo12KqMv290qiUzNYp7a8yFnCQGWBAylqq0eo0o0KfcM8v/u6A9Q3OPg8uvc9JHgMr5ME45rfFG4ou3ezbHrCi5U2mJFGCVTOHk6ByJddg8+XtAa7ZiUln0XuKSJoPsob08kjuiJ1sDuVDioxwgaVIFQXiXdN6g6lp3TMuzjUhEkk8gwo9/kmP0dL/VOCByft/fqHWXglalNHJ8HwfIXrogfMDeZBrnKyRQd/Usu47SHG0h/L1Rr7ElioRYPffjFozNq5lCwsz3x3U+PsjVhG/M2iFpukImo7XAXo8MHeup0tqsBlqA38mFggccZcwEZ9BnHAgMBAAECggEABRZaQxVbQDwruNlSklfJL9mVeDkYm8cWKDpB1MxauO6ZsDHG0FROutd7mciNYi2WiP/mJrA9exbBI+JuhncS6ijqnaMxIYAktuRFb4MeXQOrrTkI5XoOSp0Tcie/9GQ7JvsmXCdJO0JEDeHpTS9qPFqKN5ELtHQprcCnbGMvf23KyqOFx71Sbe4JxDqV4j0MeJJ/ZEOnLHJAhJ/o/0Gw+2cAVBxOq/xDTiSzKQaR4Cy7h3HMlDXnBXlAwKLb7x/F6efFyBv3RGZjtTgt8G7319icRJUHyXa3JPk/UbKTHrZ3saCj0ByAPpCwSVx6uNxhVeEOFqi3VwtV8s4ClAJtUQKBgQDwEGA1Shr2klTnM1VN+R3YkgaG8QtkZQQG77vCR1q3uMPKpWUQOi/2wQs3SbTAr7ZX+8CHNb8M3KGVAEFR2PDEFok/LA0snFTwdL6dLkXkmOxmNyR2wmXIUimMBogQIc4bI11EpPoocbrzuJ3q48fDIAr7Hc4d/0HasEAQHvAdfwKBgQDg4gCr5M7atD4XdKqmNs5kltjw36EeSig2cajfQb7aARmHS+1F9cn1cpgTvqMBHxBZBx5cW1ETLTxDEq8/ONHHAtmgCVgrc0lgch+Dph1Nt4Jl/aNxxaZjLpLQtcHnFR4/7RGuJMUTAzAUcOer9XiCJskE2EVLrT53pE665Se3uQKBgFcXmc+7cszBicvW87u2BP3s/DE4gcmKXEun7ZYuDNtaTK3YEzIv6fa7UjZcpxbAqIaC7vYeqZEg+f30eb4X1kFNa71fXegxTx9tOzoK75BfamQq3S+4lvR12lzSgcpYeU2fJtcggyDpIcoJ0EDHIlHH7jPsPDrlwB52ksdGchZBAoGBAM49dvAuf6cD9o38aSTWzqJh1cPS1Ci7SfXkd0OJQEcfCxKSB6FJsVZxKhexljzJCG0dojKBbPFxYvsAf8gzi/BAJOYoq7vtlzXkdBKAng9QZT60Rtlosxfy9qKCjronG/70pGpZPoQZQFb+1PlXvpVejKzsy2CEGe4PukSdNLfBAoGATUJ7FGVmG2Ym8UHcP0bMeWwS7XROuiquliLtamWwpZTByZaLO1nK2FtC1oVj3il4Wox6/In1bBbdtqxmRmKcD9q1JExr1PHxXQTUbIoWb4GXNHq7h5kOhpra1uVRmNIewfJUYTCEzzHTrJe8dADBc7lGpsibwk174YD2343Aupw= + productId: PAYUN + notifyUrl: https://peaktcm.com:8083/hf/webhook/callback + payApi: https://api.huifu.com/v3/trade/payment/jspay + + +aliyun: + accessKeyId: LTAI5tBQGeqmhe6yhfqupaZD + accessKeySecret: YM2lsEtpjCLOF2kJGdsCBcwRHLX8aa + + +minio: + endpoint: http://139.9.2.195:8002 + accessKey: YIh5PhIEHXEiJgPTlCSc + secretKey: 07becv7RNMI1wHyPPFtq3rlCPC6cyF0WrV5LNHYN + username: jkzy + password: jkzy@2025 + nginxHost: + +huaweiyun: + accessKey: HPUACMRQ2NKQNOXNCFNO + secretKey: KC3yEw7ARoL0oxcmXy7vE3hyMBPKjLsG1LCSQdYh + +xf: + appid: 3fa7b7a0 + long-sound: + keySecret: b44d730380dcfae02313dcea7101efc8 + instant: + host: https://iat-api.xfyun.cn/v2/iat + APISecret: N2Q5Y2NiOTZmNThhODZjYTgxMjg1NjA4 + apiKey: da390c58ef0f2ad8424c3dccc6d458c7 + + +token: + expireTime: 30 + + +wx: + appid: wx71e559ade446f09a + secret: 00b7f3cff0f4bde07daacd0dea7548c9 diff --git a/mobileApp/src/main/resources/application-prod.yml b/mobileApp/src/main/resources/application-prod.yml new file mode 100644 index 0000000..de70e2d --- /dev/null +++ b/mobileApp/src/main/resources/application-prod.yml @@ -0,0 +1,80 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + druid: + url: jdbc:mysql://139.9.2.195:3306/uni_ai_doctor?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true + username: unizk + password: Unizk@2025 + + redis: + port: 6379 + host: localhost + username: + password: Unizk@2025.Jkzy + database: 0 + lettuce: + pool: + max-active: 8 + max-idle: 6 + min-idle: 2 + max-wait: -1ms + shutdown-timeout: 360 + timeout: 5000 + + +huifu: + huifuId: 6666000179463008 + payApi: https://api.huifu.com/v3/trade/payment/jspay + refundApi: https://api.huifu.com/v3/trade/payment/scanpay/refund + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3IcOEDMBOiHaa5dLsPWVVx+9yE/VEGjRSVZFUAospbCEhGDimE7UEL8ecXwbG9AN5k8yX+Ltj6zaeLIt3KgxbX5/4pnrOoPqFhtaoNuQrwl8/9/rkgGkoksH9e//mRan2+TjbHLKXWZKUduksaoWw4VehOx0nxE+wx7Bk7/VQAegnrDz4z/8zEd2Mcm51THceHJ5wVoMoXvo5e8nhUUAFJeHtlI5jxC85lK6kz2UNhGQ7Kutc7sBzK1U/mi29j/iStN3Z0fzND7+nRfgWPu4b0cKNnNwlIaGiabFTbpVZyV8LTg1BandmHJLNUUJyrc/s3W72VFUdp+BwgoERDcEwwIDAQAB + privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDchw4QMwE6Idprl0uw9ZVXH73IT9UQaNFJVkVQCiylsISEYOKYTtQQvx5xfBsb0A3mTzJf4u2PrNp4si3cqDFtfn/imes6g+oWG1qg25CvCXz/3+uSAaSiSwf17/+ZFqfb5ONscspdZkpR26SxqhbDhV6E7HSfET7DHsGTv9VAB6CesPPjP/zMR3YxybnVMdx4cnnBWgyhe+jl7yeFRQAUl4e2UjmPELzmUrqTPZQ2EZDsq61zuwHMrVT+aLb2P+JK03dnR/M0Pv6dF+BY+7hvRwo2c3CUhoaJpsVNulVnJXwtODUFqd2Ycks1RQnKtz+zdbvZUVR2n4HCCgRENwTDAgMBAAECggEAbFWAaB7WVHt69G3fxi/uzF0Qe04UijojzhYueLJ22nKLtwhtaIsZDJ0G1JM2MgSUP3badVZig7lTngVSGFsb5QFGy8f3Ucip/3AypmEWg5ZyrLSQ4ioieYPIhl3/P3Jsxc58lrMRjK6KhgoTrx+yjRyAoWYTqGztWydJy05q8UekdbIn9K2Dq0294hHbarCjB3C/3SXX4xniEbDtVBTdjP81731gxnM2HJ98GDrvUf5MDrX4SdExvCYV0P0mU8uaRPK8ylWCmtsEuMxKupFUFePJNZdyG+P/RZs6CbgUgJyYUzKlOyeWH8KwQF1FLntipkIPlJ+uVkdwK2eDD6bzWQKBgQDylFiSnlFy0fwXSpWHDnDgukaLYxm2GNWaPyg0f2IqK/368o/Xu4TWOPuknR6ngeiJZz3SVA/kFeCz3+UxtDlbUheoSkkbo0cZg8PaKx875gE97oCHgRkaPS4l44kmu1ZwOMgfZDQPrLZMEbAfjqvMEa7ci5kXk1quOGeSJRIg3QKBgQDoumM2dZ+RxYxtxB2k1kJJIndZX3hhVyMfDIh5TwHHKNml1poa/s+aoT27BZgiM8snLR55xk4cQ59kr9Yic9Oa4seECsrAgP8mbB6eC/y7lRDZDFjJvHXl6a1ePo+hBlYarL83AUMIE1/SfZrdyM5yRmp3+cwHkKVpAQuiEXOSHwKBgEDkpn0ylR9eRU4FydKDbnbv3gdTz4EDS8EjvCGvIheeBSeo1AomQ/b673auAZFWE1sOn18w1b9yitYTw0B0shNX9rQyizQ1jcOpmC848fYYJaTntMKLKqf2Te4c3Ifb/devmPms2LCIx4u5/5+xjwvcfybIwX+pD80jkbFq8VqRAoGBAKulTKdN+XK6EOikTHjWzezCzuPL1i105yJvS/isnNMW/e+iZ+ahKN0TL0RQy/Pt31f1nxSRfeq6tUS9q2Gdq+QAfsaUbxWsDoN4GtzWWoC/YL20rYecyBfaUVPBMI3C7p6d6inXdGjwYSwOF7qb8Ce4Z641PpYVyOm5K6tM08BhAoGBALNkfH3ZPImRKN19bGcHAtrzoDMFAAQrhjyMr9aUpMGLoAjxh1U2pYbj1y0e03ArUT/TRzOXNbHuST82tDZEarVSF8RmU8DNUAHSI9dmtXPtgeKpG8TNyP5q3VnJEHdSRZVLb5pGfZuo3tegsHwZF/oCGK+GHD/fhmSFB04GPJon + notifyUrl: https://peaktcm.com/applet/huifuPay/callback + productId: EDUSTD + configureAppletCallbackUrl: https://peaktcm.com/applet/huifuPay/configureAppletCallback + + +huifu-vendor: + sysId: 6666000188069628 + huifuId: 6666000188735389 + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0uJDRMFj1xoQCJbReVaNdiqjL9vdKolMzWKe2vMhZwkBlgQMpaqtHqNKNCn3DPL/7ugPUNzj4PLr3PSR4DK+TBOOa3xRuKLt3s2x6wouVNpiRRglUzh5OgciXXYPPl7QGu2YlJZ9F7ikiaD7KG9PJI7oidbA7lQ4qMcIGlSBUF4l3TeoOpad0zLs41IRJJPIMKPf5Jj9HS/1Tggcn7f36h1l4JWpTRyfB8HyF66IHzA3mQa5yskUHf1LLuO0hxtIfy9Ua+xJYqEWD334xaMzauZQsLM98d1Pj7I1YRvzNohabpCJqO1wF6PDB3rqdLarAZagN/JhYIHHGXMBGfQZxwIDAQAB + privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDS4kNEwWPXGhAIltF5Vo12KqMv290qiUzNYp7a8yFnCQGWBAylqq0eo0o0KfcM8v/u6A9Q3OPg8uvc9JHgMr5ME45rfFG4ou3ezbHrCi5U2mJFGCVTOHk6ByJddg8+XtAa7ZiUln0XuKSJoPsob08kjuiJ1sDuVDioxwgaVIFQXiXdN6g6lp3TMuzjUhEkk8gwo9/kmP0dL/VOCByft/fqHWXglalNHJ8HwfIXrogfMDeZBrnKyRQd/Usu47SHG0h/L1Rr7ElioRYPffjFozNq5lCwsz3x3U+PsjVhG/M2iFpukImo7XAXo8MHeup0tqsBlqA38mFggccZcwEZ9BnHAgMBAAECggEABRZaQxVbQDwruNlSklfJL9mVeDkYm8cWKDpB1MxauO6ZsDHG0FROutd7mciNYi2WiP/mJrA9exbBI+JuhncS6ijqnaMxIYAktuRFb4MeXQOrrTkI5XoOSp0Tcie/9GQ7JvsmXCdJO0JEDeHpTS9qPFqKN5ELtHQprcCnbGMvf23KyqOFx71Sbe4JxDqV4j0MeJJ/ZEOnLHJAhJ/o/0Gw+2cAVBxOq/xDTiSzKQaR4Cy7h3HMlDXnBXlAwKLb7x/F6efFyBv3RGZjtTgt8G7319icRJUHyXa3JPk/UbKTHrZ3saCj0ByAPpCwSVx6uNxhVeEOFqi3VwtV8s4ClAJtUQKBgQDwEGA1Shr2klTnM1VN+R3YkgaG8QtkZQQG77vCR1q3uMPKpWUQOi/2wQs3SbTAr7ZX+8CHNb8M3KGVAEFR2PDEFok/LA0snFTwdL6dLkXkmOxmNyR2wmXIUimMBogQIc4bI11EpPoocbrzuJ3q48fDIAr7Hc4d/0HasEAQHvAdfwKBgQDg4gCr5M7atD4XdKqmNs5kltjw36EeSig2cajfQb7aARmHS+1F9cn1cpgTvqMBHxBZBx5cW1ETLTxDEq8/ONHHAtmgCVgrc0lgch+Dph1Nt4Jl/aNxxaZjLpLQtcHnFR4/7RGuJMUTAzAUcOer9XiCJskE2EVLrT53pE665Se3uQKBgFcXmc+7cszBicvW87u2BP3s/DE4gcmKXEun7ZYuDNtaTK3YEzIv6fa7UjZcpxbAqIaC7vYeqZEg+f30eb4X1kFNa71fXegxTx9tOzoK75BfamQq3S+4lvR12lzSgcpYeU2fJtcggyDpIcoJ0EDHIlHH7jPsPDrlwB52ksdGchZBAoGBAM49dvAuf6cD9o38aSTWzqJh1cPS1Ci7SfXkd0OJQEcfCxKSB6FJsVZxKhexljzJCG0dojKBbPFxYvsAf8gzi/BAJOYoq7vtlzXkdBKAng9QZT60Rtlosxfy9qKCjronG/70pGpZPoQZQFb+1PlXvpVejKzsy2CEGe4PukSdNLfBAoGATUJ7FGVmG2Ym8UHcP0bMeWwS7XROuiquliLtamWwpZTByZaLO1nK2FtC1oVj3il4Wox6/In1bBbdtqxmRmKcD9q1JExr1PHxXQTUbIoWb4GXNHq7h5kOhpra1uVRmNIewfJUYTCEzzHTrJe8dADBc7lGpsibwk174YD2343Aupw= + productId: PAYUN + notifyUrl: http://139.9.2.195:8083/hf/webhook/callback + payApi: https://api.huifu.com/v3/trade/payment/jspay + + +aliyun: + accessKeyId: LTAI5tBQGeqmhe6yhfqupaZD + accessKeySecret: YM2lsEtpjCLOF2kJGdsCBcwRHLX8aa + + +minio: + endpoint: http://139.9.2.195:8002 + accessKey: YIh5PhIEHXEiJgPTlCSc + secretKey: 07becv7RNMI1wHyPPFtq3rlCPC6cyF0WrV5LNHYN + username: jkzy + password: jkzy@2025 + nginxHost: + +huaweiyun: + accessKey: HPUACMRQ2NKQNOXNCFNO + secretKey: KC3yEw7ARoL0oxcmXy7vE3hyMBPKjLsG1LCSQdYh + +xf: + appid: 3fa7b7a0 + long-sound: + keySecret: b44d730380dcfae02313dcea7101efc8 + instant: + host: https://iat-api.xfyun.cn/v2/iat + APISecret: N2Q5Y2NiOTZmNThhODZjYTgxMjg1NjA4 + apiKey: da390c58ef0f2ad8424c3dccc6d458c7 + + +token: + expireTime: 30 + + +wx: + appid: wx71e559ade446f09a + secret: 00b7f3cff0f4bde07daacd0dea7548c9 diff --git a/mobileApp/src/main/resources/application.yml b/mobileApp/src/main/resources/application.yml new file mode 100644 index 0000000..a8d355a --- /dev/null +++ b/mobileApp/src/main/resources/application.yml @@ -0,0 +1,35 @@ +spring: + application: + name: unizk-admin + profiles: + active: dev + servlet: + multipart: + enabled: true + max-file-size: 500MB + max-request-size: 1000MB + +server: + port: 8083 + tomcat: + max-swallow-size: 1000MB + connection-timeout: 600000 + max-keep-alive-requests: 600000 + max-connections: 600000 + servlet: + session: + timeout: 30m + + +logging: + level: + cn.unizk.mapper: debug + org.springframework: warn + org.apache.ibatis.logging: debug + org.springframework.integration: INFO + # org.springframework.web.servlet.DispatcherServlet: DEBUG + +mybatis-plus: + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + diff --git a/mobileApp/target/classes/application-dev.yml b/mobileApp/target/classes/application-dev.yml new file mode 100644 index 0000000..a134fcf --- /dev/null +++ b/mobileApp/target/classes/application-dev.yml @@ -0,0 +1,80 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + druid: + url: jdbc:mysql://139.9.2.195:3306/uni_ai_doctor?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true + username: unizk + password: Unizk@2025 + + redis: + port: 6379 + host: 139.9.2.195 + username: + password: Unizk@2025.Jkzy + database: 0 + lettuce: + pool: + max-active: 8 + max-idle: 6 + min-idle: 2 + max-wait: -1ms + shutdown-timeout: 360 + timeout: 5000 + + +huifu: + huifuId: 6666000179463008 + payApi: https://api.huifu.com/v3/trade/payment/jspay + refundApi: https://api.huifu.com/v3/trade/payment/scanpay/refund + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3IcOEDMBOiHaa5dLsPWVVx+9yE/VEGjRSVZFUAospbCEhGDimE7UEL8ecXwbG9AN5k8yX+Ltj6zaeLIt3KgxbX5/4pnrOoPqFhtaoNuQrwl8/9/rkgGkoksH9e//mRan2+TjbHLKXWZKUduksaoWw4VehOx0nxE+wx7Bk7/VQAegnrDz4z/8zEd2Mcm51THceHJ5wVoMoXvo5e8nhUUAFJeHtlI5jxC85lK6kz2UNhGQ7Kutc7sBzK1U/mi29j/iStN3Z0fzND7+nRfgWPu4b0cKNnNwlIaGiabFTbpVZyV8LTg1BandmHJLNUUJyrc/s3W72VFUdp+BwgoERDcEwwIDAQAB + privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDchw4QMwE6Idprl0uw9ZVXH73IT9UQaNFJVkVQCiylsISEYOKYTtQQvx5xfBsb0A3mTzJf4u2PrNp4si3cqDFtfn/imes6g+oWG1qg25CvCXz/3+uSAaSiSwf17/+ZFqfb5ONscspdZkpR26SxqhbDhV6E7HSfET7DHsGTv9VAB6CesPPjP/zMR3YxybnVMdx4cnnBWgyhe+jl7yeFRQAUl4e2UjmPELzmUrqTPZQ2EZDsq61zuwHMrVT+aLb2P+JK03dnR/M0Pv6dF+BY+7hvRwo2c3CUhoaJpsVNulVnJXwtODUFqd2Ycks1RQnKtz+zdbvZUVR2n4HCCgRENwTDAgMBAAECggEAbFWAaB7WVHt69G3fxi/uzF0Qe04UijojzhYueLJ22nKLtwhtaIsZDJ0G1JM2MgSUP3badVZig7lTngVSGFsb5QFGy8f3Ucip/3AypmEWg5ZyrLSQ4ioieYPIhl3/P3Jsxc58lrMRjK6KhgoTrx+yjRyAoWYTqGztWydJy05q8UekdbIn9K2Dq0294hHbarCjB3C/3SXX4xniEbDtVBTdjP81731gxnM2HJ98GDrvUf5MDrX4SdExvCYV0P0mU8uaRPK8ylWCmtsEuMxKupFUFePJNZdyG+P/RZs6CbgUgJyYUzKlOyeWH8KwQF1FLntipkIPlJ+uVkdwK2eDD6bzWQKBgQDylFiSnlFy0fwXSpWHDnDgukaLYxm2GNWaPyg0f2IqK/368o/Xu4TWOPuknR6ngeiJZz3SVA/kFeCz3+UxtDlbUheoSkkbo0cZg8PaKx875gE97oCHgRkaPS4l44kmu1ZwOMgfZDQPrLZMEbAfjqvMEa7ci5kXk1quOGeSJRIg3QKBgQDoumM2dZ+RxYxtxB2k1kJJIndZX3hhVyMfDIh5TwHHKNml1poa/s+aoT27BZgiM8snLR55xk4cQ59kr9Yic9Oa4seECsrAgP8mbB6eC/y7lRDZDFjJvHXl6a1ePo+hBlYarL83AUMIE1/SfZrdyM5yRmp3+cwHkKVpAQuiEXOSHwKBgEDkpn0ylR9eRU4FydKDbnbv3gdTz4EDS8EjvCGvIheeBSeo1AomQ/b673auAZFWE1sOn18w1b9yitYTw0B0shNX9rQyizQ1jcOpmC848fYYJaTntMKLKqf2Te4c3Ifb/devmPms2LCIx4u5/5+xjwvcfybIwX+pD80jkbFq8VqRAoGBAKulTKdN+XK6EOikTHjWzezCzuPL1i105yJvS/isnNMW/e+iZ+ahKN0TL0RQy/Pt31f1nxSRfeq6tUS9q2Gdq+QAfsaUbxWsDoN4GtzWWoC/YL20rYecyBfaUVPBMI3C7p6d6inXdGjwYSwOF7qb8Ce4Z641PpYVyOm5K6tM08BhAoGBALNkfH3ZPImRKN19bGcHAtrzoDMFAAQrhjyMr9aUpMGLoAjxh1U2pYbj1y0e03ArUT/TRzOXNbHuST82tDZEarVSF8RmU8DNUAHSI9dmtXPtgeKpG8TNyP5q3VnJEHdSRZVLb5pGfZuo3tegsHwZF/oCGK+GHD/fhmSFB04GPJon + notifyUrl: https://peaktcm.com/applet/huifuPay/callback + productId: EDUSTD + configureAppletCallbackUrl: https://peaktcm.com/applet/huifuPay/configureAppletCallback + + +huifu-vendor: + sysId: 6666000188069628 + huifuId: 6666000188735389 + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0uJDRMFj1xoQCJbReVaNdiqjL9vdKolMzWKe2vMhZwkBlgQMpaqtHqNKNCn3DPL/7ugPUNzj4PLr3PSR4DK+TBOOa3xRuKLt3s2x6wouVNpiRRglUzh5OgciXXYPPl7QGu2YlJZ9F7ikiaD7KG9PJI7oidbA7lQ4qMcIGlSBUF4l3TeoOpad0zLs41IRJJPIMKPf5Jj9HS/1Tggcn7f36h1l4JWpTRyfB8HyF66IHzA3mQa5yskUHf1LLuO0hxtIfy9Ua+xJYqEWD334xaMzauZQsLM98d1Pj7I1YRvzNohabpCJqO1wF6PDB3rqdLarAZagN/JhYIHHGXMBGfQZxwIDAQAB + privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDS4kNEwWPXGhAIltF5Vo12KqMv290qiUzNYp7a8yFnCQGWBAylqq0eo0o0KfcM8v/u6A9Q3OPg8uvc9JHgMr5ME45rfFG4ou3ezbHrCi5U2mJFGCVTOHk6ByJddg8+XtAa7ZiUln0XuKSJoPsob08kjuiJ1sDuVDioxwgaVIFQXiXdN6g6lp3TMuzjUhEkk8gwo9/kmP0dL/VOCByft/fqHWXglalNHJ8HwfIXrogfMDeZBrnKyRQd/Usu47SHG0h/L1Rr7ElioRYPffjFozNq5lCwsz3x3U+PsjVhG/M2iFpukImo7XAXo8MHeup0tqsBlqA38mFggccZcwEZ9BnHAgMBAAECggEABRZaQxVbQDwruNlSklfJL9mVeDkYm8cWKDpB1MxauO6ZsDHG0FROutd7mciNYi2WiP/mJrA9exbBI+JuhncS6ijqnaMxIYAktuRFb4MeXQOrrTkI5XoOSp0Tcie/9GQ7JvsmXCdJO0JEDeHpTS9qPFqKN5ELtHQprcCnbGMvf23KyqOFx71Sbe4JxDqV4j0MeJJ/ZEOnLHJAhJ/o/0Gw+2cAVBxOq/xDTiSzKQaR4Cy7h3HMlDXnBXlAwKLb7x/F6efFyBv3RGZjtTgt8G7319icRJUHyXa3JPk/UbKTHrZ3saCj0ByAPpCwSVx6uNxhVeEOFqi3VwtV8s4ClAJtUQKBgQDwEGA1Shr2klTnM1VN+R3YkgaG8QtkZQQG77vCR1q3uMPKpWUQOi/2wQs3SbTAr7ZX+8CHNb8M3KGVAEFR2PDEFok/LA0snFTwdL6dLkXkmOxmNyR2wmXIUimMBogQIc4bI11EpPoocbrzuJ3q48fDIAr7Hc4d/0HasEAQHvAdfwKBgQDg4gCr5M7atD4XdKqmNs5kltjw36EeSig2cajfQb7aARmHS+1F9cn1cpgTvqMBHxBZBx5cW1ETLTxDEq8/ONHHAtmgCVgrc0lgch+Dph1Nt4Jl/aNxxaZjLpLQtcHnFR4/7RGuJMUTAzAUcOer9XiCJskE2EVLrT53pE665Se3uQKBgFcXmc+7cszBicvW87u2BP3s/DE4gcmKXEun7ZYuDNtaTK3YEzIv6fa7UjZcpxbAqIaC7vYeqZEg+f30eb4X1kFNa71fXegxTx9tOzoK75BfamQq3S+4lvR12lzSgcpYeU2fJtcggyDpIcoJ0EDHIlHH7jPsPDrlwB52ksdGchZBAoGBAM49dvAuf6cD9o38aSTWzqJh1cPS1Ci7SfXkd0OJQEcfCxKSB6FJsVZxKhexljzJCG0dojKBbPFxYvsAf8gzi/BAJOYoq7vtlzXkdBKAng9QZT60Rtlosxfy9qKCjronG/70pGpZPoQZQFb+1PlXvpVejKzsy2CEGe4PukSdNLfBAoGATUJ7FGVmG2Ym8UHcP0bMeWwS7XROuiquliLtamWwpZTByZaLO1nK2FtC1oVj3il4Wox6/In1bBbdtqxmRmKcD9q1JExr1PHxXQTUbIoWb4GXNHq7h5kOhpra1uVRmNIewfJUYTCEzzHTrJe8dADBc7lGpsibwk174YD2343Aupw= + productId: PAYUN + notifyUrl: https://peaktcm.com:8083/hf/webhook/callback + payApi: https://api.huifu.com/v3/trade/payment/jspay + + +aliyun: + accessKeyId: LTAI5tBQGeqmhe6yhfqupaZD + accessKeySecret: YM2lsEtpjCLOF2kJGdsCBcwRHLX8aa + + +minio: + endpoint: http://139.9.2.195:8002 + accessKey: YIh5PhIEHXEiJgPTlCSc + secretKey: 07becv7RNMI1wHyPPFtq3rlCPC6cyF0WrV5LNHYN + username: jkzy + password: jkzy@2025 + nginxHost: + +huaweiyun: + accessKey: HPUACMRQ2NKQNOXNCFNO + secretKey: KC3yEw7ARoL0oxcmXy7vE3hyMBPKjLsG1LCSQdYh + +xf: + appid: 3fa7b7a0 + long-sound: + keySecret: b44d730380dcfae02313dcea7101efc8 + instant: + host: https://iat-api.xfyun.cn/v2/iat + APISecret: N2Q5Y2NiOTZmNThhODZjYTgxMjg1NjA4 + apiKey: da390c58ef0f2ad8424c3dccc6d458c7 + + +token: + expireTime: 30 + + +wx: + appid: wx71e559ade446f09a + secret: 00b7f3cff0f4bde07daacd0dea7548c9 diff --git a/mobileApp/target/classes/application-prod.yml b/mobileApp/target/classes/application-prod.yml new file mode 100644 index 0000000..de70e2d --- /dev/null +++ b/mobileApp/target/classes/application-prod.yml @@ -0,0 +1,80 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + druid: + url: jdbc:mysql://139.9.2.195:3306/uni_ai_doctor?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true + username: unizk + password: Unizk@2025 + + redis: + port: 6379 + host: localhost + username: + password: Unizk@2025.Jkzy + database: 0 + lettuce: + pool: + max-active: 8 + max-idle: 6 + min-idle: 2 + max-wait: -1ms + shutdown-timeout: 360 + timeout: 5000 + + +huifu: + huifuId: 6666000179463008 + payApi: https://api.huifu.com/v3/trade/payment/jspay + refundApi: https://api.huifu.com/v3/trade/payment/scanpay/refund + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3IcOEDMBOiHaa5dLsPWVVx+9yE/VEGjRSVZFUAospbCEhGDimE7UEL8ecXwbG9AN5k8yX+Ltj6zaeLIt3KgxbX5/4pnrOoPqFhtaoNuQrwl8/9/rkgGkoksH9e//mRan2+TjbHLKXWZKUduksaoWw4VehOx0nxE+wx7Bk7/VQAegnrDz4z/8zEd2Mcm51THceHJ5wVoMoXvo5e8nhUUAFJeHtlI5jxC85lK6kz2UNhGQ7Kutc7sBzK1U/mi29j/iStN3Z0fzND7+nRfgWPu4b0cKNnNwlIaGiabFTbpVZyV8LTg1BandmHJLNUUJyrc/s3W72VFUdp+BwgoERDcEwwIDAQAB + privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDchw4QMwE6Idprl0uw9ZVXH73IT9UQaNFJVkVQCiylsISEYOKYTtQQvx5xfBsb0A3mTzJf4u2PrNp4si3cqDFtfn/imes6g+oWG1qg25CvCXz/3+uSAaSiSwf17/+ZFqfb5ONscspdZkpR26SxqhbDhV6E7HSfET7DHsGTv9VAB6CesPPjP/zMR3YxybnVMdx4cnnBWgyhe+jl7yeFRQAUl4e2UjmPELzmUrqTPZQ2EZDsq61zuwHMrVT+aLb2P+JK03dnR/M0Pv6dF+BY+7hvRwo2c3CUhoaJpsVNulVnJXwtODUFqd2Ycks1RQnKtz+zdbvZUVR2n4HCCgRENwTDAgMBAAECggEAbFWAaB7WVHt69G3fxi/uzF0Qe04UijojzhYueLJ22nKLtwhtaIsZDJ0G1JM2MgSUP3badVZig7lTngVSGFsb5QFGy8f3Ucip/3AypmEWg5ZyrLSQ4ioieYPIhl3/P3Jsxc58lrMRjK6KhgoTrx+yjRyAoWYTqGztWydJy05q8UekdbIn9K2Dq0294hHbarCjB3C/3SXX4xniEbDtVBTdjP81731gxnM2HJ98GDrvUf5MDrX4SdExvCYV0P0mU8uaRPK8ylWCmtsEuMxKupFUFePJNZdyG+P/RZs6CbgUgJyYUzKlOyeWH8KwQF1FLntipkIPlJ+uVkdwK2eDD6bzWQKBgQDylFiSnlFy0fwXSpWHDnDgukaLYxm2GNWaPyg0f2IqK/368o/Xu4TWOPuknR6ngeiJZz3SVA/kFeCz3+UxtDlbUheoSkkbo0cZg8PaKx875gE97oCHgRkaPS4l44kmu1ZwOMgfZDQPrLZMEbAfjqvMEa7ci5kXk1quOGeSJRIg3QKBgQDoumM2dZ+RxYxtxB2k1kJJIndZX3hhVyMfDIh5TwHHKNml1poa/s+aoT27BZgiM8snLR55xk4cQ59kr9Yic9Oa4seECsrAgP8mbB6eC/y7lRDZDFjJvHXl6a1ePo+hBlYarL83AUMIE1/SfZrdyM5yRmp3+cwHkKVpAQuiEXOSHwKBgEDkpn0ylR9eRU4FydKDbnbv3gdTz4EDS8EjvCGvIheeBSeo1AomQ/b673auAZFWE1sOn18w1b9yitYTw0B0shNX9rQyizQ1jcOpmC848fYYJaTntMKLKqf2Te4c3Ifb/devmPms2LCIx4u5/5+xjwvcfybIwX+pD80jkbFq8VqRAoGBAKulTKdN+XK6EOikTHjWzezCzuPL1i105yJvS/isnNMW/e+iZ+ahKN0TL0RQy/Pt31f1nxSRfeq6tUS9q2Gdq+QAfsaUbxWsDoN4GtzWWoC/YL20rYecyBfaUVPBMI3C7p6d6inXdGjwYSwOF7qb8Ce4Z641PpYVyOm5K6tM08BhAoGBALNkfH3ZPImRKN19bGcHAtrzoDMFAAQrhjyMr9aUpMGLoAjxh1U2pYbj1y0e03ArUT/TRzOXNbHuST82tDZEarVSF8RmU8DNUAHSI9dmtXPtgeKpG8TNyP5q3VnJEHdSRZVLb5pGfZuo3tegsHwZF/oCGK+GHD/fhmSFB04GPJon + notifyUrl: https://peaktcm.com/applet/huifuPay/callback + productId: EDUSTD + configureAppletCallbackUrl: https://peaktcm.com/applet/huifuPay/configureAppletCallback + + +huifu-vendor: + sysId: 6666000188069628 + huifuId: 6666000188735389 + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0uJDRMFj1xoQCJbReVaNdiqjL9vdKolMzWKe2vMhZwkBlgQMpaqtHqNKNCn3DPL/7ugPUNzj4PLr3PSR4DK+TBOOa3xRuKLt3s2x6wouVNpiRRglUzh5OgciXXYPPl7QGu2YlJZ9F7ikiaD7KG9PJI7oidbA7lQ4qMcIGlSBUF4l3TeoOpad0zLs41IRJJPIMKPf5Jj9HS/1Tggcn7f36h1l4JWpTRyfB8HyF66IHzA3mQa5yskUHf1LLuO0hxtIfy9Ua+xJYqEWD334xaMzauZQsLM98d1Pj7I1YRvzNohabpCJqO1wF6PDB3rqdLarAZagN/JhYIHHGXMBGfQZxwIDAQAB + privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDS4kNEwWPXGhAIltF5Vo12KqMv290qiUzNYp7a8yFnCQGWBAylqq0eo0o0KfcM8v/u6A9Q3OPg8uvc9JHgMr5ME45rfFG4ou3ezbHrCi5U2mJFGCVTOHk6ByJddg8+XtAa7ZiUln0XuKSJoPsob08kjuiJ1sDuVDioxwgaVIFQXiXdN6g6lp3TMuzjUhEkk8gwo9/kmP0dL/VOCByft/fqHWXglalNHJ8HwfIXrogfMDeZBrnKyRQd/Usu47SHG0h/L1Rr7ElioRYPffjFozNq5lCwsz3x3U+PsjVhG/M2iFpukImo7XAXo8MHeup0tqsBlqA38mFggccZcwEZ9BnHAgMBAAECggEABRZaQxVbQDwruNlSklfJL9mVeDkYm8cWKDpB1MxauO6ZsDHG0FROutd7mciNYi2WiP/mJrA9exbBI+JuhncS6ijqnaMxIYAktuRFb4MeXQOrrTkI5XoOSp0Tcie/9GQ7JvsmXCdJO0JEDeHpTS9qPFqKN5ELtHQprcCnbGMvf23KyqOFx71Sbe4JxDqV4j0MeJJ/ZEOnLHJAhJ/o/0Gw+2cAVBxOq/xDTiSzKQaR4Cy7h3HMlDXnBXlAwKLb7x/F6efFyBv3RGZjtTgt8G7319icRJUHyXa3JPk/UbKTHrZ3saCj0ByAPpCwSVx6uNxhVeEOFqi3VwtV8s4ClAJtUQKBgQDwEGA1Shr2klTnM1VN+R3YkgaG8QtkZQQG77vCR1q3uMPKpWUQOi/2wQs3SbTAr7ZX+8CHNb8M3KGVAEFR2PDEFok/LA0snFTwdL6dLkXkmOxmNyR2wmXIUimMBogQIc4bI11EpPoocbrzuJ3q48fDIAr7Hc4d/0HasEAQHvAdfwKBgQDg4gCr5M7atD4XdKqmNs5kltjw36EeSig2cajfQb7aARmHS+1F9cn1cpgTvqMBHxBZBx5cW1ETLTxDEq8/ONHHAtmgCVgrc0lgch+Dph1Nt4Jl/aNxxaZjLpLQtcHnFR4/7RGuJMUTAzAUcOer9XiCJskE2EVLrT53pE665Se3uQKBgFcXmc+7cszBicvW87u2BP3s/DE4gcmKXEun7ZYuDNtaTK3YEzIv6fa7UjZcpxbAqIaC7vYeqZEg+f30eb4X1kFNa71fXegxTx9tOzoK75BfamQq3S+4lvR12lzSgcpYeU2fJtcggyDpIcoJ0EDHIlHH7jPsPDrlwB52ksdGchZBAoGBAM49dvAuf6cD9o38aSTWzqJh1cPS1Ci7SfXkd0OJQEcfCxKSB6FJsVZxKhexljzJCG0dojKBbPFxYvsAf8gzi/BAJOYoq7vtlzXkdBKAng9QZT60Rtlosxfy9qKCjronG/70pGpZPoQZQFb+1PlXvpVejKzsy2CEGe4PukSdNLfBAoGATUJ7FGVmG2Ym8UHcP0bMeWwS7XROuiquliLtamWwpZTByZaLO1nK2FtC1oVj3il4Wox6/In1bBbdtqxmRmKcD9q1JExr1PHxXQTUbIoWb4GXNHq7h5kOhpra1uVRmNIewfJUYTCEzzHTrJe8dADBc7lGpsibwk174YD2343Aupw= + productId: PAYUN + notifyUrl: http://139.9.2.195:8083/hf/webhook/callback + payApi: https://api.huifu.com/v3/trade/payment/jspay + + +aliyun: + accessKeyId: LTAI5tBQGeqmhe6yhfqupaZD + accessKeySecret: YM2lsEtpjCLOF2kJGdsCBcwRHLX8aa + + +minio: + endpoint: http://139.9.2.195:8002 + accessKey: YIh5PhIEHXEiJgPTlCSc + secretKey: 07becv7RNMI1wHyPPFtq3rlCPC6cyF0WrV5LNHYN + username: jkzy + password: jkzy@2025 + nginxHost: + +huaweiyun: + accessKey: HPUACMRQ2NKQNOXNCFNO + secretKey: KC3yEw7ARoL0oxcmXy7vE3hyMBPKjLsG1LCSQdYh + +xf: + appid: 3fa7b7a0 + long-sound: + keySecret: b44d730380dcfae02313dcea7101efc8 + instant: + host: https://iat-api.xfyun.cn/v2/iat + APISecret: N2Q5Y2NiOTZmNThhODZjYTgxMjg1NjA4 + apiKey: da390c58ef0f2ad8424c3dccc6d458c7 + + +token: + expireTime: 30 + + +wx: + appid: wx71e559ade446f09a + secret: 00b7f3cff0f4bde07daacd0dea7548c9 diff --git a/mobileApp/target/classes/application.yml b/mobileApp/target/classes/application.yml new file mode 100644 index 0000000..a8d355a --- /dev/null +++ b/mobileApp/target/classes/application.yml @@ -0,0 +1,35 @@ +spring: + application: + name: unizk-admin + profiles: + active: dev + servlet: + multipart: + enabled: true + max-file-size: 500MB + max-request-size: 1000MB + +server: + port: 8083 + tomcat: + max-swallow-size: 1000MB + connection-timeout: 600000 + max-keep-alive-requests: 600000 + max-connections: 600000 + servlet: + session: + timeout: 30m + + +logging: + level: + cn.unizk.mapper: debug + org.springframework: warn + org.apache.ibatis.logging: debug + org.springframework.integration: INFO + # org.springframework.web.servlet.DispatcherServlet: DEBUG + +mybatis-plus: + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + diff --git a/mobileApp/target/classes/cn/unizk/MobileApp.class b/mobileApp/target/classes/cn/unizk/MobileApp.class new file mode 100644 index 0000000..1622e86 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/MobileApp.class differ diff --git a/mobileApp/target/classes/cn/unizk/MobileAppConstant.class b/mobileApp/target/classes/cn/unizk/MobileAppConstant.class new file mode 100644 index 0000000..0d10da1 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/MobileAppConstant.class differ diff --git a/mobileApp/target/classes/cn/unizk/config/ResourceConfig.class b/mobileApp/target/classes/cn/unizk/config/ResourceConfig.class new file mode 100644 index 0000000..ef19352 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/config/ResourceConfig.class differ diff --git a/mobileApp/target/classes/cn/unizk/config/WxProperties.class b/mobileApp/target/classes/cn/unizk/config/WxProperties.class new file mode 100644 index 0000000..ff23a20 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/config/WxProperties.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/AppModuleController.class b/mobileApp/target/classes/cn/unizk/controller/AppModuleController.class new file mode 100644 index 0000000..5820487 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/AppModuleController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/AppointmentController.class b/mobileApp/target/classes/cn/unizk/controller/AppointmentController.class new file mode 100644 index 0000000..bd30491 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/AppointmentController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/ComboController.class b/mobileApp/target/classes/cn/unizk/controller/ComboController.class new file mode 100644 index 0000000..18d363e Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/ComboController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/CourseStudyController.class b/mobileApp/target/classes/cn/unizk/controller/CourseStudyController.class new file mode 100644 index 0000000..59b601f Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/CourseStudyController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/DeviceController.class b/mobileApp/target/classes/cn/unizk/controller/DeviceController.class new file mode 100644 index 0000000..fc99037 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/DeviceController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/DoubaoAIController.class b/mobileApp/target/classes/cn/unizk/controller/DoubaoAIController.class new file mode 100644 index 0000000..1774482 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/DoubaoAIController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/FileController.class b/mobileApp/target/classes/cn/unizk/controller/FileController.class new file mode 100644 index 0000000..b064d82 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/FileController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/GolfController.class b/mobileApp/target/classes/cn/unizk/controller/GolfController.class new file mode 100644 index 0000000..df8bdda Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/GolfController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/HFPayController.class b/mobileApp/target/classes/cn/unizk/controller/HFPayController.class new file mode 100644 index 0000000..ee5bcad Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/HFPayController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/HFPayWebhookController.class b/mobileApp/target/classes/cn/unizk/controller/HFPayWebhookController.class new file mode 100644 index 0000000..d949748 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/HFPayWebhookController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/LoginController.class b/mobileApp/target/classes/cn/unizk/controller/LoginController.class new file mode 100644 index 0000000..b646559 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/LoginController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/LogoutController.class b/mobileApp/target/classes/cn/unizk/controller/LogoutController.class new file mode 100644 index 0000000..be204df Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/LogoutController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/MClinicWorkLogController.class b/mobileApp/target/classes/cn/unizk/controller/MClinicWorkLogController.class new file mode 100644 index 0000000..b426b21 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/MClinicWorkLogController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/MInventoryController.class b/mobileApp/target/classes/cn/unizk/controller/MInventoryController.class new file mode 100644 index 0000000..82dfb4f Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/MInventoryController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/MobileAppUserController.class b/mobileApp/target/classes/cn/unizk/controller/MobileAppUserController.class new file mode 100644 index 0000000..4514b13 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/MobileAppUserController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/MobileMemberController.class b/mobileApp/target/classes/cn/unizk/controller/MobileMemberController.class new file mode 100644 index 0000000..ce366ce Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/MobileMemberController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/MobileOrderController.class b/mobileApp/target/classes/cn/unizk/controller/MobileOrderController.class new file mode 100644 index 0000000..c368fb3 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/MobileOrderController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/MobilePhysioController.class b/mobileApp/target/classes/cn/unizk/controller/MobilePhysioController.class new file mode 100644 index 0000000..55a6dc4 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/MobilePhysioController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/MobileProductController.class b/mobileApp/target/classes/cn/unizk/controller/MobileProductController.class new file mode 100644 index 0000000..e0f3915 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/MobileProductController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/MobileStoreController.class b/mobileApp/target/classes/cn/unizk/controller/MobileStoreController.class new file mode 100644 index 0000000..1f586e2 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/MobileStoreController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/MobileUserAddrController.class b/mobileApp/target/classes/cn/unizk/controller/MobileUserAddrController.class new file mode 100644 index 0000000..7ffab83 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/MobileUserAddrController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/RatingController.class b/mobileApp/target/classes/cn/unizk/controller/RatingController.class new file mode 100644 index 0000000..07d983a Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/RatingController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/RunningController.class b/mobileApp/target/classes/cn/unizk/controller/RunningController.class new file mode 100644 index 0000000..bb21393 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/RunningController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/SysDictController.class b/mobileApp/target/classes/cn/unizk/controller/SysDictController.class new file mode 100644 index 0000000..9df03f2 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/SysDictController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/TestController.class b/mobileApp/target/classes/cn/unizk/controller/TestController.class new file mode 100644 index 0000000..23abd3a Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/TestController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/UserConsultationRecordController.class b/mobileApp/target/classes/cn/unizk/controller/UserConsultationRecordController.class new file mode 100644 index 0000000..5f4f5b1 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/UserConsultationRecordController.class differ diff --git a/mobileApp/target/classes/cn/unizk/controller/XunFeiAiController.class b/mobileApp/target/classes/cn/unizk/controller/XunFeiAiController.class new file mode 100644 index 0000000..d629539 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/controller/XunFeiAiController.class differ diff --git a/mobileApp/target/classes/cn/unizk/interceptor/MobileAppLoginInterceptor.class b/mobileApp/target/classes/cn/unizk/interceptor/MobileAppLoginInterceptor.class new file mode 100644 index 0000000..9eba3c2 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/interceptor/MobileAppLoginInterceptor.class differ diff --git a/mobileApp/target/classes/cn/unizk/mapper/FileMapper.class b/mobileApp/target/classes/cn/unizk/mapper/FileMapper.class new file mode 100644 index 0000000..ee3574f Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/mapper/FileMapper.class differ diff --git a/mobileApp/target/classes/cn/unizk/mapper/JkProductMapper.class b/mobileApp/target/classes/cn/unizk/mapper/JkProductMapper.class new file mode 100644 index 0000000..1fb0084 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/mapper/JkProductMapper.class differ diff --git a/mobileApp/target/classes/cn/unizk/mapper/MobilePhysioMapper.class b/mobileApp/target/classes/cn/unizk/mapper/MobilePhysioMapper.class new file mode 100644 index 0000000..3667a85 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/mapper/MobilePhysioMapper.class differ diff --git a/mobileApp/target/classes/cn/unizk/mapper/MobileStoreMapper.class b/mobileApp/target/classes/cn/unizk/mapper/MobileStoreMapper.class new file mode 100644 index 0000000..4b375cc Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/mapper/MobileStoreMapper.class differ diff --git a/mobileApp/target/classes/cn/unizk/mapper/PhysioMapper.class b/mobileApp/target/classes/cn/unizk/mapper/PhysioMapper.class new file mode 100644 index 0000000..be2a430 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/mapper/PhysioMapper.class differ diff --git a/mobileApp/target/classes/cn/unizk/mapper/ProductCarouselMapper.class b/mobileApp/target/classes/cn/unizk/mapper/ProductCarouselMapper.class new file mode 100644 index 0000000..0c68b88 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/mapper/ProductCarouselMapper.class differ diff --git a/mobileApp/target/classes/cn/unizk/mapper/QuestionMapper.class b/mobileApp/target/classes/cn/unizk/mapper/QuestionMapper.class new file mode 100644 index 0000000..fe66e02 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/mapper/QuestionMapper.class differ diff --git a/mobileApp/target/classes/cn/unizk/mapper/SysDictMapper.class b/mobileApp/target/classes/cn/unizk/mapper/SysDictMapper.class new file mode 100644 index 0000000..f487e8d Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/mapper/SysDictMapper.class differ diff --git a/mobileApp/target/classes/cn/unizk/pay/PayStrategy.class b/mobileApp/target/classes/cn/unizk/pay/PayStrategy.class new file mode 100644 index 0000000..c3a8309 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/pay/PayStrategy.class differ diff --git a/mobileApp/target/classes/cn/unizk/pay/enums/PayChannelEnum.class b/mobileApp/target/classes/cn/unizk/pay/enums/PayChannelEnum.class new file mode 100644 index 0000000..d3c0202 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/pay/enums/PayChannelEnum.class differ diff --git a/mobileApp/target/classes/cn/unizk/pay/enums/PaySceneEnum.class b/mobileApp/target/classes/cn/unizk/pay/enums/PaySceneEnum.class new file mode 100644 index 0000000..2b0652b Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/pay/enums/PaySceneEnum.class differ diff --git a/mobileApp/target/classes/cn/unizk/pay/factory/PaySceneFactory.class b/mobileApp/target/classes/cn/unizk/pay/factory/PaySceneFactory.class new file mode 100644 index 0000000..b1033aa Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/pay/factory/PaySceneFactory.class differ diff --git a/mobileApp/target/classes/cn/unizk/pay/handler/ActiveMemberPayHandler.class b/mobileApp/target/classes/cn/unizk/pay/handler/ActiveMemberPayHandler.class new file mode 100644 index 0000000..796dd0b Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/pay/handler/ActiveMemberPayHandler.class differ diff --git a/mobileApp/target/classes/cn/unizk/pay/handler/CoursePayHandler.class b/mobileApp/target/classes/cn/unizk/pay/handler/CoursePayHandler.class new file mode 100644 index 0000000..38a2ff6 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/pay/handler/CoursePayHandler.class differ diff --git a/mobileApp/target/classes/cn/unizk/pay/handler/GolfServicePayHandler.class b/mobileApp/target/classes/cn/unizk/pay/handler/GolfServicePayHandler.class new file mode 100644 index 0000000..5f08847 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/pay/handler/GolfServicePayHandler.class differ diff --git a/mobileApp/target/classes/cn/unizk/pay/handler/HGJPayHandler.class b/mobileApp/target/classes/cn/unizk/pay/handler/HGJPayHandler.class new file mode 100644 index 0000000..5218163 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/pay/handler/HGJPayHandler.class differ diff --git a/mobileApp/target/classes/cn/unizk/pay/handler/PaySceneHandler.class b/mobileApp/target/classes/cn/unizk/pay/handler/PaySceneHandler.class new file mode 100644 index 0000000..da98888 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/pay/handler/PaySceneHandler.class differ diff --git a/mobileApp/target/classes/cn/unizk/pay/handler/ProductPayHandler.class b/mobileApp/target/classes/cn/unizk/pay/handler/ProductPayHandler.class new file mode 100644 index 0000000..29352fd Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/pay/handler/ProductPayHandler.class differ diff --git a/mobileApp/target/classes/cn/unizk/pay/handler/RechargePayHandler.class b/mobileApp/target/classes/cn/unizk/pay/handler/RechargePayHandler.class new file mode 100644 index 0000000..5f4180c Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/pay/handler/RechargePayHandler.class differ diff --git a/mobileApp/target/classes/cn/unizk/pay/handler/ScanToPowerOnHandler.class b/mobileApp/target/classes/cn/unizk/pay/handler/ScanToPowerOnHandler.class new file mode 100644 index 0000000..ebf8276 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/pay/handler/ScanToPowerOnHandler.class differ diff --git a/mobileApp/target/classes/cn/unizk/pay/handler/ShoppingCartPayHandler.class b/mobileApp/target/classes/cn/unizk/pay/handler/ShoppingCartPayHandler.class new file mode 100644 index 0000000..d5de091 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/pay/handler/ShoppingCartPayHandler.class differ diff --git a/mobileApp/target/classes/cn/unizk/pay/service/HFPayService.class b/mobileApp/target/classes/cn/unizk/pay/service/HFPayService.class new file mode 100644 index 0000000..7719c7f Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/pay/service/HFPayService.class differ diff --git a/mobileApp/target/classes/cn/unizk/pay/service/impl/AliPayService.class b/mobileApp/target/classes/cn/unizk/pay/service/impl/AliPayService.class new file mode 100644 index 0000000..051bddb Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/pay/service/impl/AliPayService.class differ diff --git a/mobileApp/target/classes/cn/unizk/pay/service/impl/WechatPayService.class b/mobileApp/target/classes/cn/unizk/pay/service/impl/WechatPayService.class new file mode 100644 index 0000000..e1cd272 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/pay/service/impl/WechatPayService.class differ diff --git a/mobileApp/target/classes/cn/unizk/pojo/vo/ReportTypeVO2.class b/mobileApp/target/classes/cn/unizk/pojo/vo/ReportTypeVO2.class new file mode 100644 index 0000000..b592f46 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/pojo/vo/ReportTypeVO2.class differ diff --git a/mobileApp/target/classes/cn/unizk/properties/HuiFuProperties.class b/mobileApp/target/classes/cn/unizk/properties/HuiFuProperties.class new file mode 100644 index 0000000..ab1ec21 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/properties/HuiFuProperties.class differ diff --git a/mobileApp/target/classes/cn/unizk/properties/HuiFuVendorProperties.class b/mobileApp/target/classes/cn/unizk/properties/HuiFuVendorProperties.class new file mode 100644 index 0000000..40d485f Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/properties/HuiFuVendorProperties.class differ diff --git a/mobileApp/target/classes/cn/unizk/service/DeviceService.class b/mobileApp/target/classes/cn/unizk/service/DeviceService.class new file mode 100644 index 0000000..1ad5ec1 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/service/DeviceService.class differ diff --git a/mobileApp/target/classes/cn/unizk/service/DoubaoService.class b/mobileApp/target/classes/cn/unizk/service/DoubaoService.class new file mode 100644 index 0000000..710712e Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/service/DoubaoService.class differ diff --git a/mobileApp/target/classes/cn/unizk/service/JkProductService.class b/mobileApp/target/classes/cn/unizk/service/JkProductService.class new file mode 100644 index 0000000..27d777d Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/service/JkProductService.class differ diff --git a/mobileApp/target/classes/cn/unizk/service/ProductCarouselService.class b/mobileApp/target/classes/cn/unizk/service/ProductCarouselService.class new file mode 100644 index 0000000..8fcca16 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/service/ProductCarouselService.class differ diff --git a/mobileApp/target/classes/cn/unizk/service/QuestionService.class b/mobileApp/target/classes/cn/unizk/service/QuestionService.class new file mode 100644 index 0000000..8b29a2a Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/service/QuestionService.class differ diff --git a/mobileApp/target/classes/cn/unizk/service/UniCloudClient.class b/mobileApp/target/classes/cn/unizk/service/UniCloudClient.class new file mode 100644 index 0000000..c95a5bf Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/service/UniCloudClient.class differ diff --git a/mobileApp/target/classes/cn/unizk/service/UserService.class b/mobileApp/target/classes/cn/unizk/service/UserService.class new file mode 100644 index 0000000..9d81094 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/service/UserService.class differ diff --git a/mobileApp/target/classes/cn/unizk/service/WebTtsWsService$1.class b/mobileApp/target/classes/cn/unizk/service/WebTtsWsService$1.class new file mode 100644 index 0000000..e053092 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/service/WebTtsWsService$1.class differ diff --git a/mobileApp/target/classes/cn/unizk/service/WebTtsWsService$Data.class b/mobileApp/target/classes/cn/unizk/service/WebTtsWsService$Data.class new file mode 100644 index 0000000..e1c7825 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/service/WebTtsWsService$Data.class differ diff --git a/mobileApp/target/classes/cn/unizk/service/WebTtsWsService$JsonParse.class b/mobileApp/target/classes/cn/unizk/service/WebTtsWsService$JsonParse.class new file mode 100644 index 0000000..2023083 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/service/WebTtsWsService$JsonParse.class differ diff --git a/mobileApp/target/classes/cn/unizk/service/WebTtsWsService$MyThread.class b/mobileApp/target/classes/cn/unizk/service/WebTtsWsService$MyThread.class new file mode 100644 index 0000000..36dcd50 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/service/WebTtsWsService$MyThread.class differ diff --git a/mobileApp/target/classes/cn/unizk/service/WebTtsWsService.class b/mobileApp/target/classes/cn/unizk/service/WebTtsWsService.class new file mode 100644 index 0000000..a611dd5 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/service/WebTtsWsService.class differ diff --git a/mobileApp/target/classes/cn/unizk/service/impl/DeviceServiceImpl.class b/mobileApp/target/classes/cn/unizk/service/impl/DeviceServiceImpl.class new file mode 100644 index 0000000..942c049 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/service/impl/DeviceServiceImpl.class differ diff --git a/mobileApp/target/classes/cn/unizk/service/impl/JkProductServiceImpl.class b/mobileApp/target/classes/cn/unizk/service/impl/JkProductServiceImpl.class new file mode 100644 index 0000000..5897485 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/service/impl/JkProductServiceImpl.class differ diff --git a/mobileApp/target/classes/cn/unizk/service/impl/ProductCarouselServiceImpl.class b/mobileApp/target/classes/cn/unizk/service/impl/ProductCarouselServiceImpl.class new file mode 100644 index 0000000..cc893c5 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/service/impl/ProductCarouselServiceImpl.class differ diff --git a/mobileApp/target/classes/cn/unizk/service/impl/QuestionServiceImpl.class b/mobileApp/target/classes/cn/unizk/service/impl/QuestionServiceImpl.class new file mode 100644 index 0000000..c05a517 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/service/impl/QuestionServiceImpl.class differ diff --git a/mobileApp/target/classes/cn/unizk/utils/HFSignUtil.class b/mobileApp/target/classes/cn/unizk/utils/HFSignUtil.class new file mode 100644 index 0000000..fed30da Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/utils/HFSignUtil.class differ diff --git a/mobileApp/target/classes/cn/unizk/utils/MobileAppSecurityUtil.class b/mobileApp/target/classes/cn/unizk/utils/MobileAppSecurityUtil.class new file mode 100644 index 0000000..78ae156 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/utils/MobileAppSecurityUtil.class differ diff --git a/mobileApp/target/classes/cn/unizk/utils/MobileJwtUtil.class b/mobileApp/target/classes/cn/unizk/utils/MobileJwtUtil.class new file mode 100644 index 0000000..2612f97 Binary files /dev/null and b/mobileApp/target/classes/cn/unizk/utils/MobileJwtUtil.class differ diff --git a/mobileApp/target/maven-archiver/pom.properties b/mobileApp/target/maven-archiver/pom.properties new file mode 100644 index 0000000..56f3388 --- /dev/null +++ b/mobileApp/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Tue Aug 25 11:33:20 CST 2026 +version=1.0.0 +groupId=cn.unizk +artifactId=mobileApp diff --git a/mobileApp/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/mobileApp/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..4815378 --- /dev/null +++ b/mobileApp/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,78 @@ +cn\unizk\pay\enums\PaySceneEnum.class +cn\unizk\pay\factory\PaySceneFactory.class +cn\unizk\mapper\QuestionMapper.class +cn\unizk\mapper\MobilePhysioMapper.class +cn\unizk\controller\GolfController.class +cn\unizk\controller\MobileStoreController.class +cn\unizk\pay\service\impl\AliPayService.class +cn\unizk\interceptor\MobileAppLoginInterceptor.class +cn\unizk\controller\LoginController.class +cn\unizk\MobileAppConstant.class +cn\unizk\controller\ComboController.class +cn\unizk\controller\AppointmentController.class +cn\unizk\controller\CourseStudyController.class +cn\unizk\utils\MobileAppSecurityUtil.class +cn\unizk\service\ProductCarouselService.class +cn\unizk\controller\RunningController.class +cn\unizk\controller\TestController.class +cn\unizk\controller\XunFeiAiController.class +cn\unizk\controller\HFPayWebhookController.class +cn\unizk\pay\service\impl\WechatPayService.class +cn\unizk\properties\HuiFuProperties.class +cn\unizk\service\UniCloudClient.class +cn\unizk\pay\handler\ShoppingCartPayHandler.class +cn\unizk\pay\service\HFPayService.class +cn\unizk\service\DeviceService.class +cn\unizk\mapper\MobileStoreMapper.class +cn\unizk\controller\MobilePhysioController.class +cn\unizk\controller\SysDictController.class +cn\unizk\controller\MClinicWorkLogController.class +cn\unizk\service\WebTtsWsService$Data.class +cn\unizk\controller\MInventoryController.class +cn\unizk\controller\MobileProductController.class +cn\unizk\mapper\FileMapper.class +cn\unizk\mapper\SysDictMapper.class +cn\unizk\service\WebTtsWsService$MyThread.class +cn\unizk\pay\handler\PaySceneHandler.class +cn\unizk\pay\handler\RechargePayHandler.class +cn\unizk\pay\handler\HGJPayHandler.class +cn\unizk\controller\RatingController.class +cn\unizk\service\WebTtsWsService$1.class +cn\unizk\controller\DoubaoAIController.class +cn\unizk\mapper\PhysioMapper.class +cn\unizk\service\impl\QuestionServiceImpl.class +cn\unizk\pay\handler\ActiveMemberPayHandler.class +cn\unizk\mapper\JkProductMapper.class +cn\unizk\utils\MobileJwtUtil.class +cn\unizk\pay\enums\PayChannelEnum.class +cn\unizk\service\impl\DeviceServiceImpl.class +cn\unizk\config\ResourceConfig.class +cn\unizk\pay\handler\ScanToPowerOnHandler.class +cn\unizk\pojo\vo\ReportTypeVO2.class +cn\unizk\service\impl\ProductCarouselServiceImpl.class +cn\unizk\service\DoubaoService.class +cn\unizk\utils\HFSignUtil.class +cn\unizk\controller\DeviceController.class +cn\unizk\pay\handler\ProductPayHandler.class +cn\unizk\properties\HuiFuVendorProperties.class +cn\unizk\controller\MobileUserAddrController.class +cn\unizk\controller\AppModuleController.class +cn\unizk\pay\PayStrategy.class +cn\unizk\controller\MobileOrderController.class +cn\unizk\service\impl\JkProductServiceImpl.class +cn\unizk\service\UserService.class +cn\unizk\controller\MobileMemberController.class +cn\unizk\service\WebTtsWsService.class +cn\unizk\mapper\ProductCarouselMapper.class +cn\unizk\controller\MobileAppUserController.class +cn\unizk\controller\UserConsultationRecordController.class +cn\unizk\service\JkProductService.class +cn\unizk\service\WebTtsWsService$JsonParse.class +cn\unizk\config\WxProperties.class +cn\unizk\controller\LogoutController.class +cn\unizk\controller\HFPayController.class +cn\unizk\MobileApp.class +cn\unizk\controller\FileController.class +cn\unizk\service\QuestionService.class +cn\unizk\pay\handler\CoursePayHandler.class +cn\unizk\pay\handler\GolfServicePayHandler.class diff --git a/mobileApp/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/mobileApp/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..ff88743 --- /dev/null +++ b/mobileApp/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,74 @@ +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\GolfController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\MobileAppUserController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\pay\handler\GolfServicePayHandler.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\pay\factory\PaySceneFactory.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\interceptor\MobileAppLoginInterceptor.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\MobilePhysioController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\service\WebTtsWsService.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\UserConsultationRecordController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\service\ProductCarouselService.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\LogoutController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\MobileUserAddrController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\RunningController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\HFPayController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\mapper\FileMapper.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\MobileOrderController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\pay\service\HFPayService.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\service\DoubaoService.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\service\impl\DeviceServiceImpl.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\service\impl\JkProductServiceImpl.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\AppointmentController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\MobileProductController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\HFPayWebhookController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\MobileAppConstant.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\MobileApp.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\service\QuestionService.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\config\WxProperties.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\pay\enums\PayChannelEnum.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\MClinicWorkLogController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\mapper\MobilePhysioMapper.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\pay\handler\CoursePayHandler.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\mapper\QuestionMapper.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\mapper\MobileStoreMapper.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\DeviceController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\pay\handler\HGJPayHandler.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\properties\HuiFuVendorProperties.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\service\DeviceService.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\utils\MobileAppSecurityUtil.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\pay\handler\PaySceneHandler.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\mapper\PhysioMapper.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\mapper\SysDictMapper.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\utils\MobileJwtUtil.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\LoginController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\RatingController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\pojo\vo\ReportTypeVO2.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\CourseStudyController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\pay\service\impl\AliPayService.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\pay\handler\ProductPayHandler.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\config\ResourceConfig.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\mapper\ProductCarouselMapper.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\TestController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\MobileMemberController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\service\UniCloudClient.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\SysDictController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\utils\HFSignUtil.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\AppModuleController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\ComboController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\XunFeiAiController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\mapper\JkProductMapper.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\pay\PayStrategy.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\service\impl\ProductCarouselServiceImpl.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\service\UserService.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\pay\enums\PaySceneEnum.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\DoubaoAIController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\FileController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\pay\handler\RechargePayHandler.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\MInventoryController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\pay\handler\ActiveMemberPayHandler.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\controller\MobileStoreController.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\service\impl\QuestionServiceImpl.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\service\JkProductService.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\pay\service\impl\WechatPayService.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\properties\HuiFuProperties.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\pay\handler\ShoppingCartPayHandler.java +E:\code\unizk\AI_Questioning\mobileApp\src\main\java\cn\unizk\pay\handler\ScanToPowerOnHandler.java diff --git a/mobileApp/target/mobileApp-1.0.0.jar b/mobileApp/target/mobileApp-1.0.0.jar new file mode 100644 index 0000000..33e1ae6 Binary files /dev/null and b/mobileApp/target/mobileApp-1.0.0.jar differ diff --git a/mobileApp/target/mobileApp-1.0.0.jar.original b/mobileApp/target/mobileApp-1.0.0.jar.original new file mode 100644 index 0000000..cb6604e Binary files /dev/null and b/mobileApp/target/mobileApp-1.0.0.jar.original differ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..46155ae --- /dev/null +++ b/pom.xml @@ -0,0 +1,321 @@ + + + 4.0.0 + + cn.unizk + AI_Questioning + pom + 1.0.0 + + applet + common + admin + mobileApp + + + AI_Questioning + + http://www.example.com + + + UTF-8 + 8 + + + + + + org.junit + junit-bom + 5.11.0 + pom + import + + + org.springframework.boot + spring-boot-starter-web + 2.6.7 + + + org.springframework.boot + spring-boot-starter + 2.6.7 + + + + org.springframework.boot + spring-boot-starter-integration + 2.6.7 + + + + org.springframework.integration + spring-integration-core + 5.5.11 + + + + org.springframework.integration + spring-integration-ip + 5.5.11 + + + org.springframework.boot + spring-boot-starter-thymeleaf + 2.6.7 + + + + org.springframework.boot + spring-boot-starter-validation + 2.6.7 + + + org.springframework.boot + spring-boot-starter-test + 2.6.7 + test + + + org.mockito + mockito-core + 3.12.4 + test + + + org.projectlombok + lombok + 1.18.28 + + + org.apache.commons + commons-lang3 + 3.12.0 + + + com.alibaba.fastjson2 + fastjson2 + 2.0.34 + + + org.apache.httpcomponents + httpclient + 4.5.14 + + + cn.hutool + hutool-all + 5.8.16 + + + com.google.code.gson + gson + 2.9.0 + + + mysql + mysql-connector-java + 8.0.28 + + + com.alibaba + druid-spring-boot-starter + 1.2.18 + + + org.springframework.boot + spring-boot-starter-data-jdbc + 2.5.6 + + + org.apache.commons + commons-collections4 + 4.4 + + + com.squareup.okhttp3 + okhttp + 4.9.0 + + + com.baomidou + mybatis-plus-bom + 3.5.14 + pom + import + + + + com.baomidou + mybatis-plus-generator + 3.5.14 + + + + com.aliyun + dysmsapi20170525 + 4.1.2 + + + + com.aliyun + alibabacloud-sts20150401 + 1.0.8 + + + + com.aliyun + alibabacloud-dysmsapi20170525 + 4.0.3 + + + + + org.springframework.boot + spring-boot-starter-data-redis + 2.6.3 + + + + + com.esotericsoftware + kryo + 5.3.0 + + + + + org.freemarker + freemarker + 2.3.31 + + + + cn.unizk + common + 1.0.0 + + + + + org.springframework.boot + spring-boot-starter-security + 2.6.7 + + + + + io.jsonwebtoken + jjwt-api + 0.11.5 + + + + io.jsonwebtoken + jjwt-impl + 0.11.5 + runtime + + + + io.jsonwebtoken + jjwt-jackson + 0.11.5 + runtime + + + + io.minio + minio + 8.5.7 + + + com.squareup.okhttp3 + okhttp + + + + + + + net.coobird + thumbnailator + 0.4.8 + + + + com.github.davidcarboni + encrypted- + 1.0.0 + + + + com.google.zxing + core + 3.4.1 + + + + + org.apache.commons + commons-pool2 + 2.11.1 + + + + + + + org.bouncycastle + bcprov-jdk18on + 1.78.1 + + + + com.huifu.bspay.sdk + dg-java-sdk + 3.0.30 + + + + + org.java-websocket + Java-WebSocket + 1.3.8 + + + + + com.squareup.okio + okio + 2.10.0 + + + + com.alibaba + easyexcel + 3.3.2 + + + + com.volcengine + volcengine-java-sdk-ark-runtime + LATEST + + + + + + + + + + + + + + + + +