heheng
2024-11-20 2d27b24029adafdbfc5703b38a519d65beda6a68
更改
已修改109个文件
已删除1个文件
5754 ■■■■■ 文件已修改
.github/FUNDING.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LICENSE 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
README.md 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
bin/run.bat 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
doc/若依环境使用手册.docx 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/pom.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/java/com/gkhy/ExpertApplication.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/java/com/gkhy/ExpertServletInitializer.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/java/com/gkhy/web/controller/bussiness/EvaluationController.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/java/com/gkhy/web/controller/bussiness/ExpertClassifyController.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/java/com/gkhy/web/controller/bussiness/ExpertInfoController.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/java/com/gkhy/web/controller/bussiness/ProjectManagementController.java 201 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/java/com/gkhy/web/controller/common/CaptchaController.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/java/com/gkhy/web/controller/common/CommonController.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/java/com/gkhy/web/controller/system/SysDeptController.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/java/com/gkhy/web/controller/system/SysIndexController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/java/com/gkhy/web/controller/system/SysLoginController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/java/com/gkhy/web/controller/system/SysProfileController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/java/com/gkhy/web/controller/system/SysRegisterController.java 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/java/com/gkhy/web/controller/system/SysSettingsController.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/java/com/gkhy/web/core/config/SwaggerConfig.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/resources/application-druid.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/resources/application.yml 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/resources/banner.txt 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-common/pom.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-common/src/main/java/com/gkhy/common/config/ExpertConfig.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-common/src/main/java/com/gkhy/common/core/domain/BaseEntity.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-common/src/main/java/com/gkhy/common/core/domain/entity/SysDept.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-common/src/main/java/com/gkhy/common/core/domain/model/LoginBody.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-common/src/main/java/com/gkhy/common/enums/DeleteFlagEnum.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-common/src/main/java/com/gkhy/common/enums/OpenFlagEnum.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-common/src/main/java/com/gkhy/common/utils/file/FileUploadUtils.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-common/src/main/java/com/gkhy/common/utils/file/FileUtils.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-common/src/main/java/com/gkhy/common/utils/file/ImageUtils.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-common/src/main/java/com/gkhy/common/utils/ip/AddressUtils.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-common/src/main/java/com/gkhy/common/utils/poi/ExcelUtil.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-framework/src/main/java/com/gkhy/framework/config/MyBatisConfig.java 264 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-framework/src/main/java/com/gkhy/framework/config/MybatisPlusConfig.java 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-framework/src/main/java/com/gkhy/framework/config/ResourcesConfig.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-framework/src/main/java/com/gkhy/framework/config/SecurityConfig.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-generator/src/main/resources/vm/java/domain.java.vm 167 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-generator/src/main/resources/vm/java/mapper.java.vm 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-generator/src/main/resources/vm/java/service.java.vm 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-generator/src/main/resources/vm/java/serviceImpl.java.vm 183 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-generator/src/main/resources/vm/java/sub-domain.java.vm 111 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/ApplyRecord.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/Evaluation.java 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/ProjectExpert.java 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/ProjectExpertDetail.java 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/ProjectFile.java 262 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/ProjectManagement.java 427 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/SysExpertClassify.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/SysExpertInfo.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/SysSettings.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectArchiveReq.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectCheckReq.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertSaveBatchReqDto.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertSaveReqDto.java 154 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertScoreSaveReq.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertStateReq.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertTeamLeaderReqDto.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectManageSaveReq.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/request/SysExpertInfoRoundReq.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/request/SysExpertSearchReqDto.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/request/SysProjectExpertReq.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertCheckResp.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertEvaluationResp.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertManagementInfoRes.java 241 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertResp.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertSectionResp.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertStateResp.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectNumResp.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/response/SysExpertSearchRep.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/mapper/ApplyRecordMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/mapper/EvaluationMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/mapper/ProjectExpertDetailMapper.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/mapper/ProjectExpertMapper.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/mapper/ProjectFileMapper.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/mapper/ProjectManagementMapper.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/mapper/SysDeptMapper.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/mapper/SysExpertClassifyMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/mapper/SysExpertInfoMapper.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/mapper/SysSettingsMapper.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/service/IEvaluationService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/service/IProjectManagementService.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/service/ISysDeptService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/service/ISysSettingsService.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/service/SysExpertClassifyService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/service/SysExpertInfoService.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/service/impl/EvaluationServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/service/impl/ProjectManagementServiceImpl.java 434 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/service/impl/SysDeptServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/service/impl/SysExpertClassifyServiceImpl.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/service/impl/SysExpertInfoServiceImpl.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/service/impl/SysSettingsServiceImpl.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/resources/mapper/system/ApplyRecordMapper.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/resources/mapper/system/EvaluationMapper.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/resources/mapper/system/ProjectExpertDetailMapper.xml 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/resources/mapper/system/ProjectExpertMapper.xml 94 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/resources/mapper/system/ProjectFileMapper.xml 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/resources/mapper/system/ProjectManagementMapper.xml 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/resources/mapper/system/SysDeptMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/resources/mapper/system/SysExpertClassifyMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/resources/mapper/system/SysExpertInfoMapper.xml 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/resources/mapper/system/SysSettingsMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ry.bat 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ry.sh 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/ry_20240629.sql 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
.github/FUNDING.yml
@@ -1 +1 @@
custom: http://doc.ruoyi.vip/ruoyi-vue/other/donate.html
custom: http://doc.expert.vip/expert-vue/other/donate.html
LICENSE
@@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2018 RuoYi
Copyright (c) 2018 expert
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
README.md
@@ -1,12 +1,12 @@
<p align="center">
    <img alt="logo" src="https://oscimg.oschina.net/oscnet/up-d3d0a9303e11d522a06cd263f3079027715.png">
</p>
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi v3.8.8</h1>
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">expert v3.8.8</h1>
<h4 align="center">基于SpringBoot+Vue前后端分离的Java快速开发框架</h4>
<p align="center">
    <a href="https://gitee.com/y_project/RuoYi-Vue/stargazers"><img src="https://gitee.com/y_project/RuoYi-Vue/badge/star.svg?theme=dark"></a>
    <a href="https://gitee.com/y_project/RuoYi-Vue"><img src="https://img.shields.io/badge/RuoYi-v3.8.8-brightgreen.svg"></a>
    <a href="https://gitee.com/y_project/RuoYi-Vue/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
    <a href="https://gitee.com/y_project/expert-Vue/stargazers"><img src="https://gitee.com/y_project/expert-Vue/badge/star.svg?theme=dark"></a>
    <a href="https://gitee.com/y_project/expert-Vue"><img src="https://img.shields.io/badge/expert-v3.8.8-brightgreen.svg"></a>
    <a href="https://gitee.com/y_project/expert-Vue/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
