From a7a8a50f48c1bff5ddc52b3bad1782328f8043d8 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 12 四月 2024 18:50:20 +0800
Subject: [PATCH] 基础数据配置接口修改

---
 ruoyi-system/src/main/java/com/ruoyi/system/dto/SysUserDTO.java                             |   25 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldVO.java                                 |    8 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenConfigServiceImpl.java |   27 
 ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java |   52 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java        |    1 
 ruoyi-common/src/main/java/com/ruoyi/common/enums/ValueTypeEnum.java                        |   27 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/CalculateItemDTO.java                       |   54 +
 ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldReportingVO.java                        |    8 
 pom.xml                                                                                     |  454 +++++----
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataConfigServiceImpl.java  |  193 ++-
 ruoyi-system/src/main/java/com/ruoyi/system/dto/update/RiskLevelUpdDTO.java                 |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java            |   52 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbFieldController.java               |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/update/BasicDataConfigUpdateDTO.java        |   16 
 ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/system/SysUserController.java       |  148 ++
 ruoyi-system/src/main/java/com/ruoyi/system/dto/BasicDataConfigDTO.java                     |   18 
 ruoyi-system/src/main/resources/mapper/system/TbBasicDataConfigMapper.xml                   |   96 +
 ruoyi-system/src/main/java/com/ruoyi/system/dto/update/DataIndicatorsUpdDTO.java            |    7 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/SysRoleDTO.java                             |   12 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FormalIndicatorsUpdDTO.java          |    7 
 ruoyi-system/src/main/java/com/ruoyi/system/query/FieldCategoryQuery.java                   |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/query/FieldQuery.java                           |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java            |  109 +-
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java                 |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/RoleInfoVO.java                              |   13 
 ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml                             |    8 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/TbDataScreenConfig.java                  |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java                       |   45 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataConfigDetailVO.java                 |   14 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicDataConfig.java                   |   16 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FieldUpdateDTO.java                  |   15 
 ruoyi-system/pom.xml                                                                        |    6 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbQuestionServiceImpl.java         |    1 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbBasicDataCategoryController.java   |   26 
 ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataConfigService.java           |   10 
 ruoyi-system/src/main/java/com/ruoyi/system/service/TbFieldService.java                     |    7 
 ruoyi-admin/src/main/resources/application.yml                                              |  174 ---
 ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java       |  138 ++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbBasicDataConfigController.java     |   72 +
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseModel.java                      |   37 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/CalculateUtil.java                        |   29 
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java                    |   62 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java            |  144 +-
 ruoyi-admin/src/main/resources/application-prod.yml                                         |  238 +++++
 ruoyi-admin-dept/src/main/resources/application-druid.yml                                   |  124 +-
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbBasicDataConfigMapper.java             |    8 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java            |   13 
 ruoyi-admin/src/main/resources/application-dev.yml                                          |  239 +++++
 48 files changed, 1,806 insertions(+), 966 deletions(-)

diff --git a/pom.xml b/pom.xml
index a794ada..5320158 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,247 +1,267 @@
 <?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">
-	<modelVersion>4.0.0</modelVersion>
-	
-    <groupId>com.ruoyi</groupId>
-    <artifactId>ruoyi</artifactId>
-    <version>3.8.6</version>
+  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">
+  <modelVersion>4.0.0</modelVersion>
 
-    <name>ruoyi</name>
-    <url>http://www.ruoyi.vip</url>
-    <description>若依管理系统</description>
-    
-    <properties>
-        <ruoyi.version>3.8.6</ruoyi.version>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-        <java.version>1.8</java.version>
-        <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
-        <druid.version>1.2.16</druid.version>
-        <bitwalker.version>1.21</bitwalker.version>
-        <swagger.version>3.0.0</swagger.version>
-        <kaptcha.version>2.3.3</kaptcha.version>
-        <pagehelper.boot.version>1.4.6</pagehelper.boot.version>
-        <fastjson.version>2.0.39</fastjson.version>
-        <oshi.version>6.4.4</oshi.version>
-        <commons.io.version>2.13.0</commons.io.version>
-        <commons.collections.version>3.2.2</commons.collections.version>
-        <poi.version>4.1.2</poi.version>
-        <velocity.version>2.3</velocity.version>
-        <jwt.version>0.9.1</jwt.version>
-        <hutool.version>5.7.17</hutool.version>
-    </properties>
+  <groupId>com.ruoyi</groupId>
+  <artifactId>ruoyi</artifactId>
+  <version>3.8.6</version>
 
-    <!-- 依赖声明 -->
-    <dependencyManagement>
-        <dependencies>
+  <name>ruoyi</name>
+  <url>http://www.ruoyi.vip</url>
+  <description>若依管理系统</description>
 
-            <!-- SpringBoot的依赖配置-->
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-dependencies</artifactId>
-                <version>2.5.15</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
+  <properties>
+    <ruoyi.version>3.8.6</ruoyi.version>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+    <java.version>1.8</java.version>
+    <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
+    <druid.version>1.2.16</druid.version>
+    <bitwalker.version>1.21</bitwalker.version>
+    <swagger.version>3.0.0</swagger.version>
+    <kaptcha.version>2.3.3</kaptcha.version>
+    <pagehelper.boot.version>1.4.6</pagehelper.boot.version>
+    <fastjson.version>2.0.39</fastjson.version>
+    <oshi.version>6.4.4</oshi.version>
+    <commons.io.version>2.13.0</commons.io.version>
+    <commons.collections.version>3.2.2</commons.collections.version>
+    <poi.version>4.1.2</poi.version>
+    <velocity.version>2.3</velocity.version>
+    <jwt.version>0.9.1</jwt.version>
+    <hutool.version>5.7.17</hutool.version>
+  </properties>
 
-            <!-- 阿里数据库连接池 -->
-            <dependency>
-                <groupId>com.alibaba</groupId>
-                <artifactId>druid-spring-boot-starter</artifactId>
-                <version>${druid.version}</version>
-            </dependency>
+  <!-- 依赖声明 -->
+  <dependencyManagement>
+    <dependencies>
 
-            <!-- 解析客户端操作系统、浏览器等 -->
-            <dependency>
-                <groupId>eu.bitwalker</groupId>
-                <artifactId>UserAgentUtils</artifactId>
-                <version>${bitwalker.version}</version>
-            </dependency>
+      <!-- SpringBoot的依赖配置-->
+      <dependency>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-dependencies</artifactId>
+        <version>2.5.15</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
 
-            <!-- pagehelper 分页插件 -->
-<!--            <dependency>-->
-<!--                <groupId>com.github.pagehelper</groupId>-->
-<!--                <artifactId>pagehelper-spring-boot-starter</artifactId>-->
-<!--                <version>${pagehelper.boot.version}</version>-->
-<!--            </dependency>-->
+      <!-- 阿里数据库连接池 -->
+      <dependency>
+        <groupId>com.alibaba</groupId>
+        <artifactId>druid-spring-boot-starter</artifactId>
+        <version>${druid.version}</version>
+      </dependency>
 
-            <!-- 获取系统信息 -->
-            <dependency>
-                <groupId>com.github.oshi</groupId>
-                <artifactId>oshi-core</artifactId>
-                <version>${oshi.version}</version>
-            </dependency>
+      <!-- 解析客户端操作系统、浏览器等 -->
+      <dependency>
+        <groupId>eu.bitwalker</groupId>
+        <artifactId>UserAgentUtils</artifactId>
+        <version>${bitwalker.version}</version>
+      </dependency>
 
-            <!-- Swagger3依赖 -->
-            <dependency>
-                <groupId>io.springfox</groupId>
-                <artifactId>springfox-boot-starter</artifactId>
-                <version>${swagger.version}</version>
-<!--                <exclusions>-->
-<!--                    <exclusion>-->
-<!--                        <groupId>io.swagger</groupId>-->
-<!--                        <artifactId>swagger-models</artifactId>-->
-<!--                    </exclusion>-->
-<!--                </exclusions>-->
-            </dependency>
-            <!-- io常用工具类 -->
-            <dependency>
-                <groupId>commons-io</groupId>
-                <artifactId>commons-io</artifactId>
-                <version>${commons.io.version}</version>
-            </dependency>
+      <!-- pagehelper 分页插件 -->
+      <!--            <dependency>-->
+      <!--                <groupId>com.github.pagehelper</groupId>-->
+      <!--                <artifactId>pagehelper-spring-boot-starter</artifactId>-->
+      <!--                <version>${pagehelper.boot.version}</version>-->
+      <!--            </dependency>-->
 
-            <!-- excel工具 -->
-<!--            <dependency>-->
-<!--                <groupId>org.apache.poi</groupId>-->
-<!--                <artifactId>poi-ooxml</artifactId>-->
-<!--                <version>${poi.version}</version>-->
-<!--            </dependency>-->
+      <!-- 获取系统信息 -->
+      <dependency>
+        <groupId>com.github.oshi</groupId>
+        <artifactId>oshi-core</artifactId>
+        <version>${oshi.version}</version>
+      </dependency>
+
+      <!-- Swagger3依赖 -->
+      <dependency>
+        <groupId>io.springfox</groupId>
+        <artifactId>springfox-boot-starter</artifactId>
+        <version>${swagger.version}</version>
+        <!--                <exclusions>-->
+        <!--                    <exclusion>-->
+        <!--                        <groupId>io.swagger</groupId>-->
+        <!--                        <artifactId>swagger-models</artifactId>-->
+        <!--                    </exclusion>-->
+        <!--                </exclusions>-->
+      </dependency>
+      <!-- io常用工具类 -->
+      <dependency>
+        <groupId>commons-io</groupId>
+        <artifactId>commons-io</artifactId>
+        <version>${commons.io.version}</version>
+      </dependency>
+
+      <!-- excel工具 -->
+      <!--            <dependency>-->
+      <!--                <groupId>org.apache.poi</groupId>-->
+      <!--                <artifactId>poi-ooxml</artifactId>-->
+      <!--                <version>${poi.version}</version>-->
+      <!--            </dependency>-->
 
 
-<!--            <dependency>-->
-<!--                <groupId>org.apache.poi</groupId>-->
-<!--                <artifactId>poi</artifactId>-->
-<!--                <version>${poi.version}</version>-->
-<!--            </dependency>-->
+      <!--            <dependency>-->
+      <!--                <groupId>org.apache.poi</groupId>-->
+      <!--                <artifactId>poi</artifactId>-->
+      <!--                <version>${poi.version}</version>-->
+      <!--            </dependency>-->
 
-<!--            <dependency>-->
-<!--                <groupId>org.apache.poi</groupId>-->
-<!--                <artifactId>poi-ooxml-schemas</artifactId>-->
-<!--                <version>${poi.version}</version>-->
-<!--            </dependency>-->
+      <!--            <dependency>-->
+      <!--                <groupId>org.apache.poi</groupId>-->
+      <!--                <artifactId>poi-ooxml-schemas</artifactId>-->
+      <!--                <version>${poi.version}</version>-->
+      <!--            </dependency>-->
 
-            <!-- velocity代码生成使用模板 -->
-            <dependency>
-                <groupId>org.apache.velocity</groupId>
-                <artifactId>velocity-engine-core</artifactId>
-                <version>${velocity.version}</version>
-            </dependency>
+      <!-- velocity代码生成使用模板 -->
+      <dependency>
+        <groupId>org.apache.velocity</groupId>
+        <artifactId>velocity-engine-core</artifactId>
+        <version>${velocity.version}</version>
+      </dependency>
 
-            <!-- collections工具类 -->
-            <dependency>
-                <groupId>commons-collections</groupId>
-                <artifactId>commons-collections</artifactId>
-                <version>${commons.collections.version}</version>
-            </dependency>
+      <!-- collections工具类 -->
+      <dependency>
+        <groupId>commons-collections</groupId>
+        <artifactId>commons-collections</artifactId>
+        <version>${commons.collections.version}</version>
+      </dependency>
 
-            <!-- 阿里JSON解析器 -->
-            <dependency>
-                <groupId>com.alibaba.fastjson2</groupId>
-                <artifactId>fastjson2</artifactId>
-                <version>${fastjson.version}</version>
-            </dependency>
+      <!-- 阿里JSON解析器 -->
+      <dependency>
+        <groupId>com.alibaba.fastjson2</groupId>
+        <artifactId>fastjson2</artifactId>
+        <version>${fastjson.version}</version>
+      </dependency>
 
-            <!-- Token生成与解析-->
-            <dependency>
-                <groupId>io.jsonwebtoken</groupId>
-                <artifactId>jjwt</artifactId>
-                <version>${jwt.version}</version>
-            </dependency>
+      <!-- Token生成与解析-->
+      <dependency>
+        <groupId>io.jsonwebtoken</groupId>
+        <artifactId>jjwt</artifactId>
+        <version>${jwt.version}</version>
+      </dependency>
 
-            <!-- 验证码 -->
-            <dependency>
-                <groupId>pro.fessional</groupId>
-                <artifactId>kaptcha</artifactId>
-                <version>${kaptcha.version}</version>
-            </dependency>
+      <!-- 验证码 -->
+      <dependency>
+        <groupId>pro.fessional</groupId>
+        <artifactId>kaptcha</artifactId>
+        <version>${kaptcha.version}</version>
+      </dependency>
 
-            <!-- 定时任务-->
-            <dependency>
-                <groupId>com.ruoyi</groupId>
-                <artifactId>ruoyi-quartz</artifactId>
-                <version>${ruoyi.version}</version>
-            </dependency>
+      <!-- 定时任务-->
+      <dependency>
+        <groupId>com.ruoyi</groupId>
+        <artifactId>ruoyi-quartz</artifactId>
+        <version>${ruoyi.version}</version>
+      </dependency>
 
-            <!-- 代码生成-->
-            <dependency>
-                <groupId>com.ruoyi</groupId>
-                <artifactId>ruoyi-generator</artifactId>
-                <version>${ruoyi.version}</version>
-            </dependency>
+      <!-- 代码生成-->
+      <dependency>
+        <groupId>com.ruoyi</groupId>
+        <artifactId>ruoyi-generator</artifactId>
+        <version>${ruoyi.version}</version>
+      </dependency>
 
-            <!-- 核心模块-->
-            <dependency>
-                <groupId>com.ruoyi</groupId>
-                <artifactId>ruoyi-framework</artifactId>
-                <version>${ruoyi.version}</version>
-            </dependency>
+      <!-- 核心模块-->
+      <dependency>
+        <groupId>com.ruoyi</groupId>
+        <artifactId>ruoyi-framework</artifactId>
+        <version>${ruoyi.version}</version>
+      </dependency>
 
-            <!-- 系统模块-->
-            <dependency>
-                <groupId>com.ruoyi</groupId>
-                <artifactId>ruoyi-system</artifactId>
-                <version>${ruoyi.version}</version>
-            </dependency>
+      <!-- 系统模块-->
+      <dependency>
+        <groupId>com.ruoyi</groupId>
+        <artifactId>ruoyi-system</artifactId>
+        <version>${ruoyi.version}</version>
+      </dependency>
 
-            <!-- 通用工具-->
-            <dependency>
-                <groupId>com.ruoyi</groupId>
-                <artifactId>ruoyi-common</artifactId>
-                <version>${ruoyi.version}</version>
-            </dependency>
+      <!-- 通用工具-->
+      <dependency>
+        <groupId>com.ruoyi</groupId>
+        <artifactId>ruoyi-common</artifactId>
+        <version>${ruoyi.version}</version>
+      </dependency>
 
-            <!--hutool工具包-->
-            <dependency>
-                <groupId>cn.hutool</groupId>
-                <artifactId>hutool-all</artifactId>
-                <version>${hutool.version}</version>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
+      <!--hutool工具包-->
+      <dependency>
+        <groupId>cn.hutool</groupId>
+        <artifactId>hutool-all</artifactId>
+        <version>${hutool.version}</version>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
 
-    <modules>
-        <module>ruoyi-admin</module>
-        <module>ruoyi-framework</module>
-        <module>ruoyi-system</module>
-        <module>ruoyi-quartz</module>
-        <module>ruoyi-generator</module>
-        <module>ruoyi-common</module>
-        <module>ruoyi-admin-dept</module>
-        <module>code-generator</module>
-    </modules>
-    <packaging>pom</packaging>
+  <modules>
+    <module>ruoyi-admin</module>
+    <module>ruoyi-framework</module>
+    <module>ruoyi-system</module>
+    <module>ruoyi-quartz</module>
+    <module>ruoyi-generator</module>
+    <module>ruoyi-common</module>
+    <module>ruoyi-admin-dept</module>
+    <module>code-generator</module>
+  </modules>
+  <packaging>pom</packaging>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.1</version>
-                <configuration>
-                    <source>${java.version}</source>
-                    <target>${java.version}</target>
-                    <encoding>${project.build.sourceEncoding}</encoding>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.1</version>
+        <configuration>
+          <source>${java.version}</source>
+          <target>${java.version}</target>
+          <encoding>${project.build.sourceEncoding}</encoding>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
 
-    <repositories>
-        <repository>
-            <id>public</id>
-            <name>aliyun nexus</name>
-            <url>https://maven.aliyun.com/repository/public</url>
-            <releases>
-                <enabled>true</enabled>
-            </releases>
-        </repository>
-    </repositories>
+  <repositories>
+    <repository>
+      <id>public</id>
+      <name>aliyun nexus</name>
+      <url>https://maven.aliyun.com/repository/public</url>
+      <releases>
+        <enabled>true</enabled>
+      </releases>
+    </repository>
+  </repositories>
 
-    <pluginRepositories>
-        <pluginRepository>
-            <id>public</id>
-            <name>aliyun nexus</name>
-            <url>https://maven.aliyun.com/repository/public</url>
-            <releases>
-                <enabled>true</enabled>
-            </releases>
-            <snapshots>
-                <enabled>false</enabled>
-            </snapshots>
-        </pluginRepository>
-    </pluginRepositories>
-
+  <pluginRepositories>
+    <pluginRepository>
+      <id>public</id>
+      <name>aliyun nexus</name>
+      <url>https://maven.aliyun.com/repository/public</url>
+      <releases>
+        <enabled>true</enabled>
+      </releases>
+      <snapshots>
+        <enabled>false</enabled>
+      </snapshots>
+    </pluginRepository>
+  </pluginRepositories>
+  <profiles>
+    <profile>
+      <id>dev</id>
+      <properties>
+        <!-- 环境标识,需要与配置文件的名称相对应 -->
+        <profiles.active>dev</profiles.active>
+        <logging.level>debug</logging.level>
+      </properties>
+      <activation>
+        <!-- 默认环境 -->
+        <activeByDefault>true</activeByDefault>
+      </activation>
+    </profile>
+    <profile>
+      <id>prod</id>
+      <properties>
+        <profiles.active>prod</profiles.active>
+        <logging.level>warn</logging.level>
+      </properties>
+    </profile>
+  </profiles>
 </project>
