Browse Source

first commit

klxj001 3 weeks ago
parent
commit
f7f6b0b91c
100 changed files with 5045 additions and 49 deletions
  1. BIN
      .DS_Store
  2. 14 0
      RiskControlPlatform.code-workspace
  3. 18 3
      pom.xml
  4. 16 0
      restart.sh
  5. BIN
      ruoyi-admin/.DS_Store
  6. 11 0
      ruoyi-admin/pom.xml
  7. 6 6
      ruoyi-admin/src/main/resources/application-dev.yml
  8. 2 4
      ruoyi-admin/src/main/resources/application-prod.yml
  9. 8 3
      ruoyi-admin/src/main/resources/application.yml
  10. 2 2
      ruoyi-common/ruoyi-common-doc/pom.xml
  11. 17 30
      ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java
  12. 1 1
      ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml
  13. 1 0
      ruoyi-modules/pom.xml
  14. 65 0
      ruoyi-modules/ruoyi-riskctrl/pom.xml
  15. 92 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/AccidentReportController.java
  16. 86 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/AuditPersonChangeController.java
  17. 76 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/BlackListController.java
  18. 79 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/DangerSourceController.java
  19. 79 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/EquipmentMaintenanceController.java
  20. 91 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/NoticeAnnouncementController.java
  21. 64 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/PatrolPointController.java
  22. 72 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/PatrolRecordController.java
  23. 73 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/PersonInfoController.java
  24. 92 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/PublicOpinionController.java
  25. 68 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/RiskCaseController.java
  26. 68 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/RiskEventController.java
  27. 95 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/RiskRuleController.java
  28. 68 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/RiskScoreController.java
  29. 85 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/RiskWarningController.java
  30. 128 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/SafetyHazardController.java
  31. 72 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/SafetyTrainingController.java
  32. 89 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/SpecialEquipmentController.java
  33. 76 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/WhiteListController.java
  34. 86 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/WorkReportController.java
  35. 62 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/AccidentReport.java
  36. 58 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/AuditPersonChange.java
  37. 46 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/BlackList.java
  38. 48 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/DangerSource.java
  39. 48 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/EquipmentMaintenance.java
  40. 46 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/NoticeAnnouncement.java
  41. 50 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/PatrolPoint.java
  42. 50 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/PatrolRecord.java
  43. 52 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/PersonInfo.java
  44. 58 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/PublicOpinion.java
  45. 58 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/RiskCase.java
  46. 63 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/RiskEvent.java
  47. 91 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/RiskRule.java
  48. 59 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/RiskScore.java
  49. 46 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/RiskWarning.java
  50. 58 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/SafetyHazard.java
  51. 54 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/SafetyTraining.java
  52. 42 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/SpecialEquipment.java
  53. 46 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/WhiteList.java
  54. 62 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/WorkReport.java
  55. 52 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/AccidentReportBo.java
  56. 48 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/AuditPersonChangeBo.java
  57. 44 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/BlackListBo.java
  58. 38 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/DangerSourceBo.java
  59. 38 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/EquipmentMaintenanceBo.java
  60. 36 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/NoticeAnnouncementBo.java
  61. 40 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/PatrolPointBo.java
  62. 40 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/PatrolRecordBo.java
  63. 45 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/PersonInfoBo.java
  64. 48 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/PublicOpinionBo.java
  65. 39 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/RiskCaseBo.java
  66. 42 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/RiskEventBo.java
  67. 91 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/RiskRuleBo.java
  68. 40 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/RiskScoreBo.java
  69. 36 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/RiskWarningBo.java
  70. 48 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/SafetyHazardBo.java
  71. 49 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/SafetyTrainingBo.java
  72. 32 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/SpecialEquipmentBo.java
  73. 44 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/WhiteListBo.java
  74. 55 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/WorkReportBo.java
  75. 62 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/AccidentReportVo.java
  76. 58 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/AuditPersonChangeVo.java
  77. 34 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/BlackListVo.java
  78. 48 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/DangerSourceVo.java
  79. 48 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/EquipmentMaintenanceVo.java
  80. 46 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/NoticeAnnouncementVo.java
  81. 52 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/PatrolPointVo.java
  82. 50 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/PatrolRecordVo.java
  83. 52 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/PersonInfoVo.java
  84. 58 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/PublicOpinionVo.java
  85. 41 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/RiskCaseVo.java
  86. 43 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/RiskEventVo.java
  87. 89 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/RiskRuleVo.java
  88. 41 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/RiskScoreVo.java
  89. 46 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/RiskWarningVo.java
  90. 58 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/SafetyHazardVo.java
  91. 87 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/SafetyTrainingVo.java
  92. 44 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/SpecialEquipmentVo.java
  93. 34 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/WhiteListVo.java
  94. 62 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/WorkReportVo.java
  95. 34 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/mapper/AccidentReportMapper.java
  96. 34 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/mapper/AuditPersonChangeMapper.java
  97. 20 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/mapper/BlackListMapper.java
  98. 34 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/mapper/DangerSourceMapper.java
  99. 34 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/mapper/EquipmentMaintenanceMapper.java
  100. 34 0
      ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/mapper/NoticeAnnouncementMapper.java

BIN
.DS_Store


+ 14 - 0
RiskControlPlatform.code-workspace

@@ -0,0 +1,14 @@
+{
+	"folders": [
+		{
+			"path": "."
+		},
+		{
+			"path": "../RiskControlPlatform-ui"
+		}
+	],
+	"settings": {
+		"java.compile.nullAnalysis.mode": "automatic",
+		"java.configuration.updateBuildConfiguration": "interactive"
+	}
+}

+ 18 - 3
pom.xml

@@ -53,7 +53,7 @@
         <!-- 插件版本 -->
         <maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>
         <maven-war-plugin.version>3.4.0</maven-war-plugin.version>
-        <maven-compiler-plugin.version>3.14.0</maven-compiler-plugin.version>
+        <maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
         <maven-surefire-plugin.version>3.5.3</maven-surefire-plugin.version>
         <flatten-maven-plugin.version>1.3.0</flatten-maven-plugin.version>
         <!-- 打包默认跳过测试 -->
@@ -357,6 +357,19 @@
                 <version>${revision}</version>
             </dependency>
 
+            <!--  风控模块  -->
+            <dependency>
+                <groupId>org.dromara</groupId>
+                <artifactId>ruoyi-riskctrl</artifactId>
+                <version>${revision}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.dromara</groupId>
+                <artifactId>ruoyi-common-redis</artifactId>
+                <version>${revision}</version>
+            </dependency>
+
         </dependencies>
     </dependencyManagement>
 
@@ -377,12 +390,14 @@
                 <configuration>
                     <release>${java.version}</release>
                     <encoding>${project.build.sourceEncoding}</encoding>
+                    <useIncrementalCompilation>false</useIncrementalCompilation>
+                    <fork>false</fork>
                     <annotationProcessorPaths>
-                        <path>
+                        <!-- <path>
                             <groupId>com.github.therapi</groupId>
                             <artifactId>therapi-runtime-javadoc-scribe</artifactId>
                             <version>${therapi-javadoc.version}</version>
-                        </path>
+                        </path> -->
                         <path>
                             <groupId>org.projectlombok</groupId>
                             <artifactId>lombok</artifactId>

+ 16 - 0
restart.sh

@@ -0,0 +1,16 @@
+#!/bin/bash
+cd /Users/yangjingjing/CodeBuddy/test/RiskControlPlatform
+
+# 1. 停旧进程
+kill $(lsof -t -i:8080) 2>/dev/null
+sleep 2
+
+# 2. 重新编译
+mvn clean install -DskipTests -q
+
+# 3. 启动
+nohup java -jar ruoyi-admin/target/ruoyi-admin.jar --spring.profiles.active=dev > /tmp/app.log 2>&1 &
+
+echo "启动中,稍等30秒..."
+sleep 30
+tail -5 /tmp/app.log

BIN
ruoyi-admin/.DS_Store


+ 11 - 0
ruoyi-admin/pom.xml

@@ -50,6 +50,11 @@
             <artifactId>ruoyi-common-doc</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-redis</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.dromara</groupId>
             <artifactId>ruoyi-common-social</artifactId>
@@ -93,6 +98,12 @@
             <artifactId>ruoyi-workflow</artifactId>
         </dependency>
 
+        <!--  风控模块  -->
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-riskctrl</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>de.codecentric</groupId>
             <artifactId>spring-boot-admin-starter-client</artifactId>

+ 6 - 6
ruoyi-admin/src/main/resources/application-dev.yml

@@ -1,7 +1,7 @@
 --- # 监控中心配置
 spring.boot.admin.client:
   # 增加客户端开关
-  enabled: true
+  enabled: false
   url: http://localhost:9090/admin
   instance:
     service-host-type: IP
@@ -13,7 +13,7 @@ spring.boot.admin.client:
 
 --- # snail-job 配置
 snail-job:
-  enabled: true
+  enabled: false
   # 需要在 SnailJob 后台组管理创建对应名称的组,然后创建任务的时候选择对应的组,才能正确分派任务
   group: "ruoyi_group"
   # SnailJob 接入验证令牌 详见 script/sql/ry_job.sql `sj_group_config` 表
@@ -47,9 +47,9 @@ spring:
           driverClassName: com.mysql.cj.jdbc.Driver
           # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
           # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
-          url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
+          url: jdbc:mysql://localhost:3306/risk_control?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
           username: root
-          password: root
+          password: pass$123
 #        # 从库数据源
 #        slave:
 #          lazy: true
@@ -101,8 +101,6 @@ spring.data:
     port: 6379
     # 数据库索引
     database: 0
-    # redis 密码必须配置
-    password: ruoyi123
     # 连接超时时间
     timeout: 10s
     # 是否开启ssl
@@ -120,6 +118,8 @@ redisson:
   singleServerConfig:
     # 客户端名称 不能用中文
     clientName: RuoYi-Vue-Plus
+    # 密码
+    password:
     # 最小空闲连接数
     connectionMinimumIdleSize: 8
     # 连接池大小

+ 2 - 4
ruoyi-admin/src/main/resources/application-prod.yml

@@ -50,9 +50,9 @@ spring:
           driverClassName: com.mysql.cj.jdbc.Driver
           # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
           # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
-          url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
+          url: jdbc:mysql://localhost:3306/risk_control?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
           username: root
-          password: root
+          password: pass$123
 #        # 从库数据源
 #        slave:
 #          lazy: true
@@ -104,8 +104,6 @@ spring.data:
     port: 6379
     # 数据库索引
     database: 0
-    # redis 密码必须配置
-    password: ruoyi123
     # 连接超时时间
     timeout: 10s
     # 是否开启ssl

+ 8 - 3
ruoyi-admin/src/main/resources/application.yml

@@ -1,10 +1,15 @@
 # 开发环境配置
 server:
   # 服务器的HTTP端口,默认为8080
-  port: 8080
+  port: 9224
   servlet:
     # 应用的访问路径
     context-path: /
+    encoding:
+      # 强制请求和响应编码为UTF-8
+      charset: UTF-8
+      enabled: true
+      force: true
   # undertow 配置
   undertow:
     # HTTP post内容的最大大小。当值为-1时,默认值为大小是无限的
@@ -120,7 +125,7 @@ security:
 # 多租户配置
 tenant:
   # 是否开启
-  enable: true
+  enable: false
   # 排除表
   excludes:
     - sys_menu
@@ -252,7 +257,7 @@ websocket:
 --- # warm-flow工作流配置
 warm-flow:
   # 是否开启工作流,默认true
-  enabled: true
+  enabled: false
   # 是否开启设计器ui
   ui: true
   # 是否显示流程图顶部文字

+ 2 - 2
ruoyi-common/ruoyi-common-doc/pom.xml

@@ -26,10 +26,10 @@
             <artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
         </dependency>
 
-        <dependency>
+        <!-- <dependency>
             <groupId>com.github.therapi</groupId>
             <artifactId>therapi-runtime-javadoc</artifactId>
-        </dependency>
+        </dependency> -->
 
         <dependency>
             <groupId>com.fasterxml.jackson.module</groupId>

+ 17 - 30
ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java

@@ -14,14 +14,16 @@ import org.dromara.common.oss.exception.OssException;
 import org.dromara.common.oss.properties.OssProperties;
 import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
 import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
+import software.amazon.awssdk.core.async.AsyncRequestBody;
 import software.amazon.awssdk.core.async.AsyncResponseTransformer;
-import software.amazon.awssdk.core.async.BlockingInputStreamAsyncRequestBody;
 import software.amazon.awssdk.core.async.ResponsePublisher;
 import software.amazon.awssdk.http.nio.netty.NettyNioAsyncHttpClient;
 import software.amazon.awssdk.regions.Region;
 import software.amazon.awssdk.services.s3.S3AsyncClient;
 import software.amazon.awssdk.services.s3.S3Configuration;
 import software.amazon.awssdk.services.s3.model.GetObjectResponse;
+import software.amazon.awssdk.services.s3.model.PutObjectRequest;
+import software.amazon.awssdk.services.s3.model.PutObjectResponse;
 import software.amazon.awssdk.services.s3.presigner.S3Presigner;
 import software.amazon.awssdk.transfer.s3.S3TransferManager;
 import software.amazon.awssdk.transfer.s3.model.*;
