diff --git a/jeecg-boot-base-core/pom.xml b/jeecg-boot-base-core/pom.xml
index 53518c49..354f8dd8 100644
--- a/jeecg-boot-base-core/pom.xml
+++ b/jeecg-boot-base-core/pom.xml
@@ -145,7 +145,7 @@
${postgresql.version}
runtime
-
+
org.springframework.boot
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/vo/SysFilesModel.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/vo/SysFilesModel.java
index ecc316d9..e26a19ed 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/vo/SysFilesModel.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/vo/SysFilesModel.java
@@ -19,6 +19,8 @@ public class SysFilesModel {
private String storeType;
/**文件大小(kb)*/
private Double fileSize;
+ /**租户id*/
+ private String tenantId;
public String getId() {
return id;
@@ -67,4 +69,12 @@ public class SysFilesModel {
public void setFileSize(Double fileSize) {
this.fileSize = fileSize;
}
+
+ public String getTenantId() {
+ return tenantId;
+ }
+
+ public void setTenantId(String tenantId) {
+ this.tenantId = tenantId;
+ }
}
\ No newline at end of file
diff --git a/jeecg-module-system/jeecg-system-api/jeecg-system-cloud-api/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java b/jeecg-module-system/jeecg-system-api/jeecg-system-cloud-api/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java
index 2e84043e..a4e669f1 100644
--- a/jeecg-module-system/jeecg-system-api/jeecg-system-cloud-api/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java
+++ b/jeecg-module-system/jeecg-system-api/jeecg-system-cloud-api/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java
@@ -108,7 +108,7 @@ public interface ISysBaseAPI extends CommonAPI {
* @return 部门 parentIds
*/
@GetMapping("/sys/api/getDepartParentIdsByDepIds")
- Set getDepartParentIdsByDepIds(@RequestParam("depIds") Set depIds);
+ Set getDepartParentIdsByDepIds(@RequestParam("depIds") Set depIds);
/**
* 9通过用户账号查询部门 name
@@ -213,7 +213,7 @@ public interface ISysBaseAPI extends CommonAPI {
* @return
*/
@GetMapping("/sys/api/queryAllUser")
- public JSONObject queryAllUser(@RequestParam(name="userIds",required=false)String userIds, @RequestParam(name="pageNo",required=false) Integer pageNo,@RequestParam(name="pageSize",required=false) int pageSize);
+ public JSONObject queryAllUser(@RequestParam(name="userIds",required=false)String userIds, @RequestParam(name="pageNo",required=false) Integer pageNo,@RequestParam(name="pageSize",required=false) Integer pageSize);
/**
@@ -761,7 +761,7 @@ public interface ISysBaseAPI extends CommonAPI {
@GetMapping("/sys/api/dictTableWhiteListCheckByDict")
boolean dictTableWhiteListCheckByDict(
@RequestParam("tableOrDictCode") String tableOrDictCode,
- @RequestParam(value = "fields", required = false) String[] fields
+ @RequestParam(value = "fields", required = false) String... fields
);
}
diff --git a/jeecg-module-system/jeecg-system-api/jeecg-system-cloud-api/src/main/java/org/jeecg/common/system/api/fallback/SysBaseAPIFallback.java b/jeecg-module-system/jeecg-system-api/jeecg-system-cloud-api/src/main/java/org/jeecg/common/system/api/fallback/SysBaseAPIFallback.java
index 2a22be11..90b61689 100644
--- a/jeecg-module-system/jeecg-system-api/jeecg-system-cloud-api/src/main/java/org/jeecg/common/system/api/fallback/SysBaseAPIFallback.java
+++ b/jeecg-module-system/jeecg-system-api/jeecg-system-cloud-api/src/main/java/org/jeecg/common/system/api/fallback/SysBaseAPIFallback.java
@@ -133,7 +133,7 @@ public class SysBaseAPIFallback implements ISysBaseAPI {
}
@Override
- public JSONObject queryAllUser(String userIds, Integer pageNo, int pageSize) {
+ public JSONObject queryAllUser(String userIds, Integer pageNo, Integer pageSize) {
return null;
}
@@ -446,7 +446,7 @@ public class SysBaseAPIFallback implements ISysBaseAPI {
}
@Override
- public boolean dictTableWhiteListCheckByDict(String tableOrDictCode, String[] fields) {
+ public boolean dictTableWhiteListCheckByDict(String tableOrDictCode, String... fields) {
return false;
}
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/api/controller/SystemApiController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/api/controller/SystemApiController.java
index 9ca8dc32..b155b04e 100644
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/api/controller/SystemApiController.java
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/api/controller/SystemApiController.java
@@ -347,7 +347,7 @@ public class SystemApiController {
* @return
*/
@GetMapping("/queryAllUser")
- public JSONObject queryAllUser(@RequestParam(name="userIds",required=false)String userIds, @RequestParam(name="pageNo",required=false) Integer pageNo,@RequestParam(name="pageSize",required=false) int pageSize){
+ public JSONObject queryAllUser(@RequestParam(name="userIds",required=false)String userIds, @RequestParam(name="pageNo",required=false) Integer pageNo,@RequestParam(name="pageSize",required=false) Integer pageSize){
return sysBaseApi.queryAllUser(userIds, pageNo, pageSize);
}
@@ -578,7 +578,7 @@ public class SystemApiController {
* @param tenantId 新的租户ID
* @return Map Map<原字典编码, 新字典编码>
*/
- @GetMapping("/sys/api/copyLowAppDict")
+ @GetMapping("/copyLowAppDict")
Map copyLowAppDict(@RequestParam("originalAppId") String originalAppId, @RequestParam("appId") String appId, @RequestParam("tenantId") String tenantId) {
return sysBaseApi.copyLowAppDict(originalAppId, appId, tenantId);
}
@@ -732,14 +732,6 @@ public class SystemApiController {
this.sysBaseApi.saveDataLog(dataLogDto);
}
- @PostMapping("/addSysFiles")
- public void addSysFiles(@RequestBody SysFilesModel sysFilesModel){this.sysBaseApi.addSysFiles(sysFilesModel);}
-
- @GetMapping("/getFileUrl")
- public String getFileUrl(@RequestParam(name="fileId") String fileId){
- return this.sysBaseApi.getFileUrl(fileId);
- }
-
/**
* 更新头像
* @param loginUser
@@ -858,7 +850,7 @@ public class SystemApiController {
* @param deptIds
* @return
*/
- @GetMapping("/sys/api/queryUserIdsByDeptIds")
+ @GetMapping("/queryUserIdsByDeptIds")
public List queryUserIdsByDeptIds(@RequestParam("deptIds") List deptIds){
return sysBaseApi.queryUserIdsByDeptIds(deptIds);
}
@@ -868,7 +860,7 @@ public class SystemApiController {
* @param deptIds
* @return
*/
- @GetMapping("/sys/api/queryUserAccountsByDeptIds")
+ @GetMapping("/queryUserAccountsByDeptIds")
public List queryUserAccountsByDeptIds(@RequestParam("deptIds") List deptIds){
return sysBaseApi.queryUserAccountsByDeptIds(deptIds);
}
@@ -878,7 +870,7 @@ public class SystemApiController {
* @param roleCodes
* @return
*/
- @GetMapping("/sys/api/queryUserIdsByRoleds")
+ @GetMapping("/queryUserIdsByRoleds")
public List queryUserIdsByRoleds(@RequestParam("roleCodes") List roleCodes){
return sysBaseApi.queryUserIdsByRoleds(roleCodes);
}
@@ -888,7 +880,7 @@ public class SystemApiController {
* @param positionIds
* @return
*/
- @GetMapping("/sys/api/queryUserIdsByPositionIds")
+ @GetMapping("/queryUserIdsByPositionIds")
public List queryUserIdsByPositionIds(@RequestParam("positionIds") List positionIds){
return sysBaseApi.queryUserIdsByPositionIds(positionIds);
}
@@ -900,7 +892,7 @@ public class SystemApiController {
* @param orgCode 部门编码
* @return
*/
- @GetMapping("/sys/api/getUserAccountsByDepCode")
+ @GetMapping("/getUserAccountsByDepCode")
public List getUserAccountsByDepCode(String orgCode){
return sysBaseApi.getUserAccountsByDepCode(orgCode);
}
@@ -911,7 +903,7 @@ public class SystemApiController {
* @param selectSql
* @return
*/
- @GetMapping("/sys/api/dictTableWhiteListCheckBySql")
+ @GetMapping("/dictTableWhiteListCheckBySql")
public boolean dictTableWhiteListCheckBySql(@RequestParam("selectSql") String selectSql) {
return sysBaseApi.dictTableWhiteListCheckBySql(selectSql);
}
@@ -923,10 +915,10 @@ public class SystemApiController {
* @param fields 如果传的是dictCode,则该参数必须传null
* @return
*/
- @GetMapping("/sys/api/dictTableWhiteListCheckByDict")
+ @GetMapping("/dictTableWhiteListCheckByDict")
public boolean dictTableWhiteListCheckByDict(
@RequestParam("tableOrDictCode") String tableOrDictCode,
- @RequestParam(value = "fields", required = false) String[] fields
+ @RequestParam(value = "fields", required = false) String... fields
) {
return sysBaseApi.dictTableWhiteListCheckByDict(tableOrDictCode, fields);
}
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java
index 48fc3107..ff4f6c13 100644
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java
@@ -72,7 +72,7 @@ public class LoginController {
@ApiOperation("登录接口")
@RequestMapping(value = "/login", method = RequestMethod.POST)
- public Result login(@RequestBody SysLoginModel sysLoginModel){
+ public Result login(@RequestBody SysLoginModel sysLoginModel, HttpServletRequest request){
Result result = new Result();
String username = sysLoginModel.getUsername();
String password = sysLoginModel.getPassword();
@@ -132,7 +132,7 @@ public class LoginController {
}
//用户登录信息
- userInfo(sysUser, result);
+ userInfo(sysUser, result, request);
//update-begin--Author:liusq Date:20210126 for:登录成功,删除redis中的验证码
redisUtil.del(realKey);
//update-begin--Author:liusq Date:20210126 for:登录成功,删除redis中的验证码
@@ -158,10 +158,10 @@ public class LoginController {
JSONObject obj=new JSONObject();
//update-begin---author:scott ---date:2022-06-20 for:vue3前端,支持自定义首页-----------
- String version = request.getHeader(CommonConstant.VERSION);
+ String vue3Version = request.getHeader(CommonConstant.VERSION);
//update-begin---author:liusq ---date:2022-06-29 for:接口返回值修改,同步修改这里的判断逻辑-----------
- SysRoleIndex roleIndex = sysUserService.getDynamicIndexByUserRole(username, version);
- if (oConvertUtils.isNotEmpty(version) && roleIndex != null && oConvertUtils.isNotEmpty(roleIndex.getUrl())) {
+ SysRoleIndex roleIndex = sysUserService.getDynamicIndexByUserRole(username, vue3Version);
+ if (oConvertUtils.isNotEmpty(vue3Version) && roleIndex != null && oConvertUtils.isNotEmpty(roleIndex.getUrl())) {
String homePath = roleIndex.getUrl();
if (!homePath.startsWith(SymbolConstant.SINGLE_SLASH)) {
homePath = SymbolConstant.SINGLE_SLASH + homePath;
@@ -173,6 +173,7 @@ public class LoginController {
obj.put("userInfo",sysUser);
obj.put("sysAllDictItems", sysDictService.queryAllDictItems());
+
result.setResult(obj);
result.success("");
}
@@ -397,7 +398,7 @@ public class LoginController {
*/
@ApiOperation("手机号登录接口")
@PostMapping("/phoneLogin")
- public Result phoneLogin(@RequestBody JSONObject jsonObject) {
+ public Result phoneLogin(@RequestBody JSONObject jsonObject, HttpServletRequest request) {
Result result = new Result();
String phone = jsonObject.getString("mobile");
//update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户
@@ -427,7 +428,7 @@ public class LoginController {
return result;
}
//用户信息
- userInfo(sysUser, result);
+ userInfo(sysUser, result, request);
//添加日志
baseCommonService.addLog("用户名: " + sysUser.getUsername() + ",登录成功!", CommonConstant.LOG_TYPE_1, null);
@@ -442,7 +443,7 @@ public class LoginController {
* @param result
* @return
*/
- private Result userInfo(SysUser sysUser, Result result) {
+ private Result userInfo(SysUser sysUser, Result result, HttpServletRequest request) {
String username = sysUser.getUsername();
String syspassword = sysUser.getPassword();
// 获取用户部门信息
@@ -482,7 +483,15 @@ public class LoginController {
// update-end--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去
obj.put("multi_depart", 2);
}
- obj.put("sysAllDictItems", sysDictService.queryAllDictItems());
+
+ //update-begin---author:scott ---date:2024-01-05 for:【QQYUN-7802】前端在登录时加载了两次数据字典,建议优化下,避免数据字典太多时可能产生的性能问题 #956---
+ // login接口,在vue3前端下不加载字典数据,vue2下加载字典
+ String vue3Version = request.getHeader(CommonConstant.VERSION);
+ if(oConvertUtils.isEmpty(vue3Version)){
+ obj.put("sysAllDictItems", sysDictService.queryAllDictItems());
+ }
+ //end-begin---author:scott ---date:2024-01-05 for:【QQYUN-7802】前端在登录时加载了两次数据字典,建议优化下,避免数据字典太多时可能产生的性能问题 #956---
+
result.setResult(obj);
result.success("登录成功");
return result;
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
index 29c5a9e2..c9e2b813 100644
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
@@ -1428,7 +1428,7 @@ public class SysUserController {
//------------------------------------------------------------------------------------------------
//是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】
if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
- String tenantId = TokenUtils.getTenantIdByRequest(request);
+ String tenantId = oConvertUtils.getString(TokenUtils.getTenantIdByRequest(request),"-1");
//update-begin---author:wangshuai ---date:20221223 for:[QQYUN-3371]租户逻辑改造,改成关系表------------
List userIds = userTenantService.getUserIdsByTenantId(Integer.valueOf(tenantId));
if (oConvertUtils.listIsNotEmpty(userIds)) {
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java
index 9079338c..416c36a2 100644
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java
@@ -14,6 +14,7 @@ import org.jeecg.common.constant.SymbolConstant;
import org.jeecg.common.constant.enums.MessageTypeEnum;
import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.TokenUtils;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.config.mybatis.MybatisPlusSaasConfig;
import org.jeecg.modules.system.entity.SysThirdAccount;
@@ -22,6 +23,8 @@ import org.jeecg.modules.system.service.ISysThirdAccountService;
import org.jeecg.modules.system.service.ISysThirdAppConfigService;
import org.jeecg.modules.system.service.impl.ThirdAppDingtalkServiceImpl;
import org.jeecg.modules.system.service.impl.ThirdAppWechatEnterpriseServiceImpl;
+import org.jeecg.modules.system.vo.thirdapp.JwSysUserDepartVo;
+import org.jeecg.modules.system.vo.thirdapp.JwUserDepartVo;
import org.jeecg.modules.system.vo.thirdapp.SyncInfoVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -518,4 +521,46 @@ public class ThirdAppController {
return Result.ok("解绑成功");
}
//========================end 应用低代码账号设置第三方账号绑定 ================================
+
+ /**
+ * 获取企业微信绑定的用户信息
+ * @param request
+ * @return
+ */
+ @GetMapping("/getThirdUserByWechat")
+ public Result getThirdUserByWechat(HttpServletRequest request){
+ //获取企业微信配置
+ Integer tenantId = oConvertUtils.getInt(TokenUtils.getTenantIdByRequest(request),0);
+ SysThirdAppConfig config = appConfigService.getThirdConfigByThirdType(tenantId, MessageTypeEnum.QYWX.getType());
+ if (null != config) {
+ JwSysUserDepartVo list = wechatEnterpriseService.getThirdUserByWechat(tenantId);
+ return Result.ok(list);
+ }
+ return Result.error("企业微信尚未配置,请配置企业微信");
+ }
+
+ /**
+ * 同步企业微信部门和用户到本地
+ * @param jwUserDepartJson
+ * @param request
+ * @return
+ */
+ @GetMapping("/sync/wechatEnterprise/departAndUser/toLocal")
+ public Result syncWechatEnterpriseDepartAndUserToLocal(@RequestParam(name = "jwUserDepartJson") String jwUserDepartJson,HttpServletRequest request){
+ int tenantId = oConvertUtils.getInt(TokenUtils.getTenantIdByRequest(request), 0);
+ SyncInfoVo syncInfoVo = wechatEnterpriseService.syncWechatEnterpriseDepartAndUserToLocal(jwUserDepartJson,tenantId);
+ return Result.ok(syncInfoVo);
+ }
+
+ /**
+ * 查询被绑定的企业微信用户
+ * @param request
+ * @return
+ */
+ @GetMapping("/getThirdUserBindByWechat")
+ public Result> getThirdUserBindByWechat(HttpServletRequest request){
+ int tenantId = oConvertUtils.getInt(TokenUtils.getTenantIdByRequest(request), 0);
+ List jwSysUserDepartVos = wechatEnterpriseService.getThirdUserBindByWechat(tenantId);
+ return Result.ok(jwSysUserDepartVos);
+ }
}
diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml b/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml
index 4f7595f6..720c4437 100644
--- a/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml
+++ b/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml
@@ -268,6 +268,7 @@ cas:
#Mybatis输出sql日志
logging:
level:
+ org.flywaydb: debug
org.jeecg.modules.system.mapper: info
#swagger
knife4j:
diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml b/jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml
index 530144bc..9aa6f4e1 100644
--- a/jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml
+++ b/jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml
@@ -23,7 +23,7 @@ spring:
# flyway配置
flyway:
# 是否启用flyway
- enabled: true
+ enabled: false
# 编码格式,默认UTF-8
encoding: UTF-8
# 迁移sql脚本文件存放路径,官方默认db/migration
@@ -134,7 +134,7 @@ spring:
# 初始化大小,最小,最大
initial-size: 5
min-idle: 5
- maxActive: 20
+ maxActive: 1000
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/README.md b/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/README.md
new file mode 100644
index 00000000..91035682
--- /dev/null
+++ b/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/README.md
@@ -0,0 +1,4 @@
+# 命名规范
+V[年月日]_[序号]__[模块名缩写]_[操作类型]_[业务描述].sql
+例如:
+V20240104_1__easyoa_add_field_attendance.sql