</p>
## 平台简介
@@ -18,10 +18,10 @@
* 权限认证使用Jwt,支持多终端认证系统。
* 支持加载动态权限菜单,多方式轻松权限控制。
* 高效率开发,使用代码生成器可以一键生成前后端代码。
* 提供了技术栈([Vue3](https://v3.cn.vuejs.org) [Element Plus](https://element-plus.org/zh-CN) [Vite](https://cn.vitejs.dev))版本[RuoYi-Vue3](https://github.com/yangzongzhuan/RuoYi-Vue3),保持同步更新。
* 提供了单应用版本[RuoYi-Vue-fast](https://github.com/yangzongzhuan/RuoYi-Vue-fast),Oracle版本[RuoYi-Vue-Oracle](https://github.com/yangzongzhuan/RuoYi-Vue-Oracle),保持同步更新。
* 不分离版本,请移步[RuoYi](https://gitee.com/y_project/RuoYi),微服务版本,请移步[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud)
* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)&nbsp;&nbsp;
* 提供了技术栈([Vue3](https://v3.cn.vuejs.org) [Element Plus](https://element-plus.org/zh-CN) [Vite](https://cn.vitejs.dev))版本[expert-Vue3](https://github.com/yangzongzhuan/expert-Vue3),保持同步更新。
* 提供了单应用版本[expert-Vue-fast](https://github.com/yangzongzhuan/expert-Vue-fast),Oracle版本[expert-Vue-Oracle](https://github.com/yangzongzhuan/expert-Vue-Oracle),保持同步更新。
* 不分离版本,请移步[expert](https://gitee.com/y_project/expert),微服务版本,请移步[expert-Cloud](https://gitee.com/y_project/expert-Cloud)
* 阿里云折扣场:[点我进入](http://aly.expert.vip),腾讯云秒杀场:[点我进入](http://txy.expert.vip)&nbsp;&nbsp;
* 阿里云优惠券:[点我领取](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link),腾讯云优惠券:[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console)&nbsp;&nbsp;
## 内置功能
@@ -50,8 +50,8 @@
- admin/admin123  
- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
演示地址:http://vue.ruoyi.vip
文档地址:http://doc.ruoyi.vip
演示地址:http://vue.expert.vip
文档地址:http://doc.expert.vip
## 演示图
bin/run.bat
@@ -1,14 +1,14 @@
@echo off
echo.
echo [ÐÅÏ¢] Ê¹ÓÃJarÃüÁîÔËÐÐWeb¹¤³Ì¡£
echo [��Ϣ] ʹ��Jar��������Web���̡�
echo.
cd %~dp0
cd ../ruoyi-admin/target
cd ../expert-admin/target
set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -jar %JAVA_OPTS% ruoyi-admin.jar
java -jar %JAVA_OPTS% expert-admin.jar
cd bin
pause
doc/若依环境使用手册.docx
Binary files differ
expert-admin/pom.xml
@@ -24,18 +24,24 @@
            <optional>true</optional> <!-- 表示依赖不会传递 -->
        </dependency>
        <!-- swagger3-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>
        <!-- 防止进入swagger页面报类型转换错误,排除3.0.0中的引用,手动增加1.6.2版本 -->
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.6.2</version>
        </dependency>
<!--        &lt;!&ndash; swagger3&ndash;&gt;-->
<!--        <dependency>-->
<!--            <groupId>io.springfox</groupId>-->
<!--            <artifactId>springfox-boot-starter</artifactId>-->
<!--        </dependency>-->
<!--        &lt;!&ndash; 防止进入swagger页面报类型转换错误,排除3.0.0中的引用,手动增加1.6.2版本 &ndash;&gt;-->
<!--        <dependency>-->
<!--            <groupId>io.swagger</groupId>-->
<!--            <artifactId>swagger-models</artifactId>-->
<!--            <version>1.6.2</version>-->
<!--        </dependency>-->
         <!-- Mysql驱动包 -->
        <dependency>
expert-admin/src/main/java/com/gkhy/ExpertApplication.java
@@ -10,11 +10,11 @@
 * @author expert
 */
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class expertApplication
public class ExpertApplication
{
    public static void main(String[] args)
    {
        // System.setProperty("spring.devtools.restart.enabled", "false");
        SpringApplication.run(expertApplication.class, args);
        SpringApplication.run(ExpertApplication.class, args);
    }
}
expert-admin/src/main/java/com/gkhy/ExpertServletInitializer.java
@@ -8,11 +8,11 @@
 * 
 * @author expert
 */
public class expertServletInitializer extends SpringBootServletInitializer
public class ExpertServletInitializer extends SpringBootServletInitializer
{
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
    {
        return application.sources(expertApplication.class);
        return application.sources(ExpertApplication.class);
    }
}
expert-admin/src/main/java/com/gkhy/web/controller/bussiness/EvaluationController.java
@@ -1,36 +1,31 @@
package com.gkhy.system.controller;
package com.gkhy.web.controller.bussiness;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.gkhy.common.annotation.Log;
import com.gkhy.common.core.controller.BaseController;
import com.gkhy.common.core.domain.AjaxResult;
import com.gkhy.common.enums.BusinessType;
import com.gkhy.common.core.page.TableDataInfo;
import com.gkhy.system.domain.Evaluation;
import com.gkhy.system.service.IEvaluationService;
import com.gkhy.common.utils.poi.ExcelUtil;
import com.gkhy.common.core.page.TableDataInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * 考评管理Controller
 *
 *
 * @author expert
 * @date 2024-11-13
 */
@RestController
@Api(tags = "考评管理-考评管理前端控制器")
@RequestMapping("/system/evaluation")
public class EvaluationController extends BaseController
{
public class EvaluationController extends BaseController {
    @Autowired
    private IEvaluationService evaluationService;
@@ -38,45 +33,26 @@
     * 查询考评管理列表
     */
    @PreAuthorize("@ss.hasPermi('system:evaluation:list')")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10,最大50")
    })
    @ApiOperation(value = "考评管理列表")
    @GetMapping("/list")
    public TableDataInfo list(Evaluation evaluation)
    {
    public TableDataInfo list(Evaluation evaluation) {
        startPage();
        List<Evaluation> list = evaluationService.selectEvaluationList(evaluation);
        return getDataTable(list);
    }
    /**
     * 导出考评管理列表
     */
    @PreAuthorize("@ss.hasPermi('system:evaluation:export')")
    @Log(title = "考评管理", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, Evaluation evaluation)
    {
        List<Evaluation> list = evaluationService.selectEvaluationList(evaluation);
        ExcelUtil<Evaluation> util = new ExcelUtil<Evaluation>(Evaluation.class);
        util.exportExcel(response, list, "考评管理数据");
    }
    /**
     * 获取考评管理详细信息
     */
    @PreAuthorize("@ss.hasPermi('system:evaluation:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id)
    {
        return success(evaluationService.selectEvaluationById(id));
    }
    /**
     * 新增考评管理
     */
    @PreAuthorize("@ss.hasPermi('system:evaluation:add')")
    @Log(title = "考评管理", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody Evaluation evaluation)
    {
    @PostMapping("/add")
    @ApiOperation(value = "新增考评管理")
    public AjaxResult add(@Validated @RequestBody Evaluation evaluation) {
        return toAjax(evaluationService.insertEvaluation(evaluation));
    }
@@ -84,10 +60,9 @@
     * 修改考评管理
     */
    @PreAuthorize("@ss.hasPermi('system:evaluation:edit')")
    @Log(title = "考评管理", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody Evaluation evaluation)
    {
    @PutMapping("/edit")
    @ApiOperation(value = "修改考评管理")
    public AjaxResult edit(@Validated @RequestBody Evaluation evaluation) {
        return toAjax(evaluationService.updateEvaluation(evaluation));
    }
@@ -95,10 +70,9 @@
     * 删除考评管理
     */
    @PreAuthorize("@ss.hasPermi('system:evaluation:remove')")
    @Log(title = "考评管理", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids)
    {
    @DeleteMapping("/{ids}")
    @ApiOperation(value = "删除考评管理")
    public AjaxResult remove(@PathVariable Long[] ids) {
        return toAjax(evaluationService.deleteEvaluationByIds(ids));
    }
}
expert-admin/src/main/java/com/gkhy/web/controller/bussiness/ExpertClassifyController.java
@@ -1,13 +1,15 @@
package com.gkhy.assess.admin.controller.web;
package com.gkhy.web.controller.bussiness;
import com.gkhy.assess.common.annotation.RepeatSubmit;
import com.gkhy.assess.common.api.CommonResult;
import com.gkhy.assess.system.domain.SysExpertClassify;
import com.gkhy.assess.system.service.SysExpertClassifyService;
import com.gkhy.common.annotation.Anonymous;
import com.gkhy.common.annotation.RepeatSubmit;
import com.gkhy.common.core.domain.AjaxResult;
import com.gkhy.system.domain.SysExpertClassify;
import com.gkhy.system.service.SysExpertClassifyService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@Api(tags = "专家库-专家分类前端控制器")
@@ -19,33 +21,35 @@
    @ApiOperation(value = "专家分类列表(树形)")
    @GetMapping("/tree")
    public CommonResult classifyTree(SysExpertClassify expertClassify){
        return CommonResult.success(expertClassifyService.classifyTree(expertClassify));
    @Anonymous
    @RepeatSubmit
    public AjaxResult classifyTree(SysExpertClassify expertClassify){
        return AjaxResult.success(expertClassifyService.classifyTree(expertClassify));
    }
    @RequiresPermissions("system:assess:monitor")
    @PreAuthorize("@ss.hasPermi('system:assess:monitor')")
    @RepeatSubmit
    @ApiOperation(value = "修改专家分类")
    @PutMapping("/mod")
    public CommonResult modClassify(@RequestBody SysExpertClassify expertClassify){
        return CommonResult.success(expertClassifyService.modClassify(expertClassify));
    public AjaxResult modClassify(@RequestBody SysExpertClassify expertClassify){
        return AjaxResult.success(expertClassifyService.modClassify(expertClassify));
    }
    @RequiresPermissions("system:assess:monitor")
    @PreAuthorize("@ss.hasPermi('system:assess:monitor')")
    @RepeatSubmit
    @ApiOperation(value = "删除专家分类")
    @DeleteMapping("/del/{classifyId}")
    public CommonResult delClassify(@PathVariable(value = "classifyId") Long classifyId){
        return CommonResult.success(expertClassifyService.delClassify(classifyId));
    public AjaxResult delClassify(@PathVariable(value = "classifyId") Long classifyId){
        return AjaxResult.success(expertClassifyService.delClassify(classifyId));
    }
    @RequiresPermissions("system:assess:monitor")
    @PreAuthorize("@ss.hasPermi('system:assess:monitor')")
    @RepeatSubmit
    @ApiOperation(value = "新增专家分类")
    @PostMapping("/add")
    public CommonResult addClassify(@RequestBody SysExpertClassify expertClassify){
        return CommonResult.success(expertClassifyService.addClassify(expertClassify));
    public AjaxResult addClassify(@RequestBody SysExpertClassify expertClassify){
        return AjaxResult.success(expertClassifyService.addClassify(expertClassify));
    }
}
expert-admin/src/main/java/com/gkhy/web/controller/bussiness/ExpertInfoController.java
@@ -1,86 +1,116 @@
package com.gkhy.assess.admin.controller.web;
package com.gkhy.web.controller.bussiness;
import com.gkhy.assess.common.annotation.RepeatSubmit;
import com.gkhy.assess.common.api.CommonResult;
import com.gkhy.assess.system.domain.SysAgency;
import com.gkhy.assess.system.domain.SysExpertClassify;
import com.gkhy.assess.system.domain.SysExpertInfo;
import com.gkhy.assess.system.domain.SysUser;
import com.gkhy.assess.system.service.SysExpertInfoService;
import com.gkhy.common.annotation.Anonymous;
import com.gkhy.common.annotation.RepeatSubmit;
import com.gkhy.common.core.controller.BaseController;
import com.gkhy.common.core.domain.AjaxResult;
import com.gkhy.common.core.domain.R;
import com.gkhy.common.core.page.TableDataInfo;
import com.gkhy.system.domain.SysExpertInfo;
import com.gkhy.system.domain.vo.request.SysExpertInfoRoundReq;
import com.gkhy.system.domain.vo.request.SysExpertSearchReqDto;
import com.gkhy.system.domain.vo.response.ProjectExpertSectionResp;
import com.gkhy.system.domain.vo.response.SysExpertSearchRep;
import com.gkhy.system.service.SysExpertInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * @author admin
 */
@Api(tags = "专家库-专家信息前端控制器")
@RestController
@RequestMapping("/system/expert_info")
public class ExpertInfoController {
public class ExpertInfoController extends BaseController {
    @Autowired
    private SysExpertInfoService expertInfoService;
    @RequiresPermissions("system:assess:monitor")
    // @RequiresPermissions("system:assess:monitor")
    @ApiOperation(value = "专家列表(分页)")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10,最大50")
    })
    @GetMapping("/list")
    public CommonResult exportInfoList(SysExpertInfo expertInfo){
        return CommonResult.success(expertInfoService.exportInfoList(expertInfo));
    public TableDataInfo exportInfoList(SysExpertInfo expertInfo) {
        startPage();
        List<SysExpertInfo> sysExpertInfos = expertInfoService.exportInfoList(expertInfo);
        return getDataTable(sysExpertInfos);
    }
    @RequiresPermissions("system:assess:monitor")
    // @RequiresPermissions("system:assess:monitor")
    @RepeatSubmit
    @ApiOperation(value = "新增专家信息")
    @PostMapping("/add")
    public CommonResult addExpertInfo(@RequestBody SysExpertInfo expertInfo){
        return CommonResult.success(expertInfoService.addExpertInfo(expertInfo));
    @Anonymous
    public AjaxResult addExpertInfo(@RequestBody SysExpertInfo expertInfo) {
        return AjaxResult.success(expertInfoService.addExpertInfo(expertInfo));
    }
    @RequiresPermissions("system:assess:monitor")
    //@RequiresPermissions("system:assess:monitor")
    @RepeatSubmit
    @ApiOperation(value = "修改专家信息")
    @PutMapping("/mod")
    public CommonResult modExpertInfo(@RequestBody SysExpertInfo expertInfo){
        return CommonResult.success(expertInfoService.modExpertInfo(expertInfo));
    public AjaxResult modExpertInfo(@RequestBody SysExpertInfo expertInfo) {
        return AjaxResult.success(expertInfoService.modExpertInfo(expertInfo));
    }
    @RequiresPermissions("system:assess:monitor")
    //@RequiresPermissions("system:assess:monitor")
    @RepeatSubmit
    @ApiOperation(value = "删除专家信息")
    @DeleteMapping("/del/{expertId}")
    public CommonResult delExpertInfo(@PathVariable(value = "expertId") Long expertId){
        return CommonResult.success(expertInfoService.delExpertInfo(expertId));
    public AjaxResult delExpertInfo(@PathVariable(value = "expertId") Long expertId) {
        return AjaxResult.success(expertInfoService.delExpertInfo(expertId));
    }
    @RequiresPermissions("system:assess:monitor")
    // @RequiresPermissions("system:assess:monitor")
    @RepeatSubmit
    @ApiOperation(value = "批量删除专家信息")
    @DeleteMapping("/del/batch/{expertIds}")
    public CommonResult delExpertInfo(@PathVariable(value = "expertIds") Long[] expertIds){
        return CommonResult.success(expertInfoService.delExpertInfoBatch(expertIds));
    public AjaxResult delExpertInfo(@PathVariable(value = "expertIds") Long[] expertIds) {
        return AjaxResult.success(expertInfoService.delExpertInfoBatch(expertIds));
    }
    @RequiresPermissions("system:assess:monitor")
    // @RequiresPermissions("system:assess:monitor")
    @ApiOperation(value = "根据id获取专家信息")
    @GetMapping("/detail/{expertId}")
    public CommonResult exportInfoDetail(@PathVariable(value = "expertId") Long expertId){
        return CommonResult.success(expertInfoService.exportInfoDetail(expertId));
    public R<SysExpertInfo> exportInfoDetail(@PathVariable(value = "expertId") Long expertId) {
        return R.ok(expertInfoService.exportInfoDetail(expertId));
    }
    @RepeatSubmit
    @RequiresPermissions("system:assess:monitor")
    @ApiOperation(value = "审批状态修改,审批状态(0暂存,1审核中,2审批通过,3审批驳回,4已作废)")
    //@RequiresPermissions("system:assess:monitor")
    @ApiOperation(value = "审批状态修改,审批状态(0暂存,1审核中,2审批通过,3审批驳回,4专家库)")
    @PostMapping("/changeApprove")
    public CommonResult changeApprove(@RequestBody SysExpertInfo expertInfo)
    {
        return CommonResult.success(expertInfoService.changeApprove(expertInfo));
    public AjaxResult changeApprove(@RequestBody SysExpertInfo expertInfo) {
        return AjaxResult.success(expertInfoService.changeApprove(expertInfo));
    }
    @RepeatSubmit
    //@RequiresPermissions("system:assess:monitor")
    @ApiOperation(value = "专家查询审批结果")
    @PostMapping("/queryApprove")
    @Anonymous
    public R<SysExpertSearchRep> queryApprove(@Validated @RequestBody SysExpertSearchReqDto expertInfo) {
        return R.ok(expertInfoService.queryApprove(expertInfo));
    }
    @RepeatSubmit
    //@RequiresPermissions("system:assess:monitor")
    @ApiOperation(value = "随机获取专家数据")
    @PostMapping("/getExpertRound")
    public R<List<ProjectExpertSectionResp>> getExpertRound(@Validated @RequestBody SysExpertInfoRoundReq expertInfo) {
        return R.ok(expertInfoService.getExpertRound(expertInfo));
    }
expert-admin/src/main/java/com/gkhy/web/controller/bussiness/ProjectManagementController.java
@@ -1,25 +1,26 @@
package com.gkhy.system.controller;
package com.gkhy.web.controller.bussiness;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.gkhy.common.annotation.Log;
import com.gkhy.common.annotation.RepeatSubmit;
import com.gkhy.common.core.controller.BaseController;
import com.gkhy.common.core.domain.AjaxResult;
import com.gkhy.common.enums.BusinessType;
import com.gkhy.system.domain.ProjectManagement;
import com.gkhy.system.service.IProjectManagementService;
import com.gkhy.common.utils.poi.ExcelUtil;
import com.gkhy.common.core.domain.R;
import com.gkhy.common.core.page.TableDataInfo;
import com.gkhy.system.domain.ProjectExpertDetail;
import com.gkhy.system.domain.ProjectFile;
import com.gkhy.system.domain.ProjectManagement;
import com.gkhy.system.domain.vo.request.*;
import com.gkhy.system.domain.vo.response.*;
import com.gkhy.system.service.IProjectManagementService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * 项目管理Controller
@@ -29,6 +30,7 @@
 */
@RestController
@RequestMapping("/system/management")
@Api(tags = "项目管理专家考评-项目管理专家考评前端控制器")
public class ProjectManagementController extends BaseController
{
    @Autowired
@@ -37,8 +39,13 @@
    /**
     * 查询项目管理列表
     */
    @ApiOperation(value = "查询项目管理列表(分页)")
    @PreAuthorize("@ss.hasPermi('system:management:list')")
    @GetMapping("/list")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10,最大50")
    })
    public TableDataInfo list(ProjectManagement projectManagement)
    {
        startPage();
@@ -46,59 +53,171 @@
        return getDataTable(list);
    }
    /**
     * 导出项目管理列表
     */
    @PreAuthorize("@ss.hasPermi('system:management:export')")
    @Log(title = "项目管理", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, ProjectManagement projectManagement)
    {
        List<ProjectManagement> list = projectManagementService.selectProjectManagementList(projectManagement);
        ExcelUtil<ProjectManagement> util = new ExcelUtil<ProjectManagement>(ProjectManagement.class);
        util.exportExcel(response, list, "项目管理数据");
    }
    /**
     * 获取项目管理详细信息
     */
    @PreAuthorize("@ss.hasPermi('system:management:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id)
    @ApiOperation(value = "获取项目管理详细信息")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "id", dataType = "int", required = true, value = "当前页,默认1")
    })
    public R<ProjectManagement> getInfo(@PathVariable("id") Long id)
    {
        return success(projectManagementService.selectProjectManagementById(id));
        return R.ok(projectManagementService.selectProjectManagementById(id));
    }
    /**
     * 新增项目管理
     */
    @PreAuthorize("@ss.hasPermi('system:management:add')")
    @Log(title = "项目管理", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody ProjectManagement projectManagement)
    @ApiOperation(value = "新增编辑项目管理")
    @PostMapping("/saveProject")
    @RepeatSubmit
    public R addProject(@Validated @RequestBody ProjectManageSaveReq projectManagement)
    {
        return toAjax(projectManagementService.insertProjectManagement(projectManagement));
        return R.ok(projectManagementService.insertProjectManagement(projectManagement));
    }
    /**
     * 修改项目管理
     */
    @PreAuthorize("@ss.hasPermi('system:management:edit')")
    @Log(title = "项目管理", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody ProjectManagement projectManagement)
    @ApiOperation(value = "项目专家选取保存-修改")
    @PostMapping("/projectExpert")
    @RepeatSubmit
    public R projectExpert(@Validated @RequestBody ProjectExpertSaveBatchReqDto projectManagement)
    {
        return toAjax(projectManagementService.updateProjectManagement(projectManagement));
        projectManagementService.updateProjectManagement(projectManagement);
        return R.ok();
    }
    @PreAuthorize("@ss.hasPermi('system:management:info')")
    @ApiOperation(value = "获取项目专家审批用(获取项目信息和专家数据)")
    @GetMapping("/projectExpertCheckInfo")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "id", dataType = "long", required = true, value = "当前页,默认1")
    })
    public R<ProjectExpertManagementInfoRes> projectExpertCheckInfo(@RequestParam("id") Long id)
    {
        return R.ok(projectManagementService.projectExpertCheckInfo(id));
    }
    @PreAuthorize("@ss.hasPermi('system:management:edit')")
    @ApiOperation(value = "项目专家审批")
    @PostMapping("/projectCheck")
    @RepeatSubmit
    public R projectCheck(@Validated @RequestBody ProjectCheckReq req)
    {
        projectManagementService.projectCheck(req);
        return R.ok();
    }
    @PreAuthorize("@ss.hasPermi('system:management:edit')")
    @ApiOperation(value = "项目归档")
    @PostMapping("/projectArchive")
    @RepeatSubmit
    public R projectArchive(@Validated @RequestBody ProjectArchiveReq req)
    {
        projectManagementService.projectArchive(req);
        return R.ok();
    }
    /**
     * 删除项目管理
     */
    @PreAuthorize("@ss.hasPermi('system:management:remove')")
    @Log(title = "项目管理", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    @ApiOperation(value = "删除项目管理")
    @RepeatSubmit
    public AjaxResult remove(@PathVariable Long[] ids)
    {
        return toAjax(projectManagementService.deleteProjectManagementByIds(ids));
    }
    /**
     * 事后考评列表
     */
    @ApiOperation(value = "事后考评——事后考评(分页)")
    @PreAuthorize("@ss.hasPermi('system:management:list')")
    @GetMapping("/projectExpertList")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10,最大50")
    })
    public TableDataInfo projectExpertList(ProjectExpertStateReq  req)
    {
        startPage();
        List<ProjectExpertStateResp> list = projectManagementService.getProjectExpertSate(req);
        return getDataTable(list);
    }
    @ApiOperation(value = "事后考评——项目专家考评列表(分页)")
    @PreAuthorize("@ss.hasPermi('system:management:list')")
    @GetMapping("/projectExpertEvaluationList")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10,最大50"),
            @ApiImplicitParam(paramType = "query", name = "id", dataType = "int", required = true, value = "项目id")
    })
    public TableDataInfo projectExpertEvaluationList(@RequestParam("id") Long id)
    {
        startPage();
        List<ProjectExpertEvaluationResp> projectExpertEvaluationResps = projectManagementService.projectExpertEvaluationList(id);
        return getDataTable(projectExpertEvaluationResps);
    }
    @PreAuthorize("@ss.hasPermi('system:management:edit')")
    @ApiOperation(value = "事后考评——项目专家考评")
    @PostMapping("/ProjectExpertDetailSave")
    @RepeatSubmit
    public R projectExpertDetailSave(@Validated @RequestBody ProjectExpertScoreSaveReq req)
    {
        projectManagementService.projectExpertDetailSave(req);
        return R.ok();
    }
    @ApiOperation(value = "专家考评记录——专家考评记录列表(分页)")
    @PreAuthorize("@ss.hasPermi('system:management:list')")
    @GetMapping("/projectExpertEvaList")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10,最大50"),
    })
    public TableDataInfo projectExpertEvaList(SysProjectExpertReq req)
    {
        startPage();
        List<ProjectExpertResp> projectExpertResps = projectManagementService.projectExpertEvaList(req);
        return getDataTable(projectExpertResps);
    }
    @ApiOperation(value = "专家考评记录——专家考评记明细")
    @PreAuthorize("@ss.hasPermi('system:management:list')")
    @GetMapping("/selectProjectExpertDetailList")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "projectExpertId", dataType = "long", required = true, value = "项目专家id")
    })
    public R<List<ProjectExpertDetail>> selectProjectExpertDetailList(@RequestParam("projectExpertId") Long projectExpertId)
    {
        return R.ok(projectManagementService.selectProjectExpertDetailList(projectExpertId));
    }
    @GetMapping("/selectProjectFileList")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "projectId", dataType = "long", required = true, value = "项目id"),
            @ApiImplicitParam(paramType = "query", name = "module", dataType = "String", required = true, value = "附件类型1审批附件2项目附件")
    })
    @ApiOperation(value = "项目附件相关")
    public R<List<ProjectFile>> selectProjectFileList(@RequestParam("projectId") Long projectId, @RequestParam("module") String module ){
        return R.ok(projectManagementService.selectProjectFileList(projectId,module));
    }
    @GetMapping("/getProjectNum")
    @ApiOperation(value = "项目统计数量")
    public R<ProjectNumResp> getProjectNum(){
        return R.ok(projectManagementService.getProjectNum());
    }
}
expert-admin/src/main/java/com/gkhy/web/controller/common/CaptchaController.java
@@ -1,17 +1,6 @@
package com.gkhy.web.controller.common;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.FastByteArrayOutputStream;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.google.code.kaptcha.Producer;
import com.gkhy.common.config.expertConfig;
import com.gkhy.common.config.ExpertConfig;
import com.gkhy.common.constant.CacheConstants;
import com.gkhy.common.constant.Constants;
import com.gkhy.common.core.domain.AjaxResult;
@@ -19,6 +8,20 @@
import com.gkhy.common.utils.sign.Base64;
import com.gkhy.common.utils.uuid.IdUtils;
import com.gkhy.system.service.ISysConfigService;
import com.google.code.kaptcha.Producer;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.FastByteArrayOutputStream;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
/**
 * 验证码操作处理
@@ -26,6 +29,7 @@
 * @author expert
 */
@RestController
@Api(tags = "验证码操作处理")
public class CaptchaController
{
    @Resource(name = "captchaProducer")
@@ -43,6 +47,7 @@
     * 生成验证码
     */
    @GetMapping("/captchaImage")
    @ApiOperation(value = "生成验证码")
    public AjaxResult getCode(HttpServletResponse response) throws IOException
    {
        AjaxResult ajax = AjaxResult.success();
@@ -61,7 +66,7 @@
        BufferedImage image = null;
        // 生成验证码
        String captchaType = expertConfig.getCaptchaType();
        String captchaType = ExpertConfig.getCaptchaType();
        if ("math".equals(captchaType))
        {
            String capText = captchaProducerMath.createText();
expert-admin/src/main/java/com/gkhy/web/controller/common/CommonController.java
@@ -1,9 +1,16 @@
package com.gkhy.web.controller.common;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.gkhy.common.annotation.Anonymous;
import com.gkhy.common.annotation.RepeatSubmit;
import com.gkhy.common.config.ExpertConfig;
import com.gkhy.common.constant.Constants;
import com.gkhy.common.core.domain.AjaxResult;
import com.gkhy.common.utils.StringUtils;
import com.gkhy.common.utils.file.FileUploadUtils;
import com.gkhy.common.utils.file.FileUtils;
import com.gkhy.framework.config.ServerConfig;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -13,13 +20,11 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.gkhy.common.config.expertConfig;
import com.gkhy.common.constant.Constants;
import com.gkhy.common.core.domain.AjaxResult;
import com.gkhy.common.utils.StringUtils;
import com.gkhy.common.utils.file.FileUploadUtils;
import com.gkhy.common.utils.file.FileUtils;
import com.gkhy.framework.config.ServerConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
 * 通用请求处理
@@ -28,6 +33,7 @@
 */
@RestController
@RequestMapping("/common")
@Api(tags = "附件上传下载")
public class CommonController
{
    private static final Logger log = LoggerFactory.getLogger(CommonController.class);
@@ -44,6 +50,7 @@
     * @param delete 是否删除
     */
    @GetMapping("/download")
    @ApiOperation(value = "通用下载请求")
    public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
    {
        try
@@ -53,7 +60,7 @@
                throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
            }
            String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
            String filePath = expertConfig.getDownloadPath() + fileName;
            String filePath = ExpertConfig.getDownloadPath() + fileName;
            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
            FileUtils.setAttachmentResponseHeader(response, realFileName);
@@ -73,12 +80,15 @@
     * 通用上传请求(单个)
     */
    @PostMapping("/upload")
    @ApiOperation(value = "通用上传请求(单个)")
    @Anonymous
    @RepeatSubmit
    public AjaxResult uploadFile(MultipartFile file) throws Exception
    {
        try
        {
            // 上传文件路径
            String filePath = expertConfig.getUploadPath();
            String filePath = ExpertConfig.getUploadPath();
            // 上传并返回新文件名称
            String fileName = FileUploadUtils.upload(filePath, file);
            String url = serverConfig.getUrl() + fileName;
@@ -99,12 +109,13 @@
     * 通用上传请求(多个)
     */
    @PostMapping("/uploads")
    @ApiOperation(value = "通用上传请求(多个)")
    public AjaxResult uploadFiles(List<MultipartFile> files) throws Exception
    {
        try
        {
            // 上传文件路径
            String filePath = expertConfig.getUploadPath();
            String filePath = ExpertConfig.getUploadPath();
            List<String> urls = new ArrayList<String>();
            List<String> fileNames = new ArrayList<String>();
            List<String> newFileNames = new ArrayList<String>();
@@ -136,6 +147,7 @@
     * 本地资源通用下载
     */
    @GetMapping("/download/resource")
    @ApiOperation(value = "本地资源通用下载")
    public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
            throws Exception
    {
@@ -146,7 +158,7 @@
                throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
            }
            // 本地资源路径
            String localPath = expertConfig.getProfile();
            String localPath = ExpertConfig.getProfile();
            // 数据库资源地址
            String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
            // 下载名称
expert-admin/src/main/java/com/gkhy/web/controller/system/SysDeptController.java
@@ -1,32 +1,33 @@
package com.gkhy.web.controller.system;
import java.util.List;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.gkhy.common.annotation.Anonymous;
import com.gkhy.common.annotation.Log;
import com.gkhy.common.constant.UserConstants;
import com.gkhy.common.core.controller.BaseController;
import com.gkhy.common.core.domain.AjaxResult;
import com.gkhy.common.core.domain.R;
import com.gkhy.common.core.domain.entity.SysDept;
import com.gkhy.common.enums.BusinessType;
import com.gkhy.common.utils.StringUtils;
import com.gkhy.system.service.ISysDeptService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * 部门信息
 * 
 * @author expert
 */
@Api(tags = "部门-业务处室")
@RestController
@RequestMapping("/system/dept")
public class SysDeptController extends BaseController
@@ -39,10 +40,22 @@
     */
    @PreAuthorize("@ss.hasPermi('system:dept:list')")
    @GetMapping("/list")
    public AjaxResult list(SysDept dept)
    @ApiOperation(value = "获取部门列表")
    public R<List<SysDept>> list(SysDept dept)
    {
        List<SysDept> depts = deptService.selectDeptList(dept);
        return success(depts);
        return R.ok(depts);
    }
    //    @PreAuthorize("@ss.hasPermi('system:dept:list')")
    @GetMapping("/getOutDeptList")
    @ApiOperation(value = "获取部门列表(公开)")
    @Anonymous
    public R<List<SysDept>> getOutDeptList(SysDept dept)
    {
        List<SysDept> depts = deptService.getOutDeptList(dept);
        return R.ok(depts);
    }
    /**
@@ -50,11 +63,15 @@
     */
    @PreAuthorize("@ss.hasPermi('system:dept:list')")
    @GetMapping("/list/exclude/{deptId}")
    public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId)
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "deptId", dataType = "Long", required = true, value = "部门id"),
    })
    @ApiOperation(value = "查询部门列表(排除节点)")
    public R<List<SysDept>> excludeChild(@PathVariable(value = "deptId", required = false) Long deptId)
    {
        List<SysDept> depts = deptService.selectDeptList(new SysDept());
        depts.removeIf(d -> d.getDeptId().intValue() == deptId || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + ""));
        return success(depts);
        return R.ok(depts);
    }
    /**
@@ -62,10 +79,14 @@
     */
    @PreAuthorize("@ss.hasPermi('system:dept:query')")
    @GetMapping(value = "/{deptId}")
    public AjaxResult getInfo(@PathVariable Long deptId)
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "deptId", dataType = "Long", required = true, value = "部门id"),
    })
    @ApiOperation(value = "根据部门编号获取详细信息")
    public R<SysDept> getInfo(@PathVariable Long deptId)
    {
        deptService.checkDeptDataScope(deptId);
        return success(deptService.selectDeptById(deptId));
        return  R.ok(deptService.selectDeptById(deptId));
    }
    /**
@@ -73,7 +94,8 @@
     */
    @PreAuthorize("@ss.hasPermi('system:dept:add')")
    @Log(title = "部门管理", businessType = BusinessType.INSERT)
    @PostMapping
    @PostMapping("/add")
    @ApiOperation(value = "新增部门业务处室")
    public AjaxResult add(@Validated @RequestBody SysDept dept)
    {
        if (!deptService.checkDeptNameUnique(dept))
@@ -89,6 +111,7 @@
     */
    @PreAuthorize("@ss.hasPermi('system:dept:edit')")
    @Log(title = "部门管理", businessType = BusinessType.UPDATE)
    @ApiOperation(value = "修改部门门业务处室")
    @PutMapping
    public AjaxResult edit(@Validated @RequestBody SysDept dept)
    {
@@ -116,6 +139,7 @@
    @PreAuthorize("@ss.hasPermi('system:dept:remove')")
    @Log(title = "部门管理", businessType = BusinessType.DELETE)
    @DeleteMapping("/{deptId}")
    @ApiOperation(value = "删除部门门业务处室")
    public AjaxResult remove(@PathVariable Long deptId)
    {
        if (deptService.hasChildByDeptId(deptId))
@@ -126,6 +150,7 @@
        {
            return warn("部门存在用户,不允许删除");
        }
        //todo  校验专家是否申请复用
        deptService.checkDeptDataScope(deptId);
        return toAjax(deptService.deleteDeptById(deptId));
    }
expert-admin/src/main/java/com/gkhy/web/controller/system/SysIndexController.java
@@ -1,9 +1,10 @@
package com.gkhy.web.controller.system;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.gkhy.common.config.expertConfig;
import com.gkhy.common.config.ExpertConfig;
import com.gkhy.common.utils.StringUtils;
/**
@@ -11,12 +12,13 @@
 *
 * @author expert
 */
@RestController
public class SysIndexController
{
    /** 系统基础配置 */
    @Autowired
    private expertConfig expertConfig;
    private ExpertConfig expertConfig;
    /**
     * 访问首页,提示语
expert-admin/src/main/java/com/gkhy/web/controller/system/SysLoginController.java
@@ -2,6 +2,9 @@
import java.util.List;
import java.util.Set;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@@ -24,6 +27,7 @@
 * 
 * @author expert
 */
@Api(value = "登录管理", tags = "登录管理")
@RestController
public class SysLoginController
{
@@ -46,6 +50,7 @@
     * @return 结果
     */
    @PostMapping("/login")
    @ApiOperation("登录")
    public AjaxResult login(@RequestBody LoginBody loginBody)
    {
        AjaxResult ajax = AjaxResult.success();
@@ -62,6 +67,7 @@
     * @return 用户信息
     */
    @GetMapping("getInfo")
    @ApiOperation("获取用户信息")
    public AjaxResult getInfo()
    {
        LoginUser loginUser = SecurityUtils.getLoginUser();
@@ -88,6 +94,7 @@
     * @return 路由信息
     */
    @GetMapping("getRouters")
    @ApiOperation("获取路由信息")
    public AjaxResult getRouters()
    {
        Long userId = SecurityUtils.getUserId();
expert-admin/src/main/java/com/gkhy/web/controller/system/SysProfileController.java
@@ -10,7 +10,7 @@
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.gkhy.common.annotation.Log;
import com.gkhy.common.config.expertConfig;
import com.gkhy.common.config.ExpertConfig;
import com.gkhy.common.core.controller.BaseController;
import com.gkhy.common.core.domain.AjaxResult;
import com.gkhy.common.core.domain.entity.SysUser;
@@ -121,7 +121,7 @@
        if (!file.isEmpty())
        {
            LoginUser loginUser = getLoginUser();
            String avatar = FileUploadUtils.upload(expertConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION);
            String avatar = FileUploadUtils.upload(ExpertConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION);
            if (userService.updateUserAvatar(loginUser.getUsername(), avatar))
            {
                AjaxResult ajax = AjaxResult.success();
expert-admin/src/main/java/com/gkhy/web/controller/system/SysRegisterController.java
@@ -1,38 +1,38 @@
package com.gkhy.web.controller.system;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.gkhy.common.core.controller.BaseController;
import com.gkhy.common.core.domain.AjaxResult;
import com.gkhy.common.core.domain.model.RegisterBody;
import com.gkhy.common.utils.StringUtils;
import com.gkhy.framework.web.service.SysRegisterService;
import com.gkhy.system.service.ISysConfigService;
/**
 * 注册验证
 *
 * @author expert
 */
@RestController
public class SysRegisterController extends BaseController
{
    @Autowired
    private SysRegisterService registerService;
    @Autowired
    private ISysConfigService configService;
    @PostMapping("/register")
    public AjaxResult register(@RequestBody RegisterBody user)
    {
        if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
        {
            return error("当前系统没有开启注册功能!");
        }
        String msg = registerService.register(user);
        return StringUtils.isEmpty(msg) ? success() : error(msg);
    }
}
//package com.gkhy.web.controller.system;
//
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RestController;
//import com.gkhy.common.core.controller.BaseController;
//import com.gkhy.common.core.domain.AjaxResult;
//import com.gkhy.common.core.domain.model.RegisterBody;
//import com.gkhy.common.utils.StringUtils;
//import com.gkhy.framework.web.service.SysRegisterService;
//import com.gkhy.system.service.ISysConfigService;
//
///**
// * 注册验证
// *
// * @author expert
// */
//@RestController
//public class SysRegisterController extends BaseController
//{
//    @Autowired
//    private SysRegisterService registerService;
//
//    @Autowired
//    private ISysConfigService configService;
//
//    @PostMapping("/register")
//    public AjaxResult register(@RequestBody RegisterBody user)
//    {
//        if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
//        {
//            return error("当前系统没有开启注册功能!");
//        }
//        String msg = registerService.register(user);
//        return StringUtils.isEmpty(msg) ? success() : error(msg);
//    }
//}
expert-admin/src/main/java/com/gkhy/web/controller/system/SysSettingsController.java
@@ -1,25 +1,24 @@
package com.gkhy.system.controller;
package com.gkhy.web.controller.system;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.gkhy.common.annotation.Log;
import com.gkhy.common.annotation.Anonymous;
import com.gkhy.common.annotation.RepeatSubmit;
import com.gkhy.common.core.controller.BaseController;
import com.gkhy.common.core.domain.AjaxResult;
import com.gkhy.common.enums.BusinessType;
import com.gkhy.system.domain.SysSettings;
import com.gkhy.system.service.ISysSettingsService;
import com.gkhy.common.utils.poi.ExcelUtil;
import com.gkhy.common.core.domain.R;
import com.gkhy.common.core.page.TableDataInfo;
import com.gkhy.system.domain.ApplyRecord;
import com.gkhy.system.service.ISysSettingsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
 * 系统配置Controller
@@ -29,76 +28,46 @@
 */
@RestController
@RequestMapping("/system/settings")
@Api(tags = "专家申请系统设置-前端控制器")
public class SysSettingsController extends BaseController
{
    @Autowired
    private ISysSettingsService sysSettingsService;
    /**
     * 查询系统配置列表
     */
    @PreAuthorize("@ss.hasPermi('system:settings:list')")
    @GetMapping("/list")
    public TableDataInfo list(SysSettings sysSettings)
    {
        startPage();
        List<SysSettings> list = sysSettingsService.selectSysSettingsList(sysSettings);
        return getDataTable(list);
    }
    /**
     * 导出系统配置列表
     */
    @PreAuthorize("@ss.hasPermi('system:settings:export')")
    @Log(title = "系统配置", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, SysSettings sysSettings)
    {
        List<SysSettings> list = sysSettingsService.selectSysSettingsList(sysSettings);
        ExcelUtil<SysSettings> util = new ExcelUtil<SysSettings>(SysSettings.class);
        util.exportExcel(response, list, "系统配置数据");
    }
    /**
     * 获取系统配置详细信息
     */
    @PreAuthorize("@ss.hasPermi('system:settings:query')")
    @GetMapping(value = "/{state}")
    public AjaxResult getInfo(@PathVariable("state") String state)
    @GetMapping(value = "/getSettings")
    @RepeatSubmit
    @ApiOperation(value = "获取是否开启1开启2关闭")
    @Anonymous
    public R<String> getSettings()
    {
        return success(sysSettingsService.selectSysSettingsByState(state));
    }
    /**
     * 新增系统配置
     */
    @PreAuthorize("@ss.hasPermi('system:settings:add')")
    @Log(title = "系统配置", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody SysSettings sysSettings)
    {
        return toAjax(sysSettingsService.insertSysSettings(sysSettings));
        return R.ok(sysSettingsService.selectSysSettings());
    }
    /**
     * 修改系统配置
     */
    @PreAuthorize("@ss.hasPermi('system:settings:edit')")
    @Log(title = "系统配置", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody SysSettings sysSettings)
    @GetMapping("/updateSettings")
    @RepeatSubmit
    @ApiOperation(value = "专家申请系统设置开关")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "sysSettings", dataType = "String", required = false, value = "1开启2关闭")
    })
    public AjaxResult updateSettings(String sysSettings)
    {
        return toAjax(sysSettingsService.updateSysSettings(sysSettings));
    }
    /**
     * 删除系统配置
     */
    @PreAuthorize("@ss.hasPermi('system:settings:remove')")
    @Log(title = "系统配置", businessType = BusinessType.DELETE)
    @DeleteMapping("/{states}")
    public AjaxResult remove(@PathVariable String[] states)
    {
        return toAjax(sysSettingsService.deleteSysSettingsByStates(states));
    @PreAuthorize("@ss.hasPermi('system:record:list')")
    @GetMapping("/applyList")
    @ApiOperation(value = "专家申请系统设置记录")
    public TableDataInfo applyList() {
        startPage();
        List<ApplyRecord> list = sysSettingsService.selectApplyRecordList();
        return getDataTable(list);
    }
}
expert-admin/src/main/java/com/gkhy/web/core/config/SwaggerConfig.java
@@ -6,7 +6,7 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.gkhy.common.config.expertConfig;
import com.gkhy.common.config.ExpertConfig;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import springfox.documentation.builders.ApiInfoBuilder;
@@ -32,7 +32,7 @@
{
    /** 系统基础配置 */
    @Autowired
    private expertConfig expertConfig;
    private ExpertConfig expertConfig;
    /** 是否开启swagger */
    @Value("${swagger.enabled}")
@@ -113,7 +113,7 @@
        // 用ApiInfoBuilder进行定制
        return new ApiInfoBuilder()
                // 设置标题
                .title("标题:若依管理系统_接口文档")
                .title("标题:专家管理系统_接口文档")
                // 描述
                .description("描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...")
                // 作者信息
expert-admin/src/main/resources/application-druid.yml
@@ -6,9 +6,9 @@
        druid:
            # 主库数据源
            master:
                url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                url: jdbc:mysql://localhost:3306/expert_management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true
                username: root
                password: password
                password: 123456
            # 从库数据源
            slave:
                # 从数据源开关/默认关闭
expert-admin/src/main/resources/application.yml
@@ -3,7 +3,7 @@
  # 名称
  name: expert
  # 版本
  version: 3.8.8
  version: 1.0.0
  # 版权年份
  copyrightYear: 2024
  # 文件路径 示例( Windows配置D:/expert/uploadPath,Linux配置 /home/expert/uploadPath)
@@ -16,7 +16,7 @@
# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 8080
  port: 8585
  servlet:
    # 应用的访问路径
    context-path: /
@@ -74,7 +74,7 @@
    # 数据库索引
    database: 0
    # 密码
    password:
    #password:
    # 连接超时时间
    timeout: 10s
    lettuce:
@@ -97,14 +97,56 @@
  # 令牌有效期(默认30分钟)
  expireTime: 30
# MyBatis配置
mybatis:
## MyBatis配置
#mybatis:
#  # 搜索指定包别名
#  typeAliasesPackage: com.gkhy.**.domain
#  # 配置mapper的扫描,找到所有的mapper.xml映射文件
#  mapperLocations: classpath*:mapper/**/*Mapper.xml
#  # 加载全局的配置文件
#  configLocation: classpath:mybatis/mybatis-config.xml
# mybatis-plus相关配置
# MyBatis Plus配置
mybatis-plus:
  # 搜索指定包别名
  typeAliasesPackage: com.gkhy.**.domain
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  # 加载全局的配置文件
  configLocation: classpath:mybatis/mybatis-config.xml
  global-config:
    db-config:
      #主键类型 AUTO:"数据库ID自增" INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
      id-type: auto
      #字段策略 IGNORED:"忽略判断"  NOT_NULL:"非 NULL 判断")  NOT_EMPTY:"非空判断"
      field-strategy: NOT_EMPTY
      #数据库类型
      db-type: MYSQL
  configuration:
    # 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射
    map-underscore-to-camel-case: true
    # 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段
    call-setters-on-nulls: true
#mybatis-plus:
#  # 搜索指定包别名
#  typeAliasesPackage: com.gkhy.**.domain
#  # xml扫描,多个目录用逗号或者分号分隔(告诉 Mapper 所对应的 XML 文件位置)
#  mapper-locations: classpath*:mapper/**/*Mapper.xml
#  configLocation: classpath:mybatis/mybatis-config.xml
#  # 以下配置均有默认值,可以不设置
#  global-config:
#    db-config:
#      #主键类型 AUTO:"数据库ID自增" INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
#      id-type: auto
#      #字段策略 IGNORED:"忽略判断"  NOT_NULL:"非 NULL 判断")  NOT_EMPTY:"非空判断"
#      field-strategy: NOT_EMPTY
#      #数据库类型
#      db-type: MYSQL
#  configuration:
#    # 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射
#    map-underscore-to-camel-case: true
#    # 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段
#    call-setters-on-nulls: true
# PageHelper分页插件
pagehelper:
@@ -117,7 +159,7 @@
  # 是否开启swagger
  enabled: true
  # 请求前缀
  pathMapping: /dev-api
  pathMapping: /
# 防止XSS攻击
xss:
expert-admin/src/main/resources/banner.txt
@@ -1,24 +1,2 @@
Application Version: ${expert.version}
Spring Boot Version: ${spring-boot.version}
////////////////////////////////////////////////////////////////////
//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\  =  /O                              //
//                      ____/`---'\____                           //
//                    .'  \\|     |//  `.                         //
//                   /  \\|||  :  |||//  \                        //
//                  /  _||||| -:- |||||-  \                       //
//                  |   | \\\  -  /// |   |                       //
//                  | \_|  ''\---/''  |   |                       //
//                  \  .-\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--\  `. . ___                     //
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//             佛祖保佑       永不宕机      永无BUG               //
////////////////////////////////////////////////////////////////////
expert-common/pom.xml
@@ -46,7 +46,19 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
        </dependency>
        <!--常用工具类 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
@@ -118,6 +130,12 @@
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.6.2</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
expert-common/src/main/java/com/gkhy/common/config/ExpertConfig.java
@@ -10,7 +10,7 @@
 */
@Component
@ConfigurationProperties(prefix = "expert")
public class expertConfig
public class ExpertConfig
{
    /** 项目名称 */
    private String name;
@@ -67,7 +67,7 @@
    public void setProfile(String profile)
    {
        expertConfig.profile = profile;
        ExpertConfig.profile = profile;
    }
    public static boolean isAddressEnabled()
@@ -77,7 +77,7 @@
    public void setAddressEnabled(boolean addressEnabled)
    {
        expertConfig.addressEnabled = addressEnabled;
        ExpertConfig.addressEnabled = addressEnabled;
    }
    public static String getCaptchaType() {
@@ -85,7 +85,7 @@
    }
    public void setCaptchaType(String captchaType) {
        expertConfig.captchaType = captchaType;
        ExpertConfig.captchaType = captchaType;
    }
    /**
expert-common/src/main/java/com/gkhy/common/core/domain/BaseEntity.java
@@ -1,12 +1,14 @@
package com.gkhy.common.core.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
/**
 * Entity基类
@@ -19,6 +21,7 @@
    /** 搜索值 */
    @JsonIgnore
    @TableField(exist = false)
    private String searchValue;
    /** 创建者 */
@@ -40,6 +43,7 @@
    /** 请求参数 */
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    @TableField(exist = false)
    private Map<String, Object> params;
    public String getSearchValue()
expert-common/src/main/java/com/gkhy/common/core/domain/entity/SysDept.java
@@ -1,40 +1,51 @@
package com.gkhy.common.core.domain.entity;
import java.util.ArrayList;
import java.util.List;
import com.gkhy.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.gkhy.common.core.domain.BaseEntity;
import java.util.ArrayList;
import java.util.List;
/**
 * 部门表 sys_dept
 * 
 * @author expert
 */
@ApiModel(value = "SysDept对象", description = "部门业务处室")
public class SysDept extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    /** 部门ID */
    @ApiModelProperty("主键")
    private Long deptId;
    /** 父部门ID */
    @ApiModelProperty("父部门ID")
    private Long parentId;
    /** 祖级列表 */
    @ApiModelProperty("祖级列表")
    private String ancestors;
    /** 部门名称 */
    @ApiModelProperty("部门名称")
    @NotBlank(message ="部门名称不能为空" )
    private String deptName;
    /** 显示顺序 */
    @ApiModelProperty("显示顺序")
    private Integer orderNum;
    /** 负责人 */
    @ApiModelProperty("负责人")
    private String leader;
    /** 联系电话 */
@@ -44,12 +55,14 @@
    private String email;
    /** 部门状态:0正常,1停用 */
    @ApiModelProperty("部门状态:0正常,1停用")
    private String status;
    /** 删除标志(0代表存在 2代表删除) */
    private String delFlag;
    /** 父部门名称 */
    @ApiModelProperty("父部门名称")
    private String parentName;
    
    /** 子部门 */
expert-common/src/main/java/com/gkhy/common/core/domain/model/LoginBody.java
@@ -1,10 +1,13 @@
package com.gkhy.common.core.domain.model;
import io.swagger.annotations.ApiModel;
/**
 * 用户登录对象
 * 
 * @author expert
 */
@ApiModel(value = "LoginBody", description = "登录实体")
public class LoginBody
{
    /**
expert-common/src/main/java/com/gkhy/common/enums/DeleteFlagEnum.java
@@ -1,4 +1,4 @@
package com.gkhy.assess.common.enums;
package com.gkhy.common.enums;
/**
 * 删除状态
expert-common/src/main/java/com/gkhy/common/enums/OpenFlagEnum.java
@@ -4,20 +4,20 @@
 * 删除状态
 *
 */
public enum DeleteFlagEnum
public enum OpenFlagEnum
{
    UN_DELETE(0, "未删除"), DELETED(1, "已删除");
    OPEN("1", "开启"), CLOSE("2", "关闭");
    private final Integer code;
    private final String code;
    private final String info;
    DeleteFlagEnum(Integer code, String info)
    OpenFlagEnum(String code, String info)
    {
        this.code = code;
        this.info = info;
    }
    public Integer getCode()
    public String getCode()
    {
        return code;
    }
expert-common/src/main/java/com/gkhy/common/utils/file/FileUploadUtils.java
@@ -6,7 +6,7 @@
import java.util.Objects;
import org.apache.commons.io.FilenameUtils;
import org.springframework.web.multipart.MultipartFile;
import com.gkhy.common.config.expertConfig;
import com.gkhy.common.config.ExpertConfig;
import com.gkhy.common.constant.Constants;
import com.gkhy.common.exception.file.FileNameLengthLimitExceededException;
import com.gkhy.common.exception.file.FileSizeLimitExceededException;
@@ -35,7 +35,7 @@
    /**
     * 默认上传的地址
     */
    private static String defaultBaseDir = expertConfig.getProfile();
    private static String defaultBaseDir = ExpertConfig.getProfile();
    public static void setDefaultBaseDir(String defaultBaseDir)
    {
@@ -142,7 +142,7 @@
    public static final String getPathFileName(String uploadDir, String fileName) throws IOException
    {
        int dirLastIndex = expertConfig.getProfile().length() + 1;
        int dirLastIndex = ExpertConfig.getProfile().length() + 1;
        String currentDir = StringUtils.substring(uploadDir, dirLastIndex);
        return Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName;
    }
expert-common/src/main/java/com/gkhy/common/utils/file/FileUtils.java
@@ -13,7 +13,7 @@
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.ArrayUtils;
import com.gkhy.common.config.expertConfig;
import com.gkhy.common.config.ExpertConfig;
import com.gkhy.common.utils.DateUtils;
import com.gkhy.common.utils.StringUtils;
import com.gkhy.common.utils.uuid.IdUtils;
@@ -73,7 +73,7 @@
     */
    public static String writeImportBytes(byte[] data) throws IOException
    {
        return writeBytes(data, expertConfig.getImportPath());
        return writeBytes(data, ExpertConfig.getImportPath());
    }
    /**
expert-common/src/main/java/com/gkhy/common/utils/file/ImageUtils.java
@@ -9,7 +9,7 @@
import org.apache.poi.util.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.gkhy.common.config.expertConfig;
import com.gkhy.common.config.ExpertConfig;
import com.gkhy.common.constant.Constants;
import com.gkhy.common.utils.StringUtils;
@@ -79,7 +79,7 @@
            else
            {
                // 本机地址
                String localPath = expertConfig.getProfile();
                String localPath = ExpertConfig.getProfile();
                String downloadPath = localPath + StringUtils.substringAfter(url, Constants.RESOURCE_PREFIX);
                in = new FileInputStream(downloadPath);
            }
expert-common/src/main/java/com/gkhy/common/utils/ip/AddressUtils.java
@@ -4,7 +4,7 @@
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.gkhy.common.config.expertConfig;
import com.gkhy.common.config.ExpertConfig;
import com.gkhy.common.constant.Constants;
import com.gkhy.common.utils.StringUtils;
import com.gkhy.common.utils.http.HttpUtils;
@@ -31,7 +31,7 @@
        {
            return "内网IP";
        }
        if (expertConfig.isAddressEnabled())
        if (ExpertConfig.isAddressEnabled())
        {
            try
            {
expert-common/src/main/java/com/gkhy/common/utils/poi/ExcelUtil.java
@@ -74,7 +74,7 @@
import com.gkhy.common.annotation.Excel.ColumnType;
import com.gkhy.common.annotation.Excel.Type;
import com.gkhy.common.annotation.Excels;
import com.gkhy.common.config.expertConfig;
import com.gkhy.common.config.ExpertConfig;
import com.gkhy.common.core.domain.AjaxResult;
import com.gkhy.common.core.text.Convert;
import com.gkhy.common.exception.UtilException;
@@ -1423,7 +1423,7 @@
     */
    public String getAbsoluteFile(String filename)
    {
        String downloadPath = expertConfig.getDownloadPath() + filename;
        String downloadPath = ExpertConfig.getDownloadPath() + filename;
        File desc = new File(downloadPath);
        if (!desc.getParentFile().exists())
        {
expert-framework/src/main/java/com/gkhy/framework/config/MyBatisConfig.java
@@ -1,132 +1,132 @@
package com.gkhy.framework.config;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import javax.sql.DataSource;
import org.apache.ibatis.io.VFS;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.util.ClassUtils;
import com.gkhy.common.utils.StringUtils;
/**
 * Mybatis支持*匹配扫描包
 *
 * @author expert
 */
@Configuration
public class MyBatisConfig
{
    @Autowired
    private Environment env;
    static final String DEFAULT_RESOURCE_PATTERN = "**/*.class";
    public static String setTypeAliasesPackage(String typeAliasesPackage)
    {
        ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver();
        MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver);
        List<String> allResult = new ArrayList<String>();
        try
        {
            for (String aliasesPackage : typeAliasesPackage.split(","))
            {
                List<String> result = new ArrayList<String>();
                aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
                        + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN;
                Resource[] resources = resolver.getResources(aliasesPackage);
                if (resources != null && resources.length > 0)
                {
                    MetadataReader metadataReader = null;
                    for (Resource resource : resources)
                    {
                        if (resource.isReadable())
                        {
                            metadataReader = metadataReaderFactory.getMetadataReader(resource);
                            try
                            {
                                result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName());
                            }
                            catch (ClassNotFoundException e)
                            {
                                e.printStackTrace();
                            }
                        }
                    }
                }
                if (result.size() > 0)
                {
                    HashSet<String> hashResult = new HashSet<String>(result);
                    allResult.addAll(hashResult);
                }
            }
            if (allResult.size() > 0)
            {
                typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0]));
            }
            else
            {
                throw new RuntimeException("mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包");
            }
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return typeAliasesPackage;
    }
    public Resource[] resolveMapperLocations(String[] mapperLocations)
    {
        ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
        List<Resource> resources = new ArrayList<Resource>();
        if (mapperLocations != null)
        {
            for (String mapperLocation : mapperLocations)
            {
                try
                {
                    Resource[] mappers = resourceResolver.getResources(mapperLocation);
                    resources.addAll(Arrays.asList(mappers));
                }
                catch (IOException e)
                {
                    // ignore
                }
            }
        }
        return resources.toArray(new Resource[resources.size()]);
    }
    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception
    {
        String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage");
        String mapperLocations = env.getProperty("mybatis.mapperLocations");
        String configLocation = env.getProperty("mybatis.configLocation");
        typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
        VFS.addImplClass(SpringBootVFS.class);
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
        sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
        sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
        return sessionFactory.getObject();
    }
}
//package com.gkhy.framework.config;
//
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.HashSet;
//import java.util.List;
//import javax.sql.DataSource;
//import org.apache.ibatis.io.VFS;
//import org.apache.ibatis.session.SqlSessionFactory;
//import org.mybatis.spring.SqlSessionFactoryBean;
//import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.core.env.Environment;
//import org.springframework.core.io.DefaultResourceLoader;
//import org.springframework.core.io.Resource;
//import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
//import org.springframework.core.io.support.ResourcePatternResolver;
//import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
//import org.springframework.core.type.classreading.MetadataReader;
//import org.springframework.core.type.classreading.MetadataReaderFactory;
//import org.springframework.util.ClassUtils;
//import com.gkhy.common.utils.StringUtils;
//
///**
// * Mybatis支持*匹配扫描包
// *
// * @author expert
// */
//@Configuration
//public class MyBatisConfig
//{
//    @Autowired
//    private Environment env;
//
//    static final String DEFAULT_RESOURCE_PATTERN = "**/*.class";
//
//    public static String setTypeAliasesPackage(String typeAliasesPackage)
//    {
//        ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver();
//        MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver);
//        List<String> allResult = new ArrayList<String>();
//        try
//        {
//            for (String aliasesPackage : typeAliasesPackage.split(","))
//            {
//                List<String> result = new ArrayList<String>();
//                aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
//                        + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN;
//                Resource[] resources = resolver.getResources(aliasesPackage);
//                if (resources != null && resources.length > 0)
//                {
//                    MetadataReader metadataReader = null;
//                    for (Resource resource : resources)
//                    {
//                        if (resource.isReadable())
//                        {
//                            metadataReader = metadataReaderFactory.getMetadataReader(resource);
//                            try
//                            {
//                                result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName());
//                            }
//                            catch (ClassNotFoundException e)
//                            {
//                                e.printStackTrace();
//                            }
//                        }
//                    }
//                }
//                if (result.size() > 0)
//                {
//                    HashSet<String> hashResult = new HashSet<String>(result);
//                    allResult.addAll(hashResult);
//                }
//            }
//            if (allResult.size() > 0)
//            {
//                typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0]));
//            }
//            else
//            {
//                throw new RuntimeException("mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包");
//            }
//        }
//        catch (IOException e)
//        {
//            e.printStackTrace();
//        }
//        return typeAliasesPackage;
//    }
//
//    public Resource[] resolveMapperLocations(String[] mapperLocations)
//    {
//        ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
//        List<Resource> resources = new ArrayList<Resource>();
//        if (mapperLocations != null)
//        {
//            for (String mapperLocation : mapperLocations)
//            {
//                try
//                {
//                    Resource[] mappers = resourceResolver.getResources(mapperLocation);
//                    resources.addAll(Arrays.asList(mappers));
//                }
//                catch (IOException e)
//                {
//                    // ignore
//                }
//            }
//        }
//        return resources.toArray(new Resource[resources.size()]);
//    }
//
//    @Bean
//    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception
//    {
//        String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage");
//        String mapperLocations = env.getProperty("mybatis.mapperLocations");
//        String configLocation = env.getProperty("mybatis.configLocation");
//        typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
//        VFS.addImplClass(SpringBootVFS.class);
//
//        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
//        sessionFactory.setDataSource(dataSource);
//        sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
//        sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
//        sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
//        return sessionFactory.getObject();
//    }
//}
expert-framework/src/main/java/com/gkhy/framework/config/MybatisPlusConfig.java
@@ -1,17 +1,20 @@
package com.gkhy.common.config;
package com.gkhy.framework.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.github.pagehelper.PageHelper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import java.util.Properties;
@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
public class MybatisPlusConfig {
    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,
@@ -19,11 +22,13 @@
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
        paginationInnerInterceptor.setOverflow(false);//溢出总页数 总是跳到第一页
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        //添加乐观锁插件
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        // 分页插件
        interceptor.addInnerInterceptor(paginationInnerInterceptor());
        // 乐观锁插件
        interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor());
        // 阻断插件
        interceptor.addInnerInterceptor(blockAttackInnerInterceptor());
        return interceptor;
    }
@@ -38,5 +43,33 @@
        pageHelper.setProperties(p);
        return pageHelper;
    }
    /**
     * 分页插件,自动识别数据库类型 https://baomidou.com/guide/interceptor-pagination.html
     */
    public PaginationInnerInterceptor paginationInnerInterceptor()
    {
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
        // 设置数据库类型为mysql
        paginationInnerInterceptor.setDbType(DbType.MYSQL);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        paginationInnerInterceptor.setMaxLimit(-1L);
        return paginationInnerInterceptor;
    }
    /**
     * 乐观锁插件 https://baomidou.com/guide/interceptor-optimistic-locker.html
     */
    public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor()
    {
        return new OptimisticLockerInnerInterceptor();
    }
    /**
     * 如果是对全表的删除或更新操作,就会终止该操作 https://baomidou.com/guide/interceptor-block-attack.html
     */
    public BlockAttackInnerInterceptor blockAttackInnerInterceptor()
    {
        return new BlockAttackInnerInterceptor();
    }
}
expert-framework/src/main/java/com/gkhy/framework/config/ResourcesConfig.java
@@ -11,7 +11,7 @@
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.gkhy.common.config.expertConfig;
import com.gkhy.common.config.ExpertConfig;
import com.gkhy.common.constant.Constants;
import com.gkhy.framework.interceptor.RepeatSubmitInterceptor;
@@ -31,7 +31,7 @@
    {
        /** 本地文件上传路径 */
        registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**")
                .addResourceLocations("file:" + expertConfig.getProfile() + "/");
                .addResourceLocations("file:" + ExpertConfig.getProfile() + "/");
        /** swagger配置 */
        registry.addResourceHandler("/swagger-ui/**")
expert-framework/src/main/java/com/gkhy/framework/config/SecurityConfig.java
@@ -111,10 +111,10 @@
            .authorizeHttpRequests((requests) -> {
                permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
                // 对于登录login 注册register 验证码captchaImage 允许匿名访问
                requests.antMatchers("/login", "/register", "/captchaImage").permitAll()
                requests.antMatchers("/login", "/register", "/captchaImage","/system/expert_info/**").permitAll()
                    // 静态资源,可匿名访问
                    .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                    .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
                    .antMatchers("/doc.html","/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
                    // 除上面外的所有请求全部需要鉴权认证
                    .anyRequest().authenticated();
            })
expert-generator/src/main/resources/vm/java/domain.java.vm
@@ -3,103 +3,106 @@
#foreach ($import in $importList)
import ${import};
#end
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.gkhy.common.annotation.Excel;
import com.rchuing.sis.common.annotation.Excel;
#if($table.crud || $table.sub)
import com.gkhy.common.core.domain.BaseEntity;
import com.rchuing.sis.common.core.domain.BaseEntity;
#elseif($table.tree)
import com.gkhy.common.core.domain.TreeEntity;
import com.fenghuang.common.core.domain.TreeEntity;
#end
/**
 * ${functionName}对象 ${tableName}
 *
 *
 * @author ${author}
 * @date ${datetime}
 */
#if($table.crud || $table.sub)
#set($Entity="BaseEntity")
#elseif($table.tree)
#set($Entity="TreeEntity")
#end
public class ${ClassName} extends ${Entity}
{
    private static final long serialVersionUID = 1L;
    #if($table.crud || $table.sub)
        #set($Entity="BaseEntity")
    #elseif($table.tree)
        #set($Entity="TreeEntity")
    #end
        @TableName(resultMap = "${packageName}.mapper.${ClassName}Mapper.${ClassName}Result")
        public class ${ClassName} extends ${Entity}
        {
        private static final long serialVersionUID = 1L;
#foreach ($column in $columns)
#if(!$table.isSuperColumn($column.javaField))
    /** $column.columnComment */
#if($column.list)
#set($parentheseIndex=$column.columnComment.indexOf("("))
#if($parentheseIndex != -1)
#set($comment=$column.columnComment.substring(0, $parentheseIndex))
#else
#set($comment=$column.columnComment)
#end
#if($parentheseIndex != -1)
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
#elseif($column.javaType == 'Date')
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
#else
    @Excel(name = "${comment}")
#end
#end
    private $column.javaType $column.javaField;
    #foreach ($column in $columns)
        #if(!$table.isSuperColumn($column.javaField))
                /** $column.columnComment */
            #if($column.list)
                #set($parentheseIndex=$column.columnComment.indexOf("("))
                #if($parentheseIndex != -1)
                    #set($comment=$column.columnComment.substring(0, $parentheseIndex))
                #else
                    #set($comment=$column.columnComment)
                #end
                #if($parentheseIndex != -1)
                @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
                #elseif($column.javaType == 'Date')
                @JsonFormat(pattern = "yyyy-MM-dd")
                @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
                #else
                @Excel(name = "${comment}")
                #end
            #end
            #if($column.isPk == 1)
            @TableId(value = "$column.columnName", type = IdType.AUTO)
            #end
        private $column.javaType $column.javaField;
#end
#end
#if($table.sub)
    /** $table.subTable.functionName信息 */
    private List<${subClassName}> ${subclassName}List;
        #end
    #end
    #if($table.sub)
            /** $table.subTable.functionName信息 */
            private List<${subClassName}> ${subclassName}List;
#end
#foreach ($column in $columns)
#if(!$table.isSuperColumn($column.javaField))
#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
#set($AttrName=$column.javaField)
#else
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
#end
    public void set${AttrName}($column.javaType $column.javaField)
    {
        this.$column.javaField = $column.javaField;
    }
    #end
    #foreach ($column in $columns)
        #if(!$table.isSuperColumn($column.javaField))
            #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
                #set($AttrName=$column.javaField)
            #else
                #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
            #end
                public void set${AttrName}($column.javaType $column.javaField) {
                    this.$column.javaField = $column.javaField;
                }
    public $column.javaType get${AttrName}()
    {
        return $column.javaField;
    }
#end
#end
                public $column.javaType get${AttrName}() {
                    return $column.javaField;
                }
        #end
    #end
#if($table.sub)
    public List<${subClassName}> get${subClassName}List()
    {
        return ${subclassName}List;
    }
    #if($table.sub)
            public List<${subClassName}> get${subClassName}List() {
                return ${subclassName}List;
            }
    public void set${subClassName}List(List<${subClassName}> ${subclassName}List)
    {
        this.${subclassName}List = ${subclassName}List;
    }
            public void set${subClassName}List(List<${subClassName}> ${subclassName}List) {
                this.${subclassName}List = ${subclassName}List;
            }
#end
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
#foreach ($column in $columns)
#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
#set($AttrName=$column.javaField)
#else
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
#end
            .append("${column.javaField}", get${AttrName}())
#end
#if($table.sub)
            .append("${subclassName}List", get${subClassName}List())
#end
            .toString();
    }
}
    #end
        @Override
        public String toString() {
            return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                #foreach ($column in $columns)
                    #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
                        #set($AttrName=$column.javaField)
                    #else
                        #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
                    #end
                .append("${column.javaField}", get${AttrName}())
                #end
                #if($table.sub)
                        .append("${subclassName}List", get${subClassName}List())
                        #end
                    .toString();
        }
        }
expert-generator/src/main/resources/vm/java/mapper.java.vm
@@ -8,15 +8,15 @@
/**
 * ${functionName}Mapper接口
 *
 *
 * @author ${author}
 * @date ${datetime}
 */
public interface ${ClassName}Mapper
public interface ${ClassName}Mapper
{
    /**
     * 查询${functionName}
     *
     *
     * @param ${pkColumn.javaField} ${functionName}主键
     * @return ${functionName}
     */
@@ -24,7 +24,7 @@
    /**
     * 查询${functionName}列表
     *
     *
     * @param ${className} ${functionName}
     * @return ${functionName}集合
     */
@@ -32,7 +32,7 @@
    /**
     * 新增${functionName}
     *
     *
     * @param ${className} ${functionName}
     * @return 结果
     */
@@ -40,7 +40,7 @@
    /**
     * 修改${functionName}
     *
     *
     * @param ${className} ${functionName}
     * @return 结果
     */
@@ -48,7 +48,7 @@
    /**
     * 删除${functionName}
     *
     *
     * @param ${pkColumn.javaField} ${functionName}主键
     * @return 结果
     */
@@ -56,36 +56,36 @@
    /**
     * 批量删除${functionName}
     *
     *
     * @param ${pkColumn.javaField}s 需要删除的数据主键集合
     * @return 结果
     */
    public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s);
#if($table.sub)
    #if($table.sub)
    /**
     * 批量删除${subTable.functionName}
     *
     * @param ${pkColumn.javaField}s 需要删除的数据主键集合
     * @return 结果
     */
    public int delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaType}[] ${pkColumn.javaField}s);
    /**
     * 批量新增${subTable.functionName}
     *
     * @param ${subclassName}List ${subTable.functionName}列表
     * @return 结果
     */
    public int batch${subClassName}(List<${subClassName}> ${subclassName}List);
        /**
         * 批量删除${subTable.functionName}
         *
         * @param ${pkColumn.javaField}s 需要删除的数据主键集合
         * @return 结果
         */
        public int delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaType}[] ${pkColumn.javaField}s);
    /**
     * 通过${functionName}主键删除${subTable.functionName}信息
     *
     * @param ${pkColumn.javaField} ${functionName}ID
     * @return 结果
     */
    public int delete${subClassName}By${subTableFkClassName}(${pkColumn.javaType} ${pkColumn.javaField});
#end
        /**
         * 批量新增${subTable.functionName}
         *
         * @param ${subclassName}List ${subTable.functionName}列表
         * @return 结果
         */
        public int batch${subClassName}(List<${subClassName}> ${subclassName}List);
        /**
         * 通过${functionName}主键删除${subTable.functionName}信息
         *
         * @param ${pkColumn.javaField} ${functionName}ID
         * @return 结果
         */
        public int delete${subClassName}By${subTableFkClassName}(${pkColumn.javaType} ${pkColumn.javaField});
    #end
}
expert-generator/src/main/resources/vm/java/service.java.vm
@@ -2,18 +2,18 @@
import java.util.List;
import ${packageName}.domain.${ClassName};
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * ${functionName}Service接口
 *
 *
 * @author ${author}
 * @date ${datetime}
 */
public interface I${ClassName}Service
{
public interface I${ClassName}Service extends IService<${ClassName}> {
    /**
     * 查询${functionName}
     *
     *
     * @param ${pkColumn.javaField} ${functionName}主键
     * @return ${functionName}
     */
@@ -21,7 +21,7 @@
    /**
     * 查询${functionName}列表
     *
     *
     * @param ${className} ${functionName}
     * @return ${functionName}集合
     */
@@ -29,7 +29,7 @@
    /**
     * 新增${functionName}
     *
     *
     * @param ${className} ${functionName}
     * @return 结果
     */
@@ -37,7 +37,7 @@
    /**
     * 修改${functionName}
     *
     *
     * @param ${className} ${functionName}
     * @return 结果
     */
@@ -45,7 +45,7 @@
    /**
     * 批量删除${functionName}
     *
     *
     * @param ${pkColumn.javaField}s 需要删除的${functionName}主键集合
     * @return 结果
     */
@@ -53,9 +53,9 @@
    /**
     * 删除${functionName}信息
     *
     *
     * @param ${pkColumn.javaField} ${functionName}主键
     * @return 结果
     */
    public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField});
}
}
expert-generator/src/main/resources/vm/java/serviceImpl.java.vm
@@ -1,169 +1,162 @@
package ${packageName}.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.List;
#foreach ($column in $columns)
#if($column.javaField == 'createTime' || $column.javaField == 'updateTime')
import com.gkhy.common.utils.DateUtils;
#break
#end
#end
    #foreach ($column in $columns)
        #if($column.javaField == 'createTime' || $column.javaField == 'updateTime')
        import com.rchuing.common.utils.DateUtils;
            #break
        #end
    #end
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
#if($table.sub)
import java.util.ArrayList;
import com.gkhy.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import ${packageName}.domain.${subClassName};
#end
    #if($table.sub)
    import java.util.ArrayList;
    import com.rchuing.common.utils.StringUtils;
    import org.springframework.transaction.annotation.Transactional;
    import ${packageName}.domain.${subClassName};
    #end
import ${packageName}.mapper.${ClassName}Mapper;
import ${packageName}.domain.${ClassName};
import ${packageName}.service.I${ClassName}Service;
/**
 * ${functionName}Service业务层处理
 *
 *
 * @author ${author}
 * @date ${datetime}
 */
@Service
public class ${ClassName}ServiceImpl implements I${ClassName}Service
{
public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${ClassName}> implements I${ClassName}Service {
    @Autowired
    private ${ClassName}Mapper ${className}Mapper;
    /**
     * 查询${functionName}
     *
     *
     * @param ${pkColumn.javaField} ${functionName}主键
     * @return ${functionName}
     */
    @Override
    public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField})
    {
    public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) {
        return ${className}Mapper.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField});
    }
    /**
     * 查询${functionName}列表
     *
     *
     * @param ${className} ${functionName}
     * @return ${functionName}
     */
    @Override
    public List<${ClassName}> select${ClassName}List(${ClassName} ${className})
    {
    public List<${ClassName}> select${ClassName}List(${ClassName} ${className}) {
        return ${className}Mapper.select${ClassName}List(${className});
    }
    /**
     * 新增${functionName}
     *
     *
     * @param ${className} ${functionName}
     * @return 结果
     */
#if($table.sub)
    @Transactional
#end
        #if($table.sub)
        @Transactional
        #end
    @Override
    public int insert${ClassName}(${ClassName} ${className})
    {
#foreach ($column in $columns)
#if($column.javaField == 'createTime')
        ${className}.setCreateTime(DateUtils.getNowDate());
#end
#end
#if($table.sub)
        int rows = ${className}Mapper.insert${ClassName}(${className});
        insert${subClassName}(${className});
        return rows;
#else
        return ${className}Mapper.insert${ClassName}(${className});
#end
    public int insert${ClassName}(${ClassName} ${className}) {
        #foreach ($column in $columns)
            #if($column.javaField == 'createTime')
                ${className}.setCreateTime(DateUtils.getNowDate());
            #end
        #end
        #if($table.sub)
            int rows = ${className}Mapper.insert${ClassName}(${className});
            insert${subClassName}(${className});
            return rows;
        #else
            return ${className}Mapper.insert${ClassName}(${className});
        #end
    }
    /**
     * 修改${functionName}
     *
     *
     * @param ${className} ${functionName}
     * @return 结果
     */
#if($table.sub)
    @Transactional
#end
        #if($table.sub)
        @Transactional
        #end
    @Override
    public int update${ClassName}(${ClassName} ${className})
    {
#foreach ($column in $columns)
#if($column.javaField == 'updateTime')
        ${className}.setUpdateTime(DateUtils.getNowDate());
#end
#end
#if($table.sub)
        ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}());
        insert${subClassName}(${className});
#end
    public int update${ClassName}(${ClassName} ${className}) {
        #foreach ($column in $columns)
            #if($column.javaField == 'updateTime')
                ${className}.setUpdateTime(DateUtils.getNowDate());
            #end
        #end
        #if($table.sub)
                ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}());
            insert${subClassName}(${className});
        #end
        return ${className}Mapper.update${ClassName}(${className});
    }
    /**
     * 批量删除${functionName}
     *
     *
     * @param ${pkColumn.javaField}s 需要删除的${functionName}主键
     * @return 结果
     */
#if($table.sub)
    @Transactional
#end
        #if($table.sub)
        @Transactional
        #end
    @Override
    public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s)
    {
#if($table.sub)
        ${className}Mapper.delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaField}s);