\ No newline at end of file
diff --git a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java b/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
index fa44b77..1767d71 100644
--- a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
+++ b/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
@@ -1,3 +1,4 @@
+/*
 package com.ruoyi.web.controller.system;
 
 import java.util.ArrayList;
@@ -34,11 +35,39 @@
 import com.ruoyi.system.service.ISysRoleService;
 import com.ruoyi.system.service.ISysUserService;
 
+*/
 /**
  * 角色信息
- * 
+ *
  * @author ruoyi
- */
+ * <p>
+ * 根据角色编号获取详细信息
+ * <p>
+ * 新增角色
+ * <p>
+ * 修改保存角色
+ * <p>
+ * 修改保存数据权限
+ * <p>
+ * 状态修改
+ * <p>
+ * 删除角色
+ * <p>
+ * 获取角色选择框列表
+ * <p>
+ * 查询已分配用户角色列表
+ * <p>
+ * 查询未分配用户角色列表
+ * <p>
+ * 取消授权用户
+ * <p>
+ * 批量取消授权用户
+ * <p>
+ * 批量选择用户授权
+ * <p>
+ * 获取对应角色部门树列表
+ *//*
+
 @Api(tags = "角色信息")
 @RestController
 @RequestMapping("/system/role")
@@ -103,9 +132,11 @@
 //        util.exportExcel(response, list, "角色数据");
 //    }
 
-    /**
-     * 根据角色编号获取详细信息
-     */
+    */
+/**
+ * 根据角色编号获取详细信息
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:role:query')")
     @GetMapping(value = "/{roleId}")
     public AjaxResult getInfo(@PathVariable Long roleId)
@@ -147,9 +178,11 @@
     }
 
 
-    /**
-     * 新增角色
-     */
+    */
+/**
+ * 新增角色
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:role:add')")
     @ApiOperation(value = "新增角色")
     @Log(title = "角色信息-新增角色", businessType = BusinessType.INSERT)
@@ -165,9 +198,11 @@
 
     }
 
-    /**
-     * 修改保存角色
-     */
+    */
+/**
+ * 修改保存角色
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:role:edit')")
     @ApiOperation(value = "编辑角色")
     @Log(title = "角色信息-编辑角色", businessType = BusinessType.UPDATE)
@@ -193,9 +228,11 @@
         return error("修改角色'" + dto.getRoleName() + "'失败,请联系管理员");
     }
 
-    /**
-     * 修改保存数据权限
-     */
+    */
+/**
+ * 修改保存数据权限
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:role:edit')")
     @Log(title = "角色管理", businessType = BusinessType.UPDATE)
     @PutMapping("/dataScope")
@@ -206,9 +243,11 @@
         return AjaxResult.success(roleService.authDataScope(role));
     }
 
-    /**
-     * 状态修改
-     */
+    */
+/**
+ * 状态修改
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:role:edit')")
     @ApiOperation(value = "状态修改")
     @Log(title = "角色信息-角色状态修改", businessType = BusinessType.UPDATE)
@@ -220,9 +259,11 @@
         return AjaxResult.success();
     }
 
-    /**
-     * 删除角色
-     */
+    */
+/**
+ * 删除角色
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:role:remove')")
     @ApiOperation(value = "删除角色")
     @Log(title = "角色信息-角色删除角色", businessType = BusinessType.DELETE)
@@ -237,9 +278,11 @@
         return AjaxResult.success(roleService.deleteRoleByIds(id));
     }
 
-    /**
-     * 获取角色选择框列表
-     */
+    */
+/**
+ * 获取角色选择框列表
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:role:query')")
     @GetMapping("/optionselect")
     public AjaxResult optionselect()
@@ -247,9 +290,11 @@
         return AjaxResult.success(roleService.selectRoleAll());
     }
 
-    /**
-     * 查询已分配用户角色列表
-     */
+    */
+/**
+ * 查询已分配用户角色列表
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:role:list')")
     @GetMapping("/authUser/allocatedList")
     public TableDataInfo allocatedList(SysUser user)
@@ -259,9 +304,11 @@
         return getDataTable(list);
     }
 
-    /**
-     * 查询未分配用户角色列表
-     */
+    */
+/**
+ * 查询未分配用户角色列表
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:role:list')")
     @GetMapping("/authUser/unallocatedList")
     public TableDataInfo unallocatedList(SysUser user)
@@ -271,9 +318,11 @@
         return getDataTable(list);
     }
 
-    /**
-     * 取消授权用户
-     */
+    */
+/**
+ * 取消授权用户
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:role:edit')")
     @Log(title = "角色管理", businessType = BusinessType.GRANT)
     @PutMapping("/authUser/cancel")
@@ -282,9 +331,11 @@
         return AjaxResult.success(roleService.deleteAuthUser(userRole));
     }
 
-    /**
-     * 批量取消授权用户
-     */
+    */
+/**
+ * 批量取消授权用户
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:role:edit')")
     @Log(title = "角色管理", businessType = BusinessType.GRANT)
     @PutMapping("/authUser/cancelAll")
@@ -293,9 +344,11 @@
         return AjaxResult.success(roleService.deleteAuthUsers(roleId, userIds));
     }
 
-    /**
-     * 批量选择用户授权
-     */
+    */
+/**
+ * 批量选择用户授权
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:role:edit')")
     @Log(title = "角色管理", businessType = BusinessType.GRANT)
     @PutMapping("/authUser/selectAll")
@@ -305,9 +358,11 @@
         return AjaxResult.success(roleService.insertAuthUsers(roleId, userIds));
     }
 
-    /**
-     * 获取对应角色部门树列表
-     */
+    */
+/**
+ * 获取对应角色部门树列表
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:role:query')")
     @GetMapping(value = "/deptTree/{roleId}")
     public AjaxResult deptTree(@PathVariable("roleId") Long roleId)
@@ -318,3 +373,4 @@
         return ajax;
     }
 }
+*/
diff --git a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
index c5e7659..718becf 100644
--- a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
+++ b/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -1,3 +1,4 @@
+/*
 package com.ruoyi.web.controller.system;
 
 import com.ruoyi.common.annotation.Log;
@@ -30,11 +31,41 @@
 import java.util.Map;
 import java.util.stream.Collectors;
 
+*/
 /**
  * 用户信息
- * 
+ *
  * @author ruoyi
- */
+ * <p>
+ * 获取用户列表
+ * <p>
+ * 获取用户黑名单列表
+ * <p>
+ * 人员借用列表
+ * <p>
+ * 获取用户详情
+ * <p>
+ * 获取用户数量统计
+ * <p>
+ * 移除黑名单
+ * <p>
+ * 新增用户
+ * <p>
+ * 修改用户
+ * <p>
+ * 删除用户
+ * <p>
+ * 重置密码
+ * <p>
+ * 状态修改
+ * <p>
+ * 根据用户编号获取授权角色
+ * <p>
+ * 用户授权角色
+ * <p>
+ * 获取部门树列表
+ *//*
+
 @Api(tags = "用户信息")
 @RestController
 @RequestMapping("/system/user")
@@ -51,9 +82,11 @@
     @Autowired
     private TokenService tokenService;
 
-    /**
-     * 获取用户列表
-     */
+    */
+/**
+ * 获取用户列表
+ *//*
+
     @ApiOperation(value = "获取用户列表")
     @PostMapping("/list")
     public AjaxResult list(@RequestBody SysUserQuery query)
@@ -70,9 +103,11 @@
         return AjaxResult.success(list);
     }
 
-    /**
-     * 获取用户黑名单列表
-     */
+    */
+/**
+ * 获取用户黑名单列表
+ *//*
+
 //    @ApiOperation(value = "获取用户黑名单列表")
 //    @PostMapping("/blacklist")
 //    public AjaxResult blacklist(@RequestBody SysUserQuery query)
@@ -82,9 +117,11 @@
 //        return AjaxResult.success(getDataTable(list));
 //    }
 
-    /**
-     * 人员借用列表
-     */
+    */
+/**
+ * 人员借用列表
+ *//*
+
 //    @ApiOperation(value = "人员借用列表")
 //    @GetMapping("/userBorrowList")
 //    public AjaxResult userBorrowList(@RequestParam(required = false) String name,
@@ -181,9 +218,11 @@
 //        return AjaxResult.success(userAddListVO);
 //    }
 
-    /**
-     * 获取用户详情
-     */
+    */
+/**
+ * 获取用户详情
+ *//*
+
     @ApiOperation(value = "获取用户详情")
     @GetMapping("/getDetail")
     public AjaxResult getDetail(@RequestParam Long userId)
@@ -196,9 +235,11 @@
     }
 
 
-    /**
-     * 获取用户数量统计
-     */
+    */
+/**
+ * 获取用户数量统计
+ *//*
+
     @ApiOperation(value = "获取用户数量统计")
     @PostMapping("/getUserCount")
     public AjaxResult getUserCount()
@@ -216,9 +257,11 @@
         return AjaxResult.success(map);
     }
 
-    /**
-     * 移除黑名单
-     */
+    */
+/**
+ * 移除黑名单
+ *//*
+
     @GetMapping("/removeBlackList")
     public AjaxResult removeBlackList(@RequestParam String ids)
     {
@@ -262,9 +305,11 @@
 //    }
 
 
-    /**
-     * 新增用户
-     */
+    */
+/**
+ * 新增用户
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:user:add')")
     @ApiOperation(value = "新增用户管理")
     @Log(title = "用户信息-新增用户", businessType = BusinessType.INSERT)
@@ -286,9 +331,11 @@
         return AjaxResult.success();
     }
 
-    /**
-     * 修改用户
-     */
+    */
+/**
+ * 修改用户
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:user:edit')")
     @ApiOperation(value = "修改用户管理")
     @Log(title = "用户信息-修改用户", businessType = BusinessType.UPDATE)
@@ -310,9 +357,11 @@
         return AjaxResult.success(userService.updateUser(user));
     }
 
-    /**
-     * 删除用户
-     */
+    */
+/**
+ * 删除用户
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:user:remove')")
     @ApiOperation(value = "批量删除用户")
     @Log(title = "用户信息-批量删除用户", businessType = BusinessType.DELETE)
@@ -331,9 +380,11 @@
         return AjaxResult.success(userService.deleteUserByIds(userIds));
     }
 
-    /**
-     * 重置密码
-     */
+    */
+/**
+ * 重置密码
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
     @ApiOperation(value = "重置密码")
     @Log(title = "用户信息-重置密码", businessType = BusinessType.UPDATE)
@@ -347,9 +398,11 @@
         return AjaxResult.success(userService.resetPwd(user));
     }
 
-    /**
-     * 状态修改
-     */
+    */
+/**
+ * 状态修改
+ *//*
+
     @ApiOperation(value = "状态修改")
     @Log(title = "用户信息-状态修改", businessType = BusinessType.UPDATE)
     @PutMapping("/changeStatus")
@@ -363,9 +416,11 @@
         return AjaxResult.success(userService.updateUserStatus(user));
     }
 
-    /**
-     * 根据用户编号获取授权角色
-     */
+    */
+/**
+ * 根据用户编号获取授权角色
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:user:query')")
     @GetMapping("/authRole/{userId}")
     public AjaxResult authRole(@PathVariable("userId") Long userId)
@@ -378,9 +433,11 @@
         return ajax;
     }
 
-    /**
-     * 用户授权角色
-     */
+    */
+/**
+ * 用户授权角色
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:user:edit')")
     @Log(title = "用户管理", businessType = BusinessType.GRANT)
     @PutMapping("/authRole")
@@ -391,9 +448,11 @@
         return AjaxResult.success();
     }
 
-    /**
-     * 获取部门树列表
-     */
+    */
+/**
+ * 获取部门树列表
+ *//*
+
     // @PreAuthorize("@ss.hasPermi('system:user:list')")
     @GetMapping("/deptTree")
     public AjaxResult deptTree(SysDept dept)
@@ -401,3 +460,4 @@
         return AjaxResult.success(deptService.selectDeptTreeList(dept));
     }
 }
+*/
diff --git a/ruoyi-admin-dept/src/main/resources/application-druid.yml b/ruoyi-admin-dept/src/main/resources/application-druid.yml
index bcdd861..494a05a 100644
--- a/ruoyi-admin-dept/src/main/resources/application-druid.yml
+++ b/ruoyi-admin-dept/src/main/resources/application-druid.yml
@@ -1,64 +1,64 @@
 # 数据源配置
 spring:
-    datasource:
-        type: com.alibaba.druid.pool.DruidDataSource
-        driverClassName: com.mysql.cj.jdbc.Driver
-        druid:
-            # 主库数据源
-            master:
-                url: jdbc:mysql://192.168.110.188:3306/financialdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-                username: root
-                password: 123456
-#                url: jdbc:mysql://8.137.10.192:3306/sys_config?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
-#                username: root
-#                password: shms#123~
-            # 从库数据源
-            slave:
-                # 从数据源开关/默认关闭
-                enabled: false
-                url: 
-                username: 
-                password: 
-            # 初始连接数
-            initialSize: 5
-            # 最小连接池数量
-            minIdle: 10
-            # 最大连接池数量
-            maxActive: 20
-            # 配置获取连接等待超时的时间
-            maxWait: 60000
-            # 配置连接超时时间
-            connectTimeout: 30000
-            # 配置网络超时时间
-            socketTimeout: 60000
-            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
-            timeBetweenEvictionRunsMillis: 60000
-            # 配置一个连接在池中最小生存的时间,单位是毫秒
-            minEvictableIdleTimeMillis: 300000
-            # 配置一个连接在池中最大生存的时间,单位是毫秒
-            maxEvictableIdleTimeMillis: 900000
-            # 配置检测连接是否有效
-            validationQuery: SELECT 1 FROM DUAL
-            testWhileIdle: true
-            testOnBorrow: false
-            testOnReturn: false
-            webStatFilter: 
-                enabled: true
-            statViewServlet:
-                enabled: true
-                # 设置白名单,不填则允许所有访问
-                allow:
-                url-pattern: /druid/*
-                # 控制台管理用户名和密码
-                login-username: ruoyi
-                login-password: 123456
-            filter:
-                stat:
-                    enabled: true
-                    # 慢SQL记录
-                    log-slow-sql: true
-                    slow-sql-millis: 1000
-                    merge-sql: true
-                wall:
-                    config:
-                        multi-statement-allow: true
\ No newline at end of file
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    driverClassName: com.mysql.cj.jdbc.Driver
+    druid:
+      # 主库数据源
+      master:
+        url: jdbc:mysql://localhost:3306/financialdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        username: root
+        password: 123456
+      #                url: jdbc:mysql://8.137.10.192:3306/sys_config?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
+      #                username: root
+      #                password: shms#123~
+      # 从库数据源
+      slave:
+        # 从数据源开关/默认关闭
+        enabled: false
+        url:
+        username:
+        password:
+      # 初始连接数
+      initialSize: 5
+      # 最小连接池数量
+      minIdle: 10
+      # 最大连接池数量
+      maxActive: 20
+      # 配置获取连接等待超时的时间
+      maxWait: 60000
+      # 配置连接超时时间
+      connectTimeout: 30000
+      # 配置网络超时时间
+      socketTimeout: 60000
+      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+      timeBetweenEvictionRunsMillis: 60000
+      # 配置一个连接在池中最小生存的时间,单位是毫秒
+      minEvictableIdleTimeMillis: 300000
+      # 配置一个连接在池中最大生存的时间,单位是毫秒
+      maxEvictableIdleTimeMillis: 900000
+      # 配置检测连接是否有效
+      validationQuery: SELECT 1 FROM DUAL
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 设置白名单,不填则允许所有访问
+        allow:
+        url-pattern: /druid/*
+        # 控制台管理用户名和密码
+        login-username: ruoyi
+        login-password: 123456
+      filter:
+        stat:
+          enabled: true
+          # 慢SQL记录
+          log-slow-sql: true
+          slow-sql-millis: 1000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbBasicDataCategoryController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbBasicDataCategoryController.java
index ff94666..9af6b8c 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbBasicDataCategoryController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbBasicDataCategoryController.java
@@ -17,7 +17,13 @@
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * <p>
@@ -38,6 +44,7 @@
 
     /**
      * 添加
+     *
      * @param dto 基础数据分类传输对象
      * @return R<Void>
      */
@@ -58,6 +65,7 @@
 
     /**
      * 编辑
+     *
      * @param dto 基础数据分类更新传输对象
      * @return R<Void>
      */
@@ -78,12 +86,13 @@
 
     /**
      * 删除
+     *
      * @param id id
      * @return R<Void>
      */
     @DeleteMapping("/delete")
     @ApiOperation("删除")
