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