From d68c61517a3a6d4ec4d47844c21bdc143f99cbab Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期三, 17 四月 2024 22:58:05 +0800
Subject: [PATCH] 大屏接口

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenConfigServiceImpl.java |   94 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java        |  118 +
 ruoyi-common/src/main/java/com/ruoyi/common/enums/FieldTypeEnum.java                        |   42 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreRankVO.java                             |   22 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/TransferPaymentScaleVO.java                  |   23 
 ruoyi-system/src/main/java/com/ruoyi/system/service/TbScoreService.java                     |   15 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataConfigServiceImpl.java  |    9 
 ruoyi-system/src/main/resources/mapper/system/TbBasicDataMapper.xml                         |   32 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java            |   12 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/update/BasicDataConfigUpdateDTO.java        |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskMapVO.java                               |   17 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskLevelVO.java                             |   22 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreDataVO.java                             |   22 
 ruoyi-system/src/main/java/com/ruoyi/system/query/ScoreCalculateDetailQuery.java            |    2 
 ruoyi-system/src/main/resources/mapper/system/TbBasicDataConfigMapper.xml                   |   10 
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java                 |    2 
 ruoyi-admin-dept/src/main/resources/application-dev.yml                                     |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FormalIndicatorsUpdDTO.java          |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java                       |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/query/BasicDataConfigQuery.java                 |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreDetailVO.java                           |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataConfigDetailVO.java                 |    3 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/service/ScreenService.java               |  458 ++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicDataConfig.java                   |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/TbScore.java                             |   12 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbDataScreenScoreMapper.java             |   32 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TaskUtil.java                       |   34 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbBasicDataMapper.java                   |   13 
 ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataService.java                 |    8 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/service/DepartmentRanking.java           |   27 
 ruoyi-system/src/main/resources/mapper/system/TbDataScreenScoreMapper.xml                   |   87 +
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreRateDataVO.java                         |   27 
 ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java                 |   94 +
 ruoyi-system/src/main/java/com/ruoyi/system/vo/DeptCalculateDetailVO.java                   |   23 
 ruoyi-admin/src/main/resources/application-prod.yml                                         |    2 
 ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java                |   68 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/OperLogVO.java                               |    4 
 ruoyi-admin/src/main/resources/application-dev.yml                                          |    6 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbScoreMapper.java                       |   18 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataFieldVO.java                        |    7 
 ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml                             |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbDeptController.java                |   62 
 ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java      |   15 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbDataScreenConfigController.java    |   12 
 ruoyi-system/src/main/java/com/ruoyi/system/query/DeptCalculateDetailQuery.java             |   22 
 ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenScoreService.java           |   36 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ProvinceStaticsVO.java                       |   26 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskAndTransferVO.java                       |   27 
 ruoyi-system/src/main/java/com/ruoyi/system/handler/TitleHandler.java                       |   54 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenConfigService.java          |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/BasicDataConfigDTO.java                     |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java                    |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDeptServiceImpl.java             |   62 
 ruoyi-admin/src/test/java/com/ruoyi/RuoYiManageApplicationTest.java                         |   61 +
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreCalculateDetailVO.java                  |   13 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java            |    6 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/screen/ScreenGeneralController.java  |   81 +
 ruoyi-system/src/main/java/com/ruoyi/system/query/CalculateDetailQuery.java                 |   30 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbScoreServiceImpl.java            |   62 +
 ruoyi-system/src/main/java/com/ruoyi/system/domain/TbDataScreenConfig.java                  |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/handler/CustomCellWriteHandler.java             |   73 +
 ruoyi-system/src/main/java/com/ruoyi/system/query/TransferPaymentScaleQuery.java            |   21 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldAndScoreDataVO.java                     |   37 
 ruoyi-admin/pom.xml                                                                         |  280 ++--
 ruoyi-system/src/main/java/com/ruoyi/system/listener/HistoryDataListener.java               |  258 +++-
 ruoyi-system/src/main/java/com/ruoyi/system/service/TbFieldService.java                     |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskCountVO.java                             |   17 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbBasicDataConfigController.java     |   17 
 /dev/null                                                                                   |   32 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/CalculateUtil.java                        |    1 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java            |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskRankingVO.java                           |   24 
 ruoyi-common/src/main/java/com/ruoyi/common/enums/AreaLevelEnum.java                        |   25 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/screen/ScreenInnerController.java    |  101 +
 ruoyi-system/src/main/java/com/ruoyi/system/vo/DataAnalysisVO.java                          |   61 +
 ruoyi-system/src/main/resources/mapper/system/TbScoreMapper.xml                             |  161 ++
 ruoyi-system/src/main/java/com/ruoyi/system/vo/DataScreenConfigVO.java                      |    3 
 ruoyi-common/src/main/java/com/ruoyi/common/enums/RiskLevelEnum.java                        |   28 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenScoreServiceImpl.java  |   43 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/DataScreenScoreVO.java                       |   41 
 80 files changed, 2,647 insertions(+), 555 deletions(-)

diff --git a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java b/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java
index edad794..a961a96 100644
--- a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java
+++ b/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java
@@ -18,10 +18,16 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
+import java.util.Objects;
 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.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;
 
 /**
  * @author mitao
@@ -48,14 +54,18 @@
     @ApiOperation("历史数据分页查询")
     public R<PageDTO<BasicDataVO>> list(@Validated @RequestBody HistoryDataQuery dto) {
         String areaCode = SecurityUtils.getLoginUser().getUser().getAreaCode();
-        Page<TbBasicData> page = tbBasicDataService.lambdaQuery().eq(TbBasicData::getDeptAreaCode, areaCode)
+        Page<TbBasicData> page = tbBasicDataService.lambdaQuery()
+                .eq(TbBasicData::getDeptAreaCode, areaCode)
                 .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED)
+                .between(Objects.nonNull(dto.getStartTime()) && Objects.nonNull(dto.getEndTime()),
+                        TbBasicData::getReportingTime, dto.getStartTime(), dto.getEndTime())
                 .page(new Page<>(dto.getPageNum(), dto.getPageSize()));
         return R.ok(PageDTO.of(page, BasicDataVO.class));
     }
 
     /**
      * 字段查看
+     *
      * @param id 基础数据id
      * @return R<BasicDataFieldVO>
      */
@@ -68,6 +78,7 @@
 
     /**
      * 得分计算
+     *
      * @param query 得分计算条件查询对象
      * @return R<PageDTO < ScoreVO>>
      */
diff --git a/ruoyi-admin-dept/src/main/resources/application-dev.yml b/ruoyi-admin-dept/src/main/resources/application-dev.yml
index ce519a0..927bbff 100644
--- a/ruoyi-admin-dept/src/main/resources/application-dev.yml
+++ b/ruoyi-admin-dept/src/main/resources/application-dev.yml
@@ -18,7 +18,7 @@
 # 开发环境配置
 server:
   # 服务器的HTTP端口,默认为8080
-  port: 8084
+  port: 8082
   servlet:
     # 应用的访问路径
     context-path: /
@@ -69,7 +69,7 @@
   devtools:
     restart:
       # 热部署开关
-      enabled: true
+      enabled: false
   # redis 配置
   redis:
     # 地址
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index efa2186..30cae4e 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -1,163 +1,163 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>ruoyi</artifactId>
-        <groupId>com.ruoyi</groupId>
-        <version>3.8.6</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-    <packaging>jar</packaging>
-    <artifactId>ruoyi-admin</artifactId>
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>ruoyi</artifactId>
+    <groupId>com.ruoyi</groupId>
+    <version>3.8.6</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <packaging>jar</packaging>
+  <artifactId>ruoyi-admin</artifactId>
 
-    <description>
-        web服务入口
-    </description>
+  <description>
+    web服务入口
+  </description>
 
-    <dependencies>
+  <dependencies>
 
-        <dependency>
-            <groupId>com.aliyun.oss</groupId>
-            <artifactId>aliyun-sdk-oss</artifactId>
-            <version>3.8.0</version>
-        </dependency>
-        <!-- spring-boot-devtools -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-devtools</artifactId>
-            <optional>true</optional> <!-- 表示依赖不会传递 -->
-        </dependency>
+    <dependency>
+      <groupId>com.aliyun.oss</groupId>
+      <artifactId>aliyun-sdk-oss</artifactId>
+      <version>3.8.0</version>
+    </dependency>
+    <!-- spring-boot-devtools -->
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-devtools</artifactId>
+      <optional>true</optional> <!-- 表示依赖不会传递 -->
+    </dependency>
 
-        <!-- swagger3-->
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-boot-starter</artifactId>
-        </dependency>
+    <!-- swagger3-->
+    <dependency>
+      <groupId>io.springfox</groupId>
+      <artifactId>springfox-boot-starter</artifactId>
+    </dependency>
 
-<!--        <dependency>-->
-<!--            <groupId>com.github.xiaoymin</groupId>-->
-<!--            <artifactId>swagger-bootstrap-ui</artifactId>-->
-<!--            <version>1.9.6</version>-->
-<!--        </dependency>-->
+    <!--        <dependency>-->
+    <!--            <groupId>com.github.xiaoymin</groupId>-->
+    <!--            <artifactId>swagger-bootstrap-ui</artifactId>-->
+    <!--            <version>1.9.6</version>-->
+    <!--        </dependency>-->
 
 
-        <!-- 防止进入swagger页面报类型转换错误,排除3.0.0中的引用,手动增加1.6.2版本 -->
-        <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-models</artifactId>
-            <version>1.6.2</version>
-        </dependency>
+    <!-- 防止进入swagger页面报类型转换错误,排除3.0.0中的引用,手动增加1.6.2版本 -->
+    <dependency>
+      <groupId>io.swagger</groupId>
+      <artifactId>swagger-models</artifactId>
+      <version>1.6.2</version>
+    </dependency>
 
-         <!-- Mysql驱动包 -->
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-        </dependency>
+    <!-- Mysql驱动包 -->
+    <dependency>
+      <groupId>mysql</groupId>
+      <artifactId>mysql-connector-java</artifactId>
+    </dependency>
 
-        <!-- 核心模块-->
-        <dependency>
-            <groupId>com.ruoyi</groupId>
-            <artifactId>ruoyi-framework</artifactId>
-        </dependency>
+    <!-- 核心模块-->
+    <dependency>
+      <groupId>com.ruoyi</groupId>
+      <artifactId>ruoyi-framework</artifactId>
+    </dependency>
 
-        <!-- 定时任务-->
-        <dependency>
-            <groupId>com.ruoyi</groupId>
-            <artifactId>ruoyi-quartz</artifactId>
-        </dependency>
+    <!-- 定时任务-->
+    <dependency>
+      <groupId>com.ruoyi</groupId>
+      <artifactId>ruoyi-quartz</artifactId>
+    </dependency>
 
-        <!-- 代码生成-->
-        <dependency>
-            <groupId>com.ruoyi</groupId>
-            <artifactId>ruoyi-generator</artifactId>
-        </dependency>
+    <!-- 代码生成-->
+    <dependency>
+      <groupId>com.ruoyi</groupId>
+      <artifactId>ruoyi-generator</artifactId>
+    </dependency>
 
-        <!--二维码开发工具集-->
-        <dependency>
-            <groupId>cn.hutool</groupId>
-            <artifactId>hutool-all</artifactId>
-        </dependency>
+    <!--二维码开发工具集-->
+    <dependency>
+      <groupId>cn.hutool</groupId>
+      <artifactId>hutool-all</artifactId>
+    </dependency>
 
-        <!-- zxing生成二维码 -->
-        <dependency>
-            <groupId>com.google.zxing</groupId>
-            <artifactId>core</artifactId>
-            <version>3.3.3</version>
-        </dependency>
+    <!-- zxing生成二维码 -->
+    <dependency>
+      <groupId>com.google.zxing</groupId>
+      <artifactId>core</artifactId>
+      <version>3.3.3</version>
+    </dependency>
 
-        <dependency>
-            <groupId>com.google.zxing</groupId>
-            <artifactId>javase</artifactId>
-            <version>3.3.3</version>
-        </dependency>
+    <dependency>
+      <groupId>com.google.zxing</groupId>
+      <artifactId>javase</artifactId>
+      <version>3.3.3</version>
+    </dependency>
+    
+    <!--        <dependency>-->
+    <!--            <groupId>org.apache.httpcomponents</groupId>-->
+    <!--            <artifactId>httpcore</artifactId>-->
+    <!--            <version>4.3.2</version>-->
+    <!--        </dependency>-->
 
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-test</artifactId>
-            <version>5.1.3.RELEASE</version>
-        </dependency>
-<!--        <dependency>-->
-<!--            <groupId>org.apache.httpcomponents</groupId>-->
-<!--            <artifactId>httpcore</artifactId>-->
-<!--            <version>4.3.2</version>-->
-<!--        </dependency>-->
+    <dependency>
+      <groupId>com.squareup.okhttp3</groupId>
+      <artifactId>okhttp</artifactId>
+      <version>4.9.3</version>
+    </dependency>
 
-        <dependency>
-            <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>okhttp</artifactId>
-            <version>4.9.3</version>
-        </dependency>
+    <dependency>
+      <groupId>com.alibaba</groupId>
+      <artifactId>fastjson</artifactId>
+      <version>1.2.78</version>
+    </dependency>
 
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>fastjson</artifactId>
-            <version>1.2.78</version>
-        </dependency>
+    <!-- 阿里云短信 -->
+    <dependency>
+      <groupId>com.aliyun</groupId>
+      <artifactId>dysmsapi20170525</artifactId>
+      <version>2.0.10</version>
+    </dependency>
 
-        <!-- 阿里云短信 -->
-        <dependency>
-            <groupId>com.aliyun</groupId>
-            <artifactId>dysmsapi20170525</artifactId>
-            <version>2.0.10</version>
-        </dependency>
+    <!-- JSR 303 规范验证包 -->
+    <dependency>
+      <groupId>org.hibernate</groupId>
+      <artifactId>hibernate-validator</artifactId>
+      <version>5.2.4.Final</version>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-test</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
 
-        <!-- JSR 303 规范验证包 -->
-        <dependency>
-            <groupId>org.hibernate</groupId>
-            <artifactId>hibernate-validator</artifactId>
-            <version>5.2.4.Final</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <version>2.5.15</version>
-                <configuration>
-                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>   
-                <groupId>org.apache.maven.plugins</groupId>   
-                <artifactId>maven-war-plugin</artifactId>   
-                <version>3.1.0</version>   
-                <configuration>
-                    <failOnMissingWebXml>false</failOnMissingWebXml>
-                    <warName>${project.artifactId}</warName>
-                </configuration>   
-           </plugin>   
-        </plugins>
-        <finalName>${project.artifactId}</finalName>
-    </build>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-maven-plugin</artifactId>
+        <version>2.5.15</version>
+        <configuration>
+          <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
+        </configuration>
+        <executions>
+          <execution>
+            <goals>
+              <goal>repackage</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-war-plugin</artifactId>
+        <version>3.1.0</version>
+        <configuration>
+          <failOnMissingWebXml>false</failOnMissingWebXml>
+          <warName>${project.artifactId}</warName>
+        </configuration>
+      </plugin>
+    </plugins>
+    <finalName>${project.artifactId}</finalName>
+  </build>
 
 </project>
\ No newline at end of file
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 7ef5bc1..3f64498 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
@@ -20,6 +20,7 @@
 import com.ruoyi.system.vo.BasicDataConfigVO;
 import com.ruoyi.system.vo.FieldVO;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
 import java.util.List;
 import lombok.RequiredArgsConstructor;
@@ -93,17 +94,19 @@
     }
 
     /**
-     * 分页条件查询字段
-     *
-     * @param query 字段条件查询对象
-     * @return R<PageDTO < FieldVO>>
+     * @param type
+     * @return
      */
     @GetMapping("/list-fields")