@@ -188,38 +190,23 @@ public class OssClient {
             inputStream = new ByteArrayInputStream(IoUtil.readBytes(inputStream));
         }
         try {
-            // 创建异步请求体(length如果为空会报错)
-            BlockingInputStreamAsyncRequestBody body = BlockingInputStreamAsyncRequestBody.builder()
-                .contentLength(length)
-                .subscribeTimeout(Duration.ofSeconds(120))
+            // 读取所有字节数据
+            byte[] bytes = IoUtil.readBytes(inputStream);
+
+            // 直接使用 S3AsyncClient.putObject 上传,避免 BlockingInputStreamAsyncRequestBody
+            // 在 Undertow 单线程模型下的 doBlockingWrite 120秒超时问题
+            PutObjectRequest putObjectRequest = PutObjectRequest.builder()
+                .bucket(properties.getBucketName())
+                .key(key)
+                .contentType(contentType)
                 .build();
 
-            // 使用 transferManager 进行上传
-            Upload upload = transferManager.upload(
-                x -> {
-                    x.requestBody(body).putObjectRequest(
-                        y -> y.bucket(properties.getBucketName())
-                            .key(key)
-                            .contentType(contentType)
-                            // 用于设置对象的访问控制列表(ACL)。不同云厂商对ACL的支持和实现方式有所不同,
-                            // 因此根据具体的云服务提供商,你可能需要进行不同的配置(自行开启,阿里云有acl权限配置,腾讯云没有acl权限配置)
-                            //.acl(getAccessPolicy().getObjectCannedACL())
-                            .build()
-                    );
-                    if (log.isDebugEnabled()) {
-                        x.addTransferListener(LoggingTransferListener.create());
-                    }
-                }
-            );
+            PutObjectResponse response = client.putObject(
+                putObjectRequest,
+                AsyncRequestBody.fromBytes(bytes)
+            ).join();
 
-            // 将输入流写入请求体
-            body.writeInputStream(inputStream);
-
-            // 等待文件上传操作完成
-            CompletedUpload uploadResult = upload.completionFuture().join();
-            String eTag = uploadResult.response().eTag();
-
-            // 提取上传结果中的 ETag,并构建一个自定义的 UploadResult 对象
+            String eTag = response.eTag();
             return UploadResult.builder().url(getUrl() + StringUtils.SLASH + key).filename(key).eTag(eTag).build();
         } catch (Exception e) {
             throw new OssException("上传文件失败,请检查配置信息:[" + e.getMessage() + "]");

+ 1 - 1
ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml

@@ -2,7 +2,7 @@ spring:
   datasource:
     type: com.zaxxer.hikari.HikariDataSource
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
+    url: jdbc:mysql://localhost:3306/risk_control?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
     username: root
     password: root
     hikari:

+ 1 - 0
ruoyi-modules/pom.xml

@@ -15,6 +15,7 @@
         <module>ruoyi-job</module>
         <module>ruoyi-system</module>
         <module>ruoyi-workflow</module>
+        <module>ruoyi-riskctrl</module>
     </modules>
 
     <artifactId>ruoyi-modules</artifactId>

+ 65 - 0
ruoyi-modules/ruoyi-riskctrl/pom.xml

@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>org.dromara</groupId>
+        <artifactId>ruoyi-modules</artifactId>
+        <version>${revision}</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ruoyi-riskctrl</artifactId>
+
+    <description>
+        riskctrl风控模块
+    </description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-doc</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-mybatis</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-translation</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-log</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-excel</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-security</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-idempotent</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

+ 92 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/AccidentReportController.java

@@ -0,0 +1,92 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.AccidentReportBo;
+import org.dromara.riskctrl.domain.vo.AccidentReportVo;
+import org.dromara.riskctrl.service.IAccidentReportService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 事故上报
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/accidentReport")
+public class AccidentReportController extends BaseController {
+
+    private final IAccidentReportService accidentReportService;
+
+    @SaCheckPermission("riskctrl:accidentReport:list")
+    @GetMapping("/list")
+    public TableDataInfo<AccidentReportVo> list(AccidentReportBo bo, PageQuery pageQuery) {
+        return accidentReportService.selectPageAccidentList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("riskctrl:accidentReport:query")
+    @GetMapping(value = "/{accidentId}")
+    public R<AccidentReportVo> getInfo(@PathVariable @NotNull Long accidentId) {
+        return R.ok(accidentReportService.selectAccidentById(accidentId));
+    }
+
+    @SaCheckPermission("riskctrl:accidentReport:add")
+    @Log(title = "事故上报", businessType = BusinessType.INSERT)
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody AccidentReportBo bo) {
+        return toAjax(accidentReportService.insertAccident(bo));
+    }
+
+    @SaCheckPermission("riskctrl:accidentReport:edit")
+    @Log(title = "事故上报", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody AccidentReportBo bo) {
+        return toAjax(accidentReportService.updateAccident(bo));
+    }
+
+    @SaCheckPermission("riskctrl:accidentReport:process")
+    @Log(title = "事故状态更新", businessType = BusinessType.UPDATE)
+    @PutMapping("/status")
+    public R<Void> updateStatus(@RequestBody AccidentReportBo bo) {
+        return toAjax(accidentReportService.updateAccidentStatus(bo.getAccidentId(), bo.getProcessStatus()));
+    }
+
+    @SaCheckPermission("riskctrl:accidentReport:remove")
+    @Log(title = "事故上报", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{accidentIds}")
+    public R<Void> remove(@PathVariable Long[] accidentIds) {
+        return toAjax(accidentReportService.deleteAccidentByIds(accidentIds));
+    }
+
+    @SaCheckPermission("riskctrl:accidentReport:list")
+    @GetMapping("/stats")
+    public R<Map<String, Object>> stats() {
+        return R.ok(accidentReportService.selectAccidentStats());
+    }
+
+    @SaCheckPermission("riskctrl:accidentReport:list")
+    @GetMapping("/trend")
+    public R<List<Map<String, Object>>> trend(@RequestParam(defaultValue = "6") int months) {
+        return R.ok(accidentReportService.selectMonthlyTrend(months));
+    }
+
+    @SaCheckPermission("riskctrl:accidentReport:list")
+    @GetMapping("/distribution")
+    public R<List<Map<String, Object>>> distribution() {
+        return R.ok(accidentReportService.selectLevelDistribution());
+    }
+
+}

+ 86 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/AuditPersonChangeController.java

@@ -0,0 +1,86 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.AuditPersonChangeBo;
+import org.dromara.riskctrl.domain.vo.AuditPersonChangeVo;
+import org.dromara.riskctrl.service.IAuditPersonChangeService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 审计工作-人员变动
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/auditPersonChange")
+public class AuditPersonChangeController extends BaseController {
+
+    private final IAuditPersonChangeService auditPersonChangeService;
+
+    @SaCheckPermission("riskctrl:auditPersonChange:list")
+    @GetMapping("/list")
+    public TableDataInfo<AuditPersonChangeVo> list(AuditPersonChangeBo bo, PageQuery pageQuery) {
+        return auditPersonChangeService.selectPageChangeList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("riskctrl:auditPersonChange:query")
+    @GetMapping(value = "/{changeId}")
+    public R<AuditPersonChangeVo> getInfo(@PathVariable @NotNull Long changeId) {
+        return R.ok(auditPersonChangeService.selectChangeById(changeId));
+    }
+
+    @SaCheckPermission("riskctrl:auditPersonChange:add")
+    @Log(title = "审计-人员变动", businessType = BusinessType.INSERT)
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody AuditPersonChangeBo bo) {
+        return toAjax(auditPersonChangeService.insertChange(bo));
+    }
+
+    @SaCheckPermission("riskctrl:auditPersonChange:edit")
+    @Log(title = "审计-人员变动", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody AuditPersonChangeBo bo) {
+        return toAjax(auditPersonChangeService.updateChange(bo));
+    }
+
+    @SaCheckPermission("riskctrl:auditPersonChange:audit")
+    @Log(title = "审计-完成审计", businessType = BusinessType.UPDATE)
+    @PutMapping("/complete/{changeId}")
+    public R<Void> completeAudit(@PathVariable Long changeId) {
+        return toAjax(auditPersonChangeService.completeAudit(changeId));
+    }
+
+    @SaCheckPermission("riskctrl:auditPersonChange:remove")
+    @Log(title = "审计-人员变动", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{changeIds}")
+    public R<Void> remove(@PathVariable Long[] changeIds) {
+        return toAjax(auditPersonChangeService.deleteChangeByIds(changeIds));
+    }
+
+    @SaCheckPermission("riskctrl:auditPersonChange:list")
+    @GetMapping("/stats")
+    public R<Map<String, Object>> stats() {
+        return R.ok(auditPersonChangeService.selectChangeStats());
+    }
+
+    @SaCheckPermission("riskctrl:auditPersonChange:list")
+    @GetMapping("/distribution")
+    public R<List<Map<String, Object>>> distribution() {
+        return R.ok(auditPersonChangeService.selectTypeDistribution());
+    }
+
+}

+ 76 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/BlackListController.java

@@ -0,0 +1,76 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.BlackListBo;
+import org.dromara.riskctrl.domain.vo.BlackListVo;
+import org.dromara.riskctrl.service.IBlackListService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 黑名单管理
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/blacklist")
+public class BlackListController extends BaseController {
+
+    private final IBlackListService blackListService;
+
+    @SaCheckPermission("riskctrl:blacklist:list")
+    @GetMapping("/list")
+    public TableDataInfo<BlackListVo> list(BlackListBo bo, PageQuery pageQuery) {
+        return blackListService.selectPageBlackList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("riskctrl:blacklist:query")
+    @GetMapping(value = "/{blackId}")
+    public R<BlackListVo> getInfo(@PathVariable Long blackId) {
+        return R.ok(blackListService.selectBlackListById(blackId));
+    }
+
+    @SaCheckPermission("riskctrl:blacklist:add")
+    @Log(title = "黑名单", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody BlackListBo bo) {
+        return toAjax(blackListService.insertBlackList(bo));
+    }
+
+    @SaCheckPermission("riskctrl:blacklist:edit")
+    @Log(title = "黑名单", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody BlackListBo bo) {
+        return toAjax(blackListService.updateBlackList(bo));
+    }
+
+    @SaCheckPermission("riskctrl:blacklist:edit")
+    @Log(title = "黑名单", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping("/changeStatus")
+    public R<Void> changeStatus(@RequestBody BlackListBo bo) {
+        return toAjax(blackListService.updateBlackListStatus(bo.getBlackId(), bo.getStatus()));
+    }
+
+    @SaCheckPermission("riskctrl:blacklist:remove")
+    @Log(title = "黑名单", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{blackIds}")
+    public R<Void> remove(@PathVariable Long[] blackIds) {
+        return toAjax(blackListService.deleteBlackListByIds(blackIds));
+    }
+
+}

+ 79 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/DangerSourceController.java

@@ -0,0 +1,79 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.DangerSourceBo;
+import org.dromara.riskctrl.domain.vo.DangerSourceVo;
+import org.dromara.riskctrl.service.IDangerSourceService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 危险源
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/dangerSource")
+public class DangerSourceController extends BaseController {
+
+    private final IDangerSourceService dangerSourceService;
+
+    @SaCheckPermission("riskctrl:dangerSource:list")
+    @GetMapping("/list")
+    public TableDataInfo<DangerSourceVo> list(DangerSourceBo bo, PageQuery pageQuery) {
+        return dangerSourceService.selectPageSourceList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("riskctrl:dangerSource:query")
+    @GetMapping(value = "/{sourceId}")
+    public R<DangerSourceVo> getInfo(@PathVariable @NotNull Long sourceId) {
+        return R.ok(dangerSourceService.selectSourceById(sourceId));
+    }
+
+    @SaCheckPermission("riskctrl:dangerSource:add")
+    @Log(title = "危险源", businessType = BusinessType.INSERT)
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody DangerSourceBo bo) {
+        return toAjax(dangerSourceService.insertSource(bo));
+    }
+
+    @SaCheckPermission("riskctrl:dangerSource:edit")
+    @Log(title = "危险源", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody DangerSourceBo bo) {
+        return toAjax(dangerSourceService.updateSource(bo));
+    }
+
+    @SaCheckPermission("riskctrl:dangerSource:remove")
+    @Log(title = "危险源", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{sourceIds}")
+    public R<Void> remove(@PathVariable Long[] sourceIds) {
+        return toAjax(dangerSourceService.deleteSourceByIds(sourceIds));
+    }
+
+    @SaCheckPermission("riskctrl:dangerSource:list")
+    @GetMapping("/stats")
+    public R<Map<String, Object>> stats() {
+        return R.ok(dangerSourceService.selectSourceStats());
+    }
+
+    @SaCheckPermission("riskctrl:dangerSource:list")
+    @GetMapping("/distribution")
+    public R<List<Map<String, Object>>> distribution() {
+        return R.ok(dangerSourceService.selectTypeDistribution());
+    }
+
+}

+ 79 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/EquipmentMaintenanceController.java

@@ -0,0 +1,79 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.EquipmentMaintenanceBo;
+import org.dromara.riskctrl.domain.vo.EquipmentMaintenanceVo;
+import org.dromara.riskctrl.service.IEquipmentMaintenanceService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 设备维护记录
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/equipmentMaintenance")
+public class EquipmentMaintenanceController extends BaseController {
+
+    private final IEquipmentMaintenanceService equipmentMaintenanceService;
+
+    @SaCheckPermission("riskctrl:equipmentMaintenance:list")
+    @GetMapping("/list")
+    public TableDataInfo<EquipmentMaintenanceVo> list(EquipmentMaintenanceBo bo, PageQuery pageQuery) {
+        return equipmentMaintenanceService.selectPageMaintenanceList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("riskctrl:equipmentMaintenance:query")
+    @GetMapping(value = "/{maintenanceId}")
+    public R<EquipmentMaintenanceVo> getInfo(@PathVariable @NotNull Long maintenanceId) {
+        return R.ok(equipmentMaintenanceService.selectMaintenanceById(maintenanceId));
+    }
+
+    @SaCheckPermission("riskctrl:equipmentMaintenance:add")
+    @Log(title = "设备维护", businessType = BusinessType.INSERT)
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody EquipmentMaintenanceBo bo) {
+        return toAjax(equipmentMaintenanceService.insertMaintenance(bo));
+    }
+
+    @SaCheckPermission("riskctrl:equipmentMaintenance:edit")
+    @Log(title = "设备维护", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody EquipmentMaintenanceBo bo) {
+        return toAjax(equipmentMaintenanceService.updateMaintenance(bo));
+    }
+
+    @SaCheckPermission("riskctrl:equipmentMaintenance:remove")
+    @Log(title = "设备维护", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{maintenanceIds}")
+    public R<Void> remove(@PathVariable Long[] maintenanceIds) {
+        return toAjax(equipmentMaintenanceService.deleteMaintenanceByIds(maintenanceIds));
+    }
+
+    @SaCheckPermission("riskctrl:equipmentMaintenance:list")
+    @GetMapping("/stats")
+    public R<Map<String, Object>> stats() {
+        return R.ok(equipmentMaintenanceService.selectMaintenanceStats());
+    }
+
+    @SaCheckPermission("riskctrl:equipmentMaintenance:list")
+    @GetMapping("/byEquipment/{equipmentId}")
+    public R<List<EquipmentMaintenanceVo>> byEquipment(@PathVariable Long equipmentId) {
+        return R.ok(equipmentMaintenanceService.selectMaintenanceByEquipmentId(equipmentId));
+    }
+
+}

+ 91 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/NoticeAnnouncementController.java

@@ -0,0 +1,91 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.NoticeAnnouncementBo;
+import org.dromara.riskctrl.domain.vo.NoticeAnnouncementVo;
+import org.dromara.riskctrl.service.INoticeAnnouncementService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 通知公告
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/noticeAnnouncement")
+public class NoticeAnnouncementController extends BaseController {
+
+    private final INoticeAnnouncementService noticeAnnouncementService;
+
+    @SaCheckPermission("riskctrl:noticeAnnouncement:list")
+    @GetMapping("/list")
+    public TableDataInfo<NoticeAnnouncementVo> list(NoticeAnnouncementBo bo, PageQuery pageQuery) {
+        return noticeAnnouncementService.selectPageNoticeList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("riskctrl:noticeAnnouncement:query")
+    @GetMapping(value = "/{noticeId}")
+    public R<NoticeAnnouncementVo> getInfo(@PathVariable @NotNull Long noticeId) {
+        return R.ok(noticeAnnouncementService.selectNoticeById(noticeId));
+    }
+
+    @SaCheckPermission("riskctrl:noticeAnnouncement:add")
+    @Log(title = "通知公告", businessType = BusinessType.INSERT)
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody NoticeAnnouncementBo bo) {
+        return toAjax(noticeAnnouncementService.insertNotice(bo));
+    }
+
+    @SaCheckPermission("riskctrl:noticeAnnouncement:edit")
+    @Log(title = "通知公告", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody NoticeAnnouncementBo bo) {
+        return toAjax(noticeAnnouncementService.updateNotice(bo));
+    }
+
+    @SaCheckPermission("riskctrl:noticeAnnouncement:publish")
+    @Log(title = "通知公告发布", businessType = BusinessType.UPDATE)
+    @PutMapping("/publish/{noticeId}")
+    public R<Void> publish(@PathVariable Long noticeId) {
+        return toAjax(noticeAnnouncementService.publishNotice(noticeId));
+    }
+
+    @SaCheckPermission("riskctrl:noticeAnnouncement:remove")
+    @Log(title = "通知公告", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{noticeIds}")
+    public R<Void> remove(@PathVariable Long[] noticeIds) {
+        return toAjax(noticeAnnouncementService.deleteNoticeByIds(noticeIds));
+    }
+
+    @SaCheckPermission("riskctrl:noticeAnnouncement:list")
+    @GetMapping("/stats")
+    public R<Map<String, Object>> stats() {
+        return R.ok(noticeAnnouncementService.selectNoticeStats());
+    }
+
+    @SaCheckPermission("riskctrl:noticeAnnouncement:list")
+    @GetMapping("/latest")
+    public R<List<NoticeAnnouncementVo>> latest(@RequestParam(defaultValue = "10") int limit) {
+        return R.ok(noticeAnnouncementService.selectLatestNotices(limit));
+    }
+
+    @GetMapping("/published")
+    public R<List<NoticeAnnouncementVo>> published(@RequestParam(defaultValue = "10") int limit) {
+        return R.ok(noticeAnnouncementService.selectPublishedNotices(limit));
+    }
+
+}

+ 64 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/PatrolPointController.java

@@ -0,0 +1,64 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.PatrolPointBo;
+import org.dromara.riskctrl.domain.vo.PatrolPointVo;
+import org.dromara.riskctrl.service.IPatrolPointService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 巡检打卡点
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/patrolPoint")
+public class PatrolPointController extends BaseController {
+
+    private final IPatrolPointService patrolPointService;
+
+    @SaCheckPermission("riskctrl:patrolPoint:list")
+    @GetMapping("/list")
+    public TableDataInfo<PatrolPointVo> list(PatrolPointBo bo, PageQuery pageQuery) {
+        return patrolPointService.selectPagePointList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("riskctrl:patrolPoint:query")
+    @GetMapping(value = "/{pointId}")
+    public R<PatrolPointVo> getInfo(@PathVariable @NotNull Long pointId) {
+        return R.ok(patrolPointService.selectPointById(pointId));
+    }
+
+    @SaCheckPermission("riskctrl:patrolPoint:add")
+    @Log(title = "巡检打卡点", businessType = BusinessType.INSERT)
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody PatrolPointBo bo) {
+        return toAjax(patrolPointService.insertPoint(bo));
+    }
+
+    @SaCheckPermission("riskctrl:patrolPoint:edit")
+    @Log(title = "巡检打卡点", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody PatrolPointBo bo) {
+        return toAjax(patrolPointService.updatePoint(bo));
+    }
+
+    @SaCheckPermission("riskctrl:patrolPoint:remove")
+    @Log(title = "巡检打卡点", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{pointIds}")
+    public R<Void> remove(@PathVariable Long[] pointIds) {
+        return toAjax(patrolPointService.deletePointByIds(pointIds));
+    }
+
+}

+ 72 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/PatrolRecordController.java

@@ -0,0 +1,72 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.PatrolRecordBo;
+import org.dromara.riskctrl.domain.vo.PatrolRecordVo;
+import org.dromara.riskctrl.service.IPatrolRecordService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 巡检打卡记录
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/patrolRecord")
+public class PatrolRecordController extends BaseController {
+
+    private final IPatrolRecordService patrolRecordService;
+
+    @SaCheckPermission("riskctrl:patrolRecord:list")
+    @GetMapping("/list")
+    public TableDataInfo<PatrolRecordVo> list(PatrolRecordBo bo, PageQuery pageQuery) {
+        return patrolRecordService.selectPageRecordList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("riskctrl:patrolRecord:query")
+    @GetMapping(value = "/{recordId}")
+    public R<PatrolRecordVo> getInfo(@PathVariable @NotNull Long recordId) {
+        return R.ok(patrolRecordService.selectRecordById(recordId));
+    }
+
+    @SaCheckPermission("riskctrl:patrolRecord:add")
+    @Log(title = "巡检打卡", businessType = BusinessType.INSERT)
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody PatrolRecordBo bo) {
+        return toAjax(patrolRecordService.insertRecord(bo));
+    }
+
+    @SaCheckPermission("riskctrl:patrolRecord:remove")
+    @Log(title = "巡检打卡", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{recordIds}")
+    public R<Void> remove(@PathVariable Long[] recordIds) {
+        return toAjax(patrolRecordService.deleteRecordByIds(recordIds));
+    }
+
+    @SaCheckPermission("riskctrl:patrolRecord:list")
+    @GetMapping("/todayStats")
+    public R<Map<String, Object>> todayStats() {
+        return R.ok(patrolRecordService.selectTodayStats());
+    }
+
+    @SaCheckPermission("riskctrl:patrolRecord:list")
+    @GetMapping("/byPoint/{pointId}")
+    public R<List<PatrolRecordVo>> byPoint(@PathVariable Long pointId, @RequestParam(defaultValue = "20") int limit) {
+        return R.ok(patrolRecordService.selectRecordsByPointId(pointId, limit));
+    }
+
+}

+ 73 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/PersonInfoController.java

@@ -0,0 +1,73 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.PersonInfoBo;
+import org.dromara.riskctrl.domain.vo.PersonInfoVo;
+import org.dromara.riskctrl.service.IPersonInfoService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 人员信息
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/personInfo")
+public class PersonInfoController extends BaseController {
+
+    private final IPersonInfoService personInfoService;
+
+    @SaCheckPermission("riskctrl:personInfo:list")
+    @GetMapping("/list")
+    public TableDataInfo<PersonInfoVo> list(PersonInfoBo bo, PageQuery pageQuery) {
+        return personInfoService.selectPagePersonList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("riskctrl:personInfo:query")
+    @GetMapping(value = "/{personId}")
+    public R<PersonInfoVo> getInfo(@PathVariable @NotNull Long personId) {
+        return R.ok(personInfoService.selectPersonById(personId));
+    }
+
+    @SaCheckPermission("riskctrl:personInfo:add")
+    @Log(title = "人员信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody PersonInfoBo bo) {
+        return toAjax(personInfoService.insertPerson(bo));
+    }
+
+    @SaCheckPermission("riskctrl:personInfo:edit")
+    @Log(title = "人员信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody PersonInfoBo bo) {
+        return toAjax(personInfoService.updatePerson(bo));
+    }
+
+    @SaCheckPermission("riskctrl:personInfo:remove")
+    @Log(title = "人员信息", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{personIds}")
+    public R<Void> remove(@PathVariable Long[] personIds) {
+        return toAjax(personInfoService.deletePersonByIds(personIds));
+    }
+
+    @SaCheckPermission("riskctrl:personInfo:list")
+    @GetMapping("/stats")
+    public R<Map<String, Object>> stats() {
+        return R.ok(personInfoService.selectPersonStats());
+    }
+
+}

+ 92 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/PublicOpinionController.java

@@ -0,0 +1,92 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.PublicOpinionBo;
+import org.dromara.riskctrl.domain.vo.PublicOpinionVo;
+import org.dromara.riskctrl.service.IPublicOpinionService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 舆情推送
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/publicOpinion")
+public class PublicOpinionController extends BaseController {
+
+    private final IPublicOpinionService publicOpinionService;
+
+    @SaCheckPermission("riskctrl:publicOpinion:list")
+    @GetMapping("/list")
+    public TableDataInfo<PublicOpinionVo> list(PublicOpinionBo bo, PageQuery pageQuery) {
+        return publicOpinionService.selectPageOpinionList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("riskctrl:publicOpinion:query")
+    @GetMapping(value = "/{opinionId}")
+    public R<PublicOpinionVo> getInfo(@PathVariable @NotNull Long opinionId) {
+        return R.ok(publicOpinionService.selectOpinionById(opinionId));
+    }
+
+    @SaCheckPermission("riskctrl:publicOpinion:add")
+    @Log(title = "舆情推送", businessType = BusinessType.INSERT)
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody PublicOpinionBo bo) {
+        return toAjax(publicOpinionService.insertOpinion(bo));
+    }
+
+    @SaCheckPermission("riskctrl:publicOpinion:edit")
+    @Log(title = "舆情推送", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody PublicOpinionBo bo) {
+        return toAjax(publicOpinionService.updateOpinion(bo));
+    }
+
+    @SaCheckPermission("riskctrl:publicOpinion:process")
+    @Log(title = "舆情推送处理", businessType = BusinessType.UPDATE)
+    @PutMapping("/process")
+    public R<Void> process(@RequestBody PublicOpinionBo bo) {
+        return toAjax(publicOpinionService.processOpinion(bo.getOpinionId(), bo.getProcessStatus(), bo.getProcessResult()));
+    }
+
+    @SaCheckPermission("riskctrl:publicOpinion:remove")
+    @Log(title = "舆情推送", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{opinionIds}")
+    public R<Void> remove(@PathVariable Long[] opinionIds) {
+        return toAjax(publicOpinionService.deleteOpinionByIds(opinionIds));
+    }
+
+    @SaCheckPermission("riskctrl:publicOpinion:list")
+    @GetMapping("/stats")
+    public R<Map<String, Object>> stats() {
+        return R.ok(publicOpinionService.selectOpinionStats());
+    }
+
+    @SaCheckPermission("riskctrl:publicOpinion:list")
+    @GetMapping("/trend")
+    public R<List<Map<String, Object>>> trend(@RequestParam(defaultValue = "6") int months) {
+        return R.ok(publicOpinionService.selectMonthlyTrend(months));
+    }
+
+    @SaCheckPermission("riskctrl:publicOpinion:list")
+    @GetMapping("/latest")
+    public R<List<PublicOpinionVo>> latest(@RequestParam(defaultValue = "10") int limit) {
+        return R.ok(publicOpinionService.selectLatestOpinions(limit));
+    }
+
+}

+ 68 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/RiskCaseController.java

@@ -0,0 +1,68 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.RiskCaseBo;
+import org.dromara.riskctrl.domain.vo.RiskCaseVo;
+import org.dromara.riskctrl.service.IRiskCaseService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 风控案例管理
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/case")
+public class RiskCaseController extends BaseController {
+
+    private final IRiskCaseService riskCaseService;
+
+    @SaCheckPermission("riskctrl:case:list")
+    @GetMapping("/list")
+    public TableDataInfo<RiskCaseVo> list(RiskCaseBo bo, PageQuery pageQuery) {
+        return riskCaseService.selectPageRiskCaseList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("riskctrl:case:query")
+    @GetMapping(value = "/{caseId}")
+    public R<RiskCaseVo> getInfo(@PathVariable Long caseId) {
+        return R.ok(riskCaseService.selectRiskCaseById(caseId));
+    }
+
+    @SaCheckPermission("riskctrl:case:add")
+    @Log(title = "风控案例", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody RiskCaseBo bo) {
+        return toAjax(riskCaseService.insertRiskCase(bo));
+    }
+
+    @SaCheckPermission("riskctrl:case:edit")
+    @Log(title = "风控案例", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody RiskCaseBo bo) {
+        return toAjax(riskCaseService.updateRiskCase(bo));
+    }
+
+    @SaCheckPermission("riskctrl:case:remove")
+    @Log(title = "风控案例", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{caseIds}")
+    public R<Void> remove(@PathVariable Long[] caseIds) {
+        return toAjax(riskCaseService.deleteRiskCaseByIds(caseIds));
+    }
+
+}

+ 68 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/RiskEventController.java

@@ -0,0 +1,68 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.RiskEventBo;
+import org.dromara.riskctrl.domain.vo.RiskEventVo;
+import org.dromara.riskctrl.service.IRiskEventService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 风控事件管理
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/event")
+public class RiskEventController extends BaseController {
+
+    private final IRiskEventService riskEventService;
+
+    @SaCheckPermission("riskctrl:event:list")
+    @GetMapping("/list")
+    public TableDataInfo<RiskEventVo> list(RiskEventBo bo, PageQuery pageQuery) {
+        return riskEventService.selectPageRiskEventList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("riskctrl:event:query")
+    @GetMapping(value = "/{eventId}")
+    public R<RiskEventVo> getInfo(@PathVariable Long eventId) {
+        return R.ok(riskEventService.selectRiskEventById(eventId));
+    }
+
+    @SaCheckPermission("riskctrl:event:add")
+    @Log(title = "风控事件", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody RiskEventBo bo) {
+        return toAjax(riskEventService.insertRiskEvent(bo));
+    }
+
+    @SaCheckPermission("riskctrl:event:edit")
+    @Log(title = "风控事件", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody RiskEventBo bo) {
+        return toAjax(riskEventService.updateRiskEvent(bo));
+    }
+
+    @SaCheckPermission("riskctrl:event:remove")
+    @Log(title = "风控事件", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{eventIds}")
+    public R<Void> remove(@PathVariable Long[] eventIds) {
+        return toAjax(riskEventService.deleteRiskEventByIds(eventIds));
+    }
+
+}

+ 95 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/RiskRuleController.java

@@ -0,0 +1,95 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.RiskRuleBo;
+import org.dromara.riskctrl.domain.vo.RiskRuleVo;
+import org.dromara.riskctrl.service.IRiskRuleService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 风控规则管理
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/rule")
+public class RiskRuleController extends BaseController {
+
+    private final IRiskRuleService riskRuleService;
+
+    /**
+     * 获取风控规则列表
+     */
+    @SaCheckPermission("riskctrl:rule:list")
+    @GetMapping("/list")
+    public TableDataInfo<RiskRuleVo> list(RiskRuleBo bo, PageQuery pageQuery) {
+        return riskRuleService.selectPageRiskRuleList(bo, pageQuery);
+    }
+
+    /**
+     * 获取风控规则详细信息
+     */
+    @SaCheckPermission("riskctrl:rule:query")
+    @GetMapping(value = "/{ruleId}")
+    public R<RiskRuleVo> getInfo(@PathVariable Long ruleId) {
+        return R.ok(riskRuleService.selectRiskRuleById(ruleId));
+    }
+
+    /**
+     * 新增风控规则
+     */
+    @SaCheckPermission("riskctrl:rule:add")
+    @Log(title = "风控规则", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody RiskRuleBo bo) {
+        return toAjax(riskRuleService.insertRiskRule(bo));
+    }
+
+    /**
+     * 修改风控规则
+     */
+    @SaCheckPermission("riskctrl:rule:edit")
+    @Log(title = "风控规则", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody RiskRuleBo bo) {
+        return toAjax(riskRuleService.updateRiskRule(bo));
+    }
+
+    /**
+     * 修改风控规则状态
+     */
+    @SaCheckPermission("riskctrl:rule:edit")
+    @Log(title = "风控规则", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping("/changeStatus")
+    public R<Void> changeStatus(@RequestBody RiskRuleBo bo) {
+        return toAjax(riskRuleService.updateRiskRuleStatus(bo.getRuleId(), bo.getStatus()));
+    }
+
+    /**
+     * 删除风控规则
+     */
+    @SaCheckPermission("riskctrl:rule:remove")
+    @Log(title = "风控规则", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ruleIds}")
+    public R<Void> remove(@PathVariable Long[] ruleIds) {
+        return toAjax(riskRuleService.deleteRiskRuleByIds(ruleIds));
+    }
+
+}

+ 68 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/RiskScoreController.java

@@ -0,0 +1,68 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.RiskScoreBo;
+import org.dromara.riskctrl.domain.vo.RiskScoreVo;
+import org.dromara.riskctrl.service.IRiskScoreService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 风险评分管理
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/score")
+public class RiskScoreController extends BaseController {
+
+    private final IRiskScoreService riskScoreService;
+
+    @SaCheckPermission("riskctrl:score:list")
+    @GetMapping("/list")
+    public TableDataInfo<RiskScoreVo> list(RiskScoreBo bo, PageQuery pageQuery) {
+        return riskScoreService.selectPageRiskScoreList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("riskctrl:score:query")
+    @GetMapping(value = "/{scoreId}")
+    public R<RiskScoreVo> getInfo(@PathVariable Long scoreId) {
+        return R.ok(riskScoreService.selectRiskScoreById(scoreId));
+    }
+
+    @SaCheckPermission("riskctrl:score:add")
+    @Log(title = "风险评分", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody RiskScoreBo bo) {
+        return toAjax(riskScoreService.insertRiskScore(bo));
+    }
+
+    @SaCheckPermission("riskctrl:score:edit")
+    @Log(title = "风险评分", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody RiskScoreBo bo) {
+        return toAjax(riskScoreService.updateRiskScore(bo));
+    }
+
+    @SaCheckPermission("riskctrl:score:remove")
+    @Log(title = "风险评分", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{scoreIds}")
+    public R<Void> remove(@PathVariable Long[] scoreIds) {
+        return toAjax(riskScoreService.deleteRiskScoreByIds(scoreIds));
+    }
+
+}

+ 85 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/RiskWarningController.java

@@ -0,0 +1,85 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.RiskWarningBo;
+import org.dromara.riskctrl.domain.vo.RiskWarningVo;
+import org.dromara.riskctrl.service.IRiskWarningService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 风险警示
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/riskWarning")
+public class RiskWarningController extends BaseController {
+
+    private final IRiskWarningService riskWarningService;
+
+    @SaCheckPermission("riskctrl:riskWarning:list")
+    @GetMapping("/list")
+    public TableDataInfo<RiskWarningVo> list(RiskWarningBo bo, PageQuery pageQuery) {
+        return riskWarningService.selectPageWarningList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("riskctrl:riskWarning:query")
+    @GetMapping(value = "/{warningId}")
+    public R<RiskWarningVo> getInfo(@PathVariable @NotNull Long warningId) {
+        return R.ok(riskWarningService.selectWarningById(warningId));
+    }
+
+    @SaCheckPermission("riskctrl:riskWarning:add")
+    @Log(title = "风险警示", businessType = BusinessType.INSERT)
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody RiskWarningBo bo) {
+        return toAjax(riskWarningService.insertWarning(bo));
+    }
+
+    @SaCheckPermission("riskctrl:riskWarning:edit")
+    @Log(title = "风险警示", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody RiskWarningBo bo) {
+        return toAjax(riskWarningService.updateWarning(bo));
+    }
+
+    @SaCheckPermission("riskctrl:riskWarning:remove")
+    @Log(title = "风险警示", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{warningIds}")
+    public R<Void> remove(@PathVariable Long[] warningIds) {
+        return toAjax(riskWarningService.deleteWarningByIds(warningIds));
+    }
+
+    @SaCheckPermission("riskctrl:riskWarning:list")
+    @GetMapping("/stats")
+    public R<Map<String, Object>> stats() {
+        return R.ok(riskWarningService.selectWarningStats());
+    }
+
+    @SaCheckPermission("riskctrl:riskWarning:list")
+    @GetMapping("/distribution")
+    public R<List<Map<String, Object>>> distribution() {
+        return R.ok(riskWarningService.selectLevelDistribution());
+    }
+
+    @SaCheckPermission("riskctrl:riskWarning:list")
+    @GetMapping("/latest")
+    public R<List<RiskWarningVo>> latest(@RequestParam(defaultValue = "10") int limit) {
+        return R.ok(riskWarningService.selectLatestWarnings(limit));
+    }
+
+}

+ 128 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/SafetyHazardController.java

@@ -0,0 +1,128 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.SafetyHazardBo;
+import org.dromara.riskctrl.domain.vo.SafetyHazardVo;
+import org.dromara.riskctrl.service.ISafetyHazardService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 安全隐患
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/hazard")
+public class SafetyHazardController extends BaseController {
+
+    private final ISafetyHazardService hazardService;
+
+    /**
+     * 查询安全隐患列表
+     */
+    @SaCheckPermission("riskctrl:hazard:list")
+    @GetMapping("/list")
+    public TableDataInfo<SafetyHazardVo> list(SafetyHazardBo bo, PageQuery pageQuery) {
+        return hazardService.selectPageHazardList(bo, pageQuery);
+    }
+
+    /**
+     * 查询安全隐患详情
+     */
+    @SaCheckPermission("riskctrl:hazard:query")
+    @GetMapping(value = "/{hazardId}")
+    public R<SafetyHazardVo> getInfo(@PathVariable @NotNull Long hazardId) {
+        return R.ok(hazardService.selectHazardById(hazardId));
+    }
+
+    /**
+     * 新增安全隐患
+     */
+    @SaCheckPermission("riskctrl:hazard:add")
+    @Log(title = "安全隐患", businessType = BusinessType.INSERT)
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody SafetyHazardBo bo) {
+        return toAjax(hazardService.insertHazard(bo));
+    }
+
+    /**
+     * 修改安全隐患
+     */
+    @SaCheckPermission("riskctrl:hazard:edit")
+    @Log(title = "安全隐患", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody SafetyHazardBo bo) {
+        return toAjax(hazardService.updateHazard(bo));
+    }
+
+    /**
+     * 处理安全隐患
+     */
+    @SaCheckPermission("riskctrl:hazard:process")
+    @Log(title = "安全隐患", businessType = BusinessType.UPDATE)
+    @PutMapping("/process")
+    public R<Void> process(@RequestBody SafetyHazardBo bo) {
+        return toAjax(hazardService.processHazard(bo.getHazardId(), bo.getProcessStatus(), bo.getProcessResult()));
+    }
+
+    /**
+     * 删除安全隐患
+     */
+    @SaCheckPermission("riskctrl:hazard:remove")
+    @Log(title = "安全隐患", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{hazardIds}")
+    public R<Void> remove(@PathVariable Long[] hazardIds) {
+        return toAjax(hazardService.deleteHazardByIds(hazardIds));
+    }
+
+    /**
+     * 安全隐患统计
+     */
+    @SaCheckPermission("riskctrl:hazard:list")
+    @GetMapping("/stats")
+    public R<Map<String, Object>> stats() {
+        return R.ok(hazardService.selectHazardStats());
+    }
+
+    /**
+     * 月度隐患处理趋势
+     */
+    @SaCheckPermission("riskctrl:hazard:list")
+    @GetMapping("/trend")
+    public R<List<Map<String, Object>>> trend(@RequestParam(defaultValue = "6") int months) {
+        return R.ok(hazardService.selectMonthlyTrend(months));
+    }
+
+    /**
+     * 隐患类型分布
+     */
+    @SaCheckPermission("riskctrl:hazard:list")
+    @GetMapping("/distribution")
+    public R<List<Map<String, Object>>> distribution() {
+        return R.ok(hazardService.selectTypeDistribution());
+    }
+
+    /**
+     * 最新安全隐患
+     */
+    @SaCheckPermission("riskctrl:hazard:list")
+    @GetMapping("/latest")
+    public R<List<SafetyHazardVo>> latest(@RequestParam(defaultValue = "10") int limit) {
+        return R.ok(hazardService.selectLatestHazards(limit));
+    }
+
+}

+ 72 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/SafetyTrainingController.java

@@ -0,0 +1,72 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.SafetyTrainingBo;
+import org.dromara.riskctrl.domain.vo.SafetyTrainingVo;
+import org.dromara.riskctrl.service.ISafetyTrainingService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 安全培训
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/safetyTraining")
+public class SafetyTrainingController extends BaseController {
+
+    private final ISafetyTrainingService safetyTrainingService;
+
+    @SaCheckPermission("riskctrl:safetyTraining:list")
+    @GetMapping("/list")
+    public TableDataInfo<SafetyTrainingVo> list(SafetyTrainingBo bo, PageQuery pageQuery) {
+        return safetyTrainingService.selectPageTrainingList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("riskctrl:safetyTraining:query")
+    @GetMapping(value = "/{trainingId}")
+    public R<SafetyTrainingVo> getInfo(@PathVariable @NotNull Long trainingId) {
+        return R.ok(safetyTrainingService.selectTrainingById(trainingId));
+    }
+
+    @SaCheckPermission("riskctrl:safetyTraining:add")
+    @Log(title = "安全培训", businessType = BusinessType.INSERT)
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody SafetyTrainingBo bo) {
+        return toAjax(safetyTrainingService.insertTraining(bo));
+    }
+
+    @SaCheckPermission("riskctrl:safetyTraining:edit")
+    @Log(title = "安全培训", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody SafetyTrainingBo bo) {
+        return toAjax(safetyTrainingService.updateTraining(bo));
+    }
+
+    @SaCheckPermission("riskctrl:safetyTraining:remove")
+    @Log(title = "安全培训", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{trainingIds}")
+    public R<Void> remove(@PathVariable Long[] trainingIds) {
+        return toAjax(safetyTrainingService.deleteTrainingByIds(trainingIds));
+    }
+
+    @SaCheckPermission("riskctrl:safetyTraining:list")
+    @GetMapping("/latest")
+    public R<List<SafetyTrainingVo>> latest(@RequestParam(defaultValue = "5") int limit) {
+        return R.ok(safetyTrainingService.selectLatestTrainings(limit));
+    }
+
+}

+ 89 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/SpecialEquipmentController.java

@@ -0,0 +1,89 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.SpecialEquipmentBo;
+import org.dromara.riskctrl.domain.vo.SpecialEquipmentVo;
+import org.dromara.riskctrl.service.ISpecialEquipmentService;
+import org.dromara.riskctrl.service.IEquipmentMaintenanceService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 特种设备
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/specialEquipment")
+public class SpecialEquipmentController extends BaseController {
+
+    private final ISpecialEquipmentService specialEquipmentService;
+    private final IEquipmentMaintenanceService equipmentMaintenanceService;
+
+    @SaCheckPermission("riskctrl:specialEquipment:list")
+    @GetMapping("/list")
+    public TableDataInfo<SpecialEquipmentVo> list(SpecialEquipmentBo bo, PageQuery pageQuery) {
+        return specialEquipmentService.selectPageEquipmentList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("riskctrl:specialEquipment:query")
+    @GetMapping(value = "/{equipmentId}")
+    public R<SpecialEquipmentVo> getInfo(@PathVariable @NotNull Long equipmentId) {
+        return R.ok(specialEquipmentService.selectEquipmentById(equipmentId));
+    }
+
+    @SaCheckPermission("riskctrl:specialEquipment:add")
+    @Log(title = "特种设备", businessType = BusinessType.INSERT)
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody SpecialEquipmentBo bo) {
+        return toAjax(specialEquipmentService.insertEquipment(bo));
+    }
+
+    @SaCheckPermission("riskctrl:specialEquipment:edit")
+    @Log(title = "特种设备", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody SpecialEquipmentBo bo) {
+        return toAjax(specialEquipmentService.updateEquipment(bo));
+    }
+
+    @SaCheckPermission("riskctrl:specialEquipment:remove")
+    @Log(title = "特种设备", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{equipmentIds}")
+    public R<Void> remove(@PathVariable Long[] equipmentIds) {
+        return toAjax(specialEquipmentService.deleteEquipmentByIds(equipmentIds));
+    }
+
+    @SaCheckPermission("riskctrl:specialEquipment:list")
+    @GetMapping("/stats")
+    public R<Map<String, Object>> stats() {
+        Map<String, Object> equipStats = specialEquipmentService.selectEquipmentStats();
+        Map<String, Object> maintainStats = equipmentMaintenanceService.selectMaintenanceStats();
+        Map<String, Object> result = new LinkedHashMap<>();
+        result.put("totalCount", equipStats.getOrDefault("total", 0));
+        result.put("normalCount", equipStats.getOrDefault("total", 0));
+        result.put("maintenanceCount", maintainStats.getOrDefault("pending", 0));
+        result.put("overdueCount", maintainStats.getOrDefault("completed", 0));
+        return R.ok(result);
+    }
+
+    @SaCheckPermission("riskctrl:specialEquipment:list")
+    @GetMapping("/distribution")
+    public R<List<Map<String, Object>>> distribution() {
+        return R.ok(specialEquipmentService.selectTypeDistribution());
+    }
+
+}

+ 76 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/WhiteListController.java

@@ -0,0 +1,76 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.WhiteListBo;
+import org.dromara.riskctrl.domain.vo.WhiteListVo;
+import org.dromara.riskctrl.service.IWhiteListService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 白名单管理
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/whitelist")
+public class WhiteListController extends BaseController {
+
+    private final IWhiteListService whiteListService;
+
+    @SaCheckPermission("riskctrl:whitelist:list")
+    @GetMapping("/list")
+    public TableDataInfo<WhiteListVo> list(WhiteListBo bo, PageQuery pageQuery) {
+        return whiteListService.selectPageWhiteList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("riskctrl:whitelist:query")
+    @GetMapping(value = "/{whiteId}")
+    public R<WhiteListVo> getInfo(@PathVariable Long whiteId) {
+        return R.ok(whiteListService.selectWhiteListById(whiteId));
+    }
+
+    @SaCheckPermission("riskctrl:whitelist:add")
+    @Log(title = "白名单", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody WhiteListBo bo) {
+        return toAjax(whiteListService.insertWhiteList(bo));
+    }
+
+    @SaCheckPermission("riskctrl:whitelist:edit")
+    @Log(title = "白名单", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody WhiteListBo bo) {
+        return toAjax(whiteListService.updateWhiteList(bo));
+    }
+
+    @SaCheckPermission("riskctrl:whitelist:edit")
+    @Log(title = "白名单", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping("/changeStatus")
+    public R<Void> changeStatus(@RequestBody WhiteListBo bo) {
+        return toAjax(whiteListService.updateWhiteListStatus(bo.getWhiteId(), bo.getStatus()));
+    }
+
+    @SaCheckPermission("riskctrl:whitelist:remove")
+    @Log(title = "白名单", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{whiteIds}")
+    public R<Void> remove(@PathVariable Long[] whiteIds) {
+        return toAjax(whiteListService.deleteWhiteListByIds(whiteIds));
+    }
+
+}

+ 86 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/controller/WorkReportController.java

@@ -0,0 +1,86 @@
+package org.dromara.riskctrl.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.riskctrl.domain.bo.WorkReportBo;
+import org.dromara.riskctrl.domain.vo.WorkReportVo;
+import org.dromara.riskctrl.service.IWorkReportService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 作业上报
+ *
+ * @author riskctrl
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/riskctrl/workReport")
+public class WorkReportController extends BaseController {
+
+    private final IWorkReportService workReportService;
+
+    @SaCheckPermission("riskctrl:workReport:list")
+    @GetMapping("/list")
+    public TableDataInfo<WorkReportVo> list(WorkReportBo bo, PageQuery pageQuery) {
+        return workReportService.selectPageReportList(bo, pageQuery);
+    }
+
+    @SaCheckPermission("riskctrl:workReport:query")
+    @GetMapping(value = "/{reportId}")
+    public R<WorkReportVo> getInfo(@PathVariable @NotNull Long reportId) {
+        return R.ok(workReportService.selectReportById(reportId));
+    }
+
+    @SaCheckPermission("riskctrl:workReport:add")
+    @Log(title = "作业上报", businessType = BusinessType.INSERT)
+    @PostMapping
+    public R<Void> add(@Validated @RequestBody WorkReportBo bo) {
+        return toAjax(workReportService.insertReport(bo));
+    }
+
+    @SaCheckPermission("riskctrl:workReport:edit")
+    @Log(title = "作业上报", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public R<Void> edit(@Validated @RequestBody WorkReportBo bo) {
+        return toAjax(workReportService.updateReport(bo));
+    }
+
+    @SaCheckPermission("riskctrl:workReport:audit")
+    @Log(title = "作业上报审核", businessType = BusinessType.UPDATE)
+    @PutMapping("/audit")
+    public R<Void> audit(@RequestBody WorkReportBo bo) {
+        return toAjax(workReportService.auditReport(bo.getReportId(), bo.getAuditStatus(), bo.getAuditComment()));
+    }
+
+    @SaCheckPermission("riskctrl:workReport:remove")
+    @Log(title = "作业上报", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{reportIds}")
+    public R<Void> remove(@PathVariable Long[] reportIds) {
+        return toAjax(workReportService.deleteReportByIds(reportIds));
+    }
+
+    @SaCheckPermission("riskctrl:workReport:list")
+    @GetMapping("/stats")
+    public R<Map<String, Object>> stats() {
+        return R.ok(workReportService.selectReportStats());
+    }
+
+    @SaCheckPermission("riskctrl:workReport:list")
+    @GetMapping("/trend")
+    public R<List<Map<String, Object>>> trend(@RequestParam(defaultValue = "6") int months) {
+        return R.ok(workReportService.selectMonthlyTrend(months));
+    }
+
+}

+ 62 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/AccidentReport.java

@@ -0,0 +1,62 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 事故上报对象 accident_report
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("accident_report")
+public class AccidentReport extends BaseEntity {
+
+    @TableId(value = "accident_id")
+    private Long accidentId;
+
+    private String accidentNo;
+
+    private Date accidentTime;
+
+    private String accidentLocation;
+
+    private String accidentLevel;
+
+    private String accidentType;
+
+    private String accidentName;
+
+    private String involvedPersons;
+
+    private Integer deathCount;
+
+    private Integer injuryCount;
+
+    private String accidentBrief;
+
+    private String causeAnalysis;
+
+    private String reporter;
+
+    private String scenePhotos;
+
+    private String processStatus;
+
+    private String status;
+
+    @TableLogic
+    private String delFlag;
+
+    private String remark;
+
+}

+ 58 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/AuditPersonChange.java

@@ -0,0 +1,58 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 审计-人员变动对象 audit_person_change
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("audit_person_change")
+public class AuditPersonChange extends BaseEntity {
+
+    @TableId(value = "change_id")
+    private Long changeId;
+
+    private String personName;
+
+    private Long deptId;
+
+    private String deptName;
+
+    private String originPost;
+
+    private String changeType;
+
+    private String newPost;
+
+    private Long newDeptId;
+
+    private String newDeptName;
+
+    private Date changeDate;
+
+    private Date leaveDate;
+
+    private String auditStatus;
+
+    private String auditFiles;
+
+    private String status;
+
+    @TableLogic
+    private String delFlag;
+
+    private String remark;
+
+}

+ 46 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/BlackList.java

@@ -0,0 +1,46 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 黑名单对象 risk_blacklist
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("risk_blacklist")
+public class BlackList extends BaseEntity {
+
+    @TableId(value = "black_id")
+    private Long blackId;
+
+    private String blackType;
+
+    private String blackValue;
+
+    private String blackName;
+
+    private String reason;
+
+    private String source;
+
+    private Date expireTime;
+
+    private String status;
+
+    private String remark;
+
+    @TableLogic
+    private String delFlag;
+
+}

+ 48 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/DangerSource.java

@@ -0,0 +1,48 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 危险源对象 danger_source
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("danger_source")
+public class DangerSource extends BaseEntity {
+
+    @TableId(value = "source_id")
+    private Long sourceId;
+
+    private String sourceNo;
+
+    private String sourceName;
+
+    private String sourceType;
+
+    private String location;
+
+    private String possibleHarm;
+
+    private String preventionMethod;
+
+    private Date reportTime;
+
+    private String status;
+
+    @TableLogic
+    private String delFlag;
+
+    private String remark;
+
+}

+ 48 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/EquipmentMaintenance.java

@@ -0,0 +1,48 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 设备维护记录对象 equipment_maintenance
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("equipment_maintenance")
+public class EquipmentMaintenance extends BaseEntity {
+
+    @TableId(value = "maintenance_id")
+    private Long maintenanceId;
+
+    private Long equipmentId;
+
+    private Date startTime;
+
+    private Date endTime;
+
+    private String maintainUser;
+
+    private String siteUser;
+
+    private String maintainStatus;
+
+    private String photoUrls;
+
+    private String status;
+
+    @TableLogic
+    private String delFlag;
+
+    private String remark;
+
+}

+ 46 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/NoticeAnnouncement.java

@@ -0,0 +1,46 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 通知公告对象 notice_announcement
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("notice_announcement")
+public class NoticeAnnouncement extends BaseEntity {
+
+    @TableId(value = "notice_id")
+    private Long noticeId;
+
+    private String noticeTitle;
+
+    private String noticeType;
+
+    private String noticeContent;
+
+    private String publishStatus;
+
+    private Date publishTime;
+
+    private String publishUser;
+
+    private String status;
+
+    @TableLogic
+    private String delFlag;
+
+    private String remark;
+
+}

+ 50 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/PatrolPoint.java

@@ -0,0 +1,50 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+/**
+ * 巡检打卡点对象 patrol_point
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("patrol_point")
+public class PatrolPoint extends BaseEntity {
+
+    @TableId(value = "point_id")
+    private Long pointId;
+
+    private String pointName;
+
+    private String responsibleUser;
+
+    private String area;
+
+    private String address;
+
+    private String latitude;
+
+    private String longitude;
+
+    private String nfcTag;
+
+    private String checkTimes;
+
+    private String checkItems;
+
+    private String status;
+
+    @TableLogic
+    private String delFlag;
+
+    private String remark;
+
+}

+ 50 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/PatrolRecord.java

@@ -0,0 +1,50 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 巡检打卡记录对象 patrol_record
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("patrol_record")
+public class PatrolRecord extends BaseEntity {
+
+    @TableId(value = "record_id")
+    private Long recordId;
+
+    private Long pointId;
+
+    private String pointName;
+
+    private String checkUser;
+
+    private Date checkTime;
+
+    private String checkStatus;
+
+    private String checkResult;
+
+    private String abnormalReason;
+
+    private String itemResults;
+
+    private String status;
+
+    @TableLogic
+    private String delFlag;
+
+    private String remark;
+
+}

+ 52 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/PersonInfo.java

@@ -0,0 +1,52 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 人员信息对象 person_info
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("person_info")
+public class PersonInfo extends BaseEntity {
+
+    @TableId(value = "person_id")
+    private Long personId;
+
+    private String personType;
+
+    private String personName;
+
+    private String idCard;
+
+    private Integer age;
+
+    private Long workStoreId;
+
+    private String workStoreName;
+
+    private String insuranceStatus;
+
+    private Date insuranceExpireDate;
+
+    private String certificates;
+
+    private String status;
+
+    @TableLogic
+    private String delFlag;
+
+    private String remark;
+
+}

+ 58 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/PublicOpinion.java

@@ -0,0 +1,58 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 舆情推送对象 public_opinion
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("public_opinion")
+public class PublicOpinion extends BaseEntity {
+
+    @TableId(value = "opinion_id")
+    private Long opinionId;
+
+    private String opinionTitle;
+
+    private String source;
+
+    private Date publishTime;
+
+    private String riskLevel;
+
+    private String responsibleUser;
+
+    private String opinionLink;
+
+    private String opinionContent;
+
+    private String processSuggest;
+
+    private String processStatus;
+
+    private String processResult;
+
+    private Date processTime;
+
+    private String processUser;
+
+    private String status;
+
+    @TableLogic
+    private String delFlag;
+
+    private String remark;
+
+}

+ 58 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/RiskCase.java

@@ -0,0 +1,58 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.math.BigDecimal;
+
+/**
+ * 风控案例对象 risk_case
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("risk_case")
+public class RiskCase extends BaseEntity {
+
+    @TableId(value = "case_id")
+    private Long caseId;
+
+    private String caseNo;
+
+    private String caseName;
+
+    private String caseType;
+
+    private String caseDesc;
+
+    private Long eventId;
+
+    private String eventNo;
+
+    private Long userId;
+
+    private String userName;
+
+    private String riskLevel;
+
+    private BigDecimal riskScore;
+
+    private String hitRules;
+
+    private String caseResult;
+
+    private String status;
+
+    private String remark;
+
+    @TableLogic
+    private String delFlag;
+
+}

+ 63 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/RiskEvent.java

@@ -0,0 +1,63 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 风控事件对象 risk_event
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("risk_event")
+public class RiskEvent extends BaseEntity {
+
+    @TableId(value = "event_id")
+    private Long eventId;
+
+    private String eventNo;
+
+    private String eventType;
+
+    private String eventSource;
+
+    private Long userId;
+
+    private String userName;
+
+    private String deviceId;
+
+    private String ipAddress;
+
+    private String location;
+
+    private String eventData;
+
+    private String riskLevel;
+
+    private BigDecimal riskScore;
+
+    private String hitRules;
+
+    private String actionTaken;
+
+    private String status;
+
+    private String remark;
+
+    private Date eventTime;
+
+    @TableLogic
+    private String delFlag;
+
+}

+ 91 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/RiskRule.java

@@ -0,0 +1,91 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.math.BigDecimal;
+
+/**
+ * 风控规则对象 risk_rule
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("risk_rule")
+public class RiskRule extends BaseEntity {
+
+    /**
+     * 规则ID
+     */
+    @TableId(value = "rule_id")
+    private Long ruleId;
+
+    /**
+     * 规则名称
+     */
+    private String ruleName;
+
+    /**
+     * 规则编码
+     */
+    private String ruleCode;
+
+    /**
+     * 规则类型(1交易规则 2登录规则 3设备规则 4行为规则)
+     */
+    private String ruleType;
+
+    /**
+     * 规则描述
+     */
+    private String ruleDesc;
+
+    /**
+     * 规则脚本/条件
+     */
+    private String ruleScript;
+
+    /**
+     * 风险等级(1低风险 2中风险 3高风险 4极高风险)
+     */
+    private String riskLevel;
+
+    /**
+     * 规则分值
+     */
+    private BigDecimal ruleScore;
+
+    /**
+     * 触发动作(1预警 2拦截 3人工审核 4记录日志)
+     */
+    private String actionType;
+
+    /**
+     * 规则状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 优先级
+     */
+    private Integer priority;
+
+    /**
+     * 删除标志(0代表存在 1代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 59 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/RiskScore.java

@@ -0,0 +1,59 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 风险评分对象 risk_score
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("risk_score")
+public class RiskScore extends BaseEntity {
+
+    @TableId(value = "score_id")
+    private Long scoreId;
+
+    private String scoreNo;
+
+    private Long userId;
+
+    private String userName;
+
+    private String scoreType;
+
+    private BigDecimal totalScore;
+
+    private BigDecimal baseScore;
+
+    private BigDecimal ruleScore;
+
+    private BigDecimal behaviorScore;
+
+    private BigDecimal creditScore;
+
+    private String riskLevel;
+
+    private String evaluation;
+
+    private String status;
+
+    private String remark;
+
+    private Date evaluateTime;
+
+    @TableLogic
+    private String delFlag;
+
+}

+ 46 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/RiskWarning.java

@@ -0,0 +1,46 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 风险警示对象 risk_warning
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("risk_warning")
+public class RiskWarning extends BaseEntity {
+
+    @TableId(value = "warning_id")
+    private Long warningId;
+
+    private String warningTitle;
+
+    private String warningType;
+
+    private String warningLevel;
+
+    private String warningContent;
+
+    private Date publishTime;
+
+    private String publishUser;
+
+    private String status;
+
+    @TableLogic
+    private String delFlag;
+
+    private String remark;
+
+}

+ 58 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/SafetyHazard.java

@@ -0,0 +1,58 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 安全隐患对象 safety_hazard
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("safety_hazard")
+public class SafetyHazard extends BaseEntity {
+
+    @TableId(value = "hazard_id")
+    private Long hazardId;
+
+    private String hazardNo;
+
+    private String hazardName;
+
+    private String hazardType;
+
+    private String riskLevel;
+
+    private Date discoverTime;
+
+    private String hazardLocation;
+
+    private String hazardDesc;
+
+    private String photoUrls;
+
+    private String processStatus;
+
+    private String processResult;
+
+    private Date processTime;
+
+    private String processUser;
+
+    private String status;
+
+    @TableLogic
+    private String delFlag;
+
+    private String remark;
+
+}

+ 54 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/SafetyTraining.java

@@ -0,0 +1,54 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 安全培训对象 safety_training
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("safety_training")
+public class SafetyTraining extends BaseEntity {
+
+    @TableId(value = "training_id")
+    private Long trainingId;
+
+    private String trainingNo;
+
+    private String trainingTitle;
+
+    private String trainingType;
+
+    private Date trainingTime;
+
+    private String trainingLocation;
+
+    private String trainer;
+
+    private Integer participantCount;
+
+    private String trainingStatus;
+
+    private String trainingContent;
+
+    private String trainingMaterial;
+
+    private String status;
+
+    @TableLogic
+    private String delFlag;
+
+    private String remark;
+
+}

+ 42 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/SpecialEquipment.java

@@ -0,0 +1,42 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+/**
+ * 特种设备对象 special_equipment
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("special_equipment")
+public class SpecialEquipment extends BaseEntity {
+
+    @TableId(value = "equipment_id")
+    private Long equipmentId;
+
+    private String equipmentNo;
+
+    private String equipmentName;
+
+    private String equipmentType;
+
+    private String installLocation;
+
+    private String photoUrls;
+
+    private String status;
+
+    @TableLogic
+    private String delFlag;
+
+    private String remark;
+
+}

+ 46 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/WhiteList.java

@@ -0,0 +1,46 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 白名单对象 risk_whitelist
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("risk_whitelist")
+public class WhiteList extends BaseEntity {
+
+    @TableId(value = "white_id")
+    private Long whiteId;
+
+    private String whiteType;
+
+    private String whiteValue;
+
+    private String whiteName;
+
+    private String reason;
+
+    private String source;
+
+    private Date expireTime;
+
+    private String status;
+
+    private String remark;
+
+    @TableLogic
+    private String delFlag;
+
+}

+ 62 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/WorkReport.java

@@ -0,0 +1,62 @@
+package org.dromara.riskctrl.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 作业上报对象 work_report
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("work_report")
+public class WorkReport extends BaseEntity {
+
+    @TableId(value = "report_id")
+    private Long reportId;
+
+    private String reportNo;
+
+    private String workType;
+
+    private String projectName;
+
+    private Date startTime;
+
+    private Date endTime;
+
+    private String safetyOfficer;
+
+    private String contactPhone;
+
+    private String workImages;
+
+    private String permitFiles;
+
+    private String workDesc;
+
+    private String auditStatus;
+
+    private String auditComment;
+
+    private String auditUser;
+
+    private Date auditTime;
+
+    private String status;
+
+    @TableLogic
+    private String delFlag;
+
+    private String remark;
+
+}

+ 52 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/AccidentReportBo.java

@@ -0,0 +1,52 @@
+package org.dromara.riskctrl.domain.bo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 事故上报业务对象 accident_report
+ *
+ * @author riskctrl
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class AccidentReportBo extends BaseEntity {
+
+    private Long accidentId;
+
+    private String accidentNo;
+
+    private Date accidentTime;
+
+    private String accidentLocation;
+
+    private String accidentLevel;
+
+    private String accidentType;
+
+    private String accidentName;
+
+    private String involvedPersons;
+
+    private Integer deathCount;
+
+    private Integer injuryCount;
+
+    private String accidentBrief;
+
+    private String causeAnalysis;
+
+    private String reporter;
+
+    private String scenePhotos;
+
+    private String processStatus;
+
+    private String status;
+
+    private String remark;
+
+}

+ 48 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/AuditPersonChangeBo.java

@@ -0,0 +1,48 @@
+package org.dromara.riskctrl.domain.bo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 审计-人员变动业务对象 audit_person_change
+ *
+ * @author riskctrl
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class AuditPersonChangeBo extends BaseEntity {
+
+    private Long changeId;
+
+    private String personName;
+
+    private Long deptId;
+
+    private String deptName;
+
+    private String originPost;
+
+    private String changeType;
+
+    private String newPost;
+
+    private Long newDeptId;
+
+    private String newDeptName;
+
+    private Date changeDate;
+
+    private Date leaveDate;
+
+    private String auditStatus;
+
+    private String auditFiles;
+
+    private String status;
+
+    private String remark;
+
+}

+ 44 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/BlackListBo.java

@@ -0,0 +1,44 @@
+package org.dromara.riskctrl.domain.bo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.riskctrl.domain.BlackList;
+
+import java.util.Date;
+
+/**
+ * 黑名单业务对象 risk_blacklist
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = BlackList.class, reverseConvertGenerate = false)
+public class BlackListBo extends BaseEntity {
+
+    private Long blackId;
+
+    @NotBlank(message = "黑名单类型不能为空")
+    private String blackType;
+
+    @NotBlank(message = "黑名单值不能为空")
+    private String blackValue;
+
+    private String blackName;
+
+    private String reason;
+
+    private String source;
+
+    private Date expireTime;
+
+    private String status;
+
+    private String remark;
+
+}

+ 38 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/DangerSourceBo.java

@@ -0,0 +1,38 @@
+package org.dromara.riskctrl.domain.bo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 危险源业务对象 danger_source
+ *
+ * @author riskctrl
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class DangerSourceBo extends BaseEntity {
+
+    private Long sourceId;
+
+    private String sourceNo;
+
+    private String sourceName;
+
+    private String sourceType;
+
+    private String location;
+
+    private String possibleHarm;
+
+    private String preventionMethod;
+
+    private Date reportTime;
+
+    private String status;
+
+    private String remark;
+
+}

+ 38 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/EquipmentMaintenanceBo.java

@@ -0,0 +1,38 @@
+package org.dromara.riskctrl.domain.bo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 设备维护记录业务对象 equipment_maintenance
+ *
+ * @author riskctrl
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class EquipmentMaintenanceBo extends BaseEntity {
+
+    private Long maintenanceId;
+
+    private Long equipmentId;
+
+    private Date startTime;
+
+    private Date endTime;
+
+    private String maintainUser;
+
+    private String siteUser;
+
+    private String maintainStatus;
+
+    private String photoUrls;
+
+    private String status;
+
+    private String remark;
+
+}

+ 36 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/NoticeAnnouncementBo.java

@@ -0,0 +1,36 @@
+package org.dromara.riskctrl.domain.bo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 通知公告业务对象 notice_announcement
+ *
+ * @author riskctrl
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class NoticeAnnouncementBo extends BaseEntity {
+
+    private Long noticeId;
+
+    private String noticeTitle;
+
+    private String noticeType;
+
+    private String noticeContent;
+
+    private String publishStatus;
+
+    private Date publishTime;
+
+    private String publishUser;
+
+    private String status;
+
+    private String remark;
+
+}

+ 40 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/PatrolPointBo.java

@@ -0,0 +1,40 @@
+package org.dromara.riskctrl.domain.bo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+/**
+ * 巡检打卡点业务对象 patrol_point
+ *
+ * @author riskctrl
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PatrolPointBo extends BaseEntity {
+
+    private Long pointId;
+
+    private String pointName;
+
+    private String responsibleUser;
+
+    private String area;
+
+    private String address;
+
+    private String latitude;
+
+    private String longitude;
+
+    private String nfcTag;
+
+    private String checkTimes;
+
+    private String checkItems;
+
+    private String status;
+
+    private String remark;
+
+}

+ 40 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/PatrolRecordBo.java

@@ -0,0 +1,40 @@
+package org.dromara.riskctrl.domain.bo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 巡检打卡记录业务对象 patrol_record
+ *
+ * @author riskctrl
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PatrolRecordBo extends BaseEntity {
+
+    private Long recordId;
+
+    private Long pointId;
+
+    private String pointName;
+
+    private String checkUser;
+
+    private Date checkTime;
+
+    private String checkStatus;
+
+    private String checkResult;
+
+    private String abnormalReason;
+
+    private String itemResults;
+
+    private String status;
+
+    private String remark;
+
+}

+ 45 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/PersonInfoBo.java

@@ -0,0 +1,45 @@
+package org.dromara.riskctrl.domain.bo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.riskctrl.domain.PersonInfo;
+
+import java.util.Date;
+
+/**
+ * 人员信息业务对象 person_info
+ *
+ * @author riskctrl
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PersonInfo.class, reverseConvertGenerate = false)
+public class PersonInfoBo extends BaseEntity {
+
+    private Long personId;
+
+    private String personType;
+
+    private String personName;
+
+    private String idCard;
+
+    private Integer age;
+
+    private Long workStoreId;
+
+    private String workStoreName;
+
+    private String insuranceStatus;
+
+    private Date insuranceExpireDate;
+
+    private String certificates;
+
+    private String status;
+
+    private String remark;
+
+}

+ 48 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/PublicOpinionBo.java

@@ -0,0 +1,48 @@
+package org.dromara.riskctrl.domain.bo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 舆情推送业务对象 public_opinion
+ *
+ * @author riskctrl
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PublicOpinionBo extends BaseEntity {
+
+    private Long opinionId;
+
+    private String opinionTitle;
+
+    private String source;
+
+    private Date publishTime;
+
+    private String riskLevel;
+
+    private String responsibleUser;
+
+    private String opinionLink;
+
+    private String opinionContent;
+
+    private String processSuggest;
+
+    private String processStatus;
+
+    private String processResult;
+
+    private Date processTime;
+
+    private String processUser;
+
+    private String status;
+
+    private String remark;
+
+}

+ 39 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/RiskCaseBo.java

@@ -0,0 +1,39 @@
+package org.dromara.riskctrl.domain.bo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.riskctrl.domain.RiskCase;
+
+import java.math.BigDecimal;
+
+/**
+ * 风控案例业务对象 risk_case
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = RiskCase.class, reverseConvertGenerate = false)
+public class RiskCaseBo extends BaseEntity {
+
+    private Long caseId;
+    private String caseNo;
+    private String caseName;
+    private String caseType;
+    private String caseDesc;
+    private Long eventId;
+    private String eventNo;
+    private Long userId;
+    private String userName;
+    private String riskLevel;
+    private BigDecimal riskScore;
+    private String hitRules;
+    private String caseResult;
+    private String status;
+    private String remark;
+
+}

+ 42 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/RiskEventBo.java

@@ -0,0 +1,42 @@
+package org.dromara.riskctrl.domain.bo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.riskctrl.domain.RiskEvent;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 风控事件业务对象 risk_event
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = RiskEvent.class, reverseConvertGenerate = false)
+public class RiskEventBo extends BaseEntity {
+
+    private Long eventId;
+    private String eventNo;
+    private String eventType;
+    private String eventSource;
+    private Long userId;
+    private String userName;
+    private String deviceId;
+    private String ipAddress;
+    private String location;
+    private String eventData;
+    private String riskLevel;
+    private BigDecimal riskScore;
+    private String hitRules;
+    private String actionTaken;
+    private String status;
+    private String remark;
+    private Date eventTime;
+
+}

+ 91 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/RiskRuleBo.java

@@ -0,0 +1,91 @@
+package org.dromara.riskctrl.domain.bo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.riskctrl.domain.RiskRule;
+
+import java.math.BigDecimal;
+
+/**
+ * 风控规则业务对象 risk_rule
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = RiskRule.class, reverseConvertGenerate = false)
+public class RiskRuleBo extends BaseEntity {
+
+    /**
+     * 规则ID
+     */
+    private Long ruleId;
+
+    /**
+     * 规则名称
+     */
+    @NotBlank(message = "规则名称不能为空")
+    private String ruleName;
+
+    /**
+     * 规则编码
+     */
+    @NotBlank(message = "规则编码不能为空")
+    private String ruleCode;
+
+    /**
+     * 规则类型(1交易规则 2登录规则 3设备规则 4行为规则)
+     */
+    @NotBlank(message = "规则类型不能为空")
+    private String ruleType;
+
+    /**
+     * 规则描述
+     */
+    private String ruleDesc;
+
+    /**
+     * 规则脚本/条件
+     */
+    private String ruleScript;
+
+    /**
+     * 风险等级(1低风险 2中风险 3高风险 4极高风险)
+     */
+    @NotBlank(message = "风险等级不能为空")
+    private String riskLevel;
+
+    /**
+     * 规则分值
+     */
+    @NotNull(message = "规则分值不能为空")
+    private BigDecimal ruleScore;
+
+    /**
+     * 触发动作(1预警 2拦截 3人工审核 4记录日志)
+     */
+    @NotBlank(message = "触发动作不能为空")
+    private String actionType;
+
+    /**
+     * 规则状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 优先级
+     */
+    private Integer priority;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 40 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/RiskScoreBo.java

@@ -0,0 +1,40 @@
+package org.dromara.riskctrl.domain.bo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.riskctrl.domain.RiskScore;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 风险评分业务对象 risk_score
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = RiskScore.class, reverseConvertGenerate = false)
+public class RiskScoreBo extends BaseEntity {
+
+    private Long scoreId;
+    private String scoreNo;
+    private Long userId;
+    private String userName;
+    private String scoreType;
+    private BigDecimal totalScore;
+    private BigDecimal baseScore;
+    private BigDecimal ruleScore;
+    private BigDecimal behaviorScore;
+    private BigDecimal creditScore;
+    private String riskLevel;
+    private String evaluation;
+    private String status;
+    private String remark;
+    private Date evaluateTime;
+
+}

+ 36 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/RiskWarningBo.java

@@ -0,0 +1,36 @@
+package org.dromara.riskctrl.domain.bo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 风险警示业务对象 risk_warning
+ *
+ * @author riskctrl
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class RiskWarningBo extends BaseEntity {
+
+    private Long warningId;
+
+    private String warningTitle;
+
+    private String warningType;
+
+    private String warningLevel;
+
+    private String warningContent;
+
+    private Date publishTime;
+
+    private String publishUser;
+
+    private String status;
+
+    private String remark;
+
+}

+ 48 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/SafetyHazardBo.java

@@ -0,0 +1,48 @@
+package org.dromara.riskctrl.domain.bo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 安全隐患业务对象 safety_hazard
+ *
+ * @author riskctrl
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class SafetyHazardBo extends BaseEntity {
+
+    private Long hazardId;
+
+    private String hazardNo;
+
+    private String hazardName;
+
+    private String hazardType;
+
+    private String riskLevel;
+
+    private Date discoverTime;
+
+    private String hazardLocation;
+
+    private String hazardDesc;
+
+    private String photoUrls;
+
+    private String processStatus;
+
+    private String processResult;
+
+    private Date processTime;
+
+    private String processUser;
+
+    private String status;
+
+    private String remark;
+
+}

+ 49 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/SafetyTrainingBo.java

@@ -0,0 +1,49 @@
+package org.dromara.riskctrl.domain.bo;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 安全培训业务对象 safety_training
+ *
+ * @author riskctrl
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class SafetyTrainingBo extends BaseEntity {
+
+    private Long trainingId;
+
+    private String trainingNo;
+
+    @NotBlank(message = "培训标题不能为空")
+    @Size(min = 2, max = 50, message = "培训标题长度需要在2-50之间")
+    private String trainingTitle;
+
+    @NotBlank(message = "培训类型不能为空")
+    private String trainingType;
+
+    private Date trainingTime;
+
+    private String trainingLocation;
+
+    private String trainer;
+
+    private Integer participantCount;
+
+    private String trainingStatus;
+
+    private String trainingContent;
+
+    private String trainingMaterial;
+
+    private String status;
+
+    private String remark;
+
+}

+ 32 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/SpecialEquipmentBo.java

@@ -0,0 +1,32 @@
+package org.dromara.riskctrl.domain.bo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+/**
+ * 特种设备业务对象 special_equipment
+ *
+ * @author riskctrl
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class SpecialEquipmentBo extends BaseEntity {
+
+    private Long equipmentId;
+
+    private String equipmentNo;
+
+    private String equipmentName;
+
+    private String equipmentType;
+
+    private String installLocation;
+
+    private String photoUrls;
+
+    private String status;
+
+    private String remark;
+
+}

+ 44 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/WhiteListBo.java

@@ -0,0 +1,44 @@
+package org.dromara.riskctrl.domain.bo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.riskctrl.domain.WhiteList;
+
+import java.util.Date;
+
+/**
+ * 白名单业务对象 risk_whitelist
+ *
+ * @author riskctrl
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = WhiteList.class, reverseConvertGenerate = false)
+public class WhiteListBo extends BaseEntity {
+
+    private Long whiteId;
+
+    @NotBlank(message = "白名单类型不能为空")
+    private String whiteType;
+
+    @NotBlank(message = "白名单值不能为空")
+    private String whiteValue;
+
+    private String whiteName;
+
+    private String reason;
+
+    private String source;
+
+    private Date expireTime;
+
+    private String status;
+
+    private String remark;
+
+}

+ 55 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/bo/WorkReportBo.java

@@ -0,0 +1,55 @@
+package org.dromara.riskctrl.domain.bo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.riskctrl.domain.WorkReport;
+
+import java.util.Date;
+
+/**
+ * 作业上报业务对象 work_report
+ *
+ * @author riskctrl
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = WorkReport.class, reverseConvertGenerate = false)
+public class WorkReportBo extends BaseEntity {
+
+    private Long reportId;
+
+    private String reportNo;
+
+    private String workType;
+
+    private String projectName;
+
+    private Date startTime;
+
+    private Date endTime;
+
+    private String safetyOfficer;
+
+    private String contactPhone;
+
+    private String workImages;
+
+    private String permitFiles;
+
+    private String workDesc;
+
+    private String auditStatus;
+
+    private String auditComment;
+
+    private String auditUser;
+
+    private Date auditTime;
+
+    private String status;
+
+    private String remark;
+
+}

+ 62 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/AccidentReportVo.java

@@ -0,0 +1,62 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.AccidentReport;
+
+import java.util.Date;
+
+/**
+ * 事故上报视图对象 accident_report
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = AccidentReport.class)
+public class AccidentReportVo {
+
+    private Long accidentId;
+
+    private String accidentNo;
+
+    private Date accidentTime;
+
+    private String accidentLocation;
+
+    private String accidentLevel;
+
+    private String accidentType;
+
+    private String accidentName;
+
+    private String involvedPersons;
+
+    private Integer deathCount;
+
+    private Integer injuryCount;
+
+    private String accidentBrief;
+
+    private String causeAnalysis;
+
+    private String reporter;
+
+    private String scenePhotos;
+
+    private String processStatus;
+
+    private String status;
+
+    private String remark;
+
+    private Long createDept;
+
+    private Long createBy;
+
+    private Date createTime;
+
+    private Long updateBy;
+
+    private Date updateTime;
+
+}

+ 58 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/AuditPersonChangeVo.java

@@ -0,0 +1,58 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.AuditPersonChange;
+
+import java.util.Date;
+
+/**
+ * 审计-人员变动视图对象 audit_person_change
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = AuditPersonChange.class)
+public class AuditPersonChangeVo {
+
+    private Long changeId;
+
+    private String personName;
+
+    private Long deptId;
+
+    private String deptName;
+
+    private String originPost;
+
+    private String changeType;
+
+    private String newPost;
+
+    private Long newDeptId;
+
+    private String newDeptName;
+
+    private Date changeDate;
+
+    private Date leaveDate;
+
+    private String auditStatus;
+
+    private String auditFiles;
+
+    private String status;
+
+    private String remark;
+
+    private Long createDept;
+
+    private Long createBy;
+
+    private Date createTime;
+
+    private Long updateBy;
+
+    private Date updateTime;
+
+}

+ 34 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/BlackListVo.java

@@ -0,0 +1,34 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.BlackList;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 黑名单视图对象 risk_blacklist
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = BlackList.class)
+public class BlackListVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long blackId;
+    private String blackType;
+    private String blackValue;
+    private String blackName;
+    private String reason;
+    private String source;
+    private Date expireTime;
+    private String status;
+    private String remark;
+    private Date createTime;
+
+}

+ 48 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/DangerSourceVo.java

@@ -0,0 +1,48 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.DangerSource;
+
+import java.util.Date;
+
+/**
+ * 危险源视图对象 danger_source
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = DangerSource.class)
+public class DangerSourceVo {
+
+    private Long sourceId;
+
+    private String sourceNo;
+
+    private String sourceName;
+
+    private String sourceType;
+
+    private String location;
+
+    private String possibleHarm;
+
+    private String preventionMethod;
+
+    private Date reportTime;
+
+    private String status;
+
+    private String remark;
+
+    private Long createDept;
+
+    private Long createBy;
+
+    private Date createTime;
+
+    private Long updateBy;
+
+    private Date updateTime;
+
+}

+ 48 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/EquipmentMaintenanceVo.java

@@ -0,0 +1,48 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.EquipmentMaintenance;
+
+import java.util.Date;
+
+/**
+ * 设备维护记录视图对象 equipment_maintenance
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = EquipmentMaintenance.class)
+public class EquipmentMaintenanceVo {
+
+    private Long maintenanceId;
+
+    private Long equipmentId;
+
+    private Date startTime;
+
+    private Date endTime;
+
+    private String maintainUser;
+
+    private String siteUser;
+
+    private String maintainStatus;
+
+    private String photoUrls;
+
+    private String status;
+
+    private String remark;
+
+    private Long createDept;
+
+    private Long createBy;
+
+    private Date createTime;
+
+    private Long updateBy;
+
+    private Date updateTime;
+
+}

+ 46 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/NoticeAnnouncementVo.java

@@ -0,0 +1,46 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.NoticeAnnouncement;
+
+import java.util.Date;
+
+/**
+ * 通知公告视图对象 notice_announcement
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = NoticeAnnouncement.class)
+public class NoticeAnnouncementVo {
+
+    private Long noticeId;
+
+    private String noticeTitle;
+
+    private String noticeType;
+
+    private String noticeContent;
+
+    private String publishStatus;
+
+    private Date publishTime;
+
+    private String publishUser;
+
+    private String status;
+
+    private String remark;
+
+    private Long createDept;
+
+    private Long createBy;
+
+    private Date createTime;
+
+    private Long updateBy;
+
+    private Date updateTime;
+
+}

+ 52 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/PatrolPointVo.java

@@ -0,0 +1,52 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.PatrolPoint;
+
+import java.util.Date;
+
+/**
+ * 巡检打卡点视图对象 patrol_point
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = PatrolPoint.class)
+public class PatrolPointVo {
+
+    private Long pointId;
+
+    private String pointName;
+
+    private String responsibleUser;
+
+    private String area;
+
+    private String address;
+
+    private String latitude;
+
+    private String longitude;
+
+    private String nfcTag;
+
+    private String checkTimes;
+
+    private String checkItems;
+
+    private String status;
+
+    private String remark;
+
+    private Long createDept;
+
+    private Long createBy;
+
+    private Date createTime;
+
+    private Long updateBy;
+
+    private Date updateTime;
+
+}

+ 50 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/PatrolRecordVo.java

@@ -0,0 +1,50 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.PatrolRecord;
+
+import java.util.Date;
+
+/**
+ * 巡检打卡记录视图对象 patrol_record
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = PatrolRecord.class)
+public class PatrolRecordVo {
+
+    private Long recordId;
+
+    private Long pointId;
+
+    private String pointName;
+
+    private String checkUser;
+
+    private Date checkTime;
+
+    private String checkStatus;
+
+    private String checkResult;
+
+    private String abnormalReason;
+
+    private String itemResults;
+
+    private String status;
+
+    private String remark;
+
+    private Long createDept;
+
+    private Long createBy;
+
+    private Date createTime;
+
+    private Long updateBy;
+
+    private Date updateTime;
+
+}

+ 52 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/PersonInfoVo.java

@@ -0,0 +1,52 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.PersonInfo;
+
+import java.util.Date;
+
+/**
+ * 人员信息视图对象 person_info
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = PersonInfo.class)
+public class PersonInfoVo {
+
+    private Long personId;
+
+    private String personType;
+
+    private String personName;
+
+    private String idCard;
+
+    private Integer age;
+
+    private Long workStoreId;
+
+    private String workStoreName;
+
+    private String insuranceStatus;
+
+    private Date insuranceExpireDate;
+
+    private String certificates;
+
+    private String status;
+
+    private String remark;
+
+    private Long createDept;
+
+    private Long createBy;
+
+    private Date createTime;
+
+    private Long updateBy;
+
+    private Date updateTime;
+
+}

+ 58 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/PublicOpinionVo.java

@@ -0,0 +1,58 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.PublicOpinion;
+
+import java.util.Date;
+
+/**
+ * 舆情推送视图对象 public_opinion
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = PublicOpinion.class)
+public class PublicOpinionVo {
+
+    private Long opinionId;
+
+    private String opinionTitle;
+
+    private String source;
+
+    private Date publishTime;
+
+    private String riskLevel;
+
+    private String responsibleUser;
+
+    private String opinionLink;
+
+    private String opinionContent;
+
+    private String processSuggest;
+
+    private String processStatus;
+
+    private String processResult;
+
+    private Date processTime;
+
+    private String processUser;
+
+    private String status;
+
+    private String remark;
+
+    private Long createDept;
+
+    private Long createBy;
+
+    private Date createTime;
+
+    private Long updateBy;
+
+    private Date updateTime;
+
+}

+ 41 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/RiskCaseVo.java

@@ -0,0 +1,41 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.RiskCase;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 风控案例视图对象 risk_case
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = RiskCase.class)
+public class RiskCaseVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long caseId;
+    private String caseNo;
+    private String caseName;
+    private String caseType;
+    private String caseDesc;
+    private Long eventId;
+    private String eventNo;
+    private Long userId;
+    private String userName;
+    private String riskLevel;
+    private BigDecimal riskScore;
+    private String hitRules;
+    private String caseResult;
+    private String status;
+    private String remark;
+    private Date createTime;
+
+}

+ 43 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/RiskEventVo.java

@@ -0,0 +1,43 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.RiskEvent;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 风控事件视图对象 risk_event
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = RiskEvent.class)
+public class RiskEventVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long eventId;
+    private String eventNo;
+    private String eventType;
+    private String eventSource;
+    private Long userId;
+    private String userName;
+    private String deviceId;
+    private String ipAddress;
+    private String location;
+    private String eventData;
+    private String riskLevel;
+    private BigDecimal riskScore;
+    private String hitRules;
+    private String actionTaken;
+    private String status;
+    private String remark;
+    private Date eventTime;
+    private Date createTime;
+
+}

+ 89 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/RiskRuleVo.java

@@ -0,0 +1,89 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.RiskRule;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 风控规则视图对象 risk_rule
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = RiskRule.class)
+public class RiskRuleVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 规则ID
+     */
+    private Long ruleId;
+
+    /**
+     * 规则名称
+     */
+    private String ruleName;
+
+    /**
+     * 规则编码
+     */
+    private String ruleCode;
+
+    /**
+     * 规则类型(1交易规则 2登录规则 3设备规则 4行为规则)
+     */
+    private String ruleType;
+
+    /**
+     * 规则描述
+     */
+    private String ruleDesc;
+
+    /**
+     * 规则脚本/条件
+     */
+    private String ruleScript;
+
+    /**
+     * 风险等级(1低风险 2中风险 3高风险 4极高风险)
+     */
+    private String riskLevel;
+
+    /**
+     * 规则分值
+     */
+    private BigDecimal ruleScore;
+
+    /**
+     * 触发动作(1预警 2拦截 3人工审核 4记录日志)
+     */
+    private String actionType;
+
+    /**
+     * 规则状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 优先级
+     */
+    private Integer priority;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+}

+ 41 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/RiskScoreVo.java

@@ -0,0 +1,41 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.RiskScore;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 风险评分视图对象 risk_score
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = RiskScore.class)
+public class RiskScoreVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long scoreId;
+    private String scoreNo;
+    private Long userId;
+    private String userName;
+    private String scoreType;
+    private BigDecimal totalScore;
+    private BigDecimal baseScore;
+    private BigDecimal ruleScore;
+    private BigDecimal behaviorScore;
+    private BigDecimal creditScore;
+    private String riskLevel;
+    private String evaluation;
+    private String status;
+    private String remark;
+    private Date evaluateTime;
+    private Date createTime;
+
+}

+ 46 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/RiskWarningVo.java

@@ -0,0 +1,46 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.RiskWarning;
+
+import java.util.Date;
+
+/**
+ * 风险警示视图对象 risk_warning
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = RiskWarning.class)
+public class RiskWarningVo {
+
+    private Long warningId;
+
+    private String warningTitle;
+
+    private String warningType;
+
+    private String warningLevel;
+
+    private String warningContent;
+
+    private Date publishTime;
+
+    private String publishUser;
+
+    private String status;
+
+    private String remark;
+
+    private Long createDept;
+
+    private Long createBy;
+
+    private Date createTime;
+
+    private Long updateBy;
+
+    private Date updateTime;
+
+}

+ 58 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/SafetyHazardVo.java

@@ -0,0 +1,58 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.SafetyHazard;
+
+import java.util.Date;
+
+/**
+ * 安全隐患视图对象 safety_hazard
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = SafetyHazard.class)
+public class SafetyHazardVo {
+
+    private Long hazardId;
+
+    private String hazardNo;
+
+    private String hazardName;
+
+    private String hazardType;
+
+    private String riskLevel;
+
+    private Date discoverTime;
+
+    private String hazardLocation;
+
+    private String hazardDesc;
+
+    private String photoUrls;
+
+    private String processStatus;
+
+    private String processResult;
+
+    private Date processTime;
+
+    private String processUser;
+
+    private String status;
+
+    private String remark;
+
+    private Long createDept;
+
+    private Long createBy;
+
+    private Date createTime;
+
+    private Long updateBy;
+
+    private Date updateTime;
+
+}

+ 87 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/SafetyTrainingVo.java

@@ -0,0 +1,87 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.SafetyTraining;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 安全培训视图对象 safety_training
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = SafetyTraining.class)
+public class SafetyTrainingVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 培训ID
+     */
+    private Long trainingId;
+
+    /**
+     * 培训编号
+     */
+    private String trainingNo;
+
+    /**
+     * 培训标题
+     */
+    private String trainingTitle;
+
+    /**
+     * 培训类型(安全知识/操作规范/应急预案/设备维护)
+     */
+    private String trainingType;
+
+    /**
+     * 培训时间
+     */
+    private Date trainingTime;
+
+    /**
+     * 培训地点
+     */
+    private String trainingLocation;
+
+    /**
+     * 培训师
+     */
+    private String trainer;
+
+    /**
+     * 参与人数
+     */
+    private Integer participantCount;
+
+    /**
+     * 培训状态(未开始/进行中/已结束)
+     */
+    private String trainingStatus;
+
+    /**
+     * 培训内容
+     */
+    private String trainingContent;
+
+    /**
+     * 培训资料
+     */
+    private String trainingMaterial;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 44 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/SpecialEquipmentVo.java

@@ -0,0 +1,44 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.SpecialEquipment;
+
+import java.util.Date;
+
+/**
+ * 特种设备视图对象 special_equipment
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = SpecialEquipment.class)
+public class SpecialEquipmentVo {
+
+    private Long equipmentId;
+
+    private String equipmentNo;
+
+    private String equipmentName;
+
+    private String equipmentType;
+
+    private String installLocation;
+
+    private String photoUrls;
+
+    private String status;
+
+    private String remark;
+
+    private Long createDept;
+
+    private Long createBy;
+
+    private Date createTime;
+
+    private Long updateBy;
+
+    private Date updateTime;
+
+}

+ 34 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/WhiteListVo.java

@@ -0,0 +1,34 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.WhiteList;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 白名单视图对象 risk_whitelist
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = WhiteList.class)
+public class WhiteListVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long whiteId;
+    private String whiteType;
+    private String whiteValue;
+    private String whiteName;
+    private String reason;
+    private String source;
+    private Date expireTime;
+    private String status;
+    private String remark;
+    private Date createTime;
+
+}

+ 62 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/domain/vo/WorkReportVo.java

@@ -0,0 +1,62 @@
+package org.dromara.riskctrl.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.riskctrl.domain.WorkReport;
+
+import java.util.Date;
+
+/**
+ * 作业上报视图对象 work_report
+ *
+ * @author riskctrl
+ */
+@Data
+@AutoMapper(target = WorkReport.class)
+public class WorkReportVo {
+
+    private Long reportId;
+
+    private String reportNo;
+
+    private String workType;
+
+    private String projectName;
+
+    private Date startTime;
+
+    private Date endTime;
+
+    private String safetyOfficer;
+
+    private String contactPhone;
+
+    private String workImages;
+
+    private String permitFiles;
+
+    private String workDesc;
+
+    private String auditStatus;
+
+    private String auditComment;
+
+    private String auditUser;
+
+    private Date auditTime;
+
+    private String status;
+
+    private String remark;
+
+    private Long createDept;
+
+    private Long createBy;
+
+    private Date createTime;
+
+    private Long updateBy;
+
+    private Date updateTime;
+
+}

+ 34 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/mapper/AccidentReportMapper.java

@@ -0,0 +1,34 @@
+package org.dromara.riskctrl.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.dromara.common.mybatis.annotation.DataColumn;
+import org.dromara.common.mybatis.annotation.DataPermission;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.riskctrl.domain.AccidentReport;
+import org.dromara.riskctrl.domain.vo.AccidentReportVo;
+
+import java.util.List;
+
+/**
+ * 事故上报 数据层
+ *
+ * @author riskctrl
+ */
+public interface AccidentReportMapper extends BaseMapperPlus<AccidentReport, AccidentReportVo> {
+
+    @DataPermission({
+        @DataColumn(key = "deptName", value = "create_dept")
+    })
+    default Page<AccidentReportVo> selectPageAccidentList(Page<AccidentReport> page, Wrapper<AccidentReport> queryWrapper) {
+        return this.selectVoPage(page, queryWrapper);
+    }
+
+    @DataPermission({
+        @DataColumn(key = "deptName", value = "create_dept")
+    })
+    default List<AccidentReportVo> selectAccidentList(Wrapper<AccidentReport> queryWrapper) {
+        return this.selectVoList(queryWrapper);
+    }
+
+}

+ 34 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/mapper/AuditPersonChangeMapper.java

@@ -0,0 +1,34 @@
+package org.dromara.riskctrl.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.dromara.common.mybatis.annotation.DataColumn;
+import org.dromara.common.mybatis.annotation.DataPermission;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.riskctrl.domain.AuditPersonChange;
+import org.dromara.riskctrl.domain.vo.AuditPersonChangeVo;
+
+import java.util.List;
+
+/**
+ * 审计-人员变动 数据层
+ *
+ * @author riskctrl
+ */
+public interface AuditPersonChangeMapper extends BaseMapperPlus<AuditPersonChange, AuditPersonChangeVo> {
+
+    @DataPermission({
+        @DataColumn(key = "deptName", value = "create_dept")
+    })
+    default Page<AuditPersonChangeVo> selectPageChangeList(Page<AuditPersonChange> page, Wrapper<AuditPersonChange> queryWrapper) {
+        return this.selectVoPage(page, queryWrapper);
+    }
+
+    @DataPermission({
+        @DataColumn(key = "deptName", value = "create_dept")
+    })
+    default List<AuditPersonChangeVo> selectChangeList(Wrapper<AuditPersonChange> queryWrapper) {
+        return this.selectVoList(queryWrapper);
+    }
+
+}

+ 20 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/mapper/BlackListMapper.java

@@ -0,0 +1,20 @@
+package org.dromara.riskctrl.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.riskctrl.domain.BlackList;
+import org.dromara.riskctrl.domain.vo.BlackListVo;
+
+/**
+ * 黑名单Mapper接口
+ *
+ * @author riskctrl
+ */
+public interface BlackListMapper extends BaseMapperPlus<BlackList, BlackListVo> {
+
+    default Page<BlackListVo> selectPageBlackList(Page<BlackList> page, Wrapper<BlackList> queryWrapper) {
+        return this.selectVoPage(page, queryWrapper);
+    }
+
+}

+ 34 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/mapper/DangerSourceMapper.java

@@ -0,0 +1,34 @@
+package org.dromara.riskctrl.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.dromara.common.mybatis.annotation.DataColumn;
+import org.dromara.common.mybatis.annotation.DataPermission;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.riskctrl.domain.DangerSource;
+import org.dromara.riskctrl.domain.vo.DangerSourceVo;
+
+import java.util.List;
+
+/**
+ * 危险源 数据层
+ *
+ * @author riskctrl
+ */
+public interface DangerSourceMapper extends BaseMapperPlus<DangerSource, DangerSourceVo> {
+
+    @DataPermission({
+        @DataColumn(key = "deptName", value = "create_dept")
+    })
+    default Page<DangerSourceVo> selectPageSourceList(Page<DangerSource> page, Wrapper<DangerSource> queryWrapper) {
+        return this.selectVoPage(page, queryWrapper);
+    }
+
+    @DataPermission({
+        @DataColumn(key = "deptName", value = "create_dept")
+    })
+    default List<DangerSourceVo> selectSourceList(Wrapper<DangerSource> queryWrapper) {
+        return this.selectVoList(queryWrapper);
+    }
+
+}

+ 34 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/mapper/EquipmentMaintenanceMapper.java

@@ -0,0 +1,34 @@
+package org.dromara.riskctrl.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.dromara.common.mybatis.annotation.DataColumn;
+import org.dromara.common.mybatis.annotation.DataPermission;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.riskctrl.domain.EquipmentMaintenance;
+import org.dromara.riskctrl.domain.vo.EquipmentMaintenanceVo;
+
+import java.util.List;
+
+/**
+ * 设备维护记录 数据层
+ *
+ * @author riskctrl
+ */
+public interface EquipmentMaintenanceMapper extends BaseMapperPlus<EquipmentMaintenance, EquipmentMaintenanceVo> {
+
+    @DataPermission({
+        @DataColumn(key = "deptName", value = "create_dept")
+    })
+    default Page<EquipmentMaintenanceVo> selectPageMaintenanceList(Page<EquipmentMaintenance> page, Wrapper<EquipmentMaintenance> queryWrapper) {
+        return this.selectVoPage(page, queryWrapper);
+    }
+
+    @DataPermission({
+        @DataColumn(key = "deptName", value = "create_dept")
+    })
+    default List<EquipmentMaintenanceVo> selectMaintenanceList(Wrapper<EquipmentMaintenance> queryWrapper) {
+        return this.selectVoList(queryWrapper);
+    }
+
+}

+ 34 - 0
ruoyi-modules/ruoyi-riskctrl/src/main/java/org/dromara/riskctrl/mapper/NoticeAnnouncementMapper.java

@@ -0,0 +1,34 @@
+package org.dromara.riskctrl.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.dromara.common.mybatis.annotation.DataColumn;
+import org.dromara.common.mybatis.annotation.DataPermission;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.riskctrl.domain.NoticeAnnouncement;
+import org.dromara.riskctrl.domain.vo.NoticeAnnouncementVo;
+
+import java.util.List;
+
+/**
+ * 通知公告 数据层
+ *
+ * @author riskctrl
+ */
+public interface NoticeAnnouncementMapper extends BaseMapperPlus<NoticeAnnouncement, NoticeAnnouncementVo> {
+
+    @DataPermission({
+        @DataColumn(key = "deptName", value = "create_dept")
+    })
+    default Page<NoticeAnnouncementVo> selectPageNoticeList(Page<NoticeAnnouncement> page, Wrapper<NoticeAnnouncement> queryWrapper) {
+        return this.selectVoPage(page, queryWrapper);
+    }
+
+    @DataPermission({
+        @DataColumn(key = "deptName", value = "create_dept")
+    })
+    default List<NoticeAnnouncementVo> selectNoticeList(Wrapper<NoticeAnnouncement> queryWrapper) {
+        return this.selectVoList(queryWrapper);
+    }
+
+}

Some files were not shown because too many files changed in this diff