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..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 @@ -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,55 @@ 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 = null; + try { + user = sysUserService.getSysUserByLoginNameAndEmail(sysUser.getUserLoginName(), sysUser.getUserEmail()); + } catch (ImppBusiException e) { + return ResultBean.fail(e.getMessage()); + } + 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..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 @@ -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,24 @@ 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); + + 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 @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(); }