From 4b5624af301dfbdcf54b65dc55aadde1b6a8efd5 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期三, 24 七月 2024 19:55:24 +0800
Subject: [PATCH] bug修改,查询季度写死“2024年一季度”

---
 finance-admin/src/main/java/com/finance/web/controller/api/CurrentQuarterController.java   |   16 
 finance-admin/src/main/java/com/finance/web/controller/excel/DeptExcel.java                |   25 
 finance-system/src/main/java/com/finance/system/dto/QuestionDTO.java                       |    2 
 finance-system/src/main/resources/mapper/system/TbBasicDataMapper.xml                      |    9 
 finance-admin/src/main/java/com/finance/web/controller/interceptor/MybatisInterceptor.java |    8 
 finance-admin/src/main/java/com/finance/web/controller/api/HistoryDataController.java      |    6 
 finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java         |  199 +++++++++----
 finance-system/src/main/resources/mapper/system/TbScoreMapper.xml                          |   55 ++-
 finance-system/src/main/java/com/finance/system/domain/TbBasicData.java                    |    5 
 finance-system/src/main/java/com/finance/system/listener/BasicDataListener.java            |   15 
 finance-common/src/main/java/com/finance/common/enums/QuestionTypeEnum.java                |    2 
 finance-system/src/main/java/com/finance/system/vo/BasicDataReportingVO.java               |   11 
 finance-system/src/main/java/com/finance/system/service/TbBasicDataService.java            |   11 
 finance-system/src/main/java/com/finance/system/service/TbScoreService.java                |    9 
 finance-system/src/main/java/com/finance/system/listener/HistoryDataListener.java          |   10 
 finance-admin-dept/src/main/java/com/finance/web/controller/api/HistoryDataController.java |    3 
 finance-system/src/main/java/com/finance/system/service/impl/TbScoreServiceImpl.java       |   33 +
 finance-common/src/main/java/com/finance/common/enums/AreaLevelEnum.java                   |    9 
 finance-system/src/main/java/com/finance/system/query/CalculateDetailQuery.java            |    3 
 finance-system/src/main/java/com/finance/system/service/TbQuestionService.java             |    2 
 finance-system/src/main/java/com/finance/system/service/impl/TbQuestionServiceImpl.java    |   15 +
 finance-system/src/main/java/com/finance/system/mapper/TbScoreMapper.java                  |    5 
 finance-admin/src/main/java/com/finance/web/controller/lisenter/DeptImportListener.java    |   60 +++
 finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataServiceImpl.java   |   48 ++-
 finance-common/src/main/java/com/finance/common/utils/DateUtils.java                       |   59 ++++
 finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java          |  173 +++++++----
 finance-system/src/main/java/com/finance/system/service/impl/TbFieldServiceImpl.java       |    4 
 finance-system/src/main/java/com/finance/system/mapper/TbBasicDataMapper.java              |    3 
 finance-system/src/main/java/com/finance/system/vo/RiskAndTransferVO.java                  |    2 
 finance-system/src/main/java/com/finance/system/query/ScoreCalculateDetailQuery.java       |    3 
 30 files changed, 554 insertions(+), 251 deletions(-)

diff --git a/finance-admin-dept/src/main/java/com/finance/web/controller/api/HistoryDataController.java b/finance-admin-dept/src/main/java/com/finance/web/controller/api/HistoryDataController.java
index cdc6724..3ef2d55 100644
--- a/finance-admin-dept/src/main/java/com/finance/web/controller/api/HistoryDataController.java
+++ b/finance-admin-dept/src/main/java/com/finance/web/controller/api/HistoryDataController.java
@@ -4,7 +4,6 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.finance.common.basic.PageDTO;
 import com.finance.common.core.domain.R;
-import com.finance.common.enums.ReportingStatusEnum;
 import com.finance.common.utils.SecurityUtils;
 import com.finance.system.domain.TbBasicData;
 import com.finance.system.query.HistoryDataQuery;
@@ -56,7 +55,7 @@
         String areaCode = SecurityUtils.getLoginUser().getUser().getAreaCode();
         Page<TbBasicData> page = tbBasicDataService.lambdaQuery()
                 .eq(TbBasicData::getDeptAreaCode, areaCode)
-                .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED)
+                // .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()));
diff --git a/finance-admin/src/main/java/com/finance/web/controller/api/CurrentQuarterController.java b/finance-admin/src/main/java/com/finance/web/controller/api/CurrentQuarterController.java
index 9ecbf1c..ca43d79 100644
--- a/finance-admin/src/main/java/com/finance/web/controller/api/CurrentQuarterController.java
+++ b/finance-admin/src/main/java/com/finance/web/controller/api/CurrentQuarterController.java
@@ -67,7 +67,9 @@
     public R<PageDTO<CurrentFieldsVO>> fieldsStatics(
             @Validated @RequestBody CurrentFieldsQuery dto) {
         try {
-            dto.setQuarter(DateUtils.getNowQuarter());
+            String previousQuarter = DateUtils.getPreviousQuarter();
+            previousQuarter = "2024年一季度";
+            dto.setQuarter(previousQuarter);
             return tbBasicDataService.fieldsStatics(dto);
         } catch (Exception e) {
             log.error("获取字段统计相关信息异常", e);
@@ -147,7 +149,9 @@
     public R<PageDTO<ScoreCalculateVO>> scoreCalculate(
             @Validated @RequestBody ScoreCalculateQuery query) {
         try {
-            query.setQuarter(DateUtils.getNowQuarter());
+            String previousQuarter = DateUtils.getPreviousQuarter();
+            previousQuarter = "2024年一季度";
+            query.setQuarter(previousQuarter);
             return R.ok(tbBasicDataService.scoreCalculatePage(query));
         } catch (Exception e) {
             log.error("获取得分计算异常", e);
@@ -166,7 +170,11 @@
     @ApiImplicitParam(name = "areaName", value = "部门名称", required = false, dataType = "string", paramType = "query", dataTypeClass = String.class)
     public R<ScoreCalculateDetailVO> scoreCalculateDetail(
             @Validated @RequestBody ScoreCalculateDetailQuery query) {
-        return R.ok(tbScoreService.scoreCalculateDetail(query));
+        try {
+            return R.ok(tbScoreService.scoreCalculateDetail(query));
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
     }
 
     /**
@@ -245,7 +253,7 @@
     @DeleteMapping("/delete")
     @ApiOperation(value = "发现问题-删除问题", notes = "发现问题")
     public R<Void> delete(@RequestParam("id") Long id) {
-        tbQuestionService.removeById(id);
+        tbQuestionService.delete(id);
         return R.ok();
     }
 
diff --git a/finance-admin/src/main/java/com/finance/web/controller/api/HistoryDataController.java b/finance-admin/src/main/java/com/finance/web/controller/api/HistoryDataController.java
index 31ed6df..75a415b 100644
--- a/finance-admin/src/main/java/com/finance/web/controller/api/HistoryDataController.java
+++ b/finance-admin/src/main/java/com/finance/web/controller/api/HistoryDataController.java
@@ -189,7 +189,11 @@
     @ApiOperation("得分计算-查看详情")
     public R<ScoreCalculateDetailVO> scoreCalculateDetail(
             @Validated @RequestBody ScoreCalculateDetailQuery query) {
-        return R.ok(tbScoreService.scoreCalculateDetail(query));
+        try {
+            return R.ok(tbScoreService.scoreCalculateDetail(query));
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
     }
 
     /**
diff --git a/finance-admin/src/main/java/com/finance/web/controller/excel/DeptExcel.java b/finance-admin/src/main/java/com/finance/web/controller/excel/DeptExcel.java
index 94dcc62..c9a814f 100644
--- a/finance-admin/src/main/java/com/finance/web/controller/excel/DeptExcel.java
+++ b/finance-admin/src/main/java/com/finance/web/controller/excel/DeptExcel.java
@@ -6,10 +6,9 @@
 import com.finance.web.controller.conveter.CountyFlagConverter;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-
-import java.io.Serializable;
 
 /**
  * <p>
@@ -21,53 +20,53 @@
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
-@ApiModel(value="部门导入Excel对象")
+@ApiModel(value = "部门导入Excel对象")
 public class DeptExcel implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "部门地区")
     @Excel(name = "部门地区")
-    @ExcelProperty(value = "部门地区",index = 0)
+    @ExcelProperty(value = "部门地区", index = 0)
     private String areaName;
 
     @ApiModelProperty(value = "别名")
     @Excel(name = "别名")
-    @ExcelProperty(value = "别名",index = 1)
+    @ExcelProperty(value = "别名", index = 1)
     private String areaAlias;
 
     @ApiModelProperty(value = "区划代码")
     @Excel(name = "区划代码")
-    @ExcelProperty(value = "区划代码",index = 2)
+    @ExcelProperty(value = "区划代码", index = 2)
     private String areaCode;
 
     @ApiModelProperty(value = "级次(省、市、县)")
     @Excel(name = "级次(省、市、县)")
-    @ExcelProperty(value = "级次 (省、市、县)",index = 3)
+    @ExcelProperty(value = "级次 (省、市、县)", index = 3)
     private String areaLevel;
 
     @ApiModelProperty(value = "县级标志(不包含直辖市的区 0:否 1:是)")
-    @Excel(name = "县级标志 是/否",enumImportMethod = "getByDesc")
-    @ExcelProperty(value = "县级标志 是/否",index = 4,converter = CountyFlagConverter.class)
+    @Excel(name = "县级标志 是/否", enumImportMethod = "getByDesc")
+    @ExcelProperty(value = "县级标志 是/否", index = 4, converter = CountyFlagConverter.class)
     private DisabledEnum countyFlag;
 
     @ApiModelProperty(value = "登录账号")
     @Excel(name = "登录账号")
-    @ExcelProperty(value = "登录账号",index = 6)
+    @ExcelProperty(value = "登录账号", index = 6)
     private String userName;
 
     @ApiModelProperty(value = "负责人姓名")
-    @ExcelProperty(value = "负责人姓名",index = 5)
+    @ExcelProperty(value = "负责人姓名", index = 5)
     private String personInCharge;
 
     @ApiModelProperty(value = "联系电话")
     @Excel(name = "联系电话")
-    @ExcelProperty(value = "联系电话",index = 7)
+    @ExcelProperty(value = "联系电话", index = 7)
     private String phoneNumber;
 
     @ApiModelProperty(value = "登录密码")
     @Excel(name = "登录密码")
-    @ExcelProperty(value = "登录密码",index = 8)
+    @ExcelProperty(value = "登录密码", index = 8)
     private String password;
 
 }
diff --git a/finance-admin/src/main/java/com/finance/web/controller/interceptor/MybatisInterceptor.java b/finance-admin/src/main/java/com/finance/web/controller/interceptor/MybatisInterceptor.java
index 8a09b89..d17193a 100644
--- a/finance-admin/src/main/java/com/finance/web/controller/interceptor/MybatisInterceptor.java
+++ b/finance-admin/src/main/java/com/finance/web/controller/interceptor/MybatisInterceptor.java
@@ -22,7 +22,7 @@
 
 @Slf4j
 @Component
-@Intercepts({@Signature(type = Executor.class, method = "update" , args = {MappedStatement.class,
+@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class,
         Object.class})})
 public class MybatisInterceptor implements Interceptor {
 
@@ -63,14 +63,14 @@
                             field.setAccessible(false);
                         }
                     }
-                    //注入创建时间
+                    // 注入创建时间
                     if ("createTime".equals(field.getName())) {
                         field.setAccessible(true);
                         field.set(parameter, new Date());
                         field.setAccessible(false);
                     }
                 } catch (Exception e) {
-                    log.error("failed to insert data, exception = " , e);
+                    log.error("failed to insert data, exception = ", e);
                 }
             }
         }
@@ -93,7 +93,7 @@
                         field.setAccessible(false);
                     }
                 } catch (Exception e) {
-                    log.error("failed to update data, exception = " , e);
+                    log.error("failed to update data, exception = ", e);
                 }
             }
         }
diff --git a/finance-admin/src/main/java/com/finance/web/controller/lisenter/DeptImportListener.java b/finance-admin/src/main/java/com/finance/web/controller/lisenter/DeptImportListener.java
index af08703..96e9dae 100644
--- a/finance-admin/src/main/java/com/finance/web/controller/lisenter/DeptImportListener.java
+++ b/finance-admin/src/main/java/com/finance/web/controller/lisenter/DeptImportListener.java
@@ -6,14 +6,17 @@
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.finance.common.core.domain.entity.SysUser;
+import com.finance.common.enums.AreaLevelEnum;
 import com.finance.common.enums.UserTypeEnum;
 import com.finance.common.exception.ServiceException;
-import com.finance.common.utils.BeanUtils;
+import com.finance.common.utils.CollUtils;
 import com.finance.common.utils.SecurityUtils;
 import com.finance.common.utils.StringUtils;
 import com.finance.system.service.ISysUserService;
 import com.finance.web.controller.excel.DeptExcel;
+import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 import lombok.extern.slf4j.Slf4j;
 
 /**
@@ -94,14 +97,53 @@
 
     private void saveData() {
         log.info("{}条数据,开始存储数据库!", cachedDataList.size());
-        List<SysUser> sysUsers = BeanUtils.copyList(cachedDataList, SysUser.class);
-        sysUsers.forEach(item -> {
-            item.setPassword(SecurityUtils.encryptPassword(item.getPassword()));
-            item.setNickName(item.getAreaName());
-            item.setUserType(UserTypeEnum.DEPARTMENT);
-        });
-        sysUserService.remove(Wrappers.<SysUser>lambdaQuery()
-                .eq(SysUser::getUserType, UserTypeEnum.DEPARTMENT.getCode()));
+        List<SysUser> sysUsers = cachedDataList.stream().map(data -> {
+            SysUser sysUser = new SysUser();
+            sysUser.setAreaName(data.getAreaName());
+            sysUser.setAreaAlias(data.getAreaAlias());
+            sysUser.setAreaCode(data.getAreaCode());
+            sysUser.setAreaLevel(AreaLevelEnum.getEnumByDesc(data.getAreaLevel()));
+            sysUser.setCountyFlag(data.getCountyFlag());
+            sysUser.setUserName(data.getUserName());
+            sysUser.setNickName(data.getUserName());
+            sysUser.setPersonInCharge(data.getPersonInCharge());
+            sysUser.setPhoneNumber(data.getPhoneNumber());
+            sysUser.setPassword(SecurityUtils.encryptPassword(data.getPassword()));
+            sysUser.setUserType(UserTypeEnum.DEPARTMENT);
+            return sysUser;
+        }).collect(Collectors.toList());
+        List<String> areaCodeSet = sysUsers.stream().map(SysUser::getAreaCode)
+                .collect(Collectors.toList());
+        List<SysUser> userListOrg = sysUserService.list(
+                Wrappers.lambdaQuery(SysUser.class).in(SysUser::getAreaCode, areaCodeSet)
+                        .eq(SysUser::getUserType, UserTypeEnum.DEPARTMENT.getCode()));
+        List<String> collect = userListOrg.stream().map(SysUser::getAreaCode)
+                .collect(Collectors.toList());
+        List<SysUser> updateUserList = null;
+        if (CollUtils.isNotEmpty(collect)) {
+            updateUserList = sysUsers.stream()
+                    .filter(item -> collect.contains(item.getAreaCode())).collect(
+                            Collectors.toList());
+            List<SysUser> updateUsers = updateUserList.stream()
+                    .flatMap(updUser -> userListOrg.stream()
+                            .filter(userOrg -> userOrg.getAreaCode().equals(updUser.getAreaCode()))
+                            .peek(userOrg -> {
+                                userOrg.setAreaName(updUser.getAreaName());
+                                userOrg.setAreaAlias(updUser.getAreaAlias());
+                                userOrg.setUserName(updUser.getUserName());
+                                userOrg.setPersonInCharge(updUser.getPersonInCharge());
+                                userOrg.setPhoneNumber(updUser.getPhoneNumber());
+                                userOrg.setAreaLevel(updUser.getAreaLevel());
+                                userOrg.setCountyFlag(updUser.getCountyFlag());
+                                userOrg.setPassword(updUser.getPassword());
+                                userOrg.setUpdateTime(new Date());
+                            }))
+                    .collect(Collectors.toList());
+            sysUserService.updateBatchById(updateUsers);
+        }
+        if (CollUtils.isNotEmpty(updateUserList)) {
+            sysUsers.removeAll(updateUserList);
+        }
         sysUserService.saveBatch(sysUsers);
         log.info("{}条数据,导入成功!", cachedDataList.size());
     }
diff --git a/finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java b/finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java
index acf53a9..0024565 100644
--- a/finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java
+++ b/finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java
@@ -52,7 +52,7 @@
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.ArrayList;
-import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -116,12 +116,13 @@
     }
 
     public RiskAndTransferVO getRiskAndTransfer() throws Exception {
-        String nowQuarter = DateUtils.getNowQuarter();
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        previousQuarter = "2024年一季度";
         RiskAndTransferVO riskAndTransferVO = new RiskAndTransferVO();
         // 查询转移支付规模总额
         List<TbBasicData> list = tbBasicDataService.lambdaQuery()
                 .select(TbBasicData::getTransferPaymentScale)
-                .eq(TbBasicData::getQuarter, nowQuarter)
+                .eq(TbBasicData::getQuarter, previousQuarter)
                 // .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED)
                 .list();
         Optional<Double> reduce = list.stream()
@@ -133,9 +134,32 @@
         List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel);
         riskAndTransferVO.setRiskLevelVOList(riskLevelVOList);
         RiskCountVO riskCountVO = new RiskCountVO();
-        List<RiskMapVO> riskMapVOList = tbScoreService.getCurrentScoreList(nowQuarter, null);
+        List<RiskMapVO> riskMapVOList = tbScoreService.getCurrentScoreList(previousQuarter, null);
+        String[] noRiskArr = riskLevel.getNoRisk().split("-");
+        String[] lowRiskArr = riskLevel.getLowRisk().split("-");
+        String[] mediumRiskArr = riskLevel.getMediumRisk().split("-");
+        String[] highRiskArr = riskLevel.getHighRisk().split("-");
+        List<RiskMapVO> cityRiskVO = riskMapVOList.stream()
+                .filter(r -> r.getAreaLevel().equals(AreaLevelEnum.CITY))
+                .collect(Collectors.toList());
+        long noRiskCount = cityRiskVO.stream()
+                .filter(item -> item.getScore() >= Double.parseDouble(noRiskArr[0])
+                        && item.getScore() <= Double.parseDouble(noRiskArr[1])).count();
+        riskCountVO.setNoRiskCount((int) noRiskCount);
+        long lowRiskCount = cityRiskVO.stream()
+                .filter(item -> item.getScore() >= Double.parseDouble(lowRiskArr[0])
+                        && item.getScore() <= Double.parseDouble(lowRiskArr[1])).count();
+        riskCountVO.setLowRiskCount((int) lowRiskCount);
+        long mediumRiskCount = cityRiskVO.stream()
+                .filter(item -> item.getScore() >= Double.parseDouble(mediumRiskArr[0])
+                        && item.getScore() <= Double.parseDouble(mediumRiskArr[1])).count();
+        riskCountVO.setHighRiskCount((int) mediumRiskCount);
+        long highRiskCount = cityRiskVO.stream()
+                .filter(item -> item.getScore() >= Double.parseDouble(highRiskArr[0])
+                        && item.getScore() <= Double.parseDouble(highRiskArr[1])).count();
+        riskCountVO.setHighRiskCount((int) highRiskCount);
 
-        for (RiskLevelVO vo : riskLevelVOList) {
+        /*for (RiskLevelVO vo : riskLevelVOList) {
             long count = riskMapVOList.stream()
                     .filter(r -> r.getAreaLevel().equals(AreaLevelEnum.CITY))
                     .filter(item -> item.getScore() >= vo.getMin()
@@ -150,7 +174,7 @@
             } else if (vo.getRiskLevel().equals(RiskLevelEnum.L4)) {
                 riskCountVO.setHighRiskCount((int) count);
             }
-        }
+        }*/
         // TODO
         // riskCountVO.setNoRiskCount(50);
         // riskCountVO.setLowRiskCount(45);
@@ -210,7 +234,10 @@
     public List<RiskRankingVO> riskRanking() throws Exception {
         DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel();
         List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel);
-        List<RiskRankingVO> voList = tbScoreService.queryRiskRanking(DateUtils.getNowQuarter());
+        // List<RiskRankingVO> voList = tbScoreService.queryRiskRanking(
+        //         DateUtils.getPreviousQuarter());
+        List<RiskRankingVO> voList = tbScoreService.queryRiskRanking(
+                "2024年一季度");
         int rank = 1;
         for (RiskRankingVO riskRankingVO : voList) {
             riskRankingVO.setRank(rank++);
@@ -233,8 +260,10 @@
     }
 
     public List<QuestionVO> queryQuestions() throws Exception {
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        previousQuarter = "2024年一季度";
         List<TbQuestion> list = tbQuestionService.lambdaQuery()
-                .eq(TbQuestion::getQuarter, DateUtils.getNowQuarter()).list();
+                .eq(TbQuestion::getQuarter, previousQuarter).list();
         return BeanUtils.copyList(list, QuestionVO.class);
     }
 
@@ -247,10 +276,12 @@
         }
         dataAnalysisVO.setRank(scoreRankVO.getRank());
         dataAnalysisVO.setScore(scoreRankVO.getScore());
-        String nowQuarter = DateUtils.getNowQuarter();
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        previousQuarter = "2024年一季度";
         // 查询问题
         List<TbQuestion> list = tbQuestionService.lambdaQuery()
-                .eq(TbQuestion::getQuarter, nowQuarter).eq(TbQuestion::getDeptAreaCode, areaCode)
+                .eq(TbQuestion::getQuarter, previousQuarter)
+                .eq(TbQuestion::getDeptAreaCode, areaCode)
                 .list();
         List<QuestionVO> questionVOS = BeanUtils.copyList(list, QuestionVO.class);
         dataAnalysisVO.setQuestions(questionVOS);
@@ -265,11 +296,12 @@
         DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel();
         List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel);
 
-        dataAnalysisVO.setYearScore(getYearScore(areaCode, 1));
-
-        dataAnalysisVO.setLastYearScore(getYearScore(areaCode, 2));
+        dataAnalysisVO.setYearScore(getYearScore(areaCode, previousQuarter));
+        String lastYearQuarter = DateUtils.getLastYearQuarter(previousQuarter);
+        dataAnalysisVO.setLastYearScore(getYearScore(areaCode, lastYearQuarter));
         // 查询风险等级
-        List<RiskMapVO> currentScoreList = tbScoreService.getCurrentScoreList(nowQuarter, areaCode);
+        List<RiskMapVO> currentScoreList = tbScoreService.getCurrentScoreList(previousQuarter,
+                areaCode);
         for (RiskMapVO tbDataScreenScore : currentScoreList) {
             for (RiskLevelVO vo : riskLevelVOList) {
                 if (vo.getRiskLevel().equals(RiskLevelEnum.L1)
@@ -288,12 +320,12 @@
         }
         // 查询四个指标下的三级指标
         List<FieldAndScoreDataVO> voList =
-                tbBasicDataService.getFieldAndScoreData(areaCode, nowQuarter, 1);
+                tbBasicDataService.getFieldAndScoreData(areaCode, previousQuarter, 1, 2);
         List<FieldAndScoreDataVO> lastYearList =
-                tbBasicDataService.getFieldAndScoreData(areaCode, nowQuarter, 2);
+                tbBasicDataService.getFieldAndScoreData(areaCode, previousQuarter, 2, 2);
         // 查询四个指标下的三级指标
         List<FieldAndScoreDataVO> allDeptVoList =
-                tbBasicDataService.getFieldAndScoreData(null, nowQuarter, 1);
+                tbBasicDataService.getFieldAndScoreData(areaCode, previousQuarter, 1, 1);
         // 查询形式指标得分
         dataAnalysisVO.setScoreDataList(handleDataIndicators(voList, lastYearList));
         // 查询数据指标得分
@@ -328,39 +360,33 @@
                 "预算执行方面", "风险防控方面");
         for (int i = 0; i < indicatorList.size(); i++) {
             ScoreRateDataVO scoreRateDataVO = new ScoreRateDataVO();
-            Double indicatorOne = getLevelThreeIndicators(voList, indicatorList.get(i)).stream()
-                    .map(FieldAndScoreDataVO::getScore).reduce(Double::sum).orElse(0D);
-
-            List<Double> allIndicatorsScore = getAllIndicatorsScoreByName(allDeptVoList,
-                    indicatorList.get(i));
-            scoreRateDataVO.setRank(findPositionInList(allIndicatorsScore, indicatorOne));
-            scoreRateDataVO.setScore(indicatorOne);
-            scoreRateDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1));
-            scoreRateDataVO.setScoreRate(BigDecimal.valueOf(indicatorOne)
-                    .divide(BigDecimal.valueOf(voList.get(i).getLevelOneIndicatorMaxScore()), 2,
-                            RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100L)).doubleValue());
+            if (CollUtils.isEmpty(voList)) {
+                scoreRateDataVO.setRank(0);
+                scoreRateDataVO.setScore(0D);
+                scoreRateDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1));
+                scoreRateDataVO.setScoreRate(0D);
+            } else {
+                Double indicatorOne = getLevelThreeIndicators(voList, indicatorList.get(i)).stream()
+                        .map(FieldAndScoreDataVO::getScore).reduce(Double::sum)
+                        .map(BigDecimal::valueOf)
+                        .orElse(BigDecimal.ZERO).setScale(2, RoundingMode.HALF_UP)
+                        .doubleValue();
+                List<Double> allIndicatorsScore = getAllIndicatorsScoreByName(allDeptVoList,
+                        indicatorList.get(i));
+                allIndicatorsScore.add(indicatorOne);
+                allIndicatorsScore.sort(Comparator.comparing(Double::doubleValue).reversed());
+                scoreRateDataVO.setRank(allIndicatorsScore.indexOf(indicatorOne) + 1);
+                scoreRateDataVO.setScore(indicatorOne);
+                scoreRateDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1));
+                scoreRateDataVO.setScoreRate(BigDecimal.valueOf(indicatorOne)
+                        .divide(BigDecimal.valueOf(voList.get(i).getLevelOneIndicatorMaxScore()), 2,
+                                RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100L))
+                        .doubleValue());
+            }
             result.add(scoreRateDataVO);
         }
-
         return result;
     }
-
-    public static int findPositionInList(List<Double> list, Double value) {
-        // Sorting the list to use binary search
-        Collections.sort(list);
-
-        // Finding the index using binary search
-        int index = Collections.binarySearch(list, value);
-
-        if (index < 0) {
-            // If the value is not found, binarySearch returns (-(insertion point) - 1)
-            // Convert to the insertion point by doing (-index - 1)
-            index = -index - 1;
-        }
-
-        return index + 1;
-    }
-
 
     private List<Double> getAllIndicatorsScoreByName(List<FieldAndScoreDataVO> allDeptVoList,
             String indicatorName) {
@@ -370,7 +396,7 @@
             Double score = getLevelThreeIndicators(collect.get(key), indicatorName).stream()
                     .map(FieldAndScoreDataVO::getScore).reduce(Double::sum).orElse(0D);
             return score;
-        }).collect(Collectors.toList());
+        }).sorted(Comparator.comparing(Double::intValue).reversed()).collect(Collectors.toList());
     }
 
     private List<ScoreDataVO> handleDataIndicators(List<FieldAndScoreDataVO> voList,
@@ -379,16 +405,29 @@
         List<String> indicatorList = Lists.newArrayList("财政经济形势", "预算管理方面",
                 "预算执行方面", "风险防控方面");
         for (int i = 0; i < indicatorList.size(); i++) {
-            Double indicatorOne = getLevelThreeIndicators(voList, indicatorList.get(i)).stream()
-                    .map(FieldAndScoreDataVO::getScore).reduce(Double::sum).orElse(0D);
-            Double indicatorOneLastYear = getLevelThreeIndicators(lastYearList,
-                    indicatorList.get(i)).stream()
-                    .map(FieldAndScoreDataVO::getScore).reduce(Double::sum).orElse(0D);
             ScoreDataVO scoreDataVO = new ScoreDataVO();
-            scoreDataVO.setLastScore(indicatorOneLastYear);
-            scoreDataVO.setScore(indicatorOne);
-            scoreDataVO.setMaxScore(voList.get(0).getLevelOneIndicatorMaxScore());
-            scoreDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1));
+            if (CollUtils.isEmpty(voList)) {
+                scoreDataVO.setLastScore(0D);
+                scoreDataVO.setScore(0D);
+                scoreDataVO.setMaxScore(0D);
+                scoreDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1));
+            } else {
+                Double indicatorOne = getLevelThreeIndicators(voList,
+                        indicatorList.get(i)).stream()
+                        .map(FieldAndScoreDataVO::getScore).reduce(Double::sum)
+                        .map(BigDecimal::valueOf)
+                        .orElse(BigDecimal.ZERO).setScale(2, RoundingMode.HALF_UP)
+                        .doubleValue();
+                Double indicatorOneLastYear = getLevelThreeIndicators(lastYearList,
+                        indicatorList.get(i)).stream()
+                        .map(FieldAndScoreDataVO::getScore).reduce(Double::sum)
+                        .map(BigDecimal::valueOf)
+                        .orElse(BigDecimal.ZERO).setScale(2, RoundingMode.HALF_UP).doubleValue();
+                scoreDataVO.setLastScore(indicatorOneLastYear);
+                scoreDataVO.setScore(indicatorOne);
+                scoreDataVO.setMaxScore(voList.get(0).getLevelOneIndicatorMaxScore());
+                scoreDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1));
+            }
             scoreDataVOList.add(scoreDataVO);
         }
         return scoreDataVOList;
@@ -411,10 +450,12 @@
         }).filter(Objects::nonNull).collect(Collectors.toList());
     }
 
-    private Double getYearScore(String areaCode, Integer yearType) {
-        List<RiskMapVO> thisYearScoreList = tbScoreService.getScoreByYearType(areaCode, yearType);
+    private Double getYearScore(String areaCode, String previousQuarter) {
+        List<RiskMapVO> thisYearScoreList = tbScoreService.getScoreByYearType(areaCode,
+                previousQuarter);
         return thisYearScoreList.stream().map(RiskMapVO::getScore)
-                .reduce(Double::sum).orElse(0D);
+                .reduce(Double::sum).map(BigDecimal::valueOf).orElse(BigDecimal.ZERO)
+                .setScale(2, RoundingMode.HALF_UP).doubleValue();
     }
 
     private void handleDataIndicators(String areaCode, List<ScoreDataVO> scoreDataVOList) {
@@ -507,14 +548,18 @@
 
     public List<DeptCalculateDetailVO> deptCalculateDetail(DeptCalculateDetailQuery query)
             throws Exception {
-        return tbScoreService.deptCalculateDetail(query, DateUtils.getNowQuarter());
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        previousQuarter = "2024年一季度";
+        return tbScoreService.deptCalculateDetail(query, previousQuarter);
     }
 
     public CurrentFieldsDetailVO viewRawData(String areaCode) throws Exception {
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        previousQuarter = "2024年一季度";
         Optional<TbBasicData> basicDataOptional = tbBasicDataService.lambdaQuery()
                 .eq(TbBasicData::getDeptAreaCode, areaCode)
                 .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED)
-                .eq(TbBasicData::getQuarter, DateUtils.getNowQuarter()).oneOpt();
+                .eq(TbBasicData::getQuarter, previousQuarter).oneOpt();
         if (basicDataOptional.isPresent()) {
             return tbBasicDataService.fieldsDetails(basicDataOptional.get().getId()).getData();
         } else {
@@ -524,7 +569,11 @@
 
     public ScoreCalculateDetailVO fieldsDetail(CalculateDetailQuery query) {
         List<SysUser> countyList = getCountyList(query.getCityAreaCode());
-        return tbScoreService.fieldsDetail(query, countyList);
+        try {
+            return tbScoreService.fieldsDetail(query, countyList);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
     }
 
     public List<SysUser> getCountyList(String areaCode) {
diff --git a/finance-common/src/main/java/com/finance/common/enums/AreaLevelEnum.java b/finance-common/src/main/java/com/finance/common/enums/AreaLevelEnum.java
index bddf836..e8f3079 100644
--- a/finance-common/src/main/java/com/finance/common/enums/AreaLevelEnum.java
+++ b/finance-common/src/main/java/com/finance/common/enums/AreaLevelEnum.java
@@ -25,4 +25,13 @@
         }
         return null;
     }
+
+    public static AreaLevelEnum getEnumByDesc(String desc) {
+        for (AreaLevelEnum e : AreaLevelEnum.values()) {
+            if (e.desc.equals(desc)) {
+                return e;
+            }
+        }
+        return null;
+    }
 } 
\ No newline at end of file
diff --git a/finance-common/src/main/java/com/finance/common/enums/QuestionTypeEnum.java b/finance-common/src/main/java/com/finance/common/enums/QuestionTypeEnum.java
index 3e223e1..4ef44fe 100644
--- a/finance-common/src/main/java/com/finance/common/enums/QuestionTypeEnum.java
+++ b/finance-common/src/main/java/com/finance/common/enums/QuestionTypeEnum.java
@@ -10,7 +10,7 @@
 public enum QuestionTypeEnum {
     ENUM0(1, "减税降费政策未落实情况"),
     ENUM1(2, "其他重大财税政策"),
-    ENUM2(3, "“三保”支出保障情况"),
+    ENUM2(3, "三保支出保障情况"),
     ENUM3(4, "盘活存量资金"),
     ENUM4(5, "无预算、超预算拨款"),
     ENUM5(6, "直达资金规范使用"),
diff --git a/finance-common/src/main/java/com/finance/common/utils/DateUtils.java b/finance-common/src/main/java/com/finance/common/utils/DateUtils.java
index 742eb03..e3349e7 100644
--- a/finance-common/src/main/java/com/finance/common/utils/DateUtils.java
+++ b/finance-common/src/main/java/com/finance/common/utils/DateUtils.java
@@ -379,10 +379,42 @@
     public static String getNowQuarter() throws Exception {
         // 当前所在季度
         Date date = new Date();
-        char quarterOfYear = String.valueOf(getQuarterOfYear(date)).toCharArray()[0];
-        String quarterOfYearStr = NumberChineseFormatter.numberCharToChinese(quarterOfYear, false);
+        // char quarterOfYear = String.valueOf(getQuarterOfYear(date)).toCharArray()[0];
+        int quarterOfYear = DateUtil.quarter(date);
+        String quarterOfYearStr = NumberChineseFormatter.numberCharToChinese((char) quarterOfYear,
+                false);
         LocalDate now = LocalDate.now();
         return String.format("%s年%s季度", now.getYear(), quarterOfYearStr);
+    }
+
+    /**
+     * 获取上一季度字符串
+     *
+     * @return 当前季度字符串
+     * @throws Exception 异常
+     */
+    public static String getPreviousQuarter() throws Exception {
+        // 当前日期
+        LocalDate now = LocalDate.now();
+        // 当前月份
+        int currentMonth = now.getMonthValue();
+        // 计算上季度的月份
+        int previousQuarterMonth = currentMonth - 3;
+        int previousQuarterYear = now.getYear();
+
+        if (previousQuarterMonth <= 0) {
+            previousQuarterMonth += 12;
+            previousQuarterYear -= 1;
+        }
+
+        // 计算上季度的季度数
+        int previousQuarter = (previousQuarterMonth - 1) / 3 + 1;
+        // 将季度数转换为汉字
+        String quarterOfYearStr = NumberChineseFormatter.numberCharToChinese(
+                (char) (previousQuarter + '0'), false);
+
+        // 返回上季度的年份和季度
+        return String.format("%s年%s季度", previousQuarterYear, quarterOfYearStr);
     }
 
     public static Date getQuarterDate(String quarter) {
@@ -447,5 +479,28 @@
         System.out.println(simpleDateFormat.format(getQuarterDate("2024年二季度")));
         System.out.println(simpleDateFormat.format(getQuarterDate("2024年三季度")));
         System.out.println(simpleDateFormat.format(getQuarterDate("2024年四季度")));
+        System.out.println(
+                DateUtil.format(getQuarterDateEnd(getPreviousQuarter()), "yyyy-MM-dd HH:mm:ss"));
+        System.out.println(
+                DateUtil.format(getQuarterDate(getPreviousQuarter()), "yyyy-MM-dd HH:mm:ss"));
+        System.out.println(getLastYearQuarter("2024年一季度"));
+    }
+
+    public static String getLastYearQuarter(String previousQuarter) {
+        // 提取年份和季度信息
+        String year = previousQuarter.substring(0, 4);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
+        try {
+            // 今年
+            Date date = sdf.parse(year);
+            // 根据date获取去年的日期
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(date);
+            calendar.add(Calendar.YEAR, -1);
+            Date lastYear = calendar.getTime();
+            return String.format("%s年%s", sdf.format(lastYear), previousQuarter.substring(5));
+        } catch (ParseException e) {
+            throw new RuntimeException(e);
+        }
     }
 }
diff --git a/finance-system/src/main/java/com/finance/system/domain/TbBasicData.java b/finance-system/src/main/java/com/finance/system/domain/TbBasicData.java
index fdf8ce0..1b724e6 100644
--- a/finance-system/src/main/java/com/finance/system/domain/TbBasicData.java
+++ b/finance-system/src/main/java/com/finance/system/domain/TbBasicData.java
@@ -82,4 +82,9 @@
     @ApiModelProperty(value = "上报时间")
     @TableField(value = "reporting_time")
     private Date reportingTime;
+
+    @ApiModelProperty(value = "完成填报时间")
+    @TableField(value = "finished_time")
+    private Date finishedTime;
+
 }
diff --git a/finance-system/src/main/java/com/finance/system/dto/QuestionDTO.java b/finance-system/src/main/java/com/finance/system/dto/QuestionDTO.java
index c66d786..2398eeb 100644
--- a/finance-system/src/main/java/com/finance/system/dto/QuestionDTO.java
+++ b/finance-system/src/main/java/com/finance/system/dto/QuestionDTO.java
@@ -26,7 +26,7 @@
     private String content;
 
     @ApiModelProperty(value = "问题类型", notes = "问题类型 1:减税降费政策未落实情况 2:其他重大财税政策 "
-            + "3:“三保”支出保障情况4:盘活存量资金5:无预算、超预算拨款6:直达资金规范使用7:隐形债务化解"
+            + "3:三保支出保障情况4:盘活存量资金5:无预算、超预算拨款6:直达资金规范使用7:隐形债务化解"
             + "8:债务日常监管9:日常监管发现问题")
     @NotNull(message = "问题内容不能为空")
     private QuestionTypeEnum type;
diff --git a/finance-system/src/main/java/com/finance/system/listener/BasicDataListener.java b/finance-system/src/main/java/com/finance/system/listener/BasicDataListener.java
index 660f01f..36260fa 100644
--- a/finance-system/src/main/java/com/finance/system/listener/BasicDataListener.java
+++ b/finance-system/src/main/java/com/finance/system/listener/BasicDataListener.java
@@ -33,6 +33,7 @@
 import com.google.common.collect.Lists;
 import java.time.LocalDate;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -187,15 +188,19 @@
                 .eq(TbBasicData::getDeptAreaCode, areaCode).oneOpt();
         tbBasicData = tbBasicDataOpt.orElseGet(TbBasicData::new);
         tbBasicData.setQuarter(quarter);
-        tbBasicData.setTransferPaymentScale(dataMap.get(2));
-        tbBasicData.setCurrentGdp(dataMap.get(3));
+        tbBasicData.setTransferPaymentScale(dataMap.get(2).replace(",", ""));
+        tbBasicData.setCurrentGdp(dataMap.get(3).replace(",", ""));
         tbBasicData.setDeptAreaCode(areaCode);
         tbBasicData.setRemark(dataMap.get(remarkIndex));
         tbBasicData.setReportingTime(DateUtils.getQuarterDate(quarter));
+        tbBasicData.setStatus(ReportingStatusEnum.MISSING_DATA);
         long count = dataMap.entrySet().stream()
                 .filter(entry -> StringUtils.isBlank(entry.getValue())).count();
-        tbBasicData.setStatus(
-                count > 0 ? ReportingStatusEnum.MISSING_DATA : ReportingStatusEnum.FILLED);
+        if (count > 0) {
+            tbBasicData.setStatus(ReportingStatusEnum.FILLED);
+            tbBasicData.setFinishedTime(new Date());
+        }
+
         tbBasicDataService.saveOrUpdate(tbBasicData);
         tbBasicDataFieldService.remove(Wrappers.<TbBasicDataField>lambdaQuery()
                 .eq(TbBasicDataField::getBasicDataId, tbBasicData.getId()));
@@ -231,7 +236,7 @@
                 tbBasicDataField.setBasicDataId(tbBasicData.getId());
                 tbBasicDataField.setFieldId(field.getId());
                 tbBasicDataField.setFieldName(field.getFieldName());
-                tbBasicDataField.setFieldValue(value);
+                tbBasicDataField.setFieldValue(value.replace(",", ""));
                 fields.add(tbBasicDataField);
             }
         }
diff --git a/finance-system/src/main/java/com/finance/system/listener/HistoryDataListener.java b/finance-system/src/main/java/com/finance/system/listener/HistoryDataListener.java
index 6fb5348..5aba6f8 100644
--- a/finance-system/src/main/java/com/finance/system/listener/HistoryDataListener.java
+++ b/finance-system/src/main/java/com/finance/system/listener/HistoryDataListener.java
@@ -165,6 +165,9 @@
         List<TbBasicData> basicDataList = tbBasicDataService.lambdaQuery().
                 eq(TbBasicData::getQuarter, quarter).list();
         for (Map<Integer, String> dataMap : dataMapList) {
+            // 查询需要填写的动态字段
+            fieldList =
+                    tbFieldService.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list();
             Optional<SysUser> sysUser = departmentList.stream()
                     .filter(dept -> dept.getAreaName().equals(dataMap.get(0))).findFirst();
             if (!sysUser.isPresent()) {
@@ -177,8 +180,8 @@
                     .filter(basicData -> basicData.getDeptAreaCode().equals(areaCode)).findFirst();
             tbBasicData = tbBasicDataOpt.orElseGet(TbBasicData::new);
             tbBasicData.setQuarter(quarter);
-            tbBasicData.setTransferPaymentScale(dataMap.get(2));
-            tbBasicData.setCurrentGdp(dataMap.get(3));
+            tbBasicData.setTransferPaymentScale(dataMap.get(2).replace(",", ""));
+            tbBasicData.setCurrentGdp(dataMap.get(3).replace(",", ""));
             tbBasicData.setDeptAreaCode(areaCode);
             tbBasicData.setRemark(dataMap.get(remarkIndex));
             tbBasicData.setStatus(ReportingStatusEnum.MISSING_DATA);
@@ -238,7 +241,8 @@
                     tbBasicDataField.setBasicDataId(tbBasicData.getId());
                     tbBasicDataField.setFieldId(field.getId());
                     tbBasicDataField.setFieldName(field.getFieldName());
-                    tbBasicDataField.setFieldValue(value);
+                    tbBasicDataField.setFieldValue(
+                            Objects.isNull(value) ? "" : value.replace(",", ""));
                     fields.add(tbBasicDataField);
                 }
             }
diff --git a/finance-system/src/main/java/com/finance/system/mapper/TbBasicDataMapper.java b/finance-system/src/main/java/com/finance/system/mapper/TbBasicDataMapper.java
index 875b166..655d909 100644
--- a/finance-system/src/main/java/com/finance/system/mapper/TbBasicDataMapper.java
+++ b/finance-system/src/main/java/com/finance/system/mapper/TbBasicDataMapper.java
@@ -31,5 +31,6 @@
             @Param("nowQuarter") String nowQuarter);
 
     List<FieldAndScoreDataVO> getFieldAndScoreData(@Param("areaCode") String areaCode,
-            @Param("nowQuarter") String nowQuarter, @Param("yearType") Integer yearType);
+            @Param("nowQuarter") String nowQuarter, @Param("yearType") Integer yearType,
+            @Param("isAll") Integer isAll);
 }
diff --git a/finance-system/src/main/java/com/finance/system/mapper/TbScoreMapper.java b/finance-system/src/main/java/com/finance/system/mapper/TbScoreMapper.java
index 5fda4f8..fff6b26 100644
--- a/finance-system/src/main/java/com/finance/system/mapper/TbScoreMapper.java
+++ b/finance-system/src/main/java/com/finance/system/mapper/TbScoreMapper.java
@@ -33,7 +33,8 @@
 
     List<ScoreRankVO> queryTotalScoreList();
 
-    ScoreRankVO queryRankAndScoreByAreaCode(@Param("areaCode") String areaCode);
+    List<ScoreRankVO> queryRankAndScoreByAreaCode(@Param("areaCode") String areaCode,
+            @Param("previousQuarter") String previousQuarter);
 
     List<DeptCalculateDetailVO> deptCalculateDetail(@Param("query") DeptCalculateDetailQuery query,
             @Param("nowQuarter") String nowQuarter);
@@ -47,5 +48,5 @@
     List<RiskRankingVO> queryRiskRanking(@Param("nowQuarter") String nowQuarter);
 
     List<RiskMapVO> getScoreByYearType(@Param("areaCode") String areaCode,
-            @Param("yearType") Integer yearType);
+            @Param("quarter") String quarter);
 }
diff --git a/finance-system/src/main/java/com/finance/system/query/CalculateDetailQuery.java b/finance-system/src/main/java/com/finance/system/query/CalculateDetailQuery.java
index f201992..e0a733e 100644
--- a/finance-system/src/main/java/com/finance/system/query/CalculateDetailQuery.java
+++ b/finance-system/src/main/java/com/finance/system/query/CalculateDetailQuery.java
@@ -27,4 +27,7 @@
 
     @ApiModelProperty(value = "部门区划代码")
     private String areaCode;
+    
+    @ApiModelProperty(value = "季度", hidden = true)
+    private String previousQuarter;
 }
diff --git a/finance-system/src/main/java/com/finance/system/query/ScoreCalculateDetailQuery.java b/finance-system/src/main/java/com/finance/system/query/ScoreCalculateDetailQuery.java
index 1f95cf8..6dbab43 100644
--- a/finance-system/src/main/java/com/finance/system/query/ScoreCalculateDetailQuery.java
+++ b/finance-system/src/main/java/com/finance/system/query/ScoreCalculateDetailQuery.java
@@ -22,4 +22,7 @@
 
     @ApiModelProperty(value = "部门名称")
     private String areaName;
+    
+    @ApiModelProperty(value = "季度", hidden = true)
+    private String previousQuarter;
 }
diff --git a/finance-system/src/main/java/com/finance/system/service/TbBasicDataService.java b/finance-system/src/main/java/com/finance/system/service/TbBasicDataService.java
index 164adf5..57c099c 100644
--- a/finance-system/src/main/java/com/finance/system/service/TbBasicDataService.java
+++ b/finance-system/src/main/java/com/finance/system/service/TbBasicDataService.java
@@ -36,7 +36,7 @@
 
     void importBasicData(MultipartFile file) throws Exception;
 
-    PageDTO<ScoreVO> pageScore(ScoreQuery query);
+    PageDTO<ScoreVO> pageScore(ScoreQuery query) throws Exception;
 
     R<CurrentFieldsDetailVO> fieldsDetails(Long id);
 
@@ -63,6 +63,13 @@
 
     void exportDataV2(List<String> quarterList) throws IOException;
 
+    /**
+     * @param areaCode
+     * @param nowQuarter
+     * @param yearType   1:今年 2:去年
+     * @param isAll      是否相同市下所有区数据 1:是 2 :否
+     * @return
+     */
     List<FieldAndScoreDataVO> getFieldAndScoreData(String areaCode, String nowQuarter,
-            Integer yearType);
+            Integer yearType, Integer isAll);
 }
diff --git a/finance-system/src/main/java/com/finance/system/service/TbQuestionService.java b/finance-system/src/main/java/com/finance/system/service/TbQuestionService.java
index 7532383..6037f7d 100644
--- a/finance-system/src/main/java/com/finance/system/service/TbQuestionService.java
+++ b/finance-system/src/main/java/com/finance/system/service/TbQuestionService.java
@@ -23,4 +23,6 @@
     void editQuestion(QuestionUpdDTO dto);
 
     PageDTO<QuestionVO> pageQuestion(QuestionQuery dto);
+
+    void delete(Long id);
 }
diff --git a/finance-system/src/main/java/com/finance/system/service/TbScoreService.java b/finance-system/src/main/java/com/finance/system/service/TbScoreService.java
index 4e43466..d683fd3 100644
--- a/finance-system/src/main/java/com/finance/system/service/TbScoreService.java
+++ b/finance-system/src/main/java/com/finance/system/service/TbScoreService.java
@@ -32,20 +32,21 @@
 
     PageDTO<ScoreVO> getHistoryScore(HistoryScoreQuery query);
 
-    ScoreCalculateDetailVO scoreCalculateDetail(ScoreCalculateDetailQuery query);
+    ScoreCalculateDetailVO scoreCalculateDetail(ScoreCalculateDetailQuery query) throws Exception;
 
     List<ScoreRankVO> queryTotalScoreList();
 
-    ScoreRankVO queryRankAndScoreByAreaCode(String areaCode);
+    ScoreRankVO queryRankAndScoreByAreaCode(String areaCode) throws Exception;
 
     List<DeptCalculateDetailVO> deptCalculateDetail(DeptCalculateDetailQuery query,
             String nowQuarter);
 
-    ScoreCalculateDetailVO fieldsDetail(CalculateDetailQuery query, List<SysUser> countyList);
+    ScoreCalculateDetailVO fieldsDetail(CalculateDetailQuery query, List<SysUser> countyList)
+            throws Exception;
 
     List<RiskMapVO> getCurrentScoreList(String nowQuarter, String areaCode);
 
     List<RiskRankingVO> queryRiskRanking(String nowQuarter);
 
-    List<RiskMapVO> getScoreByYearType(String areaCode, Integer yearType);
+    List<RiskMapVO> getScoreByYearType(String areaCode, String quarter);
 }
diff --git a/finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java b/finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java
index 0ec80e2..811f8ab 100644
--- a/finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java
+++ b/finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java
@@ -5,11 +5,13 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.finance.common.core.domain.entity.SysUser;
 import com.finance.common.enums.BasicDataFieldEnum;
 import com.finance.common.enums.CalculateTypeEnum;
 import com.finance.common.enums.IndicatorItemEnum;
 import com.finance.common.enums.QuestionTypeEnum;
 import com.finance.common.enums.ShowStatusEnum;
+import com.finance.common.enums.UserTypeEnum;
 import com.finance.common.enums.ValueTypeEnum;
 import com.finance.common.exception.ServiceException;
 import com.finance.common.utils.CalculateUtil;
@@ -27,6 +29,7 @@
 import com.finance.system.mapper.TbBasicDataMapper;
 import com.finance.system.mapper.TbQuestionMapper;
 import com.finance.system.service.AsyncService;
+import com.finance.system.service.ISysUserService;
 import com.finance.system.service.TbBasicDataCategoryService;
 import com.finance.system.service.TbBasicDataConfigDetailService;
 import com.finance.system.service.TbBasicDataConfigService;
@@ -63,6 +66,7 @@
     private final TbBasicDataConfigDetailService tbBasicDataConfigDetailService;
     private final TbBasicDataMapper tbBasicDataMapper;
     private final TbQuestionMapper tbQuestionMapper;
+    private final ISysUserService sysUserService;
 
     @Async
     @Override
@@ -179,11 +183,18 @@
     @Override
     public void calculateScoreWithFixedRules(TbBasicData tbBasicData,
             List<TbBasicDataField> fields, List<TbField> fieldList) {
+        if (tbBasicData.getDeptAreaCode().equals("000000")) {
+            return;
+        }
+        SysUser sysUser = sysUserService.lambdaQuery()
+                .eq(SysUser::getAreaCode, tbBasicData.getDeptAreaCode())
+                .eq(SysUser::getUserType,
+                        UserTypeEnum.DEPARTMENT).oneOpt().get();
         List<BasicDataConfigVO> fixedRulesConfigList = tbBasicDataConfigService.getFixedRulesConfigList();
         // 查询四川省的基础数据
         TbBasicData provinceBasicData = tbBasicDataMapper.selectOne(
                 Wrappers.lambdaQuery(TbBasicData.class)
-                        .eq(TbBasicData::getDeptAreaCode, "510000")
+                        .eq(TbBasicData::getDeptAreaCode, "000000")
                         .eq(TbBasicData::getQuarter, tbBasicData.getQuarter()));
         if (Objects.isNull(provinceBasicData)) {
             throw new ServiceException("四川省未上传该季度基础数据,请联系管理员");
@@ -213,11 +224,13 @@
             Date quarterDate = DateUtils.getQuarterDateEnd(tbBasicData.getQuarter());
             BigDecimal month = BigDecimal.valueOf(
                     Double.parseDouble(DateUtil.format(quarterDate, "MM")));
+            boolean res1 = false;
+            boolean res2 = false;
             switch (Objects.requireNonNull(IndicatorItemEnum.getEnumByCode(vo.getId()))) {
                 case INDICATOR_ITEM1:
                     // 1:财政经济形势-收入占GDP比重-地方一般公共预算收入占GDP的比重;
                     // 获取所需字段
-                    deptDividendValue = getBigDecimal(deptFieldsMap,
+                    deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD2);
                     deptDivisorValue = BigDecimal.valueOf(
                             Double.parseDouble(tbBasicData.getCurrentGdp()));
@@ -225,43 +238,65 @@
                             BasicDataFieldEnum.BASIC_DATA_FIELD2);
                     provinceDivisorValue = BigDecimal.valueOf(
                             Double.parseDouble(provinceBasicData.getCurrentGdp()));
-                    score = getScore(deptDividendValue, deptDivisorValue,
-                            provinceDividendValue, provinceDivisorValue, vo);
+                    res1 = validateDivisorValue(deptDivisorValue);
+                    res2 = validateDivisorValue(provinceDivisorValue);
+                    if (!res1 && !res2) {
+                        score = getScore(deptDividendValue, deptDivisorValue,
+                                provinceDividendValue, provinceDivisorValue, vo);
+                    } else {
+                        score = 0D;
+                    }
+
                     break;
                 case INDICATOR_ITEM2:
                     // 2:财政经济形势-收入执行率-地方一般公共预算收入执行进度(地方一般公共预算收入/年初预算或调整预算);
-                    deptDividendValue = getBigDecimal(deptFieldsMap,
+                    deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD2);
-                    deptDivisorValue = getBigDecimal(deptFieldsMap,
+                    deptDivisorValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD1);
-
-                    score = getScore(deptDividendValue, deptDivisorValue, month,
-                            BigDecimal.valueOf(12D),
-                            vo);
+                    res1 = validateDivisorValue(deptDivisorValue);
+                    if (!res1) {
+                        score = getScore(deptDividendValue, deptDivisorValue, month,
+                                BigDecimal.valueOf(12D),
+                                vo);
+                    } else {
+                        score = 0D;
+                    }
                     break;
                 case INDICATOR_ITEM3:
                     // 3:财政经济形势-收入执行率-政府性基金预算收入执行进度(政府性基金预算收入/年初预算或调整预算)
-                    deptDividendValue = getBigDecimal(deptFieldsMap,
+                    deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD18);
-                    deptDivisorValue = getBigDecimal(deptFieldsMap,
+                    deptDivisorValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD17);
-                    score = getScore(deptDividendValue, deptDivisorValue, month,
-                            BigDecimal.valueOf(12D),
-                            vo);
+                    res1 = validateDivisorValue(deptDivisorValue);
+                    if (!res1) {
+                        score = getScore(deptDividendValue, deptDivisorValue, month,
+                                BigDecimal.valueOf(12D),
+                                vo);
+                    } else {
+                        score = 0D;
+                    }
                     break;
                 case INDICATOR_ITEM4:
                     // 4:财政经济形势-收入质量-税收收入占地方一般公共预算收入比重
                     // 获取所需字段
-                    deptDividendValue = getBigDecimal(deptFieldsMap,
+                    deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD3);
-                    deptDivisorValue = getBigDecimal(deptFieldsMap,
+                    deptDivisorValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD2);
                     provinceDividendValue = getProvinceBigDecimal(provinceFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD3);
                     provinceDivisorValue = getProvinceBigDecimal(provinceFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD2);
-                    score = getScore(deptDividendValue, deptDivisorValue,
-                            provinceDividendValue, provinceDivisorValue, vo);
+                    res1 = validateDivisorValue(deptDivisorValue);
+                    res2 = validateDivisorValue(provinceDivisorValue);
+                    score = 0D;
+                    if (!res1 && !res2) {
+                        score = getScore(deptDividendValue, deptDivisorValue,
+                                provinceDividendValue, provinceDivisorValue, vo);
+                    }
+
                     break;
                 case INDICATOR_ITEM5:
                     // 5: 财政经济形势-重大财税政策落实情况-减税降费落实情况
@@ -277,50 +312,60 @@
                     break;
                 case INDICATOR_ITEM7:
                     // 7:预算管理方面-转移支付-中央转移支付占地方可用财力比重
-                    deptDividendValue = getBigDecimal(deptFieldsMap,
+                    deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD7);
-                    deptDivisorValue = getBigDecimal(deptFieldsMap,
+                    deptDivisorValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD13);
                     provinceDividendValue = getProvinceBigDecimal(provinceFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD7);
                     provinceDivisorValue = getProvinceBigDecimal(provinceFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD7);
-                    score = getScore2(deptDividendValue, deptDivisorValue,
-                            provinceDividendValue, provinceDivisorValue, vo);
+                    res1 = validateDivisorValue(deptDivisorValue);
+                    res2 = validateDivisorValue(provinceDivisorValue);
+                    score = 0D;
+                    if (!res1 && res2) {
+                        score = getScore2(deptDividendValue, deptDivisorValue,
+                                provinceDividendValue, provinceDivisorValue, vo);
+                    }
                     break;
                 case INDICATOR_ITEM8:
                     // 8:预算管理方面-“三保”保障情况-“三保”年初预算保障情况
-                    BigDecimal aw = getBigDecimal(deptFieldsMap,
+                    BigDecimal aw = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD47);
-                    BigDecimal ap = getBigDecimal(deptFieldsMap,
+                    BigDecimal ap = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD40);
-                    BigDecimal az = getBigDecimal(deptFieldsMap,
+                    BigDecimal az = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD50);
-                    BigDecimal aq = getBigDecimal(deptFieldsMap,
+                    BigDecimal aq = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD41);
-                    BigDecimal bc = getBigDecimal(deptFieldsMap,
+                    BigDecimal bc = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD53);
-                    BigDecimal ar = getBigDecimal(deptFieldsMap,
+                    BigDecimal ar = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD42);
                     boolean res = aw.compareTo(ap) < 0 || (az.compareTo(aq) < 0 || (bc.compareTo(ar)
                             < 0));
                     score = res ? 0 : vo.getMaxScore();
                     break;
                 case INDICATOR_ITEM9:
-                    BigDecimal au = getBigDecimal(deptFieldsMap,
+                    BigDecimal au = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD45);
-                    BigDecimal r = getBigDecimal(deptFieldsMap,
+                    BigDecimal r = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD13);
-                    BigDecimal divided = au.divide(r, 2, RoundingMode.HALF_UP);
-                    if (divided.compareTo(BigDecimal.valueOf(0.6D)) > 0) {
-                        BigDecimal add = BigDecimal.valueOf(0.6D).subtract(divided)
-                                .multiply(BigDecimal.valueOf(100D))
-                                .divide(BigDecimal.valueOf(4D), 2, RoundingMode.HALF_UP)
-                                .add(BigDecimal.valueOf(8));
-                        score = add.compareTo(BigDecimal.ZERO) >= 0 ? add.doubleValue() : 0D;
-                    } else {
-                        score = vo.getMaxScore();
+                    res1 = validateDivisorValue(r);
+                    score = 0D;
+                    if (!res1) {
+                        BigDecimal divided = au.divide(r, 2, RoundingMode.HALF_UP);
+                        if (divided.compareTo(BigDecimal.valueOf(0.6D)) > 0) {
+                            BigDecimal add = BigDecimal.valueOf(0.6D).subtract(divided)
+                                    .multiply(BigDecimal.valueOf(100D))
+                                    .divide(BigDecimal.valueOf(4D), 2, RoundingMode.HALF_UP)
+                                    .add(BigDecimal.valueOf(8));
+                            score = add.compareTo(BigDecimal.ZERO) >= 0 ? add.doubleValue() : 0D;
+                        } else {
+                            score = vo.getMaxScore();
+                        }
                     }
+
                     break;
                 case INDICATOR_ITEM10:
                     // 10:预算管理方面-“三保”保障情况-“三保”支出保障情况
@@ -341,7 +386,7 @@
                     break;
                 case INDICATOR_ITEM13:
                     // 13:预算执行方面-库款管理-库款保障水平
-                    BigDecimal currentData = getBigDecimal(deptFieldsMap,
+                    BigDecimal currentData = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD35);
                     BigDecimal part1;
                     BigDecimal part2;
@@ -354,11 +399,11 @@
                     } else {
                         part1 = BigDecimal.valueOf(4D);
                     }
-                    BigDecimal first = getBigDecimal(deptFieldsMap,
+                    BigDecimal first = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD36);
-                    BigDecimal second = getBigDecimal(deptFieldsMap,
+                    BigDecimal second = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD37);
-                    BigDecimal third = getBigDecimal(deptFieldsMap,
+                    BigDecimal third = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD38);
                     part2 = first.compareTo(BigDecimal.valueOf(0.3D)) < 0
                             || second.compareTo(BigDecimal.valueOf(0.3D)) < 0 || third.compareTo(
@@ -368,23 +413,27 @@
                     break;
                 case INDICATOR_ITEM14:
                     // 14:预算执行方面-预算执行情况-一般公共预算支出执行率
-                    deptDividendValue = getBigDecimal(deptFieldsMap,
+                    deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD15);
-                    deptDivisorValue = getBigDecimal(deptFieldsMap,
+                    deptDivisorValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD14);
                     score = getScoreByMonth(deptDividendValue, deptDivisorValue, month, vo);
                     break;
                 case INDICATOR_ITEM15:
                     // 15:预算执行方面-预算执行情况-政府性基金预算支出执行率
-                    deptDividendValue = getBigDecimal(deptFieldsMap,
+                    deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD23);
-                    deptDivisorValue = getBigDecimal(deptFieldsMap,
+                    deptDivisorValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD22);
-                    score = getScoreByMonth(deptDividendValue, deptDivisorValue, month, vo);
+                    res1 = validateDivisorValue(deptDivisorValue);
+                    score = 0D;
+                    if (!res1) {
+                        score = getScoreByMonth(deptDividendValue, deptDivisorValue, month, vo);
+                    }
                     break;
                 case INDICATOR_ITEM16:
                     // 16:预算执行方面-中央直达资金-中央直达资金支付进度
-                    deptDividendValue = getBigDecimal(deptFieldsMap,
+                    deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD11);
                     BigDecimal divided1 = month.divide(BigDecimal.valueOf(12D), 2,
                             RoundingMode.HALF_UP);
@@ -407,18 +456,18 @@
                     break;
                 case INDICATOR_ITEM18:
                     // 18:风险防控方面-暂付款管理-违规新增暂付款
-                    deptDividendValue = getBigDecimal(deptFieldsMap,
+                    deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD57);
                     score = deptDividendValue.compareTo(BigDecimal.ZERO) > 0 ? 0D
                             : vo.getMaxScore();
                     break;
                 case INDICATOR_ITEM19:
                     // 19:风险防控方面-暂付款管理-暂付款累计余额
-                    BigDecimal bk = getBigDecimal(deptFieldsMap,
+                    BigDecimal bk = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD61);
-                    BigDecimal t = getBigDecimal(deptFieldsMap,
+                    BigDecimal t = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD15);
-                    BigDecimal ab = getBigDecimal(deptFieldsMap,
+                    BigDecimal ab = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD23);
                     BigDecimal add = t.add(ab.divide(month.multiply(
                                     BigDecimal.valueOf(12D).multiply(BigDecimal.valueOf(0.05D))), 2,
@@ -427,17 +476,21 @@
                     break;
                 case INDICATOR_ITEM20:
                     // 20:风险防控方面-暂付款管理-暂付款消化
-                    deptDividendValue = getBigDecimal(deptFieldsMap,
+                    deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD59);
-                    deptDivisorValue = getBigDecimal(deptFieldsMap,
+                    deptDivisorValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD58);
-                    BigDecimal d1 = deptDividendValue.divide(deptDivisorValue, 2,
-                            RoundingMode.HALF_UP);
-                    BigDecimal d2 = month.divide(BigDecimal.valueOf(12D), 2,
-                            RoundingMode.HALF_UP);
-                    score = d1.compareTo(d2) < 0 ? d1.divide(d2, 2, RoundingMode.HALF_UP)
-                            .multiply(BigDecimal.valueOf(vo.getMaxScore())).doubleValue()
-                            : vo.getMaxScore();
+                    res1 = validateDivisorValue(deptDivisorValue);
+                    score = 0D;
+                    if (!res1) {
+                        BigDecimal d1 = deptDividendValue.divide(deptDivisorValue, 2,
+                                RoundingMode.HALF_UP);
+                        BigDecimal d2 = month.divide(BigDecimal.valueOf(12D), 2,
+                                RoundingMode.HALF_UP);
+                        score = d1.compareTo(d2) < 0 ? d1.divide(d2, 2, RoundingMode.HALF_UP)
+                                .multiply(BigDecimal.valueOf(vo.getMaxScore())).doubleValue()
+                                : vo.getMaxScore();
+                    }
                     break;
                 case INDICATOR_ITEM21:
                     // 21:风险防控方面-债务管理-法定债务率
@@ -453,7 +506,7 @@
                     // 23:风险防控方面-债务管理-隐性债务化解
                     questionList = getQuestList(list, deptAreaCode,
                             QuestionTypeEnum.ENUM6);
-                    score = CollUtils.isNotEmpty(questionList) ? vo.getMaxScore() : -3D;
+                    score = CollUtils.isEmpty(questionList) ? vo.getMaxScore() : -3D;
                     break;
                 case INDICATOR_ITEM24:
                     // 24:风险防控方面-债务管理-日常监督发现问题
@@ -494,6 +547,13 @@
         }
     }
 
+    private static boolean validateDivisorValue(BigDecimal deptDivisorValue) {
+        if (deptDivisorValue.compareTo(BigDecimal.ZERO) == 0) {
+            return true;
+        }
+        return false;
+    }
+
     private static List<TbQuestion> getQuestList(List<TbQuestion> list, String deptAreaCode,
             QuestionTypeEnum type) {
         return list.stream()
@@ -512,13 +572,14 @@
         return BigDecimal.valueOf(Double.parseDouble(tbBasicDataField.getFieldValue()));
     }
 
-    private BigDecimal getBigDecimal(Map<Long, TbBasicDataField> deptFieldsMap,
+    private BigDecimal getBigDecimal(String areaName, Map<Long, TbBasicDataField> deptFieldsMap,
             BasicDataFieldEnum key) {
         TbBasicDataField tbBasicDataField = deptFieldsMap.get(key.getCode());
         if (Objects.isNull(tbBasicDataField) || StringUtils.isBlank(
                 tbBasicDataField.getFieldValue())) {
             throw new ServiceException(
-                    String.format("字段【%s】的数据缺失,请修改后再试", key.getDesc()));
+                    String.format(areaName + "-" + "字段【%s】的数据缺失,请修改后再试",
+                            key.getDesc()));
         }
 
         return BigDecimal.valueOf(
@@ -694,9 +755,9 @@
 
     @Override
     public void subtractScoreWithFixedRules(String deptAreaCode) throws Exception {
-        String nowQuarter = DateUtils.getNowQuarter();
+        String previousQuarter = DateUtils.getPreviousQuarter();
         TbBasicData tbBasicData = tbBasicDataMapper.selectOne(
-                Wrappers.lambdaQuery(TbBasicData.class).eq(TbBasicData::getQuarter, nowQuarter)
+                Wrappers.lambdaQuery(TbBasicData.class).eq(TbBasicData::getQuarter, previousQuarter)
                         .eq(TbBasicData::getDeptAreaCode, deptAreaCode));
         if (Objects.isNull(tbBasicData)) {
             return;
@@ -706,7 +767,7 @@
         List<BasicDataConfigVO> fixedRulesConfigList = tbBasicDataConfigService.getSubsractRulesConfigList();
         List<TbQuestion> list = tbQuestionMapper.selectList(
                 Wrappers.lambdaQuery(TbQuestion.class)
-                        .eq(TbQuestion::getQuarter, nowQuarter)
+                        .eq(TbQuestion::getQuarter, previousQuarter)
                         .eq(TbQuestion::getDeptAreaCode, deptAreaCode));
         List<TbQuestion> questionList;
 
diff --git a/finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataServiceImpl.java b/finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataServiceImpl.java
index 984e34b..8060fbc 100644
--- a/finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataServiceImpl.java
+++ b/finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataServiceImpl.java
@@ -154,10 +154,13 @@
         LocalDate quarterStartLocalDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
         LocalDate fifteenDaysLimit = quarterStartLocalDate.plusDays(14);
         LocalDate now = LocalDate.now();
-        vo.setQuarter(DateUtils.getNowQuarter());
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        previousQuarter = "2024年一季度";
+        DateUtils.getQuarterDate(previousQuarter);
+        vo.setQuarter(previousQuarter);
         vo.setStatus(ReportingStatusEnum.UNFILLED);
-        // 如果当前时间不在规定范围内:季度初1-15号 TODO
-     /*   if (now.isBefore(quarterStartLocalDate) || now.isAfter(fifteenDaysLimit)) {
+        // 如果当前时间不在规定范围内:季度初1-15号
+        /*if (now.isBefore(quarterStartLocalDate) || now.isAfter(fifteenDaysLimit)) {
             return R.ok(vo, "请于季度初1-15号上传季度数据。");
         }*/
         // 查询是否有当前季度的填报记录
@@ -165,10 +168,10 @@
                 this.getOne(
                         Wrappers.<TbBasicData>lambdaQuery()
                                 .eq(TbBasicData::getDeptAreaCode, dept.getAreaCode())
-                                .between(TbBasicData::getReportingTime, quarterStart, quarterEnd));
+                                .eq(TbBasicData::getQuarter, previousQuarter));
         if (Objects.nonNull(basicData)) {
             vo.setCreateTime(basicData.getCreateTime());
-            vo.setUpdateTime(basicData.getUpdateTime());
+            vo.setFinishedTime(basicData.getUpdateTime());
         }
         // 查询需要填写的字段
         List<TbField> list =
@@ -193,7 +196,7 @@
             vo.setFields(roots);
         }
         if (Objects.isNull(basicData)) {
-            vo.setQuarter(DateUtils.getNowQuarter());
+            vo.setQuarter(previousQuarter);
             vo.setStatus(ReportingStatusEnum.UNFILLED);
             return R.ok(vo);
         } else {
@@ -226,7 +229,8 @@
         if (Objects.isNull(dto) || CollUtils.isEmpty(dto.getFields())) {
             return;
         }
-        String nowQuarter = DateUtils.getNowQuarter();
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        previousQuarter = "2024年一季度";
         // 查询需要填写的动态字段
         List<TbField> fieldList =
                 tbFieldService.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list();
@@ -234,7 +238,7 @@
                 fieldList.stream().collect(Collectors.toMap(TbField::getId, e -> e));
         Optional<TbBasicData> basicDataOpt = this.lambdaQuery()
                 .eq(TbBasicData::getDeptAreaCode, areaCode)
-                .eq(TbBasicData::getQuarter, nowQuarter).oneOpt();
+                .eq(TbBasicData::getQuarter, previousQuarter).oneOpt();
         TbBasicData tbBasicData = BeanUtils.copyBean(dto, TbBasicData.class);
         if (basicDataOpt.isPresent()) {
             tbBasicData.setId(basicDataOpt.get().getId());
@@ -251,8 +255,8 @@
         } else {
             tbBasicData.setDeptAreaCode(areaCode);
             tbBasicData.setStatus(ReportingStatusEnum.MISSING_DATA);
-            tbBasicData.setQuarter(nowQuarter);
-            tbBasicData.setReportingTime(DateUtils.getQuarterDate(nowQuarter));
+            tbBasicData.setQuarter(previousQuarter);
+            tbBasicData.setReportingTime(DateUtils.getQuarterDate(previousQuarter));
             this.save(tbBasicData);
         }
         // 保存基础数据动态字段数据
@@ -329,6 +333,7 @@
                         && StringUtils.isNotEmpty(dto.getCurrentGdp()));
         if (flag) {
             tbBasicData.setStatus(ReportingStatusEnum.FILLED);
+            tbBasicData.setFinishedTime(new Date());
             this.updateById(tbBasicData);
         }
         /*if (ReportingStatusEnum.FILLED.equals(tbBasicData.getStatus())) {
@@ -486,7 +491,8 @@
         }*/
         LoginUser loginUser = SecurityUtils.getLoginUser();
         String areaCode = loginUser.getUser().getAreaCode();
-        String nowQuarter = DateUtils.getNowQuarter();
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        previousQuarter = "2024年一季度";
         EasyExcel.read(
                         file.getInputStream(),
                         new BasicDataListener(
@@ -496,7 +502,7 @@
                                 tbBasicDataFieldService,
                                 tbBasicDataConfigService,
                                 tbBasicDataConfigDetailService,
-                                tbScoreService, tbDataScreenScoreService, nowQuarter,
+                                tbScoreService, tbDataScreenScoreService, previousQuarter,
                                 tbDataScreenConfigService,
                                 asyncService))
                 .sheet()
@@ -598,19 +604,21 @@
     }
 
     @Override
-    public PageDTO<ScoreVO> pageScore(ScoreQuery query) {
+    public PageDTO<ScoreVO> pageScore(ScoreQuery query) throws Exception {
         Page<ScoreVO> page = new Page<>(query.getPageNum(), query.getPageSize());
         SysUser user = SecurityUtils.getLoginUser().getUser();
         String areaCode = user.getAreaCode();
         Date date = new Date();
         Date quarterStart = DateUtil.beginOfQuarter(date);
         Date quarterEnd = DateUtil.endOfQuarter(date);
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        previousQuarter = "2024年一季度";
         // 查询是否有当前季度的填报记录
         TbBasicData basicData =
                 this.getOne(
                         Wrappers.<TbBasicData>lambdaQuery()
                                 .eq(TbBasicData::getDeptAreaCode, areaCode)
-                                .between(TbBasicData::getReportingTime, quarterStart, quarterEnd));
+                                .eq(TbBasicData::getQuarter, previousQuarter));
         if (Objects.isNull(basicData)) {
             return PageDTO.empty(page);
         }
@@ -774,11 +782,12 @@
         remark.setName("备注");
         roots.add(remark);
         vo.setFields(roots);
-        String nowQuarter = DateUtils.getNowQuarter();
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        previousQuarter = "2024年一季度";
         // 查询上报的基础数据
         List<TbBasicData> basicDataList =
                 this.lambdaQuery()
-                        .eq(TbBasicData::getQuarter, nowQuarter)
+                        .eq(TbBasicData::getQuarter, previousQuarter)
                         .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED)
                         .list();
         if (CollUtils.isNotEmpty(basicDataList)) {
@@ -1127,7 +1136,6 @@
         if (Objects.isNull(basicData)) {
             throw new ServiceException("非法参数");
         }
-        String nowQuarter = DateUtils.getNowQuarter();
         this.updateById(basicData);
         // 查询该基础数据的动态字端
         // 查询需要填写的动态字段
@@ -1144,7 +1152,7 @@
                         BeanUtils.copyBean(dto, BasicDataDTO.class),
                         fieldMap));
         TbBasicData tbBasicData = BeanUtils.copyBean(dto, TbBasicData.class);
-
+        tbBasicData.setQuarter(basicData.getQuarter());
         // 保存基础数据动态字段数据
         List<TbBasicDataField> tbBasicDataFields =
                 BeanUtils.copyList(dto.getFields(), TbBasicDataField.class);
@@ -1382,7 +1390,7 @@
 
     @Override
     public List<FieldAndScoreDataVO> getFieldAndScoreData(String areaCode, String nowQuarter,
-            Integer yearType) {
-        return baseMapper.getFieldAndScoreData(areaCode, nowQuarter, yearType);
+            Integer yearType, Integer isAll) {
+        return baseMapper.getFieldAndScoreData(areaCode, nowQuarter, yearType, isAll);
     }
 }
diff --git a/finance-system/src/main/java/com/finance/system/service/impl/TbFieldServiceImpl.java b/finance-system/src/main/java/com/finance/system/service/impl/TbFieldServiceImpl.java
index 5938b04..7e95dea 100644
--- a/finance-system/src/main/java/com/finance/system/service/impl/TbFieldServiceImpl.java
+++ b/finance-system/src/main/java/com/finance/system/service/impl/TbFieldServiceImpl.java
@@ -13,7 +13,6 @@
 import com.finance.common.exception.ServiceException;
 import com.finance.common.utils.BeanUtils;
 import com.finance.common.utils.CollUtils;
-import com.finance.common.utils.DateUtils;
 import com.finance.common.utils.EasyExcelUtil;
 import com.finance.common.utils.SecurityUtils;
 import com.finance.common.utils.StringUtils;
@@ -379,7 +378,8 @@
             columnNo.add(String.valueOf(i));
         }
         excellist.add(columnNo);
-        excellist.add(Lists.newArrayList(areaName, isDept ? DateUtils.getNowQuarter() : ""));
+        excellist.add(Lists.newArrayList(areaName, isDept ? "2024年一季度" : ""));
+        // excellist.add(Lists.newArrayList(areaName, isDept ? DateUtils.getPreviousQuarter() : ""));
         return excellist;
     }
 
diff --git a/finance-system/src/main/java/com/finance/system/service/impl/TbQuestionServiceImpl.java b/finance-system/src/main/java/com/finance/system/service/impl/TbQuestionServiceImpl.java
index a99170e..b217cf3 100644
--- a/finance-system/src/main/java/com/finance/system/service/impl/TbQuestionServiceImpl.java
+++ b/finance-system/src/main/java/com/finance/system/service/impl/TbQuestionServiceImpl.java
@@ -47,7 +47,9 @@
     public void addQuestion(QuestionDTO dto) throws Exception {
         TbQuestion tbQuestion = BeanUtils.copyBean(dto, TbQuestion.class);
         tbQuestion.setType(dto.getType());
-        tbQuestion.setQuarter(DateUtils.getNowQuarter());
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        previousQuarter = "2024年一季度";
+        tbQuestion.setQuarter(previousQuarter);
         this.save(tbQuestion);
         asyncService.subtractScoreWithFixedRules(dto.getDeptAreaCode());
     }
@@ -89,4 +91,15 @@
 
         return questionVOPageDTO;
     }
+
+    @Override
+    public void delete(Long id) {
+        TbQuestion question = this.getById(id);
+        try {
+            asyncService.subtractScoreWithFixedRules(question.getDeptAreaCode());
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        this.removeById(id);
+    }
 }
diff --git a/finance-system/src/main/java/com/finance/system/service/impl/TbScoreServiceImpl.java b/finance-system/src/main/java/com/finance/system/service/impl/TbScoreServiceImpl.java
index ed22d8b..570f678 100644
--- a/finance-system/src/main/java/com/finance/system/service/impl/TbScoreServiceImpl.java
+++ b/finance-system/src/main/java/com/finance/system/service/impl/TbScoreServiceImpl.java
@@ -7,6 +7,7 @@
 import com.finance.common.exception.ServiceException;
 import com.finance.common.utils.BeanUtils;
 import com.finance.common.utils.CollUtils;
+import com.finance.common.utils.DateUtils;
 import com.finance.system.domain.TbBasicDataConfig;
 import com.finance.system.domain.TbScore;
 import com.finance.system.mapper.TbScoreMapper;
@@ -61,7 +62,8 @@
     }
 
     @Override
-    public ScoreCalculateDetailVO scoreCalculateDetail(ScoreCalculateDetailQuery query) {
+    public ScoreCalculateDetailVO scoreCalculateDetail(ScoreCalculateDetailQuery query)
+            throws Exception {
         // 查询计算类型
         TbBasicDataConfig config = basicDataConfigService.getById(query.getId());
         if (Objects.isNull(config)) {
@@ -71,7 +73,9 @@
         vo.setTypeName(config.getTypeName());
         vo.setCalculateType(config.getCalculateType());
         Page<ScoreDetailVO> page = new Page<>(query.getPageNum(), query.getPageSize());
-
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        previousQuarter = "2024年一季度";
+        query.setPreviousQuarter(previousQuarter);
         Page<ScoreDetailVO> pageVO = baseMapper.scoreCalculateDetail(query, page);
         vo.setTotal(pageVO.getTotal());
         vo.setPages(pageVO.getPages());
@@ -85,8 +89,20 @@
     }
 
     @Override
-    public ScoreRankVO queryRankAndScoreByAreaCode(String areaCode) {
-        return baseMapper.queryRankAndScoreByAreaCode(areaCode);
+    public ScoreRankVO queryRankAndScoreByAreaCode(String areaCode) throws Exception {
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        previousQuarter = "2024年一季度";
+        List<ScoreRankVO> voList = baseMapper.queryRankAndScoreByAreaCode(areaCode,
+                previousQuarter);
+        if (CollUtils.isNotEmpty(voList)) {
+            for (int i = 0; i < voList.size(); i++) {
+                if (areaCode.equals(voList.get(i).getAreaCode())) {
+                    voList.get(i).setRank(i + 1);
+                    return voList.get(i);
+                }
+            }
+        }
+        return null;
     }
 
     @Override
@@ -97,7 +113,7 @@
 
     @Override
     public ScoreCalculateDetailVO fieldsDetail(CalculateDetailQuery query,
-            List<SysUser> countyList) {
+            List<SysUser> countyList) throws Exception {
         // 查询计算类型
         TbBasicDataConfig config = basicDataConfigService.getById(query.getId());
         if (Objects.isNull(config)) {
@@ -112,6 +128,8 @@
         vo.setTypeName(config.getTypeName());
         vo.setCalculateType(config.getCalculateType());
         Page<ScoreDetailVO> page = new Page<>(query.getPageNum(), query.getPageSize());
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        previousQuarter = "2023年一季度";
         Page<ScoreDetailVO> pageVO = baseMapper.fieldsDetail(query, page, areaCodeList);
         vo.setTotal(pageVO.getTotal());
         vo.setPages(pageVO.getPages());
@@ -131,11 +149,10 @@
 
     /**
      * @param areaCode 区划代码
-     * @param yearType 年份类型 1=今年 2=去年
      * @return
      */
     @Override
-    public List<RiskMapVO> getScoreByYearType(String areaCode, Integer yearType) {
-        return baseMapper.getScoreByYearType(areaCode, yearType);
+    public List<RiskMapVO> getScoreByYearType(String areaCode, String quarter) {
+        return baseMapper.getScoreByYearType(areaCode, quarter);
     }
 }
diff --git a/finance-system/src/main/java/com/finance/system/vo/BasicDataReportingVO.java b/finance-system/src/main/java/com/finance/system/vo/BasicDataReportingVO.java
index baa8a34..4cb53ac 100644
--- a/finance-system/src/main/java/com/finance/system/vo/BasicDataReportingVO.java
+++ b/finance-system/src/main/java/com/finance/system/vo/BasicDataReportingVO.java
@@ -4,18 +4,17 @@
 import com.finance.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/18
  */
 @Data
-@ApiModel(value="基础数据填报视图对象")
+@ApiModel(value = "基础数据填报视图对象")
 public class BasicDataReportingVO implements Serializable {
 
     private static final long serialVersionUID = 8457240440217226595L;
@@ -33,11 +32,11 @@
     @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;
+    private Date finishedTime;
 
-    //1:未填报 2:数据缺失 3:已填报
+    // 1:未填报 2:数据缺失 3:已填报
     @ApiModelProperty(value = "字段")
     private List<FieldsTreeVO> fields;
 }
diff --git a/finance-system/src/main/java/com/finance/system/vo/RiskAndTransferVO.java b/finance-system/src/main/java/com/finance/system/vo/RiskAndTransferVO.java
index 735b766..b15a5e2 100644
--- a/finance-system/src/main/java/com/finance/system/vo/RiskAndTransferVO.java
+++ b/finance-system/src/main/java/com/finance/system/vo/RiskAndTransferVO.java
@@ -21,6 +21,8 @@
     private List<RiskMapVO> riskMapVOList;
     @ApiModelProperty("风险等级区间")
     private List<RiskLevelVO> riskLevelVOList;
+    @ApiModelProperty("得分")
+    private Double score;
 }
 
 
diff --git a/finance-system/src/main/resources/mapper/system/TbBasicDataMapper.xml b/finance-system/src/main/resources/mapper/system/TbBasicDataMapper.xml
index 0ab121e..f5124c4 100644
--- a/finance-system/src/main/resources/mapper/system/TbBasicDataMapper.xml
+++ b/finance-system/src/main/resources/mapper/system/TbBasicDataMapper.xml
@@ -95,7 +95,7 @@
   <select id="getFieldAndScoreData" resultType="com.finance.system.vo.FieldAndScoreDataVO">
     SELECT tbdc.id,
     tbdc.type_name,
-    ts.score,
+    ROUND(ts.score,2) AS score,
     tbdc.max_score,
     tbd.dept_area_code,
     tbdc.basic_data_category_id AS basicDataCategoryId,
@@ -107,9 +107,12 @@
     LEFT JOIN tb_basic_data_config tbdc ON ts.basic_data_config_id = tbdc.id
     LEFT JOIN tb_basic_data_category tbdc2 ON tbdc2.id = tbdc.basic_data_category_id
     LEFT JOIN tb_basic_data_category tbdc3 ON tbdc2.parent_id = tbdc3.id
+    LEFT JOIN sys_user su ON tbd.dept_area_code = su.area_code
     <where>
-      tbd.`quarter` = #{nowQuarter}
-      <if test="areaCode!=null and areaCode != ''">
+      tbd.`quarter` = #{nowQuarter} AND su.user_id IN (SELECT user_id FROM sys_user WHERE
+      area_code
+      LIKE CONCAT( SUBSTRING(#{areaCode}, 0, 4 ), '%' ) AND user_type = 2 AND area_level = 4)
+      <if test="isAll!=null and isAll == 2">
         AND tbd.dept_area_code = #{areaCode}
       </if>
       <if test="yearType==1">
diff --git a/finance-system/src/main/resources/mapper/system/TbScoreMapper.xml b/finance-system/src/main/resources/mapper/system/TbScoreMapper.xml
index 60c0875..959a260 100644
--- a/finance-system/src/main/resources/mapper/system/TbScoreMapper.xml
+++ b/finance-system/src/main/resources/mapper/system/TbScoreMapper.xml
@@ -33,7 +33,7 @@
     <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!=''">
+    <if test="query.type !=null and query.type!=''">
       AND tbdc.calculate_type = #{query.type}
     </if>
 
@@ -50,6 +50,7 @@
     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 tbd.quarter = #{query.previousQuarter}
       <if test="query.areaName != null and query.areaName != ''">
         AND su.area_name LIKE CONCAT('%',#{query.areaName},'%')
       </if>
@@ -59,22 +60,26 @@
 
   </select>
   <select id="queryRankAndScoreByAreaCode" resultType="com.finance.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 tbc.dept_area_code AS areaCode,
+    ROUND(SUM(ts.score), 2) AS score
+    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
+    LEFT JOIN sys_user su ON tbc.dept_area_code = su.area_code
+    <where>
+      tbc.quarter = #{previousQuarter}
+      AND YEAR(tbc.reporting_time) = YEAR(
+      CURDATE())
+      AND su.user_id in (SELECT user_id
+      FROM sys_user
+      WHERE area_code LIKE CONCAT(SUBSTRING(#{areaCode}, 0, 4), '%')
+      AND user_type = 2
+      AND area_level = 4)
+    </where>
+
+    GROUP BY tbc.dept_area_code
+    ORDER BY score DESC
+
   </select>
   <select id="deptCalculateDetail" resultType="com.finance.system.vo.DeptCalculateDetailVO">
     SELECT bdc.id,
@@ -111,6 +116,10 @@
       <if test="query.areaCode != null and query.areaCode != ''">
         AND su.area_code=#{query.areaCode}
       </if>
+      <if test="query.previousQuarter != null and query.previousQuarter != ''">
+        AND tbd.quarter=#{previousQuarter}
+      </if>
+      group by su.area_code
     </where>
   </select>
   <select id="getCurrentScoreList" resultType="com.finance.system.vo.RiskMapVO">
@@ -122,7 +131,7 @@
     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>
-      tbd.`quarter` = #{nowQuarter}
+      tbd.`quarter` = #{nowQuarter} AND su.area_level != 0
       <if test="areaCode !=  null and areaCode != ''">
         AND tbd.dept_area_code = #{areaCode}
       </if>
@@ -141,7 +150,7 @@
       AND su.area_level = '${@com.finance.common.enums.AreaLevelEnum@COUNTY.getCode()}'
     </where>
     GROUP BY tbd.id) rs
-    ORDER BY rs.score DESC
+    ORDER BY rs.score ASC
   </select>
   <select id="getScoreByYearType" resultType="com.finance.system.vo.RiskMapVO">
     SELECT *
@@ -150,13 +159,7 @@
     LEFT JOIN tb_basic_data tbd ON tbd.id = ts.basic_data_id
     LEFT JOIN sys_user su ON su.area_code = tbd.dept_area_code
     <where>
-      tbd.dept_area_code = #{areaCode}
-      <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>
+      tbd.dept_area_code = #{areaCode} AND tbd.quarter = #{quarter}
     </where>
     GROUP BY tbd.id) rs
     ORDER BY rs.score DESC

--
Gitblit v1.7.1