From f2ad1e4dd40036cc841e16382dc4d087a937b5ae Mon Sep 17 00:00:00 2001 From: nies Date: Wed, 11 May 2022 18:46:53 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=AF=86=E7=A0=81=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E5=AF=86=E7=A0=81=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/iservice/busi/ISysUserPasswordService.java | 2 +- .../busi/SysUserSavePasswordService.java | 5 ++-- .../core/apiservice/util/SysUserPasswordUtil.java | 35 ++++++++++++++++------ 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserPasswordService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserPasswordService.java index e8822d5..5d4fbb6 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserPasswordService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserPasswordService.java @@ -37,7 +37,7 @@ public interface ISysUserPasswordService extends ICrudService { void updatePasswordWizoutSession(String loginName, String password, String newPwd); @ApiOperation(value = "根据密码反查") - public List findPasswordByPassword(String password); + public List findPasswordByPassword(String password,Long userId); /** * 修改密码,根据密码id,和新密码 diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserSavePasswordService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserSavePasswordService.java index f801065..479097a 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserSavePasswordService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserSavePasswordService.java @@ -57,7 +57,7 @@ public class SysUserSavePasswordService extends CrudService imp SysUserPassword userPassword = userPasswordRDao.getById(user.getUserLoginPasswordId()); ValidatorBean.checkNotNull(userPassword, "不存在的用户密码信息"); - if (StringUtils.equals(userPassword.getUserPassword(), password)) { + if (!StringUtils.equals(userPassword.getUserPassword(), SysUserPasswordUtil.encoder(password))) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode()) @@ -172,13 +172,14 @@ public class SysUserSavePasswordService extends CrudService imp } @Override - public List findPasswordByPassword(String password) { + public List findPasswordByPassword(String password,Long userId) { List passwordList = new ArrayList<>(); if(StringUtils.isBlank(password)){ return passwordList; } DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); DdlPreparedPack.getStringEqualPack(password,"userPassword",ddlPackBean); + DdlPreparedPack.getNumEqualPack(userId,"userId",ddlPackBean); return userPasswordRDao.findByHqlWhere(ddlPackBean); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/SysUserPasswordUtil.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/SysUserPasswordUtil.java index 21328ec..3ff0371 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/SysUserPasswordUtil.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/SysUserPasswordUtil.java @@ -144,7 +144,7 @@ public class SysUserPasswordUtil { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode()) - .setErrorDetail("长度不够" + length + "位") + .setErrorDetail("密码长度不够" + length + "位") .setErrorSolution("请重新输入") .build(); } @@ -173,7 +173,7 @@ public class SysUserPasswordUtil { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode()) - .setErrorDetail("必须包含大写英文") + .setErrorDetail("密码必须包含大写英文") .setErrorSolution("请重新输入") .build(); } @@ -203,7 +203,7 @@ public class SysUserPasswordUtil { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode()) - .setErrorDetail("必须包含小写英文") + .setErrorDetail("密码必须包含小写英文") .setErrorSolution("请重新输入") .build(); } @@ -233,7 +233,7 @@ public class SysUserPasswordUtil { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode()) - .setErrorDetail("必须包含数字") + .setErrorDetail("密码必须包含数字") .setErrorSolution("请重新输入") .build(); } @@ -264,7 +264,7 @@ public class SysUserPasswordUtil { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode()) - .setErrorDetail("必须包含特殊字") + .setErrorDetail("密码必须包含特殊字符") .setErrorSolution("请重新输入") .build(); } @@ -284,7 +284,7 @@ public class SysUserPasswordUtil { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode()) - .setErrorDetail("必须包含中文字符") + .setErrorDetail("密码必须包含中文字符") .setErrorSolution("请重新输入") .build(); } @@ -306,8 +306,8 @@ public class SysUserPasswordUtil { // List passwords = userPasswordService.findAllByBean(userPassword); - //todo: 如果密码数据太多可以考虑建立以Creat eDatetime 相关的索引,ORDER BY create_date_time DESC ,查出最近的一条就行 - List passwords = userPasswordService.findPasswordByPassword(EncryptTool.hexMD5(user.getUserLoginPassword())); + //修改为查询这个账号最近的密码是否重复 + List passwords = userPasswordService.findPasswordByPassword(EncryptTool.hexMD5(user.getUserLoginPassword()),user.getId()); int lastDay = Integer.MAX_VALUE; if (CollectionUtils.isNotEmpty(passwords)) { @@ -324,7 +324,7 @@ public class SysUserPasswordUtil { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode()) - .setErrorDetail("请勿使用重复密码") + .setErrorDetail(String.format("最近%s天内,请勿使用重复密码",num)) .setErrorSolution("请重新输入") .build(); } @@ -409,6 +409,23 @@ public class SysUserPasswordUtil { if (!result.isSuccess()) { return result; } + + //登录时是否检查用户密码是否符合安全规则 + try { + int isLoginCheckPassword = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_LOGIN_CHECK_PASSWORD,CommonConstWords.CONFIG_LOGIN_CHECK_PASSWORD_DEFAULT); + if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == isLoginCheckPassword){ + checkPasswordSave(user); + } + result = ResultBean.success(); + } catch (Exception e) { + LOGGER.error("检查用户密码是否符合安全规则发生异常:",e); + result = ResultBean.fail() + .setCode(ImppExceptionEnum.LOGIN_EXCEPTION_PWD_RULE_CHANGE.getCode()) + .setErrorMsg(ImppExceptionEnum.LOGIN_EXCEPTION_PWD_RULE_CHANGE.getDescription());; + } + if (!result.isSuccess()) { + return result; + } } return ResultBean.success(); } From a34dd143d2db555761ac1cd11c768f554f3b142e Mon Sep 17 00:00:00 2001 From: nies Date: Mon, 16 May 2022 13:03:36 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/busi/PersonnelController.java | 19 ++++++++++++++----- .../controller/busi/SysEnumController.java | 12 ++++++++++++ .../busi/SysUserSavePasswordService.java | 1 + .../core/apiservice/util/SysUserPasswordUtil.java | 21 ++++++++++++++++++++- 4 files changed, 47 insertions(+), 6 deletions(-) diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java index 2b41b1f..08e000b 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java @@ -158,6 +158,11 @@ public class PersonnelController extends CoreBaseController { user.setOrganizeCode(userOrganize.getOrganizeCode()); user.setUserLoginLastDateTime(TimeTool.getNowTime(true)); user.setUserInfoId(info.getId()); + if (CommonEnumUtil.USER_ACCOUNT_TYPE.valueOfEnum(user.getUserAccountType()) != null){ + user.setUserAccountType(CommonEnumUtil.USER_ACCOUNT_TYPE.valueOfEnum(user.getUserAccountType()).getValue()); + }else{ + user.setUserAccountType(CommonEnumUtil.USER_ACCOUNT_TYPE.SYSTEM.getValue()); + } //松下需要创建的新用户 第一次登陆系统就要重置密码 // user.setUserPasswordLastModifyTime(TimeTool.getNowTime(true)); refreshSysUserPassword(user); @@ -264,11 +269,13 @@ public class PersonnelController extends CoreBaseController { sysUser.setUserEmpNo(userInfo.getUserEmpNo()); sysUser.setAuthPlatform(user.getAuthPlatform()); - if (StringUtils.isBlank(user.getUserAccountType()) || CommonEnumUtil.USER_ACCOUNT_TYPE.valueOfEnum(user.getUserAccountType()) == null) { - sysUser.setUserAccountType(String.valueOf(CommonEnumUtil.USER_ACCOUNT_TYPE.SYSTEM.getValue())); - } else { - sysUser.setUserAccountType(user.getUserAccountType()); - } +// if (StringUtils.isBlank(user.getUserAccountType()) || CommonEnumUtil.USER_ACCOUNT_TYPE.valueOfEnum(user.getUserAccountType()) == null) { +// sysUser.setUserAccountType(String.valueOf(CommonEnumUtil.USER_ACCOUNT_TYPE.SYSTEM.getValue())); +// } else { +// sysUser.setUserAccountType(user.getUserAccountType()); +// } + + sysUser.setUserAccountType(user.getUserAccountType()); // 关系 刷新 refreshRef(sysUser, userInfo, model); @@ -307,6 +314,7 @@ public class PersonnelController extends CoreBaseController { user.setDepartmentNameRdd(userDepartment.getName()); user.setOrganizeId(userOrganize.getId()); user.setOrganizeNameRdd(userOrganize.getName()); + user.setUserAccountType(user.getUserAccountType()); // 关系 刷新 refreshRef(user, null, model); @@ -770,6 +778,7 @@ public class PersonnelController extends CoreBaseController { user.setUserEmail(model.getUserEmail()); user.setUserPhone(model.getUserPhone()); user.setLanguageCode(model.getUserLanguageCode()); + user.setUserAccountType(model.getUserAccountType()); if (!StringUtils.isAnyBlank(model.getUserLoginPassword())) { // 使用新密码 user.setUserLoginPassword(EncryptTool.hexMD5(model.getUserLoginPassword())); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java index 033a32c..88230c6 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java @@ -115,6 +115,18 @@ public class SysEnumController extends CoreBaseController { } /** + * 用户账号类型 + * + * @return 处理结果 + */ + @GetMapping("/user-account-type") + @ApiOperation(value = "用户账号类型", notes = "用户账号类型") + public ResultBean getUserAccountType() { + return new ResultBean(true, "操作成功", + LocaleUtils.getEnumLocaleResValuesToList(CommonEnumUtil.USER_ACCOUNT_TYPE.values())); + } + + /** * 日志等级 * * @return 处理结果 diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserSavePasswordService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserSavePasswordService.java index 479097a..844c99d 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserSavePasswordService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserSavePasswordService.java @@ -147,6 +147,7 @@ public class SysUserSavePasswordService extends CrudService imp user.setUserLoginPassword(newPwd); userPasswordUtil.checkPasswordSave(user); + //当前方法是不需要session,是在登陆前弹窗修改密码 //如果是首次登录修改密码,则设置登录次数为1 if(null == user.getUserLoginNum() || user.getUserLoginNum() == 0){ userService.updateUserLoginNum(user.getId(),1); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/SysUserPasswordUtil.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/SysUserPasswordUtil.java index 3ff0371..d998526 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/SysUserPasswordUtil.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/SysUserPasswordUtil.java @@ -113,6 +113,25 @@ public class SysUserPasswordUtil { .build(); } + /** + * 登录时校验的密码安全策略 + * @param user + */ + public void checkPasswordLogin(SysUser user) { + /* 密码 长度校验 */ + checkPasswordLength(user.getUserLoginPassword()); + /* 密码 大写字母校验 */ + checkPasswordUppercaseEnglish(user.getUserLoginPassword()); + /* 密码 小写字母校验 */ + checkPasswordlowerEnglish(user.getUserLoginPassword()); + /* 密码 数字校验 */ + checkPasswordNumber(user.getUserLoginPassword()); + /* 密码 特殊字符校验 */ + checkPasswordSpecial(user.getUserLoginPassword()); + /* 密码 密码正则校验 */ + checkPasswordRepeat(user.getUserLoginPassword()); + } + /******************************************** 用户保存密码检查 ********************************************/ public void checkPasswordSave(SysUser user) { @@ -414,7 +433,7 @@ public class SysUserPasswordUtil { try { int isLoginCheckPassword = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_LOGIN_CHECK_PASSWORD,CommonConstWords.CONFIG_LOGIN_CHECK_PASSWORD_DEFAULT); if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == isLoginCheckPassword){ - checkPasswordSave(user); + checkPasswordLogin(user); } result = ResultBean.success(); } catch (Exception e) { From 3250c79ee357625712297141d0f95c5605870faa Mon Sep 17 00:00:00 2001 From: nies Date: Wed, 18 May 2022 10:23:47 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=92=8C=E6=A0=B9=E6=8D=AE=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=90=8D=E5=8F=91=E9=80=81=E9=92=89=E9=92=89=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/api/iservice/busi/ISysUserService.java | 27 ++++++++ .../controller/base/WhiteController.java | 39 ++++++++++- .../controller/busi/SysUserController.java | 37 +++++++++++ .../serviceimpl/busi/SysUserService.java | 75 ++++++++++++++++------ 4 files changed, 157 insertions(+), 21 deletions(-) diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java index 90e3052..542b2ab 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java @@ -3,6 +3,8 @@ package cn.estsh.i3plus.core.api.iservice.busi; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.shirotoken.BaseToken; +import cn.estsh.i3plus.pojo.model.platform.AndonQueryUserModel; +import cn.estsh.i3plus.pojo.model.platform.AndonQueryUserResultModel; import cn.estsh.i3plus.pojo.platform.bean.*; import cn.estsh.impp.framework.boot.util.ResultBean; import io.swagger.annotations.ApiOperation; @@ -406,4 +408,29 @@ public interface ISysUserService { */ @ApiOperation(value = "获取用户菜单信息") void packUser(SysUser user); + + + /** + * 根据andon查询model查询用户信息 + * @param andonQueryUserModel + * @param pager + * @return + */ + @ApiOperation(value = "根据andon查询model查询用户信息") + ListPager findUserByAndonQueryUserModel(AndonQueryUserModel andonQueryUserModel, Pager pager); + + /** + * 转换sysUser to AndonQueryUserResultModel + * @param sysUserList + * @return + */ + List packAndonQueryUserResultModel(List sysUserList); + + /** + * 根据用户名列表批量查询用户 + * @param userLoginNamegenList + * @return + */ + @ApiOperation(value = "获取批量账号信息", notes = "查询用户信息-批量根据登录名称查询") + List findSysUserByLoginName(List userLoginNamegenList); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java index f2d6c05..a1a324b 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java @@ -62,6 +62,7 @@ import com.google.common.cache.CacheBuilder; import com.taobao.api.ApiException; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import jodd.util.StringUtil; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authc.*; import org.slf4j.Logger; @@ -1110,6 +1111,42 @@ public class WhiteController extends CoreBaseController { * @param dingSendBatchRequestModel * @return */ + @PostMapping(value = "/dingRobot/sendBatchRequestByUserLoginName") + @ApiOperation(value = "根据登录用户名 钉钉单聊机器人批量发送消息", notes = "根据登录用户名 钉钉单聊机器人批量发送消息") + public ResultBean singleRobotsendBatchRequestByUserLoginName(@RequestBody DingSendBatchRequestModel dingSendBatchRequestModel ) { + if(ObjectUtils.isEmpty(dingSendBatchRequestModel)){ + return ResultBean.fail("消息内容不能为空"); + } + if(ObjectUtils.isEmpty(dingSendBatchRequestModel.getUserLoginNameList())){ + return ResultBean.fail("登录用户名不能为空"); + } + List userLoginNameList = dingSendBatchRequestModel.getUserLoginNameList(); + userLoginNameList = userLoginNameList.stream().filter(StringUtils::isNotBlank).distinct().collect(Collectors.toList()); + if(ObjectUtils.isEmpty(userLoginNameList)){ + return ResultBean.fail("登录用户名不能为空"); + } + List userList = userService.findSysUserByLoginName(userLoginNameList); + if(ObjectUtils.isEmpty(userList)){ + return ResultBean.fail("登录用户名没有对应的账号"); + } + List phoneNumberList =userList.stream().map(SysUser::getUserPhone).filter(StringUtils::isNotBlank).distinct().collect(Collectors.toList()); + if(ObjectUtils.isEmpty(userList)){ + return ResultBean.fail("登录用户名没有对应的手机号"); + } + dingSendBatchRequestModel.setPhoneNumberList(phoneNumberList); + return singleRobotsendBatchRequest(dingSendBatchRequestModel); + + } + + /** + * 批量发送的最大值 + */ + private final int MAX_DINGROBOT_SEND_NUM = 1000; + /** + * 钉钉单聊机器人批量发送消息 + * @param dingSendBatchRequestModel + * @return + */ @PostMapping(value = "/dingRobot/sendBatchRequest") @ApiOperation(value = "根据手机号 钉钉单聊机器人批量发送消息", notes = "根据手机号 钉钉单聊机器人批量发送消息") public ResultBean singleRobotsendBatchRequest(@RequestBody DingSendBatchRequestModel dingSendBatchRequestModel ) { @@ -1125,7 +1162,7 @@ public class WhiteController extends CoreBaseController { if (ObjectUtils.isEmpty(phoneNumberList)) { return ResultBean.fail("手机号不能为空"); } - phoneNumberList = phoneNumberList.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList()); + phoneNumberList = phoneNumberList.stream().filter(StringUtils::isNotBlank).distinct().collect(Collectors.toList()); if (ObjectUtils.isEmpty(phoneNumberList)) { return ResultBean.fail("手机号不能为空"); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java index facbd68..cce9d99 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java @@ -23,6 +23,8 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.model.platform.AccountExportModel; +import cn.estsh.i3plus.pojo.model.platform.AndonQueryUserModel; +import cn.estsh.i3plus.pojo.model.platform.AndonQueryUserResultModel; import cn.estsh.i3plus.pojo.platform.bean.*; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; @@ -35,6 +37,7 @@ import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.io.FileUtils; +import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.text.StrBuilder; import org.apache.commons.lang3.RandomStringUtils; import org.slf4j.Logger; @@ -872,4 +875,38 @@ public class SysUserController extends CoreBaseController { } } + @GetMapping(value = "/query-user-andonQueryUserModel") + @ApiOperation(value = "根据andonQueryUserModel查询系统用户") + public ResultBean queryUserByAndonQueryUserModel(AndonQueryUserModel andonQueryUserModel, Pager pager) { + try { + ValidatorBean.checkNotNull(andonQueryUserModel); + if (StringUtils.isBlank(andonQueryUserModel.getOrganizeCode())) { + andonQueryUserModel.setOrganizeCode(AuthUtil.getOrganizeCode()); + } + if (ObjectUtils.isEmpty(pager)) { + pager = Pager.defaultPager(); + } + ListPager resultList = sysUserService.findUserByAndonQueryUserModel(andonQueryUserModel, pager); + return ResultBean.success("操作成功").setListPager(resultList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + + @GetMapping(value = "/query-user-by-org") + @ApiOperation(value = "根据orgCode查询Sysuser用户") + public ResultBean queryUserByOrg(String organizeCode) { + try { + List sysUsers = sysUserService.querySysUserByOrganizeCode(organizeCode); + return ResultBean.success("操作成功").setResultList(sysUserService.packAndonQueryUserResultModel(sysUsers)).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java index 9b1e223..cea00bb 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java @@ -19,6 +19,8 @@ import cn.estsh.i3plus.pojo.base.shirotoken.SaAdminToken; import cn.estsh.i3plus.pojo.base.shirotoken.UserToken; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.HqlPack; +import cn.estsh.i3plus.pojo.model.platform.AndonQueryUserModel; +import cn.estsh.i3plus.pojo.model.platform.AndonQueryUserResultModel; import cn.estsh.i3plus.pojo.platform.bean.*; import cn.estsh.i3plus.pojo.platform.repository.SysLogUserLoginRepository; import cn.estsh.i3plus.pojo.platform.repository.SysRefUserDepartmentRepository; @@ -157,11 +159,10 @@ public class SysUserService implements ISysUserService { AuthUtil.setSessionUser(sessionUser); AuthUtil.online(sessionUser); resultBean = ResultBean.success().setResultObject(sessionUser); - }catch (ImppBusiException e) { + } catch (ImppBusiException e) { e.printStackTrace(); resultBean = ResultBean.fail(e); - } - catch (CredentialsException e) { + } catch (CredentialsException e) { // 用户名或密码错误 e.printStackTrace(); resultBean = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_NAME); @@ -173,7 +174,7 @@ public class SysUserService implements ISysUserService { // 用户信息不存在 e.printStackTrace(); resultBean = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_INFO_NULL); - }catch (AuthenticationException e) { + } catch (AuthenticationException e) { // 系统异常 resultBean = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_PASSWORD.getDescription()).setCode(ImppExceptionEnum.LOGIN_EXCEPTION_USER_PASSWORD.getCode()); if (e.getCause() != null) { @@ -187,8 +188,7 @@ public class SysUserService implements ISysUserService { resultBean.setErrorMsg(e.getMessage()); } LOGGER.warn("Impp业务异常AuthenticationException 登录失败 ", e); - } - catch (Exception e) { + } catch (Exception e) { e.printStackTrace(); resultBean = ResultBean.fail(e); if (e.getCause() != null) { @@ -198,7 +198,7 @@ public class SysUserService implements ISysUserService { } } finally { //如果登录成功,刷新登录成功次数和上次登录时间 - try{ + try { if (resultBean.isSuccess()) { this.refreshUserLoginInformation(user.getId()); } else { @@ -207,8 +207,7 @@ public class SysUserService implements ISysUserService { this.refreshUserLoginDateTime(user.getId(), user.getUserInfoId()); } } - } - catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } @@ -265,9 +264,9 @@ public class SysUserService implements ISysUserService { //判断条件,如果有authPlatform限制,则进行校验,没有,按照原有登录 //authPlatform限制,如果不包含平台权限,则不能登录,这里可以扩展多个登录权限限制。 String authPlatform = user.getAuthPlatform(); - if (Strings.isNotBlank(authPlatform)){ + if (Strings.isNotBlank(authPlatform)) { List authPlatforms = Arrays.stream(authPlatform.split(",")).map(Integer::parseInt).collect(Collectors.toList()); - if (!authPlatforms.contains(loginPlatform)){ + if (!authPlatforms.contains(loginPlatform)) { throw ImppExceptionBuilder.newInstance().setErrorDetail("此账号没有权限登录此平台,请联系管理员!").build(); } } @@ -386,19 +385,19 @@ public class SysUserService implements ISysUserService { @Override public void updateSysUserPwdByLoginName(String loginName, String password) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); - DdlPreparedPack.getStringEqualPack(loginName,"userLoginName",ddlPackBean); + DdlPreparedPack.getStringEqualPack(loginName, "userLoginName", ddlPackBean); List sysUsers = userRDao.findByHqlWhere(ddlPackBean); - if (Objects.isNull(sysUsers)){ + if (Objects.isNull(sysUsers)) { throw ImppExceptionBuilder.newInstance().setErrorDetail("修改密码失败,账号在系统中不存在!").build(); } - if (sysUsers.size() > 1){ + if (sysUsers.size() > 1) { throw ImppExceptionBuilder.newInstance().setErrorDetail("登录名不唯一,修改失败!").build(); } SysUser sysUser = sysUsers.get(0); Long pwdId = sysUser.getUserLoginPasswordId(); - userPasswordService.updatePasswordByPwdIdAndNewPwd(pwdId,password); + userPasswordService.updatePasswordByPwdIdAndNewPwd(pwdId, password); } @@ -693,7 +692,7 @@ public class SysUserService implements ISysUserService { .collect(Collectors.toList()); if (CollectionUtils.isEmpty(distinctUserIds)) { - return null; + return new ArrayList(); } DdlPackBean packBean = DdlPackBean.getDdlPackBean(); DdlPreparedPack.getInPackList(distinctUserIds, "id", packBean); @@ -740,15 +739,15 @@ public class SysUserService implements ISysUserService { @Override public SysUser getSysUserByLoginNameAndEmail(String loginName, String email) { - LOGGER.debug("平台用户 SYS_USER find By Login Name :{},and email:{}", loginName,email); + LOGGER.debug("平台用户 SYS_USER find By Login Name :{},and email:{}", loginName, email); SysUser sysUser = userRDao.getByProperty(new String[]{"userLoginName", "isValid", "isDeleted"}, new Object[]{loginName, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()}); - if (!Objects.isNull(sysUser)){ + if (!Objects.isNull(sysUser)) { String emails = sysUser.getUserEmail(); - if (Strings.isNotBlank(emails)){ + if (Strings.isNotBlank(emails)) { List emailList = Arrays.asList(emails.split(",")); - if (emailList.contains(email)){ + if (emailList.contains(email)) { return sysUser; } } @@ -1027,6 +1026,42 @@ public class SysUserService implements ISysUserService { } + @Override + public ListPager findUserByAndonQueryUserModel(AndonQueryUserModel andonQueryUserModel, Pager pager) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(andonQueryUserModel.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(andonQueryUserModel.getOrganizeCode(), "organizeCode", ddlPackBean); + DdlPreparedPack.getStringLikerPack(andonQueryUserModel.getDepartment(), "departmentNameRdd", ddlPackBean); + DdlPreparedPack.getStringLikerPack(andonQueryUserModel.getUserLoginName(), "userLoginName", ddlPackBean); + DdlPreparedPack.getStringLikerPack(andonQueryUserModel.getUserName(), "userName", ddlPackBean); + pager = PagerHelper.getPager(pager, userRDao.findByHqlWhereCount(ddlPackBean)); + return new ListPager(packAndonQueryUserResultModel(userRDao.findByHqlWherePage(ddlPackBean, pager)), pager); + } + + @Override + public List packAndonQueryUserResultModel(List sysUserList) { + if (ObjectUtils.isEmpty(sysUserList)) { + return new ArrayList<>(); + } + + return sysUserList.stream().map(el -> { + AndonQueryUserResultModel andonQueryUserModel = new AndonQueryUserResultModel(); + andonQueryUserModel.setDepartment(el.getDepartmentNameRdd()); + andonQueryUserModel.setLoginName(el.getUserLoginName()); + andonQueryUserModel.setUserId(el.getId()); + andonQueryUserModel.setUserInfoId(el.getUserInfoId()); + andonQueryUserModel.setUserName(el.getUserName()); + return andonQueryUserModel; + }).collect(Collectors.toList()); + } + + @Override + public List findSysUserByLoginName(List userLoginNamegenList) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getInPackList(userLoginNamegenList,"userLoginName",ddlPackBean); + return userRDao.findByHqlWhere(ddlPackBean); + } + + /** * 账号数据排序 * 创建时间 角色升序