From ce7e6574a1f9942fc090d989b52aceaa11ba8f3e Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期一, 15 四月 2024 21:54:08 +0800 Subject: [PATCH] 1.得分计算部分调整; 2.大屏得分计算; --- ruoyi-admin-dept/src/main/resources/application-prod.yml | 235 ++++ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbOperLogServiceImpl.java | 41 ruoyi-common/src/main/java/com/ruoyi/common/annotation/FinancialLog.java | 30 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenConfigServiceImpl.java | 114 + ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java | 235 +++- ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/screen/ScreenController.java | 32 ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java | 46 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java | 11 ruoyi-system/src/main/java/com/ruoyi/system/query/SysUserQuery.java | 2 ruoyi-system/src/main/resources/mapper/system/TbBasicDataConfigMapper.xml | 6 ruoyi-system/src/main/java/com/ruoyi/system/dto/update/DataIndicatorsUpdDTO.java | 13 ruoyi-system/src/main/java/com/ruoyi/system/service/TbOperLogService.java | 20 ruoyi-admin-dept/src/main/resources/application-dev.yml | 235 ++++ ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FormalIndicatorsUpdDTO.java | 6 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java | 50 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java | 4 ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml | 16 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataCategoryVO.java | 5 ruoyi-system/src/main/java/com/ruoyi/system/dto/BasicDataDTO.java | 8 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbDataScreenScoreMapper.java | 16 ruoyi-common/src/main/java/com/ruoyi/common/config/MybatisPlusConfig.java | 13 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbOperLogController.java | 40 ruoyi-system/src/main/resources/mapper/system/TbDataScreenScoreMapper.xml | 22 ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/FinancialLogAspect.java | 99 + ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java | 58 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbOperLogMapper.java | 17 ruoyi-admin-dept/src/main/resources/application.yml | 172 --- ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java | 4 ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java | 12 ruoyi-system/src/main/java/com/ruoyi/system/dto/update/SysUserPwdUpdDTO.java | 26 ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/interceptor/MybatisConfiguration.java | 9 ruoyi-system/src/main/java/com/ruoyi/system/vo/OperLogVO.java | 49 ruoyi-system/src/main/java/com/ruoyi/system/dto/update/SysUserUpdDTO.java | 28 ruoyi-system/src/main/java/com/ruoyi/system/query/OperLogQuery.java | 35 ruoyi-admin/src/main/java/com/ruoyi/web/controller/interceptor/MybatisConfiguration.java | 4 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java | 155 +- ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml | 35 ruoyi-system/src/main/java/com/ruoyi/system/domain/TbOperLog.java | 71 + ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbDataScreenConfigController.java | 2 ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java | 70 ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java | 4 ruoyi-system/src/main/java/com/ruoyi/system/dto/update/RiskLevelUpdDTO.java | 15 ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenScoreService.java | 16 ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenConfigService.java | 5 ruoyi-system/src/main/resources/mapper/system/TbOperLogMapper.xml | 25 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java | 69 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java | 42 code-generator/src/test/java/CodeGeneratorTests.java | 15 ruoyi-system/src/main/java/com/ruoyi/system/vo/SysUserVO.java | 22 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldCategoryServiceImpl.java | 139 + ruoyi-system/src/main/java/com/ruoyi/system/domain/TbDataScreenScore.java | 60 + ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FieldCategoryUpdateDTO.java | 7 ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java | 71 ruoyi-common/src/main/java/com/ruoyi/common/config/DataUpdateHandlerConfig.java | 9 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java | 271 ++--- ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldCategoryVO.java | 8 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java | 9 ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml | 237 ++-- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java | 18 ruoyi-system/src/main/java/com/ruoyi/system/vo/DataScreenConfigVO.java | 6 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenScoreServiceImpl.java | 22 63 files changed, 2,186 insertions(+), 935 deletions(-) diff --git a/code-generator/src/test/java/CodeGeneratorTests.java b/code-generator/src/test/java/CodeGeneratorTests.java index b7d0e92..114f066 100644 --- a/code-generator/src/test/java/CodeGeneratorTests.java +++ b/code-generator/src/test/java/CodeGeneratorTests.java @@ -2,15 +2,19 @@ import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.InjectionConfig; -import com.baomidou.mybatisplus.generator.config.*; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.FileOutConfig; +import com.baomidou.mybatisplus.generator.config.GlobalConfig; +import com.baomidou.mybatisplus.generator.config.PackageConfig; +import com.baomidou.mybatisplus.generator.config.StrategyConfig; +import com.baomidou.mybatisplus.generator.config.TemplateConfig; import com.baomidou.mybatisplus.generator.config.po.LikeTable; import com.baomidou.mybatisplus.generator.config.po.TableFill; import com.baomidou.mybatisplus.generator.config.po.TableInfo; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; -import org.junit.Test; - import java.util.ArrayList; import java.util.List; +import org.junit.Test; /** * 通过指定 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE) 可达到加速的效果。 @@ -71,7 +75,6 @@ pc.setMapper("mapper"); pc.setService("service"); - // 自定义mapping文件生成路径配置 InjectionConfig cfg = new InjectionConfig() { @Override @@ -107,14 +110,12 @@ //templateConfig.setController(null); //mpg.setTemplate(templateConfig); - // 策略配置 StrategyConfig strategy = new StrategyConfig(); //设置字段和表名的是否把下划线完成驼峰命名规则 strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setEntitySerialVersionUID(true); strategy.setEntityColumnConstant(false); - //设置生成的实体类继承的父类 // strategy.setSuperEntityClass(BaseModel.class); @@ -144,7 +145,7 @@ // strategy.setTablePrefix(pc.getModuleName() + ""); // strategy.setLikeTable(new LikeTable("room")); //strategy.setLikeTable(new LikeTable("member")); - strategy.setLikeTable(new LikeTable("tb_basic_data_config"));// 生成表名 + strategy.setLikeTable(new LikeTable("tb_data_screen_score"));// 生成表名 // strategy.setLikeTable(new LikeTable("t_hotel"));// 生成表名 // strategy.setLikeTable(new LikeTable("t_scan_message"));// 生成表名 // strategy.setNotLikeTable(new LikeTable("tb_dept"));// 不生成表名 diff --git a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java b/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java index 67e1049..f0ba5b1 100644 --- a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java +++ b/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java @@ -1,7 +1,9 @@ package com.ruoyi.web.controller.api; +import com.ruoyi.common.annotation.FinancialLog; import com.ruoyi.common.basic.PageDTO; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.system.dto.BasicDataDTO; import com.ruoyi.system.query.ScoreQuery; @@ -79,6 +81,7 @@ /** * 导入模板下载 */ + @FinancialLog(title = "下载导入模板", businessType = BusinessType.OTHER) @GetMapping("/download") @ApiOperation("模板下载") public void downloadImportTemplate() { @@ -98,6 +101,7 @@ */ @PostMapping("/import") @ApiOperation("基础数据导入") + @FinancialLog(title = "导入数据", businessType = BusinessType.IMPORT) public R<Void> importBasicData(@RequestPart("file") MultipartFile file) { try { tbBasicDataService.importBasicData(file); diff --git a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/interceptor/MybatisConfiguration.java b/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/interceptor/MybatisConfiguration.java index 39295fc..4cbaefa 100644 --- a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/interceptor/MybatisConfiguration.java +++ b/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/interceptor/MybatisConfiguration.java @@ -1,16 +1,17 @@ package com.ruoyi.web.controller.interceptor; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MybatisConfiguration { - + /** * 注册拦截器 */ - /* @Bean + @Bean public MybatisInterceptor getMybatisInterceptor() { return new MybatisInterceptor(); - }*/ - + } + } \ No newline at end of file diff --git a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java b/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java index fcbb05d..60defa4 100644 --- a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java +++ b/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java @@ -1,20 +1,29 @@ package com.ruoyi.web.controller.interceptor; import com.ruoyi.framework.web.service.TokenService; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.Properties; import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.executor.Executor; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.mapping.SqlCommandType; import org.apache.ibatis.plugin.Interceptor; +import org.apache.ibatis.plugin.Intercepts; import org.apache.ibatis.plugin.Invocation; import org.apache.ibatis.plugin.Plugin; +import org.apache.ibatis.plugin.Signature; import org.springframework.beans.factory.annotation.Autowired; - -import java.lang.reflect.Field; -import java.util.*; +import org.springframework.stereotype.Component; @Slf4j -/*@Component -@Intercepts({ @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }) })*/ +@Component +@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, + Object.class})}) public class MybatisInterceptor implements Interceptor { @Autowired @@ -23,20 +32,21 @@ @Override public Object intercept(Invocation invocation) throws Throwable { MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0]; - log.debug("{}:"+mappedStatement); + log.debug("{}:" + mappedStatement); log.debug("------sqlId------" + mappedStatement.getId()); - if("com.ruoyi.system.mapper.SysLogininforMapper.insertLogininfor".equals(mappedStatement.getId())){ + if ("com.ruoyi.system.mapper.SysLogininforMapper.insertLogininfor".equals( + mappedStatement.getId())) { return invocation.proceed(); } // sql类型:insert、update、select、delete SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType(); Object parameter = invocation.getArgs()[1]; log.debug("------sqlCommandType------" + sqlCommandType); - + if (parameter == null) { return invocation.proceed(); } - + // 当sql为新增或更新类型时,自动填充操作人相关信息 if (SqlCommandType.INSERT == sqlCommandType) { @@ -44,21 +54,21 @@ for (Field field : fields) { try { // 注入创建人 - if ("createBy".equals(field.getName())) { + /* if ("createBy".equals(field.getName())) { // 获取当前登录用户信息 - if(Objects.nonNull(tokenService.getLoginUser())){ + if (Objects.nonNull(tokenService.getLoginUser())) { String userName = tokenService.getLoginUser().getUser().getUserName(); field.setAccessible(true); field.set(parameter, userName); 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); } @@ -70,7 +80,7 @@ try { if ("updateBy".equals(field.getName())) { // 获取当前登录用户信息 - if(Objects.nonNull(tokenService.getLoginUser())){ + if (Objects.nonNull(tokenService.getLoginUser())) { String userName = tokenService.getLoginUser().getUser().getUserName(); field.setAccessible(true); field.set(parameter, userName); @@ -89,17 +99,17 @@ } return invocation.proceed(); } - + @Override public Object plugin(Object target) { return Plugin.wrap(target, this); } - + @Override public void setProperties(Properties properties) { // TODO Auto-generated method stub } - + /** * 获取类的所有属性,包括父类 * @@ -117,5 +127,5 @@ fieldList.toArray(fields); return fields; } - + } \ No newline at end of file diff --git a/ruoyi-admin-dept/src/main/resources/application-dev.yml b/ruoyi-admin-dept/src/main/resources/application-dev.yml new file mode 100644 index 0000000..ce519a0 --- /dev/null +++ b/ruoyi-admin-dept/src/main/resources/application-dev.yml @@ -0,0 +1,235 @@ +# 项目相关配置 +ruoyi: + # 名称 + name: RuoYi + # 版本 + version: 3.8.6 + # 版权年份 + copyrightYear: 2023 + # 实例演示开关 + demoEnabled: true + # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) + profile: D:/ruoyi/uploadPath + # 获取ip地址开关 + addressEnabled: false + # 验证码类型 math 数字计算 char 字符验证 + captchaType: math + +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为8080 + port: 8084 + servlet: + # 应用的访问路径 + context-path: / + tomcat: + # tomcat的URI编码 + uri-encoding: UTF-8 + # 连接数满后的排队数,默认为100 + accept-count: 1000 + threads: + # tomcat最大线程数,默认为200 + max: 800 + # Tomcat启动初始化的线程数,默认值10 + min-spare: 100 + +# 日志配置 +logging: + level: + com.ruoyi: debug + org.springframework: warn + +# 用户配置 +user: + password: + # 密码最大错误次数 + maxRetryCount: 5 + # 密码锁定时间(默认10分钟) + lockTime: 10 + +# Spring配置 +spring: + main: + allow-bean-definition-overriding: true + # 资源信息 + messages: + # 国际化资源文件路径 + basename: i18n/messages + config: + activate: + on-profile: dev + # 文件上传 + servlet: + multipart: + # 单个文件大小 + max-file-size: 500MB + # 设置总上传的文件大小 + max-request-size: 2000MB + # 服务模块 + devtools: + restart: + # 热部署开关 + enabled: true + # redis 配置 + redis: + # 地址 + host: 127.0.0.1 + # 端口,默认为6379 + port: 6379 + # 数据库索引 + database: 0 + # 密码 + password: 123456 + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 0 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 8 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms + jackson: + default-property-inclusion: non_null + deserialization: + read-unknown-enum-values-as-null: true + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 主库数据源 + master: + url: jdbc:mysql://localhost:3306/financialdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: root + password: 123456 + # url: jdbc:mysql://8.137.10.192:3306/sys_config?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8 + # username: root + # password: shms#123~ + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置连接超时时间 + connectTimeout: 30000 + # 配置网络超时时间 + socketTimeout: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: ruoyi + login-password: 123456 + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true +# token配置 +token: + # 令牌自定义标识 + header: Authorization + # 令牌密钥 + secret: abcdefghijklmnopqrstuvwxyz + # 令牌有效期(默认30分钟) + expireTime: 120 + +# MyBatis配置 +#mybatis: +# # 搜索指定包别名 +# typeAliasesPackage: com.ruoyi.**.domain +# # 配置mapper的扫描,找到所有的mapper.xml映射文件 +# mapperLocations: classpath*:mapper/**/*Mapper.xml +# # 加载全局的配置文件 +# configLocation: classpath:mybatis/mybatis-config.xml + +# PageHelper分页插件 +#pagehelper: +# helperDialect: mysql +# supportMethodsArguments: true +# params: count=countSql + +mybatis-plus: + # 此处在多数据源中生效 + # config-location: classpath:/mybatis-config.xml + global-config: + banner: false + db-config: + logic-not-delete-value: 0 + logic-delete-value: 1 + configuration: + map-underscore-to-camel-case: true + default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + cache-enabled: true + local-cache-scope: statement + type-aliases-package: com.ruoyi.**.domain,com.ruoyi.**.vo + # 指定Mapper文件位置 + mapper-locations: classpath*:mapper/**/*.xml +# Swagger配置 +swagger: + # 是否开启swagger + enabled: true + # 请求前缀 + pathMapping: / + +# 防止XSS攻击 +xss: + # 过滤开关 + enabled: true + # 排除链接(多个用逗号分隔) + excludes: /system/notice + # 匹配链接 + urlPatterns: /system/*,/monitor/*,/tool/* +file: + upload: + location: /file/ + qrLocation: /file/qrCode/ + accessPath: /file/ + allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF +wx: + config: + appId: wxc3985a05da7d86dc + secret: 5cca42633c25439613b328c08ef20cc9 +#OSS及短信配置 +code: + config: + templateCodeTest: "SMS_154950909" + signNameTest: "阿里云短信测试" + accessKeyId: LTAI5tAdba8HtT1C6UqtSxBt + accessKeySecret: 0SRb6XGkciQDPWn2rYqbJtq2qRMDY8 + signName: "四川金达通信工程" + templateCode: "SMS_293985284" \ No newline at end of file diff --git a/ruoyi-admin-dept/src/main/resources/application-prod.yml b/ruoyi-admin-dept/src/main/resources/application-prod.yml new file mode 100644 index 0000000..1b7a4cf --- /dev/null +++ b/ruoyi-admin-dept/src/main/resources/application-prod.yml @@ -0,0 +1,235 @@ +# 项目相关配置 +ruoyi: + # 名称 + name: RuoYi + # 版本 + version: 3.8.6 + # 版权年份 + copyrightYear: 2023 + # 实例演示开关 + demoEnabled: true + # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) + profile: D:/ruoyi/uploadPath + # 获取ip地址开关 + addressEnabled: false + # 验证码类型 math 数字计算 char 字符验证 + captchaType: math + +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为8080 + port: 8082 + servlet: + # 应用的访问路径 + context-path: / + tomcat: + # tomcat的URI编码 + uri-encoding: UTF-8 + # 连接数满后的排队数,默认为100 + accept-count: 1000 + threads: + # tomcat最大线程数,默认为200 + max: 800 + # Tomcat启动初始化的线程数,默认值10 + min-spare: 100 + +# 日志配置 +logging: + level: + com.ruoyi: debug + org.springframework: warn + +# 用户配置 +user: + password: + # 密码最大错误次数 + maxRetryCount: 5 + # 密码锁定时间(默认10分钟) + lockTime: 10 + +# Spring配置 +spring: + main: + allow-bean-definition-overriding: true + # 资源信息 + messages: + # 国际化资源文件路径 + basename: i18n/messages + config: + activate: + on-profile: prod + # 文件上传 + servlet: + multipart: + # 单个文件大小 + max-file-size: 500MB + # 设置总上传的文件大小 + max-request-size: 2000MB + # 服务模块 + devtools: + restart: + # 热部署开关 + enabled: true + # redis 配置 + redis: + # 地址 + host: 127.0.0.1 + # 端口,默认为6379 + port: 6379 + # 数据库索引 + database: 0 + # 密码 + password: 123456 + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 0 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 8 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms + jackson: + default-property-inclusion: non_null + deserialization: + read-unknown-enum-values-as-null: true + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 主库数据源 + master: + url: jdbc:mysql://localhost:3306/financialdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: root + password: 123456 + # url: jdbc:mysql://8.137.10.192:3306/sys_config?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8 + # username: root + # password: shms#123~ + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置连接超时时间 + connectTimeout: 30000 + # 配置网络超时时间 + socketTimeout: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: ruoyi + login-password: 123456 + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true +# token配置 +token: + # 令牌自定义标识 + header: Authorization + # 令牌密钥 + secret: abcdefghijklmnopqrstuvwxyz + # 令牌有效期(默认30分钟) + expireTime: 120 + +# MyBatis配置 +#mybatis: +# # 搜索指定包别名 +# typeAliasesPackage: com.ruoyi.**.domain +# # 配置mapper的扫描,找到所有的mapper.xml映射文件 +# mapperLocations: classpath*:mapper/**/*Mapper.xml +# # 加载全局的配置文件 +# configLocation: classpath:mybatis/mybatis-config.xml + +# PageHelper分页插件 +#pagehelper: +# helperDialect: mysql +# supportMethodsArguments: true +# params: count=countSql + +mybatis-plus: + # 此处在多数据源中生效 + # config-location: classpath:/mybatis-config.xml + global-config: + banner: false + db-config: + logic-not-delete-value: 0 + logic-delete-value: 1 + configuration: + map-underscore-to-camel-case: true + default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + cache-enabled: true + local-cache-scope: statement + type-aliases-package: com.ruoyi.**.domain,com.ruoyi.**.vo + # 指定Mapper文件位置 + mapper-locations: classpath*:mapper/**/*.xml +# Swagger配置 +swagger: + # 是否开启swagger + enabled: true + # 请求前缀 + pathMapping: / + +# 防止XSS攻击 +xss: + # 过滤开关 + enabled: true + # 排除链接(多个用逗号分隔) + excludes: /system/notice + # 匹配链接 + urlPatterns: /system/*,/monitor/*,/tool/* +file: + upload: + location: /file/ + qrLocation: /file/qrCode/ + accessPath: /file/ + allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF +wx: + config: + appId: wxc3985a05da7d86dc + secret: 5cca42633c25439613b328c08ef20cc9 +#OSS及短信配置 +code: + config: + templateCodeTest: "SMS_154950909" + signNameTest: "阿里云短信测试" + accessKeyId: LTAI5tAdba8HtT1C6UqtSxBt + accessKeySecret: 0SRb6XGkciQDPWn2rYqbJtq2qRMDY8 + signName: "四川金达通信工程" + templateCode: "SMS_293985284" \ No newline at end of file diff --git a/ruoyi-admin-dept/src/main/resources/application.yml b/ruoyi-admin-dept/src/main/resources/application.yml index 6c2ec50..9f96606 100644 --- a/ruoyi-admin-dept/src/main/resources/application.yml +++ b/ruoyi-admin-dept/src/main/resources/application.yml @@ -1,173 +1,3 @@ -# 项目相关配置 -ruoyi: - # 名称 - name: RuoYi - # 版本 - version: 3.8.6 - # 版权年份 - copyrightYear: 2023 - # 实例演示开关 - demoEnabled: true - # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) - profile: D:/ruoyi/uploadPath - # 获取ip地址开关 - addressEnabled: false - # 验证码类型 math 数字计算 char 字符验证 - captchaType: math - -# 开发环境配置 -server: - # 服务器的HTTP端口,默认为8080 - port: 8082 - servlet: - # 应用的访问路径 - context-path: / - tomcat: - # tomcat的URI编码 - uri-encoding: UTF-8 - # 连接数满后的排队数,默认为100 - accept-count: 1000 - threads: - # tomcat最大线程数,默认为200 - max: 800 - # Tomcat启动初始化的线程数,默认值10 - min-spare: 100 - -# 日志配置 -logging: - level: - com.ruoyi: debug - org.springframework: warn - -# 用户配置 -user: - password: - # 密码最大错误次数 - maxRetryCount: 5 - # 密码锁定时间(默认10分钟) - lockTime: 10 - -# Spring配置 spring: - main: - allow-bean-definition-overriding: true - # 资源信息 - messages: - # 国际化资源文件路径 - basename: i18n/messages profiles: - active: druid - # 文件上传 - servlet: - multipart: - # 单个文件大小 - max-file-size: 500MB - # 设置总上传的文件大小 - max-request-size: 2000MB - # 服务模块 - devtools: - restart: - # 热部署开关 - enabled: true - # redis 配置 - redis: - # 地址 - host: 127.0.0.1 - # 端口,默认为6379 - port: 6379 - # 数据库索引 - database: 0 - # 密码 - password: 123456 - # 连接超时时间 - timeout: 10s - lettuce: - pool: - # 连接池中的最小空闲连接 - min-idle: 0 - # 连接池中的最大空闲连接 - max-idle: 8 - # 连接池的最大数据库连接数 - max-active: 8 - # #连接池最大阻塞等待时间(使用负值表示没有限制) - max-wait: -1ms - jackson: - default-property-inclusion: non_null - deserialization: - read-unknown-enum-values-as-null: true - -# token配置 -token: - # 令牌自定义标识 - header: Authorization - # 令牌密钥 - secret: abcdefghijklmnopqrstuvwxyz - # 令牌有效期(默认30分钟) - expireTime: 120 - -# MyBatis配置 -#mybatis: -# # 搜索指定包别名 -# typeAliasesPackage: com.ruoyi.**.domain -# # 配置mapper的扫描,找到所有的mapper.xml映射文件 -# mapperLocations: classpath*:mapper/**/*Mapper.xml -# # 加载全局的配置文件 -# configLocation: classpath:mybatis/mybatis-config.xml - -# PageHelper分页插件 -#pagehelper: -# helperDialect: mysql -# supportMethodsArguments: true -# params: count=countSql - -mybatis-plus: - # 此处在多数据源中生效 - # config-location: classpath:/mybatis-config.xml - global-config: - banner: false - db-config: - logic-not-delete-value: 0 - logic-delete-value: 1 - configuration: - map-underscore-to-camel-case: true - default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl - cache-enabled: true - local-cache-scope: statement - type-aliases-package: com.ruoyi.**.domain,com.ruoyi.**.vo - # 指定Mapper文件位置 - mapper-locations: classpath*:mapper/**/*.xml -# Swagger配置 -swagger: - # 是否开启swagger - enabled: true - # 请求前缀 - pathMapping: / - -# 防止XSS攻击 -xss: - # 过滤开关 - enabled: true - # 排除链接(多个用逗号分隔) - excludes: /system/notice - # 匹配链接 - urlPatterns: /system/*,/monitor/*,/tool/* -file: - upload: - location: /file/ - qrLocation: /file/qrCode/ - accessPath: /file/ - allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF -wx: - config: - appId: wxc3985a05da7d86dc - secret: 5cca42633c25439613b328c08ef20cc9 -#OSS及短信配置 -code: - config: - templateCodeTest: "SMS_154950909" - signNameTest: "阿里云短信测试" - accessKeyId: LTAI5tAdba8HtT1C6UqtSxBt - accessKeySecret: 0SRb6XGkciQDPWn2rYqbJtq2qRMDY8 - signName: "四川金达通信工程" - templateCode: "SMS_293985284" \ No newline at end of file + active: prod diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java index 9db3a38..09b5b0b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java @@ -1,9 +1,11 @@ package com.ruoyi.web.controller.api; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.annotation.FinancialLog; import com.ruoyi.common.annotation.HistoryGroup; import com.ruoyi.common.basic.PageDTO; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.ReportingStatusEnum; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.system.domain.TbBasicData; @@ -190,6 +192,7 @@ @PostMapping("/import") @ApiOperation("导入历史数据") + @FinancialLog(title = "导入数据", businessType = BusinessType.IMPORT) @ApiImplicitParams({ @ApiImplicitParam(name = "file", value = "文件", required = true, dataType = "file", paramType = "form"), @ApiImplicitParam(name = "quarter", value = "季度 e.g. 2024年一季度", required = true, dataType = "string", paramType = "query", dataTypeClass = String.class) @@ -210,6 +213,7 @@ @PostMapping("/export") @ApiOperation("导出") + @FinancialLog(title = "导出数据", businessType = BusinessType.EXPORT) @ApiImplicitParam(name = "quarterList", value = "quarterList", allowMultiple = true, dataTypeClass = List.class, paramType = "query") public void exportData(@RequestParam("quarterList") List<String> quarterList) { try { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbDataScreenConfigController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbDataScreenConfigController.java index f9a2752..e20bc43 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbDataScreenConfigController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbDataScreenConfigController.java @@ -69,7 +69,7 @@ public R<List<DataScreenConfigVO>> getIndicatorsConfig( @Validated @RequestBody DataScreenConfigQuery query) { try { - return R.ok(tbDataScreenConfigService.getIndicatorsConfig(query)); + return R.ok(tbDataScreenConfigService.getIndicatorsConfig(query.getType())); } catch (Exception e) { if (e instanceof ServiceException) { return R.fail(e.getMessage()); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbOperLogController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbOperLogController.java new file mode 100644 index 0000000..ee19e06 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbOperLogController.java @@ -0,0 +1,40 @@ +package com.ruoyi.web.controller.api; + + +import com.ruoyi.common.basic.PageDTO; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.query.OperLogQuery; +import com.ruoyi.system.service.TbOperLogService; +import com.ruoyi.system.vo.OperLogVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +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; + +/** + * <p> + * 前端控制器 + * </p> + * + * @author mitao + * @since 2024-04-15 + */ +@Api(tags = {"操作日志"}) +@RestController +@RequestMapping("/oper-log") +@RequiredArgsConstructor +public class TbOperLogController { + + private final TbOperLogService tbOperLogService; + + @ApiOperation("查询日志列表") + @PostMapping("/page") + public R<PageDTO<OperLogVO>> queryPage(@Validated @RequestBody OperLogQuery query) { + return R.ok(tbOperLogService.queryPage(query)); + } +} + diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/screen/ScreenController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/screen/ScreenController.java new file mode 100644 index 0000000..5d32491 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/screen/ScreenController.java @@ -0,0 +1,32 @@ +package com.ruoyi.web.controller.api.screen; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.service.ISysUserService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author mitao + * @date 2024/4/15 + */ +@Slf4j +@RestController +@RequestMapping("/screen") +@RequiredArgsConstructor +@Api(tags = "大屏接口") +public class ScreenController { + + private final ISysUserService sysUserService; + + @ApiOperation("全省统计数") + @GetMapping("/province-statics") + public R<Integer> provinceStatics() { + return R.ok(); + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/interceptor/MybatisConfiguration.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/interceptor/MybatisConfiguration.java index 5390dc1..4cbaefa 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/interceptor/MybatisConfiguration.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/interceptor/MybatisConfiguration.java @@ -5,7 +5,7 @@ @Configuration public class MybatisConfiguration { - + /** * 注册拦截器 */ @@ -13,5 +13,5 @@ public MybatisInterceptor getMybatisInterceptor() { return new MybatisInterceptor(); } - + } \ No newline at end of file diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java index 74cfc49..1205627 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java @@ -31,6 +31,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; @@ -126,6 +127,9 @@ @GetMapping("/roleInfo") public R<RoleInfoVO> roleInfo(@RequestParam Long roleId) { SysRole role = roleService.selectRoleById(roleId); + if (Objects.isNull(role)) { + return R.ok(new RoleInfoVO()); + } RoleInfoVO roleInfoVo = new RoleInfoVO(); roleInfoVo.setRoleId(role.getRoleId()); roleInfoVo.setRoleName(role.getRoleName()); @@ -151,6 +155,11 @@ return AjaxResult.success(roleService.roleInfoFromUserId(userId)); } + @ApiOperation("角色获取权限菜单") + @GetMapping("/getMenuByRoleId") + public AjaxResult getMenuByRoleId(@RequestParam Long roleId) { + return AjaxResult.success(roleService.getMenuByRoleId(roleId)); + } /** * 新增角色 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java index 5ba0987..150a61f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java @@ -1,7 +1,7 @@ package com.ruoyi.web.controller.system; import com.ruoyi.common.annotation.Log; -import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.basic.PageDTO; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysDept; @@ -11,9 +11,10 @@ import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.web.service.TokenService; -import com.ruoyi.system.domain.SysUserRole; import com.ruoyi.system.dto.SysUserDTO; import com.ruoyi.system.dto.SysUserUpdateStatusDTO; +import com.ruoyi.system.dto.update.SysUserPwdUpdDTO; +import com.ruoyi.system.dto.update.SysUserUpdDTO; import com.ruoyi.system.mapper.SysUserRoleMapper; import com.ruoyi.system.query.SysUserQuery; import com.ruoyi.system.service.ISysDeptService; @@ -71,8 +72,8 @@ @ApiOperation(value = "获取用户列表") @PostMapping("/list") public AjaxResult list(@RequestBody SysUserQuery query) { - PageInfo<SysUserVO> list = userService.pageList(query); - return AjaxResult.success(list); + PageDTO<SysUserVO> page = userService.pageList(query); + return AjaxResult.success(page); } @ApiOperation(value = "获取用户列表-不分页") @@ -210,7 +211,7 @@ /** * 获取用户数量统计 */ - @ApiOperation(value = "获取用户数量统计") +// @ApiOperation(value = "获取用户数量统计") @PostMapping("/getUserCount") public AjaxResult getUserCount() { Map<String, Integer> map = new HashMap<>(); @@ -288,11 +289,12 @@ } user.setCreateBy(getUsername()); user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + user.setNickName(user.getUserName()); userService.insertUser(user); - SysUserRole sysUserRole = new SysUserRole(); + /* SysUserRole sysUserRole = new SysUserRole(); sysUserRole.setUserId(user.getUserId()); sysUserRole.setRoleId(dto.getRoleId()); - userRoleMapper.insertUserRole(sysUserRole); + userRoleMapper.insertUserRole(sysUserRole);*/ return AjaxResult.success(); } @@ -303,20 +305,34 @@ @ApiOperation(value = "修改用户管理") @Log(title = "用户信息-修改用户", businessType = BusinessType.UPDATE) @PostMapping("/edit") - public AjaxResult edit(@Validated @RequestBody SysUser user) { - user.setUserName(user.getPhoneNumber()); + public AjaxResult edit(@Validated @RequestBody SysUserUpdDTO dto) { + SysUser user = this.userService.selectUserById(dto.getUserId()); + user.setUserName(dto.getUserName()); + user.setNickName(dto.getUserName()); + user.setPhoneNumber(dto.getPhoneNumber()); + user.setRoleId(dto.getRoleId()); // userService.checkUserAllowed(user); // userService.checkUserDataScope(user.getUserId()); - if (!userService.checkUserNameUnique(user)) { + /*if (!userService.checkUserNameUnique(user)) { return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在"); - } else if (StringUtils.isNotEmpty(user.getPhoneNumber()) && !userService.checkPhoneUnique( + } else*/ + if (StringUtils.isNotEmpty(user.getPhoneNumber()) && !userService.checkPhoneUnique( user)) { return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); } user.setUpdateBy(getUsername()); - user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); return AjaxResult.success(userService.updateUser(user)); + } + + @ApiOperation(value = "修改密码") + @Log(title = "用户信息-修改密码", businessType = BusinessType.UPDATE) + @PostMapping("/edit-password") + public AjaxResult editPassword(@Validated @RequestBody SysUserPwdUpdDTO dto) { + SysUser user = this.userService.getById(dto.getUserId()); + user.setUpdateBy(getUsername()); + user.setPassword(SecurityUtils.encryptPassword(dto.getPassword())); + return AjaxResult.success(userService.updateById(user)); } /** @@ -342,7 +358,7 @@ * 重置密码 */ // @PreAuthorize("@ss.hasPermi('system:user:resetPwd')") - @ApiOperation(value = "重置密码") +// @ApiOperation(value = "重置密码") @Log(title = "用户信息-重置密码", businessType = BusinessType.UPDATE) @PostMapping("/resetPwd") public AjaxResult resetPwd(@RequestBody SysUser user) { diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/FinancialLog.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/FinancialLog.java new file mode 100644 index 0000000..9cf3545 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/FinancialLog.java @@ -0,0 +1,30 @@ +package com.ruoyi.common.annotation; + +import com.ruoyi.common.enums.BusinessType; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 自定义操作日志记录注解 + * + * @author ruoyi + */ +@Target({ElementType.PARAMETER, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface FinancialLog { + + /** + * 模块 + */ + public String title() default ""; + + /** + * 功能 + */ + public BusinessType businessType() default BusinessType.OTHER; + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/DataUpdateHandlerConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/DataUpdateHandlerConfig.java index 8249197..cedb984 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/config/DataUpdateHandlerConfig.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/DataUpdateHandlerConfig.java @@ -1,12 +1,9 @@ package com.ruoyi.common.config; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; -import com.ruoyi.common.utils.SecurityUtils; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; -import org.springframework.context.annotation.Configuration; -import java.util.Date; /** * @author xiaochen @@ -19,7 +16,7 @@ * 造成spring循环依赖,项目支棱不起来 */ @Slf4j -@Configuration +//@Configuration public class DataUpdateHandlerConfig implements MetaObjectHandler { /** @@ -29,8 +26,6 @@ */ @Override public void insertFill(MetaObject metaObject) { - this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); // 起始版本 3.3.0(推荐使用) - this.strictInsertFill(metaObject, "createBy", String.class, SecurityUtils.getUsername()); // 起始版本 3.3.0(推荐使用) // 获取登录信息 /* String userName = JwtTokenUtils.getUsername(); if (StringUtils.isNotBlank(userName)) { @@ -49,8 +44,6 @@ */ @Override public void updateFill(MetaObject metaObject) { - this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date()); // 起始版本 3.3.0(推荐) - this.strictUpdateFill(metaObject, "updateBy", String.class, SecurityUtils.getUsername()); // 起始版本 3.3.0(推荐) // 获取登录信息 /*String userName = JwtTokenUtils.getUsername(); if (StringUtils.isNotBlank(userName)) { diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/MybatisPlusConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/MybatisPlusConfig.java index 1366f2b..51ac229 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/config/MybatisPlusConfig.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/MybatisPlusConfig.java @@ -1,10 +1,8 @@ package com.ruoyi.common.config; import com.baomidou.mybatisplus.annotation.DbType; -import com.baomidou.mybatisplus.core.config.GlobalConfig; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -12,18 +10,17 @@ * @author liheng * @ClassName MybatisPlusConfig * @Description MybatisPlus相关配置 - * @date 2020-09-22 11:22、 - * 直接以实现类作为bean的注入(有事务管理的类) + * @date 2020-09-22 11:22、 直接以实现类作为bean的注入(有事务管理的类) * @EnableTransactionManagement(proxyTargetClass = true) */ @Configuration public class MybatisPlusConfig { - private final DataUpdateHandlerConfig dataUpdateHandler; + /* private final DataUpdateHandlerConfig dataUpdateHandler; @Autowired public MybatisPlusConfig(DataUpdateHandlerConfig dataUpdateHandler) { this.dataUpdateHandler = dataUpdateHandler; - } + }*/ /** * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题 @@ -40,12 +37,12 @@ * * @return */ - @Bean +/* @Bean public GlobalConfig globalConfig() { GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setMetaObjectHandler(dataUpdateHandler); return globalConfig; - } + }*/ } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java index e173a29..c01e3bc 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java @@ -1,5 +1,6 @@ package com.ruoyi.common.core.domain.entity; +import com.baomidou.mybatisplus.annotation.TableLogic; import com.ruoyi.common.core.domain.BaseModel; import io.swagger.annotations.ApiModelProperty; import java.util.Set; @@ -68,8 +69,9 @@ private Integer status; /** - * 删除标志(0代表存在 2代表删除) + * 删除标志(0代表存在 1代表删除) */ + @TableLogic private Integer delFlag; /** diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java index 97e7d37..3e5a9e6 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java @@ -2,11 +2,10 @@ /** * 业务操作类型 - * + * * @author ruoyi */ -public enum BusinessType -{ +public enum BusinessType { /** * 其它 */ @@ -51,7 +50,7 @@ * 生成代码 */ GENCODE, - + /** * 清空数据 */ @@ -76,4 +75,9 @@ * 现场作业修改人员 */ UPDATEUSERREMOVE, + /** + * 部门端修改基础数据 + */ + UPDBASICDATA, + } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java index a6f3d53..81ccfa1 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java @@ -1,30 +1,26 @@ package com.ruoyi.common.utils; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import com.ruoyi.common.constant.HttpStatus; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.exception.ServiceException; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; /** * 安全服务工具类 - * + * * @author ruoyi */ -public class SecurityUtils -{ +public class SecurityUtils { + /** * 用户ID **/ - public static Long getUserId() - { - try - { + public static Long getUserId() { + try { return getLoginUser().getUserId(); - } - catch (Exception e) - { + } catch (Exception e) { throw new ServiceException("获取用户ID异常", HttpStatus.UNAUTHORIZED); } } @@ -32,29 +28,21 @@ /** * 获取部门ID **/ - public static Long getDeptId() - { - try - { + public static Long getDeptId() { + try { return getLoginUser().getDeptId(); - } - catch (Exception e) - { + } catch (Exception e) { throw new ServiceException("获取部门ID异常", HttpStatus.UNAUTHORIZED); } } - + /** * 获取用户账户 **/ - public static String getUsername() - { - try - { + public static String getUsername() { + try { return getLoginUser().getUsername(); - } - catch (Exception e) - { + } catch (Exception e) { throw new ServiceException("获取用户账户异常", HttpStatus.UNAUTHORIZED); } } @@ -62,14 +50,10 @@ /** * 获取用户 **/ - public static LoginUser getLoginUser() - { - try - { + public static LoginUser getLoginUser() { + try { return (LoginUser) getAuthentication().getPrincipal(); - } - catch (Exception e) - { + } catch (Exception e) { throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED); } } @@ -77,8 +61,7 @@ /** * 获取Authentication */ - public static Authentication getAuthentication() - { + public static Authentication getAuthentication() { return SecurityContextHolder.getContext().getAuthentication(); } @@ -88,8 +71,7 @@ * @param password 密码 * @return 加密字符串 */ - public static String encryptPassword(String password) - { + public static String encryptPassword(String password) { BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); return passwordEncoder.encode(password); } @@ -97,24 +79,22 @@ /** * 判断密码是否相同 * - * @param rawPassword 真实密码 + * @param rawPassword 真实密码 * @param encodedPassword 加密后字符 * @return 结果 */ - public static boolean matchesPassword(String rawPassword, String encodedPassword) - { + public static boolean matchesPassword(String rawPassword, String encodedPassword) { BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); return passwordEncoder.matches(rawPassword, encodedPassword); } /** * 是否为管理员 - * + * * @param userId 用户ID * @return 结果 */ - public static boolean isAdmin(Long userId) - { + public static boolean isAdmin(Long userId) { return userId != null && 1L == userId; } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/FinancialLogAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/FinancialLogAspect.java new file mode 100644 index 0000000..bca5adf --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/FinancialLogAspect.java @@ -0,0 +1,99 @@ +package com.ruoyi.framework.aspectj; + +import com.ruoyi.common.annotation.FinancialLog; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.enums.BusinessStatus; +import com.ruoyi.common.enums.UserTypeEnum; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.framework.manager.AsyncManager; +import com.ruoyi.framework.manager.factory.AsyncFactory; +import com.ruoyi.system.domain.TbOperLog; +import com.ruoyi.system.service.ISysRoleService; +import java.util.Objects; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 操作日志记录处理 + * + * @author ruoyi + */ +@Aspect +@Component +public class FinancialLogAspect { + + @Autowired + private ISysRoleService roleService; + + private static final Logger log = LoggerFactory.getLogger(FinancialLogAspect.class); + + /** + * 处理完请求后执行 + * + * @param joinPoint 切点 + */ + @AfterReturning(pointcut = "@annotation(log)", returning = "jsonResult") + public void doAfterReturning(JoinPoint joinPoint, FinancialLog log, + Object jsonResult) { + handleLog(joinPoint, log, jsonResult); + } + + /** + * 拦截异常操作 + * + * @param joinPoint 切点 + * @param e 异常 + */ + @AfterThrowing(value = "@annotation(log)", throwing = "e") + public void doAfterThrowing(JoinPoint joinPoint, Log log, Exception e) { + + } + + protected void handleLog(final JoinPoint joinPoint, FinancialLog log, + Object jsonResult) { + // 获取当前的用户 + LoginUser loginUser = SecurityUtils.getLoginUser(); + // *========数据库日志=========*// + TbOperLog operLog = new TbOperLog(); + operLog.setBusinessType(BusinessStatus.SUCCESS.ordinal()); + if (loginUser != null) { + SysUser user = loginUser.getUser(); + operLog.setAreaName( + UserTypeEnum.PLATFORM.equals(user.getUserType()) ? "平台" + : user.getAreaName()); + if (Objects.nonNull(user)) { + operLog.setStaffName(user.getNickName()); + operLog.setPhoneNumber(user.getPhoneNumber()); + operLog.setPhoneNumber(user.getPhoneNumber()); + } + } + // 处理设置注解上的参数 + getControllerMethodDescription(joinPoint, log, operLog, jsonResult); + // 保存数据库 + AsyncManager.me().execute(AsyncFactory.recordOper(operLog)); + } + + /** + * 获取注解中对方法的描述信息 用于Controller层注解 + * + * @param log 日志 + * @param operLog 操作日志 + * @throws Exception + */ + public void getControllerMethodDescription(JoinPoint joinPoint, FinancialLog log, + TbOperLog operLog, + Object jsonResult) { + // 设置action动作 + operLog.setBusinessType(log.businessType().ordinal()); + // 设置标题 + operLog.setOperation(log.title()); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java index 267e305..8877914 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java @@ -1,8 +1,5 @@ package com.ruoyi.framework.manager.factory; -import java.util.TimerTask; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.utils.LogUtils; import com.ruoyi.common.utils.ServletUtils; @@ -12,38 +9,42 @@ import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.system.domain.SysLogininfor; import com.ruoyi.system.domain.SysOperLog; +import com.ruoyi.system.domain.TbOperLog; import com.ruoyi.system.service.ISysLogininforService; import com.ruoyi.system.service.ISysOperLogService; +import com.ruoyi.system.service.TbOperLogService; import eu.bitwalker.useragentutils.UserAgent; +import java.util.TimerTask; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * 异步工厂(产生任务用) - * + * * @author ruoyi */ -public class AsyncFactory -{ +public class AsyncFactory { + private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user"); /** * 记录登录信息 - * + * * @param username 用户名 - * @param status 状态 - * @param message 消息 - * @param args 列表 + * @param status 状态 + * @param message 消息 + * @param args 列表 * @return 任务task */ - public static TimerTask recordLogininfor(final String username, final String status, final String message, - final Object... args) - { - final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); + public static TimerTask recordLogininfor(final String username, final String status, + final String message, + final Object... args) { + final UserAgent userAgent = UserAgent.parseUserAgentString( + ServletUtils.getRequest().getHeader("User-Agent")); final String ip = IpUtils.getIpAddr(); - return new TimerTask() - { + return new TimerTask() { @Override - public void run() - { + public void run() { String address = AddressUtils.getRealAddressByIP(ip); StringBuilder s = new StringBuilder(); s.append(LogUtils.getBlock(ip)); @@ -66,12 +67,10 @@ logininfor.setOs(os); logininfor.setMsg(message); // 日志状态 - if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) - { + if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, + Constants.REGISTER)) { logininfor.setStatus(Constants.SUCCESS); - } - else if (Constants.LOGIN_FAIL.equals(status)) - { + } else if (Constants.LOGIN_FAIL.equals(status)) { logininfor.setStatus(Constants.FAIL); } // 插入数据 @@ -82,21 +81,33 @@ /** * 操作日志记录 - * + * * @param operLog 操作日志信息 * @return 任务task */ - public static TimerTask recordOper(final SysOperLog operLog) - { - return new TimerTask() - { + public static TimerTask recordOper(final SysOperLog operLog) { + return new TimerTask() { @Override - public void run() - { + public void run() { // 远程查询操作地点 operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog); } }; } + + /** + * 操作日志记录 + * + * @param operLog 操作日志信息 + * @return 任务task + */ + public static TimerTask recordOper(final TbOperLog operLog) { + return new TimerTask() { + @Override + public void run() { + SpringUtils.getBean(TbOperLogService.class).save(operLog); + } + }; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbDataScreenScore.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbDataScreenScore.java new file mode 100644 index 0000000..424fc10 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbDataScreenScore.java @@ -0,0 +1,60 @@ +package com.ruoyi.system.domain; + +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.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.Date; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * 大屏得分表 + * </p> + * + * @author mitao + * @since 2024-04-15 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("tb_data_screen_score") +@ApiModel(value = "TbDataScreenScore对象", description = "大屏得分表") +public class TbDataScreenScore implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "id") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty(value = "部门区划代码") + @TableField("dept_area_code") + private String deptAreaCode; + + @ApiModelProperty(value = "基础数据id") + @TableField("basic_data_id") + private Long basicDataId; + + @ApiModelProperty(value = "配置id ") + @TableField("data_screen_config_id") + private Long dataScreenConfigId; + + @ApiModelProperty(value = "得分") + @TableField("score") + private Double score; + + @ApiModelProperty(value = "得分率") + @TableField("score_rate") + private Double scoreRate; + + @ApiModelProperty(value = "创建时间") + @TableField(value = "create_time", fill = FieldFill.INSERT) + private Date createTime; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbOperLog.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbOperLog.java new file mode 100644 index 0000000..c7bce0b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbOperLog.java @@ -0,0 +1,71 @@ +package com.ruoyi.system.domain; + +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.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.Date; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * + * </p> + * + * @author mitao + * @since 2024-04-15 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("tb_oper_log") +@ApiModel(value = "TbOperLog对象", description = "") +public class TbOperLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键id") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty(value = "操作类别") + @TableField("business_type") + private Integer businessType; + + @ApiModelProperty(value = "员工姓名") + @TableField("staff_name") + private String staffName; + + @ApiModelProperty(value = "联系电话") + @TableField("phone_number") + private String phoneNumber; + + @ApiModelProperty(value = "操作") + @TableField("operation") + private String operation; + + @ApiModelProperty(value = "修改字段") + @TableField("field_name") + private String fieldName; + + @ApiModelProperty(value = "所属部门") + @TableField("area_name") + private String areaName; + + @ApiModelProperty(value = "修改前数据") + @TableField("before_edit") + private String beforeEdit; + + @ApiModelProperty(value = "修改后数据") + @TableField("after_edit") + private String afterEdit; + + @ApiModelProperty(value = "修改时间") + @TableField(value = "create_time", fill = FieldFill.INSERT) + private Date createTime; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/BasicDataDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/BasicDataDTO.java index b5fa1aa..2cb6a02 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/BasicDataDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/BasicDataDTO.java @@ -2,10 +2,10 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - +import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import lombok.Data; /** * @author mitao @@ -13,7 +13,9 @@ */ @Data @ApiModel(value = "当前季度基础数据数据传输对象") -public class BasicDataDTO { +public class BasicDataDTO implements Serializable { + + private static final long serialVersionUID = -519305267336964392L; @ApiModelProperty(value = "转移支付规模") private String transferPaymentScale; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/DataIndicatorsUpdDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/DataIndicatorsUpdDTO.java index 4bf10fd..0853b8a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/DataIndicatorsUpdDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/DataIndicatorsUpdDTO.java @@ -1,9 +1,12 @@ package com.ruoyi.system.dto.update; import com.ruoyi.common.enums.SubTypeEnum; +import com.ruoyi.system.dto.CalculateItemDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; +import java.util.List; +import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import lombok.Data; @@ -16,17 +19,17 @@ public class DataIndicatorsUpdDTO implements Serializable { private static final long serialVersionUID = -5866223907037261823L; - + @ApiModelProperty(value = "配置类型子类型(1=指标一 2=指标二 3=指标三 4=指标四)") @NotNull(message = "配置类型子类型不能为空") private SubTypeEnum subType; @ApiModelProperty(value = "得分计算规则") - @NotNull(message = "得分计算规则不能为空") - private String calculateFormula; + @NotEmpty(message = "得分计算规则不能为空") + private List<CalculateItemDTO> scoreCalculateList; @ApiModelProperty(value = "得分率计算规则") - @NotNull(message = "得分率计算规则不能为空") - private String calculateRateFormula; + @NotEmpty(message = "得分率计算规则不能为空") + private List<CalculateItemDTO> rateCalculateList; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FieldCategoryUpdateDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FieldCategoryUpdateDTO.java index d31771b..66769b4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FieldCategoryUpdateDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FieldCategoryUpdateDTO.java @@ -2,13 +2,11 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import javax.validation.constraints.NotBlank; +import lombok.Data; @Data @ApiModel(value = "字段分类更新数据传输对象") @@ -17,7 +15,6 @@ private static final long serialVersionUID = -1625725857401976832L; @ApiModelProperty(value = "id") - @NotNull(message = "id不能为空") private Long id; @ApiModelProperty(value = "一级分类名称") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FormalIndicatorsUpdDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FormalIndicatorsUpdDTO.java index bbac114..e2ac5a3 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FormalIndicatorsUpdDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/FormalIndicatorsUpdDTO.java @@ -1,9 +1,11 @@ package com.ruoyi.system.dto.update; import com.ruoyi.common.enums.SubTypeEnum; +import com.ruoyi.system.dto.CalculateItemDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; +import java.util.List; import lombok.Data; /** @@ -15,11 +17,11 @@ public class FormalIndicatorsUpdDTO implements Serializable { private static final long serialVersionUID = -4878457973955230627L; - + @ApiModelProperty(value = "配置类型子类型(1=指标一 2=指标二 3=指标三 4=指标四)") private SubTypeEnum subType; @ApiModelProperty(value = "得分计算规则") - private String calculateFormula; + private List<CalculateItemDTO> calculateItemList; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/RiskLevelUpdDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/RiskLevelUpdDTO.java index 9f534da..7180019 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/RiskLevelUpdDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/RiskLevelUpdDTO.java @@ -1,9 +1,12 @@ package com.ruoyi.system.dto.update; +import com.ruoyi.system.dto.CalculateItemDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; +import java.util.List; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; import lombok.Data; /** @@ -16,9 +19,9 @@ private static final long serialVersionUID = -4878457973955230627L; - @ApiModelProperty(value = "计算规则", notes = "公式中字段的格式为:field_字段id,e.g:field_1,field_2等。") - @NotBlank(message = "计算规则不能为空") - private String calculateFormula; + @ApiModelProperty(value = "计算规则") + @NotEmpty(message = "计算规则不能为空") + private List<CalculateItemDTO> calculateItemList; @ApiModelProperty(value = "风险等级范围-高风险得分") @NotBlank(message = "风险等级范围-高风险得分不能为空") @@ -35,4 +38,10 @@ @ApiModelProperty(value = "风险等级范围-无风险得分") @NotBlank(message = "风险等级范围-无风险得分不能为空") private String noRisk; + + public boolean areRiskLevelsDistinct() { + return !highRisk.equals(mediumRisk) && !highRisk.equals(lowRisk) && !highRisk.equals(noRisk) + && !mediumRisk.equals(lowRisk) && !mediumRisk.equals(noRisk) && !lowRisk.equals( + noRisk); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/SysUserPwdUpdDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/SysUserPwdUpdDTO.java new file mode 100644 index 0000000..978617e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/SysUserPwdUpdDTO.java @@ -0,0 +1,26 @@ +package com.ruoyi.system.dto.update; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +/** + * @author mitao + * @date 2024/4/15 + */ +@Data +@ApiModel("用户更新密码传输实体") +public class SysUserPwdUpdDTO implements Serializable { + + + private static final long serialVersionUID = -2917521746989431046L; + + @ApiModelProperty(value = "用户id") + private Long userId; + + @ApiModelProperty(value = "密码") + private String password; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/SysUserUpdDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/SysUserUpdDTO.java new file mode 100644 index 0000000..7ffbf0f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/update/SysUserUpdDTO.java @@ -0,0 +1,28 @@ +package com.ruoyi.system.dto.update; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +/** + * @author mitao + * @date 2024/4/15 + */ +@Data +@ApiModel("用户更新传输实体") +public class SysUserUpdDTO implements Serializable { + + private static final long serialVersionUID = 9221182121298547867L; + @ApiModelProperty(value = "用户id") + private Long userId; + + @ApiModelProperty("员工姓名") + private String userName; + + @ApiModelProperty("联系电话") + private String phoneNumber; + + @ApiModelProperty("所属角色id") + private Long roleId; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java b/ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java index b23a913..f1d9ff1 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java @@ -4,6 +4,7 @@ import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.util.ListUtils; import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -13,6 +14,7 @@ import com.ruoyi.common.enums.FieldTypeEnum; import com.ruoyi.common.enums.ReportingStatusEnum; import com.ruoyi.common.enums.ShowStatusEnum; +import com.ruoyi.common.enums.ValueTypeEnum; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.CalculateUtil; import com.ruoyi.common.utils.CollUtils; @@ -23,6 +25,7 @@ import com.ruoyi.system.domain.TbBasicDataField; import com.ruoyi.system.domain.TbField; import com.ruoyi.system.domain.TbScore; +import com.ruoyi.system.dto.CalculateItemDTO; import com.ruoyi.system.service.TbBasicDataConfigDetailService; import com.ruoyi.system.service.TbBasicDataConfigService; import com.ruoyi.system.service.TbBasicDataFieldService; @@ -31,7 +34,6 @@ import com.ruoyi.system.service.TbScoreService; import java.time.LocalDate; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -91,8 +93,8 @@ @Override public void doAfterAllAnalysed(AnalysisContext context) { try { - TbBasicData tbBasicData = saveData(); - calculateScore(tbBasicData); + saveData(); + } catch (Exception e) { if (e instanceof ServiceException) { throw new ServiceException(e.getMessage()); @@ -140,7 +142,7 @@ /** * 加上存储数据库 */ - private TbBasicData saveData() throws Exception { + private void saveData() throws Exception { // 查询需要填写的动态字段 List<TbField> fieldList = tbFieldService.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list(); @@ -163,7 +165,7 @@ } LocalDate now = LocalDate.now(); TbBasicData tbBasicData; - String quarter = String.format("%s年%s", now.getYear(), dataMap.get(1)); + String quarter = dataMap.get(1); Optional<TbBasicData> tbBasicDataOpt = tbBasicDataService.lambdaQuery(). eq(TbBasicData::getQuarter, quarter) .eq(TbBasicData::getDeptAreaCode, areaCode).oneOpt(); @@ -213,10 +215,10 @@ tbBasicData.setStatus(ReportingStatusEnum.FILLED); tbBasicDataService.updateById(tbBasicData); log.info(String.format("%s导入基础数据成功!", dataMap.get(0))); - return tbBasicData; + calculateScore(tbBasicData, fields); } - private void calculateScore(TbBasicData tbBasicData) { + private void calculateScore(TbBasicData tbBasicData, List<TbBasicDataField> fields) { List<TbScore> scoreList = new ArrayList<>(); //计算得分 List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery() @@ -232,22 +234,26 @@ .collect(Collectors.toList()); tbScoreService.remove( new LambdaQueryWrapper<TbScore>().eq(TbScore::getBasicDataId, tbBasicData.getId())); + Map<Long, TbBasicDataField> basicDataFieldMap = fields.stream() + .collect(Collectors.toMap(TbBasicDataField::getFieldId, e -> e)); if (CollUtils.isNotEmpty(numCalculates)) { for (TbBasicDataConfig item : numCalculates) { - Map<String, Object> valueMap = new HashMap<>(); String numberCalculateFormula = item.getNumberCalculateFormula(); - Map<String, Integer> fieldsAndValue = CalculateUtil.getFieldsAndValue( - numberCalculateFormula); - for (Map.Entry<String, Integer> stringIntegerEntry : fieldsAndValue.entrySet()) { - Optional<TbBasicDataField> tbBasicDataField = tbBasicDataFieldService.lambdaQuery() - .eq(TbBasicDataField::getBasicDataId, tbBasicData.getId()) - .eq(TbBasicDataField::getFieldId, stringIntegerEntry.getValue()) - .oneOpt(); - tbBasicDataField.ifPresent( - basicDataField -> valueMap.put(stringIntegerEntry.getKey(), - basicDataField.getFieldValue())); + List<CalculateItemDTO> calculateItemDTOS = JSONArray.parseArray( + numberCalculateFormula, + CalculateItemDTO.class); + for (CalculateItemDTO dto : calculateItemDTOS) { + if (ValueTypeEnum.FIELD.equals(dto.getValueType())) { + TbBasicDataField tbBasicDataField = basicDataFieldMap.get( + Long.valueOf(dto.getContent())); + if (Objects.nonNull(tbBasicDataField)) { + dto.setContent(tbBasicDataField.getFieldValue()); + } + } } - double score = CalculateUtil.calculate(numberCalculateFormula, valueMap); + String numberCalculateFormulaStr = calculateItemDTOS.stream() + .map(CalculateItemDTO::getContent).collect(Collectors.joining()); + double score = CalculateUtil.calculate(numberCalculateFormulaStr); TbScore tbScore = new TbScore(); tbScore.setBasicDataId(tbBasicData.getId()); tbScore.setScore(score); @@ -266,14 +272,11 @@ Collectors.toMap(TbBasicDataConfigDetail::getKey, TbBasicDataConfigDetail::getValue)); if (CollectionUtils.isNotEmpty(details)) { - Optional<TbBasicDataField> tbBasicDataFieldOptional = tbBasicDataFieldService.lambdaQuery() - .eq(TbBasicDataField::getBasicDataId, tbBasicData.getId()) - .eq(TbBasicDataField::getFieldId, textAndPercentage.getFieldIdStr()) - .oneOpt(); - if (tbBasicDataFieldOptional.isPresent()) { - TbBasicDataField tbBasicDataField = tbBasicDataFieldOptional.get(); + TbBasicDataField textAndPercentageData = basicDataFieldMap.get( + Long.valueOf(textAndPercentage.getFieldIdStr())); + if (Objects.nonNull(textAndPercentageData)) { if (CalculateTypeEnum.TEXT.equals(textAndPercentage.getCalculateType())) { - String score = scoreMap.get(tbBasicDataField.getFieldValue()); + String score = scoreMap.get(textAndPercentageData.getFieldValue()); tbScore.setBasicDataId(tbBasicData.getId()); tbScore.setScore(Double.parseDouble(score)); tbScore.setBasicDataConfigId(textAndPercentage.getId()); @@ -283,7 +286,8 @@ textAndPercentage.getCalculateType())) { for (Map.Entry<String, String> stringStringEntry : scoreMap.entrySet()) { String[] split = stringStringEntry.getKey().split("-"); - double v = Double.parseDouble(tbBasicDataField.getFieldValue()); + double v = Double.parseDouble( + textAndPercentageData.getFieldValue()); double min = Double.parseDouble(split[0]); double max = Double.parseDouble(split[1]); if (v >= min && v <= max) { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java index cc31b81..255e794 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java @@ -1,5 +1,6 @@ package com.ruoyi.system.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.system.query.SysRoleQuery; @@ -14,7 +15,7 @@ * @author ruoyi */ @Mapper -public interface SysRoleMapper { +public interface SysRoleMapper extends BaseMapper<SysRole> { /** * 根据条件分页查询角色数据 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java index edff75d..cd32575 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java @@ -1,26 +1,25 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.ruoyi.common.basic.PageInfo; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.system.query.SysUserQuery; import com.ruoyi.system.vo.SysUserVO; +import java.util.List; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import java.util.List; - /** * 用户表 数据层 - * + * * @author ruoyi */ @Mapper -public interface SysUserMapper extends BaseMapper<SysUser> -{ +public interface SysUserMapper extends BaseMapper<SysUser> { + /** * 根据条件分页查询用户列表 - * + * * @param sysUser 用户信息 * @return 用户信息集合信息 */ @@ -28,7 +27,7 @@ /** * 根据条件分页查询已配用户角色列表 - * + * * @param user 用户信息 * @return 用户信息集合信息 */ @@ -36,7 +35,7 @@ /** * 根据条件分页查询未分配用户角色列表 - * + * * @param user 用户信息 * @return 用户信息集合信息 */ @@ -44,7 +43,7 @@ /** * 通过用户名查询用户 - * + * * @param userName 用户名 * @return 用户对象信息 */ @@ -52,7 +51,7 @@ /** * 通过用户ID查询用户 - * + * * @param userId 用户ID * @return 用户对象信息 */ @@ -60,7 +59,7 @@ /** * 新增用户信息 - * + * * @param user 用户信息 * @return 结果 */ @@ -68,7 +67,7 @@ /** * 修改用户信息 - * + * * @param user 用户信息 * @return 结果 */ @@ -76,16 +75,16 @@ /** * 修改用户头像 - * + * * @param userName 用户名 - * @param avatar 头像地址 + * @param avatar 头像地址 * @return 结果 */ public int updateUserAvatar(@Param("userName") String userName, @Param("avatar") String avatar); /** * 重置用户密码 - * + * * @param userName 用户名 * @param password 密码 * @return 结果 @@ -94,7 +93,7 @@ /** * 通过用户ID删除用户 - * + * * @param userId 用户ID * @return 结果 */ @@ -102,7 +101,7 @@ /** * 批量删除用户信息 - * + * * @param userIds 需要删除的用户ID * @return 结果 */ @@ -110,7 +109,7 @@ /** * 校验用户名称是否唯一 - * + * * @param userName 用户名称 * @return 结果 */ @@ -134,6 +133,7 @@ /** * 查询用户集合通过用户id + * * @param userIds * @return */ @@ -152,14 +152,15 @@ /** * 获取用户黑名单列表 + * * @param * @return */ // List<SysUserVO> selectBlackPageList(@Param("query")SysUserQuery query); - List<SysUser> selectListByNamePhone(@Param("name")String name); + List<SysUser> selectListByNamePhone(@Param("name") String name); - List<SysUser> selectUserByUserNameList(@Param("names")List<String> names); + List<SysUser> selectUserByUserNameList(@Param("names") List<String> names); // UserInfoVo userInfo(@Param("id") Long userId); SysUser selectByPhone(@Param("phoneNumber") String phoneNumber); @@ -168,13 +169,14 @@ Long getUserRole(@Param("userId") Long userId); - int updateUserIfBlack(@Param("ids")List<Long> ids); + int updateUserIfBlack(@Param("ids") List<Long> ids); List<SysUser> selectAllList(); - List<SysUserVO> pageList(@Param("query")SysUserQuery query, @Param("pageInfo")PageInfo<SysUserVO> pageInfo); + Page<SysUserVO> pageList(@Param("query") SysUserQuery query, + @Param("page") Page<SysUserVO> page); - void updatePassword(@Param("id") Long id,@Param("s") String s); + void updatePassword(@Param("id") Long id, @Param("s") String s); long selectIdByPhone(@Param("phoneNumber") String phoneNumber); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbDataScreenScoreMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbDataScreenScoreMapper.java new file mode 100644 index 0000000..ca15ccc --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbDataScreenScoreMapper.java @@ -0,0 +1,16 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.domain.TbDataScreenScore; + +/** + * <p> + * 大屏得分表 Mapper 接口 + * </p> + * + * @author mitao + * @since 2024-04-15 + */ +public interface TbDataScreenScoreMapper extends BaseMapper<TbDataScreenScore> { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbOperLogMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbOperLogMapper.java new file mode 100644 index 0000000..95ef53e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbOperLogMapper.java @@ -0,0 +1,17 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.domain.TbOperLog; + + +/** + * <p> + * Mapper 接口 + * </p> + * + * @author mitao + * @since 2024-04-15 + */ +public interface TbOperLogMapper extends BaseMapper<TbOperLog> { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/OperLogQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/OperLogQuery.java new file mode 100644 index 0000000..8102da3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/OperLogQuery.java @@ -0,0 +1,35 @@ +package com.ruoyi.system.query; + +import com.ruoyi.common.core.domain.BasePage; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author mitao + * @date 2024/4/15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "操作日志分页条件查询对象") +public class OperLogQuery extends BasePage { + + private static final long serialVersionUID = -3262552094044952596L; + + @ApiModelProperty(value = "员工姓名") + private String staffName; + + @ApiModelProperty(value = "联系电话") + private String phoneNumber; + + @ApiModelProperty(value = "所属部门") + private String areaName; + + @ApiModelProperty(value = "修改时间-开始") + private String startTime; + + @ApiModelProperty(value = "修改时间-结束") + private String endTime; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/SysUserQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/SysUserQuery.java index f0310c4..f520356 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/query/SysUserQuery.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/SysUserQuery.java @@ -12,7 +12,7 @@ private static final long serialVersionUID = 3174324251882921880L; @ApiModelProperty(value = "姓名") - private String nickName; + private String userName; @ApiModelProperty(value = "角色id") private Integer roleId; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java index 0af22f8..4a4bed9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java @@ -232,4 +232,6 @@ * @return 结果 */ public int editRole(SysRoleDTO dto); + + List<SysMenu> getMenuByRoleId(Long roleId); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java index ef1fcc7..71fb1ee 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java @@ -1,23 +1,22 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.basic.PageDTO; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.system.query.SysUserQuery; import com.ruoyi.system.vo.SysUserVO; - import java.util.List; /** * 用户 业务层 - * + * * @author ruoyi */ -public interface ISysUserService extends IService<SysUser> -{ +public interface ISysUserService extends IService<SysUser> { + /** * 根据条件分页查询用户列表 - * + * * @param user 用户信息 * @return 用户信息集合信息 */ @@ -25,7 +24,7 @@ /** * 根据条件分页查询已分配用户角色列表 - * + * * @param user 用户信息 * @return 用户信息集合信息 */ @@ -33,7 +32,7 @@ /** * 根据条件分页查询未分配用户角色列表 - * + * * @param user 用户信息 * @return 用户信息集合信息 */ @@ -41,7 +40,7 @@ /** * 通过用户名查询用户 - * + * * @param userName 用户名 * @return 用户对象信息 */ @@ -49,7 +48,7 @@ /** * 通过用户ID查询用户 - * + * * @param userId 用户ID * @return 用户对象信息 */ @@ -57,7 +56,7 @@ /** * 根据用户ID查询用户所属角色组 - * + * * @param userName 用户名 * @return 结果 */ @@ -65,7 +64,7 @@ /** * 根据用户ID查询用户所属岗位组 - * + * * @param userName 用户名 * @return 结果 */ @@ -73,7 +72,7 @@ /** * 校验用户名称是否唯一 - * + * * @param user 用户信息 * @return 结果 */ @@ -97,21 +96,21 @@ /** * 校验用户是否允许操作 - * + * * @param user 用户信息 */ public void checkUserAllowed(SysUser user); /** * 校验用户是否有数据权限 - * + * * @param userId 用户id */ public void checkUserDataScope(Long userId); /** * 新增用户信息 - * + * * @param user 用户信息 * @return 结果 */ @@ -119,7 +118,7 @@ /** * 注册用户信息 - * + * * @param user 用户信息 * @return 结果 */ @@ -127,7 +126,7 @@ /** * 修改用户信息 - * + * * @param user 用户信息 * @return 结果 */ @@ -135,15 +134,15 @@ /** * 用户授权角色 - * - * @param userId 用户ID + * + * @param userId 用户ID * @param roleIds 角色组 */ public void insertUserAuth(Long userId, Long[] roleIds); /** * 修改用户状态 - * + * * @param user 用户信息 * @return 结果 */ @@ -151,7 +150,7 @@ /** * 修改用户基本信息 - * + * * @param user 用户信息 * @return 结果 */ @@ -159,16 +158,16 @@ /** * 修改用户头像 - * + * * @param userName 用户名 - * @param avatar 头像地址 + * @param avatar 头像地址 * @return 结果 */ public boolean updateUserAvatar(String userName, String avatar); /** * 重置用户密码 - * + * * @param user 用户信息 * @return 结果 */ @@ -176,7 +175,7 @@ /** * 重置用户密码 - * + * * @param userName 用户名 * @param password 密码 * @return 结果 @@ -185,7 +184,7 @@ /** * 通过用户ID删除用户 - * + * * @param userId 用户ID * @return 结果 */ @@ -193,7 +192,7 @@ /** * 批量删除用户信息 - * + * * @param userIds 需要删除的用户ID * @return 结果 */ @@ -201,10 +200,10 @@ /** * 导入用户数据 - * - * @param userList 用户数据列表 + * + * @param userList 用户数据列表 * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 - * @param operName 操作用户 + * @param operName 操作用户 * @return 结果 */ public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName); @@ -222,6 +221,7 @@ /** * 获取用户黑名单列表 + * * @param * @return */ @@ -229,12 +229,13 @@ List<SysUser> selectListByNamePhone(String name); - // UserInfoVo userInfo(Long userId); SysUser selectByPhone(String phoneNumber); + /** * 通过名字集合查询用户 + * * @param names * @return */ @@ -248,16 +249,18 @@ /** * 查询所有用户(包含删除的) + * * @return */ List<SysUser> selectAllList(); /** * 获取用户列表 + * * @param query * @return */ - PageInfo<SysUserVO> pageList(SysUserQuery query); + PageDTO<SysUserVO> pageList(SysUserQuery query); void updatePassword(Long id, String s); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenConfigService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenConfigService.java index 0d22795..201481a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenConfigService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenConfigService.java @@ -1,13 +1,14 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.enums.DataScreenConfigEnum; 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; +import javax.validation.constraints.NotNull; /** * <p> @@ -23,7 +24,7 @@ DataScreenConfigVO editRiskLevel(RiskLevelUpdDTO dto); - List<DataScreenConfigVO> getIndicatorsConfig(DataScreenConfigQuery query); + List<DataScreenConfigVO> getIndicatorsConfig(@NotNull DataScreenConfigEnum type); DataScreenConfigVO editDataIndicatorsConfig(DataIndicatorsUpdDTO dto); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenScoreService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenScoreService.java new file mode 100644 index 0000000..d429cc4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbDataScreenScoreService.java @@ -0,0 +1,16 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.system.domain.TbDataScreenScore; + +/** + * <p> + * 大屏得分表 服务类 + * </p> + * + * @author mitao + * @since 2024-04-15 + */ +public interface TbDataScreenScoreService extends IService<TbDataScreenScore> { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbOperLogService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbOperLogService.java new file mode 100644 index 0000000..ead9608 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbOperLogService.java @@ -0,0 +1,20 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.basic.PageDTO; +import com.ruoyi.system.domain.TbOperLog; +import com.ruoyi.system.query.OperLogQuery; +import com.ruoyi.system.vo.OperLogVO; + +/** + * <p> + * 服务类 + * </p> + * + * @author mitao + * @since 2024-04-15 + */ +public interface TbOperLogService extends IService<TbOperLog> { + + PageDTO<OperLogVO> queryPage(OperLogQuery query); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java index d7449eb..4773ee6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java @@ -1,10 +1,5 @@ package com.ruoyi.system.service.impl; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.stream.Collectors; - import com.ruoyi.common.annotation.DataScope; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.TreeSelect; @@ -19,17 +14,21 @@ import com.ruoyi.system.mapper.SysDeptMapper; import com.ruoyi.system.mapper.SysRoleMapper; import com.ruoyi.system.service.ISysDeptService; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * 部门管理 服务实现 - * + * * @author ruoyi */ @Service -public class SysDeptServiceImpl implements ISysDeptService -{ +public class SysDeptServiceImpl implements ISysDeptService { + @Autowired private SysDeptMapper deptMapper; @@ -38,52 +37,46 @@ /** * 查询部门管理数据 - * + * * @param dept 部门信息 * @return 部门信息集合 */ @Override @DataScope(deptAlias = "d") - public List<SysDept> selectDeptList(SysDept dept) - { + public List<SysDept> selectDeptList(SysDept dept) { return deptMapper.selectDeptList(dept); } /** * 查询部门树结构信息 - * + * * @param dept 部门信息 * @return 部门树信息集合 */ @Override - public List<TreeSelect> selectDeptTreeList(SysDept dept) - { + public List<TreeSelect> selectDeptTreeList(SysDept dept) { List<SysDept> depts = SpringUtils.getAopProxy(this).selectDeptList(dept); return buildDeptTreeSelect(depts); } /** * 构建前端所需要树结构 - * + * * @param depts 部门列表 * @return 树结构列表 */ @Override - public List<SysDept> buildDeptTree(List<SysDept> depts) - { + public List<SysDept> buildDeptTree(List<SysDept> depts) { List<SysDept> returnList = new ArrayList<SysDept>(); List<Long> tempList = depts.stream().map(SysDept::getDeptId).collect(Collectors.toList()); - for (SysDept dept : depts) - { + for (SysDept dept : depts) { // 如果是顶级节点, 遍历该父节点的所有子节点 - if (!tempList.contains(dept.getParentId())) - { + if (!tempList.contains(dept.getParentId())) { recursionFn(depts, dept); returnList.add(dept); } } - if (returnList.isEmpty()) - { + if (returnList.isEmpty()) { returnList = depts; } return returnList; @@ -91,93 +84,85 @@ /** * 构建前端所需要下拉树结构 - * + * * @param depts 部门列表 * @return 下拉树结构列表 */ @Override - public List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts) - { + public List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts) { List<SysDept> deptTrees = buildDeptTree(depts); return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); } /** * 根据角色ID查询部门树信息 - * + * * @param roleId 角色ID * @return 选中部门列表 */ @Override - public List<Long> selectDeptListByRoleId(Long roleId) - { + public List<Long> selectDeptListByRoleId(Long roleId) { SysRole role = roleMapper.selectRoleById(roleId); return deptMapper.selectDeptListByRoleId(roleId, role.isDeptCheckStrictly()); } /** * 根据部门ID查询信息 - * + * * @param deptId 部门ID * @return 部门信息 */ @Override - public SysDept selectDeptById(Long deptId) - { + public SysDept selectDeptById(Long deptId) { return deptMapper.selectDeptById(deptId); } /** * 根据ID查询所有子部门(正常状态) - * + * * @param deptId 部门ID * @return 子部门数 */ @Override - public int selectNormalChildrenDeptById(Long deptId) - { + public int selectNormalChildrenDeptById(Long deptId) { return deptMapper.selectNormalChildrenDeptById(deptId); } /** * 是否存在子节点 - * + * * @param deptId 部门ID * @return 结果 */ @Override - public boolean hasChildByDeptId(Long deptId) - { + public boolean hasChildByDeptId(Long deptId) { int result = deptMapper.hasChildByDeptId(deptId); return result > 0; } /** * 查询部门是否存在用户 - * + * * @param deptId 部门ID * @return 结果 true 存在 false 不存在 */ @Override - public boolean checkDeptExistUser(Long deptId) - { + public boolean checkDeptExistUser(Long deptId) { int result = deptMapper.checkDeptExistUser(deptId); return result > 0; } /** * 校验部门名称是否唯一 - * + * * @param dept 部门信息 * @return 结果 */ @Override - public boolean checkDeptNameUnique(SysDept dept) - { + public boolean checkDeptNameUnique(SysDept dept) { Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId(); SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId()); - if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue()) - { + if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; @@ -185,19 +170,16 @@ /** * 校验部门是否有数据权限 - * + * * @param deptId 部门id */ @Override - public void checkDeptDataScope(Long deptId) - { - if (!SysUser.isAdmin(SecurityUtils.getUserId())) - { + public void checkDeptDataScope(Long deptId) { + if (!SysUser.isAdmin(SecurityUtils.getUserId())) { SysDept dept = new SysDept(); dept.setDeptId(deptId); List<SysDept> depts = SpringUtils.getAopProxy(this).selectDeptList(dept); - if (StringUtils.isEmpty(depts)) - { + if (StringUtils.isEmpty(depts)) { throw new ServiceException("没有权限访问部门数据!"); } } @@ -205,17 +187,15 @@ /** * 新增保存部门信息 - * + * * @param dept 部门信息 * @return 结果 */ @Override - public int insertDept(SysDept dept) - { + public int insertDept(SysDept dept) { SysDept info = deptMapper.selectDeptById(dept.getParentId()); // 如果父节点不为正常状态,则不允许新增子节点 - if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) - { + if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) { throw new ServiceException("部门停用,不允许新增"); } dept.setAncestors(info.getAncestors() + "," + dept.getParentId()); @@ -224,26 +204,24 @@ /** * 修改保存部门信息 - * + * * @param dept 部门信息 * @return 结果 */ @Override - public int updateDept(SysDept dept) - { + public int updateDept(SysDept dept) { SysDept newParentDept = deptMapper.selectDeptById(dept.getParentId()); SysDept oldDept = deptMapper.selectDeptById(dept.getDeptId()); - if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept)) - { + if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept)) { String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId(); String oldAncestors = oldDept.getAncestors(); dept.setAncestors(newAncestors); updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors); } int result = deptMapper.updateDept(dept); - if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty(dept.getAncestors()) - && !StringUtils.equals("0", dept.getAncestors())) - { + if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty( + dept.getAncestors()) + && !StringUtils.equals("0", dept.getAncestors())) { // 如果该部门是启用状态,则启用该部门的所有上级部门 updateParentDeptStatusNormal(dept); } @@ -252,11 +230,10 @@ /** * 修改该部门的父级部门状态 - * + * * @param dept 当前部门 */ - private void updateParentDeptStatusNormal(SysDept dept) - { + private void updateParentDeptStatusNormal(SysDept dept) { String ancestors = dept.getAncestors(); Long[] deptIds = Convert.toLongArray(ancestors); deptMapper.updateDeptStatusNormal(deptIds); @@ -264,48 +241,41 @@ /** * 修改子元素关系 - * - * @param deptId 被修改的部门ID + * + * @param deptId 被修改的部门ID * @param newAncestors 新的父ID集合 * @param oldAncestors 旧的父ID集合 */ - public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors) - { + public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors) { List<SysDept> children = deptMapper.selectChildrenDeptById(deptId); - for (SysDept child : children) - { + for (SysDept child : children) { child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors)); } - if (children.size() > 0) - { + if (children.size() > 0) { deptMapper.updateDeptChildren(children); } } /** * 删除部门管理信息 - * + * * @param deptId 部门ID * @return 结果 */ @Override - public int deleteDeptById(Long deptId) - { + public int deleteDeptById(Long deptId) { return deptMapper.deleteDeptById(deptId); } /** * 递归列表 */ - private void recursionFn(List<SysDept> list, SysDept t) - { + private void recursionFn(List<SysDept> list, SysDept t) { // 得到子节点列表 List<SysDept> childList = getChildList(list, t); t.setChildren(childList); - for (SysDept tChild : childList) - { - if (hasChild(list, tChild)) - { + for (SysDept tChild : childList) { + if (hasChild(list, tChild)) { recursionFn(list, tChild); } } @@ -314,15 +284,13 @@ /** * 得到子节点列表 */ - private List<SysDept> getChildList(List<SysDept> list, SysDept t) - { + private List<SysDept> getChildList(List<SysDept> list, SysDept t) { List<SysDept> tlist = new ArrayList<SysDept>(); Iterator<SysDept> it = list.iterator(); - while (it.hasNext()) - { + while (it.hasNext()) { SysDept n = (SysDept) it.next(); - if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue()) - { + if (StringUtils.isNotNull(n.getParentId()) + && n.getParentId().longValue() == t.getDeptId().longValue()) { tlist.add(n); } } @@ -332,8 +300,7 @@ /** * 判断是否有子节点 */ - private boolean hasChild(List<SysDept> list, SysDept t) - { + private boolean hasChild(List<SysDept> list, SysDept t) { return getChildList(list, t).size() > 0; } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java index daeaf11..604eea0 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java @@ -1,6 +1,7 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageDTO; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.entity.SysMenu; @@ -39,7 +40,8 @@ * @author ruoyi */ @Service -public class SysRoleServiceImpl implements ISysRoleService { +public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements + ISysRoleService { @Autowired private SysRoleMapper roleMapper; @@ -536,6 +538,7 @@ // 添加角色 SysRole sysRole = new SysRole(); sysRole.setRoleName(dto.getRoleName()); + sysRole.setRoleKey("admin"); roleMapper.insertRole(sysRole); // 添加角色权限中间表 @@ -579,4 +582,17 @@ return roleMenuMapper.batchRoleMenu(sysRoleMenus); } + + @Override + public List<SysMenu> getMenuByRoleId(Long roleId) { + SysRole sysRole = roleMapper.selectRoleById(roleId); + // 获取当前角色的菜单列表 + List<SysMenu> menus = menuMapper.selectListByRoleId(sysRole.getRoleId()); + if (menus.size() == 0) { + return new ArrayList<>(); + } + List<Long> menusId = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList()); + // 获取当前的权限菜单(有层级) + return this.getMenuLevelList(menusId); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 161ec58..f4166c6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -1,8 +1,9 @@ package com.ruoyi.system.service.impl; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.annotation.DataScope; -import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.basic.PageDTO; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; @@ -14,11 +15,20 @@ import com.ruoyi.system.domain.SysPost; import com.ruoyi.system.domain.SysUserPost; import com.ruoyi.system.domain.SysUserRole; -import com.ruoyi.system.mapper.*; +import com.ruoyi.system.mapper.SysPostMapper; +import com.ruoyi.system.mapper.SysRoleMapper; +import com.ruoyi.system.mapper.SysUserMapper; +import com.ruoyi.system.mapper.SysUserPostMapper; +import com.ruoyi.system.mapper.SysUserRoleMapper; import com.ruoyi.system.query.SysUserQuery; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.vo.SysUserVO; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import javax.validation.Validator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -26,20 +36,15 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; -import javax.validation.Validator; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - /** * 用户 业务层处理 - * + * * @author ruoyi */ @Service -public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService -{ +public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements + ISysUserService { + private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class); @Autowired @@ -65,79 +70,72 @@ /** * 根据条件分页查询用户列表 - * + * * @param user 用户信息 * @return 用户信息集合信息 */ @Override @DataScope(deptAlias = "d", userAlias = "u") - public List<SysUser> selectUserList(SysUser user) - { + public List<SysUser> selectUserList(SysUser user) { return userMapper.selectUserList(user); } /** * 根据条件分页查询已分配用户角色列表 - * + * * @param user 用户信息 * @return 用户信息集合信息 */ @Override @DataScope(deptAlias = "d", userAlias = "u") - public List<SysUser> selectAllocatedList(SysUser user) - { + public List<SysUser> selectAllocatedList(SysUser user) { return userMapper.selectAllocatedList(user); } /** * 根据条件分页查询未分配用户角色列表 - * + * * @param user 用户信息 * @return 用户信息集合信息 */ @Override @DataScope(deptAlias = "d", userAlias = "u") - public List<SysUser> selectUnallocatedList(SysUser user) - { + public List<SysUser> selectUnallocatedList(SysUser user) { return userMapper.selectUnallocatedList(user); } /** * 通过用户名查询用户 - * + * * @param userName 用户名 * @return 用户对象信息 */ @Override - public SysUser selectUserByUserName(String userName) - { + public SysUser selectUserByUserName(String userName) { return userMapper.selectUserByUserName(userName); } /** * 通过用户ID查询用户 - * + * * @param userId 用户ID * @return 用户对象信息 */ @Override - public SysUser selectUserById(Long userId) - { + public SysUser selectUserById(Long userId) { return userMapper.selectUserById(userId); } /** * 查询用户所属角色组 - * + * * @param userName 用户名 * @return 结果 */ @Override - public String selectUserRoleGroup(String userName) - { + public String selectUserRoleGroup(String userName) { List<SysRole> list = roleMapper.selectRolesByUserName(userName); - if (CollectionUtils.isEmpty(list)) - { + if (CollectionUtils.isEmpty(list)) { return StringUtils.EMPTY; } return list.stream().map(SysRole::getRoleName).collect(Collectors.joining(",")); @@ -145,16 +143,14 @@ /** * 查询用户所属岗位组 - * + * * @param userName 用户名 * @return 结果 */ @Override - public String selectUserPostGroup(String userName) - { + public String selectUserPostGroup(String userName) { List<SysPost> list = postMapper.selectPostsByUserName(userName); - if (CollectionUtils.isEmpty(list)) - { + if (CollectionUtils.isEmpty(list)) { return StringUtils.EMPTY; } return list.stream().map(SysPost::getPostName).collect(Collectors.joining(",")); @@ -162,17 +158,15 @@ /** * 校验用户名称是否唯一 - * + * * @param user 用户信息 * @return 结果 */ @Override - public boolean checkUserNameUnique(SysUser user) - { + public boolean checkUserNameUnique(SysUser user) { Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); SysUser info = userMapper.checkUserNameUnique(user.getUserName()); - if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) - { + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; @@ -185,12 +179,10 @@ * @return */ @Override - public boolean checkPhoneUnique(SysUser user) - { + public boolean checkPhoneUnique(SysUser user) { Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); SysUser info = userMapper.checkPhoneUnique(user.getPhoneNumber()); - if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) - { + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; @@ -203,12 +195,10 @@ * @return */ @Override - public boolean checkEmailUnique(SysUser user) - { + public boolean checkEmailUnique(SysUser user) { Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); SysUser info = userMapper.checkEmailUnique(user.getEmail()); - if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) - { + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; @@ -216,33 +206,28 @@ /** * 校验用户是否允许操作 - * + * * @param user 用户信息 */ @Override - public void checkUserAllowed(SysUser user) - { - if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) - { + public void checkUserAllowed(SysUser user) { + if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) { throw new ServiceException("不允许操作超级管理员用户"); } } /** * 校验用户是否有数据权限 - * + * * @param userId 用户id */ @Override - public void checkUserDataScope(Long userId) - { - if (!SysUser.isAdmin(SecurityUtils.getUserId())) - { + public void checkUserDataScope(Long userId) { + if (!SysUser.isAdmin(SecurityUtils.getUserId())) { SysUser user = new SysUser(); user.setUserId(userId); List<SysUser> users = SpringUtils.getAopProxy(this).selectUserList(user); - if (StringUtils.isEmpty(users)) - { + if (StringUtils.isEmpty(users)) { throw new ServiceException("没有权限访问用户数据!"); } } @@ -250,14 +235,13 @@ /** * 新增保存用户信息 - * + * * @param user 用户信息 * @return 结果 */ @Override @Transactional - public int insertUser(SysUser user) - { + public int insertUser(SysUser user) { // 新增用户信息 int rows = userMapper.insertUser(user); // 新增用户岗位关联 @@ -269,29 +253,27 @@ /** * 注册用户信息 - * + * * @param user 用户信息 * @return 结果 */ @Override - public boolean registerUser(SysUser user) - { + public boolean registerUser(SysUser user) { return userMapper.insertUser(user) > 0; } /** * 修改保存用户信息 - * + * * @param user 用户信息 * @return 结果 */ @Override @Transactional - public int updateUser(SysUser user) - { + public int updateUser(SysUser user) { Long userId = user.getUserId(); // 删除用户与角色关联 -// userRoleMapper.deleteUserRoleByUserId(userId); + userRoleMapper.deleteUserRoleByUserId(userId); // 新增用户与角色管理 insertUserRoleId(user); // 删除用户与岗位关联 @@ -303,87 +285,80 @@ /** * 用户授权角色 - * - * @param userId 用户ID + * + * @param userId 用户ID * @param roleIds 角色组 */ @Override @Transactional - public void insertUserAuth(Long userId, Long[] roleIds) - { + public void insertUserAuth(Long userId, Long[] roleIds) { userRoleMapper.deleteUserRoleByUserId(userId); insertUserRole(userId, roleIds); } /** * 修改用户状态 - * + * * @param user 用户信息 * @return 结果 */ @Override - public int updateUserStatus(SysUser user) - { + public int updateUserStatus(SysUser user) { return userMapper.updateUser(user); } /** * 修改用户基本信息 - * + * * @param user 用户信息 * @return 结果 */ @Override - public int updateUserProfile(SysUser user) - { + public int updateUserProfile(SysUser user) { return userMapper.updateUser(user); } /** * 修改用户头像 - * + * * @param userName 用户名 - * @param avatar 头像地址 + * @param avatar 头像地址 * @return 结果 */ @Override - public boolean updateUserAvatar(String userName, String avatar) - { + public boolean updateUserAvatar(String userName, String avatar) { return userMapper.updateUserAvatar(userName, avatar) > 0; } /** * 重置用户密码 - * + * * @param user 用户信息 * @return 结果 */ @Override - public int resetPwd(SysUser user) - { + public int resetPwd(SysUser user) { return userMapper.updateUser(user); } /** * 重置用户密码 - * + * * @param userName 用户名 * @param password 密码 * @return 结果 */ @Override - public int resetUserPwd(String userName, String password) - { + public int resetUserPwd(String userName, String password) { return userMapper.resetUserPwd(userName, password); } /** * 新增用户角色信息 - * + * * @param user 用户对象 */ - public void insertUserRole(SysUser user) - { + public void insertUserRole(SysUser user) { this.insertUserRole(user.getUserId(), user.getRoleIds()); } @@ -392,25 +367,21 @@ * * @param user 用户对象 */ - public void insertUserRoleId(SysUser user) - { + public void insertUserRoleId(SysUser user) { this.insertUserRoleId(user.getUserId(), user.getRoleId()); } /** * 新增用户岗位信息 - * + * * @param user 用户对象 */ - public void insertUserPost(SysUser user) - { + public void insertUserPost(SysUser user) { Long[] posts = user.getPostIds(); - if (StringUtils.isNotEmpty(posts)) - { + if (StringUtils.isNotEmpty(posts)) { // 新增用户与岗位管理 List<SysUserPost> list = new ArrayList<SysUserPost>(posts.length); - for (Long postId : posts) - { + for (Long postId : posts) { SysUserPost up = new SysUserPost(); up.setUserId(user.getUserId()); up.setPostId(postId); @@ -422,18 +393,15 @@ /** * 新增用户角色信息 - * - * @param userId 用户ID + * + * @param userId 用户ID * @param roleIds 角色组 */ - public void insertUserRole(Long userId, Long[] roleIds) - { - if (StringUtils.isNotEmpty(roleIds)) - { + public void insertUserRole(Long userId, Long[] roleIds) { + if (StringUtils.isNotEmpty(roleIds)) { // 新增用户与角色管理 List<SysUserRole> list = new ArrayList<SysUserRole>(roleIds.length); - for (Long roleId : roleIds) - { + for (Long roleId : roleIds) { SysUserRole ur = new SysUserRole(); ur.setUserId(userId); ur.setRoleId(roleId); @@ -449,9 +417,8 @@ * @param userId 用户ID * @param roleId 角色组 */ - public void insertUserRoleId(Long userId, Long roleId) - { - if (Objects.nonNull(userId) && Objects.nonNull(roleId)){ + public void insertUserRoleId(Long userId, Long roleId) { + if (Objects.nonNull(userId) && Objects.nonNull(roleId)) { // 新增用户与角色管理 SysUserRole ur = new SysUserRole(); ur.setUserId(userId); @@ -462,14 +429,13 @@ /** * 通过用户ID删除用户 - * + * * @param userId 用户ID * @return 结果 */ @Override @Transactional - public int deleteUserById(Long userId) - { + public int deleteUserById(Long userId) { // 删除用户与角色关联 userRoleMapper.deleteUserRoleByUserId(userId); // 删除用户与岗位表 @@ -479,16 +445,14 @@ /** * 批量删除用户信息 - * + * * @param userIds 需要删除的用户ID * @return 结果 */ @Override @Transactional - public int deleteUserByIds(List<Long> userIds) - { - for (Long userId : userIds) - { + public int deleteUserByIds(List<Long> userIds) { + for (Long userId : userIds) { checkUserAllowed(new SysUser(userId)); // checkUserDataScope(userId); } @@ -501,17 +465,15 @@ /** * 导入用户数据 - * - * @param userList 用户数据列表 + * + * @param userList 用户数据列表 * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 - * @param operName 操作用户 + * @param operName 操作用户 * @return 结果 */ @Override - public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) - { - if (StringUtils.isNull(userList) || userList.size() == 0) - { + public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) { + if (StringUtils.isNull(userList) || userList.size() == 0) { throw new ServiceException("导入用户数据不能为空!"); } int successNum = 0; @@ -519,23 +481,19 @@ StringBuilder successMsg = new StringBuilder(); StringBuilder failureMsg = new StringBuilder(); String password = configService.selectConfigByKey("sys.user.initPassword"); - for (SysUser user : userList) - { - try - { + for (SysUser user : userList) { + try { // 验证是否存在这个用户 SysUser u = userMapper.selectUserByUserName(user.getUserName()); - if (StringUtils.isNull(u)) - { + if (StringUtils.isNull(u)) { BeanValidators.validateWithException(validator, user); user.setPassword(SecurityUtils.encryptPassword(password)); user.setCreateBy(operName); userMapper.insertUser(user); successNum++; - successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功"); - } - else if (isUpdateSupport) - { + successMsg.append( + "<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功"); + } else if (isUpdateSupport) { BeanValidators.validateWithException(validator, user); checkUserAllowed(u); checkUserDataScope(u.getUserId()); @@ -543,29 +501,25 @@ user.setUpdateBy(operName); userMapper.updateUser(user); successNum++; - successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功"); - } - else - { + successMsg.append( + "<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功"); + } else { failureNum++; - failureMsg.append("<br/>" + failureNum + "、账号 " + user.getUserName() + " 已存在"); + failureMsg.append( + "<br/>" + failureNum + "、账号 " + user.getUserName() + " 已存在"); } - } - catch (Exception e) - { + } catch (Exception e) { failureNum++; String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:"; failureMsg.append(msg + e.getMessage()); log.error(msg, e); } } - if (failureNum > 0) - { - failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + if (failureNum > 0) { + failureMsg.insert(0, + "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); throw new ServiceException(failureMsg.toString()); - } - else - { + } else { successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); } return successMsg.toString(); @@ -622,16 +576,15 @@ } @Override - public PageInfo<SysUserVO> pageList(SysUserQuery query) { - PageInfo<SysUserVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); - List<SysUserVO> list = userMapper.pageList(query,pageInfo); - pageInfo.setRecords(list); - return pageInfo; + public PageDTO<SysUserVO> pageList(SysUserQuery query) { + Page<SysUserVO> page = new Page<>(query.getPageNum(), query.getPageSize()); + Page<SysUserVO> pageVO = userMapper.pageList(query, page); + return PageDTO.of(pageVO); } @Override public void updatePassword(Long id, String s) { - userMapper.updatePassword(id,s); + userMapper.updatePassword(id, s); } @Override diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java index 91d061c..a48fb28 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java @@ -3,7 +3,7 @@ import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.write.metadata.WriteSheet; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.alibaba.fastjson2.JSONArray; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -12,10 +12,13 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.CalculateTypeEnum; +import com.ruoyi.common.enums.DataScreenConfigEnum; import com.ruoyi.common.enums.ReportingStatusEnum; import com.ruoyi.common.enums.ShowStatusEnum; import com.ruoyi.common.enums.UserTypeEnum; +import com.ruoyi.common.enums.ValueTypeEnum; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.BeanUtils; import com.ruoyi.common.utils.CalculateUtil; @@ -28,10 +31,14 @@ import com.ruoyi.system.domain.TbBasicDataConfig; import com.ruoyi.system.domain.TbBasicDataConfigDetail; import com.ruoyi.system.domain.TbBasicDataField; +import com.ruoyi.system.domain.TbDataScreenScore; import com.ruoyi.system.domain.TbDept; import com.ruoyi.system.domain.TbField; +import com.ruoyi.system.domain.TbOperLog; import com.ruoyi.system.domain.TbScore; import com.ruoyi.system.dto.BasicDataDTO; +import com.ruoyi.system.dto.BasicDataFieldDTO; +import com.ruoyi.system.dto.CalculateItemDTO; import com.ruoyi.system.handler.CustomCellWriteHandler; import com.ruoyi.system.listener.BasicDataListener; import com.ruoyi.system.listener.HistoryDataListener; @@ -45,13 +52,17 @@ import com.ruoyi.system.service.TbBasicDataConfigService; import com.ruoyi.system.service.TbBasicDataFieldService; import com.ruoyi.system.service.TbBasicDataService; +import com.ruoyi.system.service.TbDataScreenConfigService; +import com.ruoyi.system.service.TbDataScreenScoreService; import com.ruoyi.system.service.TbFieldService; +import com.ruoyi.system.service.TbOperLogService; import com.ruoyi.system.service.TbScoreService; import com.ruoyi.system.utils.FieldBuildUtil; import com.ruoyi.system.vo.BasicDataReportingVO; import com.ruoyi.system.vo.CurrentFieldsAllVO; import com.ruoyi.system.vo.CurrentFieldsDetailVO; import com.ruoyi.system.vo.CurrentFieldsVO; +import com.ruoyi.system.vo.DataScreenConfigVO; import com.ruoyi.system.vo.FieldsTreeVO; import com.ruoyi.system.vo.ScoreCalculateVO; import com.ruoyi.system.vo.ScoreVO; @@ -62,12 +73,12 @@ import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.concurrent.CompletableFuture; import java.util.function.Function; import java.util.stream.Collectors; import javax.servlet.http.HttpServletResponse; @@ -97,6 +108,9 @@ private final TbBasicDataConfigDetailService tbBasicDataConfigDetailService; private final TbScoreService tbScoreService; private final ISysUserService sysUserService; + private final TbOperLogService tbOperLogService; + private final TbDataScreenScoreService tbDataScreenScoreService; + private final TbDataScreenConfigService tbDataScreenConfigService; public static void setFieldValues( List<FieldsTreeVO> fields, Map<Long, TbBasicDataField> fieldMap) { @@ -204,20 +218,35 @@ 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 = - BeanUtils.copyList(dto.getFields(), TbBasicDataField.class); // 查询需要填写的动态字段 List<TbField> fieldList = tbFieldService.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list(); Map<Long, TbField> fieldMap = fieldList.stream().collect(Collectors.toMap(TbField::getId, e -> e)); + Optional<TbBasicData> basicDataOpt = this.lambdaQuery() + .eq(TbBasicData::getDeptAreaCode, areaCode) + .eq(TbBasicData::getQuarter, nowQuarter).oneOpt(); + TbBasicData tbBasicData = BeanUtils.copyBean(dto, TbBasicData.class); + if (basicDataOpt.isPresent()) { + tbBasicData.setId(basicDataOpt.get().getId()); + this.updateById(tbBasicData); + //查询该基础数据的动态字端 + List<TbBasicDataField> originFields = tbBasicDataFieldService.lambdaQuery() + .eq(TbBasicDataField::getBasicDataId, tbBasicData.getId()).list(); + CompletableFuture.runAsync( + () -> saveExchangeLog(loginUser, basicDataOpt.get(), originFields, dto, + fieldMap)); + } else { + tbBasicData.setDeptAreaCode(areaCode); + tbBasicData.setStatus(ReportingStatusEnum.MISSING_DATA); + tbBasicData.setQuarter(nowQuarter); + tbBasicData.setReportingTime(DateUtils.getQuarterDate(nowQuarter)); + this.save(tbBasicData); + } + // 保存基础数据动态字段数据 + List<TbBasicDataField> tbBasicDataFields = + BeanUtils.copyList(dto.getFields(), TbBasicDataField.class); + tbBasicDataFields.forEach( item -> { item.setBasicDataId(tbBasicData.getId()); @@ -262,12 +291,116 @@ this.updateById(tbBasicData); } if (ReportingStatusEnum.FILLED.equals(tbBasicData.getStatus())) { - calculateScore(tbBasicData); + calculateScore(tbBasicData, tbBasicDataFields); + CompletableFuture.runAsync(() -> calculateScreenScore(tbBasicData, tbBasicDataFields)); } } + private void calculateScreenScore(TbBasicData tbBasicData, + List<TbBasicDataField> tbBasicDataFields) { + Map<Long, TbBasicDataField> basicDataFieldMap = tbBasicDataFields.stream() + .collect(Collectors.toMap(TbBasicDataField::getFieldId, e -> e)); + DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel(); + List<DataScreenConfigVO> dataIndicatorsConfig = tbDataScreenConfigService.getIndicatorsConfig( + DataScreenConfigEnum.DATA_INDICATORS); + List<DataScreenConfigVO> formalIndicatorsConfig = tbDataScreenConfigService.getIndicatorsConfig( + DataScreenConfigEnum.FORMAL_INDICATORS); + handleScoreCalculate(tbBasicData, riskLevel, basicDataFieldMap); + for (DataScreenConfigVO config : dataIndicatorsConfig) { + handleScoreCalculate(tbBasicData, config, basicDataFieldMap); + } + for (DataScreenConfigVO config : formalIndicatorsConfig) { + handleScoreCalculate(tbBasicData, config, basicDataFieldMap); + } + } + + private void handleScoreCalculate(TbBasicData tbBasicData, DataScreenConfigVO riskLevel, + Map<Long, TbBasicDataField> basicDataFieldMap) { + List<CalculateItemDTO> scoreCalculateList = riskLevel.getScoreCalculateList(); + for (CalculateItemDTO item : scoreCalculateList) { + if (item.getValueType().equals(ValueTypeEnum.FIELD)) { + TbBasicDataField basicDataField = basicDataFieldMap.get( + Long.valueOf(item.getContent())); + if (Objects.nonNull(basicDataField)) { + item.setContent(basicDataField.getFieldValue()); + } + } + } + String calculateFormulaStr = scoreCalculateList.stream() + .map(CalculateItemDTO::getContent).collect(Collectors.joining()); + double score = CalculateUtil.calculate(calculateFormulaStr); + TbDataScreenScore tbDataScreenScore = new TbDataScreenScore(); + tbDataScreenScore.setDataScreenConfigId(riskLevel.getId()); + tbDataScreenScore.setDataScreenConfigId(riskLevel.getId()); + tbDataScreenScore.setDeptAreaCode(tbBasicData.getDeptAreaCode()); + tbDataScreenScore.setScore(score); + tbDataScreenScoreService.save(tbDataScreenScore); + } + + private void saveExchangeLog(LoginUser loginUser, TbBasicData tbBasicData, + List<TbBasicDataField> originFields, + BasicDataDTO dto, Map<Long, TbField> fieldMap) { + List<TbOperLog> tbOperlogList = new ArrayList<>(); + String transferPaymentScale = tbBasicData.getTransferPaymentScale(); + String currentGdp = tbBasicData.getCurrentGdp(); + String remark = tbBasicData.getRemark(); + String transferPaymentScaleEdit = dto.getTransferPaymentScale(); + String currentGdpEdit = dto.getCurrentGdp(); + String remarkEdit = dto.getRemark(); + if (!transferPaymentScale.equals(transferPaymentScaleEdit)) { + wrapOperLog(loginUser, tbBasicData, transferPaymentScale, transferPaymentScaleEdit, + tbOperlogList, "转移支付规模"); + } + if (!currentGdp.equals(currentGdpEdit)) { + wrapOperLog(loginUser, tbBasicData, currentGdp, currentGdpEdit, tbOperlogList, + "当期GDP"); + } + if (!remark.equals(remarkEdit)) { + wrapOperLog(loginUser, tbBasicData, remark, remarkEdit, tbOperlogList, "备注"); + } + Map<Long, TbBasicDataField> basicDataFieldMap = originFields.stream() + .collect(Collectors.toMap(TbBasicDataField::getFieldId, e -> e)); + for (BasicDataFieldDTO field : dto.getFields()) { + TbBasicDataField tbBasicDataField = basicDataFieldMap.get(field.getFieldId()); + TbField tbField = fieldMap.get(field.getFieldId()); + if (Objects.nonNull(tbBasicDataField) && Objects.nonNull(tbField) + && !tbBasicDataField.getFieldValue().equals(field.getFieldValue())) { + String levelOneCategory = tbField.getLevelOneCategory(); + String levelTwoCategory = tbField.getLevelTwoCategory(); + String levelThreeCategory = tbField.getLevelThreeCategory(); + String fieldName = tbField.getFieldName(); + StringBuilder result = new StringBuilder(); + result.append(levelOneCategory).append("-"); + if (StringUtils.isNotBlank(levelTwoCategory)) { + result.append(levelTwoCategory).append("-"); + if (StringUtils.isNotBlank(levelThreeCategory)) { + result.append(levelThreeCategory).append("-").append(fieldName); + } else { + result.append(fieldName); + } + } else { + result.append(field); + } + wrapOperLog(loginUser, tbBasicData, tbBasicDataField.getFieldValue(), + field.getFieldValue(), tbOperlogList, result.toString()); + } + } + } + + private static void wrapOperLog(LoginUser loginUser, TbBasicData tbBasicData, String before, + String after, List<TbOperLog> tbOperlogList, String fieldName) { + TbOperLog tbOperLog = new TbOperLog(); + tbOperLog.setOperation(tbBasicData.getQuarter()); + tbOperLog.setStaffName(loginUser.getUser().getNickName()); + tbOperLog.setAreaName(loginUser.getUser().getAreaName()); + tbOperLog.setFieldName(fieldName); + tbOperLog.setBusinessType(BusinessType.UPDBASICDATA.ordinal()); + tbOperLog.setBeforeEdit(before); + tbOperLog.setAfterEdit(after); + tbOperlogList.add(tbOperLog); + } + @Override - @Transactional(rollbackFor = Exception.class) public void importBasicData(MultipartFile file) throws Exception { LoginUser loginUser = SecurityUtils.getLoginUser(); String areaCode = loginUser.getUser().getAreaCode(); @@ -285,14 +418,14 @@ .doRead(); } - private void calculateScore(TbBasicData tbBasicData) { + private void calculateScore(TbBasicData tbBasicData, List<TbBasicDataField> fields) { // 计算得分 List<TbBasicDataConfig> list = tbBasicDataConfigService .lambdaQuery() .eq(TbBasicDataConfig::getStatus, ShowStatusEnum.SHOW) .list(); - if (CollectionUtils.isEmpty(list)) { + if (CollUtils.isEmpty(list)) { throw new ServiceException("计算得分失败,平台未配置得分计算规则"); } List<TbBasicDataConfig> numCalculates = @@ -303,36 +436,33 @@ list.stream() .filter(item -> !CalculateTypeEnum.NUMBER.equals(item.getCalculateType())) .collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(numCalculates)) { - numCalculates.forEach( - item -> { - Map<String, Object> valueMap = new HashMap<>(); - String numberCalculateFormula = item.getNumberCalculateFormula(); - Map<String, Integer> fieldsAndValue = - CalculateUtil.getFieldsAndValue(numberCalculateFormula); - for (Map.Entry<String, Integer> stringIntegerEntry : fieldsAndValue.entrySet()) { - Optional<TbBasicDataField> tbBasicDataField = - tbBasicDataFieldService - .lambdaQuery() - .eq(TbBasicDataField::getBasicDataId, - tbBasicData.getId()) - .eq(TbBasicDataField::getFieldId, - stringIntegerEntry.getValue()) - .oneOpt(); - tbBasicDataField.ifPresent( - basicDataField -> - valueMap.put(stringIntegerEntry.getKey(), - basicDataField.getFieldValue())); + Map<Long, TbBasicDataField> basicDataFieldMap = fields.stream() + .collect(Collectors.toMap(TbBasicDataField::getFieldId, e -> e)); + if (CollUtils.isNotEmpty(numCalculates)) { + for (TbBasicDataConfig item : numCalculates) { + String numberCalculateFormula = item.getNumberCalculateFormula(); + List<CalculateItemDTO> calculateItemDTOS = JSONArray.parseArray( + numberCalculateFormula, CalculateItemDTO.class); + for (CalculateItemDTO dto : calculateItemDTOS) { + if (ValueTypeEnum.FIELD.equals(dto.getValueType())) { + TbBasicDataField tbBasicDataField = basicDataFieldMap.get( + Long.valueOf(dto.getContent())); + if (Objects.nonNull(tbBasicDataField)) { + dto.setContent(tbBasicDataField.getFieldValue()); } - double score = CalculateUtil.calculate(numberCalculateFormula, valueMap); - TbScore tbScore = new TbScore(); - tbScore.setBasicDataId(tbBasicData.getId()); - tbScore.setScore(score); - tbScore.setBasicDataConfigId(item.getId()); - tbScoreService.save(tbScore); - }); + } + } + String numberCalculateFormulaStr = calculateItemDTOS.stream() + .map(CalculateItemDTO::getContent).collect(Collectors.joining()); + double score = CalculateUtil.calculate(numberCalculateFormulaStr); + TbScore tbScore = new TbScore(); + tbScore.setBasicDataId(tbBasicData.getId()); + tbScore.setScore(score); + tbScore.setBasicDataConfigId(item.getId()); + tbScoreService.save(tbScore); + } } - if (CollectionUtils.isNotEmpty(textAndPercentages)) { + if (CollUtils.isNotEmpty(textAndPercentages)) { for (TbBasicDataConfig textAndPercentage : textAndPercentages) { TbScore tbScore = new TbScore(); List<TbBasicDataConfigDetail> details = @@ -347,18 +477,12 @@ Collectors.toMap( TbBasicDataConfigDetail::getKey, TbBasicDataConfigDetail::getValue)); - if (CollectionUtils.isNotEmpty(details)) { - Optional<TbBasicDataField> tbBasicDataFieldOptional = - tbBasicDataFieldService - .lambdaQuery() - .eq(TbBasicDataField::getBasicDataId, tbBasicData.getId()) - .eq(TbBasicDataField::getFieldId, - textAndPercentage.getFieldIdStr()) - .oneOpt(); - if (tbBasicDataFieldOptional.isPresent()) { - TbBasicDataField tbBasicDataField = tbBasicDataFieldOptional.get(); + if (CollUtils.isNotEmpty(details)) { + TbBasicDataField textAndPercentageData = basicDataFieldMap.get( + Long.valueOf(textAndPercentage.getFieldIdStr())); + if (Objects.nonNull(textAndPercentageData)) { if (CalculateTypeEnum.TEXT.equals(textAndPercentage.getCalculateType())) { - String score = scoreMap.get(tbBasicDataField.getFieldValue()); + String score = scoreMap.get(textAndPercentageData.getFieldValue()); tbScore.setBasicDataId(tbBasicData.getId()); tbScore.setScore(Double.parseDouble(score)); tbScore.setBasicDataConfigId(textAndPercentage.getId()); @@ -368,7 +492,8 @@ textAndPercentage.getCalculateType())) { for (Map.Entry<String, String> stringStringEntry : scoreMap.entrySet()) { String[] split = stringStringEntry.getKey().split("-"); - double v = Double.parseDouble(tbBasicDataField.getFieldValue()); + double v = Double.parseDouble( + textAndPercentageData.getFieldValue()); double min = Double.parseDouble(split[0]); double max = Double.parseDouble(split[1]); if (v >= min && v <= max) { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenConfigServiceImpl.java index cec2e79..337cd97 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenConfigServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenConfigServiceImpl.java @@ -1,18 +1,28 @@ package com.ruoyi.system.service.impl; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.enums.DataScreenConfigEnum; +import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.BeanUtils; +import com.ruoyi.common.utils.CalculateUtil; +import com.ruoyi.common.utils.Checker; +import com.ruoyi.common.utils.CollUtils; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.TbDataScreenConfig; +import com.ruoyi.system.dto.CalculateItemDTO; 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 java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.IntStream; +import javax.validation.constraints.NotNull; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -34,28 +44,95 @@ TbDataScreenConfig tbDataScreenConfig = this.lambdaQuery() .eq(TbDataScreenConfig::getType, DataScreenConfigEnum.RISK_LEVEL) .one(); - return Objects.nonNull(tbDataScreenConfig) ? BeanUtils.copyBean(tbDataScreenConfig, - DataScreenConfigVO.class) : new DataScreenConfigVO(); + if (Objects.isNull(tbDataScreenConfig)) { + return new DataScreenConfigVO(); + } + DataScreenConfigVO vo = BeanUtils.copyBean(tbDataScreenConfig, + DataScreenConfigVO.class); + List<CalculateItemDTO> scoreCalculateList = JSONArray.parseArray( + tbDataScreenConfig.getCalculateFormula(), + CalculateItemDTO.class); + vo.setScoreCalculateList(scoreCalculateList); + return vo; } @Override @Transactional(rollbackFor = Exception.class) public DataScreenConfigVO editRiskLevel(RiskLevelUpdDTO dto) { + if (dto.areRiskLevelsDistinct()) { + throw new ServiceException("得分范围不能重叠"); + } //查询是否有该指标配置 TbDataScreenConfig tbDataScreenConfig = this.lambdaQuery() .eq(TbDataScreenConfig::getType, DataScreenConfigEnum.RISK_LEVEL) .oneOpt().orElseGet(() -> BeanUtils.copyBean(dto, TbDataScreenConfig.class)); + List<CalculateItemDTO> calculateItemList = dto.getCalculateItemList(); + validateCalculateItemList(calculateItemList); + String numberCalculateFormulaJsonStr = JSON.toJSONString(calculateItemList); + tbDataScreenConfig.setCalculateFormula(numberCalculateFormulaJsonStr); tbDataScreenConfig.setType(DataScreenConfigEnum.RISK_LEVEL); this.saveOrUpdate(tbDataScreenConfig); - return BeanUtils.copyBean(tbDataScreenConfig, DataScreenConfigVO.class); + DataScreenConfigVO dataScreenConfigVO = BeanUtils.copyBean(tbDataScreenConfig, + DataScreenConfigVO.class); + dataScreenConfigVO.setRateCalculateList(calculateItemList); + return dataScreenConfigVO; + } + + private void validateCalculateItemList(List<CalculateItemDTO> calculateItemList) { + if (CollUtils.isEmpty(calculateItemList)) { + throw new ServiceException("计算公式不能为空"); + } + CollUtils.check(calculateItemList, new Checker<CalculateItemDTO>() { + @Override + public void check(CalculateItemDTO data) { + if (Objects.isNull(data.getValueType())) { + throw new ServiceException("基础数据配置计算规则值类型不能为空"); + } + if (StringUtils.isBlank(data.getContent())) { + throw new ServiceException("基础数据配置计算规则值内容不能为空"); + } + } + }); + boolean result = hasConsecutiveDuplicates(calculateItemList); + if (result) { + throw new ServiceException("计算表达式有误,请修改"); + } + //参数校验 + String numberCalculateFormulaStr = calculateItemList.stream() + .map(CalculateItemDTO::getContent) + .collect(Collectors.joining()); + //校验表达式是否正确 + try { + CalculateUtil.calculate(numberCalculateFormulaStr); + } catch (Exception e) { + throw new ServiceException("计算表达式有误,请修改"); + } + } + + public boolean hasConsecutiveDuplicates(List<CalculateItemDTO> calculateItemList) { + return IntStream.range(1, calculateItemList.size()) + .anyMatch(i -> calculateItemList.get(i - 1).getValueType() + .equals(calculateItemList.get(i).getValueType())); } @Override - public List<DataScreenConfigVO> getIndicatorsConfig(DataScreenConfigQuery query) { + public List<DataScreenConfigVO> getIndicatorsConfig(@NotNull DataScreenConfigEnum type) { List<TbDataScreenConfig> list = this.lambdaQuery() - .eq(TbDataScreenConfig::getType, query.getType()).list(); - return BeanUtils.copyList(list, DataScreenConfigVO.class); + .eq(TbDataScreenConfig::getType, type).list(); + return list.stream().map(item -> { + DataScreenConfigVO vo = BeanUtils.copyBean(item, + DataScreenConfigVO.class); + List<CalculateItemDTO> scoreCalculateList = JSONArray.parseArray( + item.getCalculateFormula(), + CalculateItemDTO.class); + vo.setScoreCalculateList(scoreCalculateList); + List<CalculateItemDTO> rateCalculateList = JSONArray.parseArray( + item.getCalculateRateFormula(), + CalculateItemDTO.class); + vo.setRateCalculateList(rateCalculateList); + return vo; + }).collect(Collectors.toList()); } @Override @@ -67,9 +144,21 @@ .eq(TbDataScreenConfig::getSubType, dto.getSubType()).oneOpt().orElseGet(() -> BeanUtils.copyBean(dto, TbDataScreenConfig.class)); + List<CalculateItemDTO> scoreCalculateList = dto.getScoreCalculateList(); + List<CalculateItemDTO> rateCalculateList = dto.getRateCalculateList(); + validateCalculateItemList(scoreCalculateList); + validateCalculateItemList(rateCalculateList); + String scoreCalculateFormulaJsonStr = JSON.toJSONString(scoreCalculateList); + tbDataScreenConfig.setCalculateFormula(scoreCalculateFormulaJsonStr); + String rateCalculateFormulaJsonStr = JSON.toJSONString(rateCalculateList); + tbDataScreenConfig.setCalculateRateFormula(rateCalculateFormulaJsonStr); tbDataScreenConfig.setType(DataScreenConfigEnum.DATA_INDICATORS); this.saveOrUpdate(tbDataScreenConfig); - return BeanUtils.copyBean(tbDataScreenConfig, DataScreenConfigVO.class); + DataScreenConfigVO dataScreenConfigVO = BeanUtils.copyBean(tbDataScreenConfig, + DataScreenConfigVO.class); + dataScreenConfigVO.setScoreCalculateList(scoreCalculateList); + dataScreenConfigVO.setRateCalculateList(rateCalculateList); + return dataScreenConfigVO; } @Override @@ -82,7 +171,14 @@ dto.getSubType()).oneOpt().orElseGet(() -> BeanUtils.copyBean(dto, TbDataScreenConfig.class)); tbDataScreenConfig.setType(DataScreenConfigEnum.FORMAL_INDICATORS); + List<CalculateItemDTO> calculateItemList = dto.getCalculateItemList(); + validateCalculateItemList(calculateItemList); + String calculateFormulaJsonStr = JSON.toJSONString(calculateItemList); + tbDataScreenConfig.setCalculateFormula(calculateFormulaJsonStr); this.saveOrUpdate(tbDataScreenConfig); - return BeanUtils.copyBean(tbDataScreenConfig, DataScreenConfigVO.class); + DataScreenConfigVO dataScreenConfigVO = BeanUtils.copyBean(tbDataScreenConfig, + DataScreenConfigVO.class); + dataScreenConfigVO.setScoreCalculateList(calculateItemList); + return dataScreenConfigVO; } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenScoreServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenScoreServiceImpl.java new file mode 100644 index 0000000..7dc40e2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbDataScreenScoreServiceImpl.java @@ -0,0 +1,22 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.system.domain.TbDataScreenScore; +import com.ruoyi.system.mapper.TbDataScreenScoreMapper; +import com.ruoyi.system.service.TbDataScreenScoreService; +import org.springframework.stereotype.Service; + +/** + * <p> + * 大屏得分表 服务实现类 + * </p> + * + * @author mitao + * @since 2024-04-15 + */ +@Service +public class TbDataScreenScoreServiceImpl extends + ServiceImpl<TbDataScreenScoreMapper, TbDataScreenScore> implements + TbDataScreenScoreService { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldCategoryServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldCategoryServiceImpl.java index 2f6d1f9..52dc2e2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldCategoryServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldCategoryServiceImpl.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageDTO; @@ -10,6 +11,7 @@ import com.ruoyi.common.utils.BeanUtils; import com.ruoyi.common.utils.CollUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.TbField; import com.ruoyi.system.domain.TbFieldCategory; import com.ruoyi.system.dto.FieldCategoryDTO; import com.ruoyi.system.dto.ShowHideDTO; @@ -17,14 +19,17 @@ import com.ruoyi.system.mapper.TbFieldCategoryMapper; import com.ruoyi.system.query.FieldCategoryQuery; import com.ruoyi.system.service.TbFieldCategoryService; +import com.ruoyi.system.service.TbFieldService; import com.ruoyi.system.vo.FieldCategoryDetailVO; import com.ruoyi.system.vo.FieldCategoryVO; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - import java.util.List; import java.util.Objects; +import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; /** * <p> @@ -34,8 +39,13 @@ * @author mitao * @since 2024-03-13 */ +@Slf4j @Service -public class TbFieldCategoryServiceImpl extends ServiceImpl<TbFieldCategoryMapper, TbFieldCategory> implements TbFieldCategoryService { +@RequiredArgsConstructor +public class TbFieldCategoryServiceImpl extends + ServiceImpl<TbFieldCategoryMapper, TbFieldCategory> implements TbFieldCategoryService { + + private final TbFieldService tbFieldService; @Override public void add(FieldCategoryDTO dto) { @@ -47,7 +57,7 @@ //二级分类 List<FieldCategoryDTO> children = dto.getChildren(); if (!CollectionUtils.isEmpty(children)) { - children.forEach(item->{ + children.forEach(item -> { TbFieldCategory twoCategory = new TbFieldCategory(); twoCategory.setParentId(oneCategory.getId()); twoCategory.setFieldCategoryName(item.getFieldCategoryName()); @@ -55,7 +65,7 @@ //三级分类 List<FieldCategoryDTO> next = item.getChildren(); if (!CollectionUtils.isEmpty(next)) { - next.forEach(nextItem->{ + next.forEach(nextItem -> { TbFieldCategory threeCategory = new TbFieldCategory(); threeCategory.setParentId(twoCategory.getId()); threeCategory.setFieldCategoryName(nextItem.getFieldCategoryName()); @@ -69,8 +79,10 @@ @Override public PageDTO<FieldCategoryVO> queryPage(FieldCategoryQuery query) { Page<TbFieldCategory> page = this.lambdaQuery() - .like(StringUtils.isNotBlank(query.getFieldCategoryName()), TbFieldCategory::getFieldCategoryName, query.getFieldCategoryName()) - .eq(ObjectUtils.isNotEmpty(query.getStatus()), TbFieldCategory::getStatus, query.getStatus()) + .like(StringUtils.isNotBlank(query.getFieldCategoryName()), + TbFieldCategory::getFieldCategoryName, query.getFieldCategoryName()) + .eq(ObjectUtils.isNotEmpty(query.getStatus()), TbFieldCategory::getStatus, + query.getStatus()) .eq(TbFieldCategory::getParentId, 0) .orderByDesc(TbFieldCategory::getCreateTime) .page(new Page<>(query.getPageNum(), query.getPageSize())); @@ -92,9 +104,11 @@ .eq(TbFieldCategory::getId, id) .set(TbFieldCategory::getStatus, status) .update(); - List<TbFieldCategory> children = this.lambdaQuery().eq(TbFieldCategory::getParentId, category.getId()).list(); + List<TbFieldCategory> children = this.lambdaQuery() + .eq(TbFieldCategory::getParentId, category.getId()).list(); if (CollUtils.isNotEmpty(children)) { - List<Long> childIds = children.stream().map(TbFieldCategory::getId).collect(Collectors.toList()); + List<Long> childIds = children.stream().map(TbFieldCategory::getId) + .collect(Collectors.toList()); childIds.forEach(childId -> updateCategoryAndChildren(childId, status)); } } @@ -106,9 +120,11 @@ TbFieldCategory category = this.getById(id); if (Objects.nonNull(category)) { //查询是否有三级分类 - List<TbFieldCategory> threeCategoryList = this.lambdaQuery().eq(TbFieldCategory::getParentId, id).list(); + List<TbFieldCategory> threeCategoryList = this.lambdaQuery() + .eq(TbFieldCategory::getParentId, id).list(); if (CollectionUtils.isNotEmpty(threeCategoryList)) { - List<Long> ids = threeCategoryList.stream().map(TbFieldCategory::getId).collect(Collectors.toList()); + List<Long> ids = threeCategoryList.stream().map(TbFieldCategory::getId) + .collect(Collectors.toList()); //删除该二级分类下面的三级分类 this.removeByIds(ids); } @@ -123,13 +139,17 @@ //一级分类 validateParam(id); //查询是否有二级分类 - List<TbFieldCategory> threeCategoryList = this.lambdaQuery().eq(TbFieldCategory::getParentId, id).list(); + List<TbFieldCategory> threeCategoryList = this.lambdaQuery() + .eq(TbFieldCategory::getParentId, id).list(); if (CollectionUtils.isNotEmpty(threeCategoryList)) { - List<Long> ids = threeCategoryList.stream().map(TbFieldCategory::getId).collect(Collectors.toList()); + List<Long> ids = threeCategoryList.stream().map(TbFieldCategory::getId) + .collect(Collectors.toList()); //查询三级分类 - List<TbFieldCategory> list = this.lambdaQuery().in(TbFieldCategory::getParentId, ids).list(); + List<TbFieldCategory> list = this.lambdaQuery().in(TbFieldCategory::getParentId, ids) + .list(); if (CollectionUtils.isNotEmpty(list)) { - List<Long> ids1 = list.stream().map(TbFieldCategory::getId).collect(Collectors.toList()); + List<Long> ids1 = list.stream().map(TbFieldCategory::getId) + .collect(Collectors.toList()); //删除三级分类 this.removeByIds(ids1); } @@ -149,37 +169,82 @@ } @Override + @Transactional(rollbackFor = Exception.class) public void edit(FieldCategoryUpdateDTO dto) { + log.info("主线程名{}", Thread.currentThread().getName()); validateParam(dto.getId()); //更新一级分类 - updateCategory(dto); + TbFieldCategory category1 = updateCategory(dto, null); + CompletableFuture.runAsync(() -> handleFieldCategory(category1)); List<FieldCategoryUpdateDTO> children = dto.getChildren(); //更新二级分类 - if (!CollectionUtils.isEmpty(children)) { - children.forEach(item->{ - updateCategory(item); + if (CollUtils.isNotEmpty(children)) { + children.forEach(item -> { + //二级分类 + TbFieldCategory category2 = updateCategory(item, category1); + CompletableFuture.runAsync(() -> handleFieldCategory(category2)); //三级分类 List<FieldCategoryUpdateDTO> next = item.getChildren(); if (!CollectionUtils.isEmpty(next)) { - next.forEach(this::updateCategory); + for (FieldCategoryUpdateDTO fieldCategoryUpdateDTO : next) { + TbFieldCategory category3 = updateCategory(fieldCategoryUpdateDTO, + category2); + CompletableFuture.runAsync(() -> handleFieldCategory(category3)); + } } }); } } - private void updateCategory(FieldCategoryUpdateDTO dto) { - if (dto == null) return; - this.lambdaUpdate() - .set(TbFieldCategory::getFieldCategoryName, dto.getFieldCategoryName()) - .set(Objects.nonNull(dto.getSortOrder()),TbFieldCategory::getSortOrder, dto.getSortOrder()) - .eq(TbFieldCategory::getId, dto.getId()) - .update(); + protected void handleFieldCategory(TbFieldCategory category) { + log.info("开始处理字段分类名称同步,线程名{}", Thread.currentThread().getName()); + //查询使用到该分类的字段 + List<TbField> list1 = tbFieldService.list(Wrappers.<TbField>lambdaQuery() + .eq(TbField::getLevelOneCategoryId, category.getId())); + if (CollUtils.isNotEmpty(list1)) { + List<TbField> fieldList = list1.stream().peek(item -> { + item.setLevelOneCategoryId(category.getId()); + item.setLevelOneCategory(category.getFieldCategoryName()); + }).collect(Collectors.toList()); + tbFieldService.updateBatchById(fieldList); + } + List<TbField> list2 = tbFieldService.list(Wrappers.<TbField>lambdaQuery() + .eq(TbField::getLevelTwoCategoryId, category.getId())); + if (CollUtils.isNotEmpty(list2)) { + List<TbField> fieldList = list2.stream().peek(item -> { + item.setLevelTwoCategoryId(category.getId()); + item.setLevelTwoCategory(category.getFieldCategoryName()); + }).collect(Collectors.toList()); + tbFieldService.updateBatchById(fieldList); + } + List<TbField> list3 = tbFieldService.list(Wrappers.<TbField>lambdaQuery() + .eq(TbField::getLevelThreeCategoryId, category.getId())); + if (CollUtils.isNotEmpty(list2)) { + List<TbField> fieldList = list3.stream().peek(item -> { + item.setLevelThreeCategoryId(category.getParentId()); + item.setLevelThreeCategory(category.getFieldCategoryName()); + }).collect(Collectors.toList()); + tbFieldService.updateBatchById(fieldList); + } + } + + private TbFieldCategory updateCategory(FieldCategoryUpdateDTO dto, + TbFieldCategory parent) { + TbFieldCategory category = BeanUtils.copyBean(dto, TbFieldCategory.class); + if (Objects.isNull(dto.getId()) && Objects.nonNull(parent)) { + assert category != null; + category.setParentId(parent.getId()); + this.save(category); + } else { + this.updateById(category); + } + return category; } @Override public List<FieldCategoryVO> queryFieldCategories(Long id) { List<TbFieldCategory> list = this.lambdaQuery() - .select(TbFieldCategory::getId,TbFieldCategory::getFieldCategoryName) + .select(TbFieldCategory::getId, TbFieldCategory::getFieldCategoryName) .eq(TbFieldCategory::getParentId, id) .eq(TbFieldCategory::getStatus, ShowStatusEnum.SHOW) .list(); @@ -194,14 +259,18 @@ } FieldCategoryDetailVO vo = BeanUtils.copyBean(oneCategory, FieldCategoryDetailVO.class); //根据一级分类id,查询二级分类 - List<TbFieldCategory> twoCategoryList = this.lambdaQuery().eq(TbFieldCategory::getParentId, oneCategory.getId()).list(); - twoCategoryList.forEach(item->{ - FieldCategoryDetailVO twoCategoryVO = BeanUtils.copyBean(item, FieldCategoryDetailVO.class); + List<TbFieldCategory> twoCategoryList = this.lambdaQuery() + .eq(TbFieldCategory::getParentId, oneCategory.getId()).list(); + twoCategoryList.forEach(item -> { + FieldCategoryDetailVO twoCategoryVO = BeanUtils.copyBean(item, + FieldCategoryDetailVO.class); vo.getChildren().add(twoCategoryVO); //根据二级分类id,查询三级分类 - List<TbFieldCategory> threeCategoryList = this.lambdaQuery().eq(TbFieldCategory::getParentId, item.getId()).list(); - threeCategoryList.forEach(threeCategory->{ - FieldCategoryDetailVO threeCategoryVO = BeanUtils.copyBean(threeCategory, FieldCategoryDetailVO.class); + List<TbFieldCategory> threeCategoryList = this.lambdaQuery() + .eq(TbFieldCategory::getParentId, item.getId()).list(); + threeCategoryList.forEach(threeCategory -> { + FieldCategoryDetailVO threeCategoryVO = BeanUtils.copyBean(threeCategory, + FieldCategoryDetailVO.class); twoCategoryVO.getChildren().add(threeCategoryVO); }); }); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java index 35b6d48..c9e235a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java @@ -29,12 +29,12 @@ import com.ruoyi.system.handler.CustomerHandler; import com.ruoyi.system.handler.SelectedSheetWriteHandler; import com.ruoyi.system.mapper.TbBasicDataMapper; +import com.ruoyi.system.mapper.TbFieldCategoryMapper; import com.ruoyi.system.mapper.TbFieldMapper; import com.ruoyi.system.query.FieldQuery; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.TbBasicDataConfigService; import com.ruoyi.system.service.TbBasicDataFieldService; -import com.ruoyi.system.service.TbFieldCategoryService; import com.ruoyi.system.service.TbFieldService; import com.ruoyi.system.utils.FieldBuildUtil; import com.ruoyi.system.vo.BasicDataFieldVO; @@ -69,7 +69,7 @@ public class TbFieldServiceImpl extends ServiceImpl<TbFieldMapper, TbField> implements TbFieldService { - private final TbFieldCategoryService tbFieldCategoryService; + private final TbFieldCategoryMapper tbFieldCategoryMapper; private final TbBasicDataConfigService tbBasicDataConfigService; private final TbBasicDataMapper tbBasicDataMapper; private final TbBasicDataFieldService tbBasicDataFieldService; @@ -90,14 +90,15 @@ } } TbField tbField = BeanUtils.copyBean(dto, TbField.class); - TbFieldCategory category1 = tbFieldCategoryService.getById(dto.getLevelOneCategoryId()); + TbFieldCategory category1 = tbFieldCategoryMapper.selectById(dto.getLevelOneCategoryId()); tbField.setLevelOneCategory(category1.getFieldCategoryName()); if (StringUtils.isNotNull(dto.getLevelTwoCategoryId())) { - TbFieldCategory category2 = tbFieldCategoryService.getById(dto.getLevelTwoCategoryId()); + TbFieldCategory category2 = tbFieldCategoryMapper.selectById( + dto.getLevelTwoCategoryId()); tbField.setLevelTwoCategory(category2.getFieldCategoryName()); } if (StringUtils.isNotNull(dto.getLevelThreeCategoryId())) { - TbFieldCategory category3 = tbFieldCategoryService.getById( + TbFieldCategory category3 = tbFieldCategoryMapper.selectById( dto.getLevelThreeCategoryId()); tbField.setLevelThreeCategory(category3.getFieldCategoryName()); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbOperLogServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbOperLogServiceImpl.java new file mode 100644 index 0000000..a23d286 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbOperLogServiceImpl.java @@ -0,0 +1,41 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.basic.PageDTO; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.TbOperLog; +import com.ruoyi.system.mapper.TbOperLogMapper; +import com.ruoyi.system.query.OperLogQuery; +import com.ruoyi.system.service.TbOperLogService; +import com.ruoyi.system.vo.OperLogVO; +import org.springframework.stereotype.Service; + +/** + * <p> + * 服务实现类 + * </p> + * + * @author mitao + * @since 2024-04-15 + */ +@Service +public class TbOperLogServiceImpl extends ServiceImpl<TbOperLogMapper, TbOperLog> implements + TbOperLogService { + + @Override + public PageDTO<OperLogVO> queryPage(OperLogQuery query) { + Page<TbOperLog> page = this.lambdaQuery() + .like(StringUtils.isNotBlank(query.getStaffName()), TbOperLog::getStaffName, + query.getStaffName()) + .like(StringUtils.isNotBlank(query.getPhoneNumber()), TbOperLog::getPhoneNumber, + query.getPhoneNumber()) + .like(StringUtils.isNotBlank(query.getAreaName()), TbOperLog::getAreaName, + query.getAreaName()) + .between(StringUtils.isNotBlank(query.getStartTime()) && StringUtils.isNotBlank( + query.getEndTime()), TbOperLog::getCreateTime, + query.getStartTime(), query.getEndTime()) + .page(new Page<>(query.getPageNum(), query.getPageSize())); + return PageDTO.of(page, OperLogVO.class); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataCategoryVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataCategoryVO.java index 0dc0df9..1a7b223 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataCategoryVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataCategoryVO.java @@ -3,16 +3,15 @@ import com.ruoyi.common.enums.ShowStatusEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - import java.io.Serializable; +import lombok.Data; /** * @author mitao * @date 2024/3/18 */ @Data -@ApiModel(value="基础数据分类视图对象") +@ApiModel(value = "基础数据分类视图对象") public class BasicDataCategoryVO implements Serializable { private static final long serialVersionUID = -1547151291021868164L; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/DataScreenConfigVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DataScreenConfigVO.java index 2fc30fa..c960474 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/DataScreenConfigVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DataScreenConfigVO.java @@ -2,8 +2,10 @@ import com.ruoyi.common.enums.DataScreenConfigEnum; import com.ruoyi.common.enums.SubTypeEnum; +import com.ruoyi.system.dto.CalculateItemDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import java.util.List; import lombok.Data; /** @@ -21,10 +23,10 @@ private DataScreenConfigEnum type; @ApiModelProperty(value = "得分计算规则") - private String calculateFormula; + private List<CalculateItemDTO> scoreCalculateList; @ApiModelProperty(value = "得分率计算规则") - private String calculateRateFormula; + private List<CalculateItemDTO> rateCalculateList; @ApiModelProperty(value = "配置类型子类型(1=指标一 2=指标二 3=指标三 4=指标四)") private SubTypeEnum subType; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldCategoryVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldCategoryVO.java index 41a0f0d..2cb7367 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldCategoryVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldCategoryVO.java @@ -3,16 +3,15 @@ import com.ruoyi.common.enums.ShowStatusEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - import java.io.Serializable; +import lombok.Data; /** * @author mitao * @date 2024/3/14 */ @Data -@ApiModel(value="字段分类视图对象") +@ApiModel(value = "字段分类视图对象") public class FieldCategoryVO implements Serializable { private static final long serialVersionUID = 6367532315341833784L; @@ -26,4 +25,7 @@ @ApiModelProperty(value = "分类名称") private String fieldCategoryName; + + @ApiModelProperty(value = "排序") + private Integer sortOrder; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/OperLogVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/OperLogVO.java new file mode 100644 index 0000000..f28f62f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/OperLogVO.java @@ -0,0 +1,49 @@ +package com.ruoyi.system.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; +import lombok.Data; + +/** + * @author mitao + * @date 2024/4/15 + */ +@Data +@ApiModel("操作日志视图对象") +public class OperLogVO { + + @ApiModelProperty(value = "主键id") + private Long id; + + @ApiModelProperty(value = "员工姓名") + private String staffName; + + @ApiModelProperty(value = "联系电话") + private String phoneNumber; + + @ApiModelProperty(value = "操作") + private String operation; + + @ApiModelProperty(value = "修改字段") + private String fieldName; + + @ApiModelProperty(value = "所属部门") + private String areaName; + + @ApiModelProperty(value = "修改前数据") + private String beforeEdit; + + @ApiModelProperty(value = "修改后数据") + private String afterEdit; + + @ApiModelProperty(value = "修改时间") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date createTime; + + @ApiModelProperty(value = "操作人") + @TableField("create_by") + private String createBy; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/SysUserVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/SysUserVO.java index 15cf0d2..2d18295 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/SysUserVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/SysUserVO.java @@ -1,21 +1,25 @@ package com.ruoyi.system.vo; -import com.ruoyi.common.core.domain.entity.SysUser; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; import lombok.Data; @Data @ApiModel(value = "账户列表VO") -public class SysUserVO extends SysUser { +public class SysUserVO implements Serializable { - @ApiModelProperty(value = "身份") - private Integer companyType; - @ApiModelProperty(value = "单位名称") - private String companyName; - @ApiModelProperty(value = "部门") - private String deptName; - @ApiModelProperty(value = "角色") + private static final long serialVersionUID = -852636474150556733L; + + @ApiModelProperty(value = "用户id") + private Long userId; + @ApiModelProperty(value = "员工姓名") + private String userName; + @ApiModelProperty(value = "联系电话") + private String phoneNumber; + @ApiModelProperty(value = "所属角色") private String roleName; + @ApiModelProperty(value = "所属角色ID") + private Integer roleId; } diff --git a/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml index c967d10..c7af506 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml @@ -1,117 +1,136 @@ <?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"> + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.system.mapper.SysOperLogMapper"> - <resultMap type="SysOperLog" id="SysOperLogResult"> - <id property="operId" column="oper_id" /> - <result property="title" column="title" /> - <result property="businessType" column="business_type" /> - <result property="method" column="method" /> - <result property="requestMethod" column="request_method" /> - <result property="operatorType" column="operator_type" /> - <result property="operName" column="oper_name" /> - <result property="deptName" column="dept_name" /> - <result property="operUrl" column="oper_url" /> - <result property="operIp" column="oper_ip" /> - <result property="operLocation" column="oper_location" /> - <result property="operParam" column="oper_param" /> - <result property="jsonResult" column="json_result" /> - <result property="status" column="status" /> - <result property="errorMsg" column="error_msg" /> - <result property="operTime" column="oper_time" /> - <result property="costTime" column="cost_time" /> - <result property="companyName" column="companyName" /> - <result property="roleName" column="roleName" /> - <result property="phoneNumber" column="phone_number" /> - <result property="userId" column="userId" /> - <result property="nickName" column="nickName" /> - </resultMap> + <resultMap type="SysOperLog" id="SysOperLogResult"> + <id property="operId" column="oper_id"/> + <result property="title" column="title"/> + <result property="businessType" column="business_type"/> + <result property="method" column="method"/> + <result property="requestMethod" column="request_method"/> + <result property="operatorType" column="operator_type"/> + <result property="operName" column="oper_name"/> + <result property="deptName" column="dept_name"/> + <result property="operUrl" column="oper_url"/> + <result property="operIp" column="oper_ip"/> + <result property="operLocation" column="oper_location"/> + <result property="operParam" column="oper_param"/> + <result property="jsonResult" column="json_result"/> + <result property="status" column="status"/> + <result property="errorMsg" column="error_msg"/> + <result property="operTime" column="oper_time"/> + <result property="costTime" column="cost_time"/> + </resultMap> - <sql id="selectOperLogVo"> - select oper_id, title, business_type, `method`, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, - json_result, status, error_msg, oper_time, cost_time,companyName,roleName,phoneNumber,userId,nickName - from sys_oper_log - </sql> - - <insert id="insertOperlog" parameterType="SysOperLog"> - insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, cost_time,companyName,roleName,phoneNumber,userId,nickName, oper_time) - values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, #{costTime},#{companyName},#{roleName},#{phoneNumber},#{userId},#{nickName}, sysdate()) - </insert> - - <select id="selectOperLogList" parameterType="SysOperLog" resultMap="SysOperLogResult"> - <include refid="selectOperLogVo"/> - <where> - <if test="operIp != null and operIp != ''"> - AND oper_ip like concat('%', #{operIp}, '%') - </if> - <if test="title != null and title != ''"> - AND title like concat('%', #{title}, '%') - </if> - <if test="businessType != null"> - AND business_type = #{businessType} - </if> - <if test="businessTypes != null and businessTypes.length > 0"> - AND business_type in - <foreach collection="businessTypes" item="businessType" open="(" separator="," close=")"> - #{businessType} - </foreach> - </if> - <if test="status != null"> - AND status = #{status} - </if> - <if test="operName != null and operName != ''"> - AND oper_name like concat('%', #{operName}, '%') - </if> - <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 --> - AND oper_time >= #{params.beginTime} - </if> - <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 --> - AND oper_time <= #{params.endTime} - </if> - </where> - order by oper_id desc - </select> - - <delete id="deleteOperLogByIds" parameterType="Long"> - delete from sys_oper_log where oper_id in - <foreach collection="operIds" item="operId" open="(" separator="," close=")"> - #{operId} - </foreach> - </delete> - - <select id="selectOperLogById" parameterType="Long" resultMap="SysOperLogResult"> - <include refid="selectOperLogVo"/> - where oper_id = #{operId} - </select> - <select id="selectOperLogPageList" resultType="com.ruoyi.system.vo.SysOperLogVO"> - select sol.oper_id AS operId, sol.title AS title, sol.business_type AS businessType, sol.`method` AS method, sol.request_method AS requestMethod, - sol.operator_type AS operatorType,sol.oper_name AS operName,sol.dept_name AS deptName, sol.oper_url AS operUrl, sol.oper_ip AS operIp, - sol.oper_location AS operLocation, sol.oper_param AS operLocation,sol.json_result AS jsonResult, sol.status AS status,sol.error_msg AS errorMsg, - sol.oper_time AS operTime, sol.cost_time AS costTime,sol.companyName AS companyName,sol.roleName AS roleName,sol.phoneNumber AS phoneNumber, - sol.userId AS userId,sol.nickName AS nickName - from sys_oper_log sol - <where> - <if test="query.companyName != null and query.companyName != ''"> - AND sol.companyName LIKE concat('%',#{query.companyName},'%') - </if> - <if test="query.roleName != null and query.roleName != ''"> - AND sol.roleName LIKE concat('%',#{query.roleName},'%') - </if> - <if test="query.nickName != null and query.nickName != ''"> - AND sol.nickName LIKE concat('%',#{query.nickName},'%') - </if> - <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''"> - AND DATE_FORMAT(sol.oper_time, '%Y-%m-%d %H:%i:%s') >= #{query.startTime} - AND DATE_FORMAT(sol.oper_time, '%Y-%m-%d %H:%i:%s') <= #{query.endTime} - </if> - </where> - ORDER BY sol.oper_time DESC - </select> + <sql id="selectOperLogVo"> + select oper_id, + title, + business_type, + `method`, + request_method, + operator_type, + oper_name, + dept_name, + oper_url, + oper_ip, + oper_location, + oper_param, + json_result, + status, + error_msg, + oper_time, + cost_time + from sys_oper_log + </sql> - <update id="cleanOperLog"> - truncate table sys_oper_log - </update> + <insert id="insertOperlog" parameterType="com.ruoyi.system.domain.SysOperLog"> + insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, + dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, + status, error_msg, cost_time, oper_time) + values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, + #{deptName}, #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, + #{status}, #{errorMsg}, #{costTime}, sysdate()) + </insert> + + <select id="selectOperLogList" parameterType="SysOperLog" resultMap="SysOperLogResult"> + <include refid="selectOperLogVo"/> + <where> + <if test="operIp != null and operIp != ''"> + AND oper_ip like concat('%', #{operIp}, '%') + </if> + <if test="title != null and title != ''"> + AND title like concat('%', #{title}, '%') + </if> + <if test="businessType != null"> + AND business_type = #{businessType} + </if> + <if test="businessTypes != null and businessTypes.length > 0"> + AND business_type in + <foreach collection="businessTypes" item="businessType" open="(" separator="," close=")"> + #{businessType} + </foreach> + </if> + <if test="status != null"> + AND status = #{status} + </if> + <if test="operName != null and operName != ''"> + AND oper_name like concat('%', #{operName}, '%') + </if> + <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 --> + AND oper_time >= #{params.beginTime} + </if> + <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 --> + AND oper_time <= #{params.endTime} + </if> + </where> + order by oper_id desc + </select> + + <delete id="deleteOperLogByIds" parameterType="Long"> + delete from sys_oper_log where oper_id in + <foreach collection="operIds" item="operId" open="(" separator="," close=")"> + #{operId} + </foreach> + </delete> + + <select id="selectOperLogById" parameterType="Long" resultMap="SysOperLogResult"> + <include refid="selectOperLogVo"/> + where oper_id = #{operId} + </select> + <select id="selectOperLogPageList" resultType="com.ruoyi.system.vo.SysOperLogVO"> + select sol.oper_id AS operId, sol.title AS title, sol.business_type AS businessType, + sol.`method` AS method, sol.request_method AS requestMethod, + sol.operator_type AS operatorType,sol.oper_name AS operName,sol.dept_name AS deptName, + sol.oper_url AS operUrl, sol.oper_ip AS operIp, + sol.oper_location AS operLocation, sol.oper_param AS operLocation,sol.json_result AS jsonResult, + sol.status AS status,sol.error_msg AS errorMsg, + sol.oper_time AS operTime, sol.cost_time AS costTime,sol.companyName AS companyName,sol.roleName + AS roleName,sol.phoneNumber AS phoneNumber, + sol.userId AS userId,sol.nickName AS nickName + from sys_oper_log sol + <where> + <if test="query.companyName != null and query.companyName != ''"> + AND sol.companyName LIKE concat('%',#{query.companyName},'%') + </if> + <if test="query.roleName != null and query.roleName != ''"> + AND sol.roleName LIKE concat('%',#{query.roleName},'%') + </if> + <if test="query.nickName != null and query.nickName != ''"> + AND sol.nickName LIKE concat('%',#{query.nickName},'%') + </if> + <if + test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''"> + AND DATE_FORMAT(sol.oper_time, '%Y-%m-%d %H:%i:%s') >= #{query.startTime} + AND DATE_FORMAT(sol.oper_time, '%Y-%m-%d %H:%i:%s') <= #{query.endTime} + </if> + </where> + ORDER BY sol.oper_time DESC + </select> + + <update id="cleanOperLog"> + truncate table sys_oper_log + </update> </mapper> \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml index 4ec1c85..0c1545e 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml @@ -76,7 +76,7 @@ <select id="selectRoleById" parameterType="Long" resultMap="SysRoleResult"> <include refid="selectRoleVo"/> - where r.role_id = #{roleId} + where r.role_id = #{roleId} AND r.del_flag = 0 </select> <select id="selectRolesByUserName" parameterType="String" resultMap="SysRoleResult"> @@ -139,9 +139,7 @@ status AS status, del_flag AS delFlag, create_time AS createTime, - create_by AS createBy, - postType AS postType, - removeDays AS removeDays + create_by AS createBy from sys_role where del_flag = 0 </select> @@ -181,8 +179,6 @@ <if test="status != null and status != ''">status,</if> <if test="remark != null and remark != ''">remark,</if> <if test="createBy != null and createBy != ''">create_by,</if> - <if test="removeDays != null">removeDays,</if> - <if test="postType != null">postType,</if> create_time )values( <if test="roleId != null and roleId != 0">#{roleId},</if> @@ -195,8 +191,6 @@ <if test="status != null and status != ''">#{status},</if> <if test="remark != null and remark != ''">#{remark},</if> <if test="createBy != null and createBy != ''">#{createBy},</if> - <if test="removeDays != null">#{removeDays},</if> - <if test="postType != null">#{postType},</if> sysdate() ) </insert> @@ -213,8 +207,6 @@ <if test="status != null and status != ''">status = #{status},</if> <if test="remark != null">remark = #{remark},</if> <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> - <if test="removeDays != null">removeDays = #{removeDays},</if> - <if test="postType != null">postType = #{postType},</if> update_time = sysdate() </set> where role_id = #{roleId} @@ -231,12 +223,12 @@ <delete id="deleteRoleById" parameterType="Long"> update sys_role - set del_flag = '2' + set del_flag = '1' where role_id = #{roleId} </delete> <delete id="deleteRoleByIds" parameterType="Long"> - update sys_role set del_flag = '2' where role_id in + update sys_role set del_flag = '1' where role_id in <foreach collection="roleIds" item="roleId" open="(" separator="," close=")"> #{roleId} </foreach> diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index 2b72e1a..67f05aa 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -32,26 +32,21 @@ <if test="status != null and status != ''">status,</if> <if test="createBy != null and createBy != ''">create_by,</if> <if test="remark != null and remark != ''">remark,</if> - <!-- <if test="ifBlack != null">ifBlack,</if>--> - <!-- <if test="districtId != null">districtId,</if>--> create_time )values( <if test="userId != null and userId != ''">#{userId},</if> <if test="deptId != null and deptId != ''">#{deptId},</if> <if test="userName != null and userName != ''">#{userName},</if> <if test="deptName != null and deptName != ''">#{deptName},</if> - <if test="nickName != null and nickName != ''">#{nickName},</if> <if test="email != null and email != ''">#{email},</if> <if test="avatar != null and avatar != ''">#{avatar},</if> - <if test="phoneNumber != null and phoneNumber != ''">#{phone_number},</if> + <if test="phoneNumber != null and phoneNumber != ''">#{phoneNumber},</if> <if test="sex != null and sex != ''">#{sex},</if> <if test="password != null and password != ''">#{password},</if> <if test="status != null and status != ''">#{status},</if> <if test="createBy != null and createBy != ''">#{createBy},</if> <if test="remark != null and remark != ''">#{remark},</if> - <!-- <if test="ifBlack != null">#{ifBlack},</if>--> - <!-- <if test="districtId != null">#{districtId},</if>--> sysdate() ) </insert> @@ -197,8 +192,7 @@ u.create_time AS createTime, u.remark AS remark,/*u.ifBlack AS ifBlack,u.districtId AS districtId,*/ ur.role_id AS roleId, - sr.role_name AS roleName, - u.deptName as deptName + sr.role_name AS roleName from sys_user u left join sys_user_role ur on u.user_id = ur.user_id left join sys_role sr on ur.role_id = sr.role_id @@ -256,6 +250,7 @@ u.remark AS remark from sys_user u WHERE u.del_flag = 0 + AND u.user_type = 1 </select> <select id="selectCount" resultType="java.lang.Integer"> select count(*) from sys_user @@ -263,7 +258,7 @@ <if test="status != null"> AND status = #{status} </if> - AND del_flag = 0 + AND del_flag = 0 AND user_type = 1 </where> </select> <select id="selectListByNamePhone" resultType="com.ruoyi.common.core.domain.entity.SysUser"> @@ -272,9 +267,9 @@ u.phone_number AS phoneNumber, u.sex AS sex, u.status AS status, u.del_flag AS delFlag, u.login_ip AS loginIp, u.login_date AS loginDate, u.create_by AS createBy, u.create_time AS createTime, u.remark AS - remark,/*u.ifBlack AS ifBlack,u.districtId AS districtId*/ + remark from sys_user u - WHERE u.del_flag = 0 + WHERE u.del_flag = 0 AND u.user_type = 1 <if test="name != null and name != ''"> AND (u.nick_name LIKE concat('%',#{name},'%') OR u.phone_number LIKE concat('%',#{name},'%')) @@ -285,7 +280,7 @@ nickName, u.email AS email, u.avatar AS avatar, u.phone_number AS phoneNumber from sys_user u - WHERE u.del_flag = 0 + WHERE u.del_flag = 0 AND u.user_type = 1 <if test="names != null and names.size()>0"> AND u.nick_name IN <foreach close=")" collection="names" item="name" open="(" separator=","> @@ -299,6 +294,7 @@ left join t_company t2 on t2.id = t1.companyId left join t_qrcode tq on t1.user_id = tq.otherId and tq.type = 1 where t1.user_id = #{id} + AND u.user_type = 1 </select> <select id="selectByPhone" resultType="com.ruoyi.common.core.domain.entity.SysUser"> select u.user_id AS userId, @@ -320,12 +316,14 @@ where u.phone_number = #{phoneNumber} and u.status = 0 and u.del_flag = 0 + AND u.user_type = 1 </select> <select id="getUserInfoBy" resultType="com.ruoyi.system.vo.UserInfoVo"> select t1.*, t2.companyName, t2.companyType from sys_user t1 left join t_company t2 on t2.id = t1.companyId where t1.singleNum = #{singleNum} + AND u.user_type = 1 </select> <select id="getUserRole" resultType="java.lang.Long"> select role_id @@ -335,6 +333,7 @@ <select id="selectAllList" resultType="com.ruoyi.common.core.domain.entity.SysUser"> select * from sys_user + where user_type = 1 </select> <select id="pageList" resultType="com.ruoyi.system.vo.SysUserVO"> select u.user_id AS userId, u.dept_id AS deptId, u.user_name AS userName, u.nick_name AS @@ -342,15 +341,14 @@ u.phone_number AS phoneNumber, u.sex AS sex, u.status AS status, u.del_flag AS delFlag, u.login_ip AS loginIp, u.login_date AS loginDate, u.create_by AS createBy, u.create_time AS createTime, u.remark AS - remark,/*u.ifBlack AS ifBlack, u.districtId AS districtId,*/ - 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.status as role_status,u.deptName as deptName + remark, 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.status as role_status from sys_user u left join sys_user_role ur on u.user_id = ur.user_id left join sys_role r on r.role_id = ur.role_id - WHERE u.del_flag = 0 - <if test="query.nickName != null and query.nickName != ''"> - AND u.nick_name LIKE concat('%',#{query.nickName},'%') + WHERE u.del_flag = 0 AND u.user_type = 1 + <if test="query.userName != null and query.userName != ''"> + AND u.user_name LIKE concat('%',#{query.userName},'%') </if> <if test="query.roleId != null"> AND r.role_id = #{query.roleId} @@ -369,6 +367,7 @@ where phone_number = #{phoneNumber} and status = 0 and del_flag = 0 + AND user_type = 1 </select> <select id="selectDeptUserByUserName" parameterType="java.lang.String" resultType="com.ruoyi.common.core.domain.entity.SysUser"> diff --git a/ruoyi-system/src/main/resources/mapper/system/TbBasicDataConfigMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TbBasicDataConfigMapper.xml index ffb1082..5943e99 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TbBasicDataConfigMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TbBasicDataConfigMapper.xml @@ -49,13 +49,13 @@ LEFT JOIN tb_basic_data_category tbdc2 ON tbdc.basic_data_category_id = tbdc2.id <where> <if test="query.basicDataConfigName != null and query.basicDataConfigName !=''"> - AND bdc.type_name LIKE CONCAT('%',#{query.basicDataConfigName},'%') + AND tbdc.type_name LIKE CONCAT('%',#{query.basicDataConfigName},'%') </if> <if test="query.status !=null"> - AND bdc.status = #{query.status} + AND tbdc.status = #{query.status} </if> <if test="query.calculateType !=null"> - AND bdc.calculate_type = #{query.calculateType} + AND tbdc.calculate_type = #{query.calculateType} </if> </where> </select> diff --git a/ruoyi-system/src/main/resources/mapper/system/TbDataScreenScoreMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TbDataScreenScoreMapper.xml new file mode 100644 index 0000000..535266b --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/TbDataScreenScoreMapper.xml @@ -0,0 +1,22 @@ +<?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"> +<mapper namespace="com.ruoyi.system.mapper.TbDataScreenScoreMapper"> + + <!-- 通用查询映射结果 --> + <resultMap id="BaseResultMap" type="com.ruoyi.system.domain.TbDataScreenScore"> + <id column="id" property="id"/> + <result column="dept_area_code" property="deptAreaCode"/> + <result column="basic_data_id" property="basicDataId"/> + <result column="data_screen_config_id" property="dataScreenConfigId"/> + <result column="score" property="score"/> + <result column="score_rate" property="scoreRate"/> + <result column="create_time" property="createTime"/> + </resultMap> + + <!-- 通用查询结果列 --> + <sql id="Base_Column_List"> + id, dept_area_code, basic_data_id, data_screen_config_id, score, score_rate, create_time + </sql> + +</mapper> diff --git a/ruoyi-system/src/main/resources/mapper/system/TbOperLogMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TbOperLogMapper.xml new file mode 100644 index 0000000..6f99149 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/TbOperLogMapper.xml @@ -0,0 +1,25 @@ +<?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"> +<mapper namespace="com.ruoyi.system.mapper.TbOperLogMapper"> + + <!-- 通用查询映射结果 --> + <resultMap id="BaseResultMap" type="com.ruoyi.system.domain.TbOperLog"> + <id column="id" property="id"/> + <result column="business_type" property="businessType"/> + <result column="staff_name" property="staffName"/> + <result column="phone_number" property="phoneNumber"/> + <result column="operation" property="operation"/> + <result column="field_name" property="fieldName"/> + <result column="area_name" property="areaName"/> + <result column="before_edit" property="beforeEdit"/> + <result column="after_edit" property="afterEdit"/> + <result column="create_time" property="createTime"/> + </resultMap> + + <!-- 通用查询结果列 --> + <sql id="Base_Column_List"> + id, staff_name, phone_number, operation, field_name, area_name, before_edit, after_edit, create_time, create_by + </sql> + +</mapper> -- Gitblit v1.7.1