#end
    public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s) {
        #if($table.sub)
                ${className}Mapper.delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaField}s);
        #end
        return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s);
    }
    /**
     * 删除${functionName}信息
     *
     *
     * @param ${pkColumn.javaField} ${functionName}主键
     * @return 结果
     */
#if($table.sub)
    @Transactional
#end
        #if($table.sub)
        @Transactional
        #end
    @Override
    public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField})
    {
#if($table.sub)
        ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${pkColumn.javaField});
#end
    public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) {
        #if($table.sub)
                ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${pkColumn.javaField});
        #end
        return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField});
    }
#if($table.sub)
    #if($table.sub)
    /**
     * 新增${subTable.functionName}信息
     *
     * @param ${className} ${functionName}对象
     */
    public void insert${subClassName}(${ClassName} ${className})
    {
        List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List();
        ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}();
        if (StringUtils.isNotNull(${subclassName}List))
        {
            List<${subClassName}> list = new ArrayList<${subClassName}>();
            for (${subClassName} ${subclassName} : ${subclassName}List)
        /**
         * 新增${subTable.functionName}信息
         *
         * @param ${className} ${functionName}对象
         */
        public void insert${subClassName}(${ClassName} ${className}) {
            List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List();
            ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}();
            if (StringUtils.isNotNull(${subclassName}List))
            {
                ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField});
                list.add(${subclassName});
            }
            if (list.size() > 0)
            {
                ${className}Mapper.batch${subClassName}(list);
                List<${subClassName}> list = new ArrayList<${subClassName}>();
                for (${subClassName} ${subclassName} : ${subclassName}List)
                {
                    ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField});
                    list.add(${subclassName});
                }
                if (list.size() > 0)
                {
                        ${className}Mapper.batch${subClassName}(list);
                }
            }
        }
    }
#end
}
    #end
}
expert-generator/src/main/resources/vm/java/sub-domain.java.vm
@@ -1,76 +1,73 @@
package ${packageName}.domain;
#foreach ($import in $subImportList)
import ${import};
#end
    #foreach ($import in $subImportList)
    import ${import};
    #end
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.gkhy.common.annotation.Excel;
import com.gkhy.common.core.domain.BaseEntity;
import com.rchuing.common.annotation.Excel;
import com.rchuing.common.core.domain.BaseEntity;
/**
 * ${subTable.functionName}对象 ${subTableName}
 *
 *
 * @author ${author}
 * @date ${datetime}
 */
public class ${subClassName} extends BaseEntity
{
public class ${subClassName} extends BaseEntity {
    private static final long serialVersionUID = 1L;
#foreach ($column in $subTable.columns)
#if(!$table.isSuperColumn($column.javaField))
    /** $column.columnComment */
#if($column.list)
#set($parentheseIndex=$column.columnComment.indexOf("("))
#if($parentheseIndex != -1)
#set($comment=$column.columnComment.substring(0, $parentheseIndex))
#else
#set($comment=$column.columnComment)
#end
#if($parentheseIndex != -1)
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
#elseif($column.javaType == 'Date')
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
#else
    @Excel(name = "${comment}")
#end
#end
    private $column.javaType $column.javaField;
    #foreach ($column in $subTable.columns)
        #if(!$table.isSuperColumn($column.javaField))
            /** $column.columnComment */
            #if($column.list)
                #set($parentheseIndex=$column.columnComment.indexOf("("))
                #if($parentheseIndex != -1)
                    #set($comment=$column.columnComment.substring(0, $parentheseIndex))
                #else
                    #set($comment=$column.columnComment)
                #end
                #if($parentheseIndex != -1)
                @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
                #elseif($column.javaType == 'Date')
                @JsonFormat(pattern = "yyyy-MM-dd")
                @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
                #else
                @Excel(name = "${comment}")
                #end
            #end
        private $column.javaType $column.javaField;
#end
#end
#foreach ($column in $subTable.columns)
#if(!$table.isSuperColumn($column.javaField))
#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
#set($AttrName=$column.javaField)
#else
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
#end
    public void set${AttrName}($column.javaType $column.javaField)
    {
        this.$column.javaField = $column.javaField;
    }
        #end
    #end
    #foreach ($column in $subTable.columns)
        #if(!$table.isSuperColumn($column.javaField))
            #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
                #set($AttrName=$column.javaField)
            #else
                #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
            #end
            public void set${AttrName}($column.javaType $column.javaField) {
            this.$column.javaField = $column.javaField;
        }
    public $column.javaType get${AttrName}()
    {
        return $column.javaField;
    }
#end
#end
    public $column.javaType get${AttrName}() {
            return $column.javaField;
        }
        #end
    #end
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
#foreach ($column in $subTable.columns)
#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
#set($AttrName=$column.javaField)
#else
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
#end
            .append("${column.javaField}", get${AttrName}())
#end
            .toString();
            #foreach ($column in $subTable.columns)
                #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
                    #set($AttrName=$column.javaField)
                #else
                    #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
                #end
                    .append("${column.javaField}", get${AttrName}())
                    #end
                .toString();
    }
}
}
expert-system/pom.xml
@@ -22,6 +22,11 @@
            <groupId>com.gkhy</groupId>
            <artifactId>expert-common</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
