feat: 一些调整
This commit is contained in:
parent
cfc9b461da
commit
1f7e2ca89d
|
|
@ -21,16 +21,22 @@ import com.nflg.mobilebroken.repository.service.ITBaseDepartmentService;
|
||||||
import com.nflg.mobilebroken.repository.service.ITBasePositionService;
|
import com.nflg.mobilebroken.repository.service.ITBasePositionService;
|
||||||
import com.nflg.mobilebroken.starter.annotation.MethodInfoMark;
|
import com.nflg.mobilebroken.starter.annotation.MethodInfoMark;
|
||||||
import com.nflg.mobilebroken.starter.service.EmailService;
|
import com.nflg.mobilebroken.starter.service.EmailService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import javax.mail.MessagingException;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.NotEmpty;
|
import javax.validation.constraints.NotEmpty;
|
||||||
|
import java.nio.charset.Charset;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
|
import java.util.Base64;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -39,8 +45,12 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/adminuser")
|
@RequestMapping("/adminuser")
|
||||||
|
@Slf4j
|
||||||
public class AdminUserController extends ControllerBase {
|
public class AdminUserController extends ControllerBase {
|
||||||
|
|
||||||
|
@Value("${email.activate.admin.url}")
|
||||||
|
private String activateUrl;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private IAdminUserService adminUserService;
|
private IAdminUserService adminUserService;
|
||||||
|
|
||||||
|
|
@ -87,7 +97,15 @@ public class AdminUserController extends ControllerBase {
|
||||||
@MethodInfoMark(value = "新增账号", menuName = "账号管理")
|
@MethodInfoMark(value = "新增账号", menuName = "账号管理")
|
||||||
@ApiMark(moduleName = "账号管理", apiName = "新增账号")
|
@ApiMark(moduleName = "账号管理", apiName = "新增账号")
|
||||||
public ApiResult<Void> addAccount(@Valid @RequestBody AccountAddRequest request) {
|
public ApiResult<Void> addAccount(@Valid @RequestBody AccountAddRequest request) {
|
||||||
|
request.setPassword(RandomUtil.randomString(6));
|
||||||
adminUserService.add(request);
|
adminUserService.add(request);
|
||||||
|
try {
|
||||||
|
String email = request.getEmail();
|
||||||
|
emailService.sendEmail(email, "新增账号",
|
||||||
|
"您的账号已创建,随机码为:" + request.getPassword() + ",点击链接激活账号: " + activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()));
|
||||||
|
} catch (MessagingException e) {
|
||||||
|
log.error("发送邮件失败", e);
|
||||||
|
}
|
||||||
return ApiResult.success();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -138,20 +156,20 @@ public class AdminUserController extends ControllerBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 重置密码
|
* 发送重置密码邮件
|
||||||
* @param ids 用户id列表
|
* @param ids 用户id列表
|
||||||
**/
|
**/
|
||||||
@Transactional
|
@Transactional
|
||||||
@PostMapping("resetPassword")
|
@PostMapping("sendResetPasswordEmail")
|
||||||
@MethodInfoMark(value = "重置密码", menuName = "账号管理")
|
@ApiMark(moduleName = "账号管理", apiName = "发送重置密码邮件", isPublic = true)
|
||||||
@ApiMark(moduleName = "账号管理", apiName = "重置密码")
|
|
||||||
//@SaUserCheckRole("primary")
|
//@SaUserCheckRole("primary")
|
||||||
public ApiResult<Void> resetPassword(@Valid @RequestBody @NotEmpty List<Integer> ids) {
|
public ApiResult<Void> sendResetPasswordEmail(@Valid @RequestBody @NotEmpty List<Integer> ids) {
|
||||||
try {
|
try {
|
||||||
for (Integer id : ids) {
|
for (Integer id : ids) {
|
||||||
String password = RandomUtil.randomString(6);
|
String password = RandomUtil.randomString(6);
|
||||||
String email = adminUserService.resetPassword(id, password);
|
String email = adminUserService.resetPassword(id, password);
|
||||||
emailService.sendEmail(email, "密码重置", "您的新密码为: " + password);
|
emailService.sendEmail(email, "密码重置",
|
||||||
|
"随机码为:" + password + ",点击链接激活账号: " + activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()));
|
||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
throw new NflgException(STATE.BusinessError, "发送邮件失败:" + ex.getMessage());
|
throw new NflgException(STATE.BusinessError, "发送邮件失败:" + ex.getMessage());
|
||||||
|
|
@ -159,6 +177,49 @@ public class AdminUserController extends ControllerBase {
|
||||||
return ApiResult.success();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 忘记密码
|
||||||
|
* @param email 邮件地址
|
||||||
|
**/
|
||||||
|
@Transactional
|
||||||
|
@PostMapping("forgetPassword")
|
||||||
|
@ApiMark(moduleName = "账号管理", apiName = "忘记密码", isPublic = true)
|
||||||
|
public ApiResult<Void> forgetPassword(@Valid @RequestParam @NotBlank String email) {
|
||||||
|
try {
|
||||||
|
String password = RandomUtil.randomString(6);
|
||||||
|
adminUserService.forgetPassword(email, password);
|
||||||
|
emailService.sendEmail(email, "忘记密码",
|
||||||
|
"随机码为:" + password + ",点击链接激活账号: " + activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()));
|
||||||
|
} catch (Exception ex) {
|
||||||
|
throw new NflgException(STATE.BusinessError, "发送邮件失败:" + ex.getMessage());
|
||||||
|
}
|
||||||
|
return ApiResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据code获取email
|
||||||
|
*
|
||||||
|
* @param code 代码
|
||||||
|
* @return email
|
||||||
|
*/
|
||||||
|
@GetMapping("getEmailFromCode")
|
||||||
|
@ApiMark(moduleName = "账号管理", apiName = "根据code获取email", isPublic = true)
|
||||||
|
private ApiResult<String> getEmailFromCode(@Valid @NotBlank @RequestParam("code") String code) {
|
||||||
|
return ApiResult.success(StrUtil.str(Base64.getUrlDecoder().decode(code), Charset.defaultCharset()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 激活账号
|
||||||
|
*
|
||||||
|
* @param request 请求信息
|
||||||
|
**/
|
||||||
|
@PostMapping("activateUser")
|
||||||
|
@ApiMark(moduleName = "账号管理", apiName = "激活账号", isPublic = true)
|
||||||
|
public ApiResult<Void> activateUser(@Valid @RequestBody UserActivateRequest request) {
|
||||||
|
adminUserService.activateUser(request);
|
||||||
|
return ApiResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生成微信服务号关注二维码
|
* 生成微信服务号关注二维码
|
||||||
*/
|
*/
|
||||||
|
|
@ -181,11 +242,11 @@ public class AdminUserController extends ControllerBase {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新密码
|
* 更新密码
|
||||||
*
|
|
||||||
* @param request 请求信息
|
* @param request 请求信息
|
||||||
* @return 更新结果
|
* @return 更新结果
|
||||||
**/
|
**/
|
||||||
@PostMapping("updatePassword")
|
@PostMapping("updatePassword")
|
||||||
|
@ApiMark(moduleName = "账号管理", apiName = "更新密码")
|
||||||
public ApiResult<Void> updatePassword(@Valid @RequestBody UpdatePasswordRequest request) {
|
public ApiResult<Void> updatePassword(@Valid @RequestBody UpdatePasswordRequest request) {
|
||||||
String redisKey = StrUtil.format(Constant.REDIS_KEY_USER_UPDATE_KAPTCHA_ADMIN, request.getEmail());
|
String redisKey = StrUtil.format(Constant.REDIS_KEY_USER_UPDATE_KAPTCHA_ADMIN, request.getEmail());
|
||||||
String captcha = redisTemplate.opsForValue().get(redisKey);
|
String captcha = redisTemplate.opsForValue().get(redisKey);
|
||||||
|
|
@ -201,6 +262,7 @@ public class AdminUserController extends ControllerBase {
|
||||||
* 发送修改密码验证码邮件
|
* 发送修改密码验证码邮件
|
||||||
**/
|
**/
|
||||||
@PostMapping("sendUpdatePasswordCaptchaEmail")
|
@PostMapping("sendUpdatePasswordCaptchaEmail")
|
||||||
|
@ApiMark(moduleName = "账号管理", apiName = "发送修改密码验证码邮件")
|
||||||
public ApiResult<Void> sendUpdatePasswordCaptchaEmail() {
|
public ApiResult<Void> sendUpdatePasswordCaptchaEmail() {
|
||||||
try {
|
try {
|
||||||
String email = AdminUserUtil.getEmail();
|
String email = AdminUserUtil.getEmail();
|
||||||
|
|
|
||||||
|
|
@ -15,12 +15,14 @@ import com.nflg.mobilebroken.repository.service.ITBaseCustomerService;
|
||||||
import com.nflg.mobilebroken.starter.annotation.MethodInfoMark;
|
import com.nflg.mobilebroken.starter.annotation.MethodInfoMark;
|
||||||
import com.nflg.mobilebroken.starter.service.EmailService;
|
import com.nflg.mobilebroken.starter.service.EmailService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.mail.MessagingException;
|
import javax.mail.MessagingException;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.util.Base64;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -32,6 +34,9 @@ import java.util.List;
|
||||||
@RequestMapping("/appuser")
|
@RequestMapping("/appuser")
|
||||||
public class AppUserController extends ControllerBase {
|
public class AppUserController extends ControllerBase {
|
||||||
|
|
||||||
|
@Value("${email.activate.app.url}")
|
||||||
|
private String activateUrl;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private IAppUserService appUserService;
|
private IAppUserService appUserService;
|
||||||
|
|
||||||
|
|
@ -78,7 +83,9 @@ public class AppUserController extends ControllerBase {
|
||||||
request.setPassword(RandomUtil.randomNumbers(6));
|
request.setPassword(RandomUtil.randomNumbers(6));
|
||||||
appUserService.addPrimaryAppUser(request);
|
appUserService.addPrimaryAppUser(request);
|
||||||
try {
|
try {
|
||||||
emailService.sendEmail(request.getEmail(), "账号开通", "您的账号已开通,密码为:" + request.getPassword());
|
String email = request.getEmail();
|
||||||
|
emailService.sendEmail(email, "账号开通",
|
||||||
|
"您的账号已开通,随机码为:" + request.getPassword() + ",点击链接激活账号: " + activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()));
|
||||||
} catch (MessagingException e) {
|
} catch (MessagingException e) {
|
||||||
log.error("发送邮件失败", e);
|
log.error("发送邮件失败", e);
|
||||||
}
|
}
|
||||||
|
|
@ -120,7 +127,9 @@ public class AppUserController extends ControllerBase {
|
||||||
AppUserApplyfor applyfor = appUserApplyforService.getById(request.getId());
|
AppUserApplyfor applyfor = appUserApplyforService.getById(request.getId());
|
||||||
if (applyfor.getType() == AppUserApplyforType.ADD.getState().byteValue()) {
|
if (applyfor.getType() == AppUserApplyforType.ADD.getState().byteValue()) {
|
||||||
try {
|
try {
|
||||||
emailService.sendEmail(applyfor.getUserEmail(), "账号审核通过", "您的账号审核通过,密码为:" + request.getPassword());
|
String email = applyfor.getUserEmail();
|
||||||
|
emailService.sendEmail(email, "账号审核通过",
|
||||||
|
"您的账号审核通过,随机码为:" + request.getPassword() + ",点击链接激活账号: " + activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()));
|
||||||
} catch (MessagingException e) {
|
} catch (MessagingException e) {
|
||||||
log.error("发送邮件失败", e);
|
log.error("发送邮件失败", e);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package com.nflg.mobilebroken.auth.controller;
|
||||||
import cn.dev33.satoken.stp.SaLoginConfig;
|
import cn.dev33.satoken.stp.SaLoginConfig;
|
||||||
import cn.dev33.satoken.stp.SaTokenInfo;
|
import cn.dev33.satoken.stp.SaTokenInfo;
|
||||||
import com.nflg.mobilebroken.common.constant.STATE;
|
import com.nflg.mobilebroken.common.constant.STATE;
|
||||||
|
import com.nflg.mobilebroken.common.constant.UserState;
|
||||||
import com.nflg.mobilebroken.common.pojo.ApiResult;
|
import com.nflg.mobilebroken.common.pojo.ApiResult;
|
||||||
import com.nflg.mobilebroken.common.pojo.vo.PermissionsVO;
|
import com.nflg.mobilebroken.common.pojo.vo.PermissionsVO;
|
||||||
import com.nflg.mobilebroken.common.util.AdminUserUtil;
|
import com.nflg.mobilebroken.common.util.AdminUserUtil;
|
||||||
|
|
@ -48,7 +49,8 @@ public class AdminController extends ControllerBase {
|
||||||
@Valid @NotBlank(message = "密码不能为空") @RequestParam("password") String password) {
|
@Valid @NotBlank(message = "密码不能为空") @RequestParam("password") String password) {
|
||||||
AdminUser user=adminUserService.getUser(userName,password);
|
AdminUser user=adminUserService.getUser(userName,password);
|
||||||
VUtils.trueThrow(Objects.isNull(user)).throwMessage(STATE.PassportErr,"用户名或密码错误");
|
VUtils.trueThrow(Objects.isNull(user)).throwMessage(STATE.PassportErr,"用户名或密码错误");
|
||||||
VUtils.trueThrow(!user.getEnable()).throwMessage(STATE.PassportErr, "用户被禁用,请联系管理员");
|
VUtils.trueThrow(Objects.equals(user.getState(), UserState.Disabled.getState())).throwMessage(STATE.PassportErr, "账户被禁用,请联系管理员");
|
||||||
|
VUtils.trueThrow(Objects.equals(user.getState(), UserState.ToBeActivated.getState())).throwMessage(STATE.PassportErr, "账户未激活");
|
||||||
List<String> roleCodes = adminUserRoleMapService.getRoleList(user.getId());
|
List<String> roleCodes = adminUserRoleMapService.getRoleList(user.getId());
|
||||||
SaTokenAdminUtil.login(user.getId(), SaLoginConfig
|
SaTokenAdminUtil.login(user.getId(), SaLoginConfig
|
||||||
.setExtra("from", "admin")
|
.setExtra("from", "admin")
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import cn.dev33.satoken.stp.SaTokenInfo;
|
||||||
import cn.dev33.satoken.stp.StpUtil;
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.nflg.mobilebroken.common.constant.STATE;
|
import com.nflg.mobilebroken.common.constant.STATE;
|
||||||
|
import com.nflg.mobilebroken.common.constant.UserState;
|
||||||
import com.nflg.mobilebroken.common.pojo.ApiResult;
|
import com.nflg.mobilebroken.common.pojo.ApiResult;
|
||||||
import com.nflg.mobilebroken.common.util.SaTokenAppUtil;
|
import com.nflg.mobilebroken.common.util.SaTokenAppUtil;
|
||||||
import com.nflg.mobilebroken.common.util.VUtils;
|
import com.nflg.mobilebroken.common.util.VUtils;
|
||||||
|
|
@ -41,7 +42,8 @@ public class AppController extends ControllerBase {
|
||||||
public ApiResult<SaTokenInfo> login(String userName, String password) {
|
public ApiResult<SaTokenInfo> login(String userName, String password) {
|
||||||
AppUser user=appUserService.getUser(userName,password);
|
AppUser user=appUserService.getUser(userName,password);
|
||||||
VUtils.trueThrow(Objects.isNull(user)).throwMessage(STATE.PassportErr,"用户名或密码错误");
|
VUtils.trueThrow(Objects.isNull(user)).throwMessage(STATE.PassportErr,"用户名或密码错误");
|
||||||
VUtils.trueThrow(!user.getEnable()).throwMessage(STATE.PassportErr,"用户未启用,请联系管理员");
|
VUtils.trueThrow(Objects.equals(user.getState(), UserState.Disabled.getState())).throwMessage(STATE.PassportErr, "账户被禁用,请联系管理员");
|
||||||
|
VUtils.trueThrow(Objects.equals(user.getState(), UserState.ToBeActivated.getState())).throwMessage(STATE.PassportErr, "账户未激活");
|
||||||
VUtils.trueThrow(user.getExpireTime().isBefore(ChronoLocalDate.from(LocalDateTime.now()))).throwMessage(STATE.PassportErr, "用户已过期,请联系管理员");
|
VUtils.trueThrow(user.getExpireTime().isBefore(ChronoLocalDate.from(LocalDateTime.now()))).throwMessage(STATE.PassportErr, "用户已过期,请联系管理员");
|
||||||
SaTokenAppUtil.login(user.getId(), SaLoginConfig
|
SaTokenAppUtil.login(user.getId(), SaLoginConfig
|
||||||
.setExtra("from", "app")
|
.setExtra("from", "app")
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,8 @@ import com.nflg.mobilebroken.repository.service.IAppUserService;
|
||||||
import com.nflg.mobilebroken.repository.service.ITBaseCustomerService;
|
import com.nflg.mobilebroken.repository.service.ITBaseCustomerService;
|
||||||
import com.nflg.mobilebroken.repository.service.ITBasePositionService;
|
import com.nflg.mobilebroken.repository.service.ITBasePositionService;
|
||||||
import com.nflg.mobilebroken.starter.service.EmailService;
|
import com.nflg.mobilebroken.starter.service.EmailService;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.cloud.context.config.annotation.RefreshScope;
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
@ -28,8 +30,11 @@ import org.springframework.web.bind.annotation.*;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.NotEmpty;
|
import javax.validation.constraints.NotEmpty;
|
||||||
|
import java.nio.charset.Charset;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
|
import java.util.Base64;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
@ -40,9 +45,13 @@ import java.util.stream.Collectors;
|
||||||
**/
|
**/
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/user")
|
@RequestMapping("/user")
|
||||||
|
@RefreshScope
|
||||||
//@SaUserCheckLogin
|
//@SaUserCheckLogin
|
||||||
public class UserController extends ControllerBase {
|
public class UserController extends ControllerBase {
|
||||||
|
|
||||||
|
@Value("${email.activate.app.url}")
|
||||||
|
private String activateUrl;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private IAppUserService appUserService;
|
private IAppUserService appUserService;
|
||||||
|
|
||||||
|
|
@ -73,6 +82,23 @@ public class UserController extends ControllerBase {
|
||||||
return ApiResult.success(appUserService.getInfo(AppUserUtil.getUserId()));
|
return ApiResult.success(appUserService.getInfo(AppUserUtil.getUserId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送更新密码验证码邮件
|
||||||
|
**/
|
||||||
|
@PostMapping("sendUpdatePasswordCaptchaEmail")
|
||||||
|
public ApiResult<Void> sendUpdatePasswordCaptchaEmail() {
|
||||||
|
try {
|
||||||
|
String email = AppUserUtil.getEmail();
|
||||||
|
String kaptcha = RandomUtil.randomString(6);
|
||||||
|
// 将生成的验证码存入redis
|
||||||
|
redisTemplate.opsForValue().set(StrUtil.format(Constant.REDIS_KEY_USER_UPDATE_KAPTCHA_APP, email), kaptcha, Duration.ofMinutes(10));
|
||||||
|
emailService.sendEmail(email, "您正在申请修改密码", "验证码为: " + kaptcha);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
throw new NflgException(STATE.BusinessError, "发送邮件失败:" + ex.getMessage());
|
||||||
|
}
|
||||||
|
return ApiResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新密码
|
* 更新密码
|
||||||
* @param request 请求信息
|
* @param request 请求信息
|
||||||
|
|
@ -175,6 +201,25 @@ public class UserController extends ControllerBase {
|
||||||
return ApiResult.success(appUserService.removeByIds(ids));
|
return ApiResult.success(appUserService.removeByIds(ids));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 忘记密码
|
||||||
|
*
|
||||||
|
* @param email 邮件地址
|
||||||
|
**/
|
||||||
|
@Transactional
|
||||||
|
@PostMapping("forgetPassword")
|
||||||
|
public ApiResult<Void> forgetPassword(@Valid @RequestParam @NotBlank String email) {
|
||||||
|
try {
|
||||||
|
String password = RandomUtil.randomString(6);
|
||||||
|
appUserService.forgetPassword(email, password);
|
||||||
|
emailService.sendEmail(email, "忘记密码",
|
||||||
|
"随机码为:" + password + ",点击链接激活账号: " + activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()));
|
||||||
|
} catch (Exception ex) {
|
||||||
|
throw new NflgException(STATE.BusinessError, "发送邮件失败:" + ex.getMessage());
|
||||||
|
}
|
||||||
|
return ApiResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送重置密码邮件
|
* 发送重置密码邮件
|
||||||
* @param ids 用户id列表
|
* @param ids 用户id列表
|
||||||
|
|
@ -187,7 +232,8 @@ public class UserController extends ControllerBase {
|
||||||
for (Integer id : ids) {
|
for (Integer id : ids) {
|
||||||
String password=RandomUtil.randomString(6);
|
String password=RandomUtil.randomString(6);
|
||||||
String email=appUserService.resetPassword(id,password);
|
String email=appUserService.resetPassword(id,password);
|
||||||
emailService.sendEmail(email,"密码重置","您的新密码为: "+password);
|
emailService.sendEmail(email, "密码重置",
|
||||||
|
"随机码为:" + password + ",点击链接激活账号: " + activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()));
|
||||||
}
|
}
|
||||||
}catch (Exception ex){
|
}catch (Exception ex){
|
||||||
throw new NflgException(STATE.BusinessError,"发送邮件失败:"+ex.getMessage());
|
throw new NflgException(STATE.BusinessError,"发送邮件失败:"+ex.getMessage());
|
||||||
|
|
@ -196,19 +242,24 @@ public class UserController extends ControllerBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送修改密码验证码邮件
|
* 根据code获取email
|
||||||
|
*
|
||||||
|
* @param code 代码
|
||||||
|
* @return email
|
||||||
|
*/
|
||||||
|
@GetMapping("getEmailFromCode")
|
||||||
|
private ApiResult<String> getEmailFromCode(@Valid @NotBlank @RequestParam("code") String code) {
|
||||||
|
return ApiResult.success(StrUtil.str(Base64.getUrlDecoder().decode(code), Charset.defaultCharset()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 激活用户
|
||||||
|
*
|
||||||
|
* @param request 请求信息
|
||||||
**/
|
**/
|
||||||
@PostMapping("sendUpdatePasswordCaptchaEmail")
|
@PostMapping("activateUser")
|
||||||
public ApiResult<Void> sendUpdatePasswordCaptchaEmail() {
|
public ApiResult<Void> activateUser(@Valid @RequestBody UserActivateRequest request) {
|
||||||
try {
|
appUserService.activateUser(request);
|
||||||
String email = "rakor2010@gmail.com"; //AppUserUtil.getEmail();
|
|
||||||
String kaptcha = RandomUtil.randomString(6);
|
|
||||||
// 将生成的验证码存入redis
|
|
||||||
redisTemplate.opsForValue().set(StrUtil.format(Constant.REDIS_KEY_USER_UPDATE_KAPTCHA_APP, email), kaptcha, Duration.ofMinutes(10));
|
|
||||||
emailService.sendEmail(email, "您正在申请修改密码", "验证码为: " + kaptcha);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
throw new NflgException(STATE.BusinessError, "发送邮件失败:" + ex.getMessage());
|
|
||||||
}
|
|
||||||
return ApiResult.success();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.nio.charset.Charset;
|
||||||
|
import java.util.Base64;
|
||||||
|
|
||||||
|
public class CodeTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test1() {
|
||||||
|
String text = "dasdasdasdasdasd23432";
|
||||||
|
String encode = Base64.getUrlEncoder().encodeToString(text.getBytes());
|
||||||
|
String decode = StrUtil.str(Base64.getUrlDecoder().decode(encode), Charset.defaultCharset());
|
||||||
|
Assert.assertEquals(text, decode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -12,9 +12,11 @@ public class Constant {
|
||||||
|
|
||||||
public static final String DICTIONARY_TYPE_TITLE_CQM = "CQM";
|
public static final String DICTIONARY_TYPE_TITLE_CQM = "CQM";
|
||||||
|
|
||||||
public static final String REDIS_KEY_USER_UPDATE_KAPTCHA_APP = "kaptcha:userupdate:app:{}";
|
public static final String REDIS_KEY_USER_RESETPASSWORD_RANDOM_CODE_APP = "app:kaptcha:user:resetpassword:{}";
|
||||||
|
|
||||||
public static final String REDIS_KEY_USER_UPDATE_KAPTCHA_ADMIN = "kaptcha:userupdate:admin:{}";
|
public static final String REDIS_KEY_USER_UPDATE_KAPTCHA_APP = "app:kaptcha:user:update:{}";
|
||||||
|
|
||||||
|
public static final String REDIS_KEY_USER_UPDATE_KAPTCHA_ADMIN = "admin:kaptcha:user:update:{}";
|
||||||
|
|
||||||
public static final String REDIS_KEY_MESSAGECONFIG_WX = "wxNotifyEnabled";
|
public static final String REDIS_KEY_MESSAGECONFIG_WX = "wxNotifyEnabled";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
package com.nflg.mobilebroken.common.constant;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum UserState {
|
||||||
|
|
||||||
|
ToBeActivated((byte) 0, "待激活"),
|
||||||
|
Activated((byte) 1, "已启用"),
|
||||||
|
Disabled((byte) 2, "已禁用");
|
||||||
|
|
||||||
|
private final Byte state;
|
||||||
|
private final String description;
|
||||||
|
|
||||||
|
public static UserState findByValue(Byte value) {
|
||||||
|
for (UserState valueEnum : UserState.values()) {
|
||||||
|
if (valueEnum.getState().equals(value)) {
|
||||||
|
return valueEnum;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package com.nflg.mobilebroken.common.pojo.request;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class AccountActivationRequest {
|
||||||
|
|
||||||
|
//随机码
|
||||||
|
@NotBlank
|
||||||
|
private String randomCode;
|
||||||
|
|
||||||
|
//密码
|
||||||
|
@NotBlank
|
||||||
|
private String newPassword;
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.nflg.mobilebroken.common.pojo.request;
|
package com.nflg.mobilebroken.common.pojo.request;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
|
|
@ -35,10 +36,10 @@ public class AccountAddRequest {
|
||||||
@NotBlank
|
@NotBlank
|
||||||
private String userCode;
|
private String userCode;
|
||||||
|
|
||||||
//是否启用
|
|
||||||
@NotNull
|
|
||||||
private Boolean enabled;
|
|
||||||
|
|
||||||
//头像
|
//头像
|
||||||
private String avatar;
|
private String avatar;
|
||||||
|
|
||||||
|
//密码
|
||||||
|
@JsonIgnore
|
||||||
|
private String password;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,14 @@ package com.nflg.mobilebroken.common.pojo.request;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
@EqualsAndHashCode(callSuper = false)
|
@EqualsAndHashCode(callSuper = false)
|
||||||
@Data
|
@Data
|
||||||
public class AccountUpdateRequest extends AccountAddRequest {
|
public class AccountUpdateRequest extends AccountAddRequest {
|
||||||
|
|
||||||
private Integer id;
|
private Integer id;
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private Boolean enable;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,10 +40,6 @@ public class PrimaryAppUserAddRequest {
|
||||||
@NotNull
|
@NotNull
|
||||||
private Integer areaId;
|
private Integer areaId;
|
||||||
|
|
||||||
//是否启用
|
|
||||||
@NotNull
|
|
||||||
private Boolean enable;
|
|
||||||
|
|
||||||
//头像
|
//头像
|
||||||
private String avatar;
|
private String avatar;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,15 @@ package com.nflg.mobilebroken.common.pojo.request;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
@EqualsAndHashCode(callSuper = false)
|
@EqualsAndHashCode(callSuper = false)
|
||||||
@Data
|
@Data
|
||||||
public class PrimaryAppUserUpdateRequest extends PrimaryAppUserAddRequest {
|
public class PrimaryAppUserUpdateRequest extends PrimaryAppUserAddRequest {
|
||||||
|
|
||||||
private Integer id;
|
private Integer id;
|
||||||
|
|
||||||
|
//是否启用
|
||||||
|
@NotNull
|
||||||
|
private Boolean enable;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,5 +17,5 @@ public class SearchAccountRequest extends PageRequest {
|
||||||
private Integer departmentId;
|
private Integer departmentId;
|
||||||
|
|
||||||
// 状态
|
// 状态
|
||||||
private Boolean enable;
|
private Byte state;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.nflg.mobilebroken.common.pojo.request;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class UserActivateRequest {
|
||||||
|
|
||||||
|
//邮箱
|
||||||
|
private String email;
|
||||||
|
|
||||||
|
//随机码
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
//新密码
|
||||||
|
private String password;
|
||||||
|
}
|
||||||
|
|
@ -37,8 +37,8 @@ public class AdminUserVO {
|
||||||
//用户号
|
//用户号
|
||||||
private String userCode;
|
private String userCode;
|
||||||
|
|
||||||
//是否启用
|
//状态,0:待激活,1-启用,2:禁用
|
||||||
private Boolean enabled;
|
private Byte state;
|
||||||
|
|
||||||
//头像
|
//头像
|
||||||
private String avatar;
|
private String avatar;
|
||||||
|
|
|
||||||
|
|
@ -38,8 +38,8 @@ public class AppUserForAdminVO {
|
||||||
//区域名称
|
//区域名称
|
||||||
private String areaName;
|
private String areaName;
|
||||||
|
|
||||||
//是否启用
|
//状态,0:待激活,1-启用,2:禁用
|
||||||
private boolean enable;
|
private Byte userState;
|
||||||
|
|
||||||
//账号过期时间
|
//账号过期时间
|
||||||
private LocalDate expireTime;
|
private LocalDate expireTime;
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,13 @@ package com.nflg.mobilebroken.repository.entity;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import java.io.Serializable;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* 后台-用户
|
* 后台-用户
|
||||||
|
|
@ -79,9 +80,9 @@ public class AdminUser implements Serializable {
|
||||||
private String openid;
|
private String openid;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否启用
|
* 状态,0:待激活,1-启用,2:禁用
|
||||||
*/
|
*/
|
||||||
private Boolean enable;
|
private byte state;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建人id
|
* 创建人id
|
||||||
|
|
|
||||||
|
|
@ -61,9 +61,9 @@ public class AppUser implements Serializable {
|
||||||
private String phone;
|
private String phone;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否已启用
|
* 状态,0:待激活,1-启用,2:禁用
|
||||||
*/
|
*/
|
||||||
private Boolean enable;
|
private byte state;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 区域id
|
* 区域id
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package com.nflg.mobilebroken.repository.entity;
|
package com.nflg.mobilebroken.repository.entity;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
@ -42,6 +43,7 @@ public class TicketFollow implements Serializable {
|
||||||
/**
|
/**
|
||||||
* 来源,0:用户端,1:管理端
|
* 来源,0:用户端,1:管理端
|
||||||
*/
|
*/
|
||||||
|
@TableField("`from`")
|
||||||
private Byte from;
|
private Byte from;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -37,4 +37,8 @@ public interface IAdminUserService extends IService<AdminUser> {
|
||||||
void setAvatar(Integer userId, String avatar);
|
void setAvatar(Integer userId, String avatar);
|
||||||
|
|
||||||
void updatePassword(Integer id, String newPassword);
|
void updatePassword(Integer id, String newPassword);
|
||||||
|
|
||||||
|
void activateUser(UserActivateRequest request);
|
||||||
|
|
||||||
|
void forgetPassword(String email, String password);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,4 +48,8 @@ public interface IAppUserService extends IService<AppUser> {
|
||||||
void renewal(RenewalAppUserRequest request);
|
void renewal(RenewalAppUserRequest request);
|
||||||
|
|
||||||
List<CompanyVO> searchSimpleUsers(SimpleUsersSearchRequest request);
|
List<CompanyVO> searchSimpleUsers(SimpleUsersSearchRequest request);
|
||||||
|
|
||||||
|
void activateUser(UserActivateRequest request);
|
||||||
|
|
||||||
|
void forgetPassword(String email, String password);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.nflg.mobilebroken.common.constant.Constant;
|
import com.nflg.mobilebroken.common.constant.Constant;
|
||||||
|
import com.nflg.mobilebroken.common.constant.UserState;
|
||||||
import com.nflg.mobilebroken.common.pojo.PageData;
|
import com.nflg.mobilebroken.common.pojo.PageData;
|
||||||
import com.nflg.mobilebroken.common.pojo.request.*;
|
import com.nflg.mobilebroken.common.pojo.request.*;
|
||||||
import com.nflg.mobilebroken.common.pojo.vo.AdminUserVO;
|
import com.nflg.mobilebroken.common.pojo.vo.AdminUserVO;
|
||||||
|
|
@ -73,7 +74,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
||||||
.setAvatar(request.getAvatar())
|
.setAvatar(request.getAvatar())
|
||||||
.setDepartmentId(request.getDepartmentId())
|
.setDepartmentId(request.getDepartmentId())
|
||||||
.setEmail(request.getEmail())
|
.setEmail(request.getEmail())
|
||||||
.setEnable(request.getEnabled())
|
.setState(UserState.ToBeActivated.getState())
|
||||||
.setLoginName(request.getLoginName())
|
.setLoginName(request.getLoginName())
|
||||||
.setPhone(request.getPhone())
|
.setPhone(request.getPhone())
|
||||||
.setTitleId(request.getTitleId())
|
.setTitleId(request.getTitleId())
|
||||||
|
|
@ -91,7 +92,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
||||||
.setAvatar(request.getAvatar())
|
.setAvatar(request.getAvatar())
|
||||||
.setDepartmentId(request.getDepartmentId())
|
.setDepartmentId(request.getDepartmentId())
|
||||||
.setEmail(request.getEmail())
|
.setEmail(request.getEmail())
|
||||||
.setEnable(request.getEnabled())
|
.setState(request.getEnable() ? UserState.Activated.getState() : UserState.Disabled.getState())
|
||||||
.setLoginName(request.getLoginName())
|
.setLoginName(request.getLoginName())
|
||||||
.setPhone(request.getPhone())
|
.setPhone(request.getPhone())
|
||||||
.setTitleId(request.getTitleId())
|
.setTitleId(request.getTitleId())
|
||||||
|
|
@ -103,7 +104,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
||||||
@Override
|
@Override
|
||||||
public void enable(EnableAccountRequest request) {
|
public void enable(EnableAccountRequest request) {
|
||||||
lambdaUpdate()
|
lambdaUpdate()
|
||||||
.set(AdminUser::getEnable, request.getEnable())
|
.set(AdminUser::getState, request.getEnable() ? UserState.Activated.getState() : UserState.Disabled.getState())
|
||||||
.in(AdminUser::getId, request.getIds())
|
.in(AdminUser::getId, request.getIds())
|
||||||
.update();
|
.update();
|
||||||
}
|
}
|
||||||
|
|
@ -111,7 +112,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
||||||
@Override
|
@Override
|
||||||
public PageData<AdminUserVO> search(SearchAccountRequest request) {
|
public PageData<AdminUserVO> search(SearchAccountRequest request) {
|
||||||
IPage<AdminUser> page = lambdaQuery()
|
IPage<AdminUser> page = lambdaQuery()
|
||||||
.eq(Objects.nonNull(request.getEnable()), AdminUser::getEnable, request.getEnable())
|
.eq(Objects.nonNull(request.getState()), AdminUser::getState, request.getState())
|
||||||
.eq(Objects.nonNull(request.getDepartmentId()), AdminUser::getDepartmentId, request.getDepartmentId())
|
.eq(Objects.nonNull(request.getDepartmentId()), AdminUser::getDepartmentId, request.getDepartmentId())
|
||||||
.like(StrUtil.isNotBlank(request.getLoginName()), AdminUser::getLoginName, request.getLoginName())
|
.like(StrUtil.isNotBlank(request.getLoginName()), AdminUser::getLoginName, request.getLoginName())
|
||||||
.like(StrUtil.isNotBlank(request.getUserName()), AdminUser::getUserName, request.getUserName())
|
.like(StrUtil.isNotBlank(request.getUserName()), AdminUser::getUserName, request.getUserName())
|
||||||
|
|
@ -126,7 +127,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
||||||
.setUserCode(u.getUserCode())
|
.setUserCode(u.getUserCode())
|
||||||
.setLoginName(u.getLoginName())
|
.setLoginName(u.getLoginName())
|
||||||
.setUserName(u.getUserName())
|
.setUserName(u.getUserName())
|
||||||
.setEnabled(u.getEnable())
|
.setState(u.getState())
|
||||||
.setPhone(u.getPhone())
|
.setPhone(u.getPhone())
|
||||||
.setEmail(u.getEmail())
|
.setEmail(u.getEmail())
|
||||||
.setOpenId(u.getOpenid())
|
.setOpenId(u.getOpenid())
|
||||||
|
|
@ -193,6 +194,35 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
||||||
updateById(user);
|
updateById(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void activateUser(UserActivateRequest request) {
|
||||||
|
AdminUser adminUser = lambdaQuery()
|
||||||
|
.eq(AdminUser::getLoginName, request.getEmail())
|
||||||
|
.one();
|
||||||
|
VUtils.trueThrowBusinessError(Objects.isNull(adminUser)).throwMessage("用户不存");
|
||||||
|
VUtils.trueThrowBusinessError(!Objects.equals(adminUser.getState(), UserState.ToBeActivated.getState()))
|
||||||
|
.throwMessage("当前状态不允许激活");
|
||||||
|
VUtils.trueThrowBusinessError(PASSWORDENCODER.matches(request.getCode(), adminUser.getPassword()))
|
||||||
|
.throwMessage("随机码不正确");
|
||||||
|
adminUser.setState(UserState.Activated.getState());
|
||||||
|
adminUser.setPassword(PASSWORDENCODER.encode(request.getPassword()));
|
||||||
|
adminUser.setUpdateTime(LocalDateTime.now());
|
||||||
|
updateById(adminUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void forgetPassword(String email, String password) {
|
||||||
|
String encodePassword = PASSWORDENCODER.encode(password);
|
||||||
|
AdminUser user = lambdaQuery().eq(AdminUser::getLoginName, email).one();
|
||||||
|
VUtils.trueThrowBusinessError(Objects.isNull(user)).throwMessage("用户不存在");
|
||||||
|
VUtils.trueThrowBusinessError(Objects.equals(user.getState(), UserState.Disabled.getState()))
|
||||||
|
.throwMessage("禁用状态不能重设密码");
|
||||||
|
user.setState(UserState.ToBeActivated.getState());
|
||||||
|
user.setPassword(encodePassword);
|
||||||
|
user.setUpdateTime(LocalDateTime.now());
|
||||||
|
updateById(user);
|
||||||
|
}
|
||||||
|
|
||||||
private String getDepartmentName(Integer departmentId) {
|
private String getDepartmentName(Integer departmentId) {
|
||||||
TBaseDepartment department = departmentService.lambdaQuery()
|
TBaseDepartment department = departmentService.lambdaQuery()
|
||||||
.eq(TBaseDepartment::getId, departmentId)
|
.eq(TBaseDepartment::getId, departmentId)
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package com.nflg.mobilebroken.repository.service.impl;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.nflg.mobilebroken.common.constant.AppUserApplyForState;
|
import com.nflg.mobilebroken.common.constant.AppUserApplyForState;
|
||||||
import com.nflg.mobilebroken.common.constant.AppUserApplyforType;
|
import com.nflg.mobilebroken.common.constant.AppUserApplyforType;
|
||||||
|
import com.nflg.mobilebroken.common.constant.UserState;
|
||||||
import com.nflg.mobilebroken.common.pojo.request.AddUserRequest;
|
import com.nflg.mobilebroken.common.pojo.request.AddUserRequest;
|
||||||
import com.nflg.mobilebroken.common.pojo.request.ApplyForExtensionRequest;
|
import com.nflg.mobilebroken.common.pojo.request.ApplyForExtensionRequest;
|
||||||
import com.nflg.mobilebroken.common.pojo.request.ApproveAppUserApplyforRequest;
|
import com.nflg.mobilebroken.common.pojo.request.ApproveAppUserApplyforRequest;
|
||||||
|
|
@ -149,7 +150,7 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
|
||||||
.setAreaId(applyfor.getAreaId())
|
.setAreaId(applyfor.getAreaId())
|
||||||
.setCompanyId(String.valueOf(applyfor.getCompanyId()))
|
.setCompanyId(String.valueOf(applyfor.getCompanyId()))
|
||||||
.setTitleId(applyfor.getTitleId())
|
.setTitleId(applyfor.getTitleId())
|
||||||
.setEnable(true)
|
.setState(UserState.ToBeActivated.getState())
|
||||||
.setCreateBy(applyfor.getCreateBy())
|
.setCreateBy(applyfor.getCreateBy())
|
||||||
.setCreateTime(LocalDateTime.now())
|
.setCreateTime(LocalDateTime.now())
|
||||||
.setExpireTime(appUser.getExpireTime())
|
.setExpireTime(appUser.getExpireTime())
|
||||||
|
|
@ -158,7 +159,7 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
|
||||||
} else if (applyfor.getType() == AppUserApplyforType.ENABLE.getState().byteValue()) {
|
} else if (applyfor.getType() == AppUserApplyforType.ENABLE.getState().byteValue()) {
|
||||||
//账号启用
|
//账号启用
|
||||||
AppUser appUser = appUserService.getById(applyfor.getUserId());
|
AppUser appUser = appUserService.getById(applyfor.getUserId());
|
||||||
appUser.setEnable(true)
|
appUser.setState(UserState.Activated.getState())
|
||||||
.setUpdateBy(applyfor.getCreateBy())
|
.setUpdateBy(applyfor.getCreateBy())
|
||||||
.setUpdateTime(LocalDateTime.now());
|
.setUpdateTime(LocalDateTime.now());
|
||||||
appUserService.updateById(appUser);
|
appUserService.updateById(appUser);
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.nflg.mobilebroken.common.constant.AppUserApplyForState;
|
import com.nflg.mobilebroken.common.constant.AppUserApplyForState;
|
||||||
|
import com.nflg.mobilebroken.common.constant.UserState;
|
||||||
import com.nflg.mobilebroken.common.pojo.PageData;
|
import com.nflg.mobilebroken.common.pojo.PageData;
|
||||||
import com.nflg.mobilebroken.common.pojo.request.*;
|
import com.nflg.mobilebroken.common.pojo.request.*;
|
||||||
import com.nflg.mobilebroken.common.pojo.vo.AppUserForAdminVO;
|
import com.nflg.mobilebroken.common.pojo.vo.AppUserForAdminVO;
|
||||||
|
|
@ -87,6 +88,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
||||||
String encodePassword=PASSWORDENCODER.encode(password);
|
String encodePassword=PASSWORDENCODER.encode(password);
|
||||||
AppUser user=getById(id);
|
AppUser user=getById(id);
|
||||||
VUtils.trueThrowBusinessError(Objects.isNull(user)).throwMessage("用户不存在");
|
VUtils.trueThrowBusinessError(Objects.isNull(user)).throwMessage("用户不存在");
|
||||||
|
user.setState(UserState.ToBeActivated.getState());
|
||||||
user.setPassword(encodePassword);
|
user.setPassword(encodePassword);
|
||||||
user.setUpdateTime(LocalDateTime.now());
|
user.setUpdateTime(LocalDateTime.now());
|
||||||
updateById(user);
|
updateById(user);
|
||||||
|
|
@ -162,7 +164,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
||||||
.setSalesUserName(request.getSalesUserName())
|
.setSalesUserName(request.getSalesUserName())
|
||||||
.setCreateBy(AdminUserUtil.getUserId())
|
.setCreateBy(AdminUserUtil.getUserId())
|
||||||
.setCreateTime(LocalDateTime.now())
|
.setCreateTime(LocalDateTime.now())
|
||||||
.setEnable(request.getEnable())
|
.setState(UserState.ToBeActivated.getState())
|
||||||
.setExpireTime(LocalDateTime.of(LocalDateTime.now().getYear(), 12, 31, 0, 0, 0).toLocalDate());
|
.setExpireTime(LocalDateTime.of(LocalDateTime.now().getYear(), 12, 31, 0, 0, 0).toLocalDate());
|
||||||
save(user);
|
save(user);
|
||||||
}
|
}
|
||||||
|
|
@ -185,7 +187,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
||||||
.setIsPrimary(true)
|
.setIsPrimary(true)
|
||||||
.setUpdateBy(AdminUserUtil.getUserId())
|
.setUpdateBy(AdminUserUtil.getUserId())
|
||||||
.setUpdateTime(LocalDateTime.now())
|
.setUpdateTime(LocalDateTime.now())
|
||||||
.setEnable(request.getEnable());
|
.setState(request.getEnable() ? UserState.Activated.getState() : UserState.Disabled.getState());
|
||||||
updateById(user);
|
updateById(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -234,7 +236,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
||||||
.setAreaId(d.getAreaId())
|
.setAreaId(d.getAreaId())
|
||||||
.setSalesUserName(d.getSalesUserName())
|
.setSalesUserName(d.getSalesUserName())
|
||||||
.setAreaName(area.getName())
|
.setAreaName(area.getName())
|
||||||
.setEnable(d.getEnable())
|
.setUserState(d.getState())
|
||||||
.setExpireTime(d.getExpireTime())
|
.setExpireTime(d.getExpireTime())
|
||||||
.setCreateBy(appUser.getName())
|
.setCreateBy(appUser.getName())
|
||||||
.setCreateTime(d.getCreateTime())
|
.setCreateTime(d.getCreateTime())
|
||||||
|
|
@ -249,7 +251,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
||||||
@Override
|
@Override
|
||||||
public void enable(EnableAppUserRequest request) {
|
public void enable(EnableAppUserRequest request) {
|
||||||
lambdaUpdate()
|
lambdaUpdate()
|
||||||
.set(AppUser::getEnable, request.getEnable())
|
.set(AppUser::getState, request.getEnable() ? UserState.Activated.getState() : UserState.Disabled.getState())
|
||||||
.set(AppUser::getUpdateBy, AdminUserUtil.getUserId())
|
.set(AppUser::getUpdateBy, AdminUserUtil.getUserId())
|
||||||
.set(AppUser::getUpdateTime, LocalDateTime.now())
|
.set(AppUser::getUpdateTime, LocalDateTime.now())
|
||||||
.in(AppUser::getId, request.getIds())
|
.in(AppUser::getId, request.getIds())
|
||||||
|
|
@ -286,9 +288,8 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
||||||
.setEmail(d.getEmail())
|
.setEmail(d.getEmail())
|
||||||
.setSalesUserName(d.getSalesUserName())
|
.setSalesUserName(d.getSalesUserName())
|
||||||
.setAreaName(area.getName())
|
.setAreaName(area.getName())
|
||||||
.setEnable(d.getEnable())
|
.setUserState(d.getState())
|
||||||
.setPrimary(false)
|
.setPrimary(false)
|
||||||
.setEnable(d.getEnable())
|
|
||||||
.setExpireTime(d.getExpireTime())
|
.setExpireTime(d.getExpireTime())
|
||||||
.setCreateBy(createUser.getName())
|
.setCreateBy(createUser.getName())
|
||||||
.setCreateTime(d.getCreateTime())
|
.setCreateTime(d.getCreateTime())
|
||||||
|
|
@ -312,7 +313,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
||||||
.setEmail(d.getUserEmail())
|
.setEmail(d.getUserEmail())
|
||||||
.setSalesUserName(d.getSalesUserName())
|
.setSalesUserName(d.getSalesUserName())
|
||||||
.setAreaName(area.getName())
|
.setAreaName(area.getName())
|
||||||
.setEnable(false)
|
.setUserState(UserState.ToBeActivated.getState())
|
||||||
.setPrimary(false)
|
.setPrimary(false)
|
||||||
.setState(0);
|
.setState(0);
|
||||||
}).collect(Collectors.toList()));
|
}).collect(Collectors.toList()));
|
||||||
|
|
@ -326,7 +327,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
||||||
request.getIds().forEach(id -> {
|
request.getIds().forEach(id -> {
|
||||||
AppUser appUser = getById(id);
|
AppUser appUser = getById(id);
|
||||||
VUtils.trueThrowBusinessError(Objects.isNull(appUser)).throwMessage("用户不存在");
|
VUtils.trueThrowBusinessError(Objects.isNull(appUser)).throwMessage("用户不存在");
|
||||||
VUtils.trueThrowBusinessError(Objects.equals(appUser.getEnable(), false)).throwMessage(id + "未启用");
|
VUtils.trueThrowBusinessError(!Objects.equals(appUser.getState(), UserState.Activated.getState())).throwMessage(id + "非启用状态");
|
||||||
VUtils.trueThrowBusinessError(Objects.equals(appUser.getIsPrimary(), false)).throwMessage(id + "不是主账号");
|
VUtils.trueThrowBusinessError(Objects.equals(appUser.getIsPrimary(), false)).throwMessage(id + "不是主账号");
|
||||||
appUser.setExpireTime(appUser.getExpireTime().plusMonths(request.getMonth()));
|
appUser.setExpireTime(appUser.getExpireTime().plusMonths(request.getMonth()));
|
||||||
appUser.setUpdateBy(AdminUserUtil.getUserId());
|
appUser.setUpdateBy(AdminUserUtil.getUserId());
|
||||||
|
|
@ -335,7 +336,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
||||||
List<String> companys = StrUtil.split(",", appUser.getCompanyId());
|
List<String> companys = StrUtil.split(",", appUser.getCompanyId());
|
||||||
companys.forEach(c -> {
|
companys.forEach(c -> {
|
||||||
List<AppUser> users = lambdaQuery()
|
List<AppUser> users = lambdaQuery()
|
||||||
.eq(AppUser::getEnable, true)
|
.eq(AppUser::getState, UserState.Activated.getState())
|
||||||
.eq(AppUser::getIsPrimary, false)
|
.eq(AppUser::getIsPrimary, false)
|
||||||
.eq(AppUser::getCompanyId, "," + c + ",")
|
.eq(AppUser::getCompanyId, "," + c + ",")
|
||||||
.list();
|
.list();
|
||||||
|
|
@ -366,7 +367,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
||||||
if (StrUtil.isNotBlank(request.getName())) {
|
if (StrUtil.isNotBlank(request.getName())) {
|
||||||
Set<Long> userCompanyIds = lambdaQuery()
|
Set<Long> userCompanyIds = lambdaQuery()
|
||||||
.select(AppUser::getCompanyId)
|
.select(AppUser::getCompanyId)
|
||||||
.eq(AppUser::getEnable, true)
|
.eq(AppUser::getState, UserState.Activated.getState())
|
||||||
.eq(AppUser::getIsPrimary, true)
|
.eq(AppUser::getIsPrimary, true)
|
||||||
.like(AppUser::getLoginName, request.getName())
|
.like(AppUser::getLoginName, request.getName())
|
||||||
.like(AppUser::getName, request.getName())
|
.like(AppUser::getName, request.getName())
|
||||||
|
|
@ -388,10 +389,39 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
||||||
return datas;
|
return datas;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void activateUser(UserActivateRequest request) {
|
||||||
|
AppUser appUser = lambdaQuery()
|
||||||
|
.eq(AppUser::getLoginName, request.getEmail())
|
||||||
|
.one();
|
||||||
|
VUtils.trueThrowBusinessError(Objects.isNull(appUser)).throwMessage("用户不存在或随机码不正确");
|
||||||
|
VUtils.trueThrowBusinessError(!Objects.equals(appUser.getState(), UserState.ToBeActivated.getState()))
|
||||||
|
.throwMessage("当前状态不允许激活");
|
||||||
|
VUtils.trueThrowBusinessError(PASSWORDENCODER.matches(request.getCode(), appUser.getPassword()))
|
||||||
|
.throwMessage("随机码不正确");
|
||||||
|
appUser.setState(UserState.Activated.getState());
|
||||||
|
appUser.setPassword(PASSWORDENCODER.encode(request.getPassword()));
|
||||||
|
appUser.setUpdateTime(LocalDateTime.now());
|
||||||
|
updateById(appUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void forgetPassword(String email, String password) {
|
||||||
|
String encodePassword = PASSWORDENCODER.encode(password);
|
||||||
|
AppUser user = lambdaQuery().eq(AppUser::getLoginName, email).one();
|
||||||
|
VUtils.trueThrowBusinessError(Objects.isNull(user)).throwMessage("用户不存在");
|
||||||
|
VUtils.trueThrowBusinessError(Objects.equals(user.getState(), UserState.Disabled.getState()))
|
||||||
|
.throwMessage("禁用状态不能重设密码");
|
||||||
|
user.setState(UserState.ToBeActivated.getState());
|
||||||
|
user.setPassword(encodePassword);
|
||||||
|
user.setUpdateTime(LocalDateTime.now());
|
||||||
|
updateById(user);
|
||||||
|
}
|
||||||
|
|
||||||
private List<AppUserVO> getByCompanyId(Long companyId) {
|
private List<AppUserVO> getByCompanyId(Long companyId) {
|
||||||
return lambdaQuery()
|
return lambdaQuery()
|
||||||
.eq(AppUser::getCompanyId, companyId.toString())
|
.eq(AppUser::getCompanyId, companyId.toString())
|
||||||
.eq(AppUser::getEnable, true)
|
.eq(AppUser::getState, UserState.Activated.getState())
|
||||||
.eq(AppUser::getIsPrimary, false)
|
.eq(AppUser::getIsPrimary, false)
|
||||||
.list()
|
.list()
|
||||||
.stream()
|
.stream()
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,7 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
|
||||||
.throwMessage("当前工单已归属别的CQM负责人");
|
.throwMessage("当前工单已归属别的CQM负责人");
|
||||||
ticket.setUrgency(TicketUrgency.findByValue(request.getUrgency()).getState());
|
ticket.setUrgency(TicketUrgency.findByValue(request.getUrgency()).getState());
|
||||||
ticket.setQuestion(request.getQuestion());
|
ticket.setQuestion(request.getQuestion());
|
||||||
|
ticket.setState(TicketState.Processing.getState());
|
||||||
ticket.setRemark(request.getRemark());
|
ticket.setRemark(request.getRemark());
|
||||||
ticket.setHandle(StrUtil.join(",", request.getUserIds()));
|
ticket.setHandle(StrUtil.join(",", request.getUserIds()));
|
||||||
ticket.setCqm(AdminUserUtil.getUserId());
|
ticket.setCqm(AdminUserUtil.getUserId());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue