mitao
2024-04-10 2da6576ce17cb18f042f561648230736945ec4c1
大屏数据配置接口
1 文件已重命名
1个文件已删除
7个文件已添加
25个文件已修改
1256 ■■■■■ 已修改文件
ruoyi-admin-dept/src/main/java/com/ruoyi/RuoYiAdminDeptApplication.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/tool/TaskUtil.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbDataScreenConfigController.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TaskUtil.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/enums/DataScreenConfigEnum.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/enums/SubTypeEnum.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/NumberDisplaceChineseUtil.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicData.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicDataConfigDetail.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/domain/TbDataScreenConfig.java 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/update/DataIndicatorsUpdDTO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FormalIndicatorsUpdDTO.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/update/QuestionUpdDTO.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/update/RiskLevelUpdDTO.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/handler/CustomerHandler.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/listener/HistoryDataListener.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/DataScreenConfigQuery.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenConfigService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TbQuestionService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenConfigServiceImpl.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbQuestionServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/DataScreenConfigVO.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TbBasicDataMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TbDataScreenConfigMapper.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin-dept/src/main/java/com/ruoyi/RuoYiAdminDeptApplication.java
@@ -1,5 +1,7 @@
package com.ruoyi;
import java.net.InetAddress;
import java.net.UnknownHostException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -12,8 +14,6 @@
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.client.RestTemplate;
import java.net.UnknownHostException;
/**
 * 启动程序
 * 
@@ -22,18 +22,18 @@
@Slf4j
@EnableScheduling//开启定时任务
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class RuoYiAdminDeptApplication
{
public class RuoYiAdminDeptApplication {
    public static void main(String[] args) throws UnknownHostException {
        ConfigurableApplicationContext application = SpringApplication.run(RuoYiAdminDeptApplication.class, args);
        ConfigurableApplicationContext application = SpringApplication.run(
                RuoYiAdminDeptApplication.class, args);
        Environment env = application.getEnvironment();
        log.info("\n----------------------------------------------------------\n\t" +
                        "应用 '{}' 运行成功! 访问连接:\n\t" +
                        "Swagger文档: \t\thttp://{}:{}/doc.html\n" +
                        "----------------------------------------------------------",
                env.getProperty("spring.application.name", "后台"),
                //InetAddress.getLocalHost().getHostAddress(),
                "localhost",
                InetAddress.getLocalHost().getHostAddress(),
                env.getProperty("server.port", "8081"));
    }
ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/tool/TaskUtil.java
@@ -1,17 +1,12 @@
package com.ruoyi.web.controller.tool;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.system.service.*;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.time.Instant;
import java.util.*;
/**
@@ -38,6 +33,7 @@
        }
    }
    /**
     * 每隔一分钟去处理的定时任务
     */
@@ -81,20 +77,8 @@
    @Scheduled(cron = "0 0 0 * * *")
    public void taskDay(){
        List<SysRole> sysRoles = roleService.selectListByDelFlag(2);
        if(CollectionUtils.isEmpty(sysRoles)){
            return;
        }
        for (SysRole sysRole : sysRoles) {
            if(sysRole.getRemoveDays()>0){
                sysRole.setRemoveDays(sysRole.getRemoveDays()-1);
                roleService.updateRole(sysRole);
            }else {
                roleService.deleteRoleById(sysRole.getRoleId());
            }
        }
    }
    /**
     * 每天的凌晨执行的任务
     */
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java
@@ -7,7 +7,7 @@
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.domain.TbQuestion;
import com.ruoyi.system.dto.QuestionDTO;
import com.ruoyi.system.dto.QuestionUpdDto;
import com.ruoyi.system.dto.update.QuestionUpdDTO;
import com.ruoyi.system.query.CurrentFieldsQuery;
import com.ruoyi.system.query.QuestionQuery;
import com.ruoyi.system.query.ScoreCalculateDetailQuery;
@@ -15,14 +15,25 @@
import com.ruoyi.system.service.TbBasicDataService;
import com.ruoyi.system.service.TbQuestionService;
import com.ruoyi.system.service.TbScoreService;
import com.ruoyi.system.vo.*;
import com.ruoyi.system.vo.CurrentFieldsAllVO;
import com.ruoyi.system.vo.CurrentFieldsDetailVO;
import com.ruoyi.system.vo.CurrentFieldsVO;
import com.ruoyi.system.vo.QuestionVO;
import com.ruoyi.system.vo.ScoreCalculateDetailVO;
import com.ruoyi.system.vo.ScoreCalculateVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
 * @author mitao