expert-system/src/main/java/com/gkhy/system/domain/ApplyRecord.java
@@ -1,14 +1,18 @@
package com.gkhy.system.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gkhy.common.annotation.Excel;
import com.gkhy.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.rchuing.sis.common.annotation.Excel;
import com.rchuing.sis.common.core.domain.BaseEntity;
import java.util.Date;
/**
 * 开启申请记录对象 apply_record
@@ -16,50 +20,60 @@
 * @author expert
 * @date 2024-11-13
 */
        @TableName(resultMap = "com.gkhy.system.mapper.ApplyRecordMapper.ApplyRecordResult")
        public class ApplyRecord extends BaseEntity
        {
        private static final long serialVersionUID = 1L;
@TableName(resultMap = "com.gkhy.system.mapper.ApplyRecordMapper.ApplyRecordResult")
@ApiModel(value = "系统配置记录", description = "专家申请系统记录")
public class ApplyRecord extends BaseEntity {
    private static final long serialVersionUID = 1L;
                /** $column.columnComment */
            @TableId(value = "id", type = IdType.AUTO)
        private Long id;
    /**
     * $column.columnComment
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
                /** 开始时间 */
                @JsonFormat(pattern = "yyyy-MM-dd")
                @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd")
        private Date startTime;
    /**
     * 开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd")
    @ApiModelProperty("开始时间")
    private Date startTime;
                /** 结束时间 */
                @JsonFormat(pattern = "yyyy-MM-dd")
                @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
        private Date endTime;
    /**
     * 结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
    @ApiModelProperty("结束时间")
    private Date endTime;
                public void setId(Long id) {
                    this.id = id;
                }
    public void setId(Long id) {
        this.id = id;
    }
                public Long getId() {
                    return id;
                }
                public void setStartTime(Date startTime) {
                    this.startTime = startTime;
                }
    public Long getId() {
        return id;
    }
                public Date getStartTime() {
                    return startTime;
                }
                public void setEndTime(Date endTime) {
                    this.endTime = endTime;
                }
    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }
                public Date getEndTime() {
                    return endTime;
                }
    public Date getStartTime() {
        return startTime;
    }
        @Override
        public String toString() {
            return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }
    public Date getEndTime() {
        return endTime;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("startTime", getStartTime())
                .append("endTime", getEndTime())
@@ -67,6 +81,6 @@
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                    .toString();
        }
        }
                .toString();
    }
}
expert-system/src/main/java/com/gkhy/system/domain/Evaluation.java
@@ -3,10 +3,16 @@
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.gkhy.common.annotation.Excel;
import com.gkhy.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.rchuing.sis.common.annotation.Excel;
import com.rchuing.sis.common.core.domain.BaseEntity;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
 * 考评管理对象 evaluation
@@ -14,80 +20,103 @@
 * @author expert
 * @date 2024-11-13
 */
        @TableName(resultMap = "com.gkhy.system.mapper.EvaluationMapper.EvaluationResult")
        public class Evaluation extends BaseEntity
        {
        private static final long serialVersionUID = 1L;
@TableName(resultMap = "com.gkhy.system.mapper.EvaluationMapper.EvaluationResult")
@ApiModel(value = "考评管理对象", description = "考评管理表")
public class Evaluation extends BaseEntity {
    private static final long serialVersionUID = 1L;
                /** $column.columnComment */
            @TableId(value = "id", type = IdType.AUTO)
        private Long id;
    /**
     * $column.columnComment
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
                /** 分值 */
                @Excel(name = "分值")
        private Long score;
    /**
     * 分值
     */
    @Excel(name = "分值")
    @NotNull(message ="分值不能为空" )
    @ApiModelProperty(value = "分值",required = true)
    private Long score;
                /** 内容 */
                @Excel(name = "内容")
        private String content;
    /**
     * 内容
     */
    @Excel(name = "内容")
    @NotBlank(message ="内容不能为空" )
    @ApiModelProperty(value = "内容",required = true)
    private String content;
                /** 类型1加分项2扣分项 */
                @Excel(name = "类型1加分项2扣分项")
        private String scoreType;
    /**
     * 类型1加分项2扣分项
     */
    @Excel(name = "类型1加分项2扣分项")
    @NotBlank(message ="类型不能为空" )
    @ApiModelProperty(value = "类型1加分项2扣分项",required = true)
    private String scoreType;
                /** 删除标志(0代表存在,1代表删除,默认0) */
        private Long delFlag;
    /**
     * 删除标志(0代表存在,1代表删除,默认0)
     */
    private Long delFlag;
                /** 乐观锁 */
                @Excel(name = "乐观锁")
        private Long version;
    /**
     * 乐观锁
     */
    @Excel(name = "乐观锁")
    private Long version;
                public void setId(Long id) {
                    this.id = id;
                }
    public void setId(Long id) {
        this.id = id;
    }
                public Long getId() {
                    return id;
                }
                public void setScore(Long score) {
                    this.score = score;
                }
    public Long getId() {
        return id;
    }
                public Long getScore() {
                    return score;
                }
                public void setContent(String content) {
                    this.content = content;
                }
    public void setScore(Long score) {
        this.score = score;
    }
                public String getContent() {
                    return content;
                }
                public void setScoreType(String scoreType) {
                    this.scoreType = scoreType;
                }
    public Long getScore() {
        return score;
    }
                public String getScoreType() {
                    return scoreType;
                }
                public void setDelFlag(Long delFlag) {
                    this.delFlag = delFlag;
                }
    public void setContent(String content) {
        this.content = content;
    }
                public Long getDelFlag() {
                    return delFlag;
                }
                public void setVersion(Long version) {
                    this.version = version;
                }
    public String getContent() {
        return content;
    }
                public Long getVersion() {
                    return version;
                }
    public void setScoreType(String scoreType) {
        this.scoreType = scoreType;
    }
        @Override
        public String toString() {
            return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
    public String getScoreType() {
        return scoreType;
    }
    public void setDelFlag(Long delFlag) {
        this.delFlag = delFlag;
    }
    public Long getDelFlag() {
        return delFlag;
    }
    public void setVersion(Long version) {
        this.version = version;
    }
    public Long getVersion() {
        return version;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("score", getScore())
                .append("content", getContent())
@@ -98,6 +127,6 @@
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                    .toString();
        }
        }
                .toString();
    }
}
expert-system/src/main/java/com/gkhy/system/domain/ProjectExpert.java
@@ -3,10 +3,14 @@
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.gkhy.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.rchuing.sis.common.annotation.Excel;
import com.rchuing.sis.common.core.domain.BaseEntity;
import javax.validation.constraints.NotNull;
/**
 * 项目专家关联对象 project_expert
@@ -14,107 +18,134 @@
 * @author expert
 * @date 2024-11-14
 */
        @TableName(resultMap = "com.gkhy.system.mapper.ProjectExpertMapper.ProjectExpertResult")
        public class ProjectExpert extends BaseEntity
        {
        private static final long serialVersionUID = 1L;
@TableName(resultMap = "com.gkhy.system.mapper.ProjectExpertMapper.ProjectExpertResult")
@ApiModel(value = "项目专家关联对象", description = "项目专家关联对象表")
public class ProjectExpert extends BaseEntity {
    private static final long serialVersionUID = 1L;
                /** $column.columnComment */
            @TableId(value = "id", type = IdType.AUTO)
        private Long id;
    /**
     * $column.columnComment
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
                /** 项目id */
                @Excel(name = "项目id")
        private Long projectId;
    /**
     * 项目id
     */
    @ApiModelProperty(name = "项目名称",required = true)
    @NotNull(message = "项目不能为空")
    private Long projectId;
                /** 专家id */
                @Excel(name = "专家id")
        private Long expertId;
    /**
     * 专家id
     */
    @ApiModelProperty(name = "专家id",required = true)
    @NotNull(message = "选择专家")
    private Long expertId;
                /** 总分 */
                @Excel(name = "总分")
        private Long score;
    /**
     * 总分
     */
    @ApiModelProperty(name = "总分")
    private Long score;
                /** 评估状态0未评估1已评估 */
                @Excel(name = "评估状态0未评估1已评估")
        private Long envaluationState;
    /**
     * 评估状态0未评估1已评估
     */
    @ApiModelProperty(name = "评估状态0未评估1已评估")
    private Long evaluationState;
                /** 选取方式1固定2随机 */
                @Excel(name = "选取方式1固定2随机")
        private Long selectionMode;
    /**
     * 选取方式1固定2随机
     */
    @ApiModelProperty(name = "选取方式1固定2随机",required = true)
    @NotNull(message = "选取方式不能为空")
    private Long selectionMode;
                /** 是否组长0否1是 */
                @Excel(name = "是否组长0否1是")
        private Long teamLeader;
    /**
     * 是否组长0否1是
     */
    @ApiModelProperty(name = "是否组长0否1是",required = true)
    @NotNull(message = "是否组长不能为空")
    private Long teamLeader;
                /** 删除标志(0代表存在,1代表删除,默认0) */
        private Long delFlag;
    /**
     * 删除标志(0代表存在,1代表删除,默认0)
     */
    private Long delFlag;
                public void setId(Long id) {
                    this.id = id;
                }
    public void setId(Long id) {
        this.id = id;
    }
                public Long getId() {
                    return id;
                }
                public void setProjectId(Long projectId) {
                    this.projectId = projectId;
                }
    public Long getId() {
        return id;
    }
                public Long getProjectId() {
                    return projectId;
                }
                public void setExpertId(Long expertId) {
                    this.expertId = expertId;
                }
    public void setProjectId(Long projectId) {
        this.projectId = projectId;
    }
                public Long getExpertId() {
                    return expertId;
                }
                public void setScore(Long score) {
                    this.score = score;
                }
    public Long getProjectId() {
        return projectId;
    }
                public Long getScore() {
                    return score;
                }
                public void setEnvaluationState(Long envaluationState) {
                    this.envaluationState = envaluationState;
                }
    public void setExpertId(Long expertId) {
        this.expertId = expertId;
    }
                public Long getEnvaluationState() {
                    return envaluationState;
                }
                public void setSelectionMode(Long selectionMode) {
                    this.selectionMode = selectionMode;
                }
    public Long getExpertId() {
        return expertId;
    }
                public Long getSelectionMode() {
                    return selectionMode;
                }
                public void setTeamLeader(Long teamLeader) {
                    this.teamLeader = teamLeader;
                }
    public void setScore(Long score) {
        this.score = score;
    }
                public Long getTeamLeader() {
                    return teamLeader;
                }
                public void setDelFlag(Long delFlag) {
                    this.delFlag = delFlag;
                }
    public Long getScore() {
        return score;
    }
                public Long getDelFlag() {
                    return delFlag;
                }
    public void setevaluationState(Long evaluationState) {
        this.evaluationState = evaluationState;
    }
        @Override
        public String toString() {
            return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
    public Long getevaluationState() {
        return evaluationState;
    }
    public void setSelectionMode(Long selectionMode) {
        this.selectionMode = selectionMode;
    }
    public Long getSelectionMode() {
        return selectionMode;
    }
    public void setTeamLeader(Long teamLeader) {
        this.teamLeader = teamLeader;
    }
    public Long getTeamLeader() {
        return teamLeader;
    }
    public void setDelFlag(Long delFlag) {
        this.delFlag = delFlag;
    }
    public Long getDelFlag() {
        return delFlag;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("projectId", getProjectId())
                .append("expertId", getExpertId())
                .append("score", getScore())
                .append("envaluationState", getEnvaluationState())
                .append("evaluationState", getevaluationState())
                .append("selectionMode", getSelectionMode())
                .append("teamLeader", getTeamLeader())
                .append("delFlag", getDelFlag())
@@ -122,6 +153,6 @@
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                    .toString();
        }
        }
                .toString();
    }
}
expert-system/src/main/java/com/gkhy/system/domain/ProjectExpertDetail.java
@@ -3,10 +3,16 @@
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.gkhy.common.annotation.Excel;
import com.gkhy.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.rchuing.sis.common.annotation.Excel;
import com.rchuing.sis.common.core.domain.BaseEntity;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
 * 项目专家得分明细对象 project_expert_detail
@@ -14,71 +20,94 @@
 * @author expert
 * @date 2024-11-14
 */
        @TableName(resultMap = "com.gkhy.system.mapper.ProjectExpertDetailMapper.ProjectExpertDetailResult")
        public class ProjectExpertDetail extends BaseEntity
        {
        private static final long serialVersionUID = 1L;
@TableName(resultMap = "com.gkhy.system.mapper.ProjectExpertDetailMapper.ProjectExpertDetailResult")
@ApiModel(value = "项目专家得分明细对象", description = "项目专家得分明细对象表")
public class ProjectExpertDetail extends BaseEntity {
    private static final long serialVersionUID = 1L;
                /** $column.columnComment */
            @TableId(value = "id", type = IdType.AUTO)
        private Long id;
    /**
     * $column.columnComment
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
                /** 项目专家表id */
                @Excel(name = "项目专家表id")
        private Long projectExpert;
    /**
     * 项目专家表id
     */
    @Excel(name = "项目专家表id")
    @ApiModelProperty(value = "项目专家表id",required = true)
    @NotNull(message = "参数不能为空")
    private Long projectExpertId;
                /** 内容 */
                @Excel(name = "内容")
        private String content;
    /**
     * 内容
     */
    @Excel(name = "内容")
    @NotBlank(message = "内容不能为空")
    @ApiModelProperty(value = "内容",required = true)
    private String content;
                /** 分值 */
                @Excel(name = "分值")
        private Long score;
    /**
     * 分值
     */
    @ApiModelProperty(value = "分值")
    @NotNull(message = "分值不能为空")
    private Long score;
                /** 删除标志(0代表存在,1代表删除,默认0) */
        private Long delFlag;
    @NotBlank(message = "评分类型不能为空")
    @ApiModelProperty(value = "类型1加分项2扣分项",required = true)
    private String scoreType;
                public void setId(Long id) {
                    this.id = id;
                }
    /**
     * 删除标志(0代表存在,1代表删除,默认0)
     */
    private Long delFlag;
                public Long getId() {
                    return id;
                }
                public void setProjectExpert(Long projectExpert) {
                    this.projectExpert = projectExpert;
                }
    public void setId(Long id) {
        this.id = id;
    }
                public Long getProjectExpert() {
                    return projectExpert;
                }
                public void setContent(String content) {
                    this.content = content;
                }
    public Long getId() {
        return id;
    }
                public String getContent() {
                    return content;
                }
                public void setScore(Long score) {
                    this.score = score;
                }
    public void setProjectExpertId(Long projectExpertId) {
        this.projectExpertId = projectExpertId;
    }
                public Long getScore() {
                    return score;
                }
                public void setDelFlag(Long delFlag) {
                    this.delFlag = delFlag;
                }
    public Long getProjectExpertId() {
        return projectExpertId;
    }
                public Long getDelFlag() {
                    return delFlag;
                }
    public void setContent(String content) {
        this.content = content;
    }
        @Override
        public String toString() {
            return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
    public String getContent() {
        return content;
    }
    public void setScore(Long score) {
        this.score = score;
    }
    public Long getScore() {
        return score;
    }
    public void setDelFlag(Long delFlag) {
        this.delFlag = delFlag;
    }
    public Long getDelFlag() {
        return delFlag;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("projectExpert", getProjectExpert())
                .append("projectExpert", getProjectExpertId())
                .append("content", getContent())
                .append("score", getScore())
                .append("delFlag", getDelFlag())
@@ -86,6 +115,14 @@
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                    .toString();
        }
        }
                .toString();
    }
    public  String getScoreType() {
        return scoreType;
    }
    public void setScoreType( String scoreType) {
        this.scoreType = scoreType;
    }
}
expert-system/src/main/java/com/gkhy/system/domain/ProjectFile.java
@@ -3,10 +3,16 @@
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.gkhy.common.annotation.Excel;
import com.gkhy.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.rchuing.sis.common.annotation.Excel;
import com.rchuing.sis.common.core.domain.BaseEntity;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
 * 项目附件对象 project_file
@@ -14,135 +20,171 @@
 * @author expert
 * @date 2024-11-14
 */
        @TableName(resultMap = "com.gkhy.system.mapper.ProjectFileMapper.ProjectFileResult")
        public class ProjectFile extends BaseEntity
        {
        private static final long serialVersionUID = 1L;
@TableName(resultMap = "com.gkhy.system.mapper.ProjectFileMapper.ProjectFileResult")
@ApiModel(value = "项目附件对象", description = "项目附件对象表")
public class ProjectFile extends BaseEntity {
    private static final long serialVersionUID = 1L;
                /** $column.columnComment */
            @TableId(value = "id", type = IdType.AUTO)
        private Long id;
    /**
     * $column.columnComment
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
                /** 项目id */
                @Excel(name = "项目id")
        private Long projectId;
    /**
     * 项目id
     */
    @ApiModelProperty(value = "项目id",required = true)
    @NotNull(message = "参数不能为空")
    private Long projectId;
                /** 项目附件类型1审批单附件2项目附件 */
                @Excel(name = "项目附件类型1审批单附件2项目附件")
        private String module;
    /**
     * 项目附件类型1审批单附件2项目附件
     */
    @ApiModelProperty(value = "项目附件类型1审批单附件2项目附件")
    @NotBlank(message = "项目附件类型不能为空")
    private String module;
                /** 本地路径 */
                @Excel(name = "本地路径")
        private String filePath;
    /**
     * 本地路径
     */
    @Excel(name = "本地路径")
    @ApiModelProperty(value = "本地路径")
    private String filePath;
                /** 访问路径 */
                @Excel(name = "访问路径")
        private String fileUrl;
    /**
     * 访问路径
     */
    @Excel(name = "访问路径")
    @ApiModelProperty(value = "访问路径")
    private String fileUrl;
                /** 附件名称 */
                @Excel(name = "附件名称")
        private String fileName;
    /**
     * 附件名称
     */
    @ApiModelProperty(value = "附件名称")
    private String fileName;
                /** 后缀 */
                @Excel(name = "后缀")
        private String fileSuffix;
    /**
     * 后缀
     */
    @ApiModelProperty(value = "后缀")
    private String fileSuffix;
                /** 附件描述 */
                @Excel(name = "附件描述")
        private String fileDesc;
    /**
     * 附件描述
     */
    @ApiModelProperty(value = "附件描述")
    private String fileDesc;
                /** 文件大小 */
                @Excel(name = "文件大小")
        private Long fileSize;
    /**
     * 文件大小
     */
    @ApiModelProperty(value = "文件大小")
    private Long fileSize;
                /** 文件类型 */
                @Excel(name = "文件类型")
        private String fileType;
    /**
     * 文件类型
     */
    @ApiModelProperty(value = "文件类型")
    private String fileType;
                /** 删除标志(0代表存在,1代表删除,默认0) */
        private Long delFlag;
    /**
     * 删除标志(0代表存在,1代表删除,默认0)
     */
    private Long delFlag;
                public void setId(Long id) {
                    this.id = id;
                }
    public void setId(Long id) {
        this.id = id;
    }
                public Long getId() {
                    return id;
                }
                public void setProjectId(Long projectId) {
                    this.projectId = projectId;
                }
    public Long getId() {
        return id;
    }
                public Long getProjectId() {
                    return projectId;
                }
                public void setModule(String module) {
                    this.module = module;
                }
    public void setProjectId(Long projectId) {
        this.projectId = projectId;
    }
                public String getModule() {
                    return module;
                }
                public void setFilePath(String filePath) {
                    this.filePath = filePath;
                }
    public Long getProjectId() {
        return projectId;
    }
                public String getFilePath() {
                    return filePath;
                }
                public void setFileUrl(String fileUrl) {
                    this.fileUrl = fileUrl;
                }
    public void setModule(String module) {
        this.module = module;
    }
                public String getFileUrl() {
                    return fileUrl;
                }
                public void setFileName(String fileName) {
                    this.fileName = fileName;
                }
    public String getModule() {
        return module;
    }
                public String getFileName() {
                    return fileName;
                }
                public void setFileSuffix(String fileSuffix) {
                    this.fileSuffix = fileSuffix;
                }
    public void setFilePath(String filePath) {
        this.filePath = filePath;
    }
                public String getFileSuffix() {
                    return fileSuffix;
                }
                public void setFileDesc(String fileDesc) {
                    this.fileDesc = fileDesc;
                }
    public String getFilePath() {
        return filePath;
    }
                public String getFileDesc() {
                    return fileDesc;
                }
                public void setFileSize(Long fileSize) {
                    this.fileSize = fileSize;
                }
    public void setFileUrl(String fileUrl) {
        this.fileUrl = fileUrl;
    }
                public Long getFileSize() {
                    return fileSize;
                }
                public void setFileType(String fileType) {
                    this.fileType = fileType;
                }
    public String getFileUrl() {
        return fileUrl;
    }
                public String getFileType() {
                    return fileType;
                }
                public void setDelFlag(Long delFlag) {
                    this.delFlag = delFlag;
                }
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
                public Long getDelFlag() {
                    return delFlag;
                }
    public String getFileName() {
        return fileName;
    }
        @Override
        public String toString() {
            return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
    public void setFileSuffix(String fileSuffix) {
        this.fileSuffix = fileSuffix;
    }
    public String getFileSuffix() {
        return fileSuffix;
    }
    public void setFileDesc(String fileDesc) {
        this.fileDesc = fileDesc;
    }
    public String getFileDesc() {
        return fileDesc;
    }
    public void setFileSize(Long fileSize) {
        this.fileSize = fileSize;
    }
    public Long getFileSize() {
        return fileSize;
    }
    public void setFileType(String fileType) {
        this.fileType = fileType;
    }
    public String getFileType() {
        return fileType;
    }
    public void setDelFlag(Long delFlag) {
        this.delFlag = delFlag;
    }
    public Long getDelFlag() {
        return delFlag;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("projectId", getProjectId())
                .append("module", getModule())
@@ -158,6 +200,6 @@
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                    .toString();
        }
        }
                .toString();
    }
}
expert-system/src/main/java/com/gkhy/system/domain/ProjectManagement.java
@@ -1,14 +1,19 @@
package com.gkhy.system.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gkhy.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.rchuing.sis.common.annotation.Excel;
import com.rchuing.sis.common.core.domain.BaseEntity;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
 * 项目管理对象 project_management
@@ -16,181 +21,244 @@
 * @author expert
 * @date 2024-11-14
 */
        @TableName(resultMap = "com.gkhy.system.mapper.ProjectManagementMapper.ProjectManagementResult")
        public class ProjectManagement extends BaseEntity
        {
        private static final long serialVersionUID = 1L;
@TableName(resultMap = "com.gkhy.system.mapper.ProjectManagementMapper.ProjectManagementResult")
@ApiModel(value = "项目管理对象", description = "项目管理对象表")
public class ProjectManagement extends BaseEntity {
    private static final long serialVersionUID = 1L;
                /** 主键 */
            @TableId(value = "id", type = IdType.AUTO)
        private Long id;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
                /** 项目名称 */
                @Excel(name = "项目名称")
        private String projectName;
    /**
     * 项目名称
     */
    @ApiModelProperty(value = "项目名称",required = true)
    @NotBlank(message = "项目名称不能为空")
    private String projectName;
                /** 处室 */
                @Excel(name = "处室")
        private Long deptId;
    /**
     * 处室
     */
    @ApiModelProperty(value = "处室",required = true)
    @NotNull(message = "处室不能为空")
    private Long deptId;
                /** 部门名称 */
                @Excel(name = "部门名称")
        private String deptName;
    /**
     * 部门名称
     */
    @ApiModelProperty(value = "处室名称",required = true)
    @NotBlank(message = "处室不能为空")
    private String deptName;
                /** 被检单位 */
                @Excel(name = "被检单位")
        private String companyName;
    /**
     * 被检单位
     */
    @ApiModelProperty(value = "被检单位")
    private String companyName;
                /** 项目地址 */
                @Excel(name = "项目地址")
        private String projectAddress;
    /**
     * 项目地址
     */
    @ApiModelProperty(value = "项目地址",required = true)
    @NotBlank(message = "项目地址不能为空")
    private String projectAddress;
                /** 部门带队人员 */
                @Excel(name = "部门带队人员")
        private String deptUserName;
    /**
     * 部门带队人员
     */
    @ApiModelProperty(value = "部门带队人员",required = true)
    @NotBlank(message = "处室带队人员不能为空")
    private String deptUserName;
                /** 乐观锁 */
                @Excel(name = "乐观锁")
        private Long version;
    /**
     * 乐观锁
     */
    @ApiModelProperty(value = "乐观锁")
    private Long version;
                /** 审批状态(0暂存,1生成审批单,2审批通过,3审批驳回,4完结) */
                @Excel(name = "审批状态(0暂存,1生成审批单,2审批通过,3审批驳回,4完结)")
        private Long state;
    /**
     * 审批状态(0暂存,1生成审批单,2审批通过,3审批驳回,4完结)
     */
    @ApiModelProperty(value = "审批状态(0暂存,1选取专家,2生成审批单,3审批通过,4完结)")
    private Long state;
                /** 项目预计开始日期 */
                @JsonFormat(pattern = "yyyy-MM-dd")
                @Excel(name = "项目预计开始日期", width = 30, dateFormat = "yyyy-MM-dd")
        private Date projectDateStart;
    @ApiModelProperty(value = "步骤1暂存2专家选取3审批4完结")
    private Long step;
                /** 项目预计结束日期 */
                @JsonFormat(pattern = "yyyy-MM-dd")
                @Excel(name = "项目预计结束日期", width = 30, dateFormat = "yyyy-MM-dd")
        private Date projectDateEnd;
    /**
     * 项目预计开始日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "项目预计开始日期",required = true)
    @NotNull(message = "项目预计开始日期不能为空")
    private Date projectDateStart;
                /** 专家证书 */
                @Excel(name = "专家证书")
        private String expertCertificate;
    /**
     * 项目预计结束日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "项目预计结束日期", required = true)
    @NotNull(message = "项目预计结束日期不能为空")
    private Date projectDateEnd;
                /** 评估状态0未评估1已评估 */
                @Excel(name = "评估状态0未评估1已评估")
        private Long envaluationState;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "项目审批时间")
    private Date projectCheckTime;
                /** 专家人数 */
                @Excel(name = "专家人数")
        private Long expertNum;
    /**
     * 专家证书
     */
    @ApiModelProperty(value = "专家证书")
    private String expertCertificate;
                /** 删除标志(0代表存在,1代表删除,默认0) */
        private Long delFlag;
    /**
     * 评估状态0未评估1已评估
     */
    @ApiModelProperty(value = "评估状态0未评估1已评估")
    private Long evaluationState;
                public void setId(Long id) {
                    this.id = id;
                }
    /**
     * 专家人数
     */
    @ApiModelProperty(value = "专家人数")
    private Long expertNum;
                public Long getId() {
                    return id;
                }
                public void setProjectName(String projectName) {
                    this.projectName = projectName;
                }
    @ApiModelProperty(value = "专家id")
    private Long expertId;
                public String getProjectName() {
                    return projectName;
                }
                public void setDeptId(Long deptId) {
                    this.deptId = deptId;
                }
    @ApiModelProperty(value = "专家名称组长")
    private String expertName;
                public Long getDeptId() {
                    return deptId;
                }
                public void setDeptName(String deptName) {
                    this.deptName = deptName;
                }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "项目结束日期")
    private Date projectEndTime;
                public String getDeptName() {
                    return deptName;
                }
                public void setCompanyName(String companyName) {
                    this.companyName = companyName;
                }
    @ApiModelProperty(value = "项目总结")
    private String desc;
                public String getCompanyName() {
                    return companyName;
                }
                public void setProjectAddress(String projectAddress) {
                    this.projectAddress = projectAddress;
                }
    /**
     * 删除标志(0代表存在,1代表删除,默认0)
     */
    private Long delFlag;
                public String getProjectAddress() {
                    return projectAddress;
                }
                public void setDeptUserName(String deptUserName) {
                    this.deptUserName = deptUserName;
                }
    public void setId(Long id) {
        this.id = id;
    }
                public String getDeptUserName() {
                    return deptUserName;
                }
                public void setVersion(Long version) {
                    this.version = version;
                }
    public Long getId() {
        return id;
    }
                public Long getVersion() {
                    return version;
                }
                public void setState(Long state) {
                    this.state = state;
                }
    public void setProjectName(String projectName) {
        this.projectName = projectName;
    }
                public Long getState() {
                    return state;
                }
                public void setProjectDateStart(Date projectDateStart) {
                    this.projectDateStart = projectDateStart;
                }
    public String getProjectName() {
        return projectName;
    }
                public Date getProjectDateStart() {
                    return projectDateStart;
                }
                public void setProjectDateEnd(Date projectDateEnd) {
                    this.projectDateEnd = projectDateEnd;
                }
    public void setDeptId(Long deptId) {
        this.deptId = deptId;
    }
                public Date getProjectDateEnd() {
                    return projectDateEnd;
                }
                public void setExpertCertificate(String expertCertificate) {
                    this.expertCertificate = expertCertificate;
                }
    public Long getDeptId() {
        return deptId;
    }
                public String getExpertCertificate() {
                    return expertCertificate;
                }
                public void setEnvaluationState(Long envaluationState) {
                    this.envaluationState = envaluationState;
                }
    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }
                public Long getEnvaluationState() {
                    return envaluationState;
                }
                public void setExpertNum(Long expertNum) {
                    this.expertNum = expertNum;
                }
    public String getDeptName() {
        return deptName;
    }
                public Long getExpertNum() {
                    return expertNum;
                }
                public void setDelFlag(Long delFlag) {
                    this.delFlag = delFlag;
                }
    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }
                public Long getDelFlag() {
                    return delFlag;
                }
    public String getCompanyName() {
        return companyName;
    }
        @Override
        public String toString() {
            return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
    public void setProjectAddress(String projectAddress) {
        this.projectAddress = projectAddress;
    }
    public String getProjectAddress() {
        return projectAddress;
    }
    public void setDeptUserName(String deptUserName) {
        this.deptUserName = deptUserName;
    }
    public String getDeptUserName() {
        return deptUserName;
    }
    public void setVersion(Long version) {
        this.version = version;
    }
    public Long getVersion() {
        return version;
    }
    public void setState(Long state) {
        this.state = state;
    }
    public Long getState() {
        return state;
    }
    public void setProjectDateStart(Date projectDateStart) {
        this.projectDateStart = projectDateStart;
    }
    public Date getProjectDateStart() {
        return projectDateStart;
    }
    public void setProjectDateEnd(Date projectDateEnd) {
        this.projectDateEnd = projectDateEnd;
    }
    public Date getProjectDateEnd() {
        return projectDateEnd;
    }
    public void setExpertCertificate(String expertCertificate) {
        this.expertCertificate = expertCertificate;
    }
    public String getExpertCertificate() {
        return expertCertificate;
    }
    public void setExpertNum(Long expertNum) {
        this.expertNum = expertNum;
    }
    public Long getExpertNum() {
        return expertNum;
    }
    public void setDelFlag(Long delFlag) {
        this.delFlag = delFlag;
    }
    public Long getDelFlag() {
        return delFlag;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("projectName", getProjectName())
                .append("deptId", getDeptId())
@@ -204,13 +272,70 @@
                .append("projectDateStart", getProjectDateStart())
                .append("projectDateEnd", getProjectDateEnd())
                .append("expertCertificate", getExpertCertificate())
                .append("envaluationState", getEnvaluationState())
                .append("evaluationState", getEvaluationState())
                .append("expertNum", getExpertNum())
                .append("delFlag", getDelFlag())
                .append("createBy", getCreateBy())
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                    .toString();
        }
        }
                .toString();
    }
    public Date getProjectCheckTime() {
        return projectCheckTime;
    }
    public void setProjectCheckTime(Date projectCheckTime) {
        this.projectCheckTime = projectCheckTime;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
    public Long getExpertId() {
        return expertId;
    }
    public void setExpertId(Long expertId) {
        this.expertId = expertId;
    }
    public String getExpertName() {
        return expertName;
    }
    public void setExpertName(String expertName) {
        this.expertName = expertName;
    }
    public Date getProjectEndTime() {
        return projectEndTime;
    }
    public void setProjectEndTime(Date projectEndTime) {
        this.projectEndTime = projectEndTime;
    }
    public Long getStep() {
        return step;
    }
    public void setStep(Long step) {
        this.step = step;
    }
    public Long getEvaluationState() {
        return evaluationState;
    }
    public void setEvaluationState(Long evaluationState) {
        this.evaluationState = evaluationState;
    }
}
expert-system/src/main/java/com/gkhy/system/domain/SysExpertClassify.java
@@ -1,19 +1,15 @@
package com.gkhy.assess.system.domain;
package com.gkhy.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.gkhy.assess.common.domain.BaseEntity;
import com.gkhy.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import java.util.List;
import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
expert-system/src/main/java/com/gkhy/system/domain/SysExpertInfo.java
@@ -1,12 +1,9 @@
package com.gkhy.assess.system.domain;
package com.gkhy.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.time.LocalDateTime;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.gkhy.assess.common.domain.BaseEntity;
import com.gkhy.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
@@ -17,6 +14,7 @@
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.util.Date;
import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
@@ -66,7 +64,8 @@
    @NotNull(message ="出生日期不能为空" )
    @ApiModelProperty("出生日期")
    @TableField("birthday")
    private LocalDateTime birthday;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    @NotBlank(message ="手机号不能为空" )
    @Length(min = 11, max = 11, message = "手机号只能为11位")
