From 30822e0ccb2110f745481876688d12f47dcede35 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Wed, 23 Mar 2022 16:22:54 +0800 Subject: [PATCH 01/10] =?UTF-8?q?sweb=E7=BB=9F=E4=B8=80=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/base/WhiteController.java | 6 ++++++ .../controller/busi/PersonnelController.java | 1 + .../serviceimpl/base/SystemLoginService.java | 14 +++++++----- .../serviceimpl/busi/SysUserService.java | 25 +++++++++++++++------- 4 files changed, 33 insertions(+), 13 deletions(-) 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 349e5b5..db6f1bf 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 @@ -727,6 +727,12 @@ public class WhiteController extends CoreBaseController { Arrays.asList(CommonEnumUtil.LOG_LOGIN_PLATFORM.values())); } + @GetMapping("/sys-auth-platform") + @ApiOperation(value = "登录授权标识", notes = "登录授权标识") + public ResultBean getAuthPlatform() { + return new ResultBean(true, "操作成功", + Arrays.asList(CommonEnumUtil.AUTH_PLATFORM.values())); + } @GetMapping("/sys-organize/list") @ApiOperation(value = "获取全部组织", notes = "获取全部组织") 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 4e182e4..d274658 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 @@ -262,6 +262,7 @@ public class PersonnelController extends CoreBaseController { sysUser.setOrganizeNameRdd(userOrganize.getName()); sysUser.setUserName(userInfo.getName()); sysUser.setUserEmpNo(userInfo.getUserEmpNo()); + sysUser.setAuthPlatform(user.getAuthPlatform()); // 关系 刷新 refreshRef(sysUser, userInfo, model); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java index 42f8b40..267728a 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java @@ -190,12 +190,16 @@ public class SystemLoginService implements ISystemLoginService { */ @Override public CommonEnumUtil.LOG_LOGIN_PLATFORM getLoginPlatform(HttpServletRequest request) { - String value = CookieTool.getCookieValue(request, CommonConstWords.SESSION_LOGIN_PLATFORM); - if (StringUtils.isBlank(value)) { - value = CommonEnumUtil.LOG_LOGIN_PLATFORM.PC_IMPP_CORE.getValue() + ""; + String platformValue; + platformValue = request.getHeader(CommonConstWords.SESSION_LOGIN_PLATFORM); + if (StringUtils.isBlank(platformValue)){ + platformValue = CookieTool.getCookieValue(request, CommonConstWords.SESSION_LOGIN_PLATFORM); + } + if (StringUtils.isBlank(platformValue)) { + platformValue = CommonEnumUtil.LOG_LOGIN_PLATFORM.PC_IMPP_CORE.getValue() + ""; } else { try { - Integer.parseInt(value); + Integer.parseInt(platformValue); } catch (Exception e) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) @@ -205,7 +209,7 @@ public class SystemLoginService implements ISystemLoginService { .build(); } } - CommonEnumUtil.LOG_LOGIN_PLATFORM platform = CommonEnumUtil.LOG_LOGIN_PLATFORM.valueOf(Integer.parseInt(value)); + CommonEnumUtil.LOG_LOGIN_PLATFORM platform = CommonEnumUtil.LOG_LOGIN_PLATFORM.valueOf(Integer.parseInt(platformValue)); return platform == null ? CommonEnumUtil.LOG_LOGIN_PLATFORM.PC_IMPP_CORE : platform; } 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 ef84ff5..2d7eb8c 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 @@ -34,6 +34,7 @@ import cn.estsh.impp.framework.boot.util.*; import io.swagger.annotations.ApiOperation; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.logging.log4j.util.Strings; import org.apache.shiro.authc.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -235,16 +236,24 @@ public class SysUserService implements ISysUserService { @Override public BaseToken getToken(String loginName, String password, String languageCode, Integer loginPlatform) { SysUser user = this.getSysUserByLoginName(loginName); - if (user != null) { - if (user.getUserType().equals(CommonEnumUtil.USER_TYPE.ADMIN.getValue())) { - return new AdminToken(loginName, password, languageCode, loginPlatform); - } else if (user.getUserType().equals(CommonEnumUtil.USER_TYPE.SA.getValue())) { - return new SaAdminToken(loginName, password, languageCode, loginPlatform); - } else { - return new UserToken(loginName, password, languageCode, loginPlatform); + //拦截没有权限的账号,供应商账号不能登录pc + loginPlatform = loginPlatform != null ? loginPlatform : CommonEnumUtil.LOG_LOGIN_PLATFORM.PC_IMPP_CORE.getValue(); + //判断条件,如果有authPlatform限制,则进行校验,没有,按照原有登录 + //authPlatform限制,如果不包含平台权限,则不能登录,这里可以扩展多个登录权限限制。 + String authPlatform = user.getAuthPlatform(); + if (Strings.isNotBlank(authPlatform)){ + List authPlatforms = Arrays.stream(authPlatform.split(",")).map(Integer::parseInt).collect(Collectors.toList()); + if (!authPlatforms.contains(loginPlatform)){ + throw ImppExceptionBuilder.newInstance().setErrorDetail("此账号没有权限登录此平台,请联系管理员!").build(); } + } + + if (user.getUserType().equals(CommonEnumUtil.USER_TYPE.ADMIN.getValue())) { + return new AdminToken(loginName, password, languageCode, loginPlatform); + } else if (user.getUserType().equals(CommonEnumUtil.USER_TYPE.SA.getValue())) { + return new SaAdminToken(loginName, password, languageCode, loginPlatform); } else { - throw new CredentialsException("用户不存在"); + return new UserToken(loginName, password, languageCode, loginPlatform); } } From d5c5437681280a7260666c8f8f224a2e36ebfd06 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Fri, 25 Mar 2022 15:34:52 +0800 Subject: [PATCH 02/10] =?UTF-8?q?sweb=E4=BE=9B=E5=BA=94=E5=95=86=E8=87=AA?= =?UTF-8?q?=E5=8A=A9=E4=BF=AE=E6=94=B9=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/iservice/busi/ISysUserPasswordService.java | 8 ++ .../core/api/iservice/busi/ISysUserService.java | 17 ++++ .../controller/base/WhiteController.java | 90 ++++++++++++++-------- .../busi/SysUserSavePasswordService.java | 12 +++ .../serviceimpl/busi/SysUserService.java | 27 +++++++ .../i3plus/core/apiservice/util/MailUtil.java | 23 ++++-- 6 files changed, 139 insertions(+), 38 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 ef0ae46..e8822d5 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 @@ -38,4 +38,12 @@ public interface ISysUserPasswordService extends ICrudService { @ApiOperation(value = "根据密码反查") public List findPasswordByPassword(String password); + + /** + * 修改密码,根据密码id,和新密码 + * @param pwdId + * @param newPwd + */ + @ApiOperation(value = "供应商忘记密码") + void updatePasswordByPwdIdAndNewPwd(Long pwdId,String newPwd); } 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 87a843e..90e3052 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 @@ -85,6 +85,14 @@ public interface ISysUserService { void updateSysUserPassword(Long userId, String password, String newPwd) throws Exception; /** + * 根据登录名修改密码,供应商已经通过验证码验证 + * @param loginName + * @param password + */ + @ApiOperation(value = "供应商修改密码",notes = "供应商修改密码") + void updateSysUserPwdByLoginName(String loginName,String password); + + /** * 刷新账号登录信息 * * @param userId @@ -259,6 +267,15 @@ public interface ISysUserService { SysUser getSysUserByLoginName(String loginName); /** + * 根据登录名+email获取账号信息 + * @param loginName + * @param email + * @return + */ + @ApiOperation(value = "获取账号信息",notes = "查询用户信息-根据登录名称+邮箱查询") + SysUser getSysUserByLoginNameAndEmail(String loginName,String email); + + /** * 根据手机号查询账号 * * @param email 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 db6f1bf..8f01ef5 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 @@ -5,6 +5,7 @@ import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService; import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginStrategyService; import cn.estsh.i3plus.core.api.iservice.busi.*; import cn.estsh.i3plus.core.apiservice.controller.busi.*; +import cn.estsh.i3plus.core.apiservice.util.MailUtil; import cn.estsh.i3plus.core.apiservice.util.SysUserPasswordUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; @@ -15,13 +16,18 @@ import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.pojo.base.annotation.AnnoIgnoreLog; -import cn.estsh.i3plus.pojo.base.bean.*; +import cn.estsh.i3plus.pojo.base.bean.BaseConstWords; +import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; +import cn.estsh.i3plus.pojo.base.bean.BaseThreadLocal; +import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; 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.common.CloudPagerModel; +import cn.estsh.i3plus.pojo.model.common.ImppEmail; import cn.estsh.i3plus.pojo.model.common.ImppSmsContent; +import cn.estsh.i3plus.pojo.model.common.UserModel; import cn.estsh.i3plus.pojo.model.license.ImppLicense; import cn.estsh.i3plus.pojo.model.platform.SysLoginModel; import cn.estsh.i3plus.pojo.model.platform.SysRoleModel; @@ -33,15 +39,9 @@ import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; -import cn.estsh.impp.framework.boot.fileservice.ImppFileService; import cn.estsh.impp.framework.boot.license.ImppLicenseTool; import cn.estsh.impp.framework.boot.license.serviceimpl.ImppLicenseDecoder; -import cn.estsh.impp.framework.boot.util.ImppRedis; -import cn.estsh.impp.framework.boot.util.LocaleUtils; -import cn.estsh.impp.framework.boot.util.RedisCacheTool; -import cn.estsh.impp.framework.boot.util.ResultBean; -import cn.estsh.impp.framework.boot.util.SpringContextsUtil; -import cn.estsh.impp.framework.boot.util.ValidatorBean; +import cn.estsh.impp.framework.boot.util.*; import com.alibaba.fastjson.JSONObject; import com.dingtalk.api.response.OapiV2UserGetResponse; import com.google.common.cache.Cache; @@ -49,42 +49,21 @@ import com.google.common.cache.CacheBuilder; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; -import org.apache.shiro.authc.AuthenticationException; -import org.apache.shiro.authc.CredentialsException; -import org.apache.shiro.authc.ExpiredCredentialsException; -import org.apache.shiro.authc.IncorrectCredentialsException; -import org.apache.shiro.authc.LockedAccountException; -import org.apache.shiro.authc.UnknownAccountException; +import org.apache.shiro.authc.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.ObjectUtils; -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.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.function.BiFunction; import java.util.stream.Collectors; -import java.util.stream.Stream; /** * @Description : @@ -107,6 +86,9 @@ public class WhiteController extends CoreBaseController { private SysUserInfoController sysUserInfoController; @Autowired + private ISysUserService sysUserService; + + @Autowired private ISysLocaleLanguageService sysLocaleLanguageService; @Autowired @@ -972,6 +954,50 @@ public class WhiteController extends CoreBaseController { return sysUserInfoController.querySysUserInfo(cloudPagerModel.getObj(), cloudPagerModel.getPager()); } + /** + * 根据登录名,邮箱获取用户账号信息 + * @param sysUser + * @return + */ + @PostMapping(value = "/user/query-user") + @ApiOperation(value = "根据条件查询单个用户信息",notes = "根据条件查询单个用户信息") + public ResultBean querySysUser(@RequestBody SysUser sysUser){ + ValidatorBean.checkNotNull(sysUser.getUserLoginName(),"用户登录名不能为空!"); + ValidatorBean.checkNotNull(sysUser.getUserEmail(),"用户email不能为空!"); + SysUser user = sysUserService.getSysUserByLoginNameAndEmail(sysUser.getUserLoginName(), sysUser.getUserEmail()); + return ResultBean.success("查询成功!").setResultObject(user); + } + + @PostMapping(value = "/sendEmail") + @ApiOperation(value = "无需登录,发送邮件") + public ResultBean sendEmail(@RequestBody ImppEmail imppEmail){ + ValidatorBean.checkNotNull(imppEmail.getContent(),"消息内容不能为空"); + ValidatorBean.checkNotNull(imppEmail.getEmail(),"email地址不能为空"); + try { + MailUtil mailUtil = new MailUtil(); + mailUtil.init(); + mailUtil.setContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.HTML.getDescription()); + mailUtil.setNick(imppEmail.getNick()); + mailUtil.setSubject(imppEmail.getSubject()); + mailUtil.setTo(imppEmail.getEmail()); + mailUtil.setBody(imppEmail.getContent()); + mailUtil.send(); + } catch (Exception e) { + LOGGER.error("发送邮件:{}失败:{}",imppEmail.getEmail(),e.getMessage()); + return ResultBean.fail("发送失败,请检查邮箱是否输入正确!"); + } + return ResultBean.success("验证码已发送!"); + } + + @PostMapping(value = "/update-vendor-pwd") + @ApiOperation(value = "忘记密码") + public ResultBean updateVendorPwd(@RequestBody UserModel userModel){ + ValidatorBean.checkNotNull(userModel.getLoginName(),"登录名不能为空!"); + ValidatorBean.checkNotNull(userModel.getPassword(),"密码不能为空!"); + sysUserService.updateSysUserPwdByLoginName(userModel.getLoginName(),userModel.getPassword()); + return ResultBean.success("修改成功!"); + } + @PostMapping("/sendSms") @ApiOperation("无需登录 发送短信") public ResultBean sendSms(@RequestBody ImppSmsContent imppSmsContent){ 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 7318cb8..f801065 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 @@ -181,4 +181,16 @@ public class SysUserSavePasswordService extends CrudService imp DdlPreparedPack.getStringEqualPack(password,"userPassword",ddlPackBean); return userPasswordRDao.findByHqlWhere(ddlPackBean); } + + @Override + public void updatePasswordByPwdIdAndNewPwd(Long pwdId, String newPwd) { + try { + SysUserPassword sup = userPasswordRDao.getById(pwdId); + sup.setUserPassword(SysUserPasswordUtil.encoder(newPwd)); + sup.setModifyDatetime(TimeTool.getNowTime(true)); + userPasswordRDao.update(sup); + } catch (Exception e) { + throw ImppExceptionBuilder.newInstance().setErrorDetail(e.getMessage()).build(); + } + } } 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 2d7eb8c..883a729 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 @@ -360,6 +360,25 @@ public class SysUserService implements ISysUserService { } @Override + public void updateSysUserPwdByLoginName(String loginName, String password) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getStringEqualPack(loginName,"userLoginName",ddlPackBean); + List sysUsers = userRDao.findByHqlWhere(ddlPackBean); + if (Objects.isNull(sysUsers)){ + throw ImppExceptionBuilder.newInstance().setErrorDetail("修改密码失败,账号在系统中不存在!").build(); + } + + if (sysUsers.size() > 1){ + throw ImppExceptionBuilder.newInstance().setErrorDetail("登录名不唯一,修改失败!").build(); + } + + SysUser sysUser = sysUsers.get(0); + Long pwdId = sysUser.getUserLoginPasswordId(); + userPasswordService.updatePasswordByPwdIdAndNewPwd(pwdId,password); + } + + + @Override @ApiOperation(value = "刷新账号", notes = "刷新账号登录信息") public void refreshUserLoginInformation(Long userId) { SysUser user = userRDao.getById(userId); @@ -696,6 +715,14 @@ 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); + + return userRDao.getByProperty(new String[]{"userLoginName", "userEmail","isValid","isDeleted"}, + new Object[]{loginName, email,CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()}); + } + + @Override @ApiOperation(value = "账号查询", notes = "根据邮箱查询用户信息") public SysUser getSysUserByEmail(String email) { return userRDao.getByProperty(new String[]{"userEmail", "isValid"}, diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java index 95cbd1d..f7df72d 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java @@ -396,13 +396,24 @@ public class MailUtil { mailConfig.setMailPassword("Aa135790"); MailUtil mailUtil = new MailUtil(); mailUtil.init(mailConfig); - mailUtil.setNick("ns"); - mailUtil.setTo("13298408382@163.com"); + mailUtil.setNick("SFP验证码"); + mailUtil.setTo("castle.zang@estsh.com"); +// mailUtil.setTo("ying.he.zang@estsh.com"); mailUtil.setContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.TEXT.getDescription()); - mailUtil.setSubject("test"); - mailUtil.setBody("666"); - File file = new File("C:\\Users\\ns\\Desktop\\test.txt"); - mailUtil.addAttachment(file); + mailUtil.setSubject("SFP验证码"); + mailUtil.setBody( + "供应商账号(登录名称),您好!\n" + + "\n" + + "您登录账号“供应商账号(登录名称)”修改密码所需的验证码为: “XXXXX“\n"+ + "\n" + + "您会收到这封自动产生的邮件,是由于有人在供应商端试图通过网络设备修改您的账户密码,且提供了正确的账户名称与邮箱。\n" + + "验证码是修改密码所必需的。没有人能够不访问这封电子邮件就修改您的账户密码。\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "祝您愉快,\n" + + "SFP团队"); mailUtil.send(); } From df24297fdbd1b5ad72dae1624ecf75c9c0774d27 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Sun, 27 Mar 2022 15:52:22 +0800 Subject: [PATCH 03/10] =?UTF-8?q?sweb=E4=BE=9B=E5=BA=94=E5=95=86=E8=87=AA?= =?UTF-8?q?=E5=8A=A9=E4=BF=AE=E6=94=B9=E5=AF=86=E7=A0=81---=E4=BE=9B?= =?UTF-8?q?=E5=BA=94=E5=95=86=E5=8F=AF=E4=BB=A5=E9=82=AE=E7=AE=B1=EF=BC=8C?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E8=8B=B1=E6=96=87=E9=80=97=E5=8F=B7=E5=81=9A?= =?UTF-8?q?=E5=88=86=E9=9A=94=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/apiservice/controller/base/WhiteController.java | 7 ++++++- .../core/apiservice/serviceimpl/busi/SysUserService.java | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) 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 8f01ef5..506b441 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 @@ -964,7 +964,12 @@ public class WhiteController extends CoreBaseController { public ResultBean querySysUser(@RequestBody SysUser sysUser){ ValidatorBean.checkNotNull(sysUser.getUserLoginName(),"用户登录名不能为空!"); ValidatorBean.checkNotNull(sysUser.getUserEmail(),"用户email不能为空!"); - SysUser user = sysUserService.getSysUserByLoginNameAndEmail(sysUser.getUserLoginName(), sysUser.getUserEmail()); + SysUser user = null; + try { + user = sysUserService.getSysUserByLoginNameAndEmail(sysUser.getUserLoginName(), sysUser.getUserEmail()); + } catch (ImppBusiException e) { + return ResultBean.fail(e.getMessage()); + } return ResultBean.success("查询成功!").setResultObject(user); } 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 883a729..07f26af 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 @@ -718,8 +718,18 @@ public class SysUserService implements ISysUserService { public SysUser getSysUserByLoginNameAndEmail(String loginName, String email) { LOGGER.debug("平台用户 SYS_USER find By Login Name :{},and email:{}", loginName,email); - return userRDao.getByProperty(new String[]{"userLoginName", "userEmail","isValid","isDeleted"}, - new Object[]{loginName, email,CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()}); + 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)){ + String emails = sysUser.getUserEmail(); + if (Strings.isNotBlank(emails)){ + List emailList = Arrays.asList(emails.split(",")); + if (emailList.contains(email)){ + return sysUser; + } + } + } + throw ImppExceptionBuilder.newInstance().setErrorDetail("账号与邮箱不匹配!").build(); } @Override From 8b337e10c53329268bbd5582ae4baa6faab4caf5 Mon Sep 17 00:00:00 2001 From: nies Date: Mon, 28 Mar 2022 09:20:18 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E5=89=8D=E7=AB=AF=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E8=A1=A8=E6=A0=BC=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?id=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iservice/busi/ISysTableTemplateService.java | 7 ++++ .../busi/SysTableTemplateController.java | 43 ++++++++++++++++++---- .../serviceimpl/busi/SysTableTemplateService.java | 6 +++ 3 files changed, 49 insertions(+), 7 deletions(-) diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTableTemplateService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTableTemplateService.java index c0916d8..95dc712 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTableTemplateService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTableTemplateService.java @@ -28,6 +28,13 @@ public interface ISysTableTemplateService { List findSysTableTemplate(SysTableTemplate sysTableTemplate); /** + * 根据id查询 + * @param sysTableTemplateId + * @return + */ + SysTableTemplate getSysTableTemplateById(Long sysTableTemplateId); + + /** * 更新table模板,如果不存在,则新增对应的模板 * @param sysTableTemplate * @return diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTableTemplateController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTableTemplateController.java index 1f725e5..549abe9 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTableTemplateController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTableTemplateController.java @@ -9,9 +9,12 @@ import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; /** * @author ns @@ -62,7 +65,7 @@ public class SysTableTemplateController { //条件验证 if (!CommonEnumUtil.USER_TYPE.ADMIN.equals(AuthUtil.getUserType())) { - return ResultBean.fail("当前用户不是管理员,不能修改"); + return ResultBean.fail("当前用户不是管理员,不能修改"); } ValidatorBean validatorBean = ValidatorBean.beginValid(sysTableTemplate); if (ObjectUtils.isEmpty(sysTableTemplate.getId())) { @@ -73,12 +76,22 @@ public class SysTableTemplateController { .notNull("templateType", sysTableTemplate.getTemplateType()); return ResultBean.success().setResultObject(iSysTableTemplateService.insertSysTableTemplate((sysTableTemplate))); } + if (!iSysTableTemplateService.isExistSysTableTemplate(sysTableTemplate)) { + return ResultBean.fail("模板不存在"); + } return ResultBean.success().setResultObject(iSysTableTemplateService.updateSysTableTemplate((sysTableTemplate))); } - @ApiOperation("查询系统模板") + + @ApiOperation("条件查询表格模板") @GetMapping("/find") - public ResultBean findSysTableTemplate(SysTableTemplate sysTableTemplate) throws NoSuchFieldException { + @ApiImplicitParams({ + @ApiImplicitParam(name = "page", value = "表格所属页面"), + @ApiImplicitParam(name = "softType", value = "所属软件类型"), + @ApiImplicitParam(name = "id", value = "id"), + @ApiImplicitParam(name = "templateType", value = "模板类型") + }) + public ResultBean findSysTableTemplate(@ApiIgnore SysTableTemplate sysTableTemplate) { if (ObjectUtils.isEmpty(sysTableTemplate)) { return ResultBean.fail("查询条件不能为空"); } @@ -88,18 +101,34 @@ public class SysTableTemplateController { && ObjectUtils.isEmpty(sysTableTemplate.getTemplateType())) { return ResultBean.fail("查询条件不能为空"); } - return ResultBean.success().setResultObject(iSysTableTemplateService.findSysTableTemplate((sysTableTemplate))); + return ResultBean.success().setResultList(iSysTableTemplateService.findSysTableTemplate((sysTableTemplate))); + + } + + @ApiOperation("根据id查询表格模板") + @GetMapping("/getSysTableTemplate") + public ResultBean getSysTableTemplateById(Long id) throws NoSuchFieldException { + if (ObjectUtils.isEmpty(id)) { + return ResultBean.fail("id不能为空"); + } + return ResultBean.success().setResultObject(iSysTableTemplateService.getSysTableTemplateById(id)); } - @ApiOperation("分页查询系统模板") + @ApiOperation("分页查询表格模板") @GetMapping("/findBypage") - public ResultBean findSysTableTemplateByPage(SysTableTemplate sysTableTemplate, Pager pager) throws NoSuchFieldException { + @ApiImplicitParams({ + @ApiImplicitParam(name = "page", value = "表格所属页面"), + @ApiImplicitParam(name = "softType", value = "所属软件类型"), + @ApiImplicitParam(name = "id", value = "id"), + @ApiImplicitParam(name = "templateType", value = "模板类型") + }) + public ResultBean findSysTableTemplateByPage(@ApiIgnore SysTableTemplate sysTableTemplate, Pager pager) throws NoSuchFieldException { if (ObjectUtils.isEmpty(pager)) { pager = Pager.defaultPager(); } - return ResultBean.success().setResultObject(iSysTableTemplateService.findSysTableTemplateByPage(sysTableTemplate, pager)); + return ResultBean.success().setListPager(iSysTableTemplateService.findSysTableTemplateByPage(sysTableTemplate, pager)); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTableTemplateService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTableTemplateService.java index 1343ab6..63f6f82 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTableTemplateService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTableTemplateService.java @@ -46,6 +46,12 @@ public class SysTableTemplateService implements ISysTableTemplateService { } @Override + public SysTableTemplate getSysTableTemplateById(Long sysTableTemplateId) { + return sysTableTemplateRepository.getById(sysTableTemplateId); + } + + + @Override public Boolean saveSysTableTemplate(SysTableTemplate sysTableTemplate) { return null; } From aec7e5d70964bcda81266a988ae8528afcab6a81 Mon Sep 17 00:00:00 2001 From: nies Date: Tue, 29 Mar 2022 18:57:15 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E6=89=8B=E6=9C=BA=E5=8F=B7=E6=89=B9=E9=87=8F=E5=8F=91=E9=80=81?= =?UTF-8?q?=E9=92=89=E9=92=89=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/base/WhiteController.java | 243 ++++++++++++++++++--- 1 file changed, 215 insertions(+), 28 deletions(-) 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 506b441..6910a76 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 @@ -29,12 +29,10 @@ import cn.estsh.i3plus.pojo.model.common.ImppEmail; import cn.estsh.i3plus.pojo.model.common.ImppSmsContent; import cn.estsh.i3plus.pojo.model.common.UserModel; import cn.estsh.i3plus.pojo.model.license.ImppLicense; -import cn.estsh.i3plus.pojo.model.platform.SysLoginModel; -import cn.estsh.i3plus.pojo.model.platform.SysRoleModel; -import cn.estsh.i3plus.pojo.model.platform.UserDetailModel; -import cn.estsh.i3plus.pojo.model.platform.UserDetailPagerModel; +import cn.estsh.i3plus.pojo.model.platform.*; import cn.estsh.i3plus.pojo.platform.bean.*; -import cn.estsh.i3plus.sdk.dingtalk.cn.estsh.i3plus.sdk.service.IDingTalkService; +import cn.estsh.i3plus.sdk.dingtalk.dingrobot.DingRobotRequestBody; +import cn.estsh.i3plus.sdk.dingtalk.service.IDingTalkService; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; @@ -42,10 +40,24 @@ import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.license.ImppLicenseTool; import cn.estsh.impp.framework.boot.license.serviceimpl.ImppLicenseDecoder; import cn.estsh.impp.framework.boot.util.*; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest; +import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponse; +import com.aliyun.dingtalkrobot_1_0.models.BatchSendOTOHeaders; +import com.aliyun.dingtalkrobot_1_0.models.BatchSendOTORequest; +import com.aliyun.dingtalkrobot_1_0.models.BatchSendOTOResponse; +import com.aliyun.tea.TeaException; +import com.aliyun.teaopenapi.models.Config; +import com.aliyun.teautil.models.RuntimeOptions; +import com.dingtalk.api.DefaultDingTalkClient; +import com.dingtalk.api.DingTalkClient; +import com.dingtalk.api.request.OapiV2UserGetbymobileRequest; import com.dingtalk.api.response.OapiV2UserGetResponse; +import com.dingtalk.api.response.OapiV2UserGetbymobileResponse; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; +import com.taobao.api.ApiException; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; @@ -320,6 +332,7 @@ public class WhiteController extends CoreBaseController { return ResultBean.success("查询成功").setResultList(menuList); } + @GetMapping(value = "/auth/dingtalk/login") @ApiOperation(value = "登录", notes = "登录") public ResultBean loginByPhoneNumber(HttpServletRequest request, String dingTalkTmpAuthCode, @@ -422,7 +435,7 @@ public class WhiteController extends CoreBaseController { if (e.getCause() instanceof ImppBusiException) { ImppBusiException imppBusiException = (ImppBusiException) e.getCause(); result.setErrorMsg(LocaleUtils.getLocaleRes(imppBusiException.getErrorDetail())); - }else { + } else { result.setErrorMsg(e.getCause().getMessage()); } } else { @@ -440,8 +453,8 @@ public class WhiteController extends CoreBaseController { userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR; LOGGER.warn("Impp业务异常Exception 登录失败 ", e); } finally { - if (result != null && !result.isSuccess() ){ - if(CommonEnumUtil.USER_LOGIN_STATUS.LOGIN_SUCCESS.getValue() == userLoginStatus.getValue()){ + if (result != null && !result.isSuccess()) { + if (CommonEnumUtil.USER_LOGIN_STATUS.LOGIN_SUCCESS.getValue() == userLoginStatus.getValue()) { userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR; } } @@ -449,7 +462,7 @@ public class WhiteController extends CoreBaseController { recordSysUserLog(null, loginModel.getLoginName(), userLoginStatus.getValue()); } - LOGGER.info("会员{}登陆登录完成,登录{},语言:{} , 登录耗时:{}", loginModel.getLoginName(),result.isSuccess()? "成功":"失败", BaseThreadLocal.getThreadLanguageCode(), (System.currentTimeMillis() - startTime)); + LOGGER.info("会员{}登陆登录完成,登录{},语言:{} , 登录耗时:{}", loginModel.getLoginName(), result.isSuccess() ? "成功" : "失败", BaseThreadLocal.getThreadLanguageCode(), (System.currentTimeMillis() - startTime)); return result; } @@ -956,14 +969,15 @@ public class WhiteController extends CoreBaseController { /** * 根据登录名,邮箱获取用户账号信息 + * * @param sysUser * @return */ @PostMapping(value = "/user/query-user") - @ApiOperation(value = "根据条件查询单个用户信息",notes = "根据条件查询单个用户信息") - public ResultBean querySysUser(@RequestBody SysUser sysUser){ - ValidatorBean.checkNotNull(sysUser.getUserLoginName(),"用户登录名不能为空!"); - ValidatorBean.checkNotNull(sysUser.getUserEmail(),"用户email不能为空!"); + @ApiOperation(value = "根据条件查询单个用户信息", notes = "根据条件查询单个用户信息") + public ResultBean querySysUser(@RequestBody SysUser sysUser) { + ValidatorBean.checkNotNull(sysUser.getUserLoginName(), "用户登录名不能为空!"); + ValidatorBean.checkNotNull(sysUser.getUserEmail(), "用户email不能为空!"); SysUser user = null; try { user = sysUserService.getSysUserByLoginNameAndEmail(sysUser.getUserLoginName(), sysUser.getUserEmail()); @@ -975,9 +989,9 @@ public class WhiteController extends CoreBaseController { @PostMapping(value = "/sendEmail") @ApiOperation(value = "无需登录,发送邮件") - public ResultBean sendEmail(@RequestBody ImppEmail imppEmail){ - ValidatorBean.checkNotNull(imppEmail.getContent(),"消息内容不能为空"); - ValidatorBean.checkNotNull(imppEmail.getEmail(),"email地址不能为空"); + public ResultBean sendEmail(@RequestBody ImppEmail imppEmail) { + ValidatorBean.checkNotNull(imppEmail.getContent(), "消息内容不能为空"); + ValidatorBean.checkNotNull(imppEmail.getEmail(), "email地址不能为空"); try { MailUtil mailUtil = new MailUtil(); mailUtil.init(); @@ -988,25 +1002,25 @@ public class WhiteController extends CoreBaseController { mailUtil.setBody(imppEmail.getContent()); mailUtil.send(); } catch (Exception e) { - LOGGER.error("发送邮件:{}失败:{}",imppEmail.getEmail(),e.getMessage()); - return ResultBean.fail("发送失败,请检查邮箱是否输入正确!"); + LOGGER.error("发送邮件:{}失败:{}", imppEmail.getEmail(), e.getMessage()); + return ResultBean.fail("发送失败,请检查邮箱是否输入正确!"); } return ResultBean.success("验证码已发送!"); } @PostMapping(value = "/update-vendor-pwd") @ApiOperation(value = "忘记密码") - public ResultBean updateVendorPwd(@RequestBody UserModel userModel){ - ValidatorBean.checkNotNull(userModel.getLoginName(),"登录名不能为空!"); - ValidatorBean.checkNotNull(userModel.getPassword(),"密码不能为空!"); - sysUserService.updateSysUserPwdByLoginName(userModel.getLoginName(),userModel.getPassword()); + public ResultBean updateVendorPwd(@RequestBody UserModel userModel) { + ValidatorBean.checkNotNull(userModel.getLoginName(), "登录名不能为空!"); + ValidatorBean.checkNotNull(userModel.getPassword(), "密码不能为空!"); + sysUserService.updateSysUserPwdByLoginName(userModel.getLoginName(), userModel.getPassword()); return ResultBean.success("修改成功!"); } @PostMapping("/sendSms") @ApiOperation("无需登录 发送短信") - public ResultBean sendSms(@RequestBody ImppSmsContent imppSmsContent){ - return smsSendRecordController.send(imppSmsContent); + public ResultBean sendSms(@RequestBody ImppSmsContent imppSmsContent) { + return smsSendRecordController.send(imppSmsContent); } @@ -1026,8 +1040,8 @@ public class WhiteController extends CoreBaseController { } //过滤SysRefUserRole roleList = sysRoleService.findAllByRoleProperty(sysRole); - if (ObjectUtils.isEmpty(roleList)){ - return ResultBean.success("操作成功"); + if (ObjectUtils.isEmpty(roleList)) { + return ResultBean.success("操作成功"); } List roleIdList = roleList.stream().map(el -> el.getId()).collect(Collectors.toList()); @@ -1044,13 +1058,186 @@ public class WhiteController extends CoreBaseController { * 根据登录的用户名批量修改账号状态 * * @param userLoginNames 用户名数组 - * @param status 状态 + * @param status 状态 * @return 处理结果 */ @PutMapping(value = "/batch-status/userLoginNames") @ApiOperation(value = "根据用户名批量修改账号状态", notes = "根据用户名批量修改账号状态") public ResultBean updateBatchStatusByUserLoginNames(String[] userLoginNames, Integer status) { - return sysUserController.updateBatchStatusByUserLoginNames(userLoginNames,status); + return sysUserController.updateBatchStatusByUserLoginNames(userLoginNames, status); + } + + + private static final Long ACCESS_TOKEN_EXPIRE_TIME = 7080L; + private static final String ACCESS_TOKEN_KEY = "ding_talk:access_token"; + + /** + * 钉钉单聊机器人批量发送消息 + * @param dingSendBatchRequestModel + * @return + */ + @PostMapping(value = "/dingRobot/sendBatchRequest") + @ApiOperation(value = "根据手机号 钉钉单聊机器人批量发送消息", notes = "根据手机号 钉钉单聊机器人批量发送消息") + public ResultBean singleRobotsendBatchRequest(@RequestBody DingSendBatchRequestModel dingSendBatchRequestModel ) { + if(ObjectUtils.isEmpty(dingSendBatchRequestModel)){ + return ResultBean.fail("消息内容不能为空"); + } + List phoneNumberList = dingSendBatchRequestModel.getPhoneNumberList(); + String title = dingSendBatchRequestModel.getTitle(); + String content = dingSendBatchRequestModel.getContent(); + if (StringUtils.isBlank(content)) { + return ResultBean.fail("消息内容不能为空"); + } + if (ObjectUtils.isEmpty(phoneNumberList)) { + return ResultBean.fail("手机号不能为空"); + } + phoneNumberList = phoneNumberList.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList()); + if (ObjectUtils.isEmpty(phoneNumberList)) { + return ResultBean.fail("手机号不能为空"); + } + Config config = new Config(); + config.protocol = "https"; + config.regionId = "central"; + com.aliyun.dingtalkrobot_1_0.Client client = null; + try { + client = new com.aliyun.dingtalkrobot_1_0.Client(config); + } catch (Exception e) { + e.printStackTrace(); + return ResultBean.fail(e).setMsg("发送失败"); + } + BatchSendOTOHeaders batchSendOTOHeaders = new BatchSendOTOHeaders(); + batchSendOTOHeaders.xAcsDingtalkAccessToken = getAccessToken(); + BatchSendOTORequest batchSendOTORequest = new BatchSendOTORequest(); + List userIdList = new ArrayList(); + phoneNumberList.forEach(el -> { + ResultBean result = getDingUserIdByPhoneNumber(el, batchSendOTOHeaders.xAcsDingtalkAccessToken); + if (result.isSuccess()) { + userIdList.add((String) result.getResultObject()); + } + + }); + if (userIdList.isEmpty()) { + return ResultBean.fail("发送失败,无法根据手机号获取用户id"); + } +// userIdList.add("27202755621041923"); +// userIdList.add("070537336424114523"); + + String dingTalkAppKey = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.DINGTALK_APP_KEY); + batchSendOTORequest.setRobotCode(dingTalkAppKey); + batchSendOTORequest.setUserIds(userIdList); + // markdown officialImageMsg + DingRobotRequestBody requestBody = generateMarkdown(title, content); + batchSendOTORequest.setMsgKey("sampleMarkdown"); + batchSendOTORequest.setMsgParam(JSON.toJSONString(requestBody.getMarkdown())); + try { + BatchSendOTOResponse response = client.batchSendOTOWithOptions(batchSendOTORequest, batchSendOTOHeaders, new RuntimeOptions()); + System.out.println(JSON.toJSONString(response)); + } catch (TeaException err) { + err.printStackTrace(); + if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { + // err 中含有 code 和 message 属性,可帮助开发定位问题 + } + return ResultBean.fail(err).setMsg("发送失败"); + + } catch (Exception _err) { + _err.printStackTrace(); + TeaException err = new TeaException(_err.getMessage(), _err); + if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { + // err 中含有 code 和 message 属性,可帮助开发定位问题 + } + return ResultBean.fail(err).setMsg("发送失败"); + } + return ResultBean.success("发送成功"); + } + + private DingRobotRequestBody generateMarkdown(String title, String content) { + DingRobotRequestBody dingRobotRequestBody = new DingRobotRequestBody(); + DingRobotRequestBody.MarkDown markDown = new DingRobotRequestBody.MarkDown(); + markDown.setTitle(title); + dingRobotRequestBody.setMsgType("markdown"); +// markDown.setText(" # Andon 通知" + +// "\n"+ +// "\n"+ +// " [![qGTEi6.png](https://s1.ax1x.com/2022/03/24/qGTEi6.png)](https://imgtu.com/i/qGTEi6) EP产线-01工位,物料缺料,请及时处理 " +// ); +// markDown.setText(" # Andon 通知" + +// "\n"+ +// "\n"+ +// " [![qGTEi6.png](https://s1.ax1x.com/2022/03/24/qGTEi6.png)](https://imgtu.com/i/qGTEi6) EP产线-01工位,物料缺料,请及时处理 " +// ); +// markDown.setText(" ## Andon 通知" + +// "\n"+ +// "\n"+ +// " [![qGTEi6.png](https://s1.ax1x.com/2022/03/24/qGTEi6.png)](https://imgtu.com/i/qGTEi6) EP产线-01工位,物料缺料,处理措施:联络供应商送货" +// ); + markDown.setText(content); + dingRobotRequestBody.setMarkDown(markDown); + return dingRobotRequestBody; + } + + /** + * 根据手机号获取钉钉的uid + * + * @param phoneNumber + * @return + */ + public ResultBean getDingUserIdByPhoneNumber(String phoneNumber, String accessToken) { + try { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getbymobile"); + OapiV2UserGetbymobileRequest req = new OapiV2UserGetbymobileRequest(); + req.setMobile(phoneNumber); +// req.setMobile("13298408382"); + OapiV2UserGetbymobileResponse rsp = client.execute(req, accessToken); + return ResultBean.success("获取用户id成功").setResultObject(rsp.getResult().getUserid()); + } catch (ApiException e) { + e.printStackTrace(); + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + /** + * 获取accessToken + * + * @return + */ + private String getAccessToken() { + Object accessTokenCached = redisCore.getObject(ACCESS_TOKEN_KEY); + if (accessTokenCached != null) { + return String.valueOf(accessTokenCached); + } + Config config = new Config(); + config.protocol = "https"; + config.regionId = "central"; + com.aliyun.dingtalkoauth2_1_0.Client client = null; + String dingTalkAppKey = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.DINGTALK_APP_KEY); + String dingTalkAppSecret = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.DINGTALK_APP_SECRET); + try { + client = new com.aliyun.dingtalkoauth2_1_0.Client(config); + } catch (Exception e) { + e.printStackTrace(); + } + GetAccessTokenRequest getAccessTokenRequest = new GetAccessTokenRequest() + .setAppKey(dingTalkAppKey) + .setAppSecret(dingTalkAppSecret); + try { + GetAccessTokenResponse response = client.getAccessToken(getAccessTokenRequest); + if (!StringUtils.isEmpty(response.body.accessToken)) { + redisCore.putObject(ACCESS_TOKEN_KEY, response.body.accessToken, ACCESS_TOKEN_EXPIRE_TIME); + } + return response.body.accessToken; + } catch (TeaException err) { + if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { + // err 中含有 code 和 message 属性,可帮助开发定位问题 + } + + } catch (Exception _err) { + TeaException err = new TeaException(_err.getMessage(), _err); + if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { + // err 中含有 code 和 message 属性,可帮助开发定位问题 + } + + } + return ""; } From feee2c102c39a8f8dff7a22ad8e6d7802338ab9e Mon Sep 17 00:00:00 2001 From: nies Date: Thu, 31 Mar 2022 10:44:19 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E6=96=B0=E5=A2=9Eqms=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iservice/busi/ISysTableTemplateService.java | 16 +++++++++ modules/i3plus-core-apiservice/pom.xml | 5 +++ .../busi/SysTableTemplateController.java | 38 ++++++++++++---------- .../controller/busi/SysTaskController.java | 6 ++++ .../serviceimpl/busi/SysTableTemplateService.java | 22 +++++++++++-- pom.xml | 7 ++++ 6 files changed, 74 insertions(+), 20 deletions(-) diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTableTemplateService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTableTemplateService.java index 95dc712..312e8d5 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTableTemplateService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTableTemplateService.java @@ -61,4 +61,20 @@ public interface ISysTableTemplateService { * @return */ Boolean isExistSysTableTemplate(SysTableTemplate sysTableTemplate); + + + /** + * 判断模板是否存在 + * @param id + * @return + */ + Boolean isExistSysTableTemplateById(Long id); + + + /** + * 判断模板是否存在 + * @param ids + * @return + */ + int deleteSysTableTemplateByIds(Long[] ids); } diff --git a/modules/i3plus-core-apiservice/pom.xml b/modules/i3plus-core-apiservice/pom.xml index 9012600..1e11207 100644 --- a/modules/i3plus-core-apiservice/pom.xml +++ b/modules/i3plus-core-apiservice/pom.xml @@ -63,6 +63,11 @@ i3plus-icloud-screen + + i3plus.ext.qms + i3plus-ext-qms-icloud + + i3plus.pojo diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTableTemplateController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTableTemplateController.java index 549abe9..c7043d4 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTableTemplateController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTableTemplateController.java @@ -33,7 +33,7 @@ public class SysTableTemplateController { @ApiOperation("新增系统模板") @PostMapping("/insert") - public ResultBean insertSysTableTemplate(SysTableTemplate sysTableTemplate) throws NoSuchFieldException { + public ResultBean insertSysTableTemplate(@RequestBody SysTableTemplate sysTableTemplate) throws NoSuchFieldException { //条件验证 ValidatorBean.beginValid(sysTableTemplate) .notNull("softType", sysTableTemplate.getSoftType()) @@ -41,6 +41,9 @@ public class SysTableTemplateController { .notNull("page", sysTableTemplate.getPage()) .notNull("templateType", sysTableTemplate.getTemplateType()); if (CommonEnumUtil.USER_TYPE.ADMIN.equals(AuthUtil.getUserType())) { + if (iSysTableTemplateService.isExistSysTableTemplate(sysTableTemplate)) { + return ResultBean.fail("同一个软件类型和page下不能有相同的模板类型"); + } return ResultBean.success().setResultObject(iSysTableTemplateService.insertSysTableTemplate((sysTableTemplate))); } return ResultBean.fail("当前用户不是管理员,不能新增"); @@ -49,7 +52,7 @@ public class SysTableTemplateController { @ApiOperation("修改系统模板") @PutMapping("/update") - public ResultBean updateSysTableTemplate(SysTableTemplate sysTableTemplate) throws NoSuchFieldException { + public ResultBean updateSysTableTemplate(@RequestBody SysTableTemplate sysTableTemplate) throws NoSuchFieldException { //条件验证 ValidatorBean.beginValid(sysTableTemplate) .notNull("id", sysTableTemplate.getId()); @@ -61,7 +64,7 @@ public class SysTableTemplateController { @ApiOperation("修改系统模板,如果不存在则新增模板") @PutMapping("/putIfAbsent") - public ResultBean putIfSysTableTemplateAbsent(SysTableTemplate sysTableTemplate) throws NoSuchFieldException { + public ResultBean putIfSysTableTemplateAbsent(@RequestBody SysTableTemplate sysTableTemplate) throws NoSuchFieldException { //条件验证 if (!CommonEnumUtil.USER_TYPE.ADMIN.equals(AuthUtil.getUserType())) { @@ -74,9 +77,12 @@ public class SysTableTemplateController { .notNull("templateData", sysTableTemplate.getTemplateData()) .notNull("page", sysTableTemplate.getPage()) .notNull("templateType", sysTableTemplate.getTemplateType()); + if (iSysTableTemplateService.isExistSysTableTemplate(sysTableTemplate)) { + return ResultBean.fail("同一个软件类型和page下不能有相同的模板类型"); + } return ResultBean.success().setResultObject(iSysTableTemplateService.insertSysTableTemplate((sysTableTemplate))); } - if (!iSysTableTemplateService.isExistSysTableTemplate(sysTableTemplate)) { + if (!iSysTableTemplateService.isExistSysTableTemplateById(sysTableTemplate.getId())) { return ResultBean.fail("模板不存在"); } return ResultBean.success().setResultObject(iSysTableTemplateService.updateSysTableTemplate((sysTableTemplate))); @@ -85,13 +91,7 @@ public class SysTableTemplateController { @ApiOperation("条件查询表格模板") @GetMapping("/find") - @ApiImplicitParams({ - @ApiImplicitParam(name = "page", value = "表格所属页面"), - @ApiImplicitParam(name = "softType", value = "所属软件类型"), - @ApiImplicitParam(name = "id", value = "id"), - @ApiImplicitParam(name = "templateType", value = "模板类型") - }) - public ResultBean findSysTableTemplate(@ApiIgnore SysTableTemplate sysTableTemplate) { + public ResultBean findSysTableTemplate( SysTableTemplate sysTableTemplate) { if (ObjectUtils.isEmpty(sysTableTemplate)) { return ResultBean.fail("查询条件不能为空"); } @@ -118,12 +118,6 @@ public class SysTableTemplateController { @ApiOperation("分页查询表格模板") @GetMapping("/findBypage") - @ApiImplicitParams({ - @ApiImplicitParam(name = "page", value = "表格所属页面"), - @ApiImplicitParam(name = "softType", value = "所属软件类型"), - @ApiImplicitParam(name = "id", value = "id"), - @ApiImplicitParam(name = "templateType", value = "模板类型") - }) public ResultBean findSysTableTemplateByPage(@ApiIgnore SysTableTemplate sysTableTemplate, Pager pager) throws NoSuchFieldException { if (ObjectUtils.isEmpty(pager)) { pager = Pager.defaultPager(); @@ -132,4 +126,14 @@ public class SysTableTemplateController { } + @ApiOperation("根据id删除模板") + @DeleteMapping("/delete") + public ResultBean findSysTableTemplate(Long[] ids) { + if (ObjectUtils.isEmpty(ids)) { + return ResultBean.fail("id为空"); + } + return ResultBean.success().setResultObject(iSysTableTemplateService.deleteSysTableTemplateByIds(ids)); + + } + } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java index 3f141da..57ce842 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService; import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskService; +import cn.estsh.i3plus.ext.qms.icloud.sdk.IQmsCommonCloud; import cn.estsh.i3plus.icloud.andon.sdk.IAndonCommonCloud; import cn.estsh.i3plus.icloud.mes.pcn.sdk.IMesPcnCommonCloud; import cn.estsh.i3plus.icloud.mes.sdk.IMesCommonCloud; @@ -100,6 +101,9 @@ public class SysTaskController extends CoreBaseController { private IScreenCommonCloud screenCommonCloud; @Autowired + private IQmsCommonCloud iQmsCommonCloud; + + @Autowired private EntityManager entityManager; @Autowired @@ -143,6 +147,8 @@ public class SysTaskController extends CoreBaseController { commonService = ptlCommonCloud; } else if (softType == CommonEnumUtil.SOFT_TYPE.SCREEN.getValue()) { commonService = screenCommonCloud; + } else if (softType == CommonEnumUtil.SOFT_TYPE.QMS.getValue()) { + commonService = iQmsCommonCloud; } return commonService; } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTableTemplateService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTableTemplateService.java index 63f6f82..4e0720c 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTableTemplateService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTableTemplateService.java @@ -8,6 +8,7 @@ import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.platform.bean.SysTableTemplate; import cn.estsh.i3plus.pojo.platform.repository.SysTableTemplateRepository; +import cn.estsh.impp.framework.boot.auth.AuthUtil; import org.springframework.stereotype.Service; import java.util.List; @@ -29,7 +30,7 @@ public class SysTableTemplateService implements ISysTableTemplateService { public ListPager findSysTableTemplateByPage(SysTableTemplate sysTableTemplate, Pager pager) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(sysTableTemplate.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(sysTableTemplate.getSoftType(), "softType", ddlPackBean); - DdlPreparedPack.getStringLikerPack(sysTableTemplate.getPage(), "page", ddlPackBean); + DdlPreparedPack.getStringEqualPack(sysTableTemplate.getPage(), "page", ddlPackBean); DdlPreparedPack.getStringEqualPack(sysTableTemplate.getTemplateType(), "templateType", ddlPackBean); pager = PagerHelper.getPager(pager, sysTableTemplateRepository.findByHqlWhereCount(ddlPackBean)); return new ListPager(sysTableTemplateRepository.findByHqlWherePage(ddlPackBean, pager), pager); @@ -39,7 +40,7 @@ public class SysTableTemplateService implements ISysTableTemplateService { public List findSysTableTemplate(SysTableTemplate sysTableTemplate) { DdlPackBean result = DdlPackBean.getDdlPackBean(sysTableTemplate.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(sysTableTemplate.getSoftType(), "softType", result); - DdlPreparedPack.getStringLikerPack(sysTableTemplate.getPage(), "page", result); + DdlPreparedPack.getStringEqualPack(sysTableTemplate.getPage(), "page", result); DdlPreparedPack.getStringEqualPack(sysTableTemplate.getTemplateType(), "templateType", result); DdlPreparedPack.getNumEqualPack(sysTableTemplate.getId(), "id", result); return sysTableTemplateRepository.findByHqlWhere(result); @@ -68,9 +69,24 @@ public class SysTableTemplateService implements ISysTableTemplateService { } @Override + public Boolean isExistSysTableTemplateById(Long id) { + DdlPackBean ddlPack = DdlPackBean.getDdlPackBean(AuthUtil.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(id, "id", ddlPack); + return sysTableTemplateRepository.isExitByHql(ddlPack); + } + + @Override + public int deleteSysTableTemplateByIds(Long[] ids) { + return sysTableTemplateRepository.deleteByIds(ids); + } + + @Override public Boolean isExistSysTableTemplate(SysTableTemplate sysTableTemplate) { DdlPackBean ddlPack = DdlPackBean.getDdlPackBean(sysTableTemplate.getOrganizeCode()); - DdlPreparedPack.getNumEqualPack(sysTableTemplate.getId(), "id", ddlPack); + DdlPreparedPack.getNumEqualPack(sysTableTemplate.getSoftType(), "softType", ddlPack); + DdlPreparedPack.getStringEqualPack(sysTableTemplate.getPage(), "page", ddlPack); + DdlPreparedPack.getStringEqualPack(sysTableTemplate.getTemplateType(), "templateType", ddlPack); return sysTableTemplateRepository.isExitByHql(ddlPack); } + } diff --git a/pom.xml b/pom.xml index 142df5d..2f5c88e 100644 --- a/pom.xml +++ b/pom.xml @@ -38,6 +38,7 @@ UTF-8 1.8 1.0-TEST-SNAPSHOT + 1.0.0.1 2.17.0 @@ -120,6 +121,12 @@ ${project.dependency.version} + + i3plus.ext.qms + i3plus-ext-qms-icloud + ${qms.icloud.version} + + i3plus.pojo From b51fa31e066871e22e96435e89f463e123afd004 Mon Sep 17 00:00:00 2001 From: nies Date: Thu, 31 Mar 2022 17:45:25 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=89=AB=E6=8F=8F?= =?UTF-8?q?=E4=BA=8C=E5=BC=80=E9=A1=B9=E7=9B=AE=E7=9A=84iCloud=E5=85=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.properties | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modules/i3plus-core-apiservice/src/main/resources/application.properties b/modules/i3plus-core-apiservice/src/main/resources/application.properties index ccb1d71..5bb95b9 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application.properties @@ -46,6 +46,12 @@ impp.app.pojo-repository=${impp.app.pojo-packages}.**.repository #mongodb\u8D44\u6E90\u4ED3go impp.app.pojo-mongo-repository=${impp.app.pojo-packages}.**.repositorymon +###\u4E8C\u5F00\u9879\u76EE\u7684iCloud +impp.icloud.ext-packages=cn.estsh.i3plus.ext.**.icloud.** + +#\u4E8C\u5F00\u9879\u76EEiCloud\u7684fallbalck +impp.icloud.ext.fallback-packages=cn.estsh.i3plus.ext.**.icloud.sdkfallback + ################ \u6388\u6743\u8FC7\u6EE4\u914D\u7F6E ################ #\u7528\u6237\u767B\u9646\u8DEF\u5F84 filter.shiro.user.loginuri = /login From 38b024d8e4760dc8e484593ddf9c5f86c62073ed Mon Sep 17 00:00:00 2001 From: nies Date: Sat, 2 Apr 2022 16:07:47 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E9=87=8D=E7=BD=AE=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=90=8C=E6=97=B6=E4=BC=9A=E9=87=8D=E7=BD=AE?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=99=BB=E5=BD=95=E9=94=99=E8=AF=AF=E6=AC=A1?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/busi/SysTaskCycleController.java | 6 ++++ .../controller/busi/SysTaskPlanController.java | 9 ++++++ .../controller/busi/SysUserController.java | 33 ++++++++++++++++++---- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java index 2f692bf..ebfa61e 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; import cn.estsh.i3plus.core.api.iservice.busi.*; +import cn.estsh.i3plus.ext.qms.icloud.sdk.IQmsScheduleJobCloud; import cn.estsh.i3plus.icloud.andon.sdk.IAndonScheduleJobCloud; import cn.estsh.i3plus.icloud.mes.pcn.sdk.IMesPcnScheduleJobCloud; import cn.estsh.i3plus.icloud.mes.sdk.IMesScheduleJobCloud; @@ -99,6 +100,9 @@ public class SysTaskCycleController extends CoreBaseController { @Autowired private IAndonScheduleJobCloud andonScheduleJobCloud; + @Autowired + private IQmsScheduleJobCloud qmsScheduleJobCloud; + /** * 根据来源切换定时任务服务 * @@ -123,6 +127,8 @@ public class SysTaskCycleController extends CoreBaseController { // ANDON } else if (source == CommonEnumUtil.SOFT_TYPE.ANDON.getValue()) { quartzJobService = andonScheduleJobCloud; + }else if (source == CommonEnumUtil.SOFT_TYPE.QMS.getValue()) { + quartzJobService = qmsScheduleJobCloud; } return quartzJobService; } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java index 1e71b18..8fc4bee 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java @@ -4,6 +4,8 @@ import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService; import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskCycleService; import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskPlanService; import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskService; +import cn.estsh.i3plus.ext.qms.icloud.sdk.IQmsCommonCloud; +import cn.estsh.i3plus.ext.qms.icloud.sdk.IQmsScheduleJobCloud; import cn.estsh.i3plus.icloud.andon.sdk.IAndonScheduleJobCloud; import cn.estsh.i3plus.icloud.mes.pcn.sdk.IMesPcnScheduleJobCloud; import cn.estsh.i3plus.icloud.mes.sdk.IMesScheduleJobCloud; @@ -123,6 +125,11 @@ public class SysTaskPlanController extends CoreBaseController { @Autowired private IScreenScheduleJobCloud screenScheduleJobCloud; + @Autowired + private IQmsScheduleJobCloud qmsScheduleJobCloud; + + + /** * 根据来源切换定时任务服务 * @@ -155,6 +162,8 @@ public class SysTaskPlanController extends CoreBaseController { quartzJobService = ptlScheduleJobCloud; } else if (source == CommonEnumUtil.SOFT_TYPE.SCREEN.getValue()) { quartzJobService = screenScheduleJobCloud; + }else if (source == CommonEnumUtil.SOFT_TYPE.QMS.getValue()) { + quartzJobService = qmsScheduleJobCloud; } return quartzJobService; } 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 db6085f..9d2abad 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 @@ -34,6 +34,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.text.StrBuilder; import org.apache.commons.lang3.RandomStringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -100,6 +101,9 @@ public class SysUserController extends CoreBaseController { @Resource(name = CommonConstWords.IMPP_REDIS_RES) private ImppRedis redisRes; + @Resource(name = CommonConstWords.IMPP_REDIS_CORE) + protected ImppRedis redisCore; + /** * 新增系统用户 * @@ -277,7 +281,10 @@ public class SysUserController extends CoreBaseController { ValidatorBean.checkNotZero(status, "功能状态不能为空"); sysUserService.updateBatchSysUserStatus(StringTool.getArrayLong(ids), status, AuthUtil.getSessionUser()); - + //当解除锁定状态 重置当天登录错误次数上限 + if (CommonEnumUtil.USER_STATUS.ENABLE.getValue() == status) { + deleteRedisLoginErrorKeys(ids); + } return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); @@ -287,22 +294,38 @@ public class SysUserController extends CoreBaseController { } /** + * 删除登录错误的次数 + * + * @param ids + */ + private void deleteRedisLoginErrorKeys(String[] ids) { + String[] keys = new String[ids.length]; + StringBuilder redisKey = new StringBuilder(); + for (int i = 0; i < ids.length; i++) { + redisKey.append(CommonConstWords.USER_LOGIN_ERROR).append(":").append(TimeTool.getToday()).append(":").append(ids[i]); + keys[i] = redisKey.toString(); + redisKey.setLength(0); + } + redisCore.deleteKey(keys); + } + + /** * 根据登录的用户名批量修改账号状态 * * @param userLoginNames 用户名数组 - * @param status 状态 + * @param status 状态 * @return 处理结果 */ @PutMapping(value = "/batch-status/userLoginNames") @ApiOperation(value = "根据用户名批量修改账号状态", notes = "根据用户名批量修改账号状态") public ResultBean updateBatchStatusByUserLoginNames(String[] userLoginNames, Integer status) { try { - if(ObjectUtils.isEmpty(userLoginNames)){ + if (ObjectUtils.isEmpty(userLoginNames)) { return ResultBean.success("操作失败").setCode(ResourceEnumUtil.MESSAGE.FAIL.getCode()).setErrorMsg("用户名不能为空"); } ValidatorBean.checkNotZero(status, "账号状态不能为空"); List userLoginNameList = Stream.of(userLoginNames).collect(Collectors.toList()); - sysUserService.updateBatchSysUserStatusByUserLoginNames(userLoginNameList,status); + sysUserService.updateBatchSysUserStatusByUserLoginNames(userLoginNameList, status); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); @@ -569,7 +592,7 @@ public class SysUserController extends CoreBaseController { String password = SysUserPasswordUtil.generateRandomPassword(); userPasswordService.updatePasswordResetLastModifyTime(user.getId(), password, false); //重置成随机密码会让用户首次登录修改密码 - sysUserService.updateUserLoginNum(user.getId(),0); + sysUserService.updateUserLoginNum(user.getId(), 0); String content = "系统提示:\n" + "\t" + getSessionUser().getUserName() + "使用密码重置功能帮您重置了【" + user.getUserLoginName() + "】账号的密码," + "新密码是:" + password + ""; From 4c49c5c393c5d436372310637bc2a4856aed05e8 Mon Sep 17 00:00:00 2001 From: nies Date: Wed, 27 Apr 2022 14:02:13 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=96=B0=E5=A2=9Eeam?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/i3plus-core-apiservice/pom.xml | 4 ++ .../configuration/ScanPackageConfiguration.java | 71 +++++++++++----------- .../controller/busi/SysTaskController.java | 8 +++ .../controller/busi/SysTaskCycleController.java | 8 +++ .../controller/busi/SysTaskPlanController.java | 6 ++ .../src/main/resources/application.properties | 2 +- pom.xml | 7 +++ 7 files changed, 70 insertions(+), 36 deletions(-) diff --git a/modules/i3plus-core-apiservice/pom.xml b/modules/i3plus-core-apiservice/pom.xml index 1e11207..60835b9 100644 --- a/modules/i3plus-core-apiservice/pom.xml +++ b/modules/i3plus-core-apiservice/pom.xml @@ -68,6 +68,10 @@ i3plus-ext-qms-icloud + + i3plus.eam + i3plus-eam-icloud + i3plus.pojo diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/ScanPackageConfiguration.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/ScanPackageConfiguration.java index 40f7947..40251cb 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/ScanPackageConfiguration.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/ScanPackageConfiguration.java @@ -1,35 +1,36 @@ -//package cn.estsh.i3plus.core.apiservice.configuration; -// -//import cn.estsh.i3plus.platform.common.util.CommonConstWords; -//import cn.estsh.i3plus.pojo.base.jpa.factory.BaseRepositoryFactoryBean; -//import org.slf4j.Logger; -//import org.slf4j.LoggerFactory; -//import org.springframework.boot.autoconfigure.domain.EntityScan; -//import org.springframework.context.annotation.Configuration; -//import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -// -///** -// * @Description : 需要扫描其他包的配置文件 -// * 此类专门添加需要单独加载的其他模块的包 -// * @Reference : -// * @Author : alwaysfrin -// * @CreateDate : 2018-12-12 20:49 -// * @Modify: -// **/ -//@Configuration -////扫描需要单独处理的包 -//@EntityScan(basePackages = { -// "cn.estsh.i3plus.**.platbean" -//}) -// -////需要单独处理的其他模块包 -//@EnableJpaRepositories(basePackages = { -// "cn.estsh.i3plus.**.platrepository" -//}, repositoryFactoryBeanClass = BaseRepositoryFactoryBean.class) -//public class ScanPackageConfiguration { -// public static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG); -// -// public ScanPackageConfiguration(){ -// LOGGER.info("【扫描关联包...】"); -// } -//} +package cn.estsh.i3plus.core.apiservice.configuration; + +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.base.jpa.factory.BaseRepositoryFactoryBean; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; + +/** + * @Description : 需要扫描其他包的配置文件 + * 此类专门添加需要单独加载的其他模块的包 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-12-12 20:49 + * @Modify: + **/ +@Configuration +//扫描需要单独处理的包 +@EnableFeignClients(basePackages = {//微服方法路径(需要在组件扫面中添加熔断类路径) + "${impp.icloud.ext-packages:}.**" +}) +@ComponentScan(basePackages = { + //微服熔断路径 扫描qms iCloud熔断路径 + "${impp.icloud.ext.fallback-packages:}.**" +}) +public class ScanPackageConfiguration { + public static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG); + + public ScanPackageConfiguration(){ + LOGGER.info("【扫描关联包...】"); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java index 57ce842..d6cbd3c 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java @@ -5,6 +5,7 @@ import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService; import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskService; import cn.estsh.i3plus.ext.qms.icloud.sdk.IQmsCommonCloud; import cn.estsh.i3plus.icloud.andon.sdk.IAndonCommonCloud; +import cn.estsh.i3plus.icloud.eam.sdk.IEamCommonCloud; import cn.estsh.i3plus.icloud.mes.pcn.sdk.IMesPcnCommonCloud; import cn.estsh.i3plus.icloud.mes.sdk.IMesCommonCloud; import cn.estsh.i3plus.icloud.ptl.sdk.IPtlCommonCloud; @@ -104,6 +105,9 @@ public class SysTaskController extends CoreBaseController { private IQmsCommonCloud iQmsCommonCloud; @Autowired + private IEamCommonCloud iEamCommonCloud; + + @Autowired private EntityManager entityManager; @Autowired @@ -148,7 +152,11 @@ public class SysTaskController extends CoreBaseController { } else if (softType == CommonEnumUtil.SOFT_TYPE.SCREEN.getValue()) { commonService = screenCommonCloud; } else if (softType == CommonEnumUtil.SOFT_TYPE.QMS.getValue()) { + //qms commonService = iQmsCommonCloud; + }else if (softType == CommonEnumUtil.SOFT_TYPE.EAM.getValue()) { + //eam + commonService = iEamCommonCloud; } return commonService; } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java index ebfa61e..c31da29 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java @@ -3,6 +3,8 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; import cn.estsh.i3plus.core.api.iservice.busi.*; import cn.estsh.i3plus.ext.qms.icloud.sdk.IQmsScheduleJobCloud; import cn.estsh.i3plus.icloud.andon.sdk.IAndonScheduleJobCloud; +import cn.estsh.i3plus.icloud.eam.sdk.IEamCommonCloud; +import cn.estsh.i3plus.icloud.eam.sdk.IEamScheduleJobCloud; import cn.estsh.i3plus.icloud.mes.pcn.sdk.IMesPcnScheduleJobCloud; import cn.estsh.i3plus.icloud.mes.sdk.IMesScheduleJobCloud; import cn.estsh.i3plus.icloud.wms.sdk.IWmsScheduleJobCloud; @@ -103,6 +105,10 @@ public class SysTaskCycleController extends CoreBaseController { @Autowired private IQmsScheduleJobCloud qmsScheduleJobCloud; + + @Autowired + private IEamScheduleJobCloud eamScheduleJobCloud; + /** * 根据来源切换定时任务服务 * @@ -129,6 +135,8 @@ public class SysTaskCycleController extends CoreBaseController { quartzJobService = andonScheduleJobCloud; }else if (source == CommonEnumUtil.SOFT_TYPE.QMS.getValue()) { quartzJobService = qmsScheduleJobCloud; + }else if (source == CommonEnumUtil.SOFT_TYPE.EAM.getValue()) { + quartzJobService = eamScheduleJobCloud; } return quartzJobService; } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java index 8fc4bee..c1be42a 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java @@ -7,6 +7,7 @@ import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskService; import cn.estsh.i3plus.ext.qms.icloud.sdk.IQmsCommonCloud; import cn.estsh.i3plus.ext.qms.icloud.sdk.IQmsScheduleJobCloud; import cn.estsh.i3plus.icloud.andon.sdk.IAndonScheduleJobCloud; +import cn.estsh.i3plus.icloud.eam.sdk.IEamScheduleJobCloud; import cn.estsh.i3plus.icloud.mes.pcn.sdk.IMesPcnScheduleJobCloud; import cn.estsh.i3plus.icloud.mes.sdk.IMesScheduleJobCloud; import cn.estsh.i3plus.icloud.ptl.sdk.IPtlScheduleJobCloud; @@ -128,6 +129,9 @@ public class SysTaskPlanController extends CoreBaseController { @Autowired private IQmsScheduleJobCloud qmsScheduleJobCloud; + @Autowired + private IEamScheduleJobCloud eamScheduleJobCloud; + /** @@ -164,6 +168,8 @@ public class SysTaskPlanController extends CoreBaseController { quartzJobService = screenScheduleJobCloud; }else if (source == CommonEnumUtil.SOFT_TYPE.QMS.getValue()) { quartzJobService = qmsScheduleJobCloud; + }else if (source == CommonEnumUtil.SOFT_TYPE.EAM.getValue()) { + quartzJobService = eamScheduleJobCloud; } return quartzJobService; } diff --git a/modules/i3plus-core-apiservice/src/main/resources/application.properties b/modules/i3plus-core-apiservice/src/main/resources/application.properties index 5bb95b9..0828a0c 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application.properties @@ -44,7 +44,7 @@ impp.app.pojo-mongo-dao=${impp.app.base-packages}.**.apiservice.daomongo #\u5BF9\u8C61\u6301\u4E45\u5316\u5305\u8DEF\u5F84\uFF0C\u53EF\u4EE5\u591A\u4E2A\u5305\uFF0C\u9017\u53F7\u5206\u9694 impp.app.pojo-repository=${impp.app.pojo-packages}.**.repository #mongodb\u8D44\u6E90\u4ED3go -impp.app.pojo-mongo-repository=${impp.app.pojo-packages}.**.repositorymon +#impp.app.pojo-mongo-repository=${impp.app.pojo-packages}.**.repositorymon ###\u4E8C\u5F00\u9879\u76EE\u7684iCloud impp.icloud.ext-packages=cn.estsh.i3plus.ext.**.icloud.** diff --git a/pom.xml b/pom.xml index 2f5c88e..1398111 100644 --- a/pom.xml +++ b/pom.xml @@ -39,6 +39,7 @@ 1.8 1.0-TEST-SNAPSHOT 1.0.0.1 + 1.0.0.1 2.17.0 @@ -127,6 +128,12 @@ ${qms.icloud.version} + + i3plus.eam + i3plus-eam-icloud + ${eam.icloud.version} + + i3plus.pojo From c69deadbf03125153038db49877066b310b6af3d Mon Sep 17 00:00:00 2001 From: nies Date: Thu, 28 Apr 2022 17:33:55 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E7=B1=BB=E5=9E=8B,=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/busi/PersonnelController.java | 16 +++++++++---- .../controller/busi/SysUserController.java | 7 ++++-- .../base/login/strategy/DefaultLoginStrategy.java | 16 +++++++++++-- .../base/login/strategy/E9LoginStrategy.java | 10 +++++++- .../base/login/strategy/NameLoginStrategy.java | 10 +++++++- .../serviceimpl/busi/SysUserService.java | 28 ++++++++++++++++++++-- 6 files changed, 74 insertions(+), 13 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 d274658..2b41b1f 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 @@ -116,7 +116,7 @@ public class PersonnelController extends CoreBaseController { } info.setUserInfoStatus(CommonEnumUtil.USER_INFO_STATUS.INCUMBENT.getValue()); - if (info.getUserLoginNum() == null){ + if (info.getUserLoginNum() == null) { info.setUserLoginNum(0); } info.setIsValid(CommonEnumUtil.IS_VAILD.VAILD.getValue()); @@ -125,7 +125,7 @@ public class PersonnelController extends CoreBaseController { user.setUserType(CommonEnumUtil.USER_TYPE.USER.getValue()); user.setUserStatus(CommonEnumUtil.USER_STATUS.ENABLE.getValue()); user.setIsValid(CommonEnumUtil.IS_VAILD.VAILD.getValue()); - if (user.getUserLoginNum() == null){ + if (user.getUserLoginNum() == null) { user.setUserLoginNum(0); } ConvertBean.modelInitialize(user, AuthUtil.getSessionUser()); @@ -161,7 +161,7 @@ public class PersonnelController extends CoreBaseController { //松下需要创建的新用户 第一次登陆系统就要重置密码 // user.setUserPasswordLastModifyTime(TimeTool.getNowTime(true)); refreshSysUserPassword(user); - SysUser userSaved=personnelService.saveSysUser(user); + SysUser userSaved = personnelService.saveSysUser(user); // 添加保存passwordId进SysUser表 SysUserPassword pwd = new SysUserPassword(); @@ -264,6 +264,12 @@ 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()); + } + // 关系 刷新 refreshRef(sysUser, userInfo, model); @@ -728,9 +734,9 @@ public class PersonnelController extends CoreBaseController { .notNull("infoDepartmentId", model.getInfoDepartmentId()) .notNull("userDepartmentId", model.getUserDepartmentId()) .notNull("userLoginName", model.getUserLoginName()); - // FIXME 松下移除邮箱校验 + // FIXME 松下移除邮箱校验 // .notNull("userEmail", model.getUserEmail()) - // FIXME 松下移除手机号校验 + // FIXME 松下移除手机号校验 // .notNull("userPhone", model.getUserPhone()); } 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 9d2abad..facbd68 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 @@ -29,6 +29,7 @@ import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ImppRedis; +import cn.estsh.impp.framework.boot.util.RedisCacheTool; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; @@ -583,7 +584,8 @@ public class SysUserController extends CoreBaseController { SysUser user = sysUserService.getSysUserById(Long.parseLong(id)); if (user != null) { Integer num = personnelService.checkSysUserResetPassword(user); - num = CommonConstWords.CONFIG_PWD_RESET_PASSWORD_DEFAULT - num; + int numMax = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_PWD_RESET_PASSWORD, CommonConstWords.CONFIG_PWD_RESET_PASSWORD_DEFAULT); + num = numMax - num; // String password = RandomStringUtils.random(6, true, false); @@ -642,7 +644,8 @@ public class SysUserController extends CoreBaseController { SysUser user = sysUserService.getSysUserById(Long.parseLong(id)); if (user != null) { Integer num = personnelService.checkSysUserResetPassword(user); - num = CommonConstWords.CONFIG_PWD_RESET_PASSWORD_DEFAULT - num; + int numMax = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_PWD_RESET_PASSWORD, CommonConstWords.CONFIG_PWD_RESET_PASSWORD_DEFAULT); + num = numMax - num; userPasswordService.updatePasswordResetLastModifyTime(user.getId(), password, true); LOGGER.info("系统提示:{} 使用密码重置功能帮{}重置了{}账号的密码,新密码是:{}", diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java index 68b4c2c..32c4a09 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java @@ -11,6 +11,7 @@ import cn.estsh.i3plus.pojo.platform.bean.SessionUser; import cn.estsh.i3plus.pojo.platform.bean.SysConfig; import cn.estsh.i3plus.pojo.platform.bean.SysUser; import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.auth.filter.UserFilter; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.util.ImppRedis; import cn.estsh.impp.framework.boot.util.RedisCacheTool; @@ -18,6 +19,7 @@ import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.authc.CredentialsException; import org.apache.shiro.authc.ExpiredCredentialsException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -66,9 +68,19 @@ public class DefaultLoginStrategy implements ISystemLoginStrategyService { ValidatorBean.checkNotNull(loginModel.getLoginName(), "用户名不能为空"); ValidatorBean.checkNotNull(loginModel.getLoginPwd(), "密码不能为空"); - int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); +// int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); + SysUser dbUser = userService.getSysUserByLoginName(loginModel.getLoginName().trim()); + if (dbUser == null) { + throw new CredentialsException("用户不存在"); + } + int sessionMode = UserFilter.getSessionModeByUserAccountType(dbUser.getUserAccountType()); if (sessionMode != CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) { - AuthUtil.logout(); + if (sessionMode == CommonEnumUtil.SESSION_MODE.OVERWRITE.getValue()){ + log.info("session Mode 是{},可以多端登录",sessionMode); + }else{ + log.info("session Mode 是{},把上一个用户挤下线",sessionMode); + AuthUtil.logout(); + } } // 已经对用户名和密码做过验证了 // 获取系统参数【密码过期时间】 进行密码有效时间判断 diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java index eeab8b7..3597acb 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java @@ -12,12 +12,15 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; import cn.estsh.i3plus.pojo.model.platform.SysLoginModel; import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysUser; import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.auth.filter.UserFilter; import cn.estsh.impp.framework.boot.util.ImppRedis; import cn.estsh.impp.framework.boot.util.RedisCacheTool; import cn.estsh.impp.framework.boot.util.ResultBean; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; +import org.apache.shiro.authc.CredentialsException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -69,7 +72,12 @@ public class E9LoginStrategy implements ISystemLoginStrategyService { BaseThreadLocal.setData(BaseThreadLocal.LANGUAGE_CODE, loginModel.getLanguageCode()); BaseThreadLocal.setData(PlatformConstWords.AUTH_LOGIN_STRATEGY, ImppEnumUtil.AUTH_LOGIN_STRATEGY.E9.getCode()); - int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); +// int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); + SysUser dbUser = userService.getSysUserByLoginName(loginModel.getLoginName().trim()); + if (dbUser == null) { + throw new CredentialsException("用户不存在"); + } + int sessionMode = UserFilter.getSessionModeByUserAccountType(dbUser.getUserAccountType()); if (sessionMode != CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) { AuthUtil.logout(); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/NameLoginStrategy.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/NameLoginStrategy.java index 77cb826..5095c7c 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/NameLoginStrategy.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/NameLoginStrategy.java @@ -12,12 +12,15 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; import cn.estsh.i3plus.pojo.model.platform.SysLoginModel; import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysUser; import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.auth.filter.UserFilter; import cn.estsh.impp.framework.boot.util.ImppRedis; import cn.estsh.impp.framework.boot.util.RedisCacheTool; import cn.estsh.impp.framework.boot.util.ResultBean; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; +import org.apache.shiro.authc.CredentialsException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -65,7 +68,12 @@ public class NameLoginStrategy implements ISystemLoginStrategyService { BaseThreadLocal.setData(BaseThreadLocal.LANGUAGE_CODE, loginModel.getLanguageCode()); BaseThreadLocal.setData(PlatformConstWords.AUTH_LOGIN_STRATEGY, ImppEnumUtil.AUTH_LOGIN_STRATEGY.NAME.getCode()); - int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); +// int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); + SysUser dbUser = userService.getSysUserByLoginName(loginModel.getLoginName().trim()); + if (dbUser == null) { + throw new CredentialsException("用户不存在"); + } + int sessionMode = UserFilter.getSessionModeByUserAccountType(dbUser.getUserAccountType()); if (sessionMode != CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) { AuthUtil.logout(); } 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 07f26af..9b1e223 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 @@ -28,6 +28,7 @@ import cn.estsh.i3plus.pojo.platform.repository.SysUserInfoRepository; import cn.estsh.i3plus.pojo.platform.repository.SysUserRepository; import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.auth.filter.UserFilter; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.*; @@ -130,7 +131,6 @@ public class SysUserService implements ISysUserService { SysUser user = null; ResultBean resultBean = ResultBean.fail(); try { - BaseToken token = getToken(loginName, password, languageCode, loginPlatform); user = this.getSysUserByLoginName(loginName); if (user == null) { throw new CredentialsException("用户不存在"); @@ -144,10 +144,13 @@ public class SysUserService implements ISysUserService { resultBean = result; return resultBean; } + BaseToken token = getToken(loginName, password, languageCode, loginPlatform); sessionUser = AuthUtil.login(token); // 判断会话模式 - checkSessionMode(loginPlatform, user.getId()); +// checkSessionMode(loginPlatform, user.getId()); + + checkSessionMode(loginPlatform, user); packSessionUser(sessionUser, user, user.getUserType(), loginPlatform, languageCode, deviceId); packConfigSessionUser(sessionUser, user); @@ -233,6 +236,27 @@ public class SysUserService implements ISysUserService { } } + private void checkSessionMode(Integer loginPlatform, SysUser sysUser) { +// int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); + int sessionMode = UserFilter.getSessionModeByUserAccountType(sysUser.getUserAccountType()); + String redisKey; + if (sessionMode == CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) { + redisKey = CommonConstWords.SESSION_USER + ":*_" + sysUser.getId(); + } else { + return; + } + + List ds = redisSession.findObject(redisKey); + if (CollectionUtils.isNotEmpty(ds)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.LOGIN_EXCEPTION_LOGGED.getCode()) + .setErrorDetail("用户已在其他设备登录,无法同时登录!") + .setErrorSolution("请联系管理员") + .build(); + } + } + @Override public BaseToken getToken(String loginName, String password, String languageCode, Integer loginPlatform) { SysUser user = this.getSysUserByLoginName(loginName);