@@ -46,7 +57,8 @@
     */
    @ApiOperation(value = "字段统计", notes = "字段统计")
    @PostMapping("/fields-statics")
    public R<PageDTO<CurrentFieldsVO>> fieldsStatics(@Validated @RequestBody CurrentFieldsQuery dto) {
    public R<PageDTO<CurrentFieldsVO>> fieldsStatics(
            @Validated @RequestBody CurrentFieldsQuery dto) {
        try {
            dto.setQuarter(DateUtils.getNowQuarter());
            return tbBasicDataService.fieldsStatics(dto);
@@ -104,7 +116,8 @@
     */
    @PostMapping("/score-calculate")
    @ApiOperation("得分计算")
    public R<PageDTO<ScoreCalculateVO>> scoreCalculate(@Validated @RequestBody ScoreCalculateQuery query) {
    public R<PageDTO<ScoreCalculateVO>> scoreCalculate(
            @Validated @RequestBody ScoreCalculateQuery query) {
        try {
            query.setQuarter(DateUtils.getNowQuarter());
            return R.ok(tbBasicDataService.scoreCalculatePage(query));
@@ -123,7 +136,8 @@
    @PostMapping("/score-calculate-detail")
    @ApiOperation("得分计算-查看详情")
    @ApiImplicitParam(name = "areaName", value = "部门名称", required = false, dataType = "string", paramType = "query", dataTypeClass = String.class)
    public R<ScoreCalculateDetailVO> scoreCalculateDetail(@Validated @RequestBody ScoreCalculateDetailQuery query) {
    public R<ScoreCalculateDetailVO> scoreCalculateDetail(
            @Validated @RequestBody ScoreCalculateDetailQuery query) {
        return R.ok(tbScoreService.scoreCalculateDetail(query));
    }
@@ -156,7 +170,7 @@
     */
    @PostMapping("/edit-question")
    @ApiOperation(value = "发现问题-编辑问题", notes = "发现问题")
    public R<Void> editQuestion(@Validated @RequestBody QuestionUpdDto dto) {
    public R<Void> editQuestion(@Validated @RequestBody QuestionUpdDTO dto) {
        try {
            tbQuestionService.editQuestion(dto);
            return R.ok();
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java
@@ -74,7 +74,7 @@
                        .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED)
                        .between(flag, TbBasicData::getCreateTime, startTime, endTime)
                        .groupBy(TbBasicData::getQuarter)
                        .orderByDesc(TbBasicData::getCreateTime)
                        .orderByDesc(TbBasicData::getReportingTime)
                        .page(new Page<>(dto.getPageNum(), dto.getPageSize()));
        return R.ok(PageDTO.of(page, BasicDataVO.class));
    }
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbDataScreenConfigController.java
@@ -1,6 +1,22 @@
package com.ruoyi.web.controller.api;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.system.dto.update.DataIndicatorsUpdDTO;
import com.ruoyi.system.dto.update.FormalIndicatorsUpdDTO;
import com.ruoyi.system.dto.update.RiskLevelUpdDTO;
import com.ruoyi.system.query.DataScreenConfigQuery;
import com.ruoyi.system.service.TbDataScreenConfigService;
import com.ruoyi.system.vo.DataScreenConfigVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -12,9 +28,82 @@
 * @author mitao
 * @since 2024-03-13
 */
@Slf4j
@RestController
@RequestMapping("/tb-data-screen-config")
@RequestMapping("/data-screen-config")
@RequiredArgsConstructor
@Api(tags = {"大屏数据配置相关接口"})
public class TbDataScreenConfigController {
    private final TbDataScreenConfigService tbDataScreenConfigService;
    @PostMapping("/get-risk-level")
    @ApiOperation("获取风险等级设置")
    public R<DataScreenConfigVO> getRiskLevel() {
        try {
            return R.ok(tbDataScreenConfigService.getRiskLevel());
        } catch (Exception e) {
            if (e instanceof ServiceException) {
                return R.fail(e.getMessage());
            }
            throw new RuntimeException(e);
        }
    }
    @PostMapping("/edit-risk-level")
    @ApiOperation("编辑风险等级设置")
    public R<DataScreenConfigVO> editRiskLevel(
            @Validated @RequestBody RiskLevelUpdDTO dto) {
        try {
            return R.ok(tbDataScreenConfigService.editRiskLevel(dto));
        } catch (Exception e) {
            if (e instanceof ServiceException) {
                return R.fail(e.getMessage());
            }
            throw new RuntimeException(e);
        }
    }
    @PostMapping("/get-indicators")
    @ApiOperation("获取数据指标/形式指标级配置")
    public R<List<DataScreenConfigVO>> getIndicatorsConfig(
            @Validated @RequestBody DataScreenConfigQuery query) {
        try {
            return R.ok(tbDataScreenConfigService.getIndicatorsConfig(query));
        } catch (Exception e) {
            if (e instanceof ServiceException) {
                return R.fail(e.getMessage());
            }
            throw new RuntimeException(e);
        }
    }
    @PostMapping("/edit-data-indicators")
    @ApiOperation("编辑数据指标标级配置")
    public R<DataScreenConfigVO> editDataIndicatorsConfig(
            @Validated @RequestBody DataIndicatorsUpdDTO dto) {
        try {
            return R.ok(tbDataScreenConfigService.editDataIndicatorsConfig(dto));
        } catch (Exception e) {
            if (e instanceof ServiceException) {
                return R.fail(e.getMessage());
            }
            throw new RuntimeException(e);
        }
    }
    @PostMapping("/edit-formal-indicators")
    @ApiOperation("编辑形式指标标级配置")
    public R<DataScreenConfigVO> editFormalIndicatorsConfig(
            @Validated @RequestBody FormalIndicatorsUpdDTO dto) {
        try {
            return R.ok(tbDataScreenConfigService.editFormalIndicatorsConfig(dto));
        } catch (Exception e) {
            if (e instanceof ServiceException) {
                return R.fail(e.getMessage());
            }
            throw new RuntimeException(e);
        }
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TaskUtil.java
@@ -1,17 +1,12 @@
package com.ruoyi.web.controller.tool;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.system.service.*;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.time.Instant;
import java.util.*;
/**
@@ -37,6 +32,7 @@
        }
    }
    /**
     * 每隔一分钟去处理的定时任务
     */
@@ -80,20 +76,8 @@
    @Scheduled(cron = "0 0 0 * * *")
    public void taskDay(){
        List<SysRole> sysRoles = roleService.selectListByDelFlag(2);
        if(CollectionUtils.isEmpty(sysRoles)){
            return;
        }
        for (SysRole sysRole : sysRoles) {
            if(sysRole.getRemoveDays()>0){
                sysRole.setRemoveDays(sysRole.getRemoveDays()-1);
                roleService.updateRole(sysRole);
            }else {
                roleService.deleteRoleById(sysRole.getRoleId());
            }
        }
    }
    /**
     * 每天的凌晨执行的任务
     */
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
@@ -1,13 +1,12 @@
package com.ruoyi.common.core.domain.entity;
import com.ruoyi.common.core.domain.BaseModel;
import java.util.Set;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.Set;
/**
 * 角色表 sys_role
@@ -15,224 +14,204 @@
 * @author ruoyi
 */
@Data
public class SysRole extends BaseModel
{
public class SysRole extends BaseModel {
    private static final long serialVersionUID = 1L;
    /** 角色ID */
    /**
     * 角色ID
     */
    //@Excel(name = "角色序号", cellType = ColumnType.NUMERIC)
    private Long roleId;
    /** 角色名称 */
    /**
     * 角色名称
     */
    //@Excel(name = "角色名称")
    private String roleName;
    /** 角色权限 */
    /**
     * 角色权限
     */
    //@Excel(name = "角色权限")
    private String roleKey;
    /** 角色排序 */
    /**
     * 角色排序
     */
    //@Excel(name = "角色排序")
    private Integer roleSort;
    /** 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) */
    /**
     * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限)
     */
    //@Excel(name = "数据范围", readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限")
    private String dataScope;
    /** 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) */
    /**
     * 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示)
     */
    private boolean menuCheckStrictly;
    /** 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) */
    /**
     * 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 )
     */
    private boolean deptCheckStrictly;
    /** 角色状态(0正常 1停用) */
    /**
     * 角色状态(0正常 1停用)
     */
    //@Excel(name = "角色状态", readConverterExp = "0=正常,1=停用")
    private Integer status;
    /** 删除标志(0代表存在 2代表删除) */
    /**
     * 删除标志(0代表存在 2代表删除)
     */
    private Integer delFlag;
    /** 用户是否存在此角色标识 默认不存在 */
    /**
     * 用户是否存在此角色标识 默认不存在
     */
    private boolean flag = false;
    /** 菜单组 */
    /**
     * 菜单组
     */
    private Long[] menuIds;
    /** 部门组(数据权限) */
    /**
     * 部门组(数据权限)
     */
    private Long[] deptIds;
    /** 角色菜单权限 */
    /**
     * 角色菜单权限
     */
    private Set<String> permissions;
    private String remark;
    /**
     * 删除天数
     */
    private Integer removeDays;
    /**
     * 岗位类型 1=经理 2=负责人 3=专员
     */
    private Integer postType;
    public Integer getPostType() {
        return postType;
    }
    public void setPostType(Integer postType) {
        this.postType = postType;
    }
    public SysRole()
    {
    public SysRole() {
    }
    public SysRole(Long roleId)
    {
    public SysRole(Long roleId) {
        this.roleId = roleId;
    }
    public Long getRoleId()
    {
    public Long getRoleId() {
        return roleId;
    }
    public void setRoleId(Long roleId)
    {
    public void setRoleId(Long roleId) {
        this.roleId = roleId;
    }
    public boolean isAdmin()
    {
    public boolean isAdmin() {
        return isAdmin(this.roleId);
    }
    public static boolean isAdmin(Long roleId)
    {
    public static boolean isAdmin(Long roleId) {
        return roleId != null && 1L == roleId;
    }
    @NotBlank(message = "角色名称不能为空")
    @Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符")
    public String getRoleName()
    {
    public String getRoleName() {
        return roleName;
    }
    public void setRoleName(String roleName)
    {
    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }
    @Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符")
    public String getRoleKey()
    {
    public String getRoleKey() {
        return roleKey;
    }
    public void setRoleKey(String roleKey)
    {
    public void setRoleKey(String roleKey) {
        this.roleKey = roleKey;
    }
    public Integer getRoleSort()
    {
    public Integer getRoleSort() {
        return roleSort;
    }
    public void setRoleSort(Integer roleSort)
    {
    public void setRoleSort(Integer roleSort) {
        this.roleSort = roleSort;
    }
    public String getDataScope()
    {
    public String getDataScope() {
        return dataScope;
    }
    public void setDataScope(String dataScope)
    {
    public void setDataScope(String dataScope) {
        this.dataScope = dataScope;
    }
    public boolean isMenuCheckStrictly()
    {
    public boolean isMenuCheckStrictly() {
        return menuCheckStrictly;
    }
    public void setMenuCheckStrictly(boolean menuCheckStrictly)
    {
    public void setMenuCheckStrictly(boolean menuCheckStrictly) {
        this.menuCheckStrictly = menuCheckStrictly;
    }
    public boolean isDeptCheckStrictly()
    {
    public boolean isDeptCheckStrictly() {
        return deptCheckStrictly;
    }
    public void setDeptCheckStrictly(boolean deptCheckStrictly)
    {
    public void setDeptCheckStrictly(boolean deptCheckStrictly) {
        this.deptCheckStrictly = deptCheckStrictly;
    }
    public Integer getStatus()
    {
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status)
    {
    public void setStatus(Integer status) {
        this.status = status;
    }
    public Integer getDelFlag()
    {
    public Integer getDelFlag() {
        return delFlag;
    }
    public void setDelFlag(Integer delFlag)
    {
    public void setDelFlag(Integer delFlag) {
        this.delFlag = delFlag;
    }
    public boolean isFlag()
    {
    public boolean isFlag() {
        return flag;
    }
    public void setFlag(boolean flag)
    {
    public void setFlag(boolean flag) {
        this.flag = flag;
    }
    public Long[] getMenuIds()
    {
    public Long[] getMenuIds() {
        return menuIds;
    }
    public void setMenuIds(Long[] menuIds)
    {
    public void setMenuIds(Long[] menuIds) {
        this.menuIds = menuIds;
    }
    public Long[] getDeptIds()
    {
    public Long[] getDeptIds() {
        return deptIds;
    }
    public void setDeptIds(Long[] deptIds)
    {
    public void setDeptIds(Long[] deptIds) {
        this.deptIds = deptIds;
    }
    public Set<String> getPermissions()
    {
    public Set<String> getPermissions() {
        return permissions;
    }
    public void setPermissions(Set<String> permissions)
    {
    public void setPermissions(Set<String> permissions) {
        this.permissions = permissions;
    }
@@ -242,14 +221,6 @@
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public Integer getRemoveDays() {
        return removeDays;
    }
    public void setRemoveDays(Integer removeDays) {
        this.removeDays = removeDays;
    }
    @Override
ruoyi-common/src/main/java/com/ruoyi/common/enums/DataScreenConfigEnum.java
New file
@@ -0,0 +1,27 @@
package com.ruoyi.common.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum DataScreenConfigEnum {
    RISK_LEVEL(1, "风险等级设置"),
    DATA_INDICATORS(2, "数据指标设置"),
    FORMAL_INDICATORS(3, "形式指标设置");
    @EnumValue
    private final Integer code;
    @JsonValue
    private final String desc;
    public static DataScreenConfigEnum getEnumByCode(Integer code) {
        for (DataScreenConfigEnum e : DataScreenConfigEnum.values()) {
            if (e.code.equals(code)) {
                return e;
            }
        }
        return null;
    }
}
ruoyi-common/src/main/java/com/ruoyi/common/enums/SubTypeEnum.java
New file
@@ -0,0 +1,28 @@
package com.ruoyi.common.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum SubTypeEnum {
    INDICATOR_ONE(1, "指标一"),
    INDICATOR_TWO(2, "指标二"),
    INDICATOR_THREE(3, "指标三"),
    INDICATOR_FOUR(4, "指标四");
    @EnumValue
    private final Integer code;
    @JsonValue
    private final String desc;
    public static SubTypeEnum getEnumByCode(Integer code) {
        for (SubTypeEnum e : SubTypeEnum.values()) {
            if (e.code.equals(code)) {
                return e;
            }
        }
        return null;
    }
}
ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
@@ -1,16 +1,21 @@
package com.ruoyi.common.utils;
import org.apache.commons.lang3.time.DateFormatUtils;
import cn.hutool.core.convert.NumberChineseFormatter;
import java.lang.management.ManagementFactory;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.time.DateFormatUtils;
/**
 * 时间工具类
@@ -18,6 +23,7 @@
 * @author ruoyi
 */
public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
    public static String YYYY = "yyyy";
    public static String YYYY_MM = "yyyy-MM";
@@ -331,6 +337,18 @@
    }
    /**
     * Date转为LocalDateTime
     *
     * @param date 日期
     * @return LocalDateTime
     */
    public static LocalDate dateToLocalDate(Date date) {
        Instant instant = date.toInstant();
        ZoneId zoneId = ZoneId.systemDefault();
        return instant.atZone(zoneId).toLocalDate();
    }
    /**
     * localdate转为字符串
     *
     * @param time localdate
@@ -354,16 +372,52 @@
    /**
     * 获取当前季度字符串
     *
     * @return
     * @throws Exception
     * @return 当前季度字符串
     * @throws Exception 异常
     */
    public static String getNowQuarter() throws Exception {
        //当前所在季度
        Date date = new Date();
        int quarterOfYear = getQuarterOfYear(date);
        String quarterOfYearStr = null;
        quarterOfYearStr = NumberDisplaceChineseUtil.numberToChinese(quarterOfYear);
        char quarterOfYear = String.valueOf(getQuarterOfYear(date)).toCharArray()[0];
        String quarterOfYearStr = NumberChineseFormatter.numberCharToChinese(quarterOfYear, false);
        LocalDate now = LocalDate.now();
        return String.format("%s年%s季度", now.getYear(), quarterOfYearStr);
    }
    public static Date getQuarterDate(String quarter) {
        // 提取年份和季度信息
        int year = Integer.parseInt(quarter.substring(0, 4));
        int quarterNumber = NumberChineseFormatter.chineseToNumber(quarter.substring(5, 6)); // 季度数字
        // 计算季度初的日期
        LocalDate startDate;
        switch (quarterNumber) {
            case 1:
                startDate = LocalDate.of(year, 1, 1);
                break;
            case 2:
                startDate = LocalDate.of(year, 4, 1);
                break;
            case 3:
                startDate = LocalDate.of(year, 7, 1);
                break;
            case 4:
                startDate = LocalDate.of(year, 10, 1);
                break;
            default:
                throw new IllegalArgumentException("Invalid quarter number: " + quarterNumber);
        }
        return DateUtils.toDate(startDate);
    }
    //测试 getNowQuarter
    public static void main(String[] args) throws Exception {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String nowQuarter = getNowQuarter();
        System.out.println(nowQuarter);
        System.out.println(NumberChineseFormatter.chineseToNumber("一"));
        System.out.println(simpleDateFormat.format(getQuarterDate("2024年一季度")));
        System.out.println(simpleDateFormat.format(getQuarterDate("2024年二季度")));
        System.out.println(simpleDateFormat.format(getQuarterDate("2024年三季度")));
        System.out.println(simpleDateFormat.format(getQuarterDate("2024年四季度")));
    }
}
ruoyi-common/src/main/java/com/ruoyi/common/utils/NumberDisplaceChineseUtil.java
File was deleted
ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicData.java
@@ -79,5 +79,7 @@
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    @ApiModelProperty(value = "上报时间")
    @TableField(value = "reporting_time")
    private Date reportingTime;
}
ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicDataConfigDetail.java
@@ -6,10 +6,9 @@
import com.baomidou.mybatisplus.annotation.TableName;
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>
@@ -36,11 +35,11 @@
    private Long basicDataConfigId;
    @ApiModelProperty(value = "键")
    @TableField("key")
    @TableField("`key`")
    private String key;
    @ApiModelProperty(value = "值")
    @TableField("value")
    @TableField("`value`")
    private String value;
ruoyi-system/src/main/java/com/ruoyi/system/domain/TbDataScreenConfig.java
@@ -1,13 +1,18 @@
package com.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.enums.DataScreenConfigEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
@@ -31,16 +36,36 @@
    @ApiModelProperty(value = "配置类型(1=风险等级设置 2=数据指标设置 3=形式指标设置)")
    @TableField("type")
    private Boolean type;
    private DataScreenConfigEnum type;
    @ApiModelProperty(value = "得分计算规则(多个规则使用','隔开)")
    @ApiModelProperty(value = "得分计算规则")
    @TableField("calculate_formula")
    private String calculateFormula;
    @ApiModelProperty(value = "得分率计算规则")
    @TableField("calculate_rate_formula")
    private String calculateRateFormula;
    @ApiModelProperty(value = "配置类型子类型(1=数据指标一/形式指标一 2=数据指标二/形式指标二 3=数据指标三/形式指标三 4=数据指标四/形式指标四)")
    @TableField("sub_type")
    private Integer subType;
    @ApiModelProperty(value = "风险等级范围-高风险得分")
    @TableField("high_risk")
    private String highRisk;
    @ApiModelProperty(value = "风险等级范围-低风险得分")
    @TableField("medium_risk")
    private String mediumRisk;
    @ApiModelProperty(value = "风险等级范围-无风险得分")
    @TableField("low_risk")
    private String lowRisk;
    @ApiModelProperty(value = "得分计算规则(多个规则使用','隔开)")
    @TableField("no_risk")
    private String noRisk;
    @ApiModelProperty(value = "删除标志(0代表存在 1代表删除)")
    @TableField("del_flag")
    @TableLogic
ruoyi-system/src/main/java/com/ruoyi/system/dto/update/DataIndicatorsUpdDTO.java
New file
@@ -0,0 +1,35 @@
package com.ruoyi.system.dto.update;
import com.ruoyi.common.enums.SubTypeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/4/10
 */
@Data
@ApiModel(value = "风险等级设置编辑数据传输对象")
public class DataIndicatorsUpdDTO implements Serializable {
    private static final long serialVersionUID = -5866223907037261823L;
    @ApiModelProperty(value = "id")
    private Long id;
    @ApiModelProperty(value = "配置类型子类型(1=指标一 2=指标二 3=指标三 4=指标四)")
    @NotNull(message = "配置类型子类型不能为空")
    private SubTypeEnum subType;
    @ApiModelProperty(value = "得分计算规则")
    @NotNull(message = "得分计算规则不能为空")
    private String calculateFormula;
    @ApiModelProperty(value = "得分率计算规则")
    @NotNull(message = "得分率计算规则不能为空")
    private String calculateRateFormula;
}
ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FormalIndicatorsUpdDTO.java
New file
@@ -0,0 +1,28 @@
package com.ruoyi.system.dto.update;
import com.ruoyi.common.enums.SubTypeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/4/10
 */
@Data
@ApiModel(value = "风险等级设置编辑数据传输对象")
public class FormalIndicatorsUpdDTO implements Serializable {
    private static final long serialVersionUID = -4878457973955230627L;
    @ApiModelProperty(value = "id")
    private Long id;
    @ApiModelProperty(value = "配置类型子类型(1=指标一 2=指标二 3=指标三 4=指标四)")
    private SubTypeEnum subType;
    @ApiModelProperty(value = "得分计算规则")
    private String calculateFormula;
}
ruoyi-system/src/main/java/com/ruoyi/system/dto/update/QuestionUpdDTO.java
File was renamed from ruoyi-system/src/main/java/com/ruoyi/system/dto/QuestionUpdDto.java
@@ -1,12 +1,11 @@
package com.ruoyi.system.dto;
package com.ruoyi.system.dto.update;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import lombok.Data;
/**
 * @author mitao
@@ -14,7 +13,8 @@
 */
@Data
@ApiModel(value = "发现问题编辑数据传输对象")
public class QuestionUpdDto implements Serializable {
public class QuestionUpdDTO implements Serializable {
    private static final long serialVersionUID = 6382858207794071957L;
    @ApiModelProperty(value = "id")
    @NotNull(message = "id不能为空")
ruoyi-system/src/main/java/com/ruoyi/system/dto/update/RiskLevelUpdDTO.java
New file
@@ -0,0 +1,41 @@
package com.ruoyi.system.dto.update;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import javax.validation.constraints.NotBlank;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/4/10
 */
@Data
@ApiModel(value = "风险等级设置编辑数据传输对象")
public class RiskLevelUpdDTO implements Serializable {
    private static final long serialVersionUID = -4878457973955230627L;
    @ApiModelProperty(value = "id", notes = "如果返回了id,必传")
    private Long id;
    @ApiModelProperty(value = "计算规则", notes = "公式中字段的格式为:field_字段id,e.g:field_1,field_2等。")
    @NotBlank(message = "计算规则不能为空")
    private String calculateFormula;
    @ApiModelProperty(value = "风险等级范围-高风险得分")
    @NotBlank(message = "风险等级范围-高风险得分不能为空")
    private String highRisk;
    @ApiModelProperty(value = "风险等级范围-中风险得分")
    @NotBlank(message = "风险等级范围-中风险得分不能为空")
    private String mediumRisk;
    @ApiModelProperty(value = "风险等级范围-低风险得分")
    @NotBlank(message = "风险等级范围-低风险得分不能为空")
    private String lowRisk;
    @ApiModelProperty(value = "风险等级范围-无风险得分")
    @NotBlank(message = "风险等级范围-无风险得分不能为空")
    private String noRisk;
}
ruoyi-system/src/main/java/com/ruoyi/system/handler/CustomerHandler.java
@@ -7,11 +7,10 @@
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import org.apache.poi.ss.usermodel.Cell;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.ss.usermodel.Cell;
public class CustomerHandler extends AbstractColumnWidthStyleStrategy {
@@ -24,10 +23,13 @@
    }
    @Override
    protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
    protected void setColumnWidth(WriteSheetHolder writeSheetHolder,
            List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex,
            Boolean isHead) {
        boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);
        if (needSetWidth) {
            Map<Integer, Integer> maxColumnWidthMap = (Map) CACHE.get(writeSheetHolder.getSheetNo());
            Map<Integer, Integer> maxColumnWidthMap = (Map) CACHE.get(
                    writeSheetHolder.getSheetNo());
            if (maxColumnWidthMap == null) {
                maxColumnWidthMap = new HashMap(16);
                CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);
@@ -43,10 +45,12 @@
                    }
                }
                Integer maxColumnWidth = (Integer) ((Map) maxColumnWidthMap).get(cell.getColumnIndex());
                Integer maxColumnWidth = (Integer) ((Map) maxColumnWidthMap).get(
                        cell.getColumnIndex());
                if (maxColumnWidth == null || columnWidth > maxColumnWidth) {
                    ((Map) maxColumnWidthMap).put(cell.getColumnIndex(), columnWidth);
                    writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth * 256);
                    writeSheetHolder.getSheet()
                            .setColumnWidth(cell.getColumnIndex(), columnWidth * 256);
                }
            }
        }
ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java
@@ -163,8 +163,9 @@
        }
        LocalDate now = LocalDate.now();
        TbBasicData tbBasicData;
        String quarter = String.format("%s年%s", now.getYear(), dataMap.get(1));
        Optional<TbBasicData> tbBasicDataOpt = tbBasicDataService.lambdaQuery().
                eq(TbBasicData::getQuarter, String.format("%s年%s", now.getYear(), dataMap.get(1)))
                eq(TbBasicData::getQuarter, quarter)
                .eq(TbBasicData::getDeptAreaCode, areaCode).oneOpt();
        tbBasicData = tbBasicDataOpt.orElseGet(TbBasicData::new);
        tbBasicData.setQuarter(DateUtils.getNowQuarter());
@@ -173,6 +174,7 @@
        tbBasicData.setDeptAreaCode(areaCode);
        tbBasicData.setRemark(dataMap.get(remarkIndex));
        tbBasicData.setStatus(ReportingStatusEnum.MISSING_DATA);
        tbBasicData.setReportingTime(DateUtils.getQuarterDate(quarter));
        tbBasicDataService.saveOrUpdate(tbBasicData);
        tbBasicDataFieldService.remove(Wrappers.<TbBasicDataField>lambdaQuery()
                .eq(TbBasicDataField::getBasicDataId, tbBasicData.getId()));
ruoyi-system/src/main/java/com/ruoyi/system/listener/HistoryDataListener.java
@@ -18,6 +18,7 @@
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.CalculateUtil;
import com.ruoyi.common.utils.CollUtils;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.domain.TbBasicData;
import com.ruoyi.system.domain.TbBasicDataConfig;
import com.ruoyi.system.domain.TbBasicDataConfigDetail;
@@ -73,42 +74,6 @@
        this.tbScoreService = tbScoreService;
        this.sysUserService = sysUserService;
        this.quarter = quarter;
    }
    private static String validateFields(Map.Entry<Integer, String> integerStringEntry,
            Map<Integer, String> dataMap, TbField field) {
        String value = dataMap.get(integerStringEntry.getKey());
        if (FieldTypeEnum.NUMBER.equals(field.getFieldType())) {
            Integer numMin = field.getNumMin();
            Integer numMax = field.getNumMax();
            if (Objects.nonNull(numMin) && Objects.nonNull(numMax)) {
                if (numMin > Integer.parseInt(value) || numMax < Integer.parseInt(value)) {
                    throw new ServiceException(
                            String.format("字段(%s)的内容不在%d~%d范围内", field.getFieldName(),
                                    numMin, numMax));
                }
            }
        }
        if (FieldInputTypeEnum.MANUAL_INPUT.equals(field.getTextInputType())
                && FieldTypeEnum.TEXT.equals(field.getFieldType())) {
            Integer textMinNum = field.getTextMinNum();
            Integer textMaxNum = field.getTextMaxNum();
            if (Objects.nonNull(textMinNum) && Objects.nonNull(textMaxNum)) {
                if (textMinNum > value.length() || textMaxNum < value.length()) {
                    throw new ServiceException(
                            String.format("字段(%s)的内容长度超出%d~%d的范围",
                                    field.getFieldName(),
                                    textMinNum, textMaxNum));
                }
            }
        }
        if (FieldTypeEnum.PERCENTAGE.equals(field.getFieldType())) {
            if (0 > Double.parseDouble(value) || 100 < Double.parseDouble(value)) {
                throw new ServiceException(
                        String.format("字段(%s)的内容不在0~100范围内", field.getFieldName()));
            }
        }
        return value;
    }
    @Override
@@ -190,6 +155,7 @@
            tbBasicData.setDeptAreaCode(areaCode);
            tbBasicData.setRemark(dataMap.get(remarkIndex));
            tbBasicData.setStatus(ReportingStatusEnum.MISSING_DATA);
            tbBasicData.setReportingTime(DateUtils.getQuarterDate(quarter));
            tbBasicDataService.saveOrUpdate(tbBasicData);
            tbBasicDataFieldService.remove(Wrappers.<TbBasicDataField>lambdaQuery()
                    .eq(TbBasicDataField::getBasicDataId, tbBasicData.getId()));
@@ -233,6 +199,11 @@
        return tbBasicDataList;
    }
    /**
     * 需要导入的数据
     *
     * @return List<Map < Integer, String>>
     */
    private List<Map<Integer, String>> getMapList() {
        for (int i = 0; i < cachedDataList.size(); i++) {
            if (cachedDataList.get(i).get(0).equals("栏号")) {
@@ -242,6 +213,11 @@
        return null;
    }
    /**
     * 表头
     *
     * @return Map<Integer, String>
     */
    private Map<Integer, String> getHeadMap() {
        for (int i = 0; i < cachedDataList.size(); i++) {
            if (cachedDataList.get(i).get(0).equals("栏号")) {
@@ -251,9 +227,58 @@
        return null;
    }
    /**
     * 校验字段内容
     *
     * @param integerStringEntry 动态字段表头Entry
     * @param dataMap            数据map
     * @param field              字段
     * @return 值
     */
    private static String validateFields(Map.Entry<Integer, String> integerStringEntry,
            Map<Integer, String> dataMap, TbField field) {
        String value = dataMap.get(integerStringEntry.getKey());
        if (FieldTypeEnum.NUMBER.equals(field.getFieldType())) {
            Integer numMin = field.getNumMin();
            Integer numMax = field.getNumMax();
            if (Objects.nonNull(numMin) && Objects.nonNull(numMax)) {
                if (numMin > Integer.parseInt(value) || numMax < Integer.parseInt(value)) {
                    throw new ServiceException(
                            String.format("字段(%s)的内容不在%d~%d范围内", field.getFieldName(),
                                    numMin, numMax));
                }
            }
        }
        if (FieldInputTypeEnum.MANUAL_INPUT.equals(field.getTextInputType())
                && FieldTypeEnum.TEXT.equals(field.getFieldType())) {
            Integer textMinNum = field.getTextMinNum();
            Integer textMaxNum = field.getTextMaxNum();
            if (Objects.nonNull(textMinNum) && Objects.nonNull(textMaxNum)) {
                if (textMinNum > value.length() || textMaxNum < value.length()) {
                    throw new ServiceException(
                            String.format("字段(%s)的内容长度超出%d~%d的范围",
                                    field.getFieldName(),
                                    textMinNum, textMaxNum));
                }
            }
        }
        if (FieldTypeEnum.PERCENTAGE.equals(field.getFieldType())) {
            if (0 > Double.parseDouble(value) || 100 < Double.parseDouble(value)) {
                throw new ServiceException(
                        String.format("字段(%s)的内容不在0~100范围内", field.getFieldName()));
            }
        }
        return value;
    }
    /**
     * 计算得分
     *
     * @param tbBasicDataList 基础数据集合
     */
    private void calculateScore(List<TbBasicData> tbBasicDataList) {
        for (TbBasicData tbBasicData : tbBasicDataList) {
            List<TbScore> scoreList = new ArrayList<>();
        for (TbBasicData tbBasicData : tbBasicDataList) {
            //计算得分
            List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery()
                    .eq(TbBasicDataConfig::getStatus, ShowStatusEnum.SHOW).list();
@@ -337,7 +362,8 @@
                    }
                }
            }
            tbScoreService.saveBatch(scoreList);
        }
        tbScoreService.saveBatch(scoreList);
        log.info(String.format("基础数据%s计算得分成功!", JSON.toJSONString(tbBasicDataList)));
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/query/DataScreenConfigQuery.java
New file
@@ -0,0 +1,24 @@
package com.ruoyi.system.query;
import com.ruoyi.common.enums.DataScreenConfigEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/4/10
 */
@Data
@ApiModel(value = "数据大屏配置查询数据传输对象")
public class DataScreenConfigQuery implements Serializable {
    private static final long serialVersionUID = -1097028325191820663L;
    @ApiModelProperty(value = "配置类型(2=数据指标设置 3=形式指标设置)")
    @NotNull(message = "配置类型不能为空")
    private DataScreenConfigEnum type;
}
ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataService.java
@@ -28,7 +28,7 @@
    R<BasicDataReportingVO> getBasicFields() throws Exception;
    void saveBasicData(BasicDataDTO dto);
    void saveBasicData(BasicDataDTO dto) throws Exception;
    void importBasicData(MultipartFile file) throws Exception;
ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenConfigService.java
@@ -2,6 +2,12 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.domain.TbDataScreenConfig;
import com.ruoyi.system.dto.update.DataIndicatorsUpdDTO;
import com.ruoyi.system.dto.update.FormalIndicatorsUpdDTO;
import com.ruoyi.system.dto.update.RiskLevelUpdDTO;
import com.ruoyi.system.query.DataScreenConfigQuery;
import com.ruoyi.system.vo.DataScreenConfigVO;
import java.util.List;
/**
 * <p>
@@ -13,4 +19,13 @@
 */
public interface TbDataScreenConfigService extends IService<TbDataScreenConfig> {
    DataScreenConfigVO getRiskLevel();
    DataScreenConfigVO editRiskLevel(RiskLevelUpdDTO dto);
    List<DataScreenConfigVO> getIndicatorsConfig(DataScreenConfigQuery query);
    DataScreenConfigVO editDataIndicatorsConfig(DataIndicatorsUpdDTO dto);
    DataScreenConfigVO editFormalIndicatorsConfig(FormalIndicatorsUpdDTO dto);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/TbQuestionService.java
@@ -4,7 +4,7 @@
import com.ruoyi.common.basic.PageDTO;
import com.ruoyi.system.domain.TbQuestion;
import com.ruoyi.system.dto.QuestionDTO;
import com.ruoyi.system.dto.QuestionUpdDto;
import com.ruoyi.system.dto.update.QuestionUpdDTO;
import com.ruoyi.system.query.QuestionQuery;
import com.ruoyi.system.vo.QuestionVO;
@@ -20,7 +20,7 @@
    void addQuestion(QuestionDTO dto) throws Exception;
    void editQuestion(QuestionUpdDto dto);
    void editQuestion(QuestionUpdDTO dto);
    PageDTO<QuestionVO> pageQuestion(QuestionQuery dto);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
@@ -1,17 +1,8 @@
package com.ruoyi.system.service.impl;
import java.util.*;
import java.util.stream.Collectors;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.system.dto.SysRoleDTO;
import com.ruoyi.system.mapper.*;
import com.ruoyi.system.query.SysRoleQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.ServiceException;
@@ -21,7 +12,24 @@
import com.ruoyi.system.domain.SysRoleDept;
import com.ruoyi.system.domain.SysRoleMenu;
import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.dto.SysRoleDTO;
import com.ruoyi.system.mapper.SysMenuMapper;
import com.ruoyi.system.mapper.SysRoleDeptMapper;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysRoleMenuMapper;
import com.ruoyi.system.mapper.SysUserRoleMapper;
import com.ruoyi.system.query.SysRoleQuery;
import com.ruoyi.system.service.ISysRoleService;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
 * 角色 业务层处理
@@ -29,8 +37,8 @@
 * @author ruoyi
 */
@Service
public class SysRoleServiceImpl implements ISysRoleService
{
public class SysRoleServiceImpl implements ISysRoleService {
    @Autowired
    private SysRoleMapper roleMapper;
@@ -52,8 +60,7 @@
     * @return 角色数据集合信息
     */
    @Override
    public List<SysRole> selectRoleList(SysRole role)
    {
    public List<SysRole> selectRoleList(SysRole role) {
        return roleMapper.selectRoleList(role);
    }
@@ -64,16 +71,12 @@
     * @return 角色列表
     */
    @Override
    public List<SysRole> selectRolesByUserId(Long userId)
    {
    public List<SysRole> selectRolesByUserId(Long userId) {
        List<SysRole> userRoles = roleMapper.selectRolePermissionByUserId(userId);
        List<SysRole> roles = selectRoleAll();
        for (SysRole role : roles)
        {
            for (SysRole userRole : userRoles)
            {
                if (role.getRoleId().longValue() == userRole.getRoleId().longValue())
                {
        for (SysRole role : roles) {
            for (SysRole userRole : userRoles) {
                if (role.getRoleId().longValue() == userRole.getRoleId().longValue()) {
                    role.setFlag(true);
                    break;
                }
@@ -89,14 +92,11 @@
     * @return 权限列表
     */
    @Override
    public Set<String> selectRolePermissionByUserId(Long userId)
    {
    public Set<String> selectRolePermissionByUserId(Long userId) {
        List<SysRole> perms = roleMapper.selectRolePermissionByUserId(userId);
        Set<String> permsSet = new HashSet<>();
        for (SysRole perm : perms)
        {
            if (StringUtils.isNotNull(perm))
            {
        for (SysRole perm : perms) {
            if (StringUtils.isNotNull(perm)) {
                permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(",")));
            }
        }
@@ -109,8 +109,7 @@
     * @return 角色列表
     */
    @Override
    public List<SysRole> selectRoleAll()
    {
    public List<SysRole> selectRoleAll() {
        return this.selectRoleList(new SysRole());
    }
@@ -121,8 +120,7 @@
     * @return 选中角色ID列表
     */
    @Override
    public List<Long> selectRoleListByUserId(Long userId)
    {
    public List<Long> selectRoleListByUserId(Long userId) {
        return roleMapper.selectRoleListByUserId(userId);
    }
@@ -133,8 +131,7 @@
     * @return 角色对象信息
     */
    @Override
    public SysRole selectRoleById(Long roleId)
    {
    public SysRole selectRoleById(Long roleId) {
        return roleMapper.selectRoleById(roleId);
    }
@@ -145,12 +142,10 @@
     * @return 结果
     */
    @Override
    public boolean checkRoleNameUnique(SysRole role)
    {
    public boolean checkRoleNameUnique(SysRole role) {
        Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId();
        SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName());
        if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue())
        {
        if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
@@ -163,12 +158,10 @@
     * @return 结果
     */
    @Override
    public boolean checkRoleKeyUnique(SysRole role)
    {
    public boolean checkRoleKeyUnique(SysRole role) {
        Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId();
        SysRole info = roleMapper.checkRoleKeyUnique(role.getRoleKey());
        if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue())
        {
        if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
@@ -180,10 +173,8 @@
     * @param role 角色信息
     */
    @Override
    public void checkRoleAllowed(SysRole role)
    {
        if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin())
        {
    public void checkRoleAllowed(SysRole role) {
        if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin()) {
            throw new ServiceException("不允许操作超级管理员角色");
        }
    }
@@ -194,15 +185,12 @@
     * @param roleId 角色id
     */
    @Override
    public void checkRoleDataScope(Long roleId)
    {
        if (!SysUser.isAdmin(SecurityUtils.getUserId()))
        {
    public void checkRoleDataScope(Long roleId) {
        if (!SysUser.isAdmin(SecurityUtils.getUserId())) {
            SysRole role = new SysRole();
            role.setRoleId(roleId);
            List<SysRole> roles = SpringUtils.getAopProxy(this).selectRoleList(role);
            if (StringUtils.isEmpty(roles))
            {
            if (StringUtils.isEmpty(roles)) {
                throw new ServiceException("没有权限访问角色数据!");
            }
        }
@@ -215,8 +203,7 @@
     * @return 结果
     */
    @Override
    public int countUserRoleByRoleId(Long roleId)
    {
    public int countUserRoleByRoleId(Long roleId) {
        return userRoleMapper.countUserRoleByRoleId(roleId);
    }
@@ -228,8 +215,7 @@
     */
    @Override
    @Transactional
    public int insertRole(SysRole role)
    {
    public int insertRole(SysRole role) {
        // 新增角色信息
        roleMapper.insertRole(role);
        return insertRoleMenu(role);
@@ -243,8 +229,7 @@
     */
    @Override
    @Transactional
    public int updateRole(SysRole role)
    {
    public int updateRole(SysRole role) {
        // 修改角色信息
        roleMapper.updateRole(role);
        // 删除角色与菜单关联
@@ -290,8 +275,7 @@
     * @return 结果
     */
    @Override
    public int updateRoleStatus(SysRole role)
    {
    public int updateRoleStatus(SysRole role) {
        return roleMapper.updateRole(role);
    }
@@ -303,8 +287,7 @@
     */
    @Override
    @Transactional
    public int authDataScope(SysRole role)
    {
    public int authDataScope(SysRole role) {
        // 修改角色信息
        roleMapper.updateRole(role);
        // 删除角色与部门关联
@@ -318,20 +301,17 @@
     * 
     * @param role 角色对象
     */
    public int insertRoleMenu(SysRole role)
    {
    public int insertRoleMenu(SysRole role) {
        int rows = 1;
        // 新增用户与角色管理
        List<SysRoleMenu> list = new ArrayList<SysRoleMenu>();
        for (Long menuId : role.getMenuIds())
        {
        for (Long menuId : role.getMenuIds()) {
            SysRoleMenu rm = new SysRoleMenu();
            rm.setRoleId(role.getRoleId());
            rm.setMenuId(menuId);
            list.add(rm);
        }
        if (list.size() > 0)
        {
        if (list.size() > 0) {
            rows = roleMenuMapper.batchRoleMenu(list);
        }
        return rows;
@@ -342,20 +322,17 @@
     *
     * @param role 角色对象
     */
    public int insertRoleDept(SysRole role)
    {
    public int insertRoleDept(SysRole role) {
        int rows = 1;
        // 新增角色与部门(数据权限)管理
        List<SysRoleDept> list = new ArrayList<SysRoleDept>();
        for (Long deptId : role.getDeptIds())
        {
        for (Long deptId : role.getDeptIds()) {
            SysRoleDept rd = new SysRoleDept();
            rd.setRoleId(role.getRoleId());
            rd.setDeptId(deptId);
            list.add(rd);
        }
        if (list.size() > 0)
        {
        if (list.size() > 0) {
            rows = roleDeptMapper.batchRoleDept(list);
        }
        return rows;
@@ -369,8 +346,7 @@
     */
    @Override
    @Transactional
    public int deleteRoleById(Long roleId)
    {
    public int deleteRoleById(Long roleId) {
        // 删除角色与菜单关联
        roleMenuMapper.deleteRoleMenuByRoleId(roleId);
        // 删除角色与部门关联
@@ -386,14 +362,12 @@
     */
    @Override
    @Transactional
    public int deleteRoleByIds(List<Long> roleIds)
    {
        for (Long roleId : roleIds)
        {
    public int deleteRoleByIds(List<Long> roleIds) {
        for (Long roleId : roleIds) {
            SysRole role = selectRoleById(roleId);
            if (countUserRoleByRoleId(roleId) > 0)
            {
                throw new ServiceException(String.format("%1$s已分配,不能删除", role.getRoleName()));
            if (countUserRoleByRoleId(roleId) > 0) {
                throw new ServiceException(
                        String.format("%1$s已分配,不能删除", role.getRoleName()));
            }
        }
        // 删除角色与菜单关联
@@ -408,8 +382,7 @@
     * @return 结果
     */
    @Override
    public int deleteAuthUser(SysUserRole userRole)
    {
    public int deleteAuthUser(SysUserRole userRole) {
        return userRoleMapper.deleteUserRoleInfo(userRole);
    }
@@ -421,8 +394,7 @@
     * @return 结果
     */
    @Override
    public int deleteAuthUsers(Long roleId, Long[] userIds)
    {
    public int deleteAuthUsers(Long roleId, Long[] userIds) {
        return userRoleMapper.deleteUserRoleInfos(roleId, userIds);
    }
@@ -434,12 +406,10 @@
     * @return 结果
     */
    @Override
    public int insertAuthUsers(Long roleId, Long[] userIds)
    {
    public int insertAuthUsers(Long roleId, Long[] userIds) {
        // 新增用户与角色管理
        List<SysUserRole> list = new ArrayList<SysUserRole>();
        for (Long userId : userIds)
        {
        for (Long userId : userIds) {
            SysUserRole ur = new SysUserRole();
            ur.setUserId(userId);
            ur.setRoleId(roleId);
@@ -517,18 +487,25 @@
        //获取当前的权限菜单
        List<SysMenu> all = menuMapper.getAllInIds(menusId);
        // 第三级
        List<SysMenu> s3 = all.stream().filter(e -> e.getMenuType().equals("F")).collect(Collectors.toList());
        List<SysMenu> s3 = all.stream().filter(e -> e.getMenuType().equals("F"))
                .collect(Collectors.toList());
        // 第二级
        List<SysMenu> s2 = all.stream().filter(e -> e.getMenuType().equals("C")).collect(Collectors.toList());
        List<SysMenu> s2 = all.stream().filter(e -> e.getMenuType().equals("C"))
                .collect(Collectors.toList());
        // 第一级
        List<SysMenu> s1 = all.stream().filter(e -> e.getMenuType().equals("M")).collect(Collectors.toList());
        List<SysMenu> s1 = all.stream().filter(e -> e.getMenuType().equals("M"))
                .collect(Collectors.toList());
        for (SysMenu menu : s2) {
            List<SysMenu> collect = s3.stream().filter(e -> e.getParentId().equals(menu.getMenuId())).collect(Collectors.toList());
            List<SysMenu> collect = s3.stream()
                    .filter(e -> e.getParentId().equals(menu.getMenuId()))
                    .collect(Collectors.toList());
            menu.setChildren(collect);
        }
        for (SysMenu menu : s1) {
            List<SysMenu> collect = s2.stream().filter(e -> e.getParentId().equals(menu.getMenuId())).collect(Collectors.toList());
            List<SysMenu> collect = s2.stream()
                    .filter(e -> e.getParentId().equals(menu.getMenuId()))
                    .collect(Collectors.toList());
            menu.setChildren(collect);
        }
        return s1;
@@ -557,7 +534,6 @@
        // 添加角色
        SysRole sysRole = new SysRole();
        sysRole.setRoleName(dto.getRoleName());
        sysRole.setPostType(dto.getPostType());
        roleMapper.insertRole(sysRole);
        // 添加角色权限中间表
@@ -586,7 +562,6 @@
        SysRole sysRole = new SysRole();
        sysRole.setRoleId(dto.getRoleId());
        sysRole.setRoleName(dto.getRoleName());
        sysRole.setPostType(dto.getPostType());
        roleMapper.updateRole(sysRole);
        // 删除角色与菜单关联
        roleMenuMapper.deleteRoleMenuByRoleId(dto.getRoleId());
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java
@@ -32,7 +32,7 @@
import com.ruoyi.system.domain.TbField;
import com.ruoyi.system.domain.TbScore;
import com.ruoyi.system.dto.BasicDataDTO;
import com.ruoyi.system.handler.CustomerHandler;
import com.ruoyi.system.handler.CustomCellWriteHandler;
import com.ruoyi.system.listener.BasicDataListener;
import com.ruoyi.system.listener.HistoryDataListener;
import com.ruoyi.system.mapper.TbBasicDataMapper;
@@ -196,16 +196,19 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveBasicData(BasicDataDTO dto) {
    public void saveBasicData(BasicDataDTO dto) throws Exception {
        LoginUser loginUser = SecurityUtils.getLoginUser();
        String areaCode = loginUser.getUser().getAreaCode();
        // 数据校验
        if (Objects.isNull(dto) || CollUtils.isEmpty(dto.getFields())) {
            return;
        }
        String nowQuarter = DateUtils.getNowQuarter();
        TbBasicData tbBasicData = BeanUtils.copyBean(dto, TbBasicData.class);
        tbBasicData.setDeptAreaCode(areaCode);
        tbBasicData.setStatus(ReportingStatusEnum.MISSING_DATA);
        tbBasicData.setQuarter(nowQuarter);
        tbBasicData.setReportingTime(DateUtils.getQuarterDate(nowQuarter));
        this.saveOrUpdate(tbBasicData);
        // 保存基础数据动态字段数据
        List<TbBasicDataField> tbBasicDataFields =
@@ -683,6 +686,16 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void importData(MultipartFile file, String quarter) throws IOException {
        //校验季度
        Date quarterDate = DateUtils.getQuarterDate(quarter);
        Map<String, Date> quarterMap = DateUtils.getQuarterDate(new Date());
        Date date = quarterMap.get("first");
        LocalDate quarterLocalDate = DateUtils.dateToLocalDate(quarterDate);
        LocalDate dateLocalDate = DateUtils.dateToLocalDate(date);
        if (quarterLocalDate.isAfter(dateLocalDate) || quarterLocalDate.equals(dateLocalDate)) {
            throw new ServiceException("请导入过去季度的数据。");
        }
        EasyExcel.read(
                        file.getInputStream(),
                        new HistoryDataListener(
@@ -730,7 +743,7 @@
                .list();
        //构建Excel写对象
        try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
                .registerWriteHandler(new CustomerHandler())
                .registerWriteHandler(new CustomCellWriteHandler())
                .registerWriteHandler(EasyExcelUtil.getStyleStrategy()).build()) {
            WriteSheet writeSheet;
            //遍历季度基础数据
@@ -787,21 +800,18 @@
            TbBasicDataField transferPaymentScale = basicDataFieldMap.get(-1L);
            valueList.add(
                    Objects.nonNull(transferPaymentScale)
                            ? FieldBuildUtil.formatNumberWithCommas(
                            transferPaymentScale.getFieldValue())
                            ? transferPaymentScale.getFieldValue()
                            : "");
            TbBasicDataField currentGdp = basicDataFieldMap.get(-2L);
            valueList.add(
                    Objects.nonNull(currentGdp)
                            ? FieldBuildUtil.formatNumberWithCommas(
                            currentGdp.getFieldValue())
                            ? currentGdp.getFieldValue()
                            : "");
            for (TbField tbField : fieldList) {
                TbBasicDataField tbBasicDataField = basicDataFieldMap.get(tbField.getId());
                valueList.add(
                        Objects.nonNull(tbBasicDataField)
                                ? FieldBuildUtil.formatNumberWithCommas(
                                tbBasicDataField.getFieldValue())
                                ? tbBasicDataField.getFieldValue()
                                : "");
            }
            excellist.add(valueList);
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenConfigServiceImpl.java
@@ -1,10 +1,19 @@
package com.ruoyi.system.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.enums.DataScreenConfigEnum;
import com.ruoyi.common.utils.BeanUtils;
import com.ruoyi.system.domain.TbDataScreenConfig;
import com.ruoyi.system.dto.update.DataIndicatorsUpdDTO;
import com.ruoyi.system.dto.update.FormalIndicatorsUpdDTO;
import com.ruoyi.system.dto.update.RiskLevelUpdDTO;
import com.ruoyi.system.mapper.TbDataScreenConfigMapper;
import com.ruoyi.system.query.DataScreenConfigQuery;
import com.ruoyi.system.service.TbDataScreenConfigService;
import com.ruoyi.system.vo.DataScreenConfigVO;
import java.util.List;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
 * <p>
@@ -15,6 +24,52 @@
 * @since 2024-03-13
 */
@Service
public class TbDataScreenConfigServiceImpl extends ServiceImpl<TbDataScreenConfigMapper, TbDataScreenConfig> implements TbDataScreenConfigService {
public class TbDataScreenConfigServiceImpl extends
        ServiceImpl<TbDataScreenConfigMapper, TbDataScreenConfig> implements
        TbDataScreenConfigService {
    @Override
    public DataScreenConfigVO getRiskLevel() {
        TbDataScreenConfig tbDataScreenConfig = this.lambdaQuery()
                .eq(TbDataScreenConfig::getType, DataScreenConfigEnum.RISK_LEVEL)
                .one();
        return BeanUtils.copyBean(tbDataScreenConfig, DataScreenConfigVO.class);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public DataScreenConfigVO editRiskLevel(RiskLevelUpdDTO dto) {
        TbDataScreenConfig tbDataScreenConfig = BeanUtils.copyBean(dto,
                TbDataScreenConfig.class);
        tbDataScreenConfig.setType(DataScreenConfigEnum.RISK_LEVEL);
        this.saveOrUpdate(tbDataScreenConfig);
        return BeanUtils.copyBean(tbDataScreenConfig, DataScreenConfigVO.class);
    }
    @Override
    public List<DataScreenConfigVO> getIndicatorsConfig(DataScreenConfigQuery query) {
        List<TbDataScreenConfig> list = this.lambdaQuery()
                .eq(TbDataScreenConfig::getType, query.getType()).list();
        return BeanUtils.copyList(list, DataScreenConfigVO.class);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public DataScreenConfigVO editDataIndicatorsConfig(DataIndicatorsUpdDTO dto) {
        TbDataScreenConfig tbDataScreenConfig = BeanUtils.copyBean(dto,
                TbDataScreenConfig.class);
        tbDataScreenConfig.setType(DataScreenConfigEnum.DATA_INDICATORS);
        this.saveOrUpdate(tbDataScreenConfig);
        return BeanUtils.copyBean(tbDataScreenConfig, DataScreenConfigVO.class);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public DataScreenConfigVO editFormalIndicatorsConfig(FormalIndicatorsUpdDTO dto) {
        TbDataScreenConfig tbDataScreenConfig = BeanUtils.copyBean(dto,
                TbDataScreenConfig.class);
        tbDataScreenConfig.setType(DataScreenConfigEnum.FORMAL_INDICATORS);
        this.saveOrUpdate(tbDataScreenConfig);
        return BeanUtils.copyBean(tbDataScreenConfig, DataScreenConfigVO.class);
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbQuestionServiceImpl.java
@@ -8,7 +8,7 @@
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.TbQuestion;
import com.ruoyi.system.dto.QuestionDTO;
import com.ruoyi.system.dto.QuestionUpdDto;
import com.ruoyi.system.dto.update.QuestionUpdDTO;
import com.ruoyi.system.mapper.TbQuestionMapper;
import com.ruoyi.system.query.QuestionQuery;
import com.ruoyi.system.service.TbQuestionService;
@@ -35,7 +35,7 @@
    }
    @Override
    public void editQuestion(QuestionUpdDto dto) {
    public void editQuestion(QuestionUpdDTO dto) {
        TbQuestion tbQuestion = BeanUtils.copyBean(dto, TbQuestion.class);
        this.updateById(tbQuestion);
    }
ruoyi-system/src/main/java/com/ruoyi/system/vo/DataScreenConfigVO.java
New file
@@ -0,0 +1,44 @@
package com.ruoyi.system.vo;
import com.ruoyi.common.enums.DataScreenConfigEnum;
import com.ruoyi.common.enums.SubTypeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/4/10
 */
@Data
@ApiModel(value = "大屏数据配置视图对象")
public class DataScreenConfigVO {
    @ApiModelProperty(value = "大屏数据配置id")
    private Long id;
    @ApiModelProperty(value = "配置类型(1=风险等级设置 2=数据指标设置 3=形式指标设置)")
    private DataScreenConfigEnum type;
    @ApiModelProperty(value = "得分计算规则")
    private String calculateFormula;
    @ApiModelProperty(value = "得分率计算规则")
    private String calculateRateFormula;
    @ApiModelProperty(value = "配置类型子类型(1=指标一 2=指标二 3=指标三 4=指标四)")
    private SubTypeEnum subType;
    @ApiModelProperty(value = "风险等级范围-高风险得分")
    private String highRisk;
    @ApiModelProperty(value = "风险等级范围-中风险得分")
    private String mediumRisk;
    @ApiModelProperty(value = "风险等级范围-低风险得分")
    private String lowRisk;
    @ApiModelProperty(value = "风险等级范围-无风险得分")
    private String noRisk;
}
ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
@@ -24,8 +24,19 @@
    </resultMap>
    
    <sql id="selectRoleVo">
        select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly,
            r.status, r.del_flag, r.create_time, r.remark,r.postType,r.removeDays
    select distinct r.role_id,
                    r.role_name,
                    r.role_key,
                    r.role_sort,
                    r.data_scope,
                    r.menu_check_strictly,
                    r.dept_check_strictly,
                    r.status,
                    r.del_flag,
                    r.create_time,
                    r.remark,
                    r.postType,
                    r.removeDays
        from sys_role r
            left join sys_user_role ur on ur.role_id = r.role_id
            left join sys_user u on u.user_id = ur.user_id
@@ -96,9 +107,11 @@
        </where>
    </select>
    <select id="selectList" resultType="com.ruoyi.common.core.domain.entity.SysRole">
        select role_id AS roleId, role_name AS roleName, role_key AS roleKey, role_sort AS roleSort, data_scope AS dataScope,
               menu_check_strictly AS menuCheckStrictly, dept_check_strictly AS deptCheckStrictly,status AS status, del_flag AS delFlag,
               create_time AS createTime,create_by AS createBy,postType AS postType,removeDays AS removeDays
    select role_id AS roleId, role_name AS roleName, role_key AS roleKey, role_sort AS roleSort,
    data_scope AS dataScope,
    menu_check_strictly AS menuCheckStrictly, dept_check_strictly AS deptCheckStrictly,status AS
    status, del_flag AS delFlag,
    create_time AS createTime,create_by AS createBy
        from sys_role
        <where>
            <if test="query.roleName != null and query.roleName != ''">
@@ -120,22 +133,42 @@
        </where>
    </select>
    <select id="selectListByDelFlag" resultType="com.ruoyi.common.core.domain.entity.SysRole">
        select role_id AS roleId, role_name AS roleName, role_key AS roleKey, role_sort AS roleSort, data_scope AS dataScope,
        menu_check_strictly AS menuCheckStrictly, dept_check_strictly AS deptCheckStrictly,status AS status, del_flag AS delFlag,
        create_time AS createTime,create_by AS createBy,postType AS postType,removeDays AS removeDays
        from sys_role where del_flag = 0
    select role_id             AS roleId,
           role_name           AS roleName,
           role_key            AS roleKey,
           role_sort           AS roleSort,
           data_scope          AS dataScope,
           menu_check_strictly AS menuCheckStrictly,
           dept_check_strictly AS deptCheckStrictly,
           status              AS status,
           del_flag            AS delFlag,
           create_time         AS createTime,
           create_by           AS createBy,
           postType            AS postType,
           removeDays          AS removeDays
    from sys_role
    where del_flag = 0
    </select>
    <select id="selectRoleByUserId" resultType="com.ruoyi.common.core.domain.entity.SysRole">
        select distinct r.role_id AS roleId, r.role_name AS roleName, r.role_key AS roleKey, r.role_sort AS roleSort, r.data_scope AS dataScope,
                        r.menu_check_strictly AS menuCheckStrictly, r.dept_check_strictly AS deptCheckStrictly,r.status AS status,
                        r.del_flag AS delFlag, r.create_time AS createTime,r.create_by AS createBy
    select distinct r.role_id             AS roleId,
                    r.role_name           AS roleName,
                    r.role_key            AS roleKey,
                    r.role_sort           AS roleSort,
                    r.data_scope          AS dataScope,
                    r.menu_check_strictly AS menuCheckStrictly,
                    r.dept_check_strictly AS deptCheckStrictly,
                    r.status              AS status,
                    r.del_flag            AS delFlag,
                    r.create_time         AS createTime,
                    r.create_by           AS createBy
        from sys_role r
        left join sys_user_role ur on ur.role_id = r.role_id
        where ur.user_id = #{userId}
    </select>
    <select id="selectByUserId" resultType="java.lang.String">
        select t2.role_name  from sys_user_role t1
    select t2.role_name
    from sys_user_role t1
        left join sys_role t2 on t1.role_id = t2.role_id
        where t1.user_id = #{userId}
    </select>
@@ -201,7 +234,9 @@
    </update>
    <delete id="deleteRoleById" parameterType="Long">
         update sys_role set del_flag = '2' where role_id = #{roleId}
    update sys_role
    set del_flag = '2'
    where role_id = #{roleId}
     </delete>
     
     <delete id="deleteRoleByIds" parameterType="Long">
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -57,8 +57,6 @@
  </insert>
  <resultMap id="SysUserResult" type="SysUser">
    <association javaType="SysDept" property="dept" resultMap="deptResult"/>
    <collection javaType="java.util.List" property="roles" resultMap="RoleResult"/>
    <id column="user_id" property="userId"/>
    <result column="dept_id" property="deptId"/>
    <result column="user_name" property="userName"/>
@@ -85,6 +83,8 @@
    <result column="county_flag" property="countyFlag"/>
    <result column="person_in_charge" property="personInCharge"/>
    <result column="focussed" property="focussed"/>
    <association javaType="SysDept" property="dept" resultMap="deptResult"/>
    <collection javaType="java.util.List" property="roles" resultMap="RoleResult"/>
  </resultMap>
  <resultMap id="deptResult" type="SysDept">
    <id column="dept_id" property="deptId"/>
ruoyi-system/src/main/resources/mapper/system/TbBasicDataMapper.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.TbBasicDataMapper">
    <!-- 通用查询映射结果 -->
@@ -16,11 +17,12 @@
        <result column="create_time" property="createTime"/>
        <result column="update_by" property="updateBy"/>
        <result column="update_time" property="updateTime"/>
    <result column="reporting_time" property="reportingTime"/>
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, quarter, dept_id, transfer_payment_scale, current_gdp, remark, status, del_flag, create_by, create_time, update_by, update_time
    id, quarter, dept_id, transfer_payment_scale, current_gdp, remark, status, del_flag, create_by, create_time, update_by, update_time,reporting_time
    </sql>
    <select id="fieldsStatics" resultType="com.ruoyi.system.vo.CurrentFieldsVO">
        SELECT
@@ -40,7 +42,8 @@
        FROM
        (SELECT * FROM sys_user WHERE user_type = 2) AS su
        LEFT JOIN
        (SELECT * FROM tb_basic_data WHERE `quarter` = #{dto.quarter}) AS tbd ON su.area_code = tbd.dept_area_code
    (SELECT * FROM tb_basic_data WHERE `quarter` = #{dto.quarter}) AS tbd ON su.area_code =
    tbd.dept_area_code
        <where>
            tbd.quarter = #{dto.quarter}
            <if test="dto.areaName != null and dto.areaName !=''">
ruoyi-system/src/main/resources/mapper/system/TbDataScreenConfigMapper.xml
@@ -1,13 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.TbDataScreenConfigMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.system.domain.TbDataScreenConfig">
        <id column="id" property="id" />
        <result column="type" property="type" />
        <result column="caculate_formula" property="caculateFormula" />
    <result column="calculate_formula" property="calculateFormula"/>
        <result column="sub_type" property="subType" />
    <result column="calculate_rate_formula" property="calculateRateFormula"/>
    <result column="high_risk" property="highRisk"/>
    <result column="medium_risk" property="mediumRisk"/>
    <result column="low_risk" property="lowRisk"/>
    <result column="no_risk" property="noRisk"/>
        <result column="del_flag" property="delFlag" />
        <result column="create_by" property="createBy" />
        <result column="create_time" property="createTime" />
@@ -17,7 +23,9 @@
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
    <if test="true">
        id, type, caculate_formula, sub_type, del_flag, create_by, create_time, update_by, update_time
    </if>
    </sql>
</mapper>