-    public R<Void> delete(@RequestParam(value = "id") Integer id){
+    public R<Void> delete(@RequestParam(value = "id") Long id) {
         try {
             tbBasicDataCategoryService.removeById(id);
         } catch (Exception e) {
@@ -98,15 +107,17 @@
 
     /**
      * 根据id获取详情
+     *
      * @param id id
      * @return R<BasicDataCategoryVO>
      */
     @GetMapping("/get-details")
     @ApiOperation("根据id获取详情")
-    public R<BasicDataCategoryVO> getDetails(@RequestParam(value = "id") Integer id){
+    public R<BasicDataCategoryVO> getDetails(@RequestParam(value = "id") Long id) {
         try {
             TbBasicDataCategory basicDataCategory = tbBasicDataCategoryService.getById(id);
-            BasicDataCategoryVO vo = BeanUtils.copyBean(basicDataCategory, BasicDataCategoryVO.class);
+            BasicDataCategoryVO vo = BeanUtils.copyBean(basicDataCategory,
+                    BasicDataCategoryVO.class);
             return R.ok(vo);
         } catch (Exception e) {
             if (e instanceof ServiceException) {
@@ -119,6 +130,7 @@
 
     /**
      * 隐藏显示操作
+     *
      * @param dto 显示隐藏操作数据传输对象
      * @return R<Void>
      */
@@ -139,12 +151,14 @@
 
     /**
      * 分页条件查询
+     *
      * @param query 基础数据分类条件查询对象
-     * @return R<PageDTO<BasicDataCategoryVO>>
+     * @return R<PageDTO < BasicDataCategoryVO>>
      */
     @PostMapping("/page")
     @ApiOperation("分页条件查询")
-    public R<PageDTO<BasicDataCategoryVO>> page(@Validated @RequestBody BasicDataCategoryQuery query) {
+    public R<PageDTO<BasicDataCategoryVO>> page(
+            @Validated @RequestBody BasicDataCategoryQuery query) {
         try {
             return R.ok(tbBasicDataCategoryService.queryPage(query));
         } catch (Exception e) {
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbBasicDataConfigController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbBasicDataConfigController.java
index a095d17..7ef5bc1 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbBasicDataConfigController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbBasicDataConfigController.java
@@ -11,19 +11,26 @@
 import com.ruoyi.system.dto.ShowHideDTO;
 import com.ruoyi.system.dto.update.BasicDataConfigUpdateDTO;
 import com.ruoyi.system.query.BasicDataConfigQuery;
+import com.ruoyi.system.query.FieldQuery;
 import com.ruoyi.system.service.TbBasicDataCategoryService;
 import com.ruoyi.system.service.TbBasicDataConfigService;
+import com.ruoyi.system.service.TbFieldService;
 import com.ruoyi.system.vo.BasicDataCategoryVO;
 import com.ruoyi.system.vo.BasicDataConfigDetailVO;
 import com.ruoyi.system.vo.BasicDataConfigVO;
+import com.ruoyi.system.vo.FieldVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import java.util.List;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * <p>
@@ -42,16 +49,19 @@
 
     private final TbBasicDataConfigService tbBasicDataConfigService;
     private final TbBasicDataCategoryService tbBasicDataCategoryService;
+    private final TbFieldService tbFieldService;
 
     /**
      * 获取分类列表
-     * @return R<List<BasicDataCategoryVO>>
+     *
+     * @return R<List < BasicDataCategoryVO>>
      */
     @GetMapping("/categories")
     @ApiOperation(value = "获取分类列表")
     public R<List<BasicDataCategoryVO>> queryBasicDataCategories() {
         try {
-            List<TbBasicDataCategory> list = tbBasicDataCategoryService.lambdaQuery().eq(TbBasicDataCategory::getStatus, ShowStatusEnum.SHOW).list();
+            List<TbBasicDataCategory> list = tbBasicDataCategoryService.lambdaQuery()
+                    .eq(TbBasicDataCategory::getStatus, ShowStatusEnum.SHOW).list();
             return R.ok(BeanUtils.copyList(list, BasicDataCategoryVO.class));
         } catch (Exception e) {
             if (e instanceof ServiceException) {
@@ -63,7 +73,45 @@
     }
 
     /**
+     * 分页条件查询字段
+     *
+     * @param query 字段条件查询对象
+     * @return R<PageDTO < FieldVO>>
+     */
+    @PostMapping("/page-fields")
+    @ApiOperation(value = "分页条件查询字段", notes = "基础数据配置、大屏数据配置")
+    public R<PageDTO<FieldVO>> page(@Validated @RequestBody FieldQuery query) {
+        try {
+            return R.ok(tbFieldService.queryShowPage(query));
+        } catch (Exception e) {
+            if (e instanceof ServiceException) {
+                return R.fail(e.getMessage());
+            }
+            log.error("分页条件查询异常", e);
+            return R.fail();
+        }
+    }
+
+    /**
+     * 分页条件查询字段
+     *
+     * @param query 字段条件查询对象
+     * @return R<PageDTO < FieldVO>>
+     */
+    @GetMapping("/list-fields")
+    @ApiOperation(value = "查询状态为展示中字段列表", notes = "基础数据配置、大屏数据配置")
+    public R<List<FieldVO>> listFields() {
+        try {
+            return R.ok(tbFieldService.listFields());
+        } catch (Exception e) {
+            log.error("查询状态为展示中字段列表异常", e);
+            return R.fail();
+        }
+    }
+
+    /**
      * 添加
+     *
      * @param dto 基础数据配置数据传输对象
      * @return R<Void>
      */
@@ -84,6 +132,7 @@
 
     /**
      * 编辑
+     *
      * @param dto 基础数据配置数据传输对象
      * @return R<Void>
      */
@@ -104,12 +153,13 @@
 
     /**
      * 获取详情
+     *
      * @param id id
      * @return R<BasicDataConfigDetailVO>
      */
     @GetMapping("/get-details")
     @ApiOperation("获取详情")
-    public R<BasicDataConfigDetailVO> getDetails(Integer id) {
+    public R<BasicDataConfigDetailVO> getDetails(Long id) {
         try {
             BasicDataConfigDetailVO details = tbBasicDataConfigService.getDetails(id);
             return R.ok(details);
@@ -124,12 +174,13 @@
 
     /**
      * 删除
+     *
      * @param id id
      * @return R<Void>
      */
     @DeleteMapping("/delete")
     @ApiOperation("删除")
-    public R<Void> delete(Integer id) {
+    public R<Void> delete(Long id) {
         try {
             tbBasicDataConfigService.delete(id);
         } catch (Exception e) {
@@ -144,6 +195,7 @@
 
     /**
      * 隐藏显示操作
+     *
      * @param dto 显示隐藏操作数据传输对象
      * @return R<Void>
      */
@@ -164,14 +216,16 @@
 
     /**
      * 分页条件查询
+     *
      * @param query 基础数据条件查询对象
-     * @return R<PageDTO<BasicDataConfigVO>>
+     * @return R<PageDTO < BasicDataConfigVO>>
      */
     @PostMapping("/page")
     @ApiOperation("分页条件查询")
     public R<PageDTO<BasicDataConfigVO>> page(@Validated @RequestBody BasicDataConfigQuery query) {
         try {
-            PageDTO<BasicDataConfigVO> basicDataConfigVOPageDTO = tbBasicDataConfigService.queryPage(query);
+            PageDTO<BasicDataConfigVO> basicDataConfigVOPageDTO = tbBasicDataConfigService.queryPage(
+                    query);
             return R.ok(basicDataConfigVOPageDTO);
         } catch (Exception e) {
             if (e instanceof ServiceException) {
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbFieldController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbFieldController.java
index 69f100f..b208bad 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbFieldController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbFieldController.java
@@ -130,9 +130,9 @@
      */
     @PostMapping("/edit")
     @ApiOperation("编辑字段")
-    public R<Void> add(@RequestBody @Validated FieldUpdateDTO dto) {
+    public R<Void> editField(@RequestBody @Validated FieldUpdateDTO dto) {
         try {
-            tbFieldService.update(dto);
+            tbFieldService.editField(dto);
         } catch (Exception e) {
             if (e instanceof ServiceException) {
                 return R.fail(e.getMessage());
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
index fa44b77..74cfc49 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
@@ -1,49 +1,59 @@
 package com.ruoyi.web.controller.system;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
 
-import com.ruoyi.common.basic.PageInfo;
-import com.ruoyi.common.core.domain.entity.SysMenu;
-import com.ruoyi.system.dto.SysRoleDTO;
-import com.ruoyi.system.query.SysRoleQuery;
-import com.ruoyi.system.service.ISysMenuService;
-import com.ruoyi.system.vo.RoleInfoVO;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
 import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.basic.PageDTO;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.SysMenu;
 import com.ruoyi.common.core.domain.entity.SysRole;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.BeanUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.framework.web.service.SysPermissionService;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.domain.SysUserRole;
+import com.ruoyi.system.dto.SysRoleDTO;
+import com.ruoyi.system.query.SysRoleQuery;
 import com.ruoyi.system.service.ISysDeptService;
+import com.ruoyi.system.service.ISysMenuService;
 import com.ruoyi.system.service.ISysRoleService;
 import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.system.vo.RoleInfoVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * 角色信息
- * 
+ *
  * @author ruoyi
  */
 @Api(tags = "角色信息")
 @RestController
 @RequestMapping("/system/role")
-public class SysRoleController extends BaseController
-{
+public class SysRoleController extends BaseController {
+
     @Autowired
     private ISysRoleService roleService;
 
@@ -64,32 +74,30 @@
     // @PreAuthorize("@ss.hasPermi('system:role:list')")
     @ApiOperation(value = "角色列表")
     @PostMapping("/list")
-    public AjaxResult list(@RequestBody SysRoleQuery query)
-    {
-        PageInfo<SysRole> list = roleService.selectList(query);
-        return AjaxResult.success(list);
+    public R<PageDTO<RoleInfoVO>> list(@RequestBody SysRoleQuery query) {
+        PageDTO<RoleInfoVO> sysRolePageDTO = roleService.selectList(query);
+        return R.ok(sysRolePageDTO);
     }
 
     @ApiOperation(value = "角色列表不分页")
     @PostMapping("/listNotPage")
-    public AjaxResult list()
-    {
+    public R<List<RoleInfoVO>> list() {
         List<SysRole> list = roleService.selectRoleList(new SysRole());
-        return AjaxResult.success(list);
+        List<RoleInfoVO> vos = BeanUtils.copyList(list, RoleInfoVO.class);
+        return R.ok(vos);
     }
 
-    @ApiOperation(value = "角色数量统计")
+    //    @ApiOperation(value = "角色数量统计")
     @PostMapping("/roleCount")
-    public AjaxResult roleCount()
-    {
+    public AjaxResult roleCount() {
         int all = roleService.selectCount(null);
         int normal = roleService.selectCount(0);
         int stop = roleService.selectCount(1);
 
-        Map<String,Integer> map = new HashMap<>();
-        map.put("all",all);
-        map.put("normal",normal);
-        map.put("stop",stop);
+        Map<String, Integer> map = new HashMap<>();
+        map.put("all", all);
+        map.put("normal", normal);
+        map.put("stop", stop);
         return AjaxResult.success(map);
     }
 
@@ -108,8 +116,7 @@
      */
     // @PreAuthorize("@ss.hasPermi('system:role:query')")
     @GetMapping(value = "/{roleId}")
-    public AjaxResult getInfo(@PathVariable Long roleId)
-    {
+    public AjaxResult getInfo(@PathVariable Long roleId) {
         roleService.checkRoleDataScope(roleId);
         return AjaxResult.success(roleService.selectRoleById(roleId));
     }
@@ -117,8 +124,7 @@
 
     @ApiOperation("角色详情")
     @GetMapping("/roleInfo")
-    public AjaxResult roleInfo(@RequestParam Long roleId)
-    {
+    public R<RoleInfoVO> roleInfo(@RequestParam Long roleId) {
         SysRole role = roleService.selectRoleById(roleId);
         RoleInfoVO roleInfoVo = new RoleInfoVO();
         roleInfoVo.setRoleId(role.getRoleId());
@@ -126,8 +132,8 @@
 
         // 获取当前角色的菜单列表
         List<SysMenu> menus = menuService.selectListByRoleId(roleId);
-        if(menus.size()==0){
-            return AjaxResult.success(new ArrayList<>());
+        if (menus.size() == 0) {
+            return R.ok(roleInfoVo);
         }
         List<Long> menusId = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList());
 
@@ -135,14 +141,13 @@
         List<SysMenu> levelMenus = roleService.getMenuLevelList(menusId);
 
         roleInfoVo.setMenus(menusId);
-        return AjaxResult.success(roleInfoVo);
+        return R.ok(roleInfoVo);
     }
 
 
     @ApiOperation("用户获取权限菜单")
     @GetMapping("/roleInfoFromUserId")
-    public AjaxResult roleInfoFromUserId(@RequestParam Long userId)
-    {
+    public AjaxResult roleInfoFromUserId(@RequestParam Long userId) {
         return AjaxResult.success(roleService.roleInfoFromUserId(userId));
     }
 
@@ -154,10 +159,9 @@
     @ApiOperation(value = "新增角色")
     @Log(title = "角色信息-新增角色", businessType = BusinessType.INSERT)
     @PostMapping("/add")
-    public AjaxResult add(@Validated @RequestBody SysRoleDTO dto)
-    {
-        Boolean flag= roleService.isExit(dto.getRoleId(),dto.getRoleName());
-        if(flag){
+    public AjaxResult add(@Validated @RequestBody SysRoleDTO dto) {
+        Boolean flag = roleService.isExit(dto.getRoleId(), dto.getRoleName());
+        if (flag) {
             return error("新增角色'" + dto.getRoleName() + "'失败,角色名称已存在");
         }
         roleService.saveRole(dto);
@@ -172,20 +176,18 @@
     @ApiOperation(value = "编辑角色")
     @Log(title = "角色信息-编辑角色", businessType = BusinessType.UPDATE)
     @PutMapping
-    public AjaxResult edit(@Validated @RequestBody SysRoleDTO dto)
-    {
-        Boolean flag= roleService.isExit(dto.getRoleId(),dto.getRoleName());
-        if (flag){
+    public AjaxResult edit(@Validated @RequestBody SysRoleDTO dto) {
+        Boolean flag = roleService.isExit(dto.getRoleId(), dto.getRoleName());
+        if (flag) {
             return error("修改角色'" + dto.getRoleName() + "'失败,角色名称已存在");
         }
-        if (roleService.editRole(dto) > 0)
-        {
+        if (roleService.editRole(dto) > 0) {
             // 更新缓存用户权限
             LoginUser loginUser = getLoginUser();
-            if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin())
-            {
+            if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin()) {
                 loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser()));
-                loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName()));
+                loginUser.setUser(
+                        userService.selectUserByUserName(loginUser.getUser().getUserName()));
                 tokenService.setLoginUser(loginUser);
             }
             return AjaxResult.success();
@@ -199,8 +201,7 @@
     // @PreAuthorize("@ss.hasPermi('system:role:edit')")
     @Log(title = "角色管理", businessType = BusinessType.UPDATE)
     @PutMapping("/dataScope")
-    public AjaxResult dataScope(@RequestBody SysRole role)
-    {
+    public AjaxResult dataScope(@RequestBody SysRole role) {
         roleService.checkRoleAllowed(role);
         roleService.checkRoleDataScope(role.getRoleId());
         return AjaxResult.success(roleService.authDataScope(role));
@@ -210,11 +211,10 @@
      * 状态修改
      */
     // @PreAuthorize("@ss.hasPermi('system:role:edit')")
-    @ApiOperation(value = "状态修改")
+//    @ApiOperation(value = "状态修改")
     @Log(title = "角色信息-角色状态修改", businessType = BusinessType.UPDATE)
     @PutMapping("/changeStatus")
-    public AjaxResult changeStatus(@RequestBody SysRole role)
-    {
+    public AjaxResult changeStatus(@RequestBody SysRole role) {
         role.setUpdateBy(getUsername());
         roleService.updateStatus(role);
         return AjaxResult.success();
@@ -227,8 +227,7 @@
     @ApiOperation(value = "删除角色")
     @Log(title = "角色信息-角色删除角色", businessType = BusinessType.DELETE)
     @DeleteMapping("/deleteById/{ids}")
-    public AjaxResult remove(@PathVariable String ids)
-    {
+    public AjaxResult remove(@PathVariable String ids) {
         String[] split = ids.split(",");
         List<Long> id = new ArrayList<>();
         for (String s : split) {
@@ -242,8 +241,7 @@
      */
     // @PreAuthorize("@ss.hasPermi('system:role:query')")
     @GetMapping("/optionselect")
-    public AjaxResult optionselect()
-    {
+    public AjaxResult optionselect() {
         return AjaxResult.success(roleService.selectRoleAll());
     }
 
@@ -252,8 +250,7 @@
      */
     // @PreAuthorize("@ss.hasPermi('system:role:list')")
     @GetMapping("/authUser/allocatedList")
-    public TableDataInfo allocatedList(SysUser user)
-    {
+    public TableDataInfo allocatedList(SysUser user) {
 //        startPage();
         List<SysUser> list = userService.selectAllocatedList(user);
         return getDataTable(list);
@@ -264,8 +261,7 @@
      */
     // @PreAuthorize("@ss.hasPermi('system:role:list')")
     @GetMapping("/authUser/unallocatedList")
-    public TableDataInfo unallocatedList(SysUser user)
-    {
+    public TableDataInfo unallocatedList(SysUser user) {
 //        startPage();
         List<SysUser> list = userService.selectUnallocatedList(user);
         return getDataTable(list);
@@ -277,8 +273,7 @@
     // @PreAuthorize("@ss.hasPermi('system:role:edit')")
     @Log(title = "角色管理", businessType = BusinessType.GRANT)
     @PutMapping("/authUser/cancel")
-    public AjaxResult cancelAuthUser(@RequestBody SysUserRole userRole)
-    {
+    public AjaxResult cancelAuthUser(@RequestBody SysUserRole userRole) {
         return AjaxResult.success(roleService.deleteAuthUser(userRole));
     }
 
@@ -288,8 +283,7 @@
     // @PreAuthorize("@ss.hasPermi('system:role:edit')")
     @Log(title = "角色管理", businessType = BusinessType.GRANT)
     @PutMapping("/authUser/cancelAll")
-    public AjaxResult cancelAuthUserAll(Long roleId, Long[] userIds)
-    {
+    public AjaxResult cancelAuthUserAll(Long roleId, Long[] userIds) {
         return AjaxResult.success(roleService.deleteAuthUsers(roleId, userIds));
     }
 
@@ -299,8 +293,7 @@
     // @PreAuthorize("@ss.hasPermi('system:role:edit')")
     @Log(title = "角色管理", businessType = BusinessType.GRANT)
     @PutMapping("/authUser/selectAll")
-    public AjaxResult selectAuthUserAll(Long roleId, Long[] userIds)
-    {
+    public AjaxResult selectAuthUserAll(Long roleId, Long[] userIds) {
         roleService.checkRoleDataScope(roleId);
         return AjaxResult.success(roleService.insertAuthUsers(roleId, userIds));
     }
@@ -310,8 +303,7 @@
      */
     // @PreAuthorize("@ss.hasPermi('system:role:query')")
     @GetMapping(value = "/deptTree/{roleId}")
-    public AjaxResult deptTree(@PathVariable("roleId") Long roleId)
-    {
+    public AjaxResult deptTree(@PathVariable("roleId") Long roleId) {
         AjaxResult ajax = AjaxResult.success();
         ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId));
         ajax.put("depts", deptService.selectDeptTreeList(new SysDept()));
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
index 6a324bf..5ba0987 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -11,7 +11,10 @@
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.system.domain.SysUserRole;
+import com.ruoyi.system.dto.SysUserDTO;
 import com.ruoyi.system.dto.SysUserUpdateStatusDTO;
+import com.ruoyi.system.mapper.SysUserRoleMapper;
 import com.ruoyi.system.query.SysUserQuery;
 import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysRoleService;
@@ -19,27 +22,35 @@
 import com.ruoyi.system.vo.SysUserVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * 用户信息
- * 
+ *
  * @author ruoyi
  */
 @Api(tags = "用户信息")
 @RestController
 @RequestMapping("/system/user")
-public class SysUserController extends BaseController
-{
+public class SysUserController extends BaseController {
+
     @Autowired
     private ISysUserService userService;
 
@@ -51,21 +62,22 @@
     @Autowired
     private TokenService tokenService;
 
+    @Autowired
+    private SysUserRoleMapper userRoleMapper;
+
     /**
      * 获取用户列表
      */
     @ApiOperation(value = "获取用户列表")
     @PostMapping("/list")
-    public AjaxResult list(@RequestBody SysUserQuery query)
-    {
+    public AjaxResult list(@RequestBody SysUserQuery query) {
         PageInfo<SysUserVO> list = userService.pageList(query);
         return AjaxResult.success(list);
     }
 
     @ApiOperation(value = "获取用户列表-不分页")
     @PostMapping("/listNotPage")
-    public AjaxResult listNotPage()
-    {
+    public AjaxResult listNotPage() {
         List<SysUser> list = userService.queryList();
         return AjaxResult.success(list);
     }
@@ -186,11 +198,10 @@
      */
     @ApiOperation(value = "获取用户详情")
     @GetMapping("/getDetail")
-    public AjaxResult getDetail(@RequestParam Long userId)
-    {
+    public AjaxResult getDetail(@RequestParam Long userId) {
         SysUser sysUser = userService.selectUserById(userId);
         SysUserVO sysUserVO = new SysUserVO();
-        BeanUtils.copyProperties(sysUser,sysUserVO);
+        BeanUtils.copyProperties(sysUser, sysUserVO);
 
         return AjaxResult.success(sysUser);
     }
@@ -201,17 +212,16 @@
      */
     @ApiOperation(value = "获取用户数量统计")
     @PostMapping("/getUserCount")
-    public AjaxResult getUserCount()
-    {
-        Map<String,Integer> map = new HashMap<>();
+    public AjaxResult getUserCount() {
+        Map<String, Integer> map = new HashMap<>();
 
         Integer userCountSum = userService.selectCount(null);
         Integer normalCount = userService.selectCount(0);// 正常
         Integer stopCount = userService.selectCount(1);// 停用
 
-        map.put("all",userCountSum);
-        map.put("normal",normalCount);
-        map.put("stop",stopCount);
+        map.put("all", userCountSum);
+        map.put("normal", normalCount);
+        map.put("stop", stopCount);
 
         return AjaxResult.success(map);
     }
@@ -220,8 +230,7 @@
      * 移除黑名单
      */
     @GetMapping("/removeBlackList")
-    public AjaxResult removeBlackList(@RequestParam String ids)
-    {
+    public AjaxResult removeBlackList(@RequestParam String ids) {
         String[] split = ids.split(",");
         List<Long> id = new ArrayList<>();
         for (String s : split) {
@@ -230,7 +239,6 @@
         userService.updateUserIfBlack(id);
         return AjaxResult.success();
     }
-
 
 //    @Log(title = "用户管理", businessType = BusinessType.EXPORT)
 ////    // @PreAuthorize("@ss.hasPermi('system:user:export')")
@@ -269,20 +277,22 @@
     @ApiOperation(value = "新增用户管理")
     @Log(title = "用户信息-新增用户", businessType = BusinessType.INSERT)
     @PostMapping("/add")
-    public AjaxResult add(@Validated @RequestBody SysUser user)
-    {
-        user.setUserName(user.getPhoneNumber());
-        if (!userService.checkUserNameUnique(user))
-        {
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult add(@Validated @RequestBody SysUserDTO dto) {
+        SysUser user = com.ruoyi.common.utils.BeanUtils.copyBean(dto, SysUser.class);
+        if (!userService.checkUserNameUnique(user)) {
             return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
-        }
-        else if (StringUtils.isNotEmpty(user.getPhoneNumber()) && !userService.checkPhoneUnique(user))
-        {
+        } else if (StringUtils.isNotEmpty(user.getPhoneNumber()) && !userService.checkPhoneUnique(
+                user)) {
             return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
         }
         user.setCreateBy(getUsername());
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
         userService.insertUser(user);
+        SysUserRole sysUserRole = new SysUserRole();
+        sysUserRole.setUserId(user.getUserId());
+        sysUserRole.setRoleId(dto.getRoleId());
+        userRoleMapper.insertUserRole(sysUserRole);
         return AjaxResult.success();
     }
 
@@ -293,17 +303,14 @@
     @ApiOperation(value = "修改用户管理")
     @Log(title = "用户信息-修改用户", businessType = BusinessType.UPDATE)
     @PostMapping("/edit")
-    public AjaxResult edit(@Validated @RequestBody SysUser user)
-    {
+    public AjaxResult edit(@Validated @RequestBody SysUser user) {
         user.setUserName(user.getPhoneNumber());
 //        userService.checkUserAllowed(user);
 //        userService.checkUserDataScope(user.getUserId());
-        if (!userService.checkUserNameUnique(user))
-        {
+        if (!userService.checkUserNameUnique(user)) {
             return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在");
-        }
-        else if (StringUtils.isNotEmpty(user.getPhoneNumber()) && !userService.checkPhoneUnique(user))
-        {
+        } else if (StringUtils.isNotEmpty(user.getPhoneNumber()) && !userService.checkPhoneUnique(
+                user)) {
             return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
         }
 
@@ -319,15 +326,13 @@
     @ApiOperation(value = "批量删除用户")
     @Log(title = "用户信息-批量删除用户", businessType = BusinessType.DELETE)
     @DeleteMapping("/deleteById/{ids}")
-    public AjaxResult remove(@PathVariable String ids)
-    {
+    public AjaxResult remove(@PathVariable String ids) {
         String[] split = ids.split(",");
         List<Long> userIds = new ArrayList<>();
         for (String s : split) {
             userIds.add(Long.valueOf(s));
         }
-        if (userIds.contains(getUserId()))
-        {
+        if (userIds.contains(getUserId())) {
             return error("当前用户不能删除");
         }
         return AjaxResult.success(userService.deleteUserByIds(userIds));
@@ -340,8 +345,7 @@
     @ApiOperation(value = "重置密码")
     @Log(title = "用户信息-重置密码", businessType = BusinessType.UPDATE)
     @PostMapping("/resetPwd")
-    public AjaxResult resetPwd(@RequestBody SysUser user)
-    {
+    public AjaxResult resetPwd(@RequestBody SysUser user) {
         userService.checkUserAllowed(user);
 //        userService.checkUserDataScope(user.getUserId());
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
@@ -355,8 +359,7 @@
     @ApiOperation(value = "状态修改")
     @Log(title = "用户信息-状态修改", businessType = BusinessType.UPDATE)
     @PutMapping("/changeStatus")
-    public AjaxResult changeStatus(@RequestBody SysUserUpdateStatusDTO dto)
-    {
+    public AjaxResult changeStatus(@RequestBody SysUserUpdateStatusDTO dto) {
         SysUser user = new SysUser();
         user.setUserId(dto.getUserId());
         user.setStatus(String.valueOf(dto.getStatus()));
@@ -370,13 +373,13 @@
      */
     // @PreAuthorize("@ss.hasPermi('system:user:query')")
     @GetMapping("/authRole/{userId}")
-    public AjaxResult authRole(@PathVariable("userId") Long userId)
-    {
+    public AjaxResult authRole(@PathVariable("userId") Long userId) {
         AjaxResult ajax = AjaxResult.success();
         SysUser user = userService.selectUserById(userId);
         List<SysRole> roles = roleService.selectRolesByUserId(userId);
         ajax.put("user", user);
-        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
+        ajax.put("roles", SysUser.isAdmin(userId) ? roles
+                : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
         return ajax;
     }
 
@@ -386,8 +389,7 @@
     // @PreAuthorize("@ss.hasPermi('system:user:edit')")
     @Log(title = "用户管理", businessType = BusinessType.GRANT)
     @PutMapping("/authRole")
-    public AjaxResult insertAuthRole(Long userId, Long[] roleIds)
-    {
+    public AjaxResult insertAuthRole(Long userId, Long[] roleIds) {
         userService.checkUserDataScope(userId);
         userService.insertUserAuth(userId, roleIds);
         return AjaxResult.success();
@@ -398,8 +400,7 @@
      */
     // @PreAuthorize("@ss.hasPermi('system:user:list')")
     @GetMapping("/deptTree")
-    public AjaxResult deptTree(SysDept dept)
-    {
+    public AjaxResult deptTree(SysDept dept) {
         return AjaxResult.success(deptService.selectDeptTreeList(dept));
     }
 }
diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..415812d
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/application-dev.yml
@@ -0,0 +1,239 @@
+# 项目相关配置
+ruoyi:
+  # 名称
+  name: mitao
+  # 版本
+  version: 3.8.6
+  # 版权年份
+  copyrightYear: 2023
+  # 实例演示开关
+  demoEnabled: true
+  # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
+  profile: D:/ruoyi/uploadPath
+  # 获取ip地址开关
+  addressEnabled: true
+  # 验证码类型 math 数字计算 char 字符验证
+  captchaType: math
+
+# 开发环境配置
+server:
+  # 服务器的HTTP端口,默认为8080
+  port: 8083
+  servlet:
+    # 应用的访问路径
+    context-path: /
+  tomcat:
+    # tomcat的URI编码
+    uri-encoding: UTF-8
+    # 连接数满后的排队数,默认为100
+    accept-count: 1000
+    threads:
+      # tomcat最大线程数,默认为200
+      max: 800
+      # Tomcat启动初始化的线程数,默认值10
+      min-spare: 100
+
+# 日志配置
+logging:
+  level:
+    com.ruoyi: debug
+    org.springframework: warn
+
+# 用户配置
+user:
+  password:
+    # 密码最大错误次数
+    maxRetryCount: 5
+    # 密码锁定时间(默认10分钟)
+    lockTime: 10
+
+# Spring配置
+spring:
+  main:
+    allow-bean-definition-overriding: true
+  # 资源信息
+  messages:
+    # 国际化资源文件路径
+    basename: i18n/messages
+  config:
+    activate:
+      on-profile:
+        - dev
+  # 文件上传
+  servlet:
+    multipart:
+      # 单个文件大小
+      max-file-size: 500MB
+      # 设置总上传的文件大小
+      max-request-size: 2000MB
+  # 服务模块
+  devtools:
+    restart:
+      # 热部署开关
+      enabled: true
+  # redis 配置
+  redis:
+    # 地址
+    host: 127.0.0.1
+    # 端口,默认为6379
+    port: 6379
+    # 数据库索引
+    database: 0
+    # 密码
+    password: 123456
+    # 连接超时时间
+    timeout: 10s
+    lettuce:
+      pool:
+        # 连接池中的最小空闲连接
+        min-idle: 0
+        # 连接池中的最大空闲连接
+        max-idle: 8
+        # 连接池的最大数据库连接数
+        max-active: 8
+        # #连接池最大阻塞等待时间(使用负值表示没有限制)
+        max-wait: -1ms
+  jackson:
+    default-property-inclusion: non_null
+    deserialization:
+      read-unknown-enum-values-as-null: true
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    driverClassName: com.mysql.cj.jdbc.Driver
+    druid:
+      # 主库数据源
+      master:
+        url: jdbc:mysql://192.168.110.188:3306/financialdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        username: root
+        password: 123456
+      #                url: jdbc:mysql://8.137.10.192:3306/sys_config?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
+      #                username: root
+      #                password: shms#123~
+      # 从库数据源
+      slave:
+        # 从数据源开关/默认关闭
+        enabled: false
+        url:
+        username:
+        password:
+      # 初始连接数
+      initialSize: 5
+      # 最小连接池数量
+      minIdle: 10
+      # 最大连接池数量
+      maxActive: 20
+      # 配置获取连接等待超时的时间
+      maxWait: 60000
+      # 配置连接超时时间
+      connectTimeout: 30000
+      # 配置网络超时时间
+      socketTimeout: 60000
+      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+      timeBetweenEvictionRunsMillis: 60000
+      # 配置一个连接在池中最小生存的时间,单位是毫秒
+      minEvictableIdleTimeMillis: 300000
+      # 配置一个连接在池中最大生存的时间,单位是毫秒
+      maxEvictableIdleTimeMillis: 900000
+      # 配置检测连接是否有效
+      validationQuery: SELECT 1 FROM DUAL
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 设置白名单,不填则允许所有访问
+        allow:
+        url-pattern: /druid/*
+        # 控制台管理用户名和密码
+        login-username: ruoyi
+        login-password: 123456
+      filter:
+        stat:
+          enabled: true
+          # 慢SQL记录
+          log-slow-sql: true
+          slow-sql-millis: 1000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+# token配置
+token:
+  # 令牌自定义标识
+  header: Authorization
+  # 令牌密钥
+  secret: abcdefghijklmnopqrstuvwxyz
+  # 令牌有效期(默认30分钟)
+  expireTime: 120
+
+# MyBatis配置
+#mybatis:
+#  # 搜索指定包别名
+#  typeAliasesPackage: com.ruoyi.**.domain
+#  # 配置mapper的扫描,找到所有的mapper.xml映射文件
+#  mapperLocations: classpath*:mapper/**/*Mapper.xml
+#  # 加载全局的配置文件
+#  configLocation: classpath:mybatis/mybatis-config.xml
+
+# PageHelper分页插件
+#pagehelper:
+#  helperDialect: mysql
+#  supportMethodsArguments: true
+#  params: count=countSql
+
+mybatis-plus:
+  # 此处在多数据源中生效
+  #  config-location: classpath:/mybatis-config.xml
+  configuration:
+    map-underscore-to-camel-case: true
+    default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    cache-enabled: true
+    local-cache-scope: statement
+  global-config:
+    banner: false
+    db-config:
+      logic-not-delete-value: 0
+      logic-delete-value: 1
+      logic-delete-field: del_flag
+  type-aliases-package: com.ruoyi.**.domain,com.ruoyi.**.vo
+  # 指定Mapper文件位置
+  mapper-locations: classpath*:mapper/**/*.xml
+# Swagger配置
+swagger:
+  # 是否开启swagger
+  enabled: true
+  # 请求前缀
+  pathMapping: /
+
+# 防止XSS攻击
+xss:
+  # 过滤开关
+  enabled: true
+  # 排除链接(多个用逗号分隔)
+  excludes: /system/notice
+  # 匹配链接
+  urlPatterns: /system/*,/monitor/*,/tool/*
+# file upload
+file:
+  upload:
+    location: /file/
+    qrLocation: /file/qrCode/
+    accessPath: /file/
+    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF
+wx:
+  config:
+    appId: wxc3985a05da7d86dc
+    secret: 5cca42633c25439613b328c08ef20cc9
+#OSS及短信配置
+code:
+  config:
+    templateCodeTest: "SMS_154950909"
+    signNameTest: "阿里云短信测试"
+    accessKeyId: LTAI5tAdba8HtT1C6UqtSxBt
+    accessKeySecret: 0SRb6XGkciQDPWn2rYqbJtq2qRMDY8
+    signName: "四川金达通信工程"
+    templateCode: "SMS_293985284"
+
diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml
new file mode 100644
index 0000000..6f780c2
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/application-prod.yml
@@ -0,0 +1,238 @@
+# 项目相关配置
+ruoyi:
+  # 名称
+  name: mitao
+  # 版本
+  version: 3.8.6
+  # 版权年份
+  copyrightYear: 2023
+  # 实例演示开关
+  demoEnabled: true
+  # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
+  profile: D:/ruoyi/uploadPath
+  # 获取ip地址开关
+  addressEnabled: true
+  # 验证码类型 math 数字计算 char 字符验证
+  captchaType: math
+
+# 开发环境配置
+server:
+  # 服务器的HTTP端口,默认为8080
+  port: 8081
+  servlet:
+    # 应用的访问路径
+    context-path: /
+  tomcat:
+    # tomcat的URI编码
+    uri-encoding: UTF-8
+    # 连接数满后的排队数,默认为100
+    accept-count: 1000
+    threads:
+      # tomcat最大线程数,默认为200
+      max: 800
+      # Tomcat启动初始化的线程数,默认值10
+      min-spare: 100
+
+# 日志配置
+logging:
+  level:
+    com.ruoyi: debug
+    org.springframework: warn
+
+# 用户配置
+user:
+  password:
+    # 密码最大错误次数
+    maxRetryCount: 5
+    # 密码锁定时间(默认10分钟)
+    lockTime: 10
+
+# Spring配置
+spring:
+  main:
+    allow-bean-definition-overriding: true
+  # 资源信息
+  messages:
+    # 国际化资源文件路径
+    basename: i18n/messages
+  config:
+    activate:
+      on-profile:
+        - prod
+  # 文件上传
+  servlet:
+    multipart:
+      # 单个文件大小
+      max-file-size: 500MB
+      # 设置总上传的文件大小
+      max-request-size: 2000MB
+  # 服务模块
+  devtools:
+    restart:
+      # 热部署开关
+      enabled: true
+  # redis 配置
+  redis:
+    # 地址
+    host: 127.0.0.1
+    # 端口,默认为6379
+    port: 6379
+    # 数据库索引
+    database: 0
+    # 密码
+    password: 123456
+    # 连接超时时间
+    timeout: 10s
+    lettuce:
+      pool:
+        # 连接池中的最小空闲连接
+        min-idle: 0
+        # 连接池中的最大空闲连接
+        max-idle: 8
+        # 连接池的最大数据库连接数
+        max-active: 8
+        # #连接池最大阻塞等待时间(使用负值表示没有限制)
+        max-wait: -1ms
+  jackson:
+    default-property-inclusion: non_null
+    deserialization:
+      read-unknown-enum-values-as-null: true
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    driverClassName: com.mysql.cj.jdbc.Driver
+    druid:
+      # 主库数据源
+      master:
+        url: jdbc:mysql://localhost:3306/financialdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        username: root
+        password: 123456
+      #                url: jdbc:mysql://8.137.10.192:3306/sys_config?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
+      #                username: root
+      #                password: shms#123~
+      # 从库数据源
+      slave:
+        # 从数据源开关/默认关闭
+        enabled: false
+        url:
+        username:
+        password:
+      # 初始连接数
+      initialSize: 5
+      # 最小连接池数量
+      minIdle: 10
+      # 最大连接池数量
+      maxActive: 20
+      # 配置获取连接等待超时的时间
+      maxWait: 60000
+      # 配置连接超时时间
+      connectTimeout: 30000
+      # 配置网络超时时间
+      socketTimeout: 60000
+      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+      timeBetweenEvictionRunsMillis: 60000
+      # 配置一个连接在池中最小生存的时间,单位是毫秒
+      minEvictableIdleTimeMillis: 300000
+      # 配置一个连接在池中最大生存的时间,单位是毫秒
+      maxEvictableIdleTimeMillis: 900000
+      # 配置检测连接是否有效
+      validationQuery: SELECT 1 FROM DUAL
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 设置白名单,不填则允许所有访问
+        allow:
+        url-pattern: /druid/*
+        # 控制台管理用户名和密码
+        login-username: ruoyi
+        login-password: 123456
+      filter:
+        stat:
+          enabled: true
+          # 慢SQL记录
+          log-slow-sql: true
+          slow-sql-millis: 1000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+# token配置
+token:
+  # 令牌自定义标识
+  header: Authorization
+  # 令牌密钥
+  secret: abcdefghijklmnopqrstuvwxyz
+  # 令牌有效期(默认30分钟)
+  expireTime: 120
+
+# MyBatis配置
+#mybatis:
+#  # 搜索指定包别名
+#  typeAliasesPackage: com.ruoyi.**.domain
+#  # 配置mapper的扫描,找到所有的mapper.xml映射文件
+#  mapperLocations: classpath*:mapper/**/*Mapper.xml
+#  # 加载全局的配置文件
+#  configLocation: classpath:mybatis/mybatis-config.xml
+
+# PageHelper分页插件
+#pagehelper:
+#  helperDialect: mysql
+#  supportMethodsArguments: true
+#  params: count=countSql
+
+mybatis-plus:
+  # 此处在多数据源中生效
+  #  config-location: classpath:/mybatis-config.xml
+  configuration:
+    map-underscore-to-camel-case: true
+    default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    cache-enabled: true
+    local-cache-scope: statement
+  global-config:
+    banner: false
+    db-config:
+      logic-not-delete-value: 0
+      logic-delete-value: 1
+      logic-delete-field: del_flag
+  type-aliases-package: com.ruoyi.**.domain,com.ruoyi.**.vo
+  # 指定Mapper文件位置
+  mapper-locations: classpath*:mapper/**/*.xml
+# Swagger配置
+swagger:
+  # 是否开启swagger
+  enabled: true
+  # 请求前缀
+  pathMapping: /
+
+# 防止XSS攻击
+xss:
+  # 过滤开关
+  enabled: true
+  # 排除链接(多个用逗号分隔)
+  excludes: /system/notice
+  # 匹配链接
+  urlPatterns: /system/*,/monitor/*,/tool/*
+# file upload
+file:
+  upload:
+    location: /file/
+    qrLocation: /file/qrCode/
+    accessPath: /file/
+    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF
+wx:
+  config:
+    appId: wxc3985a05da7d86dc
+    secret: 5cca42633c25439613b328c08ef20cc9
+#OSS及短信配置
+code:
+  config:
+    templateCodeTest: "SMS_154950909"
+    signNameTest: "阿里云短信测试"
+    accessKeyId: LTAI5tAdba8HtT1C6UqtSxBt
+    accessKeySecret: 0SRb6XGkciQDPWn2rYqbJtq2qRMDY8
+    signName: "四川金达通信工程"
+    templateCode: "SMS_293985284"
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 821b2c5..9f96606 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -1,175 +1,3 @@
-# 项目相关配置
-ruoyi:
-  # 名称
-  name: mitao
-  # 版本
-  version: 3.8.6
-  # 版权年份
-  copyrightYear: 2023
-  # 实例演示开关
-  demoEnabled: true
-  # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
-  profile: D:/ruoyi/uploadPath
-  # 获取ip地址开关
-  addressEnabled: true
-  # 验证码类型 math 数字计算 char 字符验证
-  captchaType: math
-
-# 开发环境配置
-server:
-  # 服务器的HTTP端口,默认为8080
-  port: 8081
-  servlet:
-    # 应用的访问路径
-    context-path: /
-  tomcat:
-    # tomcat的URI编码
-    uri-encoding: UTF-8
-    # 连接数满后的排队数,默认为100
-    accept-count: 1000
-    threads:
-      # tomcat最大线程数,默认为200
-      max: 800
-      # Tomcat启动初始化的线程数,默认值10
-      min-spare: 100
-
-# 日志配置
-logging:
-  level:
-    com.ruoyi: debug
-    org.springframework: warn
-
-# 用户配置
-user:
-  password:
-    # 密码最大错误次数
-    maxRetryCount: 5
-    # 密码锁定时间(默认10分钟)
-    lockTime: 10
-
-# Spring配置
 spring:
-  main:
-    allow-bean-definition-overriding: true
-  # 资源信息
-  messages:
-    # 国际化资源文件路径
-    basename: i18n/messages
   profiles:
-    active: druid
-  # 文件上传
-  servlet:
-    multipart:
-      # 单个文件大小
-      max-file-size: 500MB
-      # 设置总上传的文件大小
-      max-request-size: 2000MB
-  # 服务模块
-  devtools:
-    restart:
-      # 热部署开关
-      enabled: true
-  # redis 配置
-  redis:
-    # 地址
-    host: 127.0.0.1
-    # 端口,默认为6379
-    port: 6379
-    # 数据库索引
-    database: 0
-    # 密码
-    password: 123456
-    # 连接超时时间
-    timeout: 10s
-    lettuce:
-      pool:
-        # 连接池中的最小空闲连接
-        min-idle: 0
-        # 连接池中的最大空闲连接
-        max-idle: 8
-        # 连接池的最大数据库连接数
-        max-active: 8
-        # #连接池最大阻塞等待时间(使用负值表示没有限制)
-        max-wait: -1ms
-  jackson:
-    default-property-inclusion: non_null
-    deserialization:
-      read-unknown-enum-values-as-null: true
-
-# token配置
-token:
-  # 令牌自定义标识
-  header: Authorization
-  # 令牌密钥
-  secret: abcdefghijklmnopqrstuvwxyz
-  # 令牌有效期(默认30分钟)
-  expireTime: 120
-
-# MyBatis配置
-#mybatis:
-#  # 搜索指定包别名
-#  typeAliasesPackage: com.ruoyi.**.domain
-#  # 配置mapper的扫描,找到所有的mapper.xml映射文件
-#  mapperLocations: classpath*:mapper/**/*Mapper.xml
-#  # 加载全局的配置文件
-#  configLocation: classpath:mybatis/mybatis-config.xml
-
-# PageHelper分页插件
-#pagehelper:
-#  helperDialect: mysql
-#  supportMethodsArguments: true
-#  params: count=countSql
-
-mybatis-plus:
-  # 此处在多数据源中生效
-  #  config-location: classpath:/mybatis-config.xml
-  configuration:
-    map-underscore-to-camel-case: true
-    default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler
-    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
-    cache-enabled: true
-    local-cache-scope: statement
-  global-config:
-    banner: false
-    db-config:
-      logic-not-delete-value: 0
-      logic-delete-value: 1
-      logic-delete-field: del_flag
-  type-aliases-package: com.ruoyi.**.domain,com.ruoyi.**.vo
-  # 指定Mapper文件位置
-  mapper-locations: classpath*:mapper/**/*.xml
-# Swagger配置
-swagger:
-  # 是否开启swagger
-  enabled: true
-  # 请求前缀
-  pathMapping: /
-
-# 防止XSS攻击
-xss:
-  # 过滤开关
-  enabled: true
-  # 排除链接(多个用逗号分隔)
-  excludes: /system/notice
-  # 匹配链接
-  urlPatterns: /system/*,/monitor/*,/tool/*
-# file upload
-file:
-  upload:
-    location: /file/
-    qrLocation: /file/qrCode/
-    accessPath: /file/
-    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF
-wx:
-  config:
-    appId: wxc3985a05da7d86dc
-    secret: 5cca42633c25439613b328c08ef20cc9
-#OSS及短信配置
-code:
-  config:
-    templateCodeTest: "SMS_154950909"
-    signNameTest: "阿里云短信测试"
-    accessKeyId: LTAI5tAdba8HtT1C6UqtSxBt
-    accessKeySecret: 0SRb6XGkciQDPWn2rYqbJtq2qRMDY8
-    signName: "四川金达通信工程"
-    templateCode: "SMS_293985284"
+    active: prod
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseModel.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseModel.java
index bd5ad08..bea9915 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseModel.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseModel.java
@@ -1,13 +1,13 @@
 package com.ruoyi.common.core.domain;
 
-import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.data.annotation.CreatedBy;
-
 import java.io.Serializable;
 import java.util.Date;
+import lombok.Data;
+import org.springframework.data.annotation.CreatedBy;
 
 /**
  * Entity基类
@@ -15,33 +15,46 @@
  * @author ruoyi
  */
 @Data
-public class BaseModel implements Serializable
-{
+public class BaseModel implements Serializable {
+
     private static final long serialVersionUID = 1L;
 
-    /** 创建者 */
+    /**
+     * 创建者
+     */
     @ApiModelProperty(value = "记录创建人,前端忽略")
     @CreatedBy
+    @TableField(value = "create_by", fill = FieldFill.INSERT)
     private String createBy;
 
-    /** 创建时间 */
+    /**
+     * 创建时间
+     */
     @ApiModelProperty(value = "记录创建时间,前端忽略")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
     private Date createTime;
 
-    /** 更新者 */
+    /**
+     * 更新者
+     */
 
     @ApiModelProperty(value = "记录修改人,前端忽略")
+    @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
     private String updateBy;
 
-    /** 更新时间 */
+    /**
+     * 更新时间
+     */
     @ApiModelProperty(value = "记录修改时间,前端忽略")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
     private Date updateTime;
 
-    /** 是否删除 0未删除 1已删除 */
+    /**
+     * 是否删除 0未删除 1已删除
+     */
     @ApiModelProperty(value = "是否删除 0未删除 1已删除")
-    @TableLogic
     private Integer isDelete;
 
 
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
index 566d017..e173a29 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
@@ -1,6 +1,7 @@
 package com.ruoyi.common.core.domain.entity;
 
 import com.ruoyi.common.core.domain.BaseModel;
+import io.swagger.annotations.ApiModelProperty;
 import java.util.Set;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.Size;
@@ -22,12 +23,14 @@
      * 角色ID
      */
     //@Excel(name = "角色序号", cellType = ColumnType.NUMERIC)
+    @ApiModelProperty("角色id")
     private Long roleId;
 
     /**
      * 角色名称
      */
     //@Excel(name = "角色名称")
+    @ApiModelProperty("角色名称")
     private String roleName;
 
     /**
@@ -77,6 +80,7 @@
     /**
      * 菜单组
      */
+    @ApiModelProperty("菜单权限id列表")
     private Long[] menuIds;
 
     /**
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/ValueTypeEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/ValueTypeEnum.java
new file mode 100644
index 0000000..56ca886
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/ValueTypeEnum.java
@@ -0,0 +1,27 @@
+package com.ruoyi.common.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum ValueTypeEnum {
+    FIELD(1, "字段"),
+    CHARACTER(2, "符号"),
+    NUMBER(3, "数字");
+    @EnumValue
+    private final Integer code;
+    @JsonValue
+    private final String desc;
+
+    public static ValueTypeEnum getEnumByCode(Integer code) {
+        for (ValueTypeEnum e : ValueTypeEnum.values()) {
+            if (e.code.equals(code)) {
+                return e;
+            }
+        }
+        return null;
+    }
+} 
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/CalculateUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/CalculateUtil.java
index 369136a..585ee1e 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/CalculateUtil.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/CalculateUtil.java
@@ -1,17 +1,21 @@
 package com.ruoyi.common.utils;
 
-import org.apache.commons.jexl3.*;
-
 import java.util.HashMap;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import org.apache.commons.jexl3.JexlBuilder;
+import org.apache.commons.jexl3.JexlContext;
+import org.apache.commons.jexl3.JexlEngine;
+import org.apache.commons.jexl3.JexlExpression;
+import org.apache.commons.jexl3.MapContext;
 
 /**
  * @author mitao
  * @date 2024/3/27
  */
 public class CalculateUtil {
+
     public static Map<String, Integer> getFieldsAndValue(String rule) {
         // 正则表达式模式,匹配形如 "fieldName:value" 的字符串
         Pattern pattern = Pattern.compile("\\b(\\w+)_(\\d+)\\b");
@@ -46,6 +50,22 @@
         return Double.parseDouble(result.toString());
     }
 
+    public static double calculate(String expression) {
+        // 创建 JEXL 引擎
+        JexlEngine jexl = new JexlBuilder().create();
+
+        // 创建表达式对象
+        JexlExpression exp = jexl.createExpression(expression);
+        // 创建上下文
+        JexlContext context = new MapContext();
+        // 执行计算
+        Object result = exp.evaluate(context);
+
+        // 输出结果
+        System.out.println("Result: " + result);
+        return Double.parseDouble(result.toString());
+    }
+
     public static String formatExpression(String expression) {
         return expression
                 .replaceAll("×", "*")
@@ -55,4 +75,9 @@
                 .replaceAll("+", "+")
                 .replaceAll("-", "-");
     }
+
+    public static void main(String[] args) {
+        String string = "field_3 * field_2";
+        System.out.println(getFieldsAndValue(string));
+    }
 }
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java
index 42f7978..fe33034 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java
@@ -5,6 +5,7 @@
 import com.ruoyi.common.exception.DemoModeException;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.StringUtils;
+import javax.servlet.http.HttpServletRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.security.access.AccessDeniedException;
@@ -16,24 +17,22 @@
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
 
-import javax.servlet.http.HttpServletRequest;
-
 /**
  * 全局异常处理器
- * 
+ *
  * @author ruoyi
  */
 @RestControllerAdvice
-public class GlobalExceptionHandler
-{
+public class GlobalExceptionHandler {
+
     private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
 
     /**
      * 权限校验异常
      */
     @ExceptionHandler(AccessDeniedException.class)
-    public AjaxResult handleAccessDeniedException(AccessDeniedException e, HttpServletRequest request)
-    {
+    public AjaxResult handleAccessDeniedException(AccessDeniedException e,
+            HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         log.error("请求地址'{}',权限校验失败'{}'", requestURI, e.getMessage());
         return AjaxResult.error(HttpStatus.FORBIDDEN, "没有权限,请联系管理员授权");
@@ -44,8 +43,7 @@
      */
     @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
     public AjaxResult handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e,
-            HttpServletRequest request)
-    {
+            HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod());
         return AjaxResult.error(e.getMessage());
@@ -55,41 +53,43 @@
      * 业务异常
      */
     @ExceptionHandler(ServiceException.class)
-    public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request)
-    {
+    public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request) {
         log.error(e.getMessage(), e);
         Integer code = e.getCode();
-        return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage());
+        return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage())
+                : AjaxResult.error(e.getMessage());
     }
 
     /**
      * 请求路径中缺少必需的路径变量
      */
     @ExceptionHandler(MissingPathVariableException.class)
-    public AjaxResult handleMissingPathVariableException(MissingPathVariableException e, HttpServletRequest request)
-    {
+    public AjaxResult handleMissingPathVariableException(MissingPathVariableException e,
+            HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         log.error("请求路径中缺少必需的路径变量'{}',发生系统异常.", requestURI, e);
-        return AjaxResult.error(String.format("请求路径中缺少必需的路径变量[%s]", e.getVariableName()));
+        return AjaxResult.error(
+                String.format("请求路径中缺少必需的路径变量[%s]", e.getVariableName()));
     }
 
     /**
      * 请求参数类型不匹配
      */
     @ExceptionHandler(MethodArgumentTypeMismatchException.class)
-    public AjaxResult handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e, HttpServletRequest request)
-    {
+    public AjaxResult handleMethodArgumentTypeMismatchException(
+            MethodArgumentTypeMismatchException e, HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         log.error("请求参数类型不匹配'{}',发生系统异常.", requestURI, e);
-        return AjaxResult.error(String.format("请求参数类型不匹配,参数[%s]要求类型为:'%s',但输入值为:'%s'", e.getName(), e.getRequiredType().getName(), e.getValue()));
+        return AjaxResult.error(
+                String.format("请求参数类型不匹配,参数[%s]要求类型为:'%s',但输入值为:'%s'",
+                        e.getName(), e.getRequiredType().getName(), e.getValue()));
     }
 
     /**
      * 拦截未知的运行时异常
      */
     @ExceptionHandler(RuntimeException.class)
-    public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request)
-    {
+    public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         log.error("请求地址'{}',发生未知异常.", requestURI, e);
         return AjaxResult.error(e.getMessage());
@@ -99,8 +99,7 @@
      * 系统异常
      */
     @ExceptionHandler(Exception.class)
-    public AjaxResult handleException(Exception e, HttpServletRequest request)
-    {
+    public AjaxResult handleException(Exception e, HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         log.error("请求地址'{}',发生系统异常.", requestURI, e);
         return AjaxResult.error(e.getMessage());
@@ -110,8 +109,7 @@
      * 自定义验证异常
      */
     @ExceptionHandler(BindException.class)
-    public AjaxResult handleBindException(BindException e)
-    {
+    public AjaxResult handleBindException(BindException e) {
         log.error(e.getMessage(), e);
         String message = e.getAllErrors().get(0).getDefaultMessage();
         return AjaxResult.error(message);
@@ -121,8 +119,7 @@
      * 自定义验证异常
      */
     @ExceptionHandler(MethodArgumentNotValidException.class)
-    public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e)
-    {
+    public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
         log.error(e.getMessage(), e);
         String message = e.getBindingResult().getFieldError().getDefaultMessage();
         return AjaxResult.error(message);
@@ -132,8 +129,7 @@
      * 演示模式异常
      */
     @ExceptionHandler(DemoModeException.class)
-    public AjaxResult handleDemoModeException(DemoModeException e)
-    {
+    public AjaxResult handleDemoModeException(DemoModeException e) {
         return AjaxResult.error("演示模式,不允许操作");
     }
 }
diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml
index 09a6043..2e64eb6 100644
--- a/ruoyi-system/pom.xml
+++ b/ruoyi-system/pom.xml
@@ -76,6 +76,12 @@
             <artifactId>easyexcel</artifactId>
             <version>3.3.4</version>
         </dependency>
+      <dependency>
+        <groupId>com.baomidou</groupId>
+        <artifactId>mybatis-plus-extension</artifactId>
+        <version>3.5.3.1</version>
+        <scope>compile</scope>
+      </dependency>
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicDataConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicDataConfig.java
index 19211c5..105a856 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicDataConfig.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicDataConfig.java
@@ -1,15 +1,19 @@
 package com.ruoyi.system.domain;
 
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.ruoyi.common.enums.CalculateTypeEnum;
 import com.ruoyi.common.enums.ShowStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
 import java.io.Serializable;
 import java.util.Date;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 /**
  * <p>
@@ -22,7 +26,7 @@
 @Data
 @EqualsAndHashCode(callSuper = false)
 @TableName("tb_basic_data_config")
-@ApiModel(value="TbBasicDataConfig对象", description="基础数据配置表")
+@ApiModel(value = "TbBasicDataConfig对象", description = "基础数据配置表")
 public class TbBasicDataConfig implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -33,7 +37,7 @@
 
     @ApiModelProperty(value = "基础数据分类id")
     @TableField("basic_data_category_id")
-    private Integer basicDataCategoryId;
+    private Long basicDataCategoryId;
 
     @ApiModelProperty(value = "类型名称")
     @TableField("type_name")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbDataScreenConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbDataScreenConfig.java
index 976068a..46d76e3 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbDataScreenConfig.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbDataScreenConfig.java
@@ -7,6 +7,7 @@
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.ruoyi.common.enums.DataScreenConfigEnum;
+import com.ruoyi.common.enums.SubTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import java.io.Serializable;
@@ -48,7 +49,7 @@
 
     @ApiModelProperty(value = "配置类型子类型(1=数据指标一/形式指标一 2=数据指标二/形式指标二 3=数据指标三/形式指标三 4=数据指标四/形式指标四)")
     @TableField("sub_type")
-    private Integer subType;
+    private SubTypeEnum subType;
 
     @ApiModelProperty(value = "风险等级范围-高风险得分")
     @TableField("high_risk")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/BasicDataConfigDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/BasicDataConfigDTO.java
index 1226df9..41ab9dd 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/BasicDataConfigDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/BasicDataConfigDTO.java
@@ -4,12 +4,11 @@
 import com.ruoyi.common.utils.CalculateUtil;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
 import java.util.List;
 import java.util.Map;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
 
 /**
  * @author mitao
@@ -35,14 +34,13 @@
     @NotNull(message = "计算类型不能为空")
     private CalculateTypeEnum calculateType;
 
-    @ApiModelProperty(value = "字段id ",notes = "多个id使用 ',' 拼接")
-    @NotBlank(message = "字段id不能为空")
+    @ApiModelProperty(value = "字段id ", notes = "文本统计 和百分比统计的的字段id")
     private String fieldIdStr;
 
-    @ApiModelProperty(value = "计算公式",notes = "计算类型为数字计算,配置内容使用该字段接收;公式中字段的格式为:field_字段id,e.g:field_1,field_2等。")
-    private String numberCalculateFormula;
+    @ApiModelProperty(value = "计算公式")
+    private List<CalculateItemDTO> calculateItemList;
 
-    @ApiModelProperty(value = "文本和百分比配置信息",notes = "当计算方式为 文本统计/百分比统计 " +
+    @ApiModelProperty(value = "文本和百分比配置信息", notes = "当计算方式为 文本统计/百分比统计 " +
             "配置内容使用这个字段接收;key为键,value为得分;百分比统计 将百分比区间使用'_'拼接作为key,e.g: 10_20,20_30")
     private List<CalculateDTO> dtoList;
 
@@ -95,4 +93,4 @@
       /*  double calculate = CalculateUtil.calculate(expression, fieldsAndValue);
         System.out.println(calculate);*/
     }
- }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/CalculateItemDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/CalculateItemDTO.java
new file mode 100644
index 0000000..8a6f3d3
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/CalculateItemDTO.java
@@ -0,0 +1,54 @@
+package com.ruoyi.system.dto;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
+import com.google.common.collect.Lists;
+import com.ruoyi.common.enums.ValueTypeEnum;
+import com.ruoyi.common.utils.CalculateUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import java.util.List;
+import java.util.stream.Collectors;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author mitao
+ * @date 2024/4/12
+ */
+@Data
+@ApiModel("计算规则配置值数据传输对象")
+@AllArgsConstructor
+@NoArgsConstructor
+public class CalculateItemDTO implements Serializable {
+
+    private static final long serialVersionUID = 7842483119802233747L;
+
+    @ApiModelProperty(value = "值类型", notes = "字段;符号;数字")
+    private ValueTypeEnum valueType;
+    @ApiModelProperty("内容")
+    private String content;
+
+    public static void main(String[] args) {
+        CalculateItemDTO dto1 = new CalculateItemDTO(ValueTypeEnum.FIELD, "1");
+        CalculateItemDTO dto2 = new CalculateItemDTO(ValueTypeEnum.CHARACTER, "*");
+        CalculateItemDTO dto3 = new CalculateItemDTO(ValueTypeEnum.NUMBER, "1");
+        CalculateItemDTO dto4 = new CalculateItemDTO(ValueTypeEnum.CHARACTER, ")");
+        CalculateItemDTO dto5 = new CalculateItemDTO(ValueTypeEnum.CHARACTER, "*");
+
+        List<CalculateItemDTO> list = Lists.newArrayList(dto1, dto2, dto3, dto4);
+        //将list转为jsonString
+        String jsonString = JSON.toJSONString(list);
+        System.out.println(jsonString);
+        List<CalculateItemDTO> calculateItemDTOS = JSONArray.parseArray(jsonString,
+                CalculateItemDTO.class);
+        System.out.println(calculateItemDTOS);
+        String numberCalculateFormulaStr = calculateItemDTOS.stream()
+                .map(CalculateItemDTO::getContent).collect(Collectors.joining());
+        System.out.println(numberCalculateFormulaStr);
+        double calculate = CalculateUtil.calculate(numberCalculateFormulaStr);
+        System.out.println(calculate);
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/SysRoleDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/SysRoleDTO.java
index 4f83237..df6411a 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/SysRoleDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/SysRoleDTO.java
@@ -2,25 +2,27 @@
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
 import java.io.Serializable;
 import java.util.List;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import lombok.Data;
 
 @Data
 @ApiModel(value = "角色新增DTO")
 public class SysRoleDTO implements Serializable {
 
+    private static final long serialVersionUID = 3461576838938557688L;
+
     @ApiModelProperty(value = "角色id")
     private Long roleId;
 
     @ApiModelProperty(value = "角色名称")
+    @NotBlank(message = "角色名称不能为空")
     private String roleName;
 
-    @ApiModelProperty(value = "类型")
-    private Integer postType;
-
     @ApiModelProperty(value = "权限id集合")
+    @NotEmpty(message = "权限id集合不能为空")
     private List<Long> menuIds;
 
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/SysUserDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/SysUserDTO.java
new file mode 100644
index 0000000..72992c1
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/SysUserDTO.java
@@ -0,0 +1,25 @@
+package com.ruoyi.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/4/12
+ */
+@Data
+@ApiModel("系统账号传输实体对象")
+public class SysUserDTO implements Serializable {
+
+    private static final long serialVersionUID = -7745059921246754935L;
+    @ApiModelProperty("员工姓名")
+    private String userName;
+    @ApiModelProperty("联系电话")
+    private String phoneNumber;
+    @ApiModelProperty("登录密码")
+    private String password;
+    @ApiModelProperty("所属角色id")
+    private Long roleId;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/BasicDataConfigUpdateDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/BasicDataConfigUpdateDTO.java
index 0771454..b438fc1 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/BasicDataConfigUpdateDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/BasicDataConfigUpdateDTO.java
@@ -2,14 +2,14 @@
 
 import com.ruoyi.common.enums.CalculateTypeEnum;
 import com.ruoyi.system.dto.CalculateDTO;
+import com.ruoyi.system.dto.CalculateItemDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.List;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
 
 @Data
 @ApiModel(value = "基础数据配置数据传输对象")
@@ -41,11 +41,11 @@
     @NotBlank(message = "字段id不能为空")
     private String fieldIdStr;
 
-    @ApiModelProperty(value = "计算公式",notes = "计算类型为数字计算,配置内容使用该字段接收;公式中字段的格式为:field_字段id,e.g:field_1,field_2等。")
-    private String numberCalculateFormula;
+    @ApiModelProperty(value = "计算公式", notes = "计算类型为数字计算,配置内容使用该字段接收;公式中字段的格式为:field_字段id,e.g:field_1,field_2等。")
+    private List<CalculateItemDTO> calculateItemList;
 
-    @ApiModelProperty(value = "文本和百分比配置信息",notes = "当计算方式为 文本统计/百分比统计 " +
+    @ApiModelProperty(value = "文本和百分比配置信息", notes = "当计算方式为 文本统计/百分比统计 " +
             "配置内容使用这个字段接收;key为键,value为得分;百分比统计 将百分比区间使用'_'拼接作为key,e.g: 10_20,20_30")
     private List<CalculateDTO> dtoList;
 
- }
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/DataIndicatorsUpdDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/DataIndicatorsUpdDTO.java
index 715fed3..4bf10fd 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/DataIndicatorsUpdDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/DataIndicatorsUpdDTO.java
@@ -12,14 +12,11 @@
  * @date 2024/4/10
  */
 @Data
-@ApiModel(value = "风险等级设置编辑数据传输对象")
+@ApiModel(value = "数据指标设置编辑数据传输对象")
 public class DataIndicatorsUpdDTO implements Serializable {
 
     private static final long serialVersionUID = -5866223907037261823L;
-
-    @ApiModelProperty(value = "id")
-    private Long id;
-
+    
     @ApiModelProperty(value = "配置类型子类型(1=指标一 2=指标二 3=指标三 4=指标四)")
     @NotNull(message = "配置类型子类型不能为空")
     private SubTypeEnum subType;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FieldUpdateDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FieldUpdateDTO.java
index cf0c10f..c814e67 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FieldUpdateDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FieldUpdateDTO.java
@@ -1,11 +1,12 @@
 package com.ruoyi.system.dto.update;
 
+import com.ruoyi.common.enums.FieldInputTypeEnum;
+import com.ruoyi.common.enums.FieldTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import lombok.Data;
 
 /**
  * @author mitao
@@ -20,15 +21,15 @@
     private Long id;
 
     @ApiModelProperty(value = "字段名")
-    @NotBlank(message="字段名不能为空")
+    @NotBlank(message = "字段名不能为空")
     private String fieldName;
 
     @ApiModelProperty(value = "字段类型(1=数字 2=文本 3=百分比)")
-    @NotNull(message="字段类型不能为空")
-    private Integer fieldType;
+    @NotNull(message = "字段类型不能为空")
+    private FieldTypeEnum fieldType;
 
     @ApiModelProperty(value = "一级分类id")
-    @NotNull(message="分类id不能为空")
+    @NotNull(message = "分类id不能为空")
     private Long levelOneCategoryId;
 
     @ApiModelProperty(value = "二级分类id")
@@ -44,7 +45,7 @@
     private Integer numMax;
 
     @ApiModelProperty(value = "文本输入类型(1=手动输入 2=固定内容)")
-    private Integer textInputType;
+    private FieldInputTypeEnum textInputType;
 
     @ApiModelProperty(value = "文本最少字数")
     private Integer textMinNum;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FormalIndicatorsUpdDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FormalIndicatorsUpdDTO.java
index 5b25393..bbac114 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FormalIndicatorsUpdDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FormalIndicatorsUpdDTO.java
@@ -11,14 +11,11 @@
  * @date 2024/4/10
  */
 @Data
-@ApiModel(value = "风险等级设置编辑数据传输对象")
+@ApiModel(value = "形式指标设置编辑数据传输对象")
 public class FormalIndicatorsUpdDTO implements Serializable {
 
     private static final long serialVersionUID = -4878457973955230627L;
-
-    @ApiModelProperty(value = "id")
-    private Long id;
-
+    
     @ApiModelProperty(value = "配置类型子类型(1=指标一 2=指标二 3=指标三 4=指标四)")
     private SubTypeEnum subType;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/RiskLevelUpdDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/RiskLevelUpdDTO.java
index 0553e4d..9f534da 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/RiskLevelUpdDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/RiskLevelUpdDTO.java
@@ -16,9 +16,6 @@
 
     private static final long serialVersionUID = -4878457973955230627L;
 
-    @ApiModelProperty(value = "id", notes = "如果返回了id,必传")
-    private Long id;
-
     @ApiModelProperty(value = "计算规则", notes = "公式中字段的格式为:field_字段id,e.g:field_1,field_2等。")
     @NotBlank(message = "计算规则不能为空")
     private String calculateFormula;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
index 43fbe53..cc31b81 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
@@ -1,24 +1,24 @@
 package com.ruoyi.system.mapper;
 
-import java.util.List;
-
-import com.ruoyi.common.basic.PageInfo;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.domain.entity.SysRole;
 import com.ruoyi.system.query.SysRoleQuery;
+import com.ruoyi.system.vo.RoleInfoVO;
+import java.util.List;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 /**
  * 角色表 数据层
- * 
+ *
  * @author ruoyi
  */
 @Mapper
-public interface SysRoleMapper
-{
+public interface SysRoleMapper {
+
     /**
      * 根据条件分页查询角色数据
-     * 
+     *
      * @param role 角色信息
      * @return 角色数据集合信息
      */
@@ -26,7 +26,7 @@
 
     /**
      * 根据用户ID查询角色
-     * 
+     *
      * @param userId 用户ID
      * @return 角色列表
      */
@@ -34,14 +34,14 @@
 
     /**
      * 查询所有角色
-     * 
+     *
      * @return 角色列表
      */
     public List<SysRole> selectRoleAll();
 
     /**
      * 根据用户ID获取角色选择框列表
-     * 
+     *
      * @param userId 用户ID
      * @return 选中角色ID列表
      */
@@ -49,7 +49,7 @@
 
     /**
      * 通过角色ID查询角色
-     * 
+     *
      * @param roleId 角色ID
      * @return 角色对象信息
      */
@@ -57,7 +57,7 @@
 
     /**
      * 根据用户ID查询角色
-     * 
+     *
      * @param userName 用户名
      * @return 角色列表
      */
@@ -65,7 +65,7 @@
 
     /**
      * 校验角色名称是否唯一
-     * 
+     *
      * @param roleName 角色名称
      * @return 角色信息
      */
@@ -73,7 +73,7 @@
 
     /**
      * 校验角色权限是否唯一
-     * 
+     *
      * @param roleKey 角色权限
      * @return 角色信息
      */
@@ -81,7 +81,7 @@
 
     /**
      * 修改角色信息
-     * 
+     *
      * @param role 角色信息
      * @return 结果
      */
@@ -89,7 +89,7 @@
 
     /**
      * 新增角色信息
-     * 
+     *
      * @param role 角色信息
      * @return 结果
      */
@@ -97,7 +97,7 @@
 
     /**
      * 通过角色ID删除角色
-     * 
+     *
      * @param roleId 角色ID
      * @return 结果
      */
@@ -105,7 +105,7 @@
 
     /**
      * 批量删除角色信息
-     * 
+     *
      * @param roleIds 需要删除的角色ID
      * @return 结果
      */
@@ -115,16 +115,17 @@
 
 //    List<SysRole> selectList(@Param("query")SysRoleQuery query);
 
-    int selectCount(@Param("status")Integer status);
+    int selectCount(@Param("status") Integer status);
 
     void updateStatus(SysRole role);
 
-    List<SysRole> selectListByDelFlag(@Param("delFlag")Integer delFlag);
+    List<SysRole> selectListByDelFlag(@Param("delFlag") Integer delFlag);
 
-    SysRole selectRoleByUserId(@Param("userId")Long userId);
+    SysRole selectRoleByUserId(@Param("userId") Long userId);
 
     String selectByUserId(@Param("userId") Long user_id);
 
-    List<SysRole> selectList(@Param("query")SysRoleQuery query,@Param("pageInfo") PageInfo<SysRole> pageInfo);
+    Page<RoleInfoVO> selectList(@Param("query") SysRoleQuery query,
+            @Param("page") Page<RoleInfoVO> page);
 
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbBasicDataConfigMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbBasicDataConfigMapper.java
index 35e7d83..4a9180c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbBasicDataConfigMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbBasicDataConfigMapper.java
@@ -3,7 +3,9 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.system.domain.TbBasicDataConfig;
+import com.ruoyi.system.query.BasicDataConfigQuery;
 import com.ruoyi.system.query.ScoreCalculateQuery;
+import com.ruoyi.system.vo.BasicDataConfigVO;
 import com.ruoyi.system.vo.ScoreCalculateVO;
 import org.apache.ibatis.annotations.Param;
 
@@ -17,5 +19,9 @@
  */
 public interface TbBasicDataConfigMapper extends BaseMapper<TbBasicDataConfig> {
 
-    Page<ScoreCalculateVO> scoreCalculatePage(@Param("query") ScoreCalculateQuery query, @Param("page") Page<ScoreCalculateVO> page);
+    Page<ScoreCalculateVO> scoreCalculatePage(@Param("query") ScoreCalculateQuery query,
+            @Param("page") Page<ScoreCalculateVO> page);
+
+    Page<BasicDataConfigVO> queryPage(@Param("page") Page<BasicDataConfigVO> page,
+            @Param("query") BasicDataConfigQuery query);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/FieldCategoryQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/FieldCategoryQuery.java
index 3eef42f..9276049 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/FieldCategoryQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/FieldCategoryQuery.java
@@ -1,6 +1,7 @@
 package com.ruoyi.system.query;
 
 import com.ruoyi.common.core.domain.BasePage;
+import com.ruoyi.common.enums.ShowStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -21,5 +22,5 @@
     private String fieldCategoryName;
 
     @ApiModelProperty(value = "状态(0=隐藏 1=显示 全部则不传)")
-    private Integer status;
+    private ShowStatusEnum status;
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/FieldQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/FieldQuery.java
index a400482..d6f3956 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/FieldQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/FieldQuery.java
@@ -34,6 +34,6 @@
     @ApiModelProperty(value = "三级分类")
     private String levelThreeCategory;
 
-    @ApiModelProperty(value = "状态 展示 隐藏")
+    @ApiModelProperty(value = "状态 0=展示中 1=已隐藏")
     private ShowStatusEnum status;
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java
index 0263262..0af22f8 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java
@@ -1,25 +1,25 @@
 package com.ruoyi.system.service;
 
-import java.util.List;
-import java.util.Set;
-
-import com.ruoyi.common.basic.PageInfo;
+import com.ruoyi.common.basic.PageDTO;
 import com.ruoyi.common.core.domain.entity.SysMenu;
 import com.ruoyi.common.core.domain.entity.SysRole;
 import com.ruoyi.system.domain.SysUserRole;
 import com.ruoyi.system.dto.SysRoleDTO;
 import com.ruoyi.system.query.SysRoleQuery;
+import com.ruoyi.system.vo.RoleInfoVO;
+import java.util.List;
+import java.util.Set;
 
 /**
  * 角色业务层
- * 
+ *
  * @author ruoyi
  */
-public interface ISysRoleService
-{
+public interface ISysRoleService {
+
     /**
      * 根据条件分页查询角色数据
-     * 
+     *
      * @param role 角色信息
      * @return 角色数据集合信息
      */
@@ -27,7 +27,7 @@
 
     /**
      * 根据用户ID查询角色列表
-     * 
+     *
      * @param userId 用户ID
      * @return 角色列表
      */
@@ -35,7 +35,7 @@
 
     /**
      * 根据用户ID查询角色权限
-     * 
+     *
      * @param userId 用户ID
      * @return 权限列表
      */
@@ -43,14 +43,14 @@
 
     /**
      * 查询所有角色
-     * 
+     *
      * @return 角色列表
      */
     public List<SysRole> selectRoleAll();
 
     /**
      * 根据用户ID获取角色选择框列表
-     * 
+     *
      * @param userId 用户ID
      * @return 选中角色ID列表
      */
@@ -58,7 +58,7 @@
 
     /**
      * 通过角色ID查询角色
-     * 
+     *
      * @param roleId 角色ID
      * @return 角色对象信息
      */
@@ -66,7 +66,7 @@
 
     /**
      * 校验角色名称是否唯一
-     * 
+     *
      * @param role 角色信息
      * @return 结果
      */
@@ -74,7 +74,7 @@
 
     /**
      * 校验角色权限是否唯一
-     * 
+     *
      * @param role 角色信息
      * @return 结果
      */
@@ -82,21 +82,21 @@
 
     /**
      * 校验角色是否允许操作
-     * 
+     *
      * @param role 角色信息
      */
     public void checkRoleAllowed(SysRole role);
 
     /**
      * 校验角色是否有数据权限
-     * 
+     *
      * @param roleId 角色id
      */
     public void checkRoleDataScope(Long roleId);
 
     /**
      * 通过角色ID查询角色使用数量
-     * 
+     *
      * @param roleId 角色ID
      * @return 结果
      */
@@ -104,7 +104,7 @@
 
     /**
      * 新增保存角色信息
-     * 
+     *
      * @param role 角色信息
      * @return 结果
      */
@@ -112,7 +112,7 @@
 
     /**
      * 修改保存角色信息
-     * 
+     *
      * @param role 角色信息
      * @return 结果
      */
@@ -128,7 +128,7 @@
 
     /**
      * 修改角色状态
-     * 
+     *
      * @param role 角色信息
      * @return 结果
      */
@@ -136,7 +136,7 @@
 
     /**
      * 修改数据权限信息
-     * 
+     *
      * @param role 角色信息
      * @return 结果
      */
@@ -144,7 +144,7 @@
 
     /**
      * 通过角色ID删除角色
-     * 
+     *
      * @param roleId 角色ID
      * @return 结果
      */
@@ -152,7 +152,7 @@
 
     /**
      * 批量删除角色信息
-     * 
+     *
      * @param roleIds 需要删除的角色ID
      * @return 结果
      */
@@ -160,7 +160,7 @@
 
     /**
      * 取消授权用户角色
-     * 
+     *
      * @param userRole 用户和角色关联信息
      * @return 结果
      */
@@ -168,8 +168,8 @@
 
     /**
      * 批量取消授权用户角色
-     * 
-     * @param roleId 角色ID
+     *
+     * @param roleId  角色ID
      * @param userIds 需要取消授权的用户数据ID
      * @return 结果
      */
@@ -177,8 +177,8 @@
 
     /**
      * 批量选择授权用户角色
-     * 
-     * @param roleId 角色ID
+     *
+     * @param roleId  角色ID
      * @param userIds 需要删除的用户数据ID
      * @return 结果
      */
@@ -197,6 +197,7 @@
 
     /**
      * 角色列表
+     *
      * @param
      * @return
      */
@@ -209,7 +210,6 @@
     List<SysRole> selectListByDelFlag(Integer delFlag);
 
     /**
-     *
      * @param userId
      * @return
      */
@@ -223,7 +223,7 @@
 
     void saveRole(SysRoleDTO dto);
 
-    PageInfo<SysRole> selectList(SysRoleQuery query);
+    PageDTO<RoleInfoVO> selectList(SysRoleQuery query);
 
     /**
      * 修改保存角色信息
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataConfigService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataConfigService.java
index 8aa6f57..2e477c9 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataConfigService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataConfigService.java
@@ -27,13 +27,17 @@
 
     void edit(BasicDataConfigUpdateDTO dto);
 
-    BasicDataConfigDetailVO getDetails(Integer id);
+    BasicDataConfigDetailVO getDetails(Long id);
 
-    void delete(Integer id);
+    void delete(Long id);
 
     PageDTO<BasicDataConfigVO> queryPage(BasicDataConfigQuery query);
 
     void showHide(ShowHideDTO dto);
 
-    Page<ScoreCalculateVO> scoreCalculatePage(ScoreCalculateQuery query, Page<ScoreCalculateVO> page);
+    Page<ScoreCalculateVO> scoreCalculatePage(ScoreCalculateQuery query,
+            Page<ScoreCalculateVO> page);
+
+    Page<BasicDataConfigVO> queryPage(Page<BasicDataConfigVO> objectPage,
+            BasicDataConfigQuery query);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbFieldService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbFieldService.java
index 30491d4..e24caf4 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbFieldService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbFieldService.java
@@ -9,6 +9,7 @@
 import com.ruoyi.system.query.FieldQuery;
 import com.ruoyi.system.vo.BasicDataFieldVO;
 import com.ruoyi.system.vo.FieldVO;
+import java.util.List;
 
 /**
  * <p>
@@ -28,10 +29,14 @@
 
     String influencedData(Long id);
 
-    void update(FieldUpdateDTO dto);
+    void editField(FieldUpdateDTO dto);
 
     BasicDataFieldVO getHistoryFields(Long id);
 
     void downloadImportTemplate() throws Exception;
 
+    PageDTO<FieldVO> queryShowPage(FieldQuery query);
+
+    List<FieldVO> listFields();
+    
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
index f265a8a..daeaf11 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
@@ -1,6 +1,7 @@
 package com.ruoyi.system.service.impl;
 
-import com.ruoyi.common.basic.PageInfo;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.basic.PageDTO;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.domain.entity.SysMenu;
 import com.ruoyi.common.core.domain.entity.SysRole;
@@ -20,6 +21,7 @@
 import com.ruoyi.system.mapper.SysUserRoleMapper;
 import com.ruoyi.system.query.SysRoleQuery;
 import com.ruoyi.system.service.ISysRoleService;
+import com.ruoyi.system.vo.RoleInfoVO;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
@@ -549,11 +551,10 @@
     }
 
     @Override
-    public PageInfo<SysRole> selectList(SysRoleQuery query) {
-        PageInfo<SysRole> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
-        List<SysRole> list = roleMapper.selectList(query, pageInfo);
-        pageInfo.setRecords(list);
-        return pageInfo;
+    public PageDTO<RoleInfoVO> selectList(SysRoleQuery query) {
+        Page<RoleInfoVO> page = new Page<>(query.getPageNum(), query.getPageSize());
+        Page<RoleInfoVO> pageVO = roleMapper.selectList(query, page);
+        return PageDTO.of(pageVO);
     }
 
     @Override
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataConfigServiceImpl.java
index c47c155..6e3712d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataConfigServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataConfigServiceImpl.java
@@ -1,13 +1,17 @@
 package com.ruoyi.system.service.impl;
 
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.basic.PageDTO;
 import com.ruoyi.common.enums.CalculateTypeEnum;
 import com.ruoyi.common.enums.ShowStatusEnum;
+import com.ruoyi.common.enums.ValueTypeEnum;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.BeanUtils;
+import com.ruoyi.common.utils.CalculateUtil;
 import com.ruoyi.common.utils.Checker;
 import com.ruoyi.common.utils.CollUtils;
 import com.ruoyi.common.utils.StringUtils;
@@ -16,26 +20,29 @@
 import com.ruoyi.system.domain.TbField;
 import com.ruoyi.system.dto.BasicDataConfigDTO;
 import com.ruoyi.system.dto.CalculateDTO;
+import com.ruoyi.system.dto.CalculateItemDTO;
 import com.ruoyi.system.dto.ShowHideDTO;
 import com.ruoyi.system.dto.update.BasicDataConfigUpdateDTO;
 import com.ruoyi.system.mapper.TbBasicDataConfigMapper;
 import com.ruoyi.system.mapper.TbFieldMapper;
 import com.ruoyi.system.query.BasicDataConfigQuery;
 import com.ruoyi.system.query.ScoreCalculateQuery;
+import com.ruoyi.system.service.TbBasicDataCategoryService;
 import com.ruoyi.system.service.TbBasicDataConfigDetailService;
 import com.ruoyi.system.service.TbBasicDataConfigService;
 import com.ruoyi.system.vo.BasicDataConfigDetailVO;
 import com.ruoyi.system.vo.BasicDataConfigVO;
 import com.ruoyi.system.vo.CalculateVO;
 import com.ruoyi.system.vo.ScoreCalculateVO;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+import lombok.RequiredArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * <p>
@@ -47,43 +54,98 @@
  */
 @Service
 @RequiredArgsConstructor
-public class TbBasicDataConfigServiceImpl extends ServiceImpl<TbBasicDataConfigMapper, TbBasicDataConfig> implements TbBasicDataConfigService {
+public class TbBasicDataConfigServiceImpl extends
+        ServiceImpl<TbBasicDataConfigMapper, TbBasicDataConfig> implements
+        TbBasicDataConfigService {
 
     private final TbBasicDataConfigDetailService tbBasicDataConfigDetailService;
     private final TbFieldMapper fieldMapper;
+    private final TbBasicDataCategoryService tbBasicDataCategoryService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void add(BasicDataConfigDTO dto) {
         TbBasicDataConfig tbBasicDataConfig = BeanUtils.copyBean(dto, TbBasicDataConfig.class);
-        //参数校验
+        List<CalculateItemDTO> calculateItemList = dto.getCalculateItemList();
         CalculateTypeEnum calculateType = tbBasicDataConfig.getCalculateType();
         List<CalculateDTO> dtoList = dto.getDtoList();
-        if (CalculateTypeEnum.NUMBER.equals(calculateType) && StringUtils.isBlank(dto.getNumberCalculateFormula())) {
-            throw new ServiceException("计算公式不能为空");
-        }
-        boolean verify = (CalculateTypeEnum.TEXT.equals(calculateType) || CalculateTypeEnum.PERCENTAGE.equals(calculateType)) && CollUtils.isNotEmpty(dtoList);
-        if (verify) {
-            CollUtils.check(dto.getDtoList(), new Checker<CalculateDTO>() {
-                @Override
-                public void check(CalculateDTO data) {
-                    if (StringUtils.isBlank(data.getKey())) {
-                        throw new ServiceException("基础数据配置key不能为空");
-                    }
-                    if (StringUtils.isBlank(data.getValue())) {
-                        throw new ServiceException("基础数据配置value不能为空");
-                    }
-                }
-            });
+        if (CalculateTypeEnum.NUMBER.equals(calculateType)) {
+            String fieldIdStr = getFieldIdStr(calculateItemList, tbBasicDataConfig);
+            tbBasicDataConfig.setFieldIdStr(fieldIdStr);
         } else {
-            throw new ServiceException("计算公式不能为空");
+            if (CollUtils.isEmpty(dtoList)) {
+                throw new ServiceException("基础数据配置不能为空");
+            } else {
+                CollUtils.check(dto.getDtoList(), new Checker<CalculateDTO>() {
+                    @Override
+                    public void check(CalculateDTO data) {
+                        if (StringUtils.isBlank(data.getKey())) {
+                            throw new ServiceException("基础数据配置key不能为空");
+                        }
+                        if (StringUtils.isBlank(data.getValue())) {
+                            throw new ServiceException("基础数据配置value不能为空");
+                        }
+                    }
+                });
+                if (StringUtils.isBlank(dto.getFieldIdStr())) {
+                    throw new ServiceException("字段id不能为空");
+                }
+                List<TbBasicDataConfigDetail> details = BeanUtils.copyList(dtoList,
+                        TbBasicDataConfigDetail.class);
+                List<TbBasicDataConfigDetail> collect = details.stream()
+                        .peek(item -> item.setBasicDataConfigId(tbBasicDataConfig.getId()))
+                        .collect(Collectors.toList());
+                tbBasicDataConfigDetailService.saveBatch(collect);
+            }
         }
         this.save(tbBasicDataConfig);
-        if (verify) {
-            List<TbBasicDataConfigDetail> details = BeanUtils.copyList(dtoList, TbBasicDataConfigDetail.class);
-            List<TbBasicDataConfigDetail> collect = details.stream().peek(item -> item.setBasicDataConfigId(tbBasicDataConfig.getId())).collect(Collectors.toList());
-            tbBasicDataConfigDetailService.saveBatch(collect);
+    }
+
+    public boolean hasConsecutiveDuplicates(List<CalculateItemDTO> calculateItemList) {
+        return IntStream.range(1, calculateItemList.size())
+                .anyMatch(i -> calculateItemList.get(i - 1).getValueType()
+                        .equals(calculateItemList.get(i).getValueType()));
+    }
+
+
+    @NotNull
+    private String getFieldIdStr(List<CalculateItemDTO> calculateItemList,
+            TbBasicDataConfig tbBasicDataConfig) {
+        if (CollUtils.isEmpty(calculateItemList)) {
+            throw new ServiceException("计算公式不能为空");
         }
+        CollUtils.check(calculateItemList, new Checker<CalculateItemDTO>() {
+            @Override
+            public void check(CalculateItemDTO data) {
+                if (Objects.isNull(data.getValueType())) {
+                    throw new ServiceException("基础数据配置计算规则值类型不能为空");
+                }
+                if (StringUtils.isBlank(data.getContent())) {
+                    throw new ServiceException("基础数据配置计算规则值内容不能为空");
+                }
+            }
+        });
+        boolean result = hasConsecutiveDuplicates(calculateItemList);
+        if (result) {
+            throw new ServiceException("计算表达式有误,请修改");
+        }
+        //参数校验
+        String numberCalculateFormulaStr = calculateItemList.stream()
+                .map(CalculateItemDTO::getContent)
+                .collect(Collectors.joining());
+        //校验表达式是否正确
+        try {
+            CalculateUtil.calculate(numberCalculateFormulaStr);
+        } catch (Exception e) {
+            throw new ServiceException("计算表达式有误,请修改");
+        }
+        String numberCalculateFormulaJsonStr = JSON.toJSONString(calculateItemList);
+        tbBasicDataConfig.setNumberCalculateFormula(numberCalculateFormulaJsonStr);
+        String fieldIdStr = calculateItemList.stream()
+                .filter(item -> ValueTypeEnum.FIELD.equals(item.getValueType()))
+                .map(CalculateItemDTO::getContent).collect(
+                        Collectors.joining(","));
+        return fieldIdStr;
     }
 
     @Override
@@ -93,33 +155,45 @@
         //参数校验
         CalculateTypeEnum calculateType = tbBasicDataConfig.getCalculateType();
         List<CalculateDTO> dtoList = dto.getDtoList();
-        if (CalculateTypeEnum.NUMBER.equals(calculateType) && StringUtils.isBlank(dto.getNumberCalculateFormula())) {
-            throw new ServiceException("计算公式不能为空");
-        }
-        boolean verify = CalculateTypeEnum.TEXT.equals(calculateType) || CalculateTypeEnum.PERCENTAGE.equals(calculateType);
-        if (verify && CollUtils.isEmpty(dtoList)) {
-            throw new ServiceException("计算公式不能为空");
-        }
-        this.updateById(tbBasicDataConfig);
-        if (verify) {
+        if (CalculateTypeEnum.NUMBER.equals(calculateType)) {
+            tbBasicDataConfig.setFieldIdStr(
+                    getFieldIdStr(dto.getCalculateItemList(), tbBasicDataConfig));
+        } else {
+            if (CollUtils.isEmpty(dtoList)) {
+                throw new ServiceException("计算公式不能为空");
+            }
             //删除原来的配置信息,重新添加新的
-            tbBasicDataConfigDetailService.lambdaUpdate().eq(TbBasicDataConfigDetail::getBasicDataConfigId, tbBasicDataConfig.getId()).remove();
-            List<TbBasicDataConfigDetail> details = BeanUtils.copyList(dtoList, TbBasicDataConfigDetail.class);
-            List<TbBasicDataConfigDetail> collect = details.stream().peek(item -> item.setBasicDataConfigId(tbBasicDataConfig.getId())).collect(Collectors.toList());
+            tbBasicDataConfigDetailService.lambdaUpdate()
+                    .eq(TbBasicDataConfigDetail::getBasicDataConfigId, tbBasicDataConfig.getId())
+                    .remove();
+            List<TbBasicDataConfigDetail> details = BeanUtils.copyList(dtoList,
+                    TbBasicDataConfigDetail.class);
+            List<TbBasicDataConfigDetail> collect = details.stream()
+                    .peek(item -> item.setBasicDataConfigId(tbBasicDataConfig.getId()))
+                    .collect(Collectors.toList());
             tbBasicDataConfigDetailService.saveBatch(collect);
         }
+        this.updateById(tbBasicDataConfig);
     }
 
     @Override
-    public BasicDataConfigDetailVO getDetails(Integer id) {
+    public BasicDataConfigDetailVO getDetails(Long id) {
         TbBasicDataConfig config = this.getById(id);
         if (Objects.isNull(config)) {
             throw new ServiceException("非法参数");
         }
         BasicDataConfigDetailVO vo = BeanUtils.copyBean(config, BasicDataConfigDetailVO.class);
-        Integer code = vo.getCalculateType().getCode();
-        if ((CalculateTypeEnum.TEXT.getCode().equals(code) || CalculateTypeEnum.PERCENTAGE.getCode().equals(code))) {
-            List<TbBasicDataConfigDetail> list = tbBasicDataConfigDetailService.lambdaQuery().eq(TbBasicDataConfigDetail::getBasicDataConfigId, config.getId()).list();
+
+        CalculateTypeEnum type = vo.getCalculateType();
+        if (CalculateTypeEnum.NUMBER.equals(type)) {
+            List<CalculateItemDTO> calculateItemDTOS = JSONArray.parseArray(
+                    config.getNumberCalculateFormula(),
+                    CalculateItemDTO.class);
+            vo.setCalculateItemList(calculateItemDTOS);
+        }
+        if ((CalculateTypeEnum.TEXT.equals(type) || CalculateTypeEnum.PERCENTAGE.equals(type))) {
+            List<TbBasicDataConfigDetail> list = tbBasicDataConfigDetailService.lambdaQuery()
+                    .eq(TbBasicDataConfigDetail::getBasicDataConfigId, config.getId()).list();
             List<CalculateVO> calculateVOS = BeanUtils.copyList(list, CalculateVO.class);
             vo.setDtoList(calculateVOS);
         }
@@ -127,7 +201,7 @@
     }
 
     @Override
-    public void delete(Integer id) {
+    public void delete(Long id) {
         TbBasicDataConfig config = this.getById(id);
         if (Objects.isNull(config)) {
             throw new ServiceException("非法参数");
@@ -137,11 +211,10 @@
 
     @Override
     public PageDTO<BasicDataConfigVO> queryPage(BasicDataConfigQuery query) {
-        Page<TbBasicDataConfig> page = this.lambdaQuery()
-                .like(StringUtils.isNotBlank(query.getBasicDataConfigName()), TbBasicDataConfig::getTypeName, query.getBasicDataConfigName())
-                .eq(Objects.nonNull(query.getCalculateType()), TbBasicDataConfig::getCalculateType, query.getCalculateType())
-                .eq(Objects.nonNull(query.getStatus()), TbBasicDataConfig::getStatus, query.getStatus()).page(new Page<>(query.getPageNum(), query.getPageSize()));
-        return PageDTO.of(page, BasicDataConfigVO.class);
+        Page<Object> page = new Page<>(query.getPageNum(), query.getPageSize());
+        Page<BasicDataConfigVO> pageVO = this.queryPage(
+                new Page<>(query.getPageNum(), query.getPageSize()), query);
+        return PageDTO.of(pageVO);
     }
 
     @Override
@@ -154,17 +227,29 @@
             //查询改配置所使用字段状态
             String fieldIdStr = config.getFieldIdStr();
             String[] split = fieldIdStr.split(",");
-            List<TbField> list = fieldMapper.selectList(Wrappers.<TbField>lambdaQuery().in(TbField::getId, Arrays.asList(split)).eq(TbField::getStatus, ShowStatusEnum.HIDE));
+            List<TbField> list = fieldMapper.selectList(
+                    Wrappers.<TbField>lambdaQuery().in(TbField::getId, Arrays.asList(split))
+                            .eq(TbField::getStatus, ShowStatusEnum.HIDE));
             if (CollUtils.isNotEmpty(list)) {
-                String fieldNames = list.stream().map(TbField::getFieldName).collect(Collectors.joining(","));
-                throw new ServiceException(String.format("字段“%s”已被隐藏,请重新配置后再次操作!", fieldNames));
+                String fieldNames = list.stream().map(TbField::getFieldName)
+                        .collect(Collectors.joining(","));
+                throw new ServiceException(
+                        String.format("字段“%s”已被隐藏,请重新配置后再次操作!", fieldNames));
             }
         }
-        this.lambdaUpdate().set(TbBasicDataConfig::getStatus, dto.getStatus()).eq(TbBasicDataConfig::getId, dto.getId()).update();
+        this.lambdaUpdate().set(TbBasicDataConfig::getStatus, dto.getStatus())
+                .eq(TbBasicDataConfig::getId, dto.getId()).update();
     }
 
     @Override
-    public Page<ScoreCalculateVO> scoreCalculatePage(ScoreCalculateQuery query, Page<ScoreCalculateVO> page) {
+    public Page<ScoreCalculateVO> scoreCalculatePage(ScoreCalculateQuery query,
+            Page<ScoreCalculateVO> page) {
         return baseMapper.scoreCalculatePage(query, page);
     }
+
+    @Override
+    public Page<BasicDataConfigVO> queryPage(Page<BasicDataConfigVO> page,
+            BasicDataConfigQuery query) {
+        return baseMapper.queryPage(page, query);
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java
index fd782cb..91d061c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java
@@ -696,6 +696,7 @@
         if (quarterLocalDate.isAfter(dateLocalDate) || quarterLocalDate.equals(dateLocalDate)) {
             throw new ServiceException("请导入过去季度的数据。");
         }
+
         EasyExcel.read(
                         file.getInputStream(),
                         new HistoryDataListener(
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenConfigServiceImpl.java
index 8e3ee5c..cec2e79 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenConfigServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenConfigServiceImpl.java
@@ -12,6 +12,7 @@
 import com.ruoyi.system.service.TbDataScreenConfigService;
 import com.ruoyi.system.vo.DataScreenConfigVO;
 import java.util.List;
+import java.util.Objects;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -33,14 +34,18 @@
         TbDataScreenConfig tbDataScreenConfig = this.lambdaQuery()
                 .eq(TbDataScreenConfig::getType, DataScreenConfigEnum.RISK_LEVEL)
                 .one();
-        return BeanUtils.copyBean(tbDataScreenConfig, DataScreenConfigVO.class);
+        return Objects.nonNull(tbDataScreenConfig) ? BeanUtils.copyBean(tbDataScreenConfig,
+                DataScreenConfigVO.class) : new DataScreenConfigVO();
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public DataScreenConfigVO editRiskLevel(RiskLevelUpdDTO dto) {
-        TbDataScreenConfig tbDataScreenConfig = BeanUtils.copyBean(dto,
-                TbDataScreenConfig.class);
+        //查询是否有该指标配置
+        TbDataScreenConfig tbDataScreenConfig = this.lambdaQuery()
+                .eq(TbDataScreenConfig::getType, DataScreenConfigEnum.RISK_LEVEL)
+                .oneOpt().orElseGet(() -> BeanUtils.copyBean(dto,
+                        TbDataScreenConfig.class));
         tbDataScreenConfig.setType(DataScreenConfigEnum.RISK_LEVEL);
         this.saveOrUpdate(tbDataScreenConfig);
         return BeanUtils.copyBean(tbDataScreenConfig, DataScreenConfigVO.class);
@@ -56,8 +61,12 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public DataScreenConfigVO editDataIndicatorsConfig(DataIndicatorsUpdDTO dto) {
-        TbDataScreenConfig tbDataScreenConfig = BeanUtils.copyBean(dto,
-                TbDataScreenConfig.class);
+        //查询是否有该指标配置
+        TbDataScreenConfig tbDataScreenConfig = this.lambdaQuery()
+                .eq(TbDataScreenConfig::getType, DataScreenConfigEnum.DATA_INDICATORS)
+                .eq(TbDataScreenConfig::getSubType,
+                        dto.getSubType()).oneOpt().orElseGet(() -> BeanUtils.copyBean(dto,
+                        TbDataScreenConfig.class));
         tbDataScreenConfig.setType(DataScreenConfigEnum.DATA_INDICATORS);
         this.saveOrUpdate(tbDataScreenConfig);
         return BeanUtils.copyBean(tbDataScreenConfig, DataScreenConfigVO.class);
@@ -66,8 +75,12 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public DataScreenConfigVO editFormalIndicatorsConfig(FormalIndicatorsUpdDTO dto) {
-        TbDataScreenConfig tbDataScreenConfig = BeanUtils.copyBean(dto,
-                TbDataScreenConfig.class);
+        //查询是否有该指标配置
+        TbDataScreenConfig tbDataScreenConfig = this.lambdaQuery()
+                .eq(TbDataScreenConfig::getType, DataScreenConfigEnum.FORMAL_INDICATORS)
+                .eq(TbDataScreenConfig::getSubType,
+                        dto.getSubType()).oneOpt().orElseGet(() -> BeanUtils.copyBean(dto,
+                        TbDataScreenConfig.class));
         tbDataScreenConfig.setType(DataScreenConfigEnum.FORMAL_INDICATORS);
         this.saveOrUpdate(tbDataScreenConfig);
         return BeanUtils.copyBean(tbDataScreenConfig, DataScreenConfigVO.class);
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java
index e485974..35b6d48 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java
@@ -1,6 +1,7 @@
 package com.ruoyi.system.service.impl;
 
 import com.alibaba.excel.EasyExcel;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
@@ -157,7 +158,56 @@
         if (CollUtils.isEmpty(page.getRecords())) {
             return PageDTO.empty(page);
         }
+        List<TbField> collect = page.getRecords().stream().peek(item -> {
+            if (StringUtils.isBlank(item.getLevelTwoCategory())) {
+                item.setLevelTwoCategory("无");
+                item.setLevelThreeCategory("无");
+            } else {
+                item.setLevelThreeCategory("无");
+            }
+        }).collect(Collectors.toList());
+        page.setRecords(collect);
         return PageDTO.of(page, FieldVO.class);
+    }
+
+    @Override
+    public PageDTO<FieldVO> queryShowPage(FieldQuery query) {
+        Page<TbField> page = this.lambdaQuery()
+                .select(TbField::getId, TbField::getFieldName, TbField::getLevelOneCategory,
+                        TbField::getLevelTwoCategory, TbField::getLevelThreeCategory)
+                .like(StringUtils.isNotEmpty(query.getFieldName()), TbField::getFieldName,
+                        query.getFieldName())
+                .like(StringUtils.isNotEmpty(query.getLevelOneCategory()),
+                        TbField::getLevelOneCategory, query.getLevelOneCategory())
+                .like(StringUtils.isNotEmpty(query.getLevelTwoCategory()),
+                        TbField::getLevelTwoCategory, query.getLevelTwoCategory())
+                .like(StringUtils.isNotEmpty(query.getLevelThreeCategory()),
+                        TbField::getLevelThreeCategory, query.getLevelThreeCategory())
+                .eq(TbField::getStatus, ShowStatusEnum.SHOW)
+                .eq(StringUtils.isNotNull(query.getFieldType()), TbField::getFieldType,
+                        query.getFieldType())
+                .orderByDesc(TbField::getCreateTime)
+                .page(new Page<>(query.getPageNum(), query.getPageSize()));
+        if (CollUtils.isEmpty(page.getRecords())) {
+            return PageDTO.empty(page);
+        }
+        List<TbField> collect = page.getRecords().stream().peek(item -> {
+            if (StringUtils.isBlank(item.getLevelTwoCategory())) {
+                item.setLevelTwoCategory("无");
+                item.setLevelThreeCategory("无");
+            } else {
+                item.setLevelThreeCategory("无");
+            }
+        }).collect(Collectors.toList());
+        page.setRecords(collect);
+        return PageDTO.of(page, FieldVO.class);
+    }
+
+    @Override
+    public List<FieldVO> listFields() {
+        List<TbField> list = this.list(
+                Wrappers.<TbField>lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW));
+        return BeanUtils.copyList(list, FieldVO.class);
     }
 
     @Override
@@ -184,7 +234,7 @@
     }
 
     @Override
-    public void update(FieldUpdateDTO dto) {
+    public void editField(FieldUpdateDTO dto) {
         TbField field = this.getById(dto.getId());
         if (Objects.isNull(field)) {
             throw new ServiceException("参数异常");
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbQuestionServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbQuestionServiceImpl.java
index e469a3e..5be3308 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbQuestionServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbQuestionServiceImpl.java
@@ -46,6 +46,7 @@
                 .eq(StringUtils.isNotBlank(dto.getQuarter()), TbQuestion::getQuarter,
                         dto.getQuarter())
                 .like(StringUtils.isNotBlank(dto.getTitle()), TbQuestion::getTitle, dto.getTitle())
+                .orderByDesc(TbQuestion::getCreateTime)
                 .page(new Page<>(dto.getPageNum(), dto.getPageSize()));
         return PageDTO.of(page, QuestionVO.class);
     }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataConfigDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataConfigDetailVO.java
index 1d7e4f9..5680e64 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataConfigDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataConfigDetailVO.java
@@ -1,21 +1,21 @@
 package com.ruoyi.system.vo;
 
 import com.ruoyi.common.enums.CalculateTypeEnum;
+import com.ruoyi.system.dto.CalculateItemDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.List;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
 
 /**
  * @author mitao
  * @date 2024/3/18
  */
 @Data
-@ApiModel(value="基础数据配置详情视图对象")
+@ApiModel(value = "基础数据配置详情视图对象")
 public class BasicDataConfigDetailVO implements Serializable {
 
     private static final long serialVersionUID = 8789005070048058207L;
@@ -44,8 +44,8 @@
     @NotBlank(message = "字段id不能为空")
     private String fieldIdStr;
 
-    @ApiModelProperty(value = "计算公式",notes = "计算类型为数字计算,配置内容使用该字段接收;公式中字段的格式为:field_字段id,e.g:field_1,field_2等。")
-    private String numberCalculateFormula;
+    @ApiModelProperty(value = "计算公式")
+    private List<CalculateItemDTO> CalculateItemList;
 
     @ApiModelProperty(value = "文本和百分比配置信息", notes = "当计算方式为 文本统计/百分比统计 " +
             "配置内容使用这个字段接收;key为键,value为得分;百分比统计 将百分比区间使用'_'拼接作为key,e.g: 10_20,20_30")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldReportingVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldReportingVO.java
index e8fdc6c..a89e6d6 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldReportingVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldReportingVO.java
@@ -1,15 +1,15 @@
 package com.ruoyi.system.vo;
 
+import com.ruoyi.common.enums.FieldInputTypeEnum;
 import com.ruoyi.common.enums.FieldTypeEnum;
 import com.ruoyi.common.enums.ShowStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
 import lombok.Data;
 
-import java.io.Serializable;
-
 @Data
-@ApiModel(value="数据上报字段视图对象")
+@ApiModel(value = "数据上报字段视图对象")
 public class FieldReportingVO implements Serializable {
 
     private static final long serialVersionUID = -7412686975187928384L;
@@ -51,7 +51,7 @@
     private Integer numMax;
 
     @ApiModelProperty(value = "文本输入类型(1=手动输入 2=固定内容)")
-    private Integer textInputType;
+    private FieldInputTypeEnum textInputType;
 
     @ApiModelProperty(value = "文本最少字数")
     private Integer textMinNum;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldVO.java
index e7c8671..0fea56b 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldVO.java
@@ -1,19 +1,19 @@
 package com.ruoyi.system.vo;
 
+import com.ruoyi.common.enums.FieldInputTypeEnum;
 import com.ruoyi.common.enums.FieldTypeEnum;
 import com.ruoyi.common.enums.ShowStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
 import java.io.Serializable;
+import lombok.Data;
 
 /**
  * @author mitao
  * @date 2024/3/15
  */
 @Data
-@ApiModel(value="字段视图对象")
+@ApiModel(value = "字段视图对象")
 public class FieldVO implements Serializable {
 
     private static final long serialVersionUID = -8474307057802966503L;
@@ -55,7 +55,7 @@
     private Integer numMax;
 
     @ApiModelProperty(value = "文本输入类型(1=手动输入 2=固定内容)")
-    private Integer textInputType;
+    private FieldInputTypeEnum textInputType;
 
     @ApiModelProperty(value = "文本最少字数")
     private Integer textMinNum;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/RoleInfoVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/RoleInfoVO.java
index 091bba6..7faf5ae 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/RoleInfoVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/RoleInfoVO.java
@@ -1,16 +1,25 @@
 package com.ruoyi.system.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
+import java.util.Date;
 import java.util.List;
+import lombok.Data;
 
 @Data
 public class RoleInfoVO {
+
+    @ApiModelProperty(value = "角色id")
     private Long roleId;
 
+    @ApiModelProperty(value = "角色名称")
     private String roleName;
 
     @ApiModelProperty("菜单id")
     private List<Long> menus;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
 }
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
index 6ff08d0..4ec1c85 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
@@ -19,8 +19,6 @@
     <result property="updateBy" column="update_by"/>
     <result property="updateTime" column="update_time"/>
     <result property="remark" column="remark"/>
-    <result property="removeDays" column="removeDays"/>
-    <result property="postType" column="postType"/>
   </resultMap>
 
   <sql id="selectRoleVo">
@@ -34,9 +32,7 @@
                     r.status,
                     r.del_flag,
                     r.create_time,
-                    r.remark,
-                    r.postType,
-                    r.removeDays
+                    r.remark
     from sys_role r
            left join sys_user_role ur on ur.role_id = r.role_id
            left join sys_user u on u.user_id = ur.user_id
@@ -106,7 +102,7 @@
       AND del_flag = 0
     </where>
   </select>
-  <select id="selectList" resultType="com.ruoyi.common.core.domain.entity.SysRole">
+  <select id="selectList" resultType="com.ruoyi.system.vo.RoleInfoVO">
     select role_id AS roleId, role_name AS roleName, role_key AS roleKey, role_sort AS roleSort,
     data_scope AS dataScope,
     menu_check_strictly AS menuCheckStrictly, dept_check_strictly AS deptCheckStrictly,status AS
diff --git a/ruoyi-system/src/main/resources/mapper/system/TbBasicDataConfigMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TbBasicDataConfigMapper.xml
index 7944fab..ffb1082 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TbBasicDataConfigMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TbBasicDataConfigMapper.xml
@@ -1,45 +1,63 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.system.mapper.TbBasicDataConfigMapper">
 
-    <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.ruoyi.system.domain.TbBasicDataConfig">
-        <id column="id" property="id"/>
-        <result column="basic_data_category_id" property="basicDataCategoryId"/>
-        <result column="type_name" property="typeName"/>
-        <result column="field_description" property="fieldDescription"/>
-        <result column="calculate_type" property="calculateType"/>
-        <result column="number_calculate_formula" property="numberCalculateFormula"/>
-        <result column="field_id_str" property="fieldIdStr"/>
-        <result column="status" property="status"/>
-        <result column="del_flag" property="delFlag"/>
-        <result column="create_by" property="createBy"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_by" property="updateBy"/>
-        <result column="update_time" property="updateTime"/>
-    </resultMap>
+  <!-- 通用查询映射结果 -->
+  <resultMap id="BaseResultMap" type="com.ruoyi.system.domain.TbBasicDataConfig">
+    <id column="id" property="id"/>
+    <result column="basic_data_category_id" property="basicDataCategoryId"/>
+    <result column="type_name" property="typeName"/>
+    <result column="field_description" property="fieldDescription"/>
+    <result column="calculate_type" property="calculateType"/>
+    <result column="number_calculate_formula" property="numberCalculateFormula"/>
+    <result column="field_id_str" property="fieldIdStr"/>
+    <result column="status" property="status"/>
+    <result column="del_flag" property="delFlag"/>
+    <result column="create_by" property="createBy"/>
+    <result column="create_time" property="createTime"/>
+    <result column="update_by" property="updateBy"/>
+    <result column="update_time" property="updateTime"/>
+  </resultMap>
 
-    <!-- 通用查询结果列 -->
-    <sql id="Base_Column_List">
-        id, basic_data_category_id, type_name, field_description, calculate_type, number_calculate_formula, field_id_str, status, del_flag, create_by, create_time, update_by, update_time
-    </sql>
-    <select id="scoreCalculatePage" resultType="com.ruoyi.system.vo.ScoreCalculateVO">
-        SELECT tdc.id,
-        tdc.type_name,
-        tdc.calculate_type
-        FROM tb_score ts
-        LEFT JOIN tb_basic_data tbd ON ts.basic_data_id = tbd.id
-        LEFT JOIN tb_basic_data_config tdc ON ts.basic_data_config_id = tdc.id
-        <where>
-            tbd.`quarter` = #{query.quarter}
-            <if test="query.typeName !=null and query.typeName != ''">
-                AND tdc.type_name LIKE CONCAT('%',#{query.typeName},'%')
-            </if>
-            <if test="query.type !=null">
-                AND tdc.calculate_type LIKE CONCAT('%',#{query.type},'%')
-            </if>
-        </where>
-        GROUP BY tdc.type_name
-    </select>
+  <!-- 通用查询结果列 -->
+  <sql id="Base_Column_List">
+    id, basic_data_category_id, type_name, field_description, calculate_type, number_calculate_formula, field_id_str, status, del_flag, create_by, create_time, update_by, update_time
+  </sql>
+  <select id="scoreCalculatePage" resultType="com.ruoyi.system.vo.ScoreCalculateVO">
+    SELECT tdc.id,
+    tdc.type_name,
+    tdc.calculate_type
+    FROM tb_score ts
+    LEFT JOIN tb_basic_data tbd ON ts.basic_data_id = tbd.id
+    LEFT JOIN tb_basic_data_config tdc ON ts.basic_data_config_id = tdc.id
+    <where>
+      tbd.`quarter` = #{query.quarter}
+      <if test="query.typeName !=null and query.typeName != ''">
+        AND tdc.type_name LIKE CONCAT('%',#{query.typeName},'%')
+      </if>
+      <if test="query.type !=null">
+        AND tdc.calculate_type LIKE CONCAT('%',#{query.type},'%')
+      </if>
+    </where>
+    GROUP BY tdc.type_name
+  </select>
+  <select id="queryPage" resultType="com.ruoyi.system.vo.BasicDataConfigVO">
+    SELECT tbdc.id,tbdc.type_name,tbdc.calculate_type,tbdc.status,tbdc2.basic_data_category_name AS
+    basicDataCategory
+    FROM tb_basic_data_config tbdc
+    LEFT JOIN tb_basic_data_category tbdc2 ON tbdc.basic_data_category_id = tbdc2.id
+    <where>
+      <if test="query.basicDataConfigName != null and query.basicDataConfigName !=''">
+        AND bdc.type_name LIKE CONCAT('%',#{query.basicDataConfigName},'%')
+      </if>
+      <if test="query.status !=null">
+        AND bdc.status = #{query.status}
+      </if>
+      <if test="query.calculateType !=null">
+        AND bdc.calculate_type = #{query.calculateType}
+      </if>
+    </where>
+  </select>
 
 </mapper>

--
Gitblit v1.7.1