@@ -208,6 +207,25 @@
    @TableField("level")
    private String level;
    @ApiModelProperty("评定等级1、一级,2、二级,3、三级")
    @TableField("rating_level")
    private String ratingLevel;
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField("employment_date_start")
    private Date employmentDateStart;
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField("employment_date_end")
    private Date employmentDateEnd;
    @NotNull(message ="业务处室不能为空" )
    @ApiModelProperty("业务处室")
    @TableField("dept_id")
    private Long deptId;
    @ApiModelProperty("专家证书")
    @TableField("expert_certificate")
    private String expertCertificate;
}
expert-system/src/main/java/com/gkhy/system/domain/SysSettings.java
@@ -1,12 +1,15 @@
package com.gkhy.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.gkhy.common.annotation.Excel;
import com.gkhy.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.rchuing.sis.common.annotation.Excel;
import com.rchuing.sis.common.core.domain.BaseEntity;
import javax.validation.constraints.NotBlank;
/**
 * 系统配置对象 sys_settings
@@ -14,27 +17,31 @@
 * @author expert
 * @date 2024-11-13
 */
        @TableName(resultMap = "com.gkhy.system.mapper.SysSettingsMapper.SysSettingsResult")
        public class SysSettings extends BaseEntity
        {
        private static final long serialVersionUID = 1L;
@TableName(resultMap = "com.gkhy.system.mapper.SysSettingsMapper.SysSettingsResult")
@ApiModel(value = "系统配置对象", description = "专家申请系统设置")
public class SysSettings extends BaseEntity {
    private static final long serialVersionUID = 1L;
                /** 1开启2关闭 */
                @Excel(name = "1开启2关闭")
        private String state;
    /**
     * 1开启2关闭
     */
    @Excel(name = "1开启2关闭")
    @NotBlank(message = "参数不能为空")
    @ApiModelProperty("1开启2关闭")
    private String state;
                public void setState(String state) {
                    this.state = state;
                }
    public void setState(String state) {
        this.state = state;
    }
                public String getState() {
                    return state;
                }
    public String getState() {
        return state;
    }
        @Override
        public String toString() {
            return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("state", getState())
                    .toString();
        }
        }
                .toString();
    }
}
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectArchiveReq.java
@@ -1,4 +1,36 @@
package com.gkhy.system.domain.vo.request;
public class ProjectArchiveReq {
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gkhy.system.domain.ProjectFile;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@ApiModel(value = "项目归档" , description = "项目归档")
@Data
public class ProjectArchiveReq implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @ApiModelProperty(value = "项目id",required = true)
    @NotNull
    private Long id;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(name = "项目结束日期",required = true)
    @NotNull(message = "结束日期必填")
    private Date projectEndTime;
    @ApiModelProperty(name = "项目总结")
    private String desc;
    @ApiModelProperty(name = "项目附件")
    private List<ProjectFile> projectFile;
}
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectCheckReq.java
@@ -1,4 +1,27 @@
package com.gkhy.system.domain.vo.request;
public class ProjectCheckReq {
import com.gkhy.system.domain.ProjectFile;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
@ApiModel(value = "项目审批" , description = "项目审批")
@Data
public class ProjectCheckReq implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(name = "审批状态(3审批通过、1审批不通)",required = true)
    @NotNull(message = "参数不能为空")
    private Long state;
    @ApiModelProperty(value = "项目id",required = true)
    @NotNull
    private Long id;
    @ApiModelProperty(name = "项目附件-类型1审批单附件")
    private List<ProjectFile> projectFile;
}
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertSaveBatchReqDto.java
@@ -1,4 +1,30 @@
package com.gkhy.system.domain.vo.request;
public class ProjectExpertSaveBatchReqDto {
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
@ApiModel(value = "项目专家关联对象批量处理", description = "项目专家关联对象批量处理")
@Data
public class ProjectExpertSaveBatchReqDto implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "删除数据")
    private List<Long> delData;
    @ApiModelProperty(value = "新增编辑数据")
    @NotEmpty
    private List<ProjectExpertSaveReqDto> saveData;
    /**
     * 项目id
     */
    @ApiModelProperty(name = "项目id",required = true)
    @NotNull(message = "项目不能为空")
    private Long id;
}
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertSaveReqDto.java
@@ -1,16 +1,12 @@
package com.gkhy.system.domain;
package com.gkhy.system.domain.vo.request;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.gkhy.common.annotation.Excel;
import com.gkhy.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
@@ -19,141 +15,47 @@
 * @author expert
 * @date 2024-11-14
 */
@TableName(resultMap = "com.gkhy.system.mapper.ProjectExpertMapper.ProjectExpertResult")
@ApiModel(value = "项目专家关联对象", description = "项目专家关联对象表")
public class ProjectExpert extends BaseEntity {
@ApiModel(value = "项目专家关联对象新增编辑", description = "项目专家关联对象新增编辑")
@Data
public class ProjectExpertSaveReqDto implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * $column.columnComment
     */
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "id")
    private Long id;
    /**
     * 项目id
     */
    @ApiModelProperty(name = "项目名称",required = true)
    @NotNull(message = "项目不能为空")
    private Long projectId;
    /**
     * 专家id
     */
//    /**
//     * 项目id
//     */
//    @ApiModelProperty(name = "项目名称",required = true)
//    @NotNull(message = "项目不能为空")
//    private Long projectId;
    @ApiModelProperty(name = "专家id",required = true)
    @NotNull(message = "选择专家")
    private Long expertId;
    /**
     * 总分
     */
    @Excel(name = "总分")
    private Long score;
    @ApiModelProperty(name = "专家名称",required = true)
    @NotBlank(message = "选择专家名称")
    private String expertName;
    /**
     * 评估状态0未评估1已评估
     */
    @ApiModelProperty(name = "评估状态0未评估1已评估")
    private Long envaluationState;
//    /**
//     * 总分
//     */
//    @Excel(name = "总分")
//    private Long score;
    /**
     * 选取方式1固定2随机
     */
//    /**
//     * 评估状态0未评估1已评估
//     */
//    @ApiModelProperty(name = "评估状态0未评估1已评估")
//    private Long evaluationState;
    @ApiModelProperty(name = "选取方式1固定2随机",required = true)
    @NotNull(message = "选取方式不能为空")
    private Long selectionMode;
    /**
     * 是否组长0否1是
     */
    @ApiModelProperty(name = "是否组长0否1是",required = true)
    @NotNull(message = "是否组长不能为空")
    private Long teamLeader;
    /**
     * 删除标志(0代表存在,1代表删除,默认0)
     */
    private Long delFlag;
    public void setId(Long id) {
        this.id = id;
    }
    public Long getId() {
        return id;
    }
    public void setProjectId(Long projectId) {
        this.projectId = projectId;
    }
    public Long getProjectId() {
        return projectId;
    }
    public void setExpertId(Long expertId) {
        this.expertId = expertId;
    }
    public Long getExpertId() {
        return expertId;
    }
    public void setScore(Long score) {
        this.score = score;
    }
    public Long getScore() {
        return score;
    }
    public void setEnvaluationState(Long envaluationState) {
        this.envaluationState = envaluationState;
    }
    public Long getEnvaluationState() {
        return envaluationState;
    }
    public void setSelectionMode(Long selectionMode) {
        this.selectionMode = selectionMode;
    }
    public Long getSelectionMode() {
        return selectionMode;
    }
    public void setTeamLeader(Long teamLeader) {
        this.teamLeader = teamLeader;
    }
    public Long getTeamLeader() {
        return teamLeader;
    }
    public void setDelFlag(Long delFlag) {
        this.delFlag = delFlag;
    }
    public Long getDelFlag() {
        return delFlag;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("projectId", getProjectId())
                .append("expertId", getExpertId())
                .append("score", getScore())
                .append("envaluationState", getEnvaluationState())
                .append("selectionMode", getSelectionMode())
                .append("teamLeader", getTeamLeader())
                .append("delFlag", getDelFlag())
                .append("createBy", getCreateBy())
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                .toString();
    }
}
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertScoreSaveReq.java
@@ -1,6 +1,49 @@
package com.gkhy.system.domain.vo.request;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
public class ProjectExpertScoreReq implements Serializable {
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
@ApiModel(value = "项目专家人员考评分数" , description = "项目专家人员考评分数")
@Data
public class ProjectExpertScoreSaveReq implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "考评保存数据")
    private List<Score> saveData;
    @ApiModelProperty(value = "删除数据")
    private List<Long> delData;
    @ApiModelProperty(value = "项目专家id",required = true)
    @NotNull
    private Long projectExpertId;
    @ApiModelProperty(value = "总分",required = true)
    @NotNull(message = "得分不能为空")
    private Long score;
    @Data
    static public class Score {
        @ApiModelProperty(value = "数据id",required = false)
        private Long id;
        @ApiModelProperty(value = "评分",required = true)
        @NotNull(message = "分数不能为空")
        private Long score;
        @ApiModelProperty(value = "类型1加分项2扣分项",required = true)
        @NotBlank(message = "类型不能为空")
        private String scoreType;
        @ApiModelProperty(value = "评分内容",required = true)
        @NotBlank(message = "内容不能为空")
        private String content;
    }
}
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertStateReq.java
@@ -1,36 +1,27 @@
package com.gkhy.system.domain.vo.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gkhy.system.domain.ProjectFile;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@ApiModel(value = "项目归档" , description = "项目归档")
@ApiModel(value = "项目考评筛选" , description = "项目考评筛选")
@Data
public class ProjectArchiveReq implements Serializable {
public class ProjectExpertStateReq implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @ApiModelProperty(value = "项目id",required = true)
    @NotNull
    private Long id;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(name = "项目结束日期",required = true)
    @NotNull(message = "结束日期必填")
    private Date projectEndTime;
    @ApiModelProperty(value = "项目审批时间")
    private Date projectCheckTime;
    @ApiModelProperty(name = "项目总结")
    private String desc;
    @ApiModelProperty(value = "项目名称")
    private String projectName;
    @ApiModelProperty(name = "项目附件")
    private List<ProjectFile> projectFile;
    @ApiModelProperty(value = "评估状态0未评估1已评估")
    private Long evaluationState;
}
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertTeamLeaderReqDto.java
@@ -1,4 +1,20 @@
package com.gkhy.system.domain.vo.request;
public class ProjectExpertTeamLeaderReqDto {
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@ApiModel(value = "项目专家关联对象设置组长操作", description = "项目专家关联对象设置组长操作")
@Data
public class ProjectExpertTeamLeaderReqDto implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "id",required = true)
    @NotNull
    private Long id;
    @ApiModelProperty(name = "是否组长0否1是",required = true)
    @NotNull(message = "是否组长不能为空")
    private Long teamLeader;
}
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectManageSaveReq.java
@@ -1,4 +1,85 @@
package com.gkhy.system.domain.vo.request;
public class ProjectManageSaveReq {
import com.fasterxml.jackson.annotation.JsonFormat;
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.Date;
@ApiModel(value = "项目管理保存" , description = "项目管理保存")
@Data
public class ProjectManageSaveReq implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @ApiModelProperty(value = "id")
    private Long id;
    /**
     * 项目名称
     */
    @ApiModelProperty(name = "项目名称",required = true)
    @NotBlank(message = "项目名称不能为空")
    private String projectName;
    /**
     * 处室
     */
    @ApiModelProperty(name = "处室",required = true)
    @NotNull(message = "处室不能为空")
    private Long deptId;
    /**
     * 部门名称
     */
    @ApiModelProperty(name = "处室名称",required = true)
    @NotBlank(message = "处室不能为空")
    private String deptName;
    /**
     * 被检单位
     */
    @ApiModelProperty(name = "被检单位")
    private String companyName;
    /**
     * 项目地址
     */
    @ApiModelProperty(name = "项目地址",required = true)
    @NotBlank(message = "项目地址不能为空")
    private String projectAddress;
    /**
     * 部门带队人员
     */
    @ApiModelProperty(name = "部门带队人员",required = true)
    @NotBlank(message = "处室带队人员不能为空")
    private String deptUserName;
    /**
     * 项目预计开始日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(name = "项目预计开始日期",required = true)
    @NotNull(message = "项目预计开始日期不能为空")
    private Date projectDateStart;
    /**
     * 项目预计结束日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(name = "项目预计结束日期", required = true)
    @NotNull(message = "项目预计结束日期不能为空")
    private Date projectDateEnd;
    @ApiModelProperty(name = "项目概况",required = true)
    @NotBlank(message = "项目概况不能为空")
    private String remark;
}
expert-system/src/main/java/com/gkhy/system/domain/vo/request/SysExpertInfoRoundReq.java
@@ -1,4 +1,25 @@
package com.gkhy.system.domain.vo.request;
public class SysExpertInfoRoundReq {
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
@ApiModel(value = "项目专家选取随机", description = "项目专家选取随机")
@Data
public class SysExpertInfoRoundReq implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("专家领域")
    private List<String> domain;
    @ApiModelProperty("专家数量")
    @NotNull
    private Integer num;
    @ApiModelProperty("评定等级1、一级,2、二级,3、三级")
    private List<String> ratingLevel;
}
expert-system/src/main/java/com/gkhy/system/domain/vo/request/SysExpertSearchReqDto.java
@@ -1,4 +1,35 @@
package com.gkhy.system.domain.vo.request;
public class SysExpertSearchReqDto {
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.io.Serializable;
/**
 * @author admin
 */
@Data
@ApiModel(value = "专家查询信息审核", description = "专家查询信息审核")
public class SysExpertSearchReqDto implements Serializable {
    private static final long serialVersionUID = 1L;
    @NotBlank(message ="手机号不能为空" )
    @Length(min = 11, max = 11, message = "手机号只能为11位")
    @Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$",message = "手机号码有误!")
    @ApiModelProperty("手机号")
    private String phone;
    @NotBlank(message ="身份证号码不能为空" )
    @Length(min = 18, max = 18, message = "身份证只能为18位")
    @ApiModelProperty("身份证号码")
    private String idCard;
    @NotNull(message ="业务处室不能为空" )
    @ApiModelProperty("业务处室")
    private Long deptId;
}
expert-system/src/main/java/com/gkhy/system/domain/vo/request/SysProjectExpertReq.java
@@ -1,25 +1,35 @@
package com.gkhy.system.domain.vo.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
import java.util.Date;
@ApiModel(value = "项目专家选取随机", description = "项目专家选取随机")
@ApiModel(value = "专家考评记录查询条件", description = "专家考评记录查询条件")
@Data
public class SysExpertInfoRoundReq implements Serializable {
public class SysProjectExpertReq implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("专家领域")
    private List<String> domain;
    private String domain;
    @ApiModelProperty("专家数量")
    @NotNull
    private Integer num;
    @ApiModelProperty("专家姓名")
    private String name;
    @ApiModelProperty("评定等级1、一级,2、二级,3、三级")
    private List<String> ratingLevel;
    @ApiModelProperty("身份证号")
    private String idCard;
    @ApiModelProperty("项目名称")
    private String projectName;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty( "评审开始日期")
    private Date startTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty( "评审结束日期")
    private Date endTime;
}
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertCheckResp.java
@@ -1,4 +1,40 @@
package com.gkhy.system.domain.vo.response;
public class ProjectExpertCheckResp {
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "项目专家审批详情", description = "项目专家审批详情")
@Data
public class ProjectExpertCheckResp implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(name = "项目专家id")
    private Long id;
    @ApiModelProperty(name = "专家id")
    private Long expertId;
    @ApiModelProperty("专家名称")
    private String name;
    @ApiModelProperty("性别(0男,1女,2未知,默认2)")
    private Integer sex;
    @ApiModelProperty("身份证号码")
    private String idCard;
    @ApiModelProperty(name = "选取方式1固定2随机")
    private Long selectionMode;
    @ApiModelProperty(name = "是否组长0否1是")
    private Long teamLeader;
    @ApiModelProperty("评定等级1、一级,2、二级,3、三级")
    private String ratingLevel;
    @ApiModelProperty("专家领域")
    private String domain;
}
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertEvaluationResp.java
@@ -1,4 +1,25 @@
package com.gkhy.system.domain.vo.response;
public class ProjectExpertEvaluationResp {
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "项目专家考评列表", description = "项目专家考评列表")
@Data
public class ProjectExpertEvaluationResp  extends ProjectExpertCheckResp implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 总分
     */
    @ApiModelProperty(name = "总分")
    private Long score;
    /**
     * 评估状态0未评估1已评估
     */
    @ApiModelProperty(name = "评估状态0未评估1已评估")
    private Long evaluationState;
}
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertManagementInfoRes.java
@@ -1,19 +1,13 @@
package com.gkhy.system.domain;
package com.gkhy.system.domain.vo.response;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gkhy.common.annotation.Excel;
import com.gkhy.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
@@ -22,36 +16,28 @@
 * @author expert
 * @date 2024-11-14
 */
@TableName(resultMap = "com.gkhy.system.mapper.ProjectManagementMapper.ProjectManagementResult")
@ApiModel(value = "项目管理对象", description = "项目管理对象表")
public class ProjectManagement extends BaseEntity {
@ApiModel(value = "项目管理专家详情" , description = "项目管理专家详情")
@Data
public class ProjectExpertManagementInfoRes implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "项目id")
    private Long id;
    /**
     * 项目名称
     */
    @ApiModelProperty(name = "项目名称",required = true)
    @NotBlank(message = "项目名称不能为空")
    @ApiModelProperty(name = "项目名称")
    private String projectName;
    /**
     * 处室
     */
    @ApiModelProperty(name = "处室",required = true)
    @NotNull(message = "处室不能为空")
    private Long deptId;
    /**
     * 部门名称
     */
    @ApiModelProperty(name = "处室名称",required = true)
    @NotBlank(message = "处室不能为空")
    @ApiModelProperty(name = "处室名称")
    private String deptName;
    /**
@@ -63,211 +49,42 @@
    /**
     * 项目地址
     */
    @ApiModelProperty(name = "项目地址",required = true)
    @NotBlank(message = "项目地址不能为空")
    @ApiModelProperty(name = "项目地址")
    private String projectAddress;
    /**
     * 部门带队人员
     */
    @ApiModelProperty(name = "部门带队人员",required = true)
    @NotBlank(message = "处室带队人员不能为空")
    private String deptUserName;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(name = "项目审批时间")
    private Date projectCheckTime;
    /**
     * 乐观锁
     */
    @ApiModelProperty(name = "乐观锁")
    private Long version;
    @ApiModelProperty(name = "审批状态(0暂存,1选取专家,2生成审批单,3审批通过,4完结)")
    private String state;
    /**
     * 审批状态(0暂存,1生成审批单,2审批通过,3审批驳回,4完结)
     */
    @Excel(name = "审批状态(0暂存,1生成审批单,2审批通过,3审批驳回,4完结)")
    private Long state;
    @ApiModelProperty(value = "步骤1暂存2专家选取3审批4完结")
    private Long step;
//    /**
//     * 部门带队人员
//     */
//    @ApiModelProperty(name = "部门带队人员")
//    private String deptUserName;
    /**
     * 项目预计开始日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(name = "项目预计开始日期",required = true)
    @NotNull(message = "项目预计开始日期不能为空")
    @ApiModelProperty(name = "项目预计开始日期")
    private Date projectDateStart;
    /**
     * 项目预计结束日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(name = "项目预计结束日期", required = true)
    @NotNull(message = "项目预计结束日期不能为空")
    @ApiModelProperty(name = "项目预计结束日期")
    private Date projectDateEnd;
    /**
     * 专家证书
     */
    @ApiModelProperty(name = "专家证书")
    private String expertCertificate;
    @ApiModelProperty(name = "项目概况")
    private String remark;
    /**
     * 评估状态0未评估1已评估
     */
    @ApiModelProperty(name = "评估状态0未评估1已评估")
    private Long envaluationState;
    @ApiModelProperty(name = "专家数据")
    private List<ProjectExpertCheckResp> projectExpertCheckResp;
    /**
     * 专家人数
     */
    @ApiModelProperty(name = "专家人数")
    private Long expertNum;
    /**
     * 删除标志(0代表存在,1代表删除,默认0)
     */
    private Long delFlag;
    public void setId(Long id) {
        this.id = id;
    }
    public Long getId() {
        return id;
    }
    public void setProjectName(String projectName) {
        this.projectName = projectName;
    }
    public String getProjectName() {
        return projectName;
    }
    public void setDeptId(Long deptId) {
        this.deptId = deptId;
    }
    public Long getDeptId() {
        return deptId;
    }
    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }
    public String getDeptName() {
        return deptName;
    }
    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }
    public String getCompanyName() {
        return companyName;
    }
    public void setProjectAddress(String projectAddress) {
        this.projectAddress = projectAddress;
    }
    public String getProjectAddress() {
        return projectAddress;
    }
    public void setDeptUserName(String deptUserName) {
        this.deptUserName = deptUserName;
    }
    public String getDeptUserName() {
        return deptUserName;
    }
    public void setVersion(Long version) {
        this.version = version;
    }
    public Long getVersion() {
        return version;
    }
    public void setState(Long state) {
        this.state = state;
    }
    public Long getState() {
        return state;
    }
    public void setProjectDateStart(Date projectDateStart) {
        this.projectDateStart = projectDateStart;
    }
    public Date getProjectDateStart() {
        return projectDateStart;
    }
    public void setProjectDateEnd(Date projectDateEnd) {
        this.projectDateEnd = projectDateEnd;
    }
    public Date getProjectDateEnd() {
        return projectDateEnd;
    }
    public void setExpertCertificate(String expertCertificate) {
        this.expertCertificate = expertCertificate;
    }
    public String getExpertCertificate() {
        return expertCertificate;
    }
    public void setEnvaluationState(Long envaluationState) {
        this.envaluationState = envaluationState;
    }
    public Long getEnvaluationState() {
        return envaluationState;
    }
    public void setExpertNum(Long expertNum) {
        this.expertNum = expertNum;
    }
    public Long getExpertNum() {
        return expertNum;
    }
    public void setDelFlag(Long delFlag) {
        this.delFlag = delFlag;
    }
    public Long getDelFlag() {
        return delFlag;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("projectName", getProjectName())
                .append("deptId", getDeptId())
                .append("deptName", getDeptName())
                .append("companyName", getCompanyName())
                .append("projectAddress", getProjectAddress())
                .append("deptUserName", getDeptUserName())
                .append("version", getVersion())
                .append("state", getState())
                .append("remark", getRemark())
                .append("projectDateStart", getProjectDateStart())
                .append("projectDateEnd", getProjectDateEnd())
                .append("expertCertificate", getExpertCertificate())
                .append("envaluationState", getEnvaluationState())
                .append("expertNum", getExpertNum())
                .append("delFlag", getDelFlag())
                .append("createBy", getCreateBy())
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                .toString();
    }
}
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertResp.java
@@ -1,17 +1,35 @@
package com.gkhy.system.domain.vo.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "项目专家审批详情", description = "项目专家审批详情")
import java.util.Date;
@ApiModel(value = "专家考评记录列表", description = "专家考评记录列表")
@Data
public class ProjectExpertCheckResp implements Serializable {
public class ProjectExpertResp implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(name = "项目专家id")
    private Long id;
    /**
     * 主键
     */
    @ApiModelProperty(value = "项目专家id")
    private Long projectExpertId;
    /**
     * 项目名称
     */
    @ApiModelProperty(name = "项目名称")
    private String projectName;
    @ApiModelProperty(name = "项目id")
    private Long projectId;
    @ApiModelProperty(name = "总分")
    private Long score;
    @ApiModelProperty(name = "专家id")
    private Long expertId;
@@ -19,8 +37,6 @@
    @ApiModelProperty("专家名称")
    private String name;
    @ApiModelProperty("性别(0男,1女,2未知,默认2)")
    private Integer sex;
    @ApiModelProperty("身份证号码")
    private String idCard;
@@ -31,10 +47,11 @@
    @ApiModelProperty(name = "是否组长0否1是")
    private Long teamLeader;
    @ApiModelProperty("评定等级1、一级,2、二级,3、三级")
    private String ratingLevel;
    @ApiModelProperty("专家领域")
    private String domain;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(name = "评审时间")
    private Date updateTime;
}
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertSectionResp.java
@@ -5,16 +5,14 @@
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "项目专家审批详情", description = "项目专家审批详情")
@ApiModel(value = "项目专家随机获取", description = "项目专家随机获取")
@Data
public class ProjectExpertCheckResp implements Serializable {
public class ProjectExpertSectionResp implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(name = "项目专家id")
    private Long id;
    @ApiModelProperty(name = "专家id")
    private Long expertId;
    private Long id;
    @ApiModelProperty("专家名称")
    private String name;
@@ -24,12 +22,6 @@
    @ApiModelProperty("身份证号码")
    private String idCard;
    @ApiModelProperty(name = "选取方式1固定2随机")
    private Long selectionMode;
    @ApiModelProperty(name = "是否组长0否1是")
    private Long teamLeader;
    @ApiModelProperty("评定等级1、一级,2、二级,3、三级")
    private String ratingLevel;
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertStateResp.java
@@ -1,4 +1,37 @@
package com.gkhy.system.domain.vo.response;
public class ProjectExpertStateResp {
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
@ApiModel(value = "项目考评列表" , description = "项目考评列表")
public class ProjectExpertStateResp implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long id;
    @ApiModelProperty(name = "项目名称")
    private String projectName;
    @ApiModelProperty(name = "评估状态0未评估1已评估")
    private Long evaluationState;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(name = "项目审批时间")
    private Date projectCheckTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(name = "项目结束日期")
    private Date projectEndTime;
    @ApiModelProperty(name = "处室名称")
    private String deptName;
    @ApiModelProperty(name = "专家人数")
    private Long expertNum;
}
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectNumResp.java
@@ -1,4 +1,27 @@
package com.gkhy.system.domain.vo.response;
public class ProjectNumREsp {
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel(value = "项目数量统计" , description = "项目数量统计")
public class ProjectNumResp implements Serializable {
    @ApiModelProperty(value = "总数量")
    private Integer total = 0;
    @ApiModelProperty(value = "基本选用")
    private Integer staging = 0;
    @ApiModelProperty(value = "专家选用")
    private Integer expert = 0 ;
    @ApiModelProperty(value = "审批")
    private Integer approval = 0;
    @ApiModelProperty(value = "结束")
    private Integer end = 0;
}
expert-system/src/main/java/com/gkhy/system/domain/vo/response/SysExpertSearchRep.java
@@ -1,4 +1,22 @@
package com.gkhy.system.domain.vo.response;
public class SysExpertSearchRep {
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * @author admin
 */
@Data
@ApiModel(value = "专家查询信息审核返回", description = "专家查询信息审核返回")
public class SysExpertSearchRep  implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("专家证书")
    private String expertCertificate;
    @ApiModelProperty("审批状态(0申请提交,1待审核,2审批通过,3审批不通过,4专家库)")
    private Integer state;
}
expert-system/src/main/java/com/gkhy/system/mapper/ApplyRecordMapper.java
@@ -1,7 +1,9 @@
package com.gkhy.system.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gkhy.system.domain.ApplyRecord;
import java.util.List;
/**
 * 开启申请记录Mapper接口
@@ -9,7 +11,7 @@
 * @author expert
 * @date 2024-11-13
 */
public interface ApplyRecordMapper
public interface ApplyRecordMapper extends BaseMapper<ApplyRecord>
{
    /**
     * 查询开启申请记录
@@ -22,10 +24,9 @@
    /**
     * 查询开启申请记录列表
     *
     * @param applyRecord 开启申请记录
     * @return 开启申请记录集合
     */
    public List<ApplyRecord> selectApplyRecordList(ApplyRecord applyRecord);
    public List<ApplyRecord> selectApplyRecordList();
    /**
     * 新增开启申请记录
expert-system/src/main/java/com/gkhy/system/mapper/EvaluationMapper.java
@@ -1,7 +1,9 @@
package com.gkhy.system.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gkhy.system.domain.Evaluation;
import java.util.List;
/**
 * 考评管理Mapper接口
@@ -9,7 +11,7 @@
 * @author expert
 * @date 2024-11-13
 */
public interface EvaluationMapper
public interface EvaluationMapper extends BaseMapper<Evaluation>
{
    /**
     * 查询考评管理
expert-system/src/main/java/com/gkhy/system/mapper/ProjectExpertDetailMapper.java
@@ -1,7 +1,9 @@
package com.gkhy.system.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gkhy.system.domain.ProjectExpertDetail;
import java.util.List;
/**
 * 项目专家得分明细Mapper接口
@@ -9,7 +11,7 @@
 * @author expert
 * @date 2024-11-14
 */
public interface ProjectExpertDetailMapper
public interface ProjectExpertDetailMapper extends BaseMapper<ProjectExpertDetail>
{
    /**
     * 查询项目专家得分明细
@@ -35,6 +37,8 @@
     */
    public int insertProjectExpertDetail(ProjectExpertDetail projectExpertDetail);
    int batchInsertProjectExpertDetail(List<ProjectExpertDetail> list);
    /**
     * 修改项目专家得分明细
     *
@@ -43,6 +47,8 @@
     */
    public int updateProjectExpertDetail(ProjectExpertDetail projectExpertDetail);
    int batchUpdateProjectExpertDetail(List<ProjectExpertDetail> list);
    /**
     * 删除项目专家得分明细
     *
expert-system/src/main/java/com/gkhy/system/mapper/ProjectExpertMapper.java
@@ -1,7 +1,12 @@
package com.gkhy.system.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gkhy.system.domain.ProjectExpert;
import com.gkhy.system.domain.vo.request.SysProjectExpertReq;
import com.gkhy.system.domain.vo.response.ProjectExpertEvaluationResp;
import com.gkhy.system.domain.vo.response.ProjectExpertResp;
import java.util.List;
/**
 * 项目专家关联Mapper接口
@@ -9,7 +14,7 @@
 * @author expert
 * @date 2024-11-14
 */
public interface ProjectExpertMapper
public interface ProjectExpertMapper extends BaseMapper<ProjectExpert>
{
    /**
     * 查询项目专家关联
@@ -35,6 +40,8 @@
     */
    public int insertProjectExpert(ProjectExpert projectExpert);
    int batchInsertProjectExpert(List<ProjectExpert> list);
    /**
     * 修改项目专家关联
     *
@@ -43,6 +50,7 @@
     */
    public int updateProjectExpert(ProjectExpert projectExpert);
    int batchUpdateProjectExpert(List<ProjectExpert> list);
    /**
     * 删除项目专家关联
     *
@@ -58,4 +66,25 @@
     * @return 结果
     */
    public int deleteProjectExpertByIds(Long[] ids);
    /**
     *获取未评价数量
     * @param projectId
     * @return
     */
    int getUnEva(Long projectId);
    /**
     *
     * @param projectId
     * @return
     */
    List<ProjectExpertEvaluationResp> projectExpertEvaluationList(Long projectId);
    /**
     * 专家考评记录列表
     * @param req
     * @return
     */
    List<ProjectExpertResp> projectExpertEvaList(SysProjectExpertReq req);
}
expert-system/src/main/java/com/gkhy/system/mapper/ProjectFileMapper.java
@@ -1,7 +1,10 @@
package com.gkhy.system.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gkhy.system.domain.ProjectFile;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * 项目附件Mapper接口
@@ -9,7 +12,7 @@
 * @author expert
 * @date 2024-11-14
 */
public interface ProjectFileMapper
public interface ProjectFileMapper extends BaseMapper<ProjectFile>
{
    /**
     * 查询项目附件
@@ -35,6 +38,8 @@
     */
    public int insertProjectFile(ProjectFile projectFile);
    int insertProjectFiles(List<ProjectFile> files);
    /**
     * 修改项目附件
     *
@@ -51,6 +56,8 @@
     */
    public int deleteProjectFileById(Long id);
    int deleteProjectFileByIdAndType(@Param("projectId") Long projectId,@Param("module") String module);
    /**
     * 批量删除项目附件
     *
expert-system/src/main/java/com/gkhy/system/mapper/ProjectManagementMapper.java
@@ -1,7 +1,12 @@
package com.gkhy.system.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gkhy.system.domain.ProjectManagement;
import com.gkhy.system.domain.vo.request.ProjectExpertStateReq;
import com.gkhy.system.domain.vo.response.ProjectExpertManagementInfoRes;
import com.gkhy.system.domain.vo.response.ProjectExpertStateResp;
import java.util.List;
/**
 * 项目管理Mapper接口
@@ -9,7 +14,7 @@
 * @author expert
 * @date 2024-11-14
 */
public interface ProjectManagementMapper
public interface ProjectManagementMapper extends BaseMapper<ProjectManagement>
{
    /**
     * 查询项目管理
@@ -58,4 +63,25 @@
     * @return 结果
     */
    public int deleteProjectManagementByIds(Long[] ids);
    /**
     * 详情
     * @param id
     * @return
     */
    ProjectExpertManagementInfoRes projectExpertCheckInfo(Long id);
    /**
     * 项目考评累表
     * @param req
     * @return
     */
    List<ProjectExpertStateResp> getProjectExpertSate(ProjectExpertStateReq req);
    /**
     *
     * @param deptId
     * @return
     */
    List<Integer> getDataNum (Long deptId);
}
expert-system/src/main/java/com/gkhy/system/mapper/SysDeptMapper.java
@@ -1,8 +1,9 @@
package com.gkhy.system.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.gkhy.common.core.domain.entity.SysDept;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * 部门管理 数据层
@@ -20,6 +21,13 @@
    public List<SysDept> selectDeptList(SysDept dept);
    /**
     *
     * @param dept
     * @return
     */
    public List<SysDept> getOutDeptList(SysDept dept);
    /**
     * 根据角色ID查询部门树信息
     * 
     * @param roleId 角色ID
expert-system/src/main/java/com/gkhy/system/mapper/SysExpertClassifyMapper.java
@@ -1,7 +1,7 @@
package com.gkhy.assess.system.mapper;
package com.gkhy.system.mapper;
import com.gkhy.assess.system.domain.SysExpertClassify;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gkhy.system.domain.SysExpertClassify;
import org.apache.ibatis.annotations.Mapper;
/**
expert-system/src/main/java/com/gkhy/system/mapper/SysExpertInfoMapper.java
@@ -1,8 +1,13 @@
package com.gkhy.assess.system.mapper;
package com.gkhy.system.mapper;
import com.gkhy.assess.system.domain.SysExpertInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gkhy.system.domain.SysExpertInfo;
import com.gkhy.system.domain.vo.request.SysExpertInfoRoundReq;
import com.gkhy.system.domain.vo.request.SysExpertSearchReqDto;
import com.gkhy.system.domain.vo.response.ProjectExpertSectionResp;
import com.gkhy.system.domain.vo.response.SysExpertSearchRep;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -28,7 +33,7 @@
     * @param idCard
     * @return
     */
    SysExpertInfo checkIdcardUnique(String idCard);
    SysExpertInfo checkIdcardUnique(@Param("idCard") String idCard,@Param("deptId") Long deptId);
    /**
     * 批量删除专家信息
@@ -43,4 +48,18 @@
     * @return
     */
    SysExpertInfo getExpertInfoById(Long expertId);
    /**
     * 查询审批结果
     * @param req
     * @return
     */
    SysExpertSearchRep queryApprove(SysExpertSearchReqDto req);
    /**
     * 随机获取专家
     * @param req
     * @return
     */
   List<ProjectExpertSectionResp> getExpertRound(SysExpertInfoRoundReq req);
}
expert-system/src/main/java/com/gkhy/system/mapper/SysSettingsMapper.java
@@ -1,7 +1,9 @@
package com.gkhy.system.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gkhy.system.domain.SysSettings;
import java.util.List;
/**
 * 系统配置Mapper接口
@@ -9,15 +11,14 @@
 * @author expert
 * @date 2024-11-13
 */
public interface SysSettingsMapper
public interface SysSettingsMapper extends BaseMapper<SysSettings>
{
    /**
     * 查询系统配置
     *
     * @param state 系统配置主键
     * @return 系统配置
     */
    public SysSettings selectSysSettingsByState(String state);
    public SysSettings selectSysSettingsByState();
    /**
     * 查询系统配置列表
@@ -38,10 +39,10 @@
    /**
     * 修改系统配置
     *
     * @param sysSettings 系统配置
     * @param state 系统配置
     * @return 结果
     */
    public int updateSysSettings(SysSettings sysSettings);
    public int updateSysSettingsState(String state);
    /**
     * 删除系统配置
expert-system/src/main/java/com/gkhy/system/service/IEvaluationService.java
@@ -1,8 +1,9 @@
package com.gkhy.system.service;
import java.util.List;
import com.gkhy.system.domain.Evaluation;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gkhy.system.domain.Evaluation;
import java.util.List;
/**
 * 考评管理Service接口
expert-system/src/main/java/com/gkhy/system/service/IProjectManagementService.java
@@ -1,8 +1,13 @@
package com.gkhy.system.service;
import java.util.List;
import com.gkhy.system.domain.ProjectManagement;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gkhy.system.domain.ProjectExpertDetail;
import com.gkhy.system.domain.ProjectFile;
import com.gkhy.system.domain.ProjectManagement;
import com.gkhy.system.domain.vo.request.*;
import com.gkhy.system.domain.vo.response.*;
import java.util.List;
/**
 * 项目管理Service接口
@@ -33,7 +38,7 @@
     * @param projectManagement 项目管理
     * @return 结果
     */
    public int insertProjectManagement(ProjectManagement projectManagement);
    public Long insertProjectManagement(ProjectManageSaveReq projectManagement);
    /**
     * 修改项目管理
@@ -41,7 +46,7 @@
     * @param projectManagement 项目管理
     * @return 结果
     */
    public int updateProjectManagement(ProjectManagement projectManagement);
    public void updateProjectManagement(ProjectExpertSaveBatchReqDto projectManagement);
    /**
     * 批量删除项目管理
@@ -58,4 +63,66 @@
     * @return 结果
     */
    public int deleteProjectManagementById(Long id);
    /**
     * 获取项目专家信息
     * @param id
     * @return
     */
    public ProjectExpertManagementInfoRes projectExpertCheckInfo(Long id);
    /**
     * 项目审批
     * @param req
     */
    void projectCheck(ProjectCheckReq req);
    /**
     * 项目归档
     * @param req
     */
    void projectArchive(ProjectArchiveReq req);
    /**
     * 项目考评
     * @param req
     * @return
     */
    List<ProjectExpertStateResp> getProjectExpertSate(ProjectExpertStateReq req);
    /**
     * 项目专家考评列表
     * @param projectId
     * @return
     */
    List<ProjectExpertEvaluationResp> projectExpertEvaluationList(Long projectId);
    /**
     * 专家考评保存
     * @param req
     */
    void projectExpertDetailSave(ProjectExpertScoreSaveReq req);
    /**
     * 专家考评记录列表
     * @param req
     * @return
     */
    List<ProjectExpertResp> projectExpertEvaList(SysProjectExpertReq req);
    /**
     * 专家考评明细
     * @param projectExpertId
     * @return
     */
    List<ProjectExpertDetail> selectProjectExpertDetailList(Long projectExpertId);
    /**
     * 附件列表
     * @return
     */
    List<ProjectFile> selectProjectFileList(Long projectId,String module );
    ProjectNumResp getProjectNum();
}
expert-system/src/main/java/com/gkhy/system/service/ISysDeptService.java
@@ -1,8 +1,9 @@
package com.gkhy.system.service;
import java.util.List;
import com.gkhy.common.core.domain.TreeSelect;
import com.gkhy.common.core.domain.entity.SysDept;
import java.util.List;
/**
 * 部门管理 服务层
@@ -19,6 +20,8 @@
     */
    public List<SysDept> selectDeptList(SysDept dept);
    List<SysDept> getOutDeptList(SysDept dept);
    /**
     * 查询部门树结构信息
     * 
expert-system/src/main/java/com/gkhy/system/service/ISysSettingsService.java
@@ -1,8 +1,10 @@
package com.gkhy.system.service;
import java.util.List;
import com.gkhy.system.domain.SysSettings;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gkhy.system.domain.ApplyRecord;
import com.gkhy.system.domain.SysSettings;
import java.util.List;
/**
 * 系统配置Service接口
@@ -14,26 +16,10 @@
    /**
     * 查询系统配置
     *
     * @param state 系统配置主键
     * @return 系统配置
     */
    public SysSettings selectSysSettingsByState(String state);
    public String selectSysSettings();
    /**
     * 查询系统配置列表
     *
     * @param sysSettings 系统配置
     * @return 系统配置集合
     */
    public List<SysSettings> selectSysSettingsList(SysSettings sysSettings);
    /**
     * 新增系统配置
     *
     * @param sysSettings 系统配置
     * @return 结果
     */
    public int insertSysSettings(SysSettings sysSettings);
    /**
     * 修改系统配置
@@ -41,21 +27,14 @@
     * @param sysSettings 系统配置
     * @return 结果
     */
    public int updateSysSettings(SysSettings sysSettings);
    public int updateSysSettings(String sysSettings);
    /**
     * 批量删除系统配置
     * 查询开启申请记录列表
     *
     * @param states 需要删除的系统配置主键集合
     * @return 结果
     * @return 开启申请记录集合
     */
    public int deleteSysSettingsByStates(String[] states);
    public List<ApplyRecord> selectApplyRecordList();
    /**
     * 删除系统配置信息
     *
     * @param state 系统配置主键
     * @return 结果
     */
    public int deleteSysSettingsByState(String state);
}
expert-system/src/main/java/com/gkhy/system/service/SysExpertClassifyService.java
@@ -1,7 +1,7 @@
package com.gkhy.assess.system.service;
package com.gkhy.system.service;
import com.gkhy.assess.system.domain.SysExpertClassify;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gkhy.system.domain.SysExpertClassify;
import java.util.List;
expert-system/src/main/java/com/gkhy/system/service/SysExpertInfoService.java
@@ -1,8 +1,14 @@
package com.gkhy.assess.system.service;
package com.gkhy.system.service;
import com.gkhy.assess.common.api.CommonPage;
import com.gkhy.assess.system.domain.SysExpertInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gkhy.system.domain.SysExpertInfo;
import com.gkhy.system.domain.vo.request.SysExpertInfoRoundReq;
import com.gkhy.system.domain.vo.request.SysExpertSearchReqDto;
import com.gkhy.system.domain.vo.response.ProjectExpertSectionResp;
import com.gkhy.system.domain.vo.response.SysExpertSearchRep;
import java.util.List;
/**
 * <p>
@@ -18,7 +24,7 @@
     * @param expertInfo
     * @return
     */
    CommonPage exportInfoList(SysExpertInfo expertInfo);
    List<SysExpertInfo> exportInfoList(SysExpertInfo expertInfo);
    /**
     * 新增专家信息
@@ -61,4 +67,18 @@
     * @return
     */
    boolean changeApprove(SysExpertInfo expertInfo);
    /**
     *查询审批结果
     * @param expertInfo
     * @return
     */
    SysExpertSearchRep queryApprove(SysExpertSearchReqDto expertInfo);
    /**
     * 随机获取专家信息
     * @param req
     * @return
     */
    List<ProjectExpertSectionResp> getExpertRound(SysExpertInfoRoundReq req);
}
expert-system/src/main/java/com/gkhy/system/service/impl/EvaluationServiceImpl.java
@@ -1,13 +1,15 @@
package com.gkhy.system.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.List;
        import com.rchuing.common.utils.DateUtils;
import com.gkhy.common.utils.DateUtils;
import com.gkhy.common.utils.SecurityUtils;
import com.gkhy.system.domain.Evaluation;
import com.gkhy.system.mapper.EvaluationMapper;
import com.gkhy.system.service.IEvaluationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.gkhy.system.mapper.EvaluationMapper;
import com.gkhy.system.domain.Evaluation;
import com.gkhy.system.service.IEvaluationService;
import java.util.List;
/**
 * 考评管理Service业务层处理
@@ -50,6 +52,7 @@
     */
    @Override
    public int insertEvaluation(Evaluation evaluation) {
        evaluation.setCreateBy(SecurityUtils.getUsername());
                evaluation.setCreateTime(DateUtils.getNowDate());
            return evaluationMapper.insertEvaluation(evaluation);
    }
@@ -62,6 +65,7 @@
     */
    @Override
    public int updateEvaluation(Evaluation evaluation) {
        evaluation.setUpdateBy(SecurityUtils.getUsername());
                evaluation.setUpdateTime(DateUtils.getNowDate());
        return evaluationMapper.updateEvaluation(evaluation);
    }
@@ -74,6 +78,7 @@
     */
    @Override
    public int deleteEvaluationByIds(Long[] ids) {
        //todo 校验被引用不可删除
        return evaluationMapper.deleteEvaluationByIds(ids);
    }
expert-system/src/main/java/com/gkhy/system/service/impl/ProjectManagementServiceImpl.java
@@ -1,13 +1,29 @@
package com.gkhy.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.List;
        import com.rchuing.common.utils.DateUtils;
import com.gkhy.common.exception.ServiceException;
import com.gkhy.common.utils.DateUtils;
import com.gkhy.common.utils.SecurityUtils;
import com.gkhy.common.utils.StringUtils;
import com.gkhy.system.domain.ProjectExpert;
import com.gkhy.system.domain.ProjectExpertDetail;
import com.gkhy.system.domain.ProjectFile;
import com.gkhy.system.domain.ProjectManagement;
import com.gkhy.system.domain.vo.request.*;
import com.gkhy.system.domain.vo.response.*;
import com.gkhy.system.mapper.ProjectExpertDetailMapper;
import com.gkhy.system.mapper.ProjectExpertMapper;
import com.gkhy.system.mapper.ProjectFileMapper;
import com.gkhy.system.mapper.ProjectManagementMapper;
import com.gkhy.system.service.IProjectManagementService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.gkhy.system.mapper.ProjectManagementMapper;
import com.gkhy.system.domain.ProjectManagement;
import com.gkhy.system.service.IProjectManagementService;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/**
 * 项目管理Service业务层处理
@@ -19,6 +35,15 @@
public class ProjectManagementServiceImpl extends ServiceImpl<ProjectManagementMapper, ProjectManagement> implements IProjectManagementService {
    @Autowired
    private ProjectManagementMapper projectManagementMapper;
    @Autowired
    private ProjectExpertMapper projectExpertMapper;
    @Autowired
    private ProjectFileMapper projectFileMapper;
    @Autowired
    private ProjectExpertDetailMapper projectExpertDetailMapper;
    /**
     * 查询项目管理
@@ -49,9 +74,26 @@
     * @return 结果
     */
    @Override
    public int insertProjectManagement(ProjectManagement projectManagement) {
                projectManagement.setCreateTime(DateUtils.getNowDate());
            return projectManagementMapper.insertProjectManagement(projectManagement);
    public Long insertProjectManagement(ProjectManageSaveReq projectManagement) {
        ProjectManagement projectManagementSave = new ProjectManagement();
        projectManagementSave.setDelFlag(0L);
        BeanUtil.copyProperties(projectManagement, projectManagementSave);
        if (projectManagement.getId() != null){
            checkDataPer(projectManagement.getId());
            projectManagementSave.setUpdateBy(SecurityUtils.getUsername());
            projectManagementSave.setUpdateTime(DateUtils.getNowDate());
            projectManagementMapper.updateProjectManagement(projectManagementSave);
        }else {
            projectManagementSave.setStep(1L);
            projectManagementSave.setCreateBy(SecurityUtils.getUsername());
            projectManagementSave.setCreateTime(DateUtils.getNowDate());
            projectManagementMapper.insertProjectManagement(projectManagementSave);
        }
        return projectManagementSave.getId();
    }
    /**
@@ -61,9 +103,129 @@
     * @return 结果
     */
    @Override
    public int updateProjectManagement(ProjectManagement projectManagement) {
                projectManagement.setUpdateTime(DateUtils.getNowDate());
        return projectManagementMapper.updateProjectManagement(projectManagement);
    @Transactional
    public void updateProjectManagement(ProjectExpertSaveBatchReqDto projectManagement)  {
        ProjectManagement projectManagement1 = checkDataPer(projectManagement.getId());
        //专家选取
        ProjectManagement projectManagementSave = new ProjectManagement();
        projectManagementSave.setUpdateBy(SecurityUtils.getUsername());
        projectManagementSave.setUpdateTime(DateUtils.getNowDate());
        projectManagementSave.setId(projectManagement.getId());
        if (projectManagement1.getState() != 1 && projectManagement1.getState() != 0){
            throw new ServiceException("该步骤不可操作专家数据!");
        }
        List<ProjectExpertSaveReqDto> saveData = projectManagement.getSaveData();
        if (!StringUtils.isNotEmpty(saveData)){
            throw new ServiceException("专家不可为空!");
        }
        if (hasDuplicateExpertId(saveData)){
            throw new ServiceException("专家重复!");
        }
        long count = saveData.stream()
                .filter(dto -> dto.getSelectionMode() == 1)
                .count();
        if (count < 1){
            throw new ServiceException("固定专家不能为空!");
        }
        if (projectManagement1.getStep() == 1 || projectManagement1.getStep() == 2){
            projectManagementSave.setStep(2L);
            projectManagementSave.setState(1L);
        }else if (projectManagement1.getStep() == 3){
            projectManagementSave.setStep(3L);
            projectManagementSave.setState(2L);
            projectManagementSave.setProjectCheckTime(new Date());
            List<ProjectExpertSaveReqDto> collect = saveData.stream()
                    .filter(dto -> "1".equals(dto.getTeamLeader().toString()))
                    .collect(Collectors.toList());
            if (StringUtils.isEmpty(collect)){
                throw new ServiceException("缺少组长!");
            }
            if (collect.size() > 1){
                throw new ServiceException("组长只能选一人!");
            }
            projectManagementSave.setExpertName(collect.get(0).getExpertName());
            projectManagementSave.setExpertId(collect.get(0).getExpertId());
        }
        List<ProjectExpertSaveReqDto> saveList = saveData.stream()
                .filter(dto -> dto.getId() == null)
                .collect(Collectors.toList());
        if (StringUtils.isNotEmpty(saveList)){
            List<ProjectExpert> projectExperts = convertToProjectExpertList(saveList, projectManagement.getId());
            int i = projectExpertMapper.batchInsertProjectExpert(projectExperts);
            if (i < 1){
                throw new ServiceException("保存专家失败!");
            }
        }
        List<ProjectExpertSaveReqDto> editList = saveData.stream()
                .filter(dto -> dto.getId() != null)
                .collect(Collectors.toList());
        if (StringUtils.isNotEmpty(editList)){
            List<ProjectExpert> projectExperts = convertToProjectExpertList(editList, projectManagement.getId());
            int i = projectExpertMapper.batchUpdateProjectExpert(projectExperts);
            if (i < 1){
                throw new ServiceException("保存专家失败!");
            }
        }
        projectManagementSave.setExpertNum((long) saveData.size());
        List<Long> delData = projectManagement.getDelData();
        if (delData != null && delData.size() > 0) {
            int i = projectExpertMapper.deleteProjectExpertByIds(delData.toArray(new Long[delData.size()]));
            if (i < 1){
                throw new ServiceException("保存专家失败!");
            }
        }
        int i = projectManagementMapper.updateProjectManagement(projectManagementSave);
        if (i < 1){
            throw new ServiceException("保存专家失败!");
        }
    }
    public List<ProjectExpert> convertToProjectExpertList(List<ProjectExpertSaveReqDto> reqDtos,Long projectId) {
        List<ProjectExpert> projectExpertList = new ArrayList<>();
       reqDtos.forEach(reqDto -> {
           ProjectExpert projectExpert = convertToProjectExpert(reqDto,projectId);
           projectExpertList.add(projectExpert);
       });
       return projectExpertList;
    }
    private ProjectExpert convertToProjectExpert(ProjectExpertSaveReqDto reqDto,Long projectId) {
        ProjectExpert projectExpert = new ProjectExpert();
        projectExpert.setProjectId(projectId);
        projectExpert.setExpertId(reqDto.getExpertId());
        projectExpert.setSelectionMode(reqDto.getSelectionMode());
        projectExpert.setTeamLeader(reqDto.getTeamLeader());
        if (reqDto.getId() == null){
            projectExpert.setCreateBy(SecurityUtils.getUsername());
        }else {
            projectExpert.setUpdateBy(SecurityUtils.getUsername());
            projectExpert.setId(reqDto.getId());
        }
        return projectExpert;
    }
    public  boolean hasDuplicateExpertId(List<ProjectExpertSaveReqDto> saveData) {
        // 使用 Stream API 收集 expertId 的频率
        Map<Long, Long> frequencyMap = saveData.stream()
                .collect(Collectors.groupingBy(ProjectExpertSaveReqDto::getExpertId, Collectors.counting()));
        // 检查是否有任何 expertId 的频率大于 1
        boolean hasDuplicates = frequencyMap.values().stream().anyMatch(count -> count > 1);
        if (hasDuplicates) {
           return true;
        }
        return false;
    }
    /**
@@ -74,6 +236,10 @@
     */
    @Override
    public int deleteProjectManagementByIds(Long[] ids) {
        //todo 校验
        for (Long id : ids) {
            checkDataPer(id);
        }
        return projectManagementMapper.deleteProjectManagementByIds(ids);
    }
@@ -87,4 +253,250 @@
    public int deleteProjectManagementById(Long id) {
        return projectManagementMapper.deleteProjectManagementById(id);
    }
    @Override
    public ProjectExpertManagementInfoRes projectExpertCheckInfo(Long id) {
        return projectManagementMapper.projectExpertCheckInfo(id);
    }
    @Override
    @Transactional
    public void projectCheck(ProjectCheckReq req) {
        ProjectManagement projectManagement = checkDataPer(req.getId());
        if (req.getState() != 3L &&  req.getState() != 1 ){
            throw new ServiceException("参数异常!");
        }
        if (projectManagement.getStep() != 3){
            throw new ServiceException("非审批步骤!");
        }
        Long state = projectManagement.getState();
        if (req.getState() == 3 && state != 2){
            throw new ServiceException("未生成审批单不可审批通过操作!");
        }else if (req.getState() == 1 && state != 2){
            throw new ServiceException("不可操作!");
        }
        List<ProjectFile> projectFile = req.getProjectFile();
        ProjectManagement projectManagementUp = new ProjectManagement();
        projectManagementUp.setId(req.getId());
        projectManagementUp.setState(req.getState());
        projectManagementUp.setUpdateBy(SecurityUtils.getUsername());
        if (req.getState() == 3){
            projectManagementUp.setStep(4L);
        }else if (req.getState() == 1){
            projectManagementUp.setStep(2L);
        }
        int i = projectManagementMapper.updateProjectManagement(projectManagementUp);
        //驳回删
        if (req.getState() == 1){
            projectFileMapper.deleteProjectFileByIdAndType(req.getId(), "1");
        }
        if (i > 0 && StringUtils.isNotEmpty(projectFile) && req.getState() == 3){
            //删除之前的该类型
            projectFileMapper.deleteProjectFileByIdAndType(req.getId(), "1");
            String username = SecurityUtils.getUsername();
            projectFile.forEach(file -> {
                file.setCreateBy(username);
                file.setProjectId(req.getId());
            });
            int i1 = projectFileMapper.insertProjectFiles(projectFile);
            if (i1 < 1){
                throw new ServiceException("保存附件失败!");
            }
        }
    }
    @Override
    public void projectArchive(ProjectArchiveReq req) {
        ProjectManagement projectManagement = checkDataPer(req.getId());
        Long state = projectManagement.getState();
        if (state != 3L){
            throw new ServiceException("此状态不可归档!");
        }
        List<ProjectFile> projectFile = req.getProjectFile();
        ProjectManagement projectManagementUp = new ProjectManagement();
        projectManagementUp.setId(req.getId());
        projectManagementUp.setState(4L);
        projectManagementUp.setDesc(req.getDesc());
        projectManagementUp.setProjectEndTime(req.getProjectEndTime());
        projectManagementUp.setUpdateBy(SecurityUtils.getUsername());
        int i = projectManagementMapper.updateProjectManagement(projectManagementUp);
        if (i > 0 && StringUtils.isNotEmpty(projectFile)){
            String username = SecurityUtils.getUsername();
            projectFile.forEach(file -> {
                file.setCreateBy(username);
                file.setProjectId(req.getId());
            });
            int i1 = projectFileMapper.insertProjectFiles(projectFile);
            if (i1 < 1){
                throw new ServiceException("保存附件失败!");
            }
        }
    }
    @Override
    public List<ProjectExpertStateResp> getProjectExpertSate(ProjectExpertStateReq req) {
        return projectManagementMapper.getProjectExpertSate(req);
    }
    @Override
    public List<ProjectExpertEvaluationResp> projectExpertEvaluationList(Long projectId) {
        return projectExpertMapper.projectExpertEvaluationList(projectId);
    }
    @Override
    @Transactional
    public void projectExpertDetailSave(ProjectExpertScoreSaveReq req) {
        List<Long> delData = req.getDelData();
        if (StringUtils.isNotEmpty(delData)){
            projectExpertDetailMapper.deleteProjectExpertDetailByIds(delData.toArray(new Long[delData.size()]));
        }
        ProjectExpert projectExpert1 = projectExpertMapper.selectProjectExpertById(req.getProjectExpertId());
        if (projectExpert1 == null){
            throw new ServiceException("项目专家不存在!");
        }
        ProjectManagement projectManagement1 = checkData(projectExpert1.getProjectId());
        if (projectManagement1.getState() != 4){
            throw new ServiceException("项目未完成!");
        }
        //更新项目专家表
        ProjectExpert projectExpert = new ProjectExpert();
        projectExpert.setId(req.getProjectExpertId());
        projectExpert.setScore(req.getScore());
        projectExpert.setevaluationState(1L);
        int i = projectExpertMapper.updateProjectExpert(projectExpert);
        if (i < 1){
            throw new ServiceException("保存失败!");
        }
        List<ProjectExpertScoreSaveReq.Score> saveData = req.getSaveData();
        if (StringUtils.isNotEmpty(saveData)){
            List<ProjectExpertDetail> projectExpertDetails = dealData(saveData, req.getProjectExpertId());
            List<ProjectExpertDetail> saveList = projectExpertDetails.stream()
                    .filter(dto -> dto.getId() == null)
                    .collect(Collectors.toList());
            if (StringUtils.isNotEmpty(saveList)){
                int i12 = projectExpertDetailMapper.batchInsertProjectExpertDetail(saveList);
                if (i12 < 1){
                    throw new ServiceException("保存失败!");
                }
            }
            List<ProjectExpertDetail> updateList = projectExpertDetails.stream()
                    .filter(dto -> dto.getId() != null)
                    .collect(Collectors.toList());
            if (StringUtils.isNotEmpty(updateList)){
                int i1 = projectExpertDetailMapper.batchUpdateProjectExpertDetail(updateList);
                if (i1 < 1){
                    throw new ServiceException("保存失败!");
                }
            }
        }
        //验证是否都已考评
        int unEva = projectExpertMapper.getUnEva(projectExpert1.getProjectId());
        if (unEva == 0){
            ProjectManagement projectManagement = new ProjectManagement();
            projectManagement.setId(projectExpert1.getProjectId());
            projectManagement.setEvaluationState(1L);
            projectManagement.setUpdateBy(SecurityUtils.getUsername());
            int i1 = projectManagementMapper.updateProjectManagement(projectManagement);
            if (i1 < 1){
                throw new ServiceException("保存失败!");
            }
        }
    }
    @Override
    public List<ProjectExpertResp> projectExpertEvaList(SysProjectExpertReq req) {
        return projectExpertMapper.projectExpertEvaList(req);
    }
    @Override
    public List<ProjectExpertDetail> selectProjectExpertDetailList(Long projectExpertId) {
        ProjectExpertDetail projectExpertDetail = new ProjectExpertDetail();
        projectExpertDetail.setProjectExpertId(projectExpertId);
        return projectExpertDetailMapper.selectProjectExpertDetailList(projectExpertDetail);
    }
    @Override
    public List<ProjectFile> selectProjectFileList(Long projectId,String module ) {
        ProjectFile projectFile = new ProjectFile();
        projectFile.setProjectId(projectId);
        projectFile.setModule(module);
        List<ProjectFile> projectFiles = projectFileMapper.selectProjectFileList(projectFile);
        if (StringUtils.isNotEmpty(projectFiles)){
            return projectFiles;
        }
        return Collections.emptyList();
    }
    @Override
    public ProjectNumResp getProjectNum() {
        ProjectNumResp projectNumResp = new ProjectNumResp();
        List<Integer> dataNum = projectManagementMapper.getDataNum(SecurityUtils.isAdmin(SecurityUtils.getUserId()) ? null : SecurityUtils.getDeptId());
        if (!StringUtils.isEmpty(dataNum)){
            Map<Integer, Long> statusCounts = dataNum.stream()
                    .collect(Collectors.groupingBy(
                            status -> status,  // 分组键
                            Collectors.counting()  // 计数
                    ));
            projectNumResp.setTotal(dataNum.size());
            projectNumResp.setApproval(statusCounts.get(3)  == null ? 0 : statusCounts.get(3).intValue());
            projectNumResp.setExpert(statusCounts.get(1) == null ? 0 : statusCounts.get(1).intValue());
            projectNumResp.setStaging(statusCounts.get(0) == null ? 0:statusCounts.get(0).intValue());
            projectNumResp.setEnd(statusCounts.get(4) == null ? 0:statusCounts.get(4).intValue());
        }
        return projectNumResp;
    }
    private List<ProjectExpertDetail> dealData(List<ProjectExpertScoreSaveReq.Score> data,Long projectExpertId){
        List<ProjectExpertDetail> dealData = new ArrayList<>();
        data.forEach(dto -> {
            ProjectExpertDetail projectExpertDetail = new ProjectExpertDetail();
            projectExpertDetail.setProjectExpertId(projectExpertId);
            projectExpertDetail.setContent(dto.getContent());
            projectExpertDetail.setScore(dto.getScore());
            projectExpertDetail.setScoreType(dto.getScoreType());
            if (dto.getId() == null){
                projectExpertDetail.setCreateBy(SecurityUtils.getUsername());
            }else {
                projectExpertDetail.setId(dto.getId());
                projectExpertDetail.setUpdateBy(SecurityUtils.getUsername());
            }
            dealData.add(projectExpertDetail);
        });
        return dealData;
    }
    public ProjectManagement checkData(Long id){
        ProjectManagement projectManagement = projectManagementMapper.selectProjectManagementById(id);
        if (ObjectUtil.isNull(projectManagement)){
            throw new ServiceException("数据不存在!");
        }
        return projectManagement;
    }
    public ProjectManagement checkDataPer(Long id){
        ProjectManagement projectManagement = checkData(id);
        Long deptId = projectManagement.getDeptId();
        // 本部门审批?
        if (!SecurityUtils.isAdmin(SecurityUtils.getUserId()) && deptId.intValue() != SecurityUtils.getDeptId().intValue()){
            throw new ServiceException("非本部门数据,无权操作!");
        }
        if (projectManagement.getState() == 4){
            throw new ServiceException("已结项,无权操作!");
        }
        return projectManagement;
    }
}
expert-system/src/main/java/com/gkhy/system/service/impl/SysDeptServiceImpl.java
@@ -1,11 +1,5 @@
package com.gkhy.system.service.impl;
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;
import com.gkhy.common.annotation.DataScope;
import com.gkhy.common.constant.UserConstants;
import com.gkhy.common.core.domain.TreeSelect;
@@ -20,6 +14,13 @@
import com.gkhy.system.mapper.SysDeptMapper;
import com.gkhy.system.mapper.SysRoleMapper;
import com.gkhy.system.service.ISysDeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
/**
 * 部门管理 服务实现
@@ -48,6 +49,11 @@
        return deptMapper.selectDeptList(dept);
    }
    @Override
    public List<SysDept> getOutDeptList(SysDept dept) {
        return deptMapper.getOutDeptList(dept);
    }
    /**
     * 查询部门树结构信息
     * 
expert-system/src/main/java/com/gkhy/system/service/impl/SysExpertClassifyServiceImpl.java
@@ -1,15 +1,15 @@
package com.gkhy.assess.system.service.impl;
package com.gkhy.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gkhy.assess.common.enums.DeleteFlagEnum;
import com.gkhy.assess.common.exception.ApiException;
import com.gkhy.assess.common.utils.StringUtils;
import com.gkhy.assess.system.domain.SysExpertClassify;
import com.gkhy.assess.system.mapper.SysExpertClassifyMapper;
import com.gkhy.assess.system.service.SysExpertClassifyService;
import com.gkhy.assess.system.utils.ShiroUtils;
import com.gkhy.common.enums.DeleteFlagEnum;
import com.gkhy.common.exception.ServiceException;
import com.gkhy.common.utils.SecurityUtils;
import com.gkhy.common.utils.StringUtils;
import com.gkhy.system.domain.SysExpertClassify;
import com.gkhy.system.mapper.SysExpertClassifyMapper;
import com.gkhy.system.service.SysExpertClassifyService;
import org.springframework.stereotype.Service;
import java.util.List;
@@ -33,7 +33,7 @@
        if(StringUtils.isNotBlank(expertClassify.getClassifyName())){
            lambdaQueryWrapper.like(SysExpertClassify::getClassifyName,expertClassify.getClassifyName());
        }
        lambdaQueryWrapper.eq(SysExpertClassify::getDelFlag,DeleteFlagEnum.UN_DELETE.getCode());
        lambdaQueryWrapper.eq(SysExpertClassify::getDelFlag, DeleteFlagEnum.UN_DELETE.getCode());
        List<SysExpertClassify> classifies= list(lambdaQueryWrapper);
        //筛选出所有一级标签
        return classifies.stream()
@@ -53,10 +53,10 @@
    @Override
    public int modClassify(SysExpertClassify expertClassify) {
        expertClassify.setUpdateBy(ShiroUtils.getSysUser().getUsername());
        expertClassify.setUpdateBy(SecurityUtils.getUsername());
        boolean b=updateById(expertClassify);
        if(!b){
            throw new ApiException("修改专家分类失败");
            throw new ServiceException("修改专家分类失败");
        }
        return 1;
    }
@@ -66,20 +66,20 @@
        SysExpertClassify classify = new SysExpertClassify();
        classify.setId(classifyId);
        classify.setDelFlag(DeleteFlagEnum.DELETED.getCode());
        classify.setUpdateBy(ShiroUtils.getSysUser().getUsername());
        classify.setUpdateBy(SecurityUtils.getUsername());
        boolean b=updateById(classify);
        if(!b){
            throw new ApiException("删除专家分类失败");
            throw new ServiceException("删除专家分类失败");
        }
        return 1;
    }
    @Override
    public int addClassify(SysExpertClassify expertClassify) {
        expertClassify.setCreateBy(ShiroUtils.getSysUser().getUsername());
        expertClassify.setCreateBy(SecurityUtils.getUsername());
        boolean b=save(expertClassify);
        if(!b){
            throw new ApiException("新增专家分类失败");
            throw new ServiceException("新增专家分类失败");
        }
        return 1;
    }
expert-system/src/main/java/com/gkhy/system/service/impl/SysExpertInfoServiceImpl.java
@@ -1,17 +1,18 @@
package com.gkhy.assess.system.service.impl;
package com.gkhy.system.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.gkhy.assess.common.api.CommonPage;
import com.gkhy.assess.common.enums.DeleteFlagEnum;
import com.gkhy.assess.common.exception.ApiException;
import com.gkhy.assess.common.utils.PageUtil;
import com.gkhy.assess.system.domain.SysAgency;
import com.gkhy.assess.system.domain.SysExpertInfo;
import com.gkhy.assess.system.domain.SysUser;
import com.gkhy.assess.system.mapper.SysExpertInfoMapper;
import com.gkhy.assess.system.service.SysExpertInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gkhy.assess.system.utils.ShiroUtils;
import com.gkhy.common.enums.DeleteFlagEnum;
import com.gkhy.common.exception.ServiceException;
import com.gkhy.common.utils.SecurityUtils;
import com.gkhy.system.domain.SysExpertInfo;
import com.gkhy.system.domain.vo.request.SysExpertInfoRoundReq;
import com.gkhy.system.domain.vo.request.SysExpertSearchReqDto;
import com.gkhy.system.domain.vo.response.ProjectExpertSectionResp;
import com.gkhy.system.domain.vo.response.SysExpertSearchRep;
import com.gkhy.system.mapper.SysExpertInfoMapper;
import com.gkhy.system.service.SysExpertInfoService;
import org.springframework.stereotype.Service;
import java.util.List;
@@ -28,21 +29,23 @@
public class SysExpertInfoServiceImpl extends ServiceImpl<SysExpertInfoMapper, SysExpertInfo> implements SysExpertInfoService {
    @Override
    public CommonPage exportInfoList(SysExpertInfo expertInfo) {
        PageUtil.startPage();
        List<SysExpertInfo> agencyList=baseMapper.expertInfoList(expertInfo);
        return CommonPage.restPage(agencyList);
    public List<SysExpertInfo> exportInfoList(SysExpertInfo expertInfo) {
        //todo 验证是否是管理不是管理只能看本部门
        if (!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
            expertInfo.setDeptId(SecurityUtils.getDeptId());
        }
        return baseMapper.expertInfoList(expertInfo);
    }
    @Override
    public int addExpertInfo(SysExpertInfo expertInfo) {
        if(!checkIdCardUnique(new SysExpertInfo().setIdCard(expertInfo.getIdCard()))){
            throw new ApiException(expertInfo.getIdCard()+"身份证号码已经存在");
            throw new ServiceException("该业务处室申请数据已存在");
        }
        expertInfo.setCreateBy(ShiroUtils.getSysUser().getUsername());
        expertInfo.setCreateBy(expertInfo.getName());
        boolean b=save(expertInfo);
        if(!b){
            throw new ApiException("新增专家信息失败");
            throw new ServiceException("新增专家信息失败");
        }
        return 1;
    }
@@ -50,12 +53,12 @@
    @Override
    public int modExpertInfo(SysExpertInfo expertInfo) {
        if(!checkIdCardUnique(expertInfo)){
            throw new ApiException(expertInfo.getIdCard()+"身份证号码已经存在");
            throw new ServiceException("该业务处室申请数据已存在");
        }
        expertInfo.setUpdateBy(ShiroUtils.getSysUser().getUsername());
        expertInfo.setUpdateBy(SecurityUtils.getUsername());
        boolean b=updateById(expertInfo);
        if(!b){
            throw new ApiException("修改专家信息失败");
            throw new ServiceException("修改专家信息失败");
        }
        return 1;
    }
@@ -65,10 +68,10 @@
        SysExpertInfo expertInfo = new SysExpertInfo();
        expertInfo.setId(expertId);
        expertInfo.setDelFlag(DeleteFlagEnum.DELETED.getCode());
        expertInfo.setUpdateBy(ShiroUtils.getSysUser().getUsername());
        expertInfo.setUpdateBy(SecurityUtils.getUsername());
        boolean b= updateById(expertInfo);
        if(!b){
            throw new ApiException("删除专家信息失败");
            throw new ServiceException("删除专家信息失败");
        }
        return 1;
    }
@@ -87,12 +90,12 @@
    public SysExpertInfo checkExpertInfoDataScope(Long expertId) {
        if(expertId==null){
            throw new ApiException("专家id为空!");
            throw new ServiceException("专家id为空!");
        }
        SysExpertInfo expertInfo = baseMapper.getExpertInfoById(expertId);
        if (ObjectUtil.isNull(expertInfo))
        {
            throw new ApiException("专家数据不存在!");
            throw new ServiceException("专家数据不存在!");
        }
        return expertInfo;
    }
@@ -101,13 +104,27 @@
    public boolean changeApprove(SysExpertInfo expertInfo) {
        checkExpertInfoDataScope(expertInfo.getId());
        SysExpertInfo se=new SysExpertInfo().setId(expertInfo.getId()).setState(expertInfo.getState());
        se.setUpdateBy(ShiroUtils.getSysUser().getUsername());
        se.setUpdateBy(SecurityUtils.getUsername());
        return updateById(se);
    }
    @Override
    public SysExpertSearchRep queryApprove(SysExpertSearchReqDto expertInfo) {
        SysExpertSearchRep sysExpertSearchRep = baseMapper.queryApprove(expertInfo);
        if (null == sysExpertSearchRep){
            throw new ServiceException("申请记录不存!");
        }
        return sysExpertSearchRep;
    }
    @Override
    public List<ProjectExpertSectionResp> getExpertRound(SysExpertInfoRoundReq req) {
        return baseMapper.getExpertRound(req);
    }
    public boolean checkIdCardUnique(SysExpertInfo expertInfo){
        Long expertId = expertInfo.getId()==null? -1L : expertInfo.getId();
        SysExpertInfo info = baseMapper.checkIdcardUnique(expertInfo.getIdCard());
        SysExpertInfo info = baseMapper.checkIdcardUnique(expertInfo.getIdCard(),expertInfo.getDeptId());
        if (info!=null && info.getId().longValue() != expertId.longValue())
        {
            return false;
expert-system/src/main/java/com/gkhy/system/service/impl/SysSettingsServiceImpl.java
@@ -1,12 +1,24 @@
package com.gkhy.system.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.List;
import com.gkhy.common.core.redis.RedisCache;
import com.gkhy.common.core.text.Convert;
import com.gkhy.common.enums.OpenFlagEnum;
import com.gkhy.common.exception.ServiceException;
import com.gkhy.common.utils.SecurityUtils;
import com.gkhy.common.utils.StringUtils;
import com.gkhy.system.domain.ApplyRecord;
import com.gkhy.system.domain.SysSettings;
import com.gkhy.system.mapper.ApplyRecordMapper;
import com.gkhy.system.mapper.SysSettingsMapper;
import com.gkhy.system.service.ISysSettingsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.gkhy.system.mapper.SysSettingsMapper;
import com.gkhy.system.domain.SysSettings;
import com.gkhy.system.service.ISysSettingsService;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
import java.util.List;
/**
 * 系统配置Service业务层处理
@@ -19,38 +31,53 @@
    @Autowired
    private SysSettingsMapper sysSettingsMapper;
    @Autowired
    private RedisCache redisCache;
    @Autowired
    private ApplyRecordMapper applyRecordMapper;
public static final String APPLY_SETTINGS = "APPLY_SETTINGS_KEY";
    @PostConstruct
    public void init()
    {
        loadingSettingsCache();
    }
    /**
     * 查询系统配置
     *
     * @param state 系统配置主键
     * @return 系统配置
     */
    @Override
    public SysSettings selectSysSettingsByState(String state) {
        return sysSettingsMapper.selectSysSettingsByState(state);
    public String selectSysSettings() {
        String state = Convert.toStr(redisCache.getCacheObject(APPLY_SETTINGS));
        if (StringUtils.isNotEmpty(state))
        {
            return state;
        }
        SysSettings sysSettings = sysSettingsMapper.selectSysSettingsByState();
        if (StringUtils.isNotNull(sysSettings)) {
            redisCache.setCacheObject(APPLY_SETTINGS, sysSettings.getState());
            return sysSettings.getState();
        }
        return OpenFlagEnum.CLOSE.getCode();
    }
    /**
     * 查询系统配置列表
     *
     * @param sysSettings 系统配置
     * @return 系统配置
     */
    @Override
    public List<SysSettings> selectSysSettingsList(SysSettings sysSettings) {
        return sysSettingsMapper.selectSysSettingsList(sysSettings);
    public void loadingSettingsCache(){
        SysSettings sysSettings = sysSettingsMapper.selectSysSettingsByState();
        if (sysSettings != null) {
            redisCache.setCacheObject(APPLY_SETTINGS, sysSettings.getState());
        }else {
            redisCache.setCacheObject(APPLY_SETTINGS, OpenFlagEnum.CLOSE.getCode());
        }
    }
    /**
     * 新增系统配置
     *
     * @param sysSettings 系统配置
     * @return 结果
     */
    @Override
    public int insertSysSettings(SysSettings sysSettings) {
            return sysSettingsMapper.insertSysSettings(sysSettings);
    }
    /**
     * 修改系统配置
@@ -59,29 +86,51 @@
     * @return 结果
     */
    @Override
    public int updateSysSettings(SysSettings sysSettings) {
        return sysSettingsMapper.updateSysSettings(sysSettings);
    @Transactional
    public int updateSysSettings(String sysSettings) {
        int i = sysSettingsMapper.updateSysSettingsState(sysSettings);
        if (i > 0){
            String state = Convert.toStr(redisCache.getCacheObject(APPLY_SETTINGS));
            if (OpenFlagEnum.OPEN.getCode().equals(sysSettings)){
                if (StringUtils.isNotEmpty(state) && OpenFlagEnum.OPEN.getCode().equals(state)){
                    throw new ServiceException("当前状态已开启!");
                }
                ApplyRecord applyRecord = new ApplyRecord();
                applyRecord.setStartTime(DateUtil.date());
                applyRecord.setCreateBy(SecurityUtils.getUsername());
                int i1 = applyRecordMapper.insertApplyRecord(applyRecord);
                if (i1 < 1){
                    throw new ServiceException("开启失败,稍后再试!");
                }
            }else {
                if (StringUtils.isNotEmpty(state) && OpenFlagEnum.CLOSE.getCode().equals(state)){
                    throw new ServiceException("当前状态已关闭!");
                }
                List<ApplyRecord> list = applyRecordMapper.selectApplyRecordList();
                if (StringUtils.isNotEmpty(list)){
                    ApplyRecord applyRecord = list.get(0);
                    applyRecord.setEndTime(DateUtil.date());
                    applyRecord.setUpdateBy(SecurityUtils.getUsername());
                    int i1 = applyRecordMapper.updateApplyRecord(applyRecord);
                    if (i1 < 1){
                        throw new ServiceException("关闭失败,稍后再试!");
                    }
                }
            }
            redisCache.setCacheObject(APPLY_SETTINGS, sysSettings);
        }
        return i;
    }
    /**
     * 批量删除系统配置
     * 查询开启申请记录列表
     *
     * @param states 需要删除的系统配置主键
     * @return 结果
     * @return 开启申请记录
     */
    @Override
    public int deleteSysSettingsByStates(String[] states) {
        return sysSettingsMapper.deleteSysSettingsByStates(states);
    }
    /**
     * 删除系统配置信息
     *
     * @param state 系统配置主键
     * @return 结果
     */
    @Override
    public int deleteSysSettingsByState(String state) {
        return sysSettingsMapper.deleteSysSettingsByState(state);
    public List<ApplyRecord> selectApplyRecordList() {
        return applyRecordMapper.selectApplyRecordList();
    }
}
expert-system/src/main/resources/mapper/system/ApplyRecordMapper.xml
@@ -19,11 +19,8 @@
    </sql>
    <select id="selectApplyRecordList" parameterType="ApplyRecord" resultMap="ApplyRecordResult">
        <include refid="selectApplyRecordVo"/>
        <where>
            <if test="startTime != null "> and start_time = #{startTime}</if>
            <if test="endTime != null "> and end_time = #{endTime}</if>
        </where>
        select id, start_time, end_time, create_by, create_time, update_by, update_time from apply_record
        order by create_time desc
    </select>
    
    <select id="selectApplyRecordById" parameterType="Long" resultMap="ApplyRecordResult">
expert-system/src/main/resources/mapper/system/EvaluationMapper.xml
@@ -23,12 +23,14 @@
    <select id="selectEvaluationList" parameterType="Evaluation" resultMap="EvaluationResult">
        <include refid="selectEvaluationVo"/>
        <where>
        <where>
            and del_flag = 0
            <if test="score != null "> and score = #{score}</if>
            <if test="content != null  and content != ''"> and content = #{content}</if>
            <if test="scoreType != null  and scoreType != ''"> and score_type = #{scoreType}</if>
            <if test="version != null "> and version = #{version}</if>
        </where>
        order by create_time desc
    </select>
    
    <select id="selectEvaluationById" parameterType="Long" resultMap="EvaluationResult">
expert-system/src/main/resources/mapper/system/ProjectExpertDetailMapper.xml
@@ -6,9 +6,10 @@
    
    <resultMap type="ProjectExpertDetail" id="ProjectExpertDetailResult">
        <result property="id"    column="id"    />
        <result property="projectExpert"    column="project_expert"    />
        <result property="projectExpertId"    column="project_expert_id"    />
        <result property="content"    column="content"    />
        <result property="score"    column="score"    />
        <result property="scoreType"    column="score_type"    />
        <result property="delFlag"    column="del_flag"    />
        <result property="createBy"    column="create_by"    />
        <result property="createTime"    column="create_time"    />
@@ -17,16 +18,18 @@
    </resultMap>
    <sql id="selectProjectExpertDetailVo">
        select id, project_expert, content, score, del_flag, create_by, create_time, update_by, update_time from project_expert_detail
        select id, project_expert_id, content, score, del_flag,score_type, create_by, create_time, update_by, update_time from project_expert_detail
    </sql>
    <select id="selectProjectExpertDetailList" parameterType="ProjectExpertDetail" resultMap="ProjectExpertDetailResult">
        <include refid="selectProjectExpertDetailVo"/>
        <where>
            <if test="projectExpert != null "> and project_expert = #{projectExpert}</if>
        <where>
        and del_flag = 0
            <if test="projectExpertId != null "> and project_expert_id = #{projectExpertId}</if>
            <if test="content != null  and content != ''"> and content = #{content}</if>
            <if test="score != null "> and score = #{score}</if>
        </where>
        order by create_time desc
    </select>
    
    <select id="selectProjectExpertDetailById" parameterType="Long" resultMap="ProjectExpertDetailResult">
@@ -37,9 +40,10 @@
    <insert id="insertProjectExpertDetail" parameterType="ProjectExpertDetail" useGeneratedKeys="true" keyProperty="id">
        insert into project_expert_detail
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="projectExpert != null">project_expert,</if>
            <if test="projectExpertId != null">project_expert_id,</if>
            <if test="content != null and content != ''">content,</if>
            <if test="score != null">score,</if>
            <if test="scoreType != null and  scoreType != ''">score_type,</if>
            <if test="delFlag != null">del_flag,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
@@ -47,9 +51,10 @@
            <if test="updateTime != null">update_time,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="projectExpert != null">#{projectExpert},</if>
            <if test="projectExpertId != null">#{projectExpertId},</if>
            <if test="content != null and content != ''">#{content},</if>
            <if test="score != null">#{score},</if>
            <if test="scoreType != null and scoreType != ''">#{scoreType},</if>
            <if test="delFlag != null">#{delFlag},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
@@ -58,12 +63,30 @@
         </trim>
    </insert>
    <insert id="batchInsertProjectExpertDetail" parameterType="java.util.List" >
        insert into project_expert_detail
            ( project_expert_id, content, score, score_type,  create_by)
        values
        <foreach collection="list" item="item" separator=",">
            <trim prefix="(" suffix=")" suffixOverrides=",">
                <if test="item.projectExpertId != null">#{item.projectExpertId},</if>
                <if test="item.content != null and item.content != ''">#{item.content},</if>
                <if test="item.score != null">#{item.score},</if>
                <if test="item.scoreType != null and item.scoreType != ''">#{item.scoreType},</if>
                <if test="item.createBy != null">#{item.createBy},</if>
            </trim>
        </foreach>
    </insert>
    <update id="updateProjectExpertDetail" parameterType="ProjectExpertDetail">
        update project_expert_detail
        <trim prefix="SET" suffixOverrides=",">
            <if test="projectExpert != null">project_expert = #{projectExpert},</if>
            <if test="projectExpertId != null">project_expert_id = #{projectExpertId},</if>
            <if test="content != null and content != ''">content = #{content},</if>
            <if test="score != null">score = #{score},</if>
            <if test="scoreType != null and scoreType != ''">score_type = #{scoreType},</if>
            <if test="delFlag != null">del_flag = #{delFlag},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
@@ -73,14 +96,32 @@
        where id = #{id}
    </update>
    <delete id="deleteProjectExpertDetailById" parameterType="Long">
        delete from project_expert_detail where id = #{id}
    </delete>
    <update id="batchUpdateProjectExpertDetail" parameterType="java.util.List">
        <foreach collection="list" item="item" separator=";">
            update project_expert_detail
            <trim prefix="SET" suffixOverrides=",">
                <if test="item.projectExpertId != null">project_expert_id = #{item.projectExpertId},</if>
                <if test="item.content != null and item.content != ''">content = #{item.content},</if>
                <if test="item.score != null">score = #{item.score},</if>
                <if test="item.scoreType != null and item.scoreType != ''">score_type = #{item.scoreType},</if>
                <if test="item.delFlag != null">del_flag = #{item.delFlag},</if>
                <if test="item.createBy != null">create_by = #{item.createBy},</if>
                <if test="item.createTime != null">create_time = #{item.createTime},</if>
                <if test="item.updateBy != null">update_by = #{item.updateBy},</if>
                <if test="item.updateTime != null">update_time = #{item.updateTime},</if>
            </trim>
            where id = #{item.id}
        </foreach>
    </update>
    <delete id="deleteProjectExpertDetailByIds" parameterType="String">
        delete from project_expert_detail where id in
    <update id="deleteProjectExpertDetailById" parameterType="Long">
        update project_expert_detail set del_flag = 1 where id = #{id}
    </update>
    <update id="deleteProjectExpertDetailByIds" parameterType="String">
        update project_expert_detail set del_flag = 1 where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    </update>
</mapper>
expert-system/src/main/resources/mapper/system/ProjectExpertMapper.xml
@@ -9,7 +9,7 @@
        <result property="projectId"    column="project_id"    />
        <result property="expertId"    column="expert_id"    />
        <result property="score"    column="score"    />
        <result property="envaluationState"    column="envaluation_state"    />
        <result property="evaluationState"    column="evaluation_state"    />
        <result property="selectionMode"    column="selection_mode"    />
        <result property="teamLeader"    column="team_leader"    />
        <result property="delFlag"    column="del_flag"    />
@@ -20,16 +20,17 @@
    </resultMap>
    <sql id="selectProjectExpertVo">
        select id, project_id, expert_id, score, envaluation_state, selection_mode, team_leader, del_flag, create_by, create_time, update_by, update_time from project_expert
        select id, project_id, expert_id, score, evaluation_state, selection_mode, team_leader, del_flag, create_by, create_time, update_by, update_time from project_expert
    </sql>
    <select id="selectProjectExpertList" parameterType="ProjectExpert" resultMap="ProjectExpertResult">
        <include refid="selectProjectExpertVo"/>
        <where>
        <where>
            and del_flag = 0
            <if test="projectId != null "> and project_id = #{projectId}</if>
            <if test="expertId != null "> and expert_id = #{expertId}</if>
            <if test="score != null "> and score = #{score}</if>
            <if test="envaluationState != null "> and envaluation_state = #{envaluationState}</if>
            <if test="evaluationState != null "> and evaluation_state = #{evaluationState}</if>
            <if test="selectionMode != null "> and selection_mode = #{selectionMode}</if>
            <if test="teamLeader != null "> and team_leader = #{teamLeader}</if>
        </where>
@@ -46,7 +47,7 @@
            <if test="projectId != null">project_id,</if>
            <if test="expertId != null">expert_id,</if>
            <if test="score != null">score,</if>
            <if test="envaluationState != null">envaluation_state,</if>
            <if test="evaluationState != null">evaluation_state,</if>
            <if test="selectionMode != null">selection_mode,</if>
            <if test="teamLeader != null">team_leader,</if>
            <if test="delFlag != null">del_flag,</if>
@@ -59,7 +60,7 @@
            <if test="projectId != null">#{projectId},</if>
            <if test="expertId != null">#{expertId},</if>
            <if test="score != null">#{score},</if>
            <if test="envaluationState != null">#{envaluationState},</if>
            <if test="evaluationState != null">#{evaluationState},</if>
            <if test="selectionMode != null">#{selectionMode},</if>
            <if test="teamLeader != null">#{teamLeader},</if>
            <if test="delFlag != null">#{delFlag},</if>
@@ -70,13 +71,22 @@
         </trim>
    </insert>
    <insert id="batchInsertProjectExpert" parameterType="java.util.List" >
        insert into project_expert (project_id,expert_id,selection_mode,team_leader,create_by)
        values
        <foreach collection="list" item="item" separator=",">
            (#{item.projectId},#{item.expertId},#{item.selectionMode},#{item.teamLeader},#{item.createBy})
        </foreach>
    </insert>
    <update id="updateProjectExpert" parameterType="ProjectExpert">
        update project_expert
        <trim prefix="SET" suffixOverrides=",">
            <if test="projectId != null">project_id = #{projectId},</if>
            <if test="expertId != null">expert_id = #{expertId},</if>
            <if test="score != null">score = #{score},</if>
            <if test="envaluationState != null">envaluation_state = #{envaluationState},</if>
            <if test="evaluationState != null">evaluation_state = #{evaluationState},</if>
            <if test="selectionMode != null">selection_mode = #{selectionMode},</if>
            <if test="teamLeader != null">team_leader = #{teamLeader},</if>
            <if test="delFlag != null">del_flag = #{delFlag},</if>
@@ -88,14 +98,72 @@
        where id = #{id}
    </update>
    <delete id="deleteProjectExpertById" parameterType="Long">
        delete from project_expert where id = #{id}
    </delete>
    <update id="batchUpdateProjectExpert" parameterType="java.util.List">
        <foreach collection="list" item="item" separator=";">
            update project_expert
            <set>
                <if test="item.projectId != null">project_id = #{item.projectId},</if>
                <if test="item.expertId != null">expert_id = #{item.expertId},</if>
                <if test="item.score != null">score = #{item.score},</if>
                <if test="item.evaluationState != null">evaluation_state = #{item.evaluationState},</if>
                <if test="item.selectionMode != null">selection_mode = #{item.selectionMode},</if>
                <if test="item.teamLeader != null">team_leader = #{item.teamLeader},</if>
                <if test="item.updateBy != null">update_by = #{item.updateBy}</if>
            </set>
            where id = #{item.id}
        </foreach>
    </update>
    <delete id="deleteProjectExpertByIds" parameterType="String">
        delete from project_expert where id in
    <update id="deleteProjectExpertById" parameterType="Long">
        update project_expert set del_flag= 1 where id = #{id}
    </update>
    <update id="deleteProjectExpertByIds" parameterType="String">
        update project_expert set del_flag= 1 where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    </update>
    <select id="getUnEva" resultType="int" parameterType="Long">
        select count(id) from  project_expert where project_id = #{id} and del_flag = 0 and evaluation_state = 0
    </select>
    <select id="projectExpertEvaluationList" parameterType="Long" resultType="com.gkhy.system.domain.vo.response.ProjectExpertEvaluationResp">
        select b.id ,b.expert_id expertId ,c.name,c.sex,c.id_card idCard,c.domain,c.rating_level ratingLevel,
               b.selection_mode selectionMode,b.team_leader teamLeader,b.score,b.evaluation_state evaluationState
        from  project_expert b
                 left join sys_expert_info c on b.expert_id = c.id
        where b.project_id = #{projectId}
        order by b.team_leader asc , b.selection_mode asc, b.create_time desc
    </select>
    <select id="projectExpertEvaList" parameterType="com.gkhy.system.domain.vo.request.SysProjectExpertReq" resultType="com.gkhy.system.domain.vo.response.ProjectExpertResp">
        select a.id projectId, a.project_name projectName,
               b.id projectExpertId,b.expert_id  expertId,c.name,c.id_card idCard,c.domain,b.selection_mode selectionMode,
               b.team_leader teamLeader,b.update_time updateTime,b.score
        from project_management a
                 left join project_expert b on a.id = b.project_id and b.del_flag = 0
                 left join sys_expert_info c on b.expert_id = c.id
        where 1=1
        <if test="projectName != null  and projectName != ''"> and a.project_name like concat('%', #{projectName}, '%')</if>
        <if test="name != null and name != ''">
            and c.name like concat('%', #{name}, '%')
        </if>
        <if test="idCard != null and idCard != ''">
            and c.id_card like concat('%', #{idCard}, '%')
        </if>
        <if test="domain != null and domain != ''">
            and c.domain like concat('%', #{domain}, '%')
        </if>
        <if test="startTime != null "><!-- 开始时间检索 -->
            and date_format(b.update_time,'%y%m%d') &gt;= date_format(#{startTime},'%y%m%d')
        </if>
        <if test="endTime != null "><!-- 结束时间检索 -->
            and date_format(b.update_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
        </if>
        order by b.team_leader asc , b.create_time desc
    </select>
</mapper>
expert-system/src/main/resources/mapper/system/ProjectFileMapper.xml
@@ -28,7 +28,8 @@
    <select id="selectProjectFileList" parameterType="ProjectFile" resultMap="ProjectFileResult">
        <include refid="selectProjectFileVo"/>
        <where>
        <where>
            and del_flag = 0
            <if test="projectId != null "> and project_id = #{projectId}</if>
            <if test="module != null  and module != ''"> and module = #{module}</if>
            <if test="filePath != null  and filePath != ''"> and file_path = #{filePath}</if>
@@ -82,6 +83,32 @@
         </trim>
    </insert>
        <insert id="insertProjectFiles" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
            insert into project_file
                (project_id,module,file_path,file_url,file_name,file_suffix,file_desc,file_size,file_type,create_by)
            values
            <foreach collection="list" item="item" separator=",">
                <trim prefix="(" suffix=")" suffixOverrides=",">
                    <if test="item.projectId != null">#{item.projectId},</if>
                    <if test="item.module != null and item.module != ''">#{item.module},</if>
                    <if test="item.filePath != null">#{item.filePath},</if>
                    <if test="item.fileUrl != null">#{item.fileUrl},</if>
                    <if test="item.fileName != null">#{item.fileName},</if>
                    <if test="item.fileSuffix != null">#{item.fileSuffix},</if>
                    <if test="item.fileDesc != null">#{item.fileDesc},</if>
                    <if test="item.fileSize != null">#{item.fileSize},</if>
                    <if test="item.fileType != null">#{item.fileType},</if>
                    <if test="item.createBy != null">#{item.createBy},</if>
                </trim>
            </foreach>
        </insert>
    <update id="updateProjectFile" parameterType="ProjectFile">
        update project_file
        <trim prefix="SET" suffixOverrides=",">
@@ -95,22 +122,24 @@
            <if test="fileSize != null">file_size = #{fileSize},</if>
            <if test="fileType != null">file_type = #{fileType},</if>
            <if test="delFlag != null">del_flag = #{delFlag},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteProjectFileById" parameterType="Long">
        delete from project_file where id = #{id}
    </delete>
    <update id="deleteProjectFileById" parameterType="Long">
        update project_file set del_flag = 1 where id = #{id}
    </update>
    <delete id="deleteProjectFileByIds" parameterType="String">
        delete from project_file where id in
    <update id="deleteProjectFileByIdAndType" >
        update project_file set del_flag = 1 where project_id = #{projectId} and module = #{module}
    </update>
    <update id="deleteProjectFileByIds" parameterType="String">
        update project_file set del_flag = 1 where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    </update>
</mapper>
expert-system/src/main/resources/mapper/system/ProjectManagementMapper.xml
@@ -17,9 +17,15 @@
        <result property="remark"    column="remark"    />
        <result property="projectDateStart"    column="project_date_start"    />
        <result property="projectDateEnd"    column="project_date_end"    />
        <result property="projectCheckTime"    column="project_check_time"    />
        <result property="expertCertificate"    column="expert_certificate"    />
        <result property="envaluationState"    column="envaluation_state"    />
        <result property="evaluationState"    column="evaluation_state"    />
        <result property="expertNum"    column="expert_num"    />
        <result property="expertId"    column="expert_id"    />
        <result property="expertName"    column="expert_name"    />
        <result property="projectEndTime"    column="project_end_time"    />
        <result property="desc"    column="desc"    />
        <result property="step"    column="step"    />
        <result property="delFlag"    column="del_flag"    />
        <result property="createBy"    column="create_by"    />
        <result property="createTime"    column="create_time"    />
@@ -27,13 +33,45 @@
        <result property="updateTime"    column="update_time"    />
    </resultMap>
    <resultMap type="com.gkhy.system.domain.vo.response.ProjectExpertManagementInfoRes" id="ProjectManagementInfoResult">
        <result property="id"    column="id"    />
        <result property="projectName"    column="project_name"    />
        <result property="deptName"    column="dept_name"    />
        <result property="remark"    column="remark"    />
        <result property="state"    column="state"    />
        <result property="step"    column="step"    />
        <result property="companyName"    column="company_name"    />
        <result property="projectAddress"    column="project_address"    />
<!--        <result property="deptUserName"    column="dept_user_name"    />-->
        <result property="projectDateStart"    column="project_date_start"    />
        <result property="projectDateEnd"    column="project_date_end"    />
        <result property="projectCheckTime"    column="project_check_time"    />
        <collection  property="projectExpertCheckResp"   javaType="java.util.List"  resultMap="ExpertCheck" />
    </resultMap>
    <resultMap id="ExpertCheck" type="com.gkhy.system.domain.vo.response.ProjectExpertCheckResp">
        <result  property="id"       column="project_expert_id"        />
        <result property="expertId"     column="expert_id_info"      />
        <result property="name"      column="name"       />
        <result property="sex"     column="sex"      />
        <result property="idCard"    column="id_card"     />
        <result property="domain"       column="domain"    />
        <result property="ratingLevel"     column="rating_level"      />
        <result property="selectionMode"    column="selection_mode"     />
        <result property="teamLeader"       column="team_leader"    />
    </resultMap>
    <sql id="selectProjectManagementVo">
        select id, project_name, dept_id, dept_name, company_name, project_address, dept_user_name, version, state, remark, project_date_start, project_date_end, expert_certificate, envaluation_state, expert_num, del_flag, create_by, create_time, update_by, update_time from project_management
        select id, project_name, dept_id, dept_name, company_name, project_address, dept_user_name,
               version, state, remark, project_date_start, project_date_end, expert_certificate,
               evaluation_state, expert_num, del_flag, create_by, create_time, update_by, update_time,project_check_time,expert_id,
               expert_name,project_end_time,'desc',step
        from project_management
    </sql>
    <select id="selectProjectManagementList" parameterType="ProjectManagement" resultMap="ProjectManagementResult">
        <include refid="selectProjectManagementVo"/>
        <where>
        <where>
            and del_flag = 0
            <if test="projectName != null  and projectName != ''"> and project_name like concat('%', #{projectName}, '%')</if>
            <if test="deptId != null "> and dept_id = #{deptId}</if>
            <if test="deptName != null  and deptName != ''"> and dept_name like concat('%', #{deptName}, '%')</if>
@@ -42,17 +80,18 @@
            <if test="deptUserName != null  and deptUserName != ''"> and dept_user_name like concat('%', #{deptUserName}, '%')</if>
            <if test="version != null "> and version = #{version}</if>
            <if test="state != null "> and state = #{state}</if>
            <if test="step!= null "> and step = #{step}</if>
            <if test="projectDateStart != null "> and project_date_start = #{projectDateStart}</if>
            <if test="projectDateEnd != null "> and project_date_end = #{projectDateEnd}</if>
            <if test="expertCertificate != null  and expertCertificate != ''"> and expert_certificate = #{expertCertificate}</if>
            <if test="envaluationState != null "> and envaluation_state = #{envaluationState}</if>
            <if test="evaluationState != null "> and evaluation_state = #{evaluationState}</if>
            <if test="expertNum != null "> and expert_num = #{expertNum}</if>
        </where>
    </select>
    
    <select id="selectProjectManagementById" parameterType="Long" resultMap="ProjectManagementResult">
        <include refid="selectProjectManagementVo"/>
        where id = #{id}
        where id = #{id} and del_flag = 0
    </select>
    <insert id="insertProjectManagement" parameterType="ProjectManagement" useGeneratedKeys="true" keyProperty="id">
@@ -66,11 +105,12 @@
            <if test="deptUserName != null and deptUserName != ''">dept_user_name,</if>
            <if test="version != null">version,</if>
            <if test="state != null">state,</if>
            <if test="step != null">step,</if>
            <if test="remark != null">remark,</if>
            <if test="projectDateStart != null">project_date_start,</if>
            <if test="projectDateEnd != null">project_date_end,</if>
            <if test="expertCertificate != null">expert_certificate,</if>
            <if test="envaluationState != null">envaluation_state,</if>
            <if test="evaluationState != null">evaluation_state,</if>
            <if test="expertNum != null">expert_num,</if>
            <if test="delFlag != null">del_flag,</if>
            <if test="createBy != null">create_by,</if>
@@ -87,11 +127,12 @@
            <if test="deptUserName != null and deptUserName != ''">#{deptUserName},</if>
            <if test="version != null">#{version},</if>
            <if test="state != null">#{state},</if>
            <if test="step != null">#{step},</if>
            <if test="remark != null">#{remark},</if>
            <if test="projectDateStart != null">#{projectDateStart},</if>
            <if test="projectDateEnd != null">#{projectDateEnd},</if>
            <if test="expertCertificate != null">#{expertCertificate},</if>
            <if test="envaluationState != null">#{envaluationState},</if>
            <if test="evaluationState != null">#{evaluationState},</if>
            <if test="expertNum != null">#{expertNum},</if>
            <if test="delFlag != null">#{delFlag},</if>
            <if test="createBy != null">#{createBy},</if>
@@ -112,12 +153,18 @@
            <if test="deptUserName != null and deptUserName != ''">dept_user_name = #{deptUserName},</if>
            <if test="version != null">version = #{version},</if>
            <if test="state != null">state = #{state},</if>
            <if test="step != null">step = #{step},</if>
            <if test="remark != null">remark = #{remark},</if>
            <if test="projectDateStart != null">project_date_start = #{projectDateStart},</if>
            <if test="projectDateEnd != null">project_date_end = #{projectDateEnd},</if>
            <if test="projectCheckTime != null">project_check_time = #{projectCheckTime},</if>
            <if test="expertCertificate != null">expert_certificate = #{expertCertificate},</if>
            <if test="envaluationState != null">envaluation_state = #{envaluationState},</if>
            <if test="evaluationState != null">evaluation_state = #{evaluationState},</if>
            <if test="expertNum != null">expert_num = #{expertNum},</if>
            <if test="expertId != null">expert_id = #{expertId},</if>
            <if test="expertName != null and expertName != ''">expert_name = #{expertName},</if>
            <if test="projectEndTime != null">project_end_time = #{projectEndTime},</if>
            <if test="desc != null and desc != ''">`desc` = #{desc},</if>
            <if test="delFlag != null">del_flag = #{delFlag},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
@@ -127,14 +174,37 @@
        where id = #{id}
    </update>
    <delete id="deleteProjectManagementById" parameterType="Long">
        delete from project_management where id = #{id}
    </delete>
    <update id="deleteProjectManagementById" parameterType="Long">
        update  project_management set del_flag = 1 where id = #{id}
    </update>
    <delete id="deleteProjectManagementByIds" parameterType="String">
        delete from project_management where id in
    <update id="deleteProjectManagementByIds" parameterType="String">
        update  project_management set del_flag = 1 where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    </update>
    <select id="projectExpertCheckInfo" parameterType="Long" resultMap="ProjectManagementInfoResult">
        select a.id,a.step, a.project_name, a.dept_name, a.company_name, a.project_address, a.project_date_start, a.project_date_end, a.remark,a.project_check_time,a.state,
            b.id project_expert_id,b.expert_id expert_id_info,c.name,c.sex,c.id_card,c.domain,c.rating_level,b.selection_mode,b.team_leader
        from project_management a
        left join project_expert b on a.id = b.project_id and b.del_flag = 0
                                   left join sys_expert_info c on b.expert_id = c.id
         where a.id = #{id}
        order by b.team_leader asc , b.create_time desc
    </select>
    <select id="getProjectExpertSate" parameterType="com.gkhy.system.domain.vo.request.ProjectExpertStateReq" resultType="com.gkhy.system.domain.vo.response.ProjectExpertStateResp">
        select a.id, a.project_name, a.evaluation_state, a.project_check_time, a.project_end_time, a.dept_name, a.expert_num
        from project_management a
        where a.del_flag = 0 and a.state = 4
        <if test="projectCheckTime != null "> and a.project_check_time = #{projectCheckTime}</if>
        <if test="projectName != null  and projectName != ''"> and a.project_name like concat('%', #{projectName}, '%')</if>
        <if test="evaluationState != null "> and a.evaluation_state = #{evaluationState}</if>
    </select>
    <select id="getDataNum" parameterType="Long" resultType="Integer">
        select state from project_management where del_flag = 0
        <if test="deptId != null "> and dept_id = #{deptId}</if>
    </select>
</mapper>
expert-system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -46,6 +46,26 @@
        ${params.dataScope}
        order by d.parent_id, d.order_num
    </select>
    <select id="getOutDeptList" parameterType="SysDept" resultMap="SysDeptResult">
        <include refid="selectDeptVo"/>
        where d.del_flag = '0'
        <if test="deptId != null and deptId != 0">
            AND dept_id = #{deptId}
        </if>
        <if test="parentId != null and parentId != 0">
            AND parent_id = #{parentId}
        </if>
        <if test="deptName != null and deptName != ''">
            AND dept_name like concat('%', #{deptName}, '%')
        </if>
        <if test="status != null and status != ''">
            AND status = #{status}
        </if>
        order by d.parent_id, d.order_num
    </select>
    
    <select id="selectDeptListByRoleId" resultType="Long">
        select d.dept_id
expert-system/src/main/resources/mapper/system/SysExpertClassifyMapper.xml
@@ -1,5 +1,5 @@
<?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.gkhy.assess.system.mapper.SysExpertClassifyMapper">
<mapper namespace="com.gkhy.system.mapper.SysExpertClassifyMapper">
</mapper>
expert-system/src/main/resources/mapper/system/SysExpertInfoMapper.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gkhy.assess.system.mapper.SysExpertInfoMapper">
<mapper namespace="com.gkhy.system.mapper.SysExpertInfoMapper">
    <sql id="selectExpertInfoVo">
        select id,name,sex,birthday,phone,title,state,electronic_photo,id_card,duty_status,
@@ -8,7 +8,7 @@
               graduation_school,degree,speciality,current_profession,support_direction_safety,
               support_direction_prevention,support_direction_emergency,resume_key,paper_situation_key,
               reward_key,achievement_key,personal_opinion_key,recommend_unit_opinion_key,remark,create_by,
               create_time,big_classify,small_classify,del_flag,source
               create_time,big_classify,small_classify,del_flag,source,rating_level,employment_date_start,employment_date_end,expert_certificate,dept_id
        from sys_expert_info
    </sql>
@@ -19,8 +19,9 @@
        </foreach>
    </update>
    <select id="expertInfoList" resultType="com.gkhy.assess.system.domain.SysExpertInfo">
        select id,name,sex,birthday,phone,title,degree,state,speciality,big_classify,small_classify,id_card,company_name,domain,level,current_profession,duty_status,support_direction_safety,create_time from sys_expert_info
    <select id="expertInfoList" resultType="com.gkhy.system.domain.SysExpertInfo">
        select id,name,sex,birthday,phone,title,degree,state,speciality,big_classify,small_classify,id_card,company_name,
            domain,level,current_profession,duty_status,support_direction_safety,create_time,rating_level,employment_date_start,employment_date_end,expert_certificate from sys_expert_info
        <where>
            and del_flag = 0
            <if test="name != null and name != ''">
@@ -28,6 +29,9 @@
            </if>
            <if test="bigClassify != null">
                and big_classify = #{bigClassify}
            </if>
            <if test="ratingLevel != null and ratingLevel != ''">
                and rating_level = #{ratingLevel}
            </if>
            <if test="smallClassify != null">
                and small_classify = #{smallClassify}
@@ -38,21 +42,51 @@
            <if test="state != null">
                and state = #{state}
            </if>
            <if test="deptId != null">
                and dept_id = #{deptId}
            </if>
            <if test="params.startTime != null "><!-- 开始时间检索 -->
                and date_format(create_time,'%y%m%d') &gt;= date_format(#{params.startTime},'%y%m%d')
            </if>
            <if test="params.endTime != null "><!-- 结束时间检索 -->
                and date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
            </if>
        </where>
        order by create_time desc
    </select>
    <select id="checkIdcardUnique" resultType="com.gkhy.assess.system.domain.SysExpertInfo">
        select id,name from sys_expert_info where id_card=#{idCard} and del_flag=0 limit 1
    <select id="checkIdcardUnique" resultType="com.gkhy.system.domain.SysExpertInfo">
        select id,name from sys_expert_info where id_card=#{idCard} and dept_id = #{deptId} and del_flag=0 limit 1
    </select>
    <select id="getExpertInfoById" resultType="com.gkhy.assess.system.domain.SysExpertInfo">
    <select id="getExpertInfoById" resultType="com.gkhy.system.domain.SysExpertInfo">
        <include refid="selectExpertInfoVo"/>
        where id=#{expertId}
    </select>
    <select id="queryApprove" parameterType="com.gkhy.system.domain.vo.request.SysExpertSearchReqDto" resultType="com.gkhy.system.domain.vo.response.SysExpertSearchRep">
        select expert_certificate,state from sys_expert_info where id_card=#{idCard} and dept_id = #{deptId} and phone = #{phone} and del_flag=0 limit 1
    </select>
    <select id="getExpertRound" parameterType="com.gkhy.system.domain.vo.request.SysExpertInfoRoundReq"
            resultType="com.gkhy.system.domain.vo.response.ProjectExpertSectionResp">
        select id,name,sex,id_card idCard,
            domain,rating_level ratingLevel from sys_expert_info
        where del_flag = 0
            <if test="domain != null and domain.size() > 0">
                and domain in
                <foreach collection="domain" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        <if test="ratingLevel != null and ratingLevel.size() > 0">
            and rating_level in
        <foreach collection="ratingLevel" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
        </if>
        ORDER BY RAND()
            LIMIT #{num}
    </select>
</mapper>
expert-system/src/main/resources/mapper/system/SysSettingsMapper.xml
@@ -19,9 +19,8 @@
        </where>
    </select>
    
    <select id="selectSysSettingsByState" parameterType="String" resultMap="SysSettingsResult">
        <include refid="selectSysSettingsVo"/>
        where state = #{state}
    <select id="selectSysSettingsByState"  resultMap="SysSettingsResult">
        select state from sys_settings where id  = 1
    </select>
    <insert id="insertSysSettings" parameterType="SysSettings">
@@ -34,11 +33,8 @@
         </trim>
    </insert>
    <update id="updateSysSettings" parameterType="SysSettings">
        update sys_settings
        <trim prefix="SET" suffixOverrides=",">
        </trim>
        where state = #{state}
    <update id="updateSysSettingsState" parameterType="String">
        update sys_settings set state = #{state} where id=1
    </update>
    <delete id="deleteSysSettingsByState" parameterType="String">
pom.xml
@@ -4,16 +4,16 @@
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <groupId>com.ruoyi</groupId>
    <artifactId>ruoyi</artifactId>
    <groupId>com.gkhy</groupId>
    <artifactId>expert</artifactId>
    <version>3.8.8</version>
    <name>ruoyi</name>
    <url>http://www.ruoyi.vip</url>
    <description>若依管理系统</description>
    <name>expert</name>
    <url>http://www.expert.vip</url>
    <description>专家管理系统</description>
    
    <properties>
        <ruoyi.version>3.8.8</ruoyi.version>
        <expert.version>3.8.8</expert.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
@@ -30,11 +30,13 @@
        <poi.version>4.1.2</poi.version>
        <velocity.version>2.3</velocity.version>
        <jwt.version>0.9.1</jwt.version>
        <mybatis-plus.version>3.5.1</mybatis-plus.version>
        <!-- override dependency version -->
        <tomcat.version>9.0.96</tomcat.version>
        <logback.version>1.2.13</logback.version>
        <spring-security.version>5.7.12</spring-security.version>
        <spring-framework.version>5.3.39</spring-framework.version>
        <hutool.version>5.8.9</hutool.version>
    </properties>
    <!-- 依赖声明 -->
@@ -66,6 +68,17 @@
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generator</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
            <!-- 覆盖logback的依赖配置-->
@@ -129,17 +142,17 @@
            </dependency>
            <!-- Swagger3依赖 -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-boot-starter</artifactId>
                <version>${swagger.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>io.swagger</groupId>
                        <artifactId>swagger-models</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
<!--            <dependency>-->
<!--                <groupId>io.springfox</groupId>-->
<!--                <artifactId>springfox-boot-starter</artifactId>-->
<!--                <version>${swagger.version}</version>-->
<!--                <exclusions>-->
<!--                    <exclusion>-->
<!--                        <groupId>io.swagger</groupId>-->
<!--                        <artifactId>swagger-models</artifactId>-->
<!--                    </exclusion>-->
<!--                </exclusions>-->
<!--            </dependency>-->
            <!-- io常用工具类 -->
            <dependency>
@@ -183,51 +196,55 @@
                <version>${kaptcha.version}</version>
            </dependency>
            <!-- 定时任务-->
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>ruoyi-quartz</artifactId>
                <version>${ruoyi.version}</version>
            </dependency>
            <!-- 代码生成-->
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>ruoyi-generator</artifactId>
                <version>${ruoyi.version}</version>
                <groupId>com.gkhy</groupId>
                <artifactId>expert-generator</artifactId>
                <version>${expert.version}</version>
            </dependency>
            <!-- 核心模块-->
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>ruoyi-framework</artifactId>
                <version>${ruoyi.version}</version>
                <groupId>com.gkhy</groupId>
                <artifactId>expert-framework</artifactId>
                <version>${expert.version}</version>
            </dependency>
            <!-- 系统模块-->
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>ruoyi-system</artifactId>
                <version>${ruoyi.version}</version>
                <groupId>com.gkhy</groupId>
                <artifactId>expert-system</artifactId>
                <version>${expert.version}</version>
            </dependency>
            <!-- 通用工具-->
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>ruoyi-common</artifactId>
                <version>${ruoyi.version}</version>
                <groupId>com.gkhy</groupId>
                <artifactId>expert-common</artifactId>
                <version>${expert.version}</version>
            </dependency>
            <!--Hutool Java工具包-->
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>${hutool.version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>knife4j-spring-boot-starter</artifactId>
                <version>3.0.3</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <modules>
        <module>ruoyi-admin</module>
        <module>ruoyi-framework</module>
        <module>ruoyi-system</module>
        <module>ruoyi-quartz</module>
        <module>ruoyi-generator</module>
        <module>ruoyi-common</module>
        <module>expert-admin</module>
        <module>expert-framework</module>
        <module>expert-system</module>
        <module>expert-generator</module>
        <module>expert-common</module>
    </modules>
    <packaging>pom</packaging>
ry.bat
@@ -1,21 +1,21 @@
@echo off
rem jarƽ¼¶Ä¿Â¼
set AppName=ruoyi-admin.jar
rem jarƽ��Ŀ¼
set AppName=expert-admin.jar
rem JVM²ÎÊý
rem JVM����
set JVM_OPTS="-Dname=%AppName%  -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps  -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
ECHO.
    ECHO.  [1] Æô¶¯%AppName%
    ECHO.  [2] ¹Ø±Õ%AppName%
    ECHO.  [3] ÖØÆô%AppName%
    ECHO.  [4] Æô¶¯×´Ì¬ %AppName%
    ECHO.  [5] ÍË ³ö
    ECHO.  [1] ����%AppName%
    ECHO.  [2] �ر�%AppName%
    ECHO.  [3] ����%AppName%
    ECHO.  [4] ����״̬ %AppName%
    ECHO.  [5] �� ��
ECHO.
ECHO.ÇëÊäÈëÑ¡ÔñÏîÄ¿µÄÐòºÅ:
ECHO.������ѡ����Ŀ�����:
set /p ID=
    IF "%id%"=="1" GOTO start
    IF "%id%"=="2" GOTO stop
@@ -35,11 +35,11 @@
start javaw %JVM_OPTS% -jar %AppName%
echo  starting¡­¡­
echo  starting����
echo  Start %AppName% success...
goto:eof
rem º¯Êýstopͨ¹ýjpsÃüÁî²éÕÒpid²¢½áÊø½ø³Ì
rem ����stopͨ��jps�������pid����������
:stop
    for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
        set pid=%%a
@@ -48,7 +48,7 @@
    if not defined pid (echo process %AppName% does not exists) else (
        echo prepare to kill %image_name%
        echo start kill %pid% ...
        rem ¸ù¾Ý½ø³ÌID£¬kill½ø³Ì
        rem ���ݽ���ID��kill����
        taskkill /f /pid %pid%
    )
goto:eof
ry.sh
@@ -1,6 +1,6 @@
#!/bin/sh
# ./ry.sh start 启动 stop 停止 restart 重启 status 状态
AppName=ruoyi-admin.jar
AppName=expert-admin.jar
# JVM参数
JVM_OPTS="-Dname=$AppName  -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps  -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
sql/ry_20240629.sql
@@ -161,7 +161,7 @@
insert into sys_menu values('1', '系统管理', '0', '1', 'system',           null, '', '', 1, 0, 'M', '0', '0', '', 'system',   'admin', sysdate(), '', null, '系统管理目录');
insert into sys_menu values('2', '系统监控', '0', '2', 'monitor',          null, '', '', 1, 0, 'M', '0', '0', '', 'monitor',  'admin', sysdate(), '', null, '系统监控目录');
insert into sys_menu values('3', '系统工具', '0', '3', 'tool',             null, '', '', 1, 0, 'M', '0', '0', '', 'tool',     'admin', sysdate(), '', null, '系统工具目录');
insert into sys_menu values('4', '若依官网', '0', '4', 'http://ruoyi.vip', null, '', '', 0, 0, 'M', '0', '0', '', 'guide',    'admin', sysdate(), '', null, '若依官网地址');
insert into sys_menu values('4', '若依官网', '0', '4', 'http://expert.vip', null, '', '', 0, 0, 'M', '0', '0', '', 'guide',    'admin', sysdate(), '', null, '若依官网地址');
-- 二级菜单
insert into sys_menu values('100',  '用户管理', '1',   '1', 'user',       'system/user/index',        '', '', 1, 0, 'C', '0', '0', 'system:user:list',        'user',          'admin', sysdate(), '', null, '用户管理菜单');
insert into sys_menu values('101',  '角色管理', '1',   '2', 'role',       'system/role/index',        '', '', 1, 0, 'C', '0', '0', 'system:role:list',        'peoples',       'admin', sysdate(), '', null, '角色管理菜单');