-    @ApiOperation(value = "查询状态为展示中字段列表", notes = "基础数据配置、大屏数据配置")
-    public R<List<FieldVO>> listFields() {
+    @ApiOperation(value = "查询状态为展示中的字段列表", notes = "基础数据配置、大屏数据配置")
+    @ApiImplicitParam(name = "type", value = "数字、文本、百分比", required = false, dataType = "string", paramType = "query", dataTypeClass = String.class)
+    public R<List<FieldVO>> listFields(String type) {
         try {
-            return R.ok(tbFieldService.listFields());
+            return R.ok(tbFieldService.listFields(type));
         } catch (Exception e) {
+            if (e instanceof ServiceException) {
+                return R.fail(e.getMessage());
+            }
             log.error("查询状态为展示中字段列表异常", e);
             return R.fail();
         }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbDataScreenConfigController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbDataScreenConfigController.java
index e20bc43..0e3d7a7 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbDataScreenConfigController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbDataScreenConfigController.java
@@ -80,10 +80,10 @@
 
     @PostMapping("/edit-data-indicators")
     @ApiOperation("编辑数据指标标级配置")
-    public R<DataScreenConfigVO> editDataIndicatorsConfig(
-            @Validated @RequestBody DataIndicatorsUpdDTO dto) {
+    public R<List<DataScreenConfigVO>> editDataIndicatorsConfig(
+            @Validated @RequestBody List<DataIndicatorsUpdDTO> dtoList) {
         try {
-            return R.ok(tbDataScreenConfigService.editDataIndicatorsConfig(dto));
+            return R.ok(tbDataScreenConfigService.editDataIndicatorsConfig(dtoList));
         } catch (Exception e) {
             if (e instanceof ServiceException) {
                 return R.fail(e.getMessage());
@@ -94,10 +94,10 @@
 
     @PostMapping("/edit-formal-indicators")
     @ApiOperation("编辑形式指标标级配置")
-    public R<DataScreenConfigVO> editFormalIndicatorsConfig(
-            @Validated @RequestBody FormalIndicatorsUpdDTO dto) {
+    public R<List<DataScreenConfigVO>> editFormalIndicatorsConfig(
+            @Validated @RequestBody List<FormalIndicatorsUpdDTO> dtoList) {
         try {
-            return R.ok(tbDataScreenConfigService.editFormalIndicatorsConfig(dto));
+            return R.ok(tbDataScreenConfigService.editFormalIndicatorsConfig(dtoList));
         } catch (Exception e) {
             if (e instanceof ServiceException) {
                 return R.fail(e.getMessage());
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbDeptController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbDeptController.java
index 4454b26..6910a20 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbDeptController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbDeptController.java
@@ -8,9 +8,12 @@
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.BeanUtils;
 import com.ruoyi.common.utils.CollUtils;
+import com.ruoyi.common.utils.EasyExcelUtil;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.system.dto.update.DeptFocusDTO;
 import com.ruoyi.system.dto.update.DeptUpdateDTO;
+import com.ruoyi.system.handler.CustomCellWriteHandler;
+import com.ruoyi.system.handler.TitleHandler;
 import com.ruoyi.system.query.DeptQuery;
 import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.system.service.TbDeptService;
@@ -19,17 +22,24 @@
 import com.ruoyi.web.controller.lisenter.DeptImportListener;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import java.io.InputStream;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+import javax.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+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.RequestPart;
+import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.InputStream;
-import java.net.URLEncoder;
-import java.util.Optional;
 
 /**
  * <p>
@@ -49,6 +59,7 @@
     private final HttpServletResponse response;
     private final TbDeptService tbDeptService;
     private final ISysUserService sysUserService;
+
     /**
      * 导入模板下载
      */
@@ -64,26 +75,35 @@
             // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
             String fileName = URLEncoder.encode("部门导入模板", "UTF-8");
             response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
-            EasyExcel.write(response.getOutputStream(), DeptExcel.class).sheet("模板").doWrite(CollUtils.emptyList());
+            Map<Integer, String[]> selectedMap = new HashMap<>();
+            selectedMap.put(3, new String[]{"省本级", "市", "开发区", "县"});
+            selectedMap.put(4, new String[]{"是", "否"});
+            EasyExcel.write(response.getOutputStream(), DeptExcel.class).sheet("模板")
+                    .registerWriteHandler(EasyExcelUtil.getStyleStrategy())
+                    .registerWriteHandler(new CustomCellWriteHandler())
+                    .registerWriteHandler(new TitleHandler(selectedMap))
+                    .doWrite(CollUtils.emptyList());
         } catch (Exception e) {
-            log.error("模板下载异常",e);
+            log.error("模板下载异常", e);
             throw new ServiceException("模板下载失败,请联系管理员!");
         }
     }
 
     /**
      * 导入
+     *
      * @param file 文件
      * @return R
      */
     @PostMapping("/import")
     @ApiOperation("导入")
     @Transactional(rollbackFor = Exception.class)
-    public R<Void> importExcel(@RequestPart("file")MultipartFile file) {
+    public R<Void> importExcel(@RequestPart("file") MultipartFile file) {
         try {
             //tbDeptService.importExcel(file);
             InputStream inputStream = file.getInputStream();
-            EasyExcel.read(inputStream, DeptExcel.class, new DeptImportListener(sysUserService)).sheet().doRead();
+            EasyExcel.read(inputStream, DeptExcel.class, new DeptImportListener(sysUserService))
+                    .sheet().doRead();
             inputStream.close();
         } catch (Exception e) {
             if (e instanceof ServiceException) {
@@ -97,8 +117,9 @@
 
     /**
      * 分页条件查询
+     *
      * @param query 查询条件
-     * @return R<PageVO<DeptVO>>
+     * @return R<PageVO < DeptVO>>
      */
     @PostMapping("/page")
     @ApiOperation("分页条件查询")
@@ -116,6 +137,7 @@
 
     /**
      * 根据id查询部门详情
+     *
      * @param userId 部门id
      * @return DeptVO
      */
@@ -123,9 +145,10 @@
     @ApiOperation("根据id查询部门详情")
     public R<DeptVO> getDetails(@RequestParam Long userId) {
         try {
-            Optional<SysUser> sysUser = sysUserService.lambdaQuery().eq(SysUser::getUserId, userId).oneOpt();
+            Optional<SysUser> sysUser = sysUserService.lambdaQuery().eq(SysUser::getUserId, userId)
+                    .oneOpt();
             if (sysUser.isPresent()) {
-                return R.ok(BeanUtils.copyBean(sysUser.get(),DeptVO.class));
+                return R.ok(BeanUtils.copyBean(sysUser.get(), DeptVO.class));
             }
         } catch (Exception e) {
             if (e instanceof ServiceException) {
@@ -139,12 +162,13 @@
 
     /**
      * 编辑
+     *
      * @param dto 部门更新实体
      * @return 响应成功
      */
     @PostMapping("/edit")
     @ApiOperation("编辑")
-    public R<Void> edit(@RequestBody DeptUpdateDTO dto){
+    public R<Void> edit(@RequestBody DeptUpdateDTO dto) {
         try {
             dto.setPassword(SecurityUtils.encryptPassword(dto.getPassword()));
             sysUserService.lambdaUpdate().set(SysUser::getAreaAlias, dto.getAreaAlias())
@@ -166,23 +190,25 @@
 
     /**
      * 重点关注
+     *
      * @param dto 部门更新实体
      * @return 响应成功
      */
     @PostMapping("/focus")
     @ApiOperation("重点关注")
-    public R<Object> focus(@RequestBody DeptFocusDTO dto){
-       tbDeptService.focus(dto);
+    public R<Object> focus(@RequestBody DeptFocusDTO dto) {
+        tbDeptService.focus(dto);
         return R.ok();
     }
 
     /**
      * 部门未上传季度数据提示
+     *
      * @return Void
      */
     @PostMapping("/reporting-message")
-    @ApiOperation(value = "部门未上传季度数据提示",notes = "code=200不展示,code=500 展示返回的msg")
-    public R<Void> reportingMessage(){
+    @ApiOperation(value = "部门未上传季度数据提示", notes = "code=200不展示,code=500 展示返回的msg")
+    public R<Void> reportingMessage() {
         return tbDeptService.reportingMessage();
     }
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/screen/ScreenController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/screen/ScreenController.java
deleted file mode 100644
index 5d32491..0000000
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/screen/ScreenController.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.ruoyi.web.controller.api.screen;
-
-import com.ruoyi.common.core.domain.R;
-import com.ruoyi.system.service.ISysUserService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author mitao
- * @date 2024/4/15
- */
-@Slf4j
-@RestController
-@RequestMapping("/screen")
-@RequiredArgsConstructor
-@Api(tags = "大屏接口")
-public class ScreenController {
-
-    private final ISysUserService sysUserService;
-
-    @ApiOperation("全省统计数")
-    @GetMapping("/province-statics")
-    public R<Integer> provinceStatics() {
-        return R.ok();
-    }
-    
-}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/screen/ScreenGeneralController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/screen/ScreenGeneralController.java
new file mode 100644
index 0000000..ddb09ae
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/screen/ScreenGeneralController.java
@@ -0,0 +1,81 @@
+package com.ruoyi.web.controller.api.screen;
+
+import com.ruoyi.common.basic.PageDTO;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.query.TransferPaymentScaleQuery;
+import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.system.vo.BasicDataVO;
+import com.ruoyi.system.vo.ProvinceStaticsVO;
+import com.ruoyi.system.vo.RiskAndTransferVO;
+import com.ruoyi.system.vo.RiskRankingVO;
+import com.ruoyi.system.vo.TransferPaymentScaleVO;
+import com.ruoyi.web.controller.service.ScreenService;
+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.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;
+
+/**
+ * @author mitao
+ * @date 2024/4/15
+ */
+@Slf4j
+@RestController
+@RequestMapping("/screen")
+@RequiredArgsConstructor
+@Api(tags = "大屏财政运行总体接口")
+public class ScreenGeneralController {
+
+    private final ISysUserService sysUserService;
+    private final ScreenService screenService;
+
+    @ApiOperation("全省统计数")
+    @GetMapping("/province-statics")
+    public R<ProvinceStaticsVO> provinceStatics() {
+        ProvinceStaticsVO vo = screenService.provinceStatics();
+        return R.ok(vo);
+    }
+
+    @ApiOperation(value = "风险等级分布占比/得分分布/转移支付规模")
+    @GetMapping("/risk-and-payment-scale")
+    public R<RiskAndTransferVO> getRiskAndTransfer() {
+        RiskAndTransferVO vo = null;
+        try {
+            vo = screenService.getRiskAndTransfer();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        return R.ok(vo);
+    }
+
+    @ApiOperation("转移支付规模季度列表")
+    @GetMapping("/quarter-list")
+    public R<List<BasicDataVO>> quarterList() {
+        return R.ok(screenService.quarterList());
+    }
+
+    @ApiOperation("转移支付规模分页查询")
+    @PostMapping("/transfer-payment-scale-page")
+    public R<PageDTO<TransferPaymentScaleVO>> transferPaymentScalePage(@Validated
+    @RequestBody TransferPaymentScaleQuery query) {
+        PageDTO<TransferPaymentScaleVO> page = screenService.transferPaymentScalePage(query);
+        return R.ok(page);
+    }
+
+    @ApiOperation("区/县风险排名前十")
+    @GetMapping("/risk-ranking")
+    public R<List<RiskRankingVO>> riskRanking() {
+        try {
+            return R.ok(screenService.riskRanking());
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/screen/ScreenInnerController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/screen/ScreenInnerController.java
new file mode 100644
index 0000000..f5b1100
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/screen/ScreenInnerController.java
@@ -0,0 +1,101 @@
+package com.ruoyi.web.controller.api.screen;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.BeanUtils;
+import com.ruoyi.system.query.CalculateDetailQuery;
+import com.ruoyi.system.query.DeptCalculateDetailQuery;
+import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.system.service.TbScoreService;
+import com.ruoyi.system.vo.CurrentFieldsDetailVO;
+import com.ruoyi.system.vo.DataAnalysisVO;
+import com.ruoyi.system.vo.DeptCalculateDetailVO;
+import com.ruoyi.system.vo.DeptVO;
+import com.ruoyi.system.vo.QuestionVO;
+import com.ruoyi.system.vo.ScoreCalculateDetailVO;
+import com.ruoyi.web.controller.service.ScreenService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+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.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;
+
+/**
+ * @author mitao
+ * @date 2024/4/15
+ */
+@Slf4j
+@RestController
+@RequestMapping("/screen")
+@RequiredArgsConstructor
+@Api(tags = "大屏分析评估系统接口")
+public class ScreenInnerController {
+
+    private final ISysUserService sysUserService;
+    private final ScreenService screenService;
+    private final TbScoreService tbScoreService;
+
+    @ApiOperation("部门列表-区县下拉框")
+    @GetMapping("/dept-list")
+    @ApiImplicitParam(name = "areaCode", value = "市级区划代码", dataType = "String", dataTypeClass = String.class)
+    public R<List<DeptVO>> deptList(String areaCode) {
+        List<SysUser> list = screenService.getCountyList(areaCode);
+        return R.ok(BeanUtils.copyList(list, DeptVO.class));
+    }
+
+    //    @ApiOperation(value = "监管发现问题")
+    @GetMapping("/questions")
+    public R<List<QuestionVO>> queryQuestions() {
+        try {
+            return R.ok(screenService.queryQuestions());
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @ApiOperation("数据分析系统页面数据")
+    @GetMapping("/data")
+    public R<DataAnalysisVO> getDataAnalysis(@RequestParam("areaCode") String areaCode) {
+        try {
+            return R.ok(screenService.getDataAnalysis(areaCode));
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @ApiOperation("获取点击字段弹窗数据")
+    @PostMapping("/fields-detail")
+    public R<ScoreCalculateDetailVO> fieldsDetail(
+            @Validated @RequestBody CalculateDetailQuery query) {
+        return R.ok(screenService.fieldsDetail(query));
+    }
+
+    @ApiOperation("获取点击部门得分弹窗数据")
+    @PostMapping("/dept-detail")
+    public R<List<DeptCalculateDetailVO>> deptDetail(
+            @Validated @RequestBody DeptCalculateDetailQuery query) {
+        try {
+            return R.ok(screenService.deptCalculateDetail(query));
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @ApiOperation("查看原始数据")
+    @GetMapping("/view-raw-data")
+    public R<CurrentFieldsDetailVO> viewRawData(@RequestParam("areaCode") String areaCode) {
+        try {
+            return R.ok(screenService.viewRawData(areaCode));
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/service/DepartmentRanking.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/service/DepartmentRanking.java
new file mode 100644
index 0000000..ba689b9
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/service/DepartmentRanking.java
@@ -0,0 +1,27 @@
+package com.ruoyi.web.controller.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+@Component
+public class DepartmentRanking {
+
+    public static final String TOTAL_SCORE_RANKING_KEY = "total_score_department_ranking";
+    public static final String DATA_ONE_SCORE_RANKING_KEY = "data_one_score_department_ranking";
+    public static final String DATA_TWO_SCORE_RANKING_KEY = "data_two_score_department_ranking";
+    public static final String DATA_THREE_SCORE_RANKING_KEY = "data_three_score_department_ranking";
+    public static final String DATA_FOUR_SCORE_RANKING_KEY = "data_four_score_department_ranking";
+
+    @Autowired
+    private RedisTemplate<String, String> redisTemplate;
+
+    public void addToScoreRanking(String key, String areaCode, double score) {
+        redisTemplate.opsForZSet().add(key, areaCode, score);
+    }
+
+    public Long getScoreRankByAreaCode(String key, String areaCode) {
+        return redisTemplate.opsForZSet()
+                .reverseRank(key, areaCode); // 0-based ranking
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/service/ScreenService.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/service/ScreenService.java
new file mode 100644
index 0000000..fba78f7
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/service/ScreenService.java
@@ -0,0 +1,458 @@
+package com.ruoyi.web.controller.service;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.basic.PageDTO;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.enums.AreaLevelEnum;
+import com.ruoyi.common.enums.DataScreenConfigEnum;
+import com.ruoyi.common.enums.ReportingStatusEnum;
+import com.ruoyi.common.enums.RiskLevelEnum;
+import com.ruoyi.common.enums.ShowStatusEnum;
+import com.ruoyi.common.enums.SubTypeEnum;
+import com.ruoyi.common.enums.UserTypeEnum;
+import com.ruoyi.common.utils.BeanUtils;
+import com.ruoyi.common.utils.CollUtils;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.system.domain.TbBasicData;
+import com.ruoyi.system.domain.TbBasicDataCategory;
+import com.ruoyi.system.domain.TbDataScreenScore;
+import com.ruoyi.system.domain.TbQuestion;
+import com.ruoyi.system.query.CalculateDetailQuery;
+import com.ruoyi.system.query.DeptCalculateDetailQuery;
+import com.ruoyi.system.query.TransferPaymentScaleQuery;
+import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.system.service.TbBasicDataCategoryService;
+import com.ruoyi.system.service.TbBasicDataConfigService;
+import com.ruoyi.system.service.TbBasicDataService;
+import com.ruoyi.system.service.TbDataScreenConfigService;
+import com.ruoyi.system.service.TbDataScreenScoreService;
+import com.ruoyi.system.service.TbQuestionService;
+import com.ruoyi.system.service.TbScoreService;
+import com.ruoyi.system.vo.BasicDataVO;
+import com.ruoyi.system.vo.CurrentFieldsDetailVO;
+import com.ruoyi.system.vo.DataAnalysisVO;
+import com.ruoyi.system.vo.DataScreenConfigVO;
+import com.ruoyi.system.vo.DataScreenScoreVO;
+import com.ruoyi.system.vo.DeptCalculateDetailVO;
+import com.ruoyi.system.vo.FieldAndScoreDataVO;
+import com.ruoyi.system.vo.ProvinceStaticsVO;
+import com.ruoyi.system.vo.QuestionVO;
+import com.ruoyi.system.vo.RiskAndTransferVO;
+import com.ruoyi.system.vo.RiskCountVO;
+import com.ruoyi.system.vo.RiskLevelVO;
+import com.ruoyi.system.vo.RiskMapVO;
+import com.ruoyi.system.vo.RiskRankingVO;
+import com.ruoyi.system.vo.ScoreCalculateDetailVO;
+import com.ruoyi.system.vo.ScoreDataVO;
+import com.ruoyi.system.vo.ScoreRankVO;
+import com.ruoyi.system.vo.ScoreRateDataVO;
+import com.ruoyi.system.vo.TransferPaymentScaleVO;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author mitao
+ * @date 2024/4/16
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class ScreenService {
+
+    private final ISysUserService sysUserService;
+    private final TbBasicDataService tbBasicDataService;
+    private final TbDataScreenScoreService tbDataScreenScoreService;
+    private final TbDataScreenConfigService tbDataScreenConfigService;
+    private final TbQuestionService tbQuestionService;
+    private final TbScoreService tbScoreService;
+    private final TbBasicDataConfigService tbBasicDataConfigService;
+    private final TbBasicDataCategoryService tbBasicDataCategoryService;
+
+    public ProvinceStaticsVO provinceStatics() {
+        ProvinceStaticsVO vo = new ProvinceStaticsVO();
+        int provinceCount = getCount("省本级");
+        int cityCount = getCount("市");
+        int developmentZonesCount = getCount("开发区");
+        int countyCount = getCount("县");
+
+        vo.setProvinceCount(provinceCount);
+        vo.setCityCount(cityCount);
+        vo.setDevelopmentZonesCount(developmentZonesCount);
+        vo.setCountyCount(countyCount);
+        return vo;
+    }
+
+    private int getCount(String level) {
+        return (int) sysUserService.count(
+                Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUserType, UserTypeEnum.DEPARTMENT)
+                        .eq(SysUser::getAreaLevel, level));
+    }
+
+    public PageDTO<TransferPaymentScaleVO> transferPaymentScalePage(
+            TransferPaymentScaleQuery query) {
+        Page<TransferPaymentScaleVO> pageVO = tbBasicDataService.transferPaymentScalePage(
+                new Page<TransferPaymentScaleVO>(query.getPageNum(), query.getPageSize()),
+                query.getQuarter());
+        return PageDTO.of(pageVO);
+    }
+
+    public List<BasicDataVO> quarterList() {
+        List<TbBasicData> list = tbBasicDataService.lambdaQuery().select(TbBasicData::getQuarter)
+                .groupBy(TbBasicData::getQuarter)
+                .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED).list();
+        return BeanUtils.copyList(list, BasicDataVO.class);
+    }
+
+    public RiskAndTransferVO getRiskAndTransfer() throws Exception {
+        String nowQuarter = DateUtils.getNowQuarter();
+        RiskAndTransferVO riskAndTransferVO = new RiskAndTransferVO();
+        //查询转移支付规模总额
+        List<TbBasicData> list = tbBasicDataService.lambdaQuery()
+                .select(TbBasicData::getTransferPaymentScale)
+                .eq(TbBasicData::getQuarter, nowQuarter)
+                .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED)
+                .list();
+        Optional<Double> reduce = list.stream()
+                .map(tbBasicData -> Double.parseDouble(tbBasicData.getTransferPaymentScale()))
+                .reduce(Double::sum);
+        riskAndTransferVO.setTransferPaymentScale(reduce.orElse(0D));
+        //查询风险等级设置
+        DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel();
+        List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel);
+        riskAndTransferVO.setRiskLevelVOList(riskLevelVOList);
+        RiskCountVO riskCountVO = new RiskCountVO();
+
+        List<TbDataScreenScore> dataScreenScoreList = tbDataScreenScoreService.selectRiskByQuarter(
+                nowQuarter, riskLevel.getId(), null);
+        for (RiskLevelVO vo : riskLevelVOList) {
+            long count = dataScreenScoreList.stream()
+                    .filter(item -> item.getScore() >= vo.getMin()
+                            && item.getScore() <= vo.getMax()).count();
+            if (vo.getRiskLevel().equals(RiskLevelEnum.L1)) {
+                riskCountVO.setNoRiskCount((int) count);
+            } else if (vo.getRiskLevel().equals(RiskLevelEnum.L2)) {
+                riskCountVO.setLowRiskCount((int) count);
+            } else if (vo.getRiskLevel().equals(RiskLevelEnum.L3)) {
+                riskCountVO.setMediumRiskCount((int) count);
+            } else if (vo.getRiskLevel().equals(RiskLevelEnum.L4)) {
+                riskCountVO.setHighRiskCount((int) count);
+            }
+        }
+        //TODO
+        riskCountVO.setNoRiskCount(50);
+        riskCountVO.setLowRiskCount(45);
+        riskCountVO.setMediumRiskCount(30);
+        riskCountVO.setHighRiskCount(80);
+        riskAndTransferVO.setRiskCountVO(riskCountVO);
+        //查询风险配置对应得分
+        List<RiskMapVO> riskMapVOList = tbDataScreenScoreService.queryScore4Map(nowQuarter,
+                riskLevel.getId());
+        riskAndTransferVO.setRiskMapVOList(riskMapVOList);
+        return riskAndTransferVO;
+    }
+
+    private List<RiskLevelVO> formatRiskLevel(DataScreenConfigVO riskLevel) {
+        String[] noRiskArr = riskLevel.getNoRisk().split("_");
+        String[] lowRiskArr = riskLevel.getLowRisk().split("_");
+        String[] mediumRiskArr = riskLevel.getMediumRisk().split("_");
+        String[] highRiskArr = riskLevel.getHighRisk().split("_");
+        return handleRiskLevel(noRiskArr, lowRiskArr, mediumRiskArr,
+                highRiskArr);
+    }
+
+    private List<RiskLevelVO> handleRiskLevel(String[] noRiskArr, String[] lowRiskArr,
+            String[] mediumRiskArr, String[] highRiskArr) {
+        List<RiskLevelVO> list = new ArrayList<>();
+        String min = noRiskArr[0];
+        String max = noRiskArr[1];
+        RiskLevelVO vo1 = new RiskLevelVO();
+        vo1.setRiskLevel(RiskLevelEnum.L1);
+        vo1.setMin(Double.parseDouble(min));
+        vo1.setMax(Double.parseDouble(max));
+        list.add(vo1);
+        min = lowRiskArr[0];
+        max = lowRiskArr[1];
+        RiskLevelVO vo2 = new RiskLevelVO();
+        vo2.setRiskLevel(RiskLevelEnum.L2);
+        vo2.setMin(Double.parseDouble(min));
+        vo2.setMax(Double.parseDouble(max));
+        list.add(vo2);
+        min = mediumRiskArr[0];
+        max = mediumRiskArr[1];
+        RiskLevelVO vo3 = new RiskLevelVO();
+        vo3.setRiskLevel(RiskLevelEnum.L3);
+        vo3.setMin(Double.parseDouble(min));
+        vo3.setMax(Double.parseDouble(max));
+        list.add(vo3);
+        min = highRiskArr[0];
+        max = highRiskArr[1];
+        RiskLevelVO vo4 = new RiskLevelVO();
+        vo4.setRiskLevel(RiskLevelEnum.L4);
+        vo4.setMin(Double.parseDouble(min));
+        vo4.setMax(Double.parseDouble(max));
+        list.add(vo4);
+        return list;
+    }
+
+    public List<RiskRankingVO> riskRanking() throws Exception {
+        DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel();
+        List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel);
+        List<RiskRankingVO> voList = tbDataScreenScoreService.queryRiskRanking(riskLevel.getId(),
+                DateUtils.getNowQuarter(), AreaLevelEnum.COUNTY);
+        int rank = 1;
+        for (RiskRankingVO riskRankingVO : voList) {
+            riskRankingVO.setRank(rank++);
+            for (RiskLevelVO vo : riskLevelVOList) {
+                if (vo.getRiskLevel().equals(RiskLevelEnum.L1)
+                        && riskRankingVO.getScore() <= vo.getMin()) {
+                    riskRankingVO.setRiskLevel(vo.getRiskLevel().getCode());
+                }
+                if (riskRankingVO.getScore() >= vo.getMin()
+                        && riskRankingVO.getScore() <= vo.getMax()) {
+                    riskRankingVO.setRiskLevel(vo.getRiskLevel().getCode());
+                }
+                if (vo.getRiskLevel().equals(RiskLevelEnum.L4)
+                        && riskRankingVO.getScore() >= vo.getMax()) {
+                    riskRankingVO.setRiskLevel(vo.getRiskLevel().getCode());
+                }
+            }
+        }
+        return voList;
+    }
+
+    public List<QuestionVO> queryQuestions() throws Exception {
+        List<TbQuestion> list = tbQuestionService.lambdaQuery()
+                .eq(TbQuestion::getQuarter, DateUtils.getNowQuarter()).list();
+        return BeanUtils.copyList(list, QuestionVO.class);
+    }
+
+    public DataAnalysisVO getDataAnalysis(String areaCode) throws Exception {
+        DataAnalysisVO dataAnalysisVO = new DataAnalysisVO();
+        //查询得分排名
+        ScoreRankVO scoreRankVO = tbScoreService.queryRankAndScoreByAreaCode(areaCode);
+        if (Objects.isNull(scoreRankVO)) {
+            return dataAnalysisVO;
+        }
+        dataAnalysisVO.setRank(scoreRankVO.getRank());
+        dataAnalysisVO.setScore(scoreRankVO.getScore());
+        String nowQuarter = DateUtils.getNowQuarter();
+        //查询问题
+        List<TbQuestion> list = tbQuestionService.lambdaQuery()
+                .eq(TbQuestion::getQuarter, nowQuarter).list();
+        List<QuestionVO> questionVOS = BeanUtils.copyList(list, QuestionVO.class);
+        dataAnalysisVO.setQuestions(questionVOS);
+        SysUser user = sysUserService.lambdaQuery()
+                .eq(SysUser::getUserType, UserTypeEnum.DEPARTMENT)
+                .eq(SysUser::getAreaCode, areaCode).one();
+        if (Objects.isNull(user)) {
+            return dataAnalysisVO;
+        }
+        dataAnalysisVO.setAreaName(user.getDeptName());
+        //查询风险得分
+        DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel();
+        List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel);
+        List<DataScreenScoreVO> thisYearScore = tbDataScreenScoreService.queryScoreByAreaAndYear(
+                areaCode, riskLevel.getId(), 1);
+        Optional<Double> thisYear = thisYearScore.stream().map(DataScreenScoreVO::getScore)
+                .reduce(Double::sum);
+        dataAnalysisVO.setYearScore(thisYear.orElse(0D));
+        List<DataScreenScoreVO> lastYearScore = tbDataScreenScoreService.queryScoreByAreaAndYear(
+                areaCode, riskLevel.getId(), 2);
+        Optional<Double> lastYear = lastYearScore.stream().map(DataScreenScoreVO::getScore)
+                .reduce(Double::sum);
+        dataAnalysisVO.setLastYearScore(lastYear.orElse(0D));
+        //查询风险等级
+        List<TbDataScreenScore> dataScreenScoreList = tbDataScreenScoreService.selectRiskByQuarter(
+                nowQuarter,
+                riskLevel.getId(), areaCode);
+        for (TbDataScreenScore tbDataScreenScore : dataScreenScoreList) {
+            for (RiskLevelVO vo : riskLevelVOList) {
+                if (vo.getRiskLevel().equals(RiskLevelEnum.L1)
+                        && tbDataScreenScore.getScore() <= vo.getMin()) {
+                    dataAnalysisVO.setRiskLevel(vo.getRiskLevel().getCode());
+                }
+                if (tbDataScreenScore.getScore() >= vo.getMin()
+                        && tbDataScreenScore.getScore() <= vo.getMax()) {
+                    dataAnalysisVO.setRiskLevel(vo.getRiskLevel().getCode());
+                }
+                if (vo.getRiskLevel().equals(RiskLevelEnum.L4)
+                        && tbDataScreenScore.getScore() >= vo.getMax()) {
+                    dataAnalysisVO.setRiskLevel(vo.getRiskLevel().getCode());
+                }
+            }
+        }
+        //查询形式指标得分
+        List<ScoreDataVO> scoreDataVOList = new ArrayList<>();
+        handleDataIndicators(areaCode, scoreDataVOList);
+        dataAnalysisVO.setScoreDataList(scoreDataVOList);
+        //查询数据指标得分
+        List<ScoreRateDataVO> scoreRateDataVOList = new ArrayList<>();
+        handleDataIndicators(areaCode, scoreRateDataVOList, nowQuarter);
+        dataAnalysisVO.setScoreRateDataList(scoreRateDataVOList);
+        //查询大屏下方字段列表
+        List<TbBasicDataCategory> categoryList = tbBasicDataCategoryService.lambdaQuery()
+                .eq(TbBasicDataCategory::getStatus, ShowStatusEnum.SHOW).last("limit 4").list();
+        List<FieldAndScoreDataVO> voList = tbBasicDataService.selectBasicDataFieldsConfig(areaCode,
+                nowQuarter);
+        if (categoryList.isEmpty()) {
+            dataAnalysisVO.setScoreRateDataListOne(CollUtils.emptyList());
+            dataAnalysisVO.setScoreRateDataListTwo(CollUtils.emptyList());
+            dataAnalysisVO.setScoreRateDataListThree(CollUtils.emptyList());
+            dataAnalysisVO.setScoreRateDataListFour(CollUtils.emptyList());
+        } else {
+            int size = categoryList.size();
+            for (int i = 0; i < 4; i++) {
+                List<FieldAndScoreDataVO> dataList;
+                if (i < size) {
+                    dataList = getFieldAndScoreData(voList,
+                            categoryList.get(i).getBasicDataCategoryName());
+                } else {
+                    dataList = CollUtils.emptyList();
+                }
+                switch (i) {
+                    case 0:
+                        dataAnalysisVO.setScoreRateDataListOne(dataList);
+                        break;
+                    case 1:
+                        dataAnalysisVO.setScoreRateDataListTwo(dataList);
+                        break;
+                    case 2:
+                        dataAnalysisVO.setScoreRateDataListThree(dataList);
+                        break;
+                    case 3:
+                        dataAnalysisVO.setScoreRateDataListFour(dataList);
+                        break;
+                }
+            }
+        }
+        return dataAnalysisVO;
+    }
+
+    private void handleDataIndicators(String areaCode, List<ScoreDataVO> scoreDataVOList) {
+        List<DataScreenScoreVO> formalIndicatorsYear = tbDataScreenScoreService.selectIndicators(
+                areaCode, null, DataScreenConfigEnum.FORMAL_INDICATORS, 1);
+        if (CollUtils.isNotEmpty(formalIndicatorsYear)) {
+            //形式指标一
+            for (SubTypeEnum value : SubTypeEnum.values()) {
+                ScoreDataVO scoreDataVO = new ScoreDataVO();
+                scoreDataVO.setSubType(value);
+                List<DataScreenScoreVO> formalIndicators = formalIndicatorsYear.stream()
+                        .filter(item -> item.getSubType().equals(value)).collect(
+                                Collectors.toList());
+                scoreDataVO.setMaxScore(formalIndicators.get(0).getMaxScore());
+                Optional<Double> formalIndicatorsYearScore = formalIndicators.stream()
+                        .map(DataScreenScoreVO::getScore)
+                        .reduce(Double::sum);
+                scoreDataVO.setScore(formalIndicatorsYearScore.orElse(0D));
+                List<DataScreenScoreVO> formalIndicatorsListYear = tbDataScreenScoreService.selectIndicators(
+                        areaCode, null, DataScreenConfigEnum.FORMAL_INDICATORS, 2);
+                List<DataScreenScoreVO> formalIndicatorsLastYear = formalIndicatorsListYear.stream()
+                        .filter(item -> item.getSubType().equals(value)).collect(
+                                Collectors.toList());
+                Optional<Double> formalIndicatorsListYearScore = formalIndicatorsLastYear.stream()
+                        .map(DataScreenScoreVO::getScore)
+                        .reduce(Double::sum);
+                scoreDataVO.setLastScore(formalIndicatorsListYearScore.orElse(0D));
+                scoreDataVOList.add(scoreDataVO);
+            }
+        } else {
+            for (SubTypeEnum value : SubTypeEnum.values()) {
+                ScoreDataVO scoreDataVO = new ScoreDataVO();
+                scoreDataVO.setScore(0D);
+                scoreDataVO.setLastScore(0D);
+                scoreDataVO.setSubType(value);
+                scoreDataVOList.add(scoreDataVO);
+            }
+        }
+
+    }
+
+    private void handleDataIndicators(String areaCode, List<ScoreRateDataVO> scoreRateDataVOList,
+            String nowQuarter) {
+        List<DataScreenScoreVO> dataIndicatorsListYear = tbDataScreenScoreService.selectIndicators(
+                areaCode, nowQuarter, DataScreenConfigEnum.DATA_INDICATORS, null);
+        if (CollUtils.isNotEmpty(dataIndicatorsListYear)) {
+            for (SubTypeEnum value : SubTypeEnum.values()) {
+                ScoreRateDataVO scoreRateDataVO = new ScoreRateDataVO();
+                List<DataScreenScoreVO> formalIndicators = dataIndicatorsListYear.stream()
+                        .filter(item -> item.getSubType().equals(value)).collect(
+                                Collectors.toList());
+                if (CollUtils.isNotEmpty(formalIndicators)) {
+                    DataScreenScoreVO dataScreenScoreVO = formalIndicators.get(0);
+                    scoreRateDataVO.setScore(dataScreenScoreVO.getScore());
+                    scoreRateDataVO.setScoreRate(dataScreenScoreVO.getScoreRate());
+                    scoreRateDataVO.setSubType(value);
+                    Integer rank = tbDataScreenScoreService.getRankByScore(
+                            dataScreenScoreVO.getScore(),
+                            dataScreenScoreVO.getSubType(), areaCode, nowQuarter,
+                            DataScreenConfigEnum.DATA_INDICATORS);
+                    scoreRateDataVO.setRank(rank);
+                    scoreRateDataVOList.add(scoreRateDataVO);
+                } else {
+                    scoreRateDataVO.setScore(0D);
+                    scoreRateDataVO.setScoreRate(0D);
+                    scoreRateDataVO.setSubType(value);
+                    scoreRateDataVO.setRank(0);
+                    scoreRateDataVOList.add(scoreRateDataVO);
+                }
+            }
+        } else {
+            for (SubTypeEnum value : SubTypeEnum.values()) {
+                ScoreRateDataVO scoreRateDataVO = new ScoreRateDataVO();
+                scoreRateDataVO.setScore(0D);
+                scoreRateDataVO.setScoreRate(0D);
+                scoreRateDataVO.setSubType(value);
+                scoreRateDataVO.setRank(0);
+                scoreRateDataVOList.add(scoreRateDataVO);
+            }
+        }
+    }
+
+    private List<FieldAndScoreDataVO> getFieldAndScoreData(List<FieldAndScoreDataVO> voList,
+            String basicDataCategoryName) {
+        return voList.stream()
+                .filter(item -> item.getBasicDataCategoryName()
+                        .equals(basicDataCategoryName))
+                .collect(Collectors.toList());
+    }
+
+    public List<DeptCalculateDetailVO> deptCalculateDetail(DeptCalculateDetailQuery query)
+            throws Exception {
+        return tbScoreService.deptCalculateDetail(query, DateUtils.getNowQuarter());
+    }
+
+    public CurrentFieldsDetailVO viewRawData(String areaCode) throws Exception {
+        Optional<TbBasicData> basicDataOptional = tbBasicDataService.lambdaQuery()
+                .eq(TbBasicData::getDeptAreaCode, areaCode)
+                .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED)
+                .eq(TbBasicData::getQuarter, DateUtils.getNowQuarter()).oneOpt();
+        if (basicDataOptional.isPresent()) {
+            return tbBasicDataService.fieldsDetails(basicDataOptional.get().getId()).getData();
+        } else {
+            return new CurrentFieldsDetailVO();
+        }
+    }
+
+    public ScoreCalculateDetailVO fieldsDetail(CalculateDetailQuery query) {
+        List<SysUser> countyList = getCountyList(query.getCityAreaCode());
+        return tbScoreService.fieldsDetail(query, countyList);
+    }
+
+    public List<SysUser> getCountyList(String areaCode) {
+        String cityCode = areaCode.substring(0, 4);
+        List<SysUser> list = sysUserService.lambdaQuery()
+                .select(SysUser::getAreaCode, SysUser::getAreaName, SysUser::getAreaAlias,
+                        SysUser::getUserId).eq(SysUser::getUserType,
+                        UserTypeEnum.DEPARTMENT)
+                .ne(SysUser::getAreaCode, areaCode)
+                .likeRight(SysUser::getAreaCode, cityCode).list();
+        return list;
+    }
+}
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 150a61f..9507aa3 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
@@ -216,9 +216,9 @@
     public AjaxResult getUserCount() {
         Map<String, Integer> map = new HashMap<>();
 
-        Integer userCountSum = userService.selectCount(null);
-        Integer normalCount = userService.selectCount(0);// 正常
-        Integer stopCount = userService.selectCount(1);// 停用
+        Integer userCountSum = userService.selectCountByStatus(null);
+        Integer normalCount = userService.selectCountByStatus(0);// 正常
+        Integer stopCount = userService.selectCountByStatus(1);// 停用
 
         map.put("all", userCountSum);
         map.put("normal", normalCount);
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TaskUtil.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TaskUtil.java
index 5e0b8cd..aaf1f37 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TaskUtil.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TaskUtil.java
@@ -1,10 +1,17 @@
 package com.ruoyi.web.controller.tool;
 
 import com.ruoyi.common.core.redis.RedisCache;
-import com.ruoyi.system.service.ISysRoleService;
 import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.system.service.TbBasicDataService;
+import com.ruoyi.system.service.TbDataScreenConfigService;
+import com.ruoyi.system.service.TbDataScreenScoreService;
+import com.ruoyi.system.service.TbQuestionService;
+import com.ruoyi.system.service.TbScoreService;
+import com.ruoyi.system.vo.ScoreRankVO;
+import com.ruoyi.web.controller.service.DepartmentRanking;
+import java.util.List;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
@@ -14,14 +21,17 @@
  */
 @Slf4j
 @Component
+@RequiredArgsConstructor
 public class TaskUtil {
 
-    @Autowired
-    private ISysRoleService roleService;
-    @Autowired
-    private ISysUserService userService;
-    @Autowired
-    private RedisCache redisCache;
+    private final RedisCache redisCache;
+    private final DepartmentRanking departmentRanking;
+    private final ISysUserService sysUserService;
+    private final TbBasicDataService tbBasicDataService;
+    private final TbDataScreenScoreService tbDataScreenScoreService;
+    private final TbDataScreenConfigService tbDataScreenConfigService;
+    private final TbQuestionService tbQuestionService;
+    private final TbScoreService tbScoreService;
 
     @Scheduled(fixedRate = 1000 * 60)
     public void message() {
@@ -85,5 +95,11 @@
     public void taskDayOne() {
     }
 
-
+    /**
+     * 更新排行榜数据
+     */
+    @Scheduled(cron = "0 0 1 * * ? ")
+    public void ranking() {
+        List<ScoreRankVO> list = tbScoreService.queryTotalScoreList();
+    }
 }
diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml
index 415812d..45a3ea1 100644
--- a/ruoyi-admin/src/main/resources/application-dev.yml
+++ b/ruoyi-admin/src/main/resources/application-dev.yml
@@ -18,7 +18,7 @@
 # 开发环境配置
 server:
   # 服务器的HTTP端口,默认为8080
-  port: 8083
+  port: 8081
   servlet:
     # 应用的访问路径
     context-path: /
@@ -70,7 +70,7 @@
   devtools:
     restart:
       # 热部署开关
-      enabled: true
+      enabled: false
   # redis 配置
   redis:
     # 地址
@@ -103,7 +103,7 @@
     druid:
       # 主库数据源
       master:
-        url: jdbc:mysql://192.168.110.188:3306/financialdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://192.168.110.188:3306/financialdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
         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
diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml
index 6f780c2..ea77975 100644
--- a/ruoyi-admin/src/main/resources/application-prod.yml
+++ b/ruoyi-admin/src/main/resources/application-prod.yml
@@ -103,7 +103,7 @@
     druid:
       # 主库数据源
       master:
-        url: jdbc:mysql://localhost:3306/financialdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://localhost:3306/financialdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
         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
diff --git a/ruoyi-admin/src/test/java/com/ruoyi/RuoYiManageApplicationTest.java b/ruoyi-admin/src/test/java/com/ruoyi/RuoYiManageApplicationTest.java
new file mode 100644
index 0000000..2bfda76
--- /dev/null
+++ b/ruoyi-admin/src/test/java/com/ruoyi/RuoYiManageApplicationTest.java
@@ -0,0 +1,61 @@
+package com.ruoyi;
+
+import static com.ruoyi.web.controller.service.DepartmentRanking.DATA_ONE_SCORE_RANKING_KEY;
+import static com.ruoyi.web.controller.service.DepartmentRanking.TOTAL_SCORE_RANKING_KEY;
+
+import com.ruoyi.web.controller.service.DepartmentRanking;
+import javax.annotation.Resource;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+/**
+ * @author mitao
+ * @date 2024/4/17
+ */
+@SpringBootTest(classes = RuoYiManageApplication.class)
+public class RuoYiManageApplicationTest {
+
+    @Resource
+    private DepartmentRanking departmentRanking;
+
+    @Test
+    public void test() {
+        departmentRanking.addToScoreRanking(TOTAL_SCORE_RANKING_KEY, "area1", 50);
+        departmentRanking.addToScoreRanking(TOTAL_SCORE_RANKING_KEY, "area2", 50);
+        departmentRanking.addToScoreRanking(TOTAL_SCORE_RANKING_KEY, "area3", 50);
+
+        departmentRanking.addToScoreRanking(DATA_ONE_SCORE_RANKING_KEY, "area1", 50);
+        departmentRanking.addToScoreRanking(DATA_ONE_SCORE_RANKING_KEY, "area2", 80);
+        departmentRanking.addToScoreRanking(DATA_ONE_SCORE_RANKING_KEY, "area3", 90);
+
+        Long score1Rank1 = departmentRanking.getScoreRankByAreaCode(TOTAL_SCORE_RANKING_KEY,
+                "area1");
+        Long score1Rank2 = departmentRanking.getScoreRankByAreaCode(TOTAL_SCORE_RANKING_KEY,
+                "area2");
+        Long score1Rank3 = departmentRanking.getScoreRankByAreaCode(TOTAL_SCORE_RANKING_KEY,
+                "area3");
+        Long score2Rank1 = departmentRanking.getScoreRankByAreaCode(DATA_ONE_SCORE_RANKING_KEY,
+                "area1");
+        Long score2Rank2 = departmentRanking.getScoreRankByAreaCode(DATA_ONE_SCORE_RANKING_KEY,
+                "area2");
+        Long score2Rank3 = departmentRanking.getScoreRankByAreaCode(DATA_ONE_SCORE_RANKING_KEY,
+                "area3");
+
+        if (score1Rank1 != null && score2Rank1 != null) {
+            System.out.println("Area2's score2 rank: " + (score1Rank1
+                    + 1)); // Convert 0-based to 1-based ranking
+            System.out.println("Area2's score2 rank: " + (score1Rank2
+                    + 1)); // Convert 0-based to 1-based ranking
+            System.out.println("Area2's score2 rank: " + (score1Rank3
+                    + 1)); // Convert 0-based to 1-based ranking
+            System.out.println("Area2's score2 rank: " + (score2Rank1
+                    + 1)); // Convert 0-based to 1-based ranking
+            System.out.println("Area2's score2 rank: " + (score2Rank2
+                    + 1)); // Convert 0-based to 1-based ranking
+            System.out.println("Area2's score2 rank: " + (score2Rank3
+                    + 1)); // Convert 0-based to 1-based ranking
+        } else {
+            System.out.println("Area2 not found in the ranking.");
+        }
+    }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
index b789bea..14f4024 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -3,7 +3,6 @@
 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.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.domain.BaseEntity;
@@ -118,7 +117,6 @@
      */
     @ApiModelProperty(value = "删除标志(0代表存在 2代表删除)")
     @TableField("del_flag")
-    @TableLogic
     private String delFlag;
 
     /**
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/AreaLevelEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/AreaLevelEnum.java
new file mode 100644
index 0000000..a95e170
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/AreaLevelEnum.java
@@ -0,0 +1,25 @@
+package com.ruoyi.common.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum AreaLevelEnum {
+    PROVINCE(1, "省本级"),
+    CITY(2, "市"),
+    DEVELOPMENT_ZONES(3, "开发区"),
+    COUNTY(3, "县");
+
+    private final Integer code;
+    private final String desc;
+
+    public static AreaLevelEnum getEnumByCode(Integer code) {
+        for (AreaLevelEnum e : AreaLevelEnum.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/enums/FieldTypeEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/FieldTypeEnum.java
index 2ecbdc2..5ea5530 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/FieldTypeEnum.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/FieldTypeEnum.java
@@ -2,25 +2,35 @@
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.fasterxml.jackson.annotation.JsonValue;
-import lombok.Getter;
 import lombok.AllArgsConstructor;
+import lombok.Getter;
+
 @Getter
 @AllArgsConstructor
 public enum FieldTypeEnum {
-	NUMBER(1, "数字"),
-	TEXT(2, "文本"),
-	PERCENTAGE(3, "百分比");
-	@EnumValue
-	private final Integer code;
-	@JsonValue
-	private final String desc;
+    NUMBER(1, "数字"),
+    TEXT(2, "文本"),
+    PERCENTAGE(3, "百分比");
+    @EnumValue
+    private final Integer code;
+    @JsonValue
+    private final String desc;
 
-	public static FieldTypeEnum getEnumByCode(Integer code) {
-		for (FieldTypeEnum e : FieldTypeEnum.values()) {
-			if (e.code.equals(code)) {
-				return e;
-			}
-		}
-		return null;
-	}
+    public static FieldTypeEnum getEnumByCode(Integer code) {
+        for (FieldTypeEnum e : FieldTypeEnum.values()) {
+            if (e.code.equals(code)) {
+                return e;
+            }
+        }
+        return null;
+    }
+
+    public static FieldTypeEnum getEnumByDesc(String desc) {
+        for (FieldTypeEnum e : FieldTypeEnum.values()) {
+            if (e.desc.equals(desc)) {
+                return e;
+            }
+        }
+        return null;
+    }
 } 
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/RiskLevelEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/RiskLevelEnum.java
new file mode 100644
index 0000000..6a6e816
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/RiskLevelEnum.java
@@ -0,0 +1,28 @@
+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 RiskLevelEnum {
+    L1("R1", "低风险"),
+    L2("R2", "一般风险"),
+    L3("R3", "较高风险"),
+    L4("R4", "高风险");
+    @EnumValue
+    private final String code;
+    @JsonValue
+    private final String desc;
+
+    public static RiskLevelEnum getEnumByCode(String code) {
+        for (RiskLevelEnum e : RiskLevelEnum.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 585ee1e..4b9057e 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
@@ -31,6 +31,7 @@
     }
 
     public static double calculate(String expression, Map<String, Object> value) {
+        
         expression = formatExpression(expression);
         // 创建 JEXL 引擎
         JexlEngine jexl = new JexlBuilder().create();
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
index e7cee1e..59aaed5 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -1,5 +1,9 @@
 package com.ruoyi.framework.config;
 
+import com.ruoyi.framework.config.properties.PermitAllUrlProperties;
+import com.ruoyi.framework.security.filter.JwtAuthenticationTokenFilter;
+import com.ruoyi.framework.security.handle.AuthenticationEntryPointImpl;
+import com.ruoyi.framework.security.handle.LogoutSuccessHandlerImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.http.HttpMethod;
@@ -15,25 +19,21 @@
 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
 import org.springframework.security.web.authentication.logout.LogoutFilter;
 import org.springframework.web.filter.CorsFilter;
-import com.ruoyi.framework.config.properties.PermitAllUrlProperties;
-import com.ruoyi.framework.security.filter.JwtAuthenticationTokenFilter;
-import com.ruoyi.framework.security.handle.AuthenticationEntryPointImpl;
-import com.ruoyi.framework.security.handle.LogoutSuccessHandlerImpl;
 
 /**
  * spring security配置
- * 
+ *
  * @author ruoyi
  */
 @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
-public class SecurityConfig extends WebSecurityConfigurerAdapter
-{
+public class SecurityConfig extends WebSecurityConfigurerAdapter {
+
     /**
      * 自定义用户认证逻辑
      */
     @Autowired
     private UserDetailsService userDetailsService;
-    
+
     /**
      * 认证失败处理类
      */
@@ -51,7 +51,7 @@
      */
     @Autowired
     private JwtAuthenticationTokenFilter authenticationTokenFilter;
-    
+
     /**
      * 跨域过滤器
      */
@@ -72,29 +72,21 @@
      */
     @Bean
     @Override
-    public AuthenticationManager authenticationManagerBean() throws Exception
-    {
+    public AuthenticationManager authenticationManagerBean() throws Exception {
         return super.authenticationManagerBean();
     }
 
     /**
-     * anyRequest          |   匹配所有请求路径
-     * access              |   SpringEl表达式结果为true时可以访问
-     * anonymous           |   匿名可以访问
-     * denyAll             |   用户不能访问
-     * fullyAuthenticated  |   用户完全认证可以访问(非remember-me下自动登录)
-     * hasAnyAuthority     |   如果有参数,参数表示权限,则其中任何一个权限可以访问
-     * hasAnyRole          |   如果有参数,参数表示角色,则其中任何一个角色可以访问
-     * hasAuthority        |   如果有参数,参数表示权限,则其权限可以访问
-     * hasIpAddress        |   如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问
-     * hasRole             |   如果有参数,参数表示角色,则其角色可以访问
-     * permitAll           |   用户可以任意访问
-     * rememberMe          |   允许通过remember-me登录的用户访问
-     * authenticated       |   用户登录后可访问
+     * anyRequest          |   匹配所有请求路径 access              |   SpringEl表达式结果为true时可以访问 anonymous |
+     *  匿名可以访问 denyAll             |   用户不能访问 fullyAuthenticated  | 用户完全认证可以访问(非remember-me下自动登录)
+     * hasAnyAuthority     |   如果有参数,参数表示权限,则其中任何一个权限可以访问 hasAnyRole |   如果有参数,参数表示角色,则其中任何一个角色可以访问
+     * hasAuthority        |   如果有参数,参数表示权限,则其权限可以访问 hasIpAddress        |
+     * 如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问 hasRole             | 如果有参数,参数表示角色,则其角色可以访问 permitAll
+     *    |   用户可以任意访问 rememberMe          | 允许通过remember-me登录的用户访问 authenticated       |
+     * 用户登录后可访问
      */
     @Override
-    protected void configure(HttpSecurity httpSecurity) throws Exception
-    {
+    protected void configure(HttpSecurity httpSecurity) throws Exception {
         // 注解标记允许匿名访问的url
         ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry = httpSecurity.authorizeRequests();
         permitAllUrl.getUrls().forEach(url -> registry.antMatchers(url).permitAll());
@@ -111,13 +103,20 @@
                 // 过滤请求
                 .authorizeRequests()
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
-                .antMatchers("/getPrivacyAgreement/{agreementType}","/applet/queryProtocolConfigByType","/applet/login","/login","/applet/queryProtocolConfigByType", "/register","/applet/getCode","/applet/loginCode","/applet/changepwd", "/captchaImage","/getCode","/loginCode","/operations/getBySingleNum/**",
-                        "/user/getUserInfoByNumber/**","/genAccount","/loginPwd").permitAll()
+                .antMatchers("/getPrivacyAgreement/{agreementType}",
+                        "/applet/queryProtocolConfigByType", "/applet/login", "/login",
+                        "/applet/queryProtocolConfigByType", "/register", "/applet/getCode",
+                        "/applet/loginCode", "/applet/changepwd", "/captchaImage", "/getCode",
+                        "/loginCode", "/operations/getBySingleNum/**",
+                        "/user/getUserInfoByNumber/**", "/genAccount", "/loginPwd", "/screen/**")
+                .permitAll()
                 //放行所有
                 //.antMatchers("/*/**").permitAll()
                 // 静态资源,可匿名访问
-                .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
-                .antMatchers("/swagger-ui.html","/doc.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
+                .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js",
+                        "/profile/**").permitAll()
+                .antMatchers("/swagger-ui.html", "/doc.html", "/swagger-resources/**",
+                        "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
                 // 除上面外的所有请求全部需要鉴权认证
                 .anyRequest().authenticated()
                 .and()
@@ -125,7 +124,8 @@
         // 添加Logout filter
         httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
         // 添加JWT filter
-        httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
+        httpSecurity.addFilterBefore(authenticationTokenFilter,
+                UsernamePasswordAuthenticationFilter.class);
         // 添加CORS filter
         httpSecurity.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class);
         httpSecurity.addFilterBefore(corsFilter, LogoutFilter.class);
@@ -135,8 +135,7 @@
      * 强散列哈希加密实现
      */
     @Bean
-    public BCryptPasswordEncoder bCryptPasswordEncoder()
-    {
+    public BCryptPasswordEncoder bCryptPasswordEncoder() {
         return new BCryptPasswordEncoder();
     }
 
@@ -144,8 +143,7 @@
      * 身份认证接口
      */
     @Override
-    protected void configure(AuthenticationManagerBuilder auth) throws Exception
-    {
+    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
         auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
     }
 }
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 105a856..821c75e 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
@@ -59,6 +59,10 @@
     @TableField("field_id_str")
     private String fieldIdStr;
 
+    @TableField("max_score")
+    @ApiModelProperty(value = "最大分值")
+    private Double maxScore;
+
     @ApiModelProperty(value = "状态(0=展示 1=隐藏)")
     @TableField("status")
     private ShowStatusEnum status;
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 46d76e3..9295646 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
@@ -35,6 +35,9 @@
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
+    @ApiModelProperty(value = "最大分值")
+    private Double maxScore;
+    
     @ApiModelProperty(value = "配置类型(1=风险等级设置 2=数据指标设置 3=形式指标设置)")
     @TableField("type")
     private DataScreenConfigEnum type;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbScore.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbScore.java
index 3357184..969337a 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbScore.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbScore.java
@@ -48,17 +48,17 @@
     @TableField("del_flag")
     private String delFlag;
 
-    @ApiModelProperty(value = "创建者")
-    @TableField(value = "create_by", fill = FieldFill.INSERT)
-    private String createBy;
+//    @ApiModelProperty(value = "创建者")
+//    @TableField(value = "create_by", fill = FieldFill.INSERT)
+//    private String createBy;
 
     @ApiModelProperty(value = "创建时间")
     @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 = "更新者")
+//    @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
+//    private String updateBy;
 
     @ApiModelProperty(value = "更新时间")
     @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
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 41ab9dd..e5bd60d 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
@@ -37,6 +37,9 @@
     @ApiModelProperty(value = "字段id ", notes = "文本统计 和百分比统计的的字段id")
     private String fieldIdStr;
 
+    @ApiModelProperty(value = "最大分值")
+    private Double maxScore;
+
     @ApiModelProperty(value = "计算公式")
     private List<CalculateItemDTO> calculateItemList;
 
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 b438fc1..0748540 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
@@ -38,9 +38,11 @@
     private CalculateTypeEnum calculateType;
 
     @ApiModelProperty(value = "字段id (多个id使用 ',' 拼接)")
-    @NotBlank(message = "字段id不能为空")
     private String fieldIdStr;
 
+    @ApiModelProperty(value = "最大分值")
+    private Double maxScore;
+
     @ApiModelProperty(value = "计算公式", notes = "计算类型为数字计算,配置内容使用该字段接收;公式中字段的格式为:field_字段id,e.g:field_1,field_2等。")
     private List<CalculateItemDTO> calculateItemList;
 
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 e2ac5a3..ba96c79 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
@@ -21,6 +21,9 @@
     @ApiModelProperty(value = "配置类型子类型(1=指标一 2=指标二 3=指标三 4=指标四)")
     private SubTypeEnum subType;
 
+    @ApiModelProperty(value = "最大分值")
+    private Double maxScore;
+
     @ApiModelProperty(value = "得分计算规则")
     private List<CalculateItemDTO> calculateItemList;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/handler/CustomCellWriteHandler.java b/ruoyi-system/src/main/java/com/ruoyi/system/handler/CustomCellWriteHandler.java
new file mode 100644
index 0000000..4782f07
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/handler/CustomCellWriteHandler.java
@@ -0,0 +1,73 @@
+package com.ruoyi.system.handler;
+
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.Head;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.poi.ss.usermodel.Cell;
+
+/**
+ * @author jamin
+ * @date 2020/7/29 11:28 设置自适应列宽
+ */
+public class CustomCellWriteHandler extends AbstractColumnWidthStyleStrategy {
+
+    private Map<Integer, Map<Integer, Integer>> CACHE = new HashMap<>();
+
+    @Override
+    protected void setColumnWidth(WriteSheetHolder writeSheetHolder,
+            List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex,
+            Boolean isHead) {
+        boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);
+        if (needSetWidth) {
+            Map<Integer, Integer> maxColumnWidthMap = CACHE.get(writeSheetHolder.getSheetNo());
+            if (maxColumnWidthMap == null) {
+                maxColumnWidthMap = new HashMap<>();
+                CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);
+            }
+
+            Integer columnWidth = this.dataLength(cellDataList, cell, isHead);
+            if (columnWidth >= 0) {
+                if (columnWidth > 255) {
+                    columnWidth = 255;
+                }
+
+                Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex());
+                if (maxColumnWidth == null || columnWidth > maxColumnWidth) {
+                    maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth);
+                    writeSheetHolder.getSheet()
+                            .setColumnWidth(cell.getColumnIndex(), columnWidth * 256);
+                }
+
+            }
+        }
+    }
+
+    private Integer dataLength(List<WriteCellData<?>> cellDataList, Cell cell, Boolean isHead) {
+        if (isHead) {
+            return cell.getStringCellValue().getBytes().length;
+        } else {
+            WriteCellData cellData = cellDataList.get(0);
+            CellDataTypeEnum type = cellData.getType();
+            if (type == null) {
+                return -1;
+            } else {
+                switch (type) {
+                    case STRING:
+                        return cellData.getStringValue().getBytes().length;
+                    case BOOLEAN:
+                        return cellData.getBooleanValue().toString().getBytes().length;
+                    case NUMBER:
+                        return cellData.getNumberValue().toString().getBytes().length;
+                    default:
+                        return -1;
+                }
+            }
+        }
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/handler/TitleHandler.java b/ruoyi-system/src/main/java/com/ruoyi/system/handler/TitleHandler.java
new file mode 100644
index 0000000..a26a5a1
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/handler/TitleHandler.java
@@ -0,0 +1,54 @@
+package com.ruoyi.system.handler;
+
+import com.alibaba.excel.write.handler.SheetWriteHandler;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
+import java.util.Map;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.usermodel.DataValidation;
+import org.apache.poi.ss.usermodel.DataValidationConstraint;
+import org.apache.poi.ss.usermodel.DataValidationHelper;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.util.CellRangeAddressList;
+
+@Slf4j
+public class TitleHandler implements SheetWriteHandler {
+
+    /**
+     * 下拉框值
+     */
+    private Map<Integer, String[]> dropDownMap;
+
+    /**
+     * 多少行有下拉
+     */
+    private final static Integer rowSize = 200;
+
+    public TitleHandler(Map<Integer, String[]> dropDownMap) {
+        this.dropDownMap = dropDownMap;
+    }
+
+    @Override
+    public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder,
+            WriteSheetHolder writeSheetHolder) {
+
+    }
+
+    @Override
+    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder,
+            WriteSheetHolder writeSheetHolder) {
+        Sheet sheet = writeSheetHolder.getSheet();
+        DataValidationHelper helper = sheet.getDataValidationHelper();
+
+        dropDownMap.forEach((celIndex, strings) -> {
+            // 区间设置
+            CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(1, rowSize,
+                    celIndex, celIndex);
+            // 下拉内容
+            DataValidationConstraint constraint = helper.createExplicitListConstraint(strings);
+            DataValidation dataValidation = helper.createValidation(constraint,
+                    cellRangeAddressList);
+            sheet.addValidationData(dataValidation);
+        });
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java b/ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java
index f1d9ff1..a170461 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java
@@ -10,6 +10,7 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.google.common.collect.Lists;
 import com.ruoyi.common.enums.CalculateTypeEnum;
+import com.ruoyi.common.enums.DataScreenConfigEnum;
 import com.ruoyi.common.enums.FieldInputTypeEnum;
 import com.ruoyi.common.enums.FieldTypeEnum;
 import com.ruoyi.common.enums.ReportingStatusEnum;
@@ -23,6 +24,7 @@
 import com.ruoyi.system.domain.TbBasicDataConfig;
 import com.ruoyi.system.domain.TbBasicDataConfigDetail;
 import com.ruoyi.system.domain.TbBasicDataField;
+import com.ruoyi.system.domain.TbDataScreenScore;
 import com.ruoyi.system.domain.TbField;
 import com.ruoyi.system.domain.TbScore;
 import com.ruoyi.system.dto.CalculateItemDTO;
@@ -30,14 +32,18 @@
 import com.ruoyi.system.service.TbBasicDataConfigService;
 import com.ruoyi.system.service.TbBasicDataFieldService;
 import com.ruoyi.system.service.TbBasicDataService;
+import com.ruoyi.system.service.TbDataScreenConfigService;
+import com.ruoyi.system.service.TbDataScreenScoreService;
 import com.ruoyi.system.service.TbFieldService;
 import com.ruoyi.system.service.TbScoreService;
+import com.ruoyi.system.vo.DataScreenConfigVO;
 import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 import lombok.extern.slf4j.Slf4j;
 
@@ -57,13 +63,16 @@
     public TbBasicDataConfigService tbBasicDataConfigService;
     public TbBasicDataConfigDetailService tbBasicDataConfigDetailService;
     public TbScoreService tbScoreService;
+    public TbDataScreenScoreService tbDataScreenScoreService;
+    public TbDataScreenConfigService tbDataScreenConfigService;
 
     public BasicDataListener(TbBasicDataService tbBasicDataService,
             TbFieldService tbFieldService,
             String areaCode, TbBasicDataFieldService tbBasicDataFieldService,
             TbBasicDataConfigService tbBasicDataConfigService,
             TbBasicDataConfigDetailService tbBasicDataConfigDetailService,
-            TbScoreService tbScoreService) {
+            TbScoreService tbScoreService, TbDataScreenScoreService tbDataScreenScoreService,
+            TbDataScreenConfigService tbDataScreenConfigService) {
         this.tbBasicDataService = tbBasicDataService;
         this.tbFieldService = tbFieldService;
         this.areaCode = areaCode;
@@ -71,6 +80,8 @@
         this.tbBasicDataConfigService = tbBasicDataConfigService;
         this.tbBasicDataConfigDetailService = tbBasicDataConfigDetailService;
         this.tbScoreService = tbScoreService;
+        this.tbDataScreenConfigService = tbDataScreenConfigService;
+        this.tbDataScreenScoreService = tbDataScreenScoreService;
     }
 
     @Override
@@ -215,7 +226,10 @@
         tbBasicData.setStatus(ReportingStatusEnum.FILLED);
         tbBasicDataService.updateById(tbBasicData);
         log.info(String.format("%s导入基础数据成功!", dataMap.get(0)));
-        calculateScore(tbBasicData, fields);
+        CompletableFuture.runAsync(() -> {
+            calculateScore(tbBasicData, fields);
+            calculateScreenScore(tbBasicData, fields);
+        });
     }
 
     private void calculateScore(TbBasicData tbBasicData, List<TbBasicDataField> fields) {
@@ -254,6 +268,9 @@
                 String numberCalculateFormulaStr = calculateItemDTOS.stream()
                         .map(CalculateItemDTO::getContent).collect(Collectors.joining());
                 double score = CalculateUtil.calculate(numberCalculateFormulaStr);
+                if (Objects.nonNull(item.getMaxScore()) && score > item.getMaxScore()) {
+                    score = item.getMaxScore();
+                }
                 TbScore tbScore = new TbScore();
                 tbScore.setBasicDataId(tbBasicData.getId());
                 tbScore.setScore(score);
@@ -285,7 +302,7 @@
                         if (CalculateTypeEnum.PERCENTAGE.equals(
                                 textAndPercentage.getCalculateType())) {
                             for (Map.Entry<String, String> stringStringEntry : scoreMap.entrySet()) {
-                                String[] split = stringStringEntry.getKey().split("-");
+                                String[] split = stringStringEntry.getKey().split("_");
                                 double v = Double.parseDouble(
                                         textAndPercentageData.getFieldValue());
                                 double min = Double.parseDouble(split[0]);
@@ -294,6 +311,10 @@
                                     tbScore.setScore(
                                             Double.parseDouble(stringStringEntry.getValue()));
                                 }
+                            }
+                            //如果都不匹配,得分为0
+                            if (Objects.isNull(tbScore.getScore())) {
+                                tbScore.setScore(0D);
                             }
                             tbScore.setBasicDataId(tbBasicData.getId());
                             tbScore.setBasicDataConfigId(textAndPercentage.getId());
@@ -305,4 +326,71 @@
         }
         tbScoreService.saveBatch(scoreList);
     }
+
+    private void calculateScreenScore(TbBasicData tbBasicData,
+            List<TbBasicDataField> tbBasicDataFields) {
+        Map<Long, TbBasicDataField> basicDataFieldMap = tbBasicDataFields.stream()
+                .collect(Collectors.toMap(TbBasicDataField::getFieldId, e -> e));
+        DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel();
+        List<DataScreenConfigVO> dataIndicatorsConfig = tbDataScreenConfigService.getIndicatorsConfig(
+                DataScreenConfigEnum.DATA_INDICATORS);
+        List<DataScreenConfigVO> formalIndicatorsConfig = tbDataScreenConfigService.getIndicatorsConfig(
+                DataScreenConfigEnum.FORMAL_INDICATORS);
+        handleScoreCalculate(tbBasicData, riskLevel, basicDataFieldMap);
+        for (DataScreenConfigVO config : dataIndicatorsConfig) {
+            handleScoreCalculate(tbBasicData, config, basicDataFieldMap);
+        }
+        for (DataScreenConfigVO config : formalIndicatorsConfig) {
+            handleScoreCalculate(tbBasicData, config, basicDataFieldMap);
+        }
+    }
+
+    private void handleScoreCalculate(TbBasicData tbBasicData, DataScreenConfigVO vo,
+            Map<Long, TbBasicDataField> basicDataFieldMap) {
+        TbDataScreenScore tbDataScreenScore = tbDataScreenScoreService.lambdaQuery()
+                .eq(TbDataScreenScore::getBasicDataId, tbBasicData.getId()).eq(
+                        TbDataScreenScore::getDataScreenConfigId, vo.getId()).one();
+        if (Objects.isNull(tbDataScreenScore)) {
+            tbDataScreenScore = new TbDataScreenScore();
+            tbDataScreenScore.setDataScreenConfigId(vo.getId());
+            tbDataScreenScore.setBasicDataId(tbBasicData.getId());
+            tbDataScreenScore.setDeptAreaCode(tbBasicData.getDeptAreaCode());
+        }
+        List<CalculateItemDTO> scoreCalculateList = vo.getScoreCalculateList();
+        for (CalculateItemDTO item : scoreCalculateList) {
+            if (item.getValueType().equals(ValueTypeEnum.FIELD)) {
+                TbBasicDataField basicDataField = basicDataFieldMap.get(
+                        Long.valueOf(item.getContent()));
+                if (Objects.nonNull(basicDataField)) {
+                    item.setContent(basicDataField.getFieldValue());
+                }
+            }
+        }
+        String calculateFormulaStr = scoreCalculateList.stream()
+                .map(CalculateItemDTO::getContent).collect(Collectors.joining());
+        double score = CalculateUtil.calculate(calculateFormulaStr);
+        if (vo.getType().equals(DataScreenConfigEnum.FORMAL_INDICATORS)) {
+            if (Objects.nonNull(vo.getMaxScore()) && score > vo.getMaxScore()) {
+                score = vo.getMaxScore();
+            }
+        }
+        tbDataScreenScore.setScore(score);
+        if (vo.getType().equals(DataScreenConfigEnum.DATA_INDICATORS)) {
+            List<CalculateItemDTO> rateCalculateList = vo.getRateCalculateList();
+            for (CalculateItemDTO calculateItemDTO : rateCalculateList) {
+                if (calculateItemDTO.getValueType().equals(ValueTypeEnum.FIELD)) {
+                    TbBasicDataField basicDataField = basicDataFieldMap.get(
+                            Long.valueOf(calculateItemDTO.getContent()));
+                    if (Objects.nonNull(basicDataField)) {
+                        calculateItemDTO.setContent(basicDataField.getFieldValue());
+                    }
+                }
+            }
+            String calculateRateFormulaStr = rateCalculateList.stream()
+                    .map(CalculateItemDTO::getContent).collect(Collectors.joining());
+            double scoreRate = CalculateUtil.calculate(calculateRateFormulaStr);
+            tbDataScreenScore.setScoreRate(scoreRate);
+        }
+        tbDataScreenScoreService.saveOrUpdate(tbDataScreenScore);
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/listener/HistoryDataListener.java b/ruoyi-system/src/main/java/com/ruoyi/system/listener/HistoryDataListener.java
index 4a4ed90..de4ba56 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/listener/HistoryDataListener.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/listener/HistoryDataListener.java
@@ -4,17 +4,20 @@
 import com.alibaba.excel.event.AnalysisEventListener;
 import com.alibaba.excel.util.ListUtils;
 import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.google.common.collect.Lists;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.enums.CalculateTypeEnum;
+import com.ruoyi.common.enums.DataScreenConfigEnum;
 import com.ruoyi.common.enums.FieldInputTypeEnum;
 import com.ruoyi.common.enums.FieldTypeEnum;
 import com.ruoyi.common.enums.ReportingStatusEnum;
 import com.ruoyi.common.enums.ShowStatusEnum;
 import com.ruoyi.common.enums.UserTypeEnum;
+import com.ruoyi.common.enums.ValueTypeEnum;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.CalculateUtil;
 import com.ruoyi.common.utils.CollUtils;
@@ -23,22 +26,27 @@
 import com.ruoyi.system.domain.TbBasicDataConfig;
 import com.ruoyi.system.domain.TbBasicDataConfigDetail;
 import com.ruoyi.system.domain.TbBasicDataField;
+import com.ruoyi.system.domain.TbDataScreenScore;
 import com.ruoyi.system.domain.TbField;
 import com.ruoyi.system.domain.TbScore;
+import com.ruoyi.system.dto.CalculateItemDTO;
 import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.system.service.TbBasicDataConfigDetailService;
 import com.ruoyi.system.service.TbBasicDataConfigService;
 import com.ruoyi.system.service.TbBasicDataFieldService;
 import com.ruoyi.system.service.TbBasicDataService;
+import com.ruoyi.system.service.TbDataScreenConfigService;
+import com.ruoyi.system.service.TbDataScreenScoreService;
 import com.ruoyi.system.service.TbFieldService;
 import com.ruoyi.system.service.TbScoreService;
+import com.ruoyi.system.vo.DataScreenConfigVO;
 import java.time.LocalDate;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 import lombok.extern.slf4j.Slf4j;
 
@@ -57,6 +65,8 @@
     public TbScoreService tbScoreService;
     public ISysUserService sysUserService;
     public String quarter;
+    public TbDataScreenScoreService tbDataScreenScoreService;
+    public TbDataScreenConfigService tbDataScreenConfigService;
     private List<Map<Integer, String>> cachedDataList = ListUtils.newArrayListWithExpectedSize(
             BATCH_COUNT);
 
@@ -65,7 +75,9 @@
             TbBasicDataFieldService tbBasicDataFieldService,
             TbBasicDataConfigService tbBasicDataConfigService,
             TbBasicDataConfigDetailService tbBasicDataConfigDetailService,
-            TbScoreService tbScoreService, ISysUserService sysUserService, String quarter) {
+            TbScoreService tbScoreService, ISysUserService sysUserService, String quarter,
+            TbDataScreenScoreService tbDataScreenScoreService,
+            TbDataScreenConfigService tbDataScreenConfigService) {
         this.tbBasicDataService = tbBasicDataService;
         this.tbFieldService = tbFieldService;
         this.tbBasicDataFieldService = tbBasicDataFieldService;
@@ -74,6 +86,8 @@
         this.tbScoreService = tbScoreService;
         this.sysUserService = sysUserService;
         this.quarter = quarter;
+        this.tbDataScreenConfigService = tbDataScreenConfigService;
+        this.tbDataScreenScoreService = tbDataScreenScoreService;
     }
 
     @Override
@@ -96,8 +110,7 @@
     @Override
     public void doAfterAllAnalysed(AnalysisContext context) {
         try {
-            List<TbBasicData> tbBasicDataList = saveData();
-            calculateScore(tbBasicDataList);
+            saveData();
         } catch (Exception e) {
             if (e instanceof ServiceException) {
                 throw new ServiceException(e.getMessage());
@@ -110,8 +123,7 @@
     /**
      * 加上存储数据库
      */
-    private List<TbBasicData> saveData() {
-        List<TbBasicData> tbBasicDataList = new ArrayList<>();
+    private void saveData() {
         // 查询需要填写的动态字段
         List<TbField> fieldList =
                 tbFieldService.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list();
@@ -193,10 +205,12 @@
             tbBasicDataFieldService.saveBatch(fields);
             tbBasicData.setStatus(ReportingStatusEnum.FILLED);
             tbBasicDataService.updateById(tbBasicData);
-            tbBasicDataList.add(tbBasicData);
+            CompletableFuture.runAsync(() -> {
+                calculateScore(tbBasicData, fields);
+                calculateScreenScore(tbBasicData, fields);
+            });
         }
         log.info(String.format("%s导入基础数据成功!", JSON.toJSONString(dataMapList)));
-        return tbBasicDataList;
     }
 
     /**
@@ -274,96 +288,168 @@
     /**
      * 计算得分
      *
-     * @param tbBasicDataList 基础数据集合
+     * @param tbBasicData
+     * @param fields
      */
-    private void calculateScore(List<TbBasicData> tbBasicDataList) {
+    private void calculateScore(TbBasicData tbBasicData, List<TbBasicDataField> fields) {
         List<TbScore> scoreList = new ArrayList<>();
-        for (TbBasicData tbBasicData : tbBasicDataList) {
-            //计算得分
-            List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery()
-                    .eq(TbBasicDataConfig::getStatus, ShowStatusEnum.SHOW).list();
-            if (CollectionUtils.isEmpty(list)) {
-                throw new ServiceException("计算得分失败,平台未配置得分计算规则");
-            }
-            List<TbBasicDataConfig> numCalculates = list.stream()
-                    .filter(item -> CalculateTypeEnum.NUMBER.equals(item.getCalculateType()))
-                    .collect(Collectors.toList());
-            List<TbBasicDataConfig> textAndPercentages = list.stream()
-                    .filter(item -> !CalculateTypeEnum.NUMBER.equals(item.getCalculateType()))
-                    .collect(Collectors.toList());
-            tbScoreService.remove(
-                    new LambdaQueryWrapper<TbScore>().eq(TbScore::getBasicDataId,
-                            tbBasicData.getId()));
-            if (CollUtils.isNotEmpty(numCalculates)) {
-                for (TbBasicDataConfig item : numCalculates) {
-                    Map<String, Object> valueMap = new HashMap<>();
-                    String numberCalculateFormula = item.getNumberCalculateFormula();
-                    Map<String, Integer> fieldsAndValue = CalculateUtil.getFieldsAndValue(
-                            numberCalculateFormula);
-                    for (Map.Entry<String, Integer> stringIntegerEntry : fieldsAndValue.entrySet()) {
-                        Optional<TbBasicDataField> tbBasicDataField = tbBasicDataFieldService.lambdaQuery()
-                                .eq(TbBasicDataField::getBasicDataId, tbBasicData.getId())
-                                .eq(TbBasicDataField::getFieldId, stringIntegerEntry.getValue())
-                                .oneOpt();
-                        tbBasicDataField.ifPresent(
-                                basicDataField -> valueMap.put(stringIntegerEntry.getKey(),
-                                        basicDataField.getFieldValue()));
+        //计算得分
+        List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery()
+                .eq(TbBasicDataConfig::getStatus, ShowStatusEnum.SHOW).list();
+        if (CollectionUtils.isEmpty(list)) {
+            throw new ServiceException("计算得分失败,平台未配置得分计算规则");
+        }
+        List<TbBasicDataConfig> numCalculates = list.stream()
+                .filter(item -> CalculateTypeEnum.NUMBER.equals(item.getCalculateType()))
+                .collect(Collectors.toList());
+        List<TbBasicDataConfig> textAndPercentages = list.stream()
+                .filter(item -> !CalculateTypeEnum.NUMBER.equals(item.getCalculateType()))
+                .collect(Collectors.toList());
+        tbScoreService.remove(
+                new LambdaQueryWrapper<TbScore>().eq(TbScore::getBasicDataId, tbBasicData.getId()));
+        Map<Long, TbBasicDataField> basicDataFieldMap = fields.stream()
+                .collect(Collectors.toMap(TbBasicDataField::getFieldId, e -> e));
+        if (CollUtils.isNotEmpty(numCalculates)) {
+            for (TbBasicDataConfig item : numCalculates) {
+                String numberCalculateFormula = item.getNumberCalculateFormula();
+                List<CalculateItemDTO> calculateItemDTOS = JSONArray.parseArray(
+                        numberCalculateFormula,
+                        CalculateItemDTO.class);
+                for (CalculateItemDTO dto : calculateItemDTOS) {
+                    if (ValueTypeEnum.FIELD.equals(dto.getValueType())) {
+                        TbBasicDataField tbBasicDataField = basicDataFieldMap.get(
+                                Long.valueOf(dto.getContent()));
+                        if (Objects.nonNull(tbBasicDataField)) {
+                            dto.setContent(tbBasicDataField.getFieldValue());
+                        }
                     }
-                    double score = CalculateUtil.calculate(numberCalculateFormula, valueMap);
-                    TbScore tbScore = new TbScore();
-                    tbScore.setBasicDataId(tbBasicData.getId());
-                    tbScore.setScore(score);
-                    tbScore.setBasicDataConfigId(item.getId());
-                    scoreList.add(tbScore);
                 }
+                String numberCalculateFormulaStr = calculateItemDTOS.stream()
+                        .map(CalculateItemDTO::getContent).collect(Collectors.joining());
+                double score = CalculateUtil.calculate(numberCalculateFormulaStr);
+                if (Objects.nonNull(item.getMaxScore()) && score > item.getMaxScore()) {
+                    score = item.getMaxScore();
+                }
+                TbScore tbScore = new TbScore();
+                tbScore.setBasicDataId(tbBasicData.getId());
+                tbScore.setScore(score);
+                tbScore.setBasicDataConfigId(item.getId());
+                scoreList.add(tbScore);
             }
-            if (CollUtils.isNotEmpty(textAndPercentages)) {
-                for (TbBasicDataConfig textAndPercentage : textAndPercentages) {
-                    TbScore tbScore = new TbScore();
-                    List<TbBasicDataConfigDetail> details = tbBasicDataConfigDetailService.lambdaQuery()
-                            .eq(TbBasicDataConfigDetail::getBasicDataConfigId,
-                                    textAndPercentage.getId())
-                            .list();
-                    Map<String, String> scoreMap = details.stream().collect(
-                            Collectors.toMap(TbBasicDataConfigDetail::getKey,
-                                    TbBasicDataConfigDetail::getValue));
-                    if (CollectionUtils.isNotEmpty(details)) {
-                        Optional<TbBasicDataField> tbBasicDataFieldOptional = tbBasicDataFieldService.lambdaQuery()
-                                .eq(TbBasicDataField::getBasicDataId, tbBasicData.getId())
-                                .eq(TbBasicDataField::getFieldId, textAndPercentage.getFieldIdStr())
-                                .oneOpt();
-                        if (tbBasicDataFieldOptional.isPresent()) {
-                            TbBasicDataField tbBasicDataField = tbBasicDataFieldOptional.get();
-                            if (CalculateTypeEnum.TEXT.equals(
-                                    textAndPercentage.getCalculateType())) {
-                                String score = scoreMap.get(tbBasicDataField.getFieldValue());
-                                tbScore.setBasicDataId(tbBasicData.getId());
-                                tbScore.setScore(Double.parseDouble(score));
-                                tbScore.setBasicDataConfigId(textAndPercentage.getId());
-                                scoreList.add(tbScore);
-                            }
-                            if (CalculateTypeEnum.PERCENTAGE.equals(
-                                    textAndPercentage.getCalculateType())) {
-                                for (Map.Entry<String, String> stringStringEntry : scoreMap.entrySet()) {
-                                    String[] split = stringStringEntry.getKey().split("-");
-                                    double v = Double.parseDouble(tbBasicDataField.getFieldValue());
-                                    double min = Double.parseDouble(split[0]);
-                                    double max = Double.parseDouble(split[1]);
-                                    if (v >= min && v <= max) {
-                                        tbScore.setScore(
-                                                Double.parseDouble(stringStringEntry.getValue()));
-                                    }
+        }
+        if (CollUtils.isNotEmpty(textAndPercentages)) {
+            for (TbBasicDataConfig textAndPercentage : textAndPercentages) {
+                TbScore tbScore = new TbScore();
+                List<TbBasicDataConfigDetail> details = tbBasicDataConfigDetailService.lambdaQuery()
+                        .eq(TbBasicDataConfigDetail::getBasicDataConfigId,
+                                textAndPercentage.getId())
+                        .list();
+                Map<String, String> scoreMap = details.stream().collect(
+                        Collectors.toMap(TbBasicDataConfigDetail::getKey,
+                                TbBasicDataConfigDetail::getValue));
+                if (CollectionUtils.isNotEmpty(details)) {
+                    TbBasicDataField textAndPercentageData = basicDataFieldMap.get(
+                            Long.valueOf(textAndPercentage.getFieldIdStr()));
+                    if (Objects.nonNull(textAndPercentageData)) {
+                        if (CalculateTypeEnum.TEXT.equals(textAndPercentage.getCalculateType())) {
+                            String score = scoreMap.get(textAndPercentageData.getFieldValue());
+                            tbScore.setBasicDataId(tbBasicData.getId());
+                            tbScore.setScore(Double.parseDouble(score));
+                            tbScore.setBasicDataConfigId(textAndPercentage.getId());
+                            scoreList.add(tbScore);
+                        }
+                        if (CalculateTypeEnum.PERCENTAGE.equals(
+                                textAndPercentage.getCalculateType())) {
+                            for (Map.Entry<String, String> stringStringEntry : scoreMap.entrySet()) {
+                                String[] split = stringStringEntry.getKey().split("_");
+                                double v = Double.parseDouble(
+                                        textAndPercentageData.getFieldValue());
+                                double min = Double.parseDouble(split[0]);
+                                double max = Double.parseDouble(split[1]);
+                                if (v >= min && v <= max) {
+                                    tbScore.setScore(
+                                            Double.parseDouble(stringStringEntry.getValue()));
                                 }
-                                tbScore.setBasicDataId(tbBasicData.getId());
-                                tbScore.setBasicDataConfigId(textAndPercentage.getId());
-                                scoreList.add(tbScore);
                             }
+                            //如果都不匹配,得分为0
+                            if (Objects.isNull(tbScore.getScore())) {
+                                tbScore.setScore(0D);
+                            }
+                            tbScore.setBasicDataId(tbBasicData.getId());
+                            tbScore.setBasicDataConfigId(textAndPercentage.getId());
+                            scoreList.add(tbScore);
                         }
                     }
                 }
             }
         }
         tbScoreService.saveBatch(scoreList);
-        log.info(String.format("基础数据%s计算得分成功!", JSON.toJSONString(tbBasicDataList)));
+    }
+
+    private void calculateScreenScore(TbBasicData tbBasicData,
+            List<TbBasicDataField> tbBasicDataFields) {
+        Map<Long, TbBasicDataField> basicDataFieldMap = tbBasicDataFields.stream()
+                .collect(Collectors.toMap(TbBasicDataField::getFieldId, e -> e));
+        DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel();
+        List<DataScreenConfigVO> dataIndicatorsConfig = tbDataScreenConfigService.getIndicatorsConfig(
+                DataScreenConfigEnum.DATA_INDICATORS);
+        List<DataScreenConfigVO> formalIndicatorsConfig = tbDataScreenConfigService.getIndicatorsConfig(
+                DataScreenConfigEnum.FORMAL_INDICATORS);
+        handleScoreCalculate(tbBasicData, riskLevel, basicDataFieldMap);
+        for (DataScreenConfigVO config : dataIndicatorsConfig) {
+            handleScoreCalculate(tbBasicData, config, basicDataFieldMap);
+        }
+        for (DataScreenConfigVO config : formalIndicatorsConfig) {
+            handleScoreCalculate(tbBasicData, config, basicDataFieldMap);
+        }
+    }
+
+    private void handleScoreCalculate(TbBasicData tbBasicData, DataScreenConfigVO vo,
+            Map<Long, TbBasicDataField> basicDataFieldMap) {
+        TbDataScreenScore tbDataScreenScore = tbDataScreenScoreService.lambdaQuery()
+                .eq(TbDataScreenScore::getBasicDataId, tbBasicData.getId()).eq(
+                        TbDataScreenScore::getDataScreenConfigId, vo.getId()).one();
+        if (Objects.isNull(tbDataScreenScore)) {
+            tbDataScreenScore = new TbDataScreenScore();
+            tbDataScreenScore.setDataScreenConfigId(vo.getId());
+            tbDataScreenScore.setBasicDataId(tbBasicData.getId());
+            tbDataScreenScore.setDeptAreaCode(tbBasicData.getDeptAreaCode());
+        }
+        List<CalculateItemDTO> scoreCalculateList = vo.getScoreCalculateList();
+        for (CalculateItemDTO item : scoreCalculateList) {
+            if (item.getValueType().equals(ValueTypeEnum.FIELD)) {
+                TbBasicDataField basicDataField = basicDataFieldMap.get(
+                        Long.valueOf(item.getContent()));
+                if (Objects.nonNull(basicDataField)) {
+                    item.setContent(basicDataField.getFieldValue());
+                }
+            }
+        }
+        String calculateFormulaStr = scoreCalculateList.stream()
+                .map(CalculateItemDTO::getContent).collect(Collectors.joining());
+        double score = CalculateUtil.calculate(calculateFormulaStr);
+        if (vo.getType().equals(DataScreenConfigEnum.FORMAL_INDICATORS)) {
+            if (Objects.nonNull(vo.getMaxScore()) && score > vo.getMaxScore()) {
+                score = vo.getMaxScore();
+            }
+        }
+        tbDataScreenScore.setScore(score);
+        if (vo.getType().equals(DataScreenConfigEnum.DATA_INDICATORS)) {
+            List<CalculateItemDTO> rateCalculateList = vo.getRateCalculateList();
+            for (CalculateItemDTO calculateItemDTO : rateCalculateList) {
+                if (calculateItemDTO.getValueType().equals(ValueTypeEnum.FIELD)) {
+                    TbBasicDataField basicDataField = basicDataFieldMap.get(
+                            Long.valueOf(calculateItemDTO.getContent()));
+                    if (Objects.nonNull(basicDataField)) {
+                        calculateItemDTO.setContent(basicDataField.getFieldValue());
+                    }
+                }
+            }
+            String calculateRateFormulaStr = rateCalculateList.stream()
+                    .map(CalculateItemDTO::getContent).collect(Collectors.joining());
+            double scoreRate = CalculateUtil.calculate(calculateRateFormulaStr);
+            tbDataScreenScore.setScoreRate(scoreRate);
+        }
+        tbDataScreenScoreService.saveOrUpdate(tbDataScreenScore);
     }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
index cd32575..1233f99 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -141,7 +141,7 @@
 
     List<SysUser> queryList();
 
-    Integer selectCount(@Param("status") Integer status);
+    Integer selectCountByStatus(@Param("status") Integer status);
 
     /**
      * 获取用户列表
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbBasicDataMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbBasicDataMapper.java
index 6203e47..be49a1c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbBasicDataMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbBasicDataMapper.java
@@ -5,6 +5,9 @@
 import com.ruoyi.system.domain.TbBasicData;
 import com.ruoyi.system.query.CurrentFieldsQuery;
 import com.ruoyi.system.vo.CurrentFieldsVO;
+import com.ruoyi.system.vo.FieldAndScoreDataVO;
+import com.ruoyi.system.vo.TransferPaymentScaleVO;
+import java.util.List;
 import org.apache.ibatis.annotations.Param;
 
 /**
@@ -17,5 +20,13 @@
  */
 public interface TbBasicDataMapper extends BaseMapper<TbBasicData> {
 
-    Page<CurrentFieldsVO> fieldsStatics(@Param("page") Page<CurrentFieldsVO> page, @Param("dto") CurrentFieldsQuery dto);
+    Page<CurrentFieldsVO> fieldsStatics(@Param("page") Page<CurrentFieldsVO> page,
+            @Param("dto") CurrentFieldsQuery dto);
+
+    Page<TransferPaymentScaleVO> transferPaymentScalePage(
+            @Param("page") Page<TransferPaymentScaleVO> page,
+            @Param("quarter") String quarter);
+
+    List<FieldAndScoreDataVO> selectBasicDataFieldsConfig(@Param("areaCode") String areaCode,
+            @Param("nowQuarter") String nowQuarter);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbDataScreenScoreMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbDataScreenScoreMapper.java
index ca15ccc..bb7b26e 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbDataScreenScoreMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbDataScreenScoreMapper.java
@@ -1,7 +1,15 @@
 package com.ruoyi.system.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.enums.AreaLevelEnum;
+import com.ruoyi.common.enums.DataScreenConfigEnum;
+import com.ruoyi.common.enums.SubTypeEnum;
 import com.ruoyi.system.domain.TbDataScreenScore;
+import com.ruoyi.system.vo.DataScreenScoreVO;
+import com.ruoyi.system.vo.RiskMapVO;
+import com.ruoyi.system.vo.RiskRankingVO;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +21,28 @@
  */
 public interface TbDataScreenScoreMapper extends BaseMapper<TbDataScreenScore> {
 
+    List<RiskMapVO> queryScore4Map(@Param("nowQuarter") String nowQuarter,
+            @Param("dataScreenConfigId") Long dataScreenConfigId);
+
+    List<RiskRankingVO> queryRiskRanking(@Param("dataScreenConfigId") Long dataScreenConfigId,
+            @Param("nowQuarter") String nowQuarter,
+            @Param("areaTypeEnum") AreaLevelEnum areaLevelEnum);
+
+    List<TbDataScreenScore> selectRiskByQuarter(@Param("nowQuarter") String nowQuarter,
+            @Param("dataScreenConfigId") Long dataScreenConfigId,
+            @Param("areaCode") String areaCode);
+
+    List<DataScreenScoreVO> queryScoreByAreaAndYear(@Param("areaCode") String areaCode,
+            @Param("dataScreenConfigId") Long dataScreenConfigId,
+            @Param("yearType") Integer yearType);
+
+    List<DataScreenScoreVO> selectIndicators(@Param("areaCode") String areaCode,
+            @Param("nowQuarter") String nowQuarter,
+            @Param("dataScreenConfigEnum") DataScreenConfigEnum dataScreenConfigEnum,
+            @Param("yearType") Integer yearType);
+
+    Integer getRankByScore(@Param("score") Double score,
+            @Param("subType") SubTypeEnum subType, @Param("areaCode") String areaCode,
+            @Param("nowQuarter") String nowQuarter,
+            @Param("dataScreenConfigEnum") DataScreenConfigEnum dataScreenConfigEnum);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbScoreMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbScoreMapper.java
index d8c74aa..28fc7f5 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbScoreMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbScoreMapper.java
@@ -3,10 +3,15 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.system.domain.TbScore;
+import com.ruoyi.system.query.CalculateDetailQuery;
+import com.ruoyi.system.query.DeptCalculateDetailQuery;
 import com.ruoyi.system.query.ScoreCalculateDetailQuery;
 import com.ruoyi.system.query.ScoreQuery;
+import com.ruoyi.system.vo.DeptCalculateDetailVO;
 import com.ruoyi.system.vo.ScoreDetailVO;
+import com.ruoyi.system.vo.ScoreRankVO;
 import com.ruoyi.system.vo.ScoreVO;
+import java.util.List;
 import org.apache.ibatis.annotations.Param;
 
 /**
@@ -21,5 +26,16 @@
 
     Page<ScoreVO> pageScore(@Param("query") ScoreQuery query, @Param("page") Page<ScoreVO> page);
 
-    Page<ScoreDetailVO> scoreCalculateDetail(@Param("query") ScoreCalculateDetailQuery query, @Param("page") Page<ScoreDetailVO> page);
+    Page<ScoreDetailVO> scoreCalculateDetail(@Param("query") ScoreCalculateDetailQuery query,
+            @Param("page") Page<ScoreDetailVO> page);
+
+    List<ScoreRankVO> queryTotalScoreList();
+
+    ScoreRankVO queryRankAndScoreByAreaCode(@Param("areaCode") String areaCode);
+
+    List<DeptCalculateDetailVO> deptCalculateDetail(@Param("query") DeptCalculateDetailQuery query,
+            @Param("nowQuarter") String nowQuarter);
+
+    Page<ScoreDetailVO> fieldsDetail(@Param("query") CalculateDetailQuery query,
+            @Param("page") Page<ScoreDetailVO> page, @Param("countyList") List<String> countyList);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/BasicDataConfigQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/BasicDataConfigQuery.java
index 1984258..0aa2f41 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/BasicDataConfigQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/BasicDataConfigQuery.java
@@ -20,7 +20,7 @@
     private static final long serialVersionUID = -6505569126273148383L;
 
     @ApiModelProperty(value = "类型名称")
-    private String basicDataConfigName;
+    private String typeName;
 
     @ApiModelProperty(value = "状态")
     private ShowStatusEnum status;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/CalculateDetailQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/CalculateDetailQuery.java
new file mode 100644
index 0000000..68a3369
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/CalculateDetailQuery.java
@@ -0,0 +1,30 @@
+package com.ruoyi.system.query;
+
+import com.ruoyi.common.core.domain.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/4/17
+ */
+@Data
+@ApiModel("部门得分计算查询对象")
+public class CalculateDetailQuery extends BasePage {
+
+    private static final long serialVersionUID = -1356805221869994937L;
+
+    @ApiModelProperty(value = "计算类型id")
+    @NotNull(message = "计算类型id不能为空")
+    private Long id;
+
+    @ApiModelProperty("市级区划代码")
+    @NotBlank(message = "市级区划代码不能为空")
+    private String cityAreaCode;
+
+    @ApiModelProperty(value = "部门区划代码")
+    private String areaCode;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/DeptCalculateDetailQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/DeptCalculateDetailQuery.java
new file mode 100644
index 0000000..6bb0633
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/DeptCalculateDetailQuery.java
@@ -0,0 +1,22 @@
+package com.ruoyi.system.query;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/4/17
+ */
+@Data
+@ApiModel("部门得分计算查询对象")
+public class DeptCalculateDetailQuery {
+
+    @ApiModelProperty("部门区划代码")
+    private String areaCode;
+    
+    @ApiModelProperty("计算类型分类id")
+    @NotNull(message = "计算类型分类id不能为空")
+    private Long basicDataCategoryId;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/ScoreCalculateDetailQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/ScoreCalculateDetailQuery.java
index af6a8b0..5aecc71 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/ScoreCalculateDetailQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/ScoreCalculateDetailQuery.java
@@ -21,5 +21,5 @@
     private Long id;
 
     @ApiModelProperty(value = "部门名称")
-    private String areaName;
+    private String areaCode;
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TransferPaymentScaleQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TransferPaymentScaleQuery.java
new file mode 100644
index 0000000..87caf26
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TransferPaymentScaleQuery.java
@@ -0,0 +1,21 @@
+package com.ruoyi.system.query;
+
+import com.ruoyi.common.core.domain.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author mitao
+ * @date 2024/4/16
+ */
+@Data
+@ApiModel("转移支付规模查询对象")
+@EqualsAndHashCode(callSuper = true)
+public class TransferPaymentScaleQuery extends BasePage {
+
+    private static final long serialVersionUID = 2207211510307469127L;
+    @ApiModelProperty("年份")
+    private String quarter;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
index 71fb1ee..e17ca3c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -210,7 +210,7 @@
 
     List<SysUser> queryList();
 
-    Integer selectCount(Integer status);
+    Integer selectCountByStatus(Integer status);
 
     /**
      * 获取用户列表
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataService.java
index d097254..84c89aa 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataService.java
@@ -1,5 +1,6 @@
 package com.ruoyi.system.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.common.basic.PageDTO;
 import com.ruoyi.common.core.domain.R;
@@ -12,8 +13,10 @@
 import com.ruoyi.system.vo.CurrentFieldsAllVO;
 import com.ruoyi.system.vo.CurrentFieldsDetailVO;
 import com.ruoyi.system.vo.CurrentFieldsVO;
+import com.ruoyi.system.vo.FieldAndScoreDataVO;
 import com.ruoyi.system.vo.ScoreCalculateVO;
 import com.ruoyi.system.vo.ScoreVO;
+import com.ruoyi.system.vo.TransferPaymentScaleVO;
 import java.io.IOException;
 import java.util.List;
 import org.springframework.web.multipart.MultipartFile;
@@ -49,4 +52,9 @@
     void importData(MultipartFile file, String quarter) throws IOException;
 
     void exportData(List<String> quarterList) throws Exception;
+
+    Page<TransferPaymentScaleVO> transferPaymentScalePage(Page<TransferPaymentScaleVO> page,
+            String quarter);
+
+    List<FieldAndScoreDataVO> selectBasicDataFieldsConfig(String areaCode, String nowQuarter);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenConfigService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenConfigService.java
index 201481a..89d499b 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenConfigService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenConfigService.java
@@ -26,7 +26,7 @@
 
     List<DataScreenConfigVO> getIndicatorsConfig(@NotNull DataScreenConfigEnum type);
 
-    DataScreenConfigVO editDataIndicatorsConfig(DataIndicatorsUpdDTO dto);
+    List<DataScreenConfigVO> editDataIndicatorsConfig(List<DataIndicatorsUpdDTO> dtoList);
 
-    DataScreenConfigVO editFormalIndicatorsConfig(FormalIndicatorsUpdDTO dto);
+    List<DataScreenConfigVO> editFormalIndicatorsConfig(List<FormalIndicatorsUpdDTO> dtoList);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenScoreService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenScoreService.java
index d429cc4..203940b 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenScoreService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenScoreService.java
@@ -1,7 +1,14 @@
 package com.ruoyi.system.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.enums.AreaLevelEnum;
+import com.ruoyi.common.enums.DataScreenConfigEnum;
+import com.ruoyi.common.enums.SubTypeEnum;
 import com.ruoyi.system.domain.TbDataScreenScore;
+import com.ruoyi.system.vo.DataScreenScoreVO;
+import com.ruoyi.system.vo.RiskMapVO;
+import com.ruoyi.system.vo.RiskRankingVO;
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +20,33 @@
  */
 public interface TbDataScreenScoreService extends IService<TbDataScreenScore> {
 
+    List<RiskMapVO> queryScore4Map(String nowQuarter, Long dataScreenConfigId);
+
+    List<RiskRankingVO> queryRiskRanking(Long dataScreenConfigId, String nowQuarter,
+            AreaLevelEnum areaLevelEnum);
+
+    List<TbDataScreenScore> selectRiskByQuarter(String nowQuarter, Long dataScreenConfigId,
+            String areaCode);
+
+    /**
+     * @param areaCode
+     * @param dataScreenConfigId
+     * @param yearType           1:今年 2:去年
+     * @return
+     */
+    List<DataScreenScoreVO> queryScoreByAreaAndYear(String areaCode, Long dataScreenConfigId,
+            Integer yearType);
+
+    /**
+     * @param areaCode
+     * @param nowQuarter
+     * @param dataScreenConfigEnum
+     * @param yearType             1:今年 2:去年
+     * @return
+     */
+    List<DataScreenScoreVO> selectIndicators(String areaCode, String nowQuarter,
+            DataScreenConfigEnum dataScreenConfigEnum, Integer yearType);
+
+    Integer getRankByScore(Double score, SubTypeEnum subType, String areaCode, String nowQuarter,
+            DataScreenConfigEnum dataScreenConfigEnum);
 }
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 e24caf4..028a8b9 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
@@ -37,6 +37,6 @@
 
     PageDTO<FieldVO> queryShowPage(FieldQuery query);
 
-    List<FieldVO> listFields();
-    
+    List<FieldVO> listFields(String type);
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbScoreService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbScoreService.java
index 4044bcc..eca18d2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbScoreService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbScoreService.java
@@ -3,12 +3,18 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.common.basic.PageDTO;
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.system.domain.TbScore;
+import com.ruoyi.system.query.CalculateDetailQuery;
+import com.ruoyi.system.query.DeptCalculateDetailQuery;
 import com.ruoyi.system.query.HistoryScoreQuery;
 import com.ruoyi.system.query.ScoreCalculateDetailQuery;
 import com.ruoyi.system.query.ScoreQuery;
+import com.ruoyi.system.vo.DeptCalculateDetailVO;
 import com.ruoyi.system.vo.ScoreCalculateDetailVO;
+import com.ruoyi.system.vo.ScoreRankVO;
 import com.ruoyi.system.vo.ScoreVO;
+import java.util.List;
 
 /**
  * <p>
@@ -25,4 +31,13 @@
     PageDTO<ScoreVO> getHistoryScore(HistoryScoreQuery query);
 
     ScoreCalculateDetailVO scoreCalculateDetail(ScoreCalculateDetailQuery query);
+
+    List<ScoreRankVO> queryTotalScoreList();
+
+    ScoreRankVO queryRankAndScoreByAreaCode(String areaCode);
+
+    List<DeptCalculateDetailVO> deptCalculateDetail(DeptCalculateDetailQuery query,
+            String nowQuarter);
+
+    ScoreCalculateDetailVO fieldsDetail(CalculateDetailQuery query, List<SysUser> countyList);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index f4166c6..15cf7f1 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -531,8 +531,8 @@
     }
 
     @Override
-    public Integer selectCount(Integer status) {
-        return userMapper.selectCount(status);
+    public Integer selectCountByStatus(Integer status) {
+        return userMapper.selectCountByStatus(status);
     }
 
 //    @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 6e3712d..a6cbaee 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
@@ -40,7 +40,6 @@
 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;
 
@@ -69,9 +68,11 @@
         List<CalculateItemDTO> calculateItemList = dto.getCalculateItemList();
         CalculateTypeEnum calculateType = tbBasicDataConfig.getCalculateType();
         List<CalculateDTO> dtoList = dto.getDtoList();
+        this.save(tbBasicDataConfig);
         if (CalculateTypeEnum.NUMBER.equals(calculateType)) {
             String fieldIdStr = getFieldIdStr(calculateItemList, tbBasicDataConfig);
             tbBasicDataConfig.setFieldIdStr(fieldIdStr);
+            this.updateById(tbBasicDataConfig);
         } else {
             if (CollUtils.isEmpty(dtoList)) {
                 throw new ServiceException("基础数据配置不能为空");
@@ -98,7 +99,6 @@
                 tbBasicDataConfigDetailService.saveBatch(collect);
             }
         }
-        this.save(tbBasicDataConfig);
     }
 
     public boolean hasConsecutiveDuplicates(List<CalculateItemDTO> calculateItemList) {
@@ -107,8 +107,6 @@
                         .equals(calculateItemList.get(i).getValueType()));
     }
 
-
-    @NotNull
     private String getFieldIdStr(List<CalculateItemDTO> calculateItemList,
             TbBasicDataConfig tbBasicDataConfig) {
         if (CollUtils.isEmpty(calculateItemList)) {
@@ -159,6 +157,9 @@
             tbBasicDataConfig.setFieldIdStr(
                     getFieldIdStr(dto.getCalculateItemList(), tbBasicDataConfig));
         } else {
+            if (StringUtils.isEmpty(dto.getFieldIdStr())) {
+                throw new ServiceException("字段id不能为空");
+            }
             if (CollUtils.isEmpty(dtoList)) {
                 throw new ServiceException("计算公式不能为空");
             }
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 a48fb28..ae579a5 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
@@ -32,7 +32,6 @@
 import com.ruoyi.system.domain.TbBasicDataConfigDetail;
 import com.ruoyi.system.domain.TbBasicDataField;
 import com.ruoyi.system.domain.TbDataScreenScore;
-import com.ruoyi.system.domain.TbDept;
 import com.ruoyi.system.domain.TbField;
 import com.ruoyi.system.domain.TbOperLog;
 import com.ruoyi.system.domain.TbScore;
@@ -43,7 +42,6 @@
 import com.ruoyi.system.listener.BasicDataListener;
 import com.ruoyi.system.listener.HistoryDataListener;
 import com.ruoyi.system.mapper.TbBasicDataMapper;
-import com.ruoyi.system.mapper.TbDeptMapper;
 import com.ruoyi.system.query.CurrentFieldsQuery;
 import com.ruoyi.system.query.ScoreCalculateQuery;
 import com.ruoyi.system.query.ScoreQuery;
@@ -63,9 +61,11 @@
 import com.ruoyi.system.vo.CurrentFieldsDetailVO;
 import com.ruoyi.system.vo.CurrentFieldsVO;
 import com.ruoyi.system.vo.DataScreenConfigVO;
+import com.ruoyi.system.vo.FieldAndScoreDataVO;
 import com.ruoyi.system.vo.FieldsTreeVO;
 import com.ruoyi.system.vo.ScoreCalculateVO;
 import com.ruoyi.system.vo.ScoreVO;
+import com.ruoyi.system.vo.TransferPaymentScaleVO;
 import java.io.IOException;
 import java.net.URLEncoder;
 import java.time.Instant;
@@ -100,7 +100,6 @@
 public class TbBasicDataServiceImpl extends ServiceImpl<TbBasicDataMapper, TbBasicData>
         implements TbBasicDataService {
 
-    private final TbDeptMapper tbDeptMapper;
     private final HttpServletResponse response;
     private final TbFieldService tbFieldService;
     private final TbBasicDataFieldService tbBasicDataFieldService;
@@ -111,6 +110,7 @@
     private final TbOperLogService tbOperLogService;
     private final TbDataScreenScoreService tbDataScreenScoreService;
     private final TbDataScreenConfigService tbDataScreenConfigService;
+
 
     public static void setFieldValues(
             List<FieldsTreeVO> fields, Map<Long, TbBasicDataField> fieldMap) {
@@ -132,9 +132,9 @@
         String deptAreaCode = user.getAreaCode();
         BasicDataReportingVO vo = new BasicDataReportingVO();
         // 校验区划代码
-        TbDept dept =
-                tbDeptMapper.selectOne(
-                        Wrappers.<TbDept>lambdaQuery().eq(TbDept::getAreaCode, deptAreaCode));
+        SysUser dept =
+                sysUserService.getOne(
+                        Wrappers.<SysUser>lambdaQuery().eq(SysUser::getAreaCode, deptAreaCode));
         if (Objects.isNull(dept)) {
             throw new ServiceException(String.format("区划代码%s不存在", deptAreaCode));
         }
@@ -147,20 +147,20 @@
         // 判断当前时间是否在季度初1-15号
         Instant instant = quarterStart.toInstant();
         LocalDate quarterStartLocalDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
-        LocalDate fifteenDaysLimit = quarterStartLocalDate.plusDays(15);
+        LocalDate fifteenDaysLimit = quarterStartLocalDate.plusDays(14);
         LocalDate now = LocalDate.now();
         vo.setQuarter(DateUtils.getNowQuarter());
         vo.setStatus(ReportingStatusEnum.UNFILLED);
-        // 如果当前时间不在规定范围内:季度初1-15号
-        if (now.isBefore(quarterStartLocalDate) || now.isAfter(fifteenDaysLimit)) {
+        // 如果当前时间不在规定范围内:季度初1-15号 TODO
+     /*   if (now.isBefore(quarterStartLocalDate) || now.isAfter(fifteenDaysLimit)) {
             return R.ok(vo, "请于季度初1-15号上传季度数据。");
-        }
+        }*/
         // 查询是否有当前季度的填报记录
         TbBasicData basicData =
                 this.getOne(
                         Wrappers.<TbBasicData>lambdaQuery()
                                 .eq(TbBasicData::getDeptAreaCode, dept.getAreaCode())
-                                .between(TbBasicData::getCreateTime, quarterStart, quarterEnd));
+                                .between(TbBasicData::getReportingTime, quarterStart, quarterEnd));
         // 查询需要填写的字段
         List<TbField> list =
                 tbFieldService.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list();
@@ -291,8 +291,10 @@
             this.updateById(tbBasicData);
         }
         if (ReportingStatusEnum.FILLED.equals(tbBasicData.getStatus())) {
-            calculateScore(tbBasicData, tbBasicDataFields);
-            CompletableFuture.runAsync(() -> calculateScreenScore(tbBasicData, tbBasicDataFields));
+            CompletableFuture.runAsync(() -> {
+                calculateScore(tbBasicData, tbBasicDataFields);
+                calculateScreenScore(tbBasicData, tbBasicDataFields);
+            });
         }
     }
 
@@ -314,9 +316,18 @@
         }
     }
 
-    private void handleScoreCalculate(TbBasicData tbBasicData, DataScreenConfigVO riskLevel,
+    private void handleScoreCalculate(TbBasicData tbBasicData, DataScreenConfigVO vo,
             Map<Long, TbBasicDataField> basicDataFieldMap) {
-        List<CalculateItemDTO> scoreCalculateList = riskLevel.getScoreCalculateList();
+        TbDataScreenScore tbDataScreenScore = tbDataScreenScoreService.lambdaQuery()
+                .eq(TbDataScreenScore::getBasicDataId, tbBasicData.getId()).eq(
+                        TbDataScreenScore::getDataScreenConfigId, vo.getId()).one();
+        if (Objects.isNull(tbDataScreenScore)) {
+            tbDataScreenScore = new TbDataScreenScore();
+            tbDataScreenScore.setDataScreenConfigId(vo.getId());
+            tbDataScreenScore.setBasicDataId(tbBasicData.getId());
+            tbDataScreenScore.setDeptAreaCode(tbBasicData.getDeptAreaCode());
+        }
+        List<CalculateItemDTO> scoreCalculateList = vo.getScoreCalculateList();
         for (CalculateItemDTO item : scoreCalculateList) {
             if (item.getValueType().equals(ValueTypeEnum.FIELD)) {
                 TbBasicDataField basicDataField = basicDataFieldMap.get(
@@ -329,12 +340,24 @@
         String calculateFormulaStr = scoreCalculateList.stream()
                 .map(CalculateItemDTO::getContent).collect(Collectors.joining());
         double score = CalculateUtil.calculate(calculateFormulaStr);
-        TbDataScreenScore tbDataScreenScore = new TbDataScreenScore();
-        tbDataScreenScore.setDataScreenConfigId(riskLevel.getId());
-        tbDataScreenScore.setDataScreenConfigId(riskLevel.getId());
-        tbDataScreenScore.setDeptAreaCode(tbBasicData.getDeptAreaCode());
         tbDataScreenScore.setScore(score);
-        tbDataScreenScoreService.save(tbDataScreenScore);
+        if (vo.getType().equals(DataScreenConfigEnum.DATA_INDICATORS)) {
+            List<CalculateItemDTO> rateCalculateList = vo.getRateCalculateList();
+            for (CalculateItemDTO calculateItemDTO : rateCalculateList) {
+                if (calculateItemDTO.getValueType().equals(ValueTypeEnum.FIELD)) {
+                    TbBasicDataField basicDataField = basicDataFieldMap.get(
+                            Long.valueOf(calculateItemDTO.getContent()));
+                    if (Objects.nonNull(basicDataField)) {
+                        calculateItemDTO.setContent(basicDataField.getFieldValue());
+                    }
+                }
+            }
+            String calculateRateFormulaStr = rateCalculateList.stream()
+                    .map(CalculateItemDTO::getContent).collect(Collectors.joining());
+            double scoreRate = CalculateUtil.calculate(calculateRateFormulaStr);
+            tbDataScreenScore.setScoreRate(scoreRate);
+        }
+        tbDataScreenScoreService.saveOrUpdate(tbDataScreenScore);
     }
 
     private void saveExchangeLog(LoginUser loginUser, TbBasicData tbBasicData,
@@ -402,6 +425,20 @@
 
     @Override
     public void importBasicData(MultipartFile file) throws Exception {
+        Map<String, Date> quarterDate = DateUtils.getQuarterDate(new Date());
+        // 当前季度开始
+        Date quarterStart = quarterDate.get("first");
+        // 当前季度结束
+        Date quarterEnd = quarterDate.get("last");
+        // 判断当前时间是否在季度初1-15号
+        Instant instant = quarterStart.toInstant();
+        LocalDate quarterStartLocalDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
+        LocalDate fifteenDaysLimit = quarterStartLocalDate.plusDays(14);
+        LocalDate now = LocalDate.now();
+        //todo
+      /*  if (now.isBefore(quarterStartLocalDate) || now.isAfter(fifteenDaysLimit)) {
+            throw new ServiceException("请于季度初1-15号上传季度数据。");
+        }*/
         LoginUser loginUser = SecurityUtils.getLoginUser();
         String areaCode = loginUser.getUser().getAreaCode();
         EasyExcel.read(
@@ -413,7 +450,7 @@
                                 tbBasicDataFieldService,
                                 tbBasicDataConfigService,
                                 tbBasicDataConfigDetailService,
-                                tbScoreService))
+                                tbScoreService, tbDataScreenScoreService, tbDataScreenConfigService))
                 .sheet()
                 .doRead();
     }
@@ -491,7 +528,7 @@
                         if (CalculateTypeEnum.PERCENTAGE.equals(
                                 textAndPercentage.getCalculateType())) {
                             for (Map.Entry<String, String> stringStringEntry : scoreMap.entrySet()) {
-                                String[] split = stringStringEntry.getKey().split("-");
+                                String[] split = stringStringEntry.getKey().split("_");
                                 double v = Double.parseDouble(
                                         textAndPercentageData.getFieldValue());
                                 double min = Double.parseDouble(split[0]);
@@ -669,17 +706,18 @@
                             .collect(Collectors.toMap(SysUser::getAreaCode, e -> e));
             Set<Long> basicDataIds =
                     basicDataList.stream().map(TbBasicData::getId).collect(Collectors.toSet());
-            Map<Long, TbBasicDataField> basicDataFieldMap =
-                    tbBasicDataFieldService
-                            .lambdaQuery()
-                            .in(TbBasicDataField::getBasicDataId, basicDataIds)
-                            .list()
-                            .stream()
-                            .collect(Collectors.toMap(TbBasicDataField::getFieldId, e -> e));
+
+            List<TbBasicDataField> tbBasicDataFieldList = tbBasicDataFieldService
+                    .lambdaQuery()
+                    .in(TbBasicDataField::getBasicDataId, basicDataIds)
+                    .list();
             // 值
             List<Object> result = new ArrayList<>();
             for (TbBasicData tbBasicData : basicDataList) {
                 SysUser user = userMap.get(tbBasicData.getDeptAreaCode());
+                Map<Long, TbBasicDataField> basicDataFieldMap = tbBasicDataFieldList.stream()
+                        .filter(field -> field.getBasicDataId().equals(tbBasicData.getId()))
+                        .collect(Collectors.toMap(TbBasicDataField::getFieldId, e -> e));
                 List<String> item = new ArrayList<>();
                 item.add(Objects.nonNull(user) ? user.getAreaName() : "");
                 item.add(tbBasicData.getQuarter());
@@ -830,7 +868,8 @@
                                 tbBasicDataFieldService,
                                 tbBasicDataConfigService,
                                 tbBasicDataConfigDetailService,
-                                tbScoreService, sysUserService, quarter))
+                                tbScoreService, sysUserService, quarter, tbDataScreenScoreService,
+                                tbDataScreenConfigService))
                 .sheet()
                 .doRead();
     }
@@ -972,4 +1011,23 @@
         headTitles.add(Lists.newArrayList("备注"));
         return headTitles;
     }
+
+    @Override
+    public Page<TransferPaymentScaleVO> transferPaymentScalePage(Page<TransferPaymentScaleVO> page,
+            String quarter) {
+        Page<TransferPaymentScaleVO> pageVO = baseMapper.transferPaymentScalePage(
+                page, quarter);
+        int rank = 1;
+        for (TransferPaymentScaleVO record : pageVO.getRecords()) {
+            record.setRank(rank++);
+        }
+        return pageVO;
+    }
+
+    @Override
+    public List<FieldAndScoreDataVO> selectBasicDataFieldsConfig(String areaCode,
+            String nowQuarter) {
+        return baseMapper.selectBasicDataFieldsConfig(areaCode, nowQuarter);
+    }
+
 }
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 337cd97..485f241 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
@@ -18,6 +18,7 @@
 import com.ruoyi.system.mapper.TbDataScreenConfigMapper;
 import com.ruoyi.system.service.TbDataScreenConfigService;
 import com.ruoyi.system.vo.DataScreenConfigVO;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -59,9 +60,9 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public DataScreenConfigVO editRiskLevel(RiskLevelUpdDTO dto) {
-        if (dto.areRiskLevelsDistinct()) {
+       /* if (dto.areRiskLevelsDistinct()) {
             throw new ServiceException("得分范围不能重叠");
-        }
+        }*/
         //查询是否有该指标配置
         TbDataScreenConfig tbDataScreenConfig = this.lambdaQuery()
                 .eq(TbDataScreenConfig::getType, DataScreenConfigEnum.RISK_LEVEL)
@@ -110,6 +111,7 @@
         }
     }
 
+    //表达式校验
     public boolean hasConsecutiveDuplicates(List<CalculateItemDTO> calculateItemList) {
         return IntStream.range(1, calculateItemList.size())
                 .anyMatch(i -> calculateItemList.get(i - 1).getValueType()
@@ -137,48 +139,58 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public DataScreenConfigVO editDataIndicatorsConfig(DataIndicatorsUpdDTO dto) {
-        //查询是否有该指标配置
-        TbDataScreenConfig tbDataScreenConfig = this.lambdaQuery()
-                .eq(TbDataScreenConfig::getType, DataScreenConfigEnum.DATA_INDICATORS)
-                .eq(TbDataScreenConfig::getSubType,
-                        dto.getSubType()).oneOpt().orElseGet(() -> BeanUtils.copyBean(dto,
-                        TbDataScreenConfig.class));
-        List<CalculateItemDTO> scoreCalculateList = dto.getScoreCalculateList();
-        List<CalculateItemDTO> rateCalculateList = dto.getRateCalculateList();
-        validateCalculateItemList(scoreCalculateList);
-        validateCalculateItemList(rateCalculateList);
-        String scoreCalculateFormulaJsonStr = JSON.toJSONString(scoreCalculateList);
-        tbDataScreenConfig.setCalculateFormula(scoreCalculateFormulaJsonStr);
-        String rateCalculateFormulaJsonStr = JSON.toJSONString(rateCalculateList);
-        tbDataScreenConfig.setCalculateRateFormula(rateCalculateFormulaJsonStr);
-        tbDataScreenConfig.setType(DataScreenConfigEnum.DATA_INDICATORS);
-        this.saveOrUpdate(tbDataScreenConfig);
-        DataScreenConfigVO dataScreenConfigVO = BeanUtils.copyBean(tbDataScreenConfig,
-                DataScreenConfigVO.class);
-        dataScreenConfigVO.setScoreCalculateList(scoreCalculateList);
-        dataScreenConfigVO.setRateCalculateList(rateCalculateList);
-        return dataScreenConfigVO;
+    public List<DataScreenConfigVO> editDataIndicatorsConfig(List<DataIndicatorsUpdDTO> dtoList) {
+        List<DataScreenConfigVO> vosList = new ArrayList<>();
+        for (DataIndicatorsUpdDTO dto : dtoList) {
+            //查询是否有该指标配置
+            TbDataScreenConfig tbDataScreenConfig = this.lambdaQuery()
+                    .eq(TbDataScreenConfig::getType, DataScreenConfigEnum.DATA_INDICATORS)
+                    .eq(TbDataScreenConfig::getSubType,
+                            dto.getSubType()).oneOpt().orElseGet(() -> BeanUtils.copyBean(dto,
+                            TbDataScreenConfig.class));
+            List<CalculateItemDTO> scoreCalculateList = dto.getScoreCalculateList();
+            List<CalculateItemDTO> rateCalculateList = dto.getRateCalculateList();
+            validateCalculateItemList(scoreCalculateList);
+            validateCalculateItemList(rateCalculateList);
+            String scoreCalculateFormulaJsonStr = JSON.toJSONString(scoreCalculateList);
+            tbDataScreenConfig.setCalculateFormula(scoreCalculateFormulaJsonStr);
+            String rateCalculateFormulaJsonStr = JSON.toJSONString(rateCalculateList);
+            tbDataScreenConfig.setCalculateRateFormula(rateCalculateFormulaJsonStr);
+            tbDataScreenConfig.setType(DataScreenConfigEnum.DATA_INDICATORS);
+            this.saveOrUpdate(tbDataScreenConfig);
+            DataScreenConfigVO dataScreenConfigVO = BeanUtils.copyBean(tbDataScreenConfig,
+                    DataScreenConfigVO.class);
+            dataScreenConfigVO.setScoreCalculateList(scoreCalculateList);
+            dataScreenConfigVO.setRateCalculateList(rateCalculateList);
+            vosList.add(dataScreenConfigVO);
+        }
+        return vosList;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public DataScreenConfigVO editFormalIndicatorsConfig(FormalIndicatorsUpdDTO dto) {
-        //查询是否有该指标配置
-        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);
-        List<CalculateItemDTO> calculateItemList = dto.getCalculateItemList();
-        validateCalculateItemList(calculateItemList);
-        String calculateFormulaJsonStr = JSON.toJSONString(calculateItemList);
-        tbDataScreenConfig.setCalculateFormula(calculateFormulaJsonStr);
-        this.saveOrUpdate(tbDataScreenConfig);
-        DataScreenConfigVO dataScreenConfigVO = BeanUtils.copyBean(tbDataScreenConfig,
-                DataScreenConfigVO.class);
-        dataScreenConfigVO.setScoreCalculateList(calculateItemList);
-        return dataScreenConfigVO;
+    public List<DataScreenConfigVO> editFormalIndicatorsConfig(
+            List<FormalIndicatorsUpdDTO> dtoList) {
+        List<DataScreenConfigVO> vosList = new ArrayList<>();
+        for (FormalIndicatorsUpdDTO dto : dtoList) {
+            //查询是否有该指标配置
+            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);
+            tbDataScreenConfig.setMaxScore(dto.getMaxScore());
+            List<CalculateItemDTO> calculateItemList = dto.getCalculateItemList();
+            validateCalculateItemList(calculateItemList);
+            String calculateFormulaJsonStr = JSON.toJSONString(calculateItemList);
+            tbDataScreenConfig.setCalculateFormula(calculateFormulaJsonStr);
+            this.saveOrUpdate(tbDataScreenConfig);
+            DataScreenConfigVO dataScreenConfigVO = BeanUtils.copyBean(tbDataScreenConfig,
+                    DataScreenConfigVO.class);
+            dataScreenConfigVO.setScoreCalculateList(calculateItemList);
+            vosList.add(dataScreenConfigVO);
+        }
+        return vosList;
     }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenScoreServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenScoreServiceImpl.java
index 7dc40e2..b48bc8c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenScoreServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenScoreServiceImpl.java
@@ -1,9 +1,16 @@
 package com.ruoyi.system.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.enums.AreaLevelEnum;
+import com.ruoyi.common.enums.DataScreenConfigEnum;
+import com.ruoyi.common.enums.SubTypeEnum;
 import com.ruoyi.system.domain.TbDataScreenScore;
 import com.ruoyi.system.mapper.TbDataScreenScoreMapper;
 import com.ruoyi.system.service.TbDataScreenScoreService;
+import com.ruoyi.system.vo.DataScreenScoreVO;
+import com.ruoyi.system.vo.RiskMapVO;
+import com.ruoyi.system.vo.RiskRankingVO;
+import java.util.List;
 import org.springframework.stereotype.Service;
 
 /**
@@ -19,4 +26,40 @@
         ServiceImpl<TbDataScreenScoreMapper, TbDataScreenScore> implements
         TbDataScreenScoreService {
 
+    @Override
+    public List<RiskMapVO> queryScore4Map(String nowQuarter, Long dataScreenConfigId) {
+        return baseMapper.queryScore4Map(nowQuarter, dataScreenConfigId);
+    }
+
+    @Override
+    public List<RiskRankingVO> queryRiskRanking(Long dataScreenConfigId, String nowQuarter,
+            AreaLevelEnum areaLevelEnum) {
+        return baseMapper.queryRiskRanking(dataScreenConfigId, nowQuarter, areaLevelEnum);
+    }
+
+    @Override
+    public List<TbDataScreenScore> selectRiskByQuarter(String nowQuarter, Long dataScreenConfigId,
+            String areaCode) {
+        return baseMapper.selectRiskByQuarter(nowQuarter, dataScreenConfigId, areaCode);
+    }
+
+    @Override
+    public List<DataScreenScoreVO> queryScoreByAreaAndYear(String areaCode,
+            Long dataScreenConfigId, Integer yearType) {
+        return baseMapper.queryScoreByAreaAndYear(areaCode, dataScreenConfigId, yearType);
+    }
+
+    @Override
+    public List<DataScreenScoreVO> selectIndicators(String areaCode, String nowQuarter,
+            DataScreenConfigEnum dataScreenConfigEnum, Integer yearType) {
+        return baseMapper.selectIndicators(areaCode, nowQuarter, dataScreenConfigEnum,
+                yearType);
+    }
+
+    @Override
+    public Integer getRankByScore(Double score, SubTypeEnum subType, String areaCode,
+            String nowQuarter, DataScreenConfigEnum dataScreenConfigEnum) {
+        return baseMapper.getRankByScore(score, subType, areaCode, nowQuarter,
+                dataScreenConfigEnum);
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDeptServiceImpl.java
index 0237113..bfd29a2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDeptServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDeptServiceImpl.java
@@ -11,7 +11,11 @@
 import com.ruoyi.common.enums.ReportingStatusEnum;
 import com.ruoyi.common.enums.UserTypeEnum;
 import com.ruoyi.common.exception.ServiceException;
-import com.ruoyi.common.utils.*;
+import com.ruoyi.common.utils.BeanUtils;
+import com.ruoyi.common.utils.CollUtils;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.system.domain.TbBasicData;
 import com.ruoyi.system.domain.TbDept;
 import com.ruoyi.system.dto.update.DeptFocusDTO;
@@ -23,18 +27,23 @@
 import com.ruoyi.system.service.TbBasicDataService;
 import com.ruoyi.system.service.TbDeptService;
 import com.ruoyi.system.vo.DeptVO;
+import java.io.InputStream;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
-
-import java.io.InputStream;
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.ZoneId;
-import java.util.*;
-import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -57,9 +66,12 @@
         Page<SysUser> page = new Page<>(query.getPageNum(), query.getPageSize());
         Page<SysUser> userPage = sysUserService.lambdaQuery()
                 .eq(SysUser::getUserType, UserTypeEnum.DEPARTMENT.getCode())
-                .like(StringUtils.isNotEmpty(query.getAreaName()), SysUser::getAreaName, query.getAreaName())
-                .like(StringUtils.isNotEmpty(query.getUserName()), SysUser::getUserName, query.getUserName())
-                .like(StringUtils.isNotEmpty(query.getPhone()), SysUser::getPhoneNumber, query.getPhone())
+                .like(StringUtils.isNotEmpty(query.getAreaName()), SysUser::getAreaName,
+                        query.getAreaName())
+                .like(StringUtils.isNotEmpty(query.getUserName()), SysUser::getUserName,
+                        query.getUserName())
+                .like(StringUtils.isNotEmpty(query.getPhone()), SysUser::getPhoneNumber,
+                        query.getPhone())
                 .orderByDesc(SysUser::getCreateTime)
                 .page(page);
 
@@ -80,7 +92,8 @@
         //使用自定义校验规则
         importParams.setVerifyHandler(deptVerifyHandler);
         InputStream inputStream = file.getInputStream();
-        ExcelImportResult<DeptExcel> result = ExcelImportUtil.importExcelMore(inputStream, DeptExcel.class, importParams);
+        ExcelImportResult<DeptExcel> result = ExcelImportUtil.importExcelMore(inputStream,
+                DeptExcel.class, importParams);
         inputStream.close();
         List<DeptExcel> list = result.getList();
 
@@ -89,11 +102,12 @@
         }
         List<String> strings = hasDuplicateAreaCode(list);
         if (!CollectionUtils.isEmpty(strings)) {
-            throw new ServiceException(String.format("区划代码%s重复,请修改后重新导入", String.join(",", strings)));
-        }else {
+            throw new ServiceException(
+                    String.format("区划代码%s重复,请修改后重新导入", String.join(",", strings)));
+        } else {
             List<TbDept> tbDeptList = BeanUtils.copyList(list, TbDept.class);
             this.remove(null);
-            tbDeptList.forEach(dept->{
+            tbDeptList.forEach(dept -> {
                 dept.setPassword(SecurityUtils.encryptPassword(dept.getPassword()));
             });
             this.saveBatch(tbDeptList);
@@ -102,6 +116,7 @@
 
     /**
      * 校验区划代码是否重复
+     *
      * @param deptList 部门列表
      * @return 重复的区划代码
      */
@@ -118,7 +133,8 @@
 
     @Override
     public void focus(DeptFocusDTO dto) {
-        Optional<SysUser> sysUser = sysUserService.lambdaQuery().eq(SysUser::getUserId, dto.getUserId()).oneOpt();
+        Optional<SysUser> sysUser = sysUserService.lambdaQuery()
+                .eq(SysUser::getUserId, dto.getUserId()).oneOpt();
         if (sysUser.isPresent()) {
             sysUserService.lambdaUpdate()
                     .eq(SysUser::getUserId, dto.getUserId())
@@ -137,17 +153,21 @@
         //判断当前时间是否在季度初1-15号
         Instant instant = quarterStart.toInstant();
         LocalDate quarterStartLocalDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
-        LocalDate fifteenDaysLimit = quarterStartLocalDate.plusDays(15);
+        LocalDate fifteenDaysLimit = quarterStartLocalDate.plusDays(14);
         LocalDate now = LocalDate.now();
         //如果当前时间不在规定范围内:季度初1-15号
         if (now.isAfter(quarterStartLocalDate) || now.isBefore(fifteenDaysLimit)) {
             //查询所有的部门
-            List<SysUser> list = sysUserService.lambdaQuery().eq(SysUser::getUserType, UserTypeEnum.DEPARTMENT.getCode()).list();
-            Set<String> deptAreaCodeList = list.stream().map(SysUser::getAreaCode).collect(Collectors.toSet());
+            List<SysUser> list = sysUserService.lambdaQuery()
+                    .eq(SysUser::getUserType, UserTypeEnum.DEPARTMENT.getCode()).list();
+            Set<String> deptAreaCodeList = list.stream().map(SysUser::getAreaCode)
+                    .collect(Collectors.toSet());
             //查询当前季度填报了数据的部门
-            List<TbBasicData> filledBasicData = tbBasicDataService.lambdaQuery().between(TbBasicData::getCreateTime, quarterStartLocalDate, fifteenDaysLimit)
+            List<TbBasicData> filledBasicData = tbBasicDataService.lambdaQuery()
+                    .between(TbBasicData::getCreateTime, quarterStartLocalDate, fifteenDaysLimit)
                     .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED).list();
-            Set<String> filledDeptCodes = filledBasicData.stream().map(TbBasicData::getDeptAreaCode).collect(Collectors.toSet());
+            Set<String> filledDeptCodes = filledBasicData.stream().map(TbBasicData::getDeptAreaCode)
+                    .collect(Collectors.toSet());
             if (!filledDeptCodes.containsAll(deptAreaCodeList)) {
                 return R.fail("有部门未上传季度数据");
             }
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 c9e235a..f3d9356 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
@@ -187,6 +187,7 @@
                 .eq(TbField::getStatus, ShowStatusEnum.SHOW)
                 .eq(StringUtils.isNotNull(query.getFieldType()), TbField::getFieldType,
                         query.getFieldType())
+                .eq(TbField::getFieldType, FieldTypeEnum.NUMBER)
                 .orderByDesc(TbField::getCreateTime)
                 .page(new Page<>(query.getPageNum(), query.getPageSize()));
         if (CollUtils.isEmpty(page.getRecords())) {
@@ -205,9 +206,16 @@
     }
 
     @Override
-    public List<FieldVO> listFields() {
+    public List<FieldVO> listFields(String type) {
+        FieldTypeEnum fieldTypeEnum;
+        try {
+            fieldTypeEnum = FieldTypeEnum.getEnumByDesc(type);
+        } catch (IllegalArgumentException e) {
+            throw new ServiceException("非法参数");
+        }
         List<TbField> list = this.list(
-                Wrappers.<TbField>lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW));
+                Wrappers.<TbField>lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW)
+                        .eq(Objects.nonNull(fieldTypeEnum), TbField::getFieldType, fieldTypeEnum));
         return BeanUtils.copyList(list, FieldVO.class);
     }
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbScoreServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbScoreServiceImpl.java
index 0a9446b..806bfd3 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbScoreServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbScoreServiceImpl.java
@@ -3,24 +3,31 @@
 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.core.domain.entity.SysUser;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.BeanUtils;
+import com.ruoyi.common.utils.CollUtils;
 import com.ruoyi.system.domain.TbBasicDataConfig;
 import com.ruoyi.system.domain.TbScore;
 import com.ruoyi.system.mapper.TbScoreMapper;
+import com.ruoyi.system.query.CalculateDetailQuery;
+import com.ruoyi.system.query.DeptCalculateDetailQuery;
 import com.ruoyi.system.query.HistoryScoreQuery;
 import com.ruoyi.system.query.ScoreCalculateDetailQuery;
 import com.ruoyi.system.query.ScoreQuery;
 import com.ruoyi.system.service.TbBasicDataConfigService;
 import com.ruoyi.system.service.TbScoreService;
+import com.ruoyi.system.vo.DeptCalculateDetailVO;
 import com.ruoyi.system.vo.ScoreCalculateDetailVO;
 import com.ruoyi.system.vo.ScoreDetailVO;
+import com.ruoyi.system.vo.ScoreRankVO;
 import com.ruoyi.system.vo.ScoreVO;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
-
-import java.util.Objects;
 
 /**
  * <p>
@@ -33,7 +40,9 @@
 @Slf4j
 @Service
 @RequiredArgsConstructor
-public class TbScoreServiceImpl extends ServiceImpl<TbScoreMapper, TbScore> implements TbScoreService {
+public class TbScoreServiceImpl extends ServiceImpl<TbScoreMapper, TbScore> implements
+        TbScoreService {
+
     private final TbBasicDataConfigService basicDataConfigService;
 
     @Override
@@ -44,7 +53,8 @@
     @Override
     public PageDTO<ScoreVO> getHistoryScore(HistoryScoreQuery query) {
         ScoreQuery scoreQuery = BeanUtils.copyBean(query, ScoreQuery.class);
-        Page<ScoreVO> scoreVOPage = baseMapper.pageScore(scoreQuery, new Page<>(query.getPageNum(), query.getPageSize()));
+        Page<ScoreVO> scoreVOPage = baseMapper.pageScore(scoreQuery,
+                new Page<>(query.getPageNum(), query.getPageSize()));
         return PageDTO.of(scoreVOPage);
     }
 
@@ -61,7 +71,49 @@
         Page<ScoreDetailVO> page = new Page<>(query.getPageNum(), query.getPageSize());
 
         Page<ScoreDetailVO> pageVO = baseMapper.scoreCalculateDetail(query, page);
-        vo.setVo(PageDTO.of(pageVO));
+        vo.setTotal(pageVO.getTotal());
+        vo.setPages(pageVO.getPages());
+        vo.setList(pageVO.getRecords());
+        return vo;
+    }
+
+    @Override
+    public List<ScoreRankVO> queryTotalScoreList() {
+        return baseMapper.queryTotalScoreList();
+    }
+
+    @Override
+    public ScoreRankVO queryRankAndScoreByAreaCode(String areaCode) {
+        return baseMapper.queryRankAndScoreByAreaCode(areaCode);
+    }
+
+    @Override
+    public List<DeptCalculateDetailVO> deptCalculateDetail(DeptCalculateDetailQuery query,
+            String nowQuarter) {
+        return baseMapper.deptCalculateDetail(query, nowQuarter);
+    }
+
+    @Override
+    public ScoreCalculateDetailVO fieldsDetail(CalculateDetailQuery query,
+            List<SysUser> countyList) {
+        //查询计算类型
+        TbBasicDataConfig config = basicDataConfigService.getById(query.getId());
+        if (Objects.isNull(config)) {
+            throw new ServiceException("非法参数");
+        }
+        if (CollUtils.isEmpty(countyList)) {
+            return new ScoreCalculateDetailVO();
+        }
+        List<String> areaCodeList = countyList.stream().map(SysUser::getAreaCode).distinct()
+                .collect(Collectors.toList());
+        ScoreCalculateDetailVO vo = new ScoreCalculateDetailVO();
+        vo.setTypeName(config.getTypeName());
+        vo.setCalculateType(config.getCalculateType());
+        Page<ScoreDetailVO> page = new Page<>(query.getPageNum(), query.getPageSize());
+        Page<ScoreDetailVO> pageVO = baseMapper.fieldsDetail(query, page, areaCodeList);
+        vo.setTotal(pageVO.getTotal());
+        vo.setPages(pageVO.getPages());
+        vo.setList(pageVO.getRecords());
         return vo;
     }
 }
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 5680e64..761c1cf 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
@@ -44,6 +44,9 @@
     @NotBlank(message = "字段id不能为空")
     private String fieldIdStr;
 
+    @ApiModelProperty(value = "最大分值")
+    private Double maxScore;
+
     @ApiModelProperty(value = "计算公式")
     private List<CalculateItemDTO> CalculateItemList;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataFieldVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataFieldVO.java
index 74a88a7..b8fa547 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataFieldVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataFieldVO.java
@@ -4,18 +4,17 @@
 import com.ruoyi.common.enums.ReportingStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
 import java.io.Serializable;
 import java.util.Date;
 import java.util.List;
+import lombok.Data;
 
 /**
  * @author mitao
  * @date 2024/3/19
  */
 @Data
-@ApiModel(value="字段统计填报视图对象")
+@ApiModel(value = "字段统计填报视图对象")
 public class BasicDataFieldVO implements Serializable {
 
     private static final long serialVersionUID = -4911170218076417743L;
@@ -42,7 +41,7 @@
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
     private Date createTime;
 
-    @ApiModelProperty(value = "填报完成时间",notes = "状态为已填报才展示")
+    @ApiModelProperty(value = "填报完成时间", notes = "状态为已填报才展示")
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
     private Date updateTime;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/DataAnalysisVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DataAnalysisVO.java
new file mode 100644
index 0000000..df13e5e
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DataAnalysisVO.java
@@ -0,0 +1,61 @@
+package com.ruoyi.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import java.util.List;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/4/16
+ */
+@Data
+@ApiModel(value = "数据分析评估系统数据视图对象")
+public class DataAnalysisVO implements Serializable {
+
+    private static final long serialVersionUID = -6506407847272831542L;
+    @ApiModelProperty("地区名称")
+    private String areaName;
+
+    @ApiModelProperty("区划代码")
+    private String areaCode;
+    
+    @ApiModelProperty("得分")
+    private Double score;
+
+    @ApiModelProperty("排名")
+    private Integer rank;
+
+    @ApiModelProperty("风险等级")
+    private String riskLevel;
+
+    @ApiModelProperty("全年得分")
+    private Double yearScore;
+
+    @ApiModelProperty("去年得分")
+    private Double lastYearScore;
+
+    @ApiModelProperty("监管发现问题")
+    private List<QuestionVO> questions;
+
+    @ApiModelProperty("形式指标得分")
+    private List<ScoreDataVO> scoreDataList;
+
+    @ApiModelProperty("数据指标得分")
+    private List<ScoreRateDataVO> scoreRateDataList;
+
+    @ApiModelProperty("字段列表一")
+    private List<FieldAndScoreDataVO> scoreRateDataListOne;
+
+    @ApiModelProperty("字段列表二")
+    private List<FieldAndScoreDataVO> scoreRateDataListTwo;
+
+    @ApiModelProperty("字段列表三")
+    private List<FieldAndScoreDataVO> scoreRateDataListThree;
+
+    @ApiModelProperty("字段列表四")
+    private List<FieldAndScoreDataVO> scoreRateDataListFour;
+
+}
+
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/DataScreenConfigVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DataScreenConfigVO.java
index c960474..0cb6794 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/DataScreenConfigVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DataScreenConfigVO.java
@@ -19,6 +19,9 @@
     @ApiModelProperty(value = "大屏数据配置id")
     private Long id;
 
+    @ApiModelProperty(value = "最大分值")
+    private Double maxScore;
+
     @ApiModelProperty(value = "配置类型(1=风险等级设置 2=数据指标设置 3=形式指标设置)")
     private DataScreenConfigEnum type;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/DataScreenScoreVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DataScreenScoreVO.java
new file mode 100644
index 0000000..de20811
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DataScreenScoreVO.java
@@ -0,0 +1,41 @@
+package com.ruoyi.system.vo;
+
+import com.ruoyi.common.enums.SubTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author mitao
+ * @date 2024/4/17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "大屏得分视图对象")
+public class DataScreenScoreVO {
+
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @ApiModelProperty(value = "部门区划代码")
+    private String deptAreaCode;
+
+    @ApiModelProperty(value = "基础数据id")
+    private Long basicDataId;
+
+    @ApiModelProperty(value = "配置id	")
+    private Long dataScreenConfigId;
+
+    @ApiModelProperty(value = "得分")
+    private Double score;
+
+    @ApiModelProperty("最大分值")
+    private Double maxScore;
+    
+    @ApiModelProperty(value = "得分率")
+    private Double scoreRate;
+
+    @ApiModelProperty(value = "子类型")
+    private SubTypeEnum subType;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/DeptCalculateDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DeptCalculateDetailVO.java
new file mode 100644
index 0000000..8b12974
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DeptCalculateDetailVO.java
@@ -0,0 +1,23 @@
+package com.ruoyi.system.vo;
+
+import com.ruoyi.common.enums.CalculateTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/4/17
+ */
+@Data
+@ApiModel("部门得分计算视图对象")
+public class DeptCalculateDetailVO {
+
+    @ApiModelProperty("类型名称")
+    private String typeName;
+    @ApiModelProperty("计算方式")
+    private CalculateTypeEnum calculateType;
+    @ApiModelProperty("得分")
+    private Double score;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldAndScoreDataVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldAndScoreDataVO.java
new file mode 100644
index 0000000..df0ac8d
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldAndScoreDataVO.java
@@ -0,0 +1,37 @@
+package com.ruoyi.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/4/17
+ */
+@Data
+@ApiModel(value = "字段得分视图对象")
+public class FieldAndScoreDataVO implements Serializable {
+
+    private static final long serialVersionUID = 2327604704965853671L;
+
+    @ApiModelProperty(value = "计算类型id")
+    private Long id;
+
+    @ApiModelProperty("类型名称")
+    private String typeName;
+
+    @ApiModelProperty("得分")
+    private Double score;
+
+    @ApiModelProperty("最大分值")
+    @JsonInclude(JsonInclude.Include.ALWAYS)
+    private Double maxScore;
+
+    @ApiModelProperty("分类名称")
+    private String basicDataCategoryName;
+
+    @ApiModelProperty("分类id")
+    private String basicDataCategoryId;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/OperLogVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/OperLogVO.java
index f28f62f..7756285 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/OperLogVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/OperLogVO.java
@@ -1,6 +1,5 @@
 package com.ruoyi.system.vo;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -43,7 +42,4 @@
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
     private Date createTime;
 
-    @ApiModelProperty(value = "操作人")
-    @TableField("create_by")
-    private String createBy;
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProvinceStaticsVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProvinceStaticsVO.java
new file mode 100644
index 0000000..643db6c
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProvinceStaticsVO.java
@@ -0,0 +1,26 @@
+package com.ruoyi.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/4/16
+ */
+@Data
+@ApiModel("全省统计数视图对象")
+public class ProvinceStaticsVO implements Serializable {
+
+    private static final long serialVersionUID = 8096999916812384101L;
+    
+    @ApiModelProperty("省本级")
+    private Integer provinceCount;
+    @ApiModelProperty("市")
+    private Integer cityCount;
+    @ApiModelProperty("开发区")
+    private Integer developmentZonesCount;
+    @ApiModelProperty("县")
+    private Integer countyCount;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskAndTransferVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskAndTransferVO.java
new file mode 100644
index 0000000..9055bae
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskAndTransferVO.java
@@ -0,0 +1,27 @@
+package com.ruoyi.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.List;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/4/16
+ */
+@Data
+@ApiModel(value = "风险等级分布占比/得分分布/转移支付规模")
+public class RiskAndTransferVO {
+
+    @ApiModelProperty("转移支付规模")
+    private Double transferPaymentScale;
+    @ApiModelProperty("风险等级部门数")
+    private RiskCountVO riskCountVO;
+    @ApiModelProperty("地图回显相关参数")
+    private List<RiskMapVO> riskMapVOList;
+    @ApiModelProperty("风险等级区间")
+    private List<RiskLevelVO> riskLevelVOList;
+}
+
+
+
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskCountVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskCountVO.java
new file mode 100644
index 0000000..6c787f1
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskCountVO.java
@@ -0,0 +1,17 @@
+package com.ruoyi.system.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class RiskCountVO {
+
+    @ApiModelProperty("低风险")
+    private Integer noRiskCount;
+    @ApiModelProperty("一般风险")
+    private Integer lowRiskCount;
+    @ApiModelProperty("较高风险")
+    private Integer mediumRiskCount;
+    @ApiModelProperty("高风险")
+    private Integer highRiskCount;
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskLevelVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskLevelVO.java
new file mode 100644
index 0000000..e3a68cb
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskLevelVO.java
@@ -0,0 +1,22 @@
+package com.ruoyi.system.vo;
+
+import com.ruoyi.common.enums.RiskLevelEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/4/16
+ */
+@Data
+@ApiModel("风险区间视图对象")
+public class RiskLevelVO {
+
+    @ApiModelProperty("风险类型")
+    private RiskLevelEnum riskLevel;
+    @ApiModelProperty("最小值")
+    private Double min;
+    @ApiModelProperty("最大值")
+    private Double max;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskMapVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskMapVO.java
new file mode 100644
index 0000000..1a84db9
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskMapVO.java
@@ -0,0 +1,17 @@
+package com.ruoyi.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("地图回显相关参数")
+public class RiskMapVO {
+
+    @ApiModelProperty("区划代码")
+    private String areaCode;
+    @ApiModelProperty("部门名称")
+    private String areaName;
+    @ApiModelProperty("风险得分")
+    private Double score;
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskRankingVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskRankingVO.java
new file mode 100644
index 0000000..6f987f1
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/RiskRankingVO.java
@@ -0,0 +1,24 @@
+package com.ruoyi.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/4/16
+ */
+@Data
+@ApiModel("区/县风险排名前十")
+public class RiskRankingVO {
+
+    @ApiModelProperty("排名")
+    private Integer rank;
+    @ApiModelProperty("地区")
+    private String areaName;
+    @ApiModelProperty("风险得分")
+    private Double score;
+    @ApiModelProperty("风险等级")
+    private String riskLevel;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreCalculateDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreCalculateDetailVO.java
index 617868c..1e01d08 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreCalculateDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreCalculateDetailVO.java
@@ -1,9 +1,9 @@
 package com.ruoyi.system.vo;
 
-import com.ruoyi.common.basic.PageDTO;
 import com.ruoyi.common.enums.CalculateTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import java.util.List;
 import lombok.Data;
 
 /**
@@ -11,12 +11,17 @@
  * @date 2024/4/8
  */
 @Data
-@ApiModel(value = "问题视图对象")
+@ApiModel(value = "得分计算详情视图对象")
 public class ScoreCalculateDetailVO {
-    @ApiModelProperty("得分记录")
-    PageDTO<ScoreDetailVO> vo;
+
     @ApiModelProperty("类型名称")
     private String typeName;
     @ApiModelProperty("计算方式")
     private CalculateTypeEnum calculateType;
+    @ApiModelProperty("总条数")
+    protected Long total;
+    @ApiModelProperty("总页码数")
+    protected Long pages;
+    @ApiModelProperty("当前页数据")
+    protected List<ScoreDetailVO> list;
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreDataVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreDataVO.java
new file mode 100644
index 0000000..1339769
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreDataVO.java
@@ -0,0 +1,22 @@
+package com.ruoyi.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.ruoyi.common.enums.SubTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("形式指标得分数据视图对象")
+public class ScoreDataVO {
+
+    @ApiModelProperty("当前得分")
+    private Double score;
+    @ApiModelProperty("去年得分")
+    private Double lastScore;
+    @ApiModelProperty(value = "配置类型子类型(1=指标一 2=指标二 3=指标三 4=指标四)")
+    private SubTypeEnum subType;
+    @ApiModelProperty("最大分值")
+    @JsonInclude(JsonInclude.Include.ALWAYS)
+    private Double maxScore;
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreDetailVO.java
index 5372844..a32a3c0 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreDetailVO.java
@@ -5,9 +5,13 @@
 
 @Data
 public class ScoreDetailVO {
+
     @ApiModelProperty(value = "填报部门")
     private String areaName;
 
+    @ApiModelProperty(value = "部门区划代码")
+    private String areaCode;
+
     @ApiModelProperty(value = "负责人姓名")
     private String personInCharge;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreRankVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreRankVO.java
new file mode 100644
index 0000000..43dbeb0
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreRankVO.java
@@ -0,0 +1,22 @@
+package com.ruoyi.system.vo;
+
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/4/17
+ */
+@Data
+public class ScoreRankVO {
+
+    /**
+     * 区划代码
+     */
+    private String areaCode;
+    /**
+     * 得分
+     */
+    private Double score;
+
+    private Integer rank;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreRateDataVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreRateDataVO.java
new file mode 100644
index 0000000..c88a53b
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScoreRateDataVO.java
@@ -0,0 +1,27 @@
+package com.ruoyi.system.vo;
+
+import com.ruoyi.common.enums.SubTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/4/16
+ */
+@Data
+@ApiModel("数据指标得分数据视图对象")
+public class ScoreRateDataVO {
+
+    @ApiModelProperty("得分")
+    private Double score;
+
+    @ApiModelProperty("得分率")
+    private Double scoreRate;
+
+    @ApiModelProperty(value = "配置类型子类型(1=指标一 2=指标二 3=指标三 4=指标四)")
+    private SubTypeEnum subType;
+    
+    @ApiModelProperty("排名")
+    private Integer rank;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TransferPaymentScaleVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TransferPaymentScaleVO.java
new file mode 100644
index 0000000..dd431a7
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TransferPaymentScaleVO.java
@@ -0,0 +1,23 @@
+package com.ruoyi.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/4/16
+ */
+@Data
+@ApiModel(value = "转移支付规模视图对象")
+public class TransferPaymentScaleVO {
+
+    @ApiModelProperty("排名")
+    private Integer rank;
+    
+    @ApiModelProperty("地区")
+    private String areaName;
+
+    @ApiModelProperty("转移支付规模")
+    private String transferPaymentScale;
+}
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index 67f05aa..4ed41f5 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -252,7 +252,7 @@
     WHERE u.del_flag = 0
       AND u.user_type = 1
   </select>
-  <select id="selectCount" resultType="java.lang.Integer">
+  <select id="selectCountByStatus" resultType="java.lang.Integer">
     select count(*) from sys_user
     <where>
       <if test="status != null">
diff --git a/ruoyi-system/src/main/resources/mapper/system/TbBasicDataConfigMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TbBasicDataConfigMapper.xml
index 5943e99..3e63b49 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TbBasicDataConfigMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TbBasicDataConfigMapper.xml
@@ -12,6 +12,7 @@
     <result column="calculate_type" property="calculateType"/>
     <result column="number_calculate_formula" property="numberCalculateFormula"/>
     <result column="field_id_str" property="fieldIdStr"/>
+    <result column="max_score" property="maxScore"/>
     <result column="status" property="status"/>
     <result column="del_flag" property="delFlag"/>
     <result column="create_by" property="createBy"/>
@@ -32,7 +33,7 @@
     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}
+      tbd.`quarter` = #{query.quarter} AND ts.del_flag = 0 AND tbd.del_flag = 0 AND tdc.del_flag = 0
       <if test="query.typeName !=null and query.typeName != ''">
         AND tdc.type_name LIKE CONCAT('%',#{query.typeName},'%')
       </if>
@@ -41,6 +42,7 @@
       </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
@@ -48,8 +50,9 @@
     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 tbdc.type_name LIKE CONCAT('%',#{query.basicDataConfigName},'%')
+      tbdc.del_flag = 0 AND tbdc2.del_flag = 0
+      <if test="query.typeName != null and query.typeName !=''">
+        AND tbdc.type_name LIKE CONCAT('%',#{typeName},'%')
       </if>
       <if test="query.status !=null">
         AND tbdc.status = #{query.status}
@@ -57,6 +60,7 @@
       <if test="query.calculateType !=null">
         AND tbdc.calculate_type = #{query.calculateType}
       </if>
+      ORDER BY tbdc.create_time DESC
     </where>
   </select>
 
diff --git a/ruoyi-system/src/main/resources/mapper/system/TbBasicDataMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TbBasicDataMapper.xml
index 1958646..c39a7d6 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TbBasicDataMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TbBasicDataMapper.xml
@@ -60,5 +60,37 @@
       </if>
     </where>
   </select>
+  <select id="transferPaymentScalePage"
+    resultType="com.ruoyi.system.vo.TransferPaymentScaleVO">
+    SELECT
+    tbd.transfer_payment_scale,
+    su.area_name
+    FROM tb_basic_data tbd
+    LEFT JOIN sys_user su
+    ON tbd.dept_area_code = su.area_code
+    WHERE 1 = 1 AND su.area_name IS NOT NULL
+    <if test="quarter != null and quarter !=''">
+      AND tbd.quarter = #{quarter}
+    </if>
+    ORDER BY tbd.transfer_payment_scale
+    DESC
+
+  </select>
+  <select id="selectBasicDataFieldsConfig"
+    resultType="com.ruoyi.system.vo.FieldAndScoreDataVO">
+    SELECT bdc.id,
+           ts.score,
+           tbdc.basic_data_category_name,
+           bdc.type_name,
+           bdc.basic_data_category_id,
+           bdc.max_score
+    FROM tb_basic_data_category tbdc
+           LEFT JOIN tb_basic_data_config bdc ON tbdc.id = bdc.basic_data_category_id
+           LEFT JOIN tb_score ts ON ts.basic_data_config_id = bdc.id
+           LEFT JOIN tb_basic_data tbd ON tbd.id = ts.basic_data_id
+    WHERE 1 = 1
+      AND tbd.dept_area_code = #{areaCode}
+      AND tbd.quarter = #{nowQuarter}
+  </select>
 
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TbDataScreenScoreMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TbDataScreenScoreMapper.xml
index 535266b..b79cc22 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TbDataScreenScoreMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TbDataScreenScoreMapper.xml
@@ -18,5 +18,92 @@
   <sql id="Base_Column_List">
     id, dept_area_code, basic_data_id, data_screen_config_id, score, score_rate, create_time
   </sql>
+  <select id="queryScore4Map" resultType="com.ruoyi.system.vo.RiskMapVO">
+    SELECT tdss.score, su.area_code, su.area_name
+    FROM tb_data_screen_score tdss
+           LEFT JOIN tb_data_screen_config tbsc ON tbsc.id = tdss.data_screen_config_id
+           LEFT JOIN tb_basic_data tbd ON tbd.id = tdss.basic_data_id
+           LEFT JOIN sys_user su ON su.area_code = tbd.dept_area_code
+    WHERE 1 = 1
+      AND tbd.quarter = #{nowQuarter}
+      AND tbsc.id = #{dataScreenConfigId}
+  </select>
+  <select id="queryRiskRanking" resultType="com.ruoyi.system.vo.RiskRankingVO">
+    SELECT tdss.score, su.area_code, su.area_name
+    FROM tb_data_screen_score tdss
+           LEFT JOIN tb_data_screen_config tbsc ON tbsc.id = tdss.data_screen_config_id
+           LEFT JOIN tb_basic_data tbd ON tbd.id = tdss.basic_data_id
+           LEFT JOIN sys_user su ON su.area_code = tbd.dept_area_code
+    WHERE 1 = 1
+      AND tbd.quarter = #{nowQuarter}
+      AND tbsc.id = #{dataScreenConfigId}
+      AND su.area_level LIKE '县'
+    ORDER BY tdss.score DESC
+  </select>
+  <select id="selectRiskByQuarter" resultType="com.ruoyi.system.domain.TbDataScreenScore">
+    SELECT tdss.*
+    FROM tb_data_screen_score tdss
+    LEFT JOIN tb_data_screen_config tbsc ON tbsc.id = tdss.data_screen_config_id
+    LEFT JOIN tb_basic_data tbd ON tbd.id = tdss.basic_data_id
+    WHERE 1 = 1
+    AND tbd.quarter = #{nowQuarter}
+    AND tbsc.id = #{dataScreenConfigId}
+    <if test="areaCode !=null and areaCode !=''">
+      AND tbd.dept_area_code = #{areaCode}
+    </if>
+  </select>
+  <select id="queryScoreByAreaAndYear"
+    resultType="com.ruoyi.system.vo.DataScreenScoreVO">
+    SELECT tdss.*,tbsc.sub_type
+    FROM tb_data_screen_score tdss
+    LEFT JOIN tb_data_screen_config tbsc ON tbsc.id = tdss.data_screen_config_id
+    LEFT JOIN tb_basic_data tbd ON tbd.id = tdss.basic_data_id
+    WHERE 1 = 1
+    AND tbd.dept_area_code = #{areaCode}
+    AND tbsc.id = #{dataScreenConfigId}
+    <if test="yearType==1">
+      AND YEAR(tbd.reporting_time) = YEAR(CURDATE())
+    </if>
+    <if test="yearType==2">
+      AND YEAR(tbd.reporting_time) = YEAR(CURDATE())-1
+    </if>
+  </select>
+  <select id="selectIndicators"
+    resultType="com.ruoyi.system.vo.DataScreenScoreVO">
+    SELECT tdss.*,tbsc.sub_type,tbsc.max_score
+    FROM tb_data_screen_score tdss
+    LEFT JOIN tb_data_screen_config tbsc ON tbsc.id = tdss.data_screen_config_id
+    LEFT JOIN tb_basic_data tbd ON tbd.id = tdss.basic_data_id
+    WHERE 1 = 1
+    AND tbd.dept_area_code = #{areaCode}
+    AND tbsc.type = #{dataScreenConfigEnum}
+    <if test="yearType!=null and yearType==1">
+      AND YEAR(tbd.reporting_time) = YEAR(CURDATE())
+    </if>
+    <if test="yearType!=null and yearType==2">
+      AND YEAR(tbd.reporting_time) = YEAR(CURDATE())-1
+    </if>
+    <if test="nowQuarter!=null and nowQuarter != ''">
+      AND tbd.quarter = #{nowQuarter}
+    </if>
+  </select>
+  <select id="getRankByScore" resultType="java.lang.Integer">
+    SET @rank = 0;
+
+    SELECT `rank`,
+           score,
+           dept_area_code
+    FROM (SELECT tdss.score, tdss.dept_area_code, (@rank := @rank + 1) AS `rank`
+          FROM tb_data_screen_score tdss
+                 LEFT JOIN tb_data_screen_config tbsc ON tbsc.id = tdss.data_screen_config_id
+                 LEFT JOIN tb_basic_data tbd ON tbd.id = tdss.basic_data_id
+          WHERE 1 = 1
+            AND tbsc.type = #{dataScreenConfigEnum}
+            AND tbsc.sub_type = #{subType}
+            AND tbd.quarter = #{nowQuarter}
+          ORDER BY tdss.score DESC) AS rank_data
+    WHERE dept_area_code = #{areaCode}
+      AND score = #{score}
+  </select>
 
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TbScoreMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TbScoreMapper.xml
index c2766c7..e8fa944 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TbScoreMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TbScoreMapper.xml
@@ -1,59 +1,116 @@
 <?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.TbScoreMapper">
 
-    <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.ruoyi.system.domain.TbScore">
-        <id column="id" property="id"/>
-        <result column="basic_data_config_id" property="basicDataConfigId"/>
-        <result column="basic_data_id" property="basicDataId"/>
-        <result column="score" property="score"/>
-        <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.TbScore">
+    <id column="id" property="id"/>
+    <result column="basic_data_config_id" property="basicDataConfigId"/>
+    <result column="basic_data_id" property="basicDataId"/>
+    <result column="score" property="score"/>
+    <result column="del_flag" property="delFlag"/>
+    <result column="create_time" property="createTime"/>
+    <result column="update_time" property="updateTime"/>
+  </resultMap>
 
-    <!-- 通用查询结果列 -->
-    <sql id="Base_Column_List">
-        id, basic_data_config_id, basic_data_id, score, del_flag, create_by, create_time, update_by, update_time
-    </sql>
-    <select id="pageScore" resultType="com.ruoyi.system.vo.ScoreVO">
-        SELECT
-        tbdc.type_name,
-        tbdc.calculate_type,
-        ts.score
-        FROM
-        tb_score ts
-        LEFT JOIN tb_basic_data tbd ON ts.basic_data_id = tbd.id
-        LEFT JOIN tb_basic_data_config tbdc ON ts.basic_data_config_id = tbdc.id
-        WHERE
-        1=1
-        AND tbd.id = #{query.basicDataId}
-        <if test="query.typeName !=null and query.typeName!=''">
-            AND tbdc.type_name like Concat('%',#{query.typeName},'%')
-        </if>
-        <if test="query.typeName !=null and query.typeName!=''">
-            AND tbdc.calculate_type = #{query.type}
-        </if>
+  <!-- 通用查询结果列 -->
+  <sql id="Base_Column_List">
+    id, basic_data_config_id, basic_data_id, score, del_flag, create_by, create_time, update_by, update_time
+  </sql>
+  <select id="pageScore" resultType="com.ruoyi.system.vo.ScoreVO">
+    SELECT
+    tbdc.type_name,
+    tbdc.calculate_type,
+    ts.score
+    FROM
+    tb_score ts
+    LEFT JOIN tb_basic_data tbd ON ts.basic_data_id = tbd.id
+    LEFT JOIN tb_basic_data_config tbdc ON ts.basic_data_config_id = tbdc.id
+    WHERE
+    1=1
+    AND tbd.id = #{query.basicDataId}
+    <if test="query.typeName !=null and query.typeName!=''">
+      AND tbdc.type_name like Concat('%',#{query.typeName},'%')
+    </if>
+    <if test="query.typeName !=null and query.typeName!=''">
+      AND tbdc.calculate_type = #{query.type}
+    </if>
 
-    </select>
-    <select id="scoreCalculateDetail" resultType="com.ruoyi.system.vo.ScoreDetailVO">
-        SELECT
-        su.area_name,
-        ts.score,
-        su.person_in_charge,
-        su.phone_number
-        FROM tb_score ts
-        LEFT JOIN tb_basic_data tbd ON ts.basic_data_id = tbd.id
-        LEFT JOIN sys_user su ON tbd.dept_area_code = su.area_code
-        <where>
-            ts.basic_data_config_id = #{query.id}
-            <if test="query.areaName != null and query.areaName != ''">
-                AND su.area_name LIKE CONCAT('%',#{query.areaName},'%')
-            </if>
-        </where>
-    </select>
+  </select>
+  <select id="scoreCalculateDetail" resultType="com.ruoyi.system.vo.ScoreDetailVO">
+    SELECT
+    su.area_name,
+    su.area_code,
+    ts.score,
+    su.person_in_charge,
+    su.phone_number
+    FROM tb_score ts
+    LEFT JOIN tb_basic_data tbd ON ts.basic_data_id = tbd.id
+    LEFT JOIN sys_user su ON tbd.dept_area_code = su.area_code
+    <where>
+      ts.basic_data_config_id = #{query.id} AND su.area_name IS NOT NULL
+      <if test="query.areaName != null and query.areaName != ''">
+        AND su.area_name LIKE CONCAT('%',#{query.areaName},'%')
+      </if>
+    </where>
+  </select>
+  <select id="queryTotalScoreList" resultType="com.ruoyi.system.vo.ScoreRankVO">
 
+  </select>
+  <select id="queryRankAndScoreByAreaCode" resultType="com.ruoyi.system.vo.ScoreRankVO">
+    SET @rank = 0;
+    SELECT dept_area_code     AS areaCode,
+           COALESCE(score, 0) AS score,
+           `rank`
+    FROM (SELECT tbc.dept_area_code,
+                 SUM(ts.score)        AS score,
+                 (@rank := @rank + 1) AS `rank`
+          FROM tb_score ts
+                 LEFT JOIN tb_basic_data tbc ON ts.basic_data_id = tbc.id
+                 LEFT JOIN tb_basic_data_config tbdc ON ts.basic_data_config_id = tbdc.id
+          WHERE YEAR(tbc.reporting_time) = YEAR(
+            CURDATE())
+          GROUP BY tbc.dept_area_code
+          ORDER BY score
+            DESC) AS ranked_data
+    WHERE dept_area_code = #{areaCode}
+  </select>
+  <select id="deptCalculateDetail" resultType="com.ruoyi.system.vo.DeptCalculateDetailVO">
+    SELECT bdc.id,
+    ts.score,
+    bdc.type_name,
+    bdc.calculate_type
+    FROM tb_basic_data_category tbdc
+    LEFT JOIN tb_basic_data_config bdc ON tbdc.id = bdc.basic_data_category_id
+    LEFT JOIN tb_score ts ON ts.basic_data_config_id = bdc.id
+    LEFT JOIN tb_basic_data tbd ON tbd.id = ts.basic_data_id
+    WHERE 1 = 1
+    AND tbdc.id = #{query.basicDataCategoryId}
+    AND tbd.quarter = #{nowQuarter}
+    <if test="query.areaCode != null and query.areaCode !=''">
+      AND tbd.dept_area_code = #{query.areaCode}
+    </if>
+  </select>
+  <select id="fieldsDetail" resultType="com.ruoyi.system.vo.ScoreDetailVO">
+    SELECT
+    su.area_name,
+    su.area_code,
+    ts.score,
+    su.person_in_charge,
+    su.phone_number
+    FROM tb_score ts
+    LEFT JOIN tb_basic_data tbd ON ts.basic_data_id = tbd.id
+    LEFT JOIN sys_user su ON tbd.dept_area_code = su.area_code
+    <where>
+      ts.basic_data_config_id = #{query.id} AND su.area_name IS NOT NULL
+      AND su.area_code IN
+      <foreach collection="countyList" item="code" open="(" separator="," close=")">
+        #{code}
+      </foreach>
+      <if test="query.areaCode != null and query.areaCode != ''">
+        AND su.area_code=#{query.areaCode}
+      </if>
+    </where>
+  </select>
 </mapper>

--
Gitblit v1.7.1