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.starter.annotation.MethodInfoMark;
|
||||
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.http.MediaType;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.mail.MessagingException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.nio.charset.Charset;
|
||||
import java.time.Duration;
|
||||
import java.util.Base64;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
|
@ -39,8 +45,12 @@ import java.util.List;
|
|||
*/
|
||||
@RestController
|
||||
@RequestMapping("/adminuser")
|
||||
@Slf4j
|
||||
public class AdminUserController extends ControllerBase {
|
||||
|
||||
@Value("${email.activate.admin.url}")
|
||||
private String activateUrl;
|
||||
|
||||
@Resource
|
||||
private IAdminUserService adminUserService;
|
||||
|
||||
|
|
@ -87,7 +97,15 @@ public class AdminUserController extends ControllerBase {
|
|||
@MethodInfoMark(value = "新增账号", menuName = "账号管理")
|
||||
@ApiMark(moduleName = "账号管理", apiName = "新增账号")
|
||||
public ApiResult<Void> addAccount(@Valid @RequestBody AccountAddRequest request) {
|
||||
request.setPassword(RandomUtil.randomString(6));
|
||||
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();
|
||||
}
|
||||
|
||||
|
|
@ -138,20 +156,20 @@ public class AdminUserController extends ControllerBase {
|
|||
}
|
||||
|
||||
/**
|
||||
* 重置密码
|
||||
* 发送重置密码邮件
|
||||
* @param ids 用户id列表
|
||||
**/
|
||||
@Transactional
|
||||
@PostMapping("resetPassword")
|
||||
@MethodInfoMark(value = "重置密码", menuName = "账号管理")
|
||||
@ApiMark(moduleName = "账号管理", apiName = "重置密码")
|
||||
@PostMapping("sendResetPasswordEmail")
|
||||
@ApiMark(moduleName = "账号管理", apiName = "发送重置密码邮件", isPublic = true)
|
||||
//@SaUserCheckRole("primary")
|
||||
public ApiResult<Void> resetPassword(@Valid @RequestBody @NotEmpty List<Integer> ids) {
|
||||
public ApiResult<Void> sendResetPasswordEmail(@Valid @RequestBody @NotEmpty List<Integer> ids) {
|
||||
try {
|
||||
for (Integer id : ids) {
|
||||
String password = RandomUtil.randomString(6);
|
||||
String email = adminUserService.resetPassword(id, password);
|
||||
emailService.sendEmail(email, "密码重置", "您的新密码为: " + password);
|
||||
emailService.sendEmail(email, "密码重置",
|
||||
"随机码为:" + password + ",点击链接激活账号: " + activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()));
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
throw new NflgException(STATE.BusinessError, "发送邮件失败:" + ex.getMessage());
|
||||
|
|
@ -159,6 +177,49 @@ public class AdminUserController extends ControllerBase {
|
|||
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 请求信息
|
||||
* @return 更新结果
|
||||
**/
|
||||
@PostMapping("updatePassword")
|
||||
@ApiMark(moduleName = "账号管理", apiName = "更新密码")
|
||||
public ApiResult<Void> updatePassword(@Valid @RequestBody UpdatePasswordRequest request) {
|
||||
String redisKey = StrUtil.format(Constant.REDIS_KEY_USER_UPDATE_KAPTCHA_ADMIN, request.getEmail());
|
||||
String captcha = redisTemplate.opsForValue().get(redisKey);
|
||||
|
|
@ -201,6 +262,7 @@ public class AdminUserController extends ControllerBase {
|
|||
* 发送修改密码验证码邮件
|
||||
**/
|
||||
@PostMapping("sendUpdatePasswordCaptchaEmail")
|
||||
@ApiMark(moduleName = "账号管理", apiName = "发送修改密码验证码邮件")
|
||||
public ApiResult<Void> sendUpdatePasswordCaptchaEmail() {
|
||||
try {
|
||||
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.service.EmailService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.mail.MessagingException;
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Base64;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
|
@ -32,6 +34,9 @@ import java.util.List;
|
|||
@RequestMapping("/appuser")
|
||||
public class AppUserController extends ControllerBase {
|
||||
|
||||
@Value("${email.activate.app.url}")
|
||||
private String activateUrl;
|
||||
|
||||
@Resource
|
||||
private IAppUserService appUserService;
|
||||
|
||||
|
|
@ -78,7 +83,9 @@ public class AppUserController extends ControllerBase {
|
|||
request.setPassword(RandomUtil.randomNumbers(6));
|
||||
appUserService.addPrimaryAppUser(request);
|
||||
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) {
|
||||
log.error("发送邮件失败", e);
|
||||
}
|
||||
|
|
@ -120,7 +127,9 @@ public class AppUserController extends ControllerBase {
|
|||
AppUserApplyfor applyfor = appUserApplyforService.getById(request.getId());
|
||||
if (applyfor.getType() == AppUserApplyforType.ADD.getState().byteValue()) {
|
||||
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) {
|
||||
log.error("发送邮件失败", e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.nflg.mobilebroken.auth.controller;
|
|||
import cn.dev33.satoken.stp.SaLoginConfig;
|
||||
import cn.dev33.satoken.stp.SaTokenInfo;
|
||||
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.vo.PermissionsVO;
|
||||
import com.nflg.mobilebroken.common.util.AdminUserUtil;
|
||||
|
|
@ -48,7 +49,8 @@ public class AdminController extends ControllerBase {
|
|||
@Valid @NotBlank(message = "密码不能为空") @RequestParam("password") String password) {
|
||||
AdminUser user=adminUserService.getUser(userName,password);
|
||||
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());
|
||||
SaTokenAdminUtil.login(user.getId(), SaLoginConfig
|
||||
.setExtra("from", "admin")
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import cn.dev33.satoken.stp.SaTokenInfo;
|
|||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
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.util.SaTokenAppUtil;
|
||||
import com.nflg.mobilebroken.common.util.VUtils;
|
||||
|
|
@ -41,7 +42,8 @@ public class AppController extends ControllerBase {
|
|||
public ApiResult<SaTokenInfo> login(String userName, String password) {
|
||||
AppUser user=appUserService.getUser(userName,password);
|
||||
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, "用户已过期,请联系管理员");
|
||||
SaTokenAppUtil.login(user.getId(), SaLoginConfig
|
||||
.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.ITBasePositionService;
|
||||
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.http.MediaType;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
|
@ -28,8 +30,11 @@ import org.springframework.web.bind.annotation.*;
|
|||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.nio.charset.Charset;
|
||||
import java.time.Duration;
|
||||
import java.util.Base64;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
|
@ -40,9 +45,13 @@ import java.util.stream.Collectors;
|
|||
**/
|
||||
@RestController
|
||||
@RequestMapping("/user")
|
||||
@RefreshScope
|
||||
//@SaUserCheckLogin
|
||||
public class UserController extends ControllerBase {
|
||||
|
||||
@Value("${email.activate.app.url}")
|
||||
private String activateUrl;
|
||||
|
||||
@Resource
|
||||
private IAppUserService appUserService;
|
||||
|
||||
|
|
@ -73,6 +82,23 @@ public class UserController extends ControllerBase {
|
|||
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 请求信息
|
||||
|
|
@ -175,6 +201,25 @@ public class UserController extends ControllerBase {
|
|||
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列表
|
||||
|
|
@ -187,7 +232,8 @@ public class UserController extends ControllerBase {
|
|||
for (Integer id : ids) {
|
||||
String password=RandomUtil.randomString(6);
|
||||
String email=appUserService.resetPassword(id,password);
|
||||
emailService.sendEmail(email,"密码重置","您的新密码为: "+password);
|
||||
emailService.sendEmail(email, "密码重置",
|
||||
"随机码为:" + password + ",点击链接激活账号: " + activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()));
|
||||
}
|
||||
}catch (Exception ex){
|
||||
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")
|
||||
public ApiResult<Void> sendUpdatePasswordCaptchaEmail() {
|
||||
try {
|
||||
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());
|
||||
}
|
||||
@PostMapping("activateUser")
|
||||
public ApiResult<Void> activateUser(@Valid @RequestBody UserActivateRequest request) {
|
||||
appUserService.activateUser(request);
|
||||
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 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";
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
|
@ -35,10 +36,10 @@ public class AccountAddRequest {
|
|||
@NotBlank
|
||||
private String userCode;
|
||||
|
||||
//是否启用
|
||||
@NotNull
|
||||
private Boolean enabled;
|
||||
|
||||
//头像
|
||||
private String avatar;
|
||||
|
||||
//密码
|
||||
@JsonIgnore
|
||||
private String password;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,9 +3,14 @@ package com.nflg.mobilebroken.common.pojo.request;
|
|||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Data
|
||||
public class AccountUpdateRequest extends AccountAddRequest {
|
||||
|
||||
private Integer id;
|
||||
|
||||
@NotNull
|
||||
private Boolean enable;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,10 +40,6 @@ public class PrimaryAppUserAddRequest {
|
|||
@NotNull
|
||||
private Integer areaId;
|
||||
|
||||
//是否启用
|
||||
@NotNull
|
||||
private Boolean enable;
|
||||
|
||||
//头像
|
||||
private String avatar;
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,15 @@ package com.nflg.mobilebroken.common.pojo.request;
|
|||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Data
|
||||
public class PrimaryAppUserUpdateRequest extends PrimaryAppUserAddRequest {
|
||||
|
||||
private Integer id;
|
||||
|
||||
//是否启用
|
||||
@NotNull
|
||||
private Boolean enable;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,5 +17,5 @@ public class SearchAccountRequest extends PageRequest {
|
|||
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 Boolean enabled;
|
||||
//状态,0:待激活,1-启用,2:禁用
|
||||
private Byte state;
|
||||
|
||||
//头像
|
||||
private String avatar;
|
||||
|
|
|
|||
|
|
@ -38,8 +38,8 @@ public class AppUserForAdminVO {
|
|||
//区域名称
|
||||
private String areaName;
|
||||
|
||||
//是否启用
|
||||
private boolean enable;
|
||||
//状态,0:待激活,1-启用,2:禁用
|
||||
private Byte userState;
|
||||
|
||||
//账号过期时间
|
||||
private LocalDate expireTime;
|
||||
|
|
|
|||
|
|
@ -3,12 +3,13 @@ package com.nflg.mobilebroken.repository.entity;
|
|||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台-用户
|
||||
|
|
@ -79,9 +80,9 @@ public class AdminUser implements Serializable {
|
|||
private String openid;
|
||||
|
||||
/**
|
||||
* 是否启用
|
||||
* 状态,0:待激活,1-启用,2:禁用
|
||||
*/
|
||||
private Boolean enable;
|
||||
private byte state;
|
||||
|
||||
/**
|
||||
* 创建人id
|
||||
|
|
|
|||
|
|
@ -61,9 +61,9 @@ public class AppUser implements Serializable {
|
|||
private String phone;
|
||||
|
||||
/**
|
||||
* 是否已启用
|
||||
* 状态,0:待激活,1-启用,2:禁用
|
||||
*/
|
||||
private Boolean enable;
|
||||
private byte state;
|
||||
|
||||
/**
|
||||
* 区域id
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.nflg.mobilebroken.repository.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Getter;
|
||||
|
|
@ -42,6 +43,7 @@ public class TicketFollow implements Serializable {
|
|||
/**
|
||||
* 来源,0:用户端,1:管理端
|
||||
*/
|
||||
@TableField("`from`")
|
||||
private Byte from;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -37,4 +37,8 @@ public interface IAdminUserService extends IService<AdminUser> {
|
|||
void setAvatar(Integer userId, String avatar);
|
||||
|
||||
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);
|
||||
|
||||
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.service.impl.ServiceImpl;
|
||||
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.request.*;
|
||||
import com.nflg.mobilebroken.common.pojo.vo.AdminUserVO;
|
||||
|
|
@ -73,7 +74,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
|||
.setAvatar(request.getAvatar())
|
||||
.setDepartmentId(request.getDepartmentId())
|
||||
.setEmail(request.getEmail())
|
||||
.setEnable(request.getEnabled())
|
||||
.setState(UserState.ToBeActivated.getState())
|
||||
.setLoginName(request.getLoginName())
|
||||
.setPhone(request.getPhone())
|
||||
.setTitleId(request.getTitleId())
|
||||
|
|
@ -91,7 +92,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
|||
.setAvatar(request.getAvatar())
|
||||
.setDepartmentId(request.getDepartmentId())
|
||||
.setEmail(request.getEmail())
|
||||
.setEnable(request.getEnabled())
|
||||
.setState(request.getEnable() ? UserState.Activated.getState() : UserState.Disabled.getState())
|
||||
.setLoginName(request.getLoginName())
|
||||
.setPhone(request.getPhone())
|
||||
.setTitleId(request.getTitleId())
|
||||
|
|
@ -103,7 +104,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
|||
@Override
|
||||
public void enable(EnableAccountRequest request) {
|
||||
lambdaUpdate()
|
||||
.set(AdminUser::getEnable, request.getEnable())
|
||||
.set(AdminUser::getState, request.getEnable() ? UserState.Activated.getState() : UserState.Disabled.getState())
|
||||
.in(AdminUser::getId, request.getIds())
|
||||
.update();
|
||||
}
|
||||
|
|
@ -111,7 +112,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
|||
@Override
|
||||
public PageData<AdminUserVO> search(SearchAccountRequest request) {
|
||||
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())
|
||||
.like(StrUtil.isNotBlank(request.getLoginName()), AdminUser::getLoginName, request.getLoginName())
|
||||
.like(StrUtil.isNotBlank(request.getUserName()), AdminUser::getUserName, request.getUserName())
|
||||
|
|
@ -126,7 +127,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
|||
.setUserCode(u.getUserCode())
|
||||
.setLoginName(u.getLoginName())
|
||||
.setUserName(u.getUserName())
|
||||
.setEnabled(u.getEnable())
|
||||
.setState(u.getState())
|
||||
.setPhone(u.getPhone())
|
||||
.setEmail(u.getEmail())
|
||||
.setOpenId(u.getOpenid())
|
||||
|
|
@ -193,6 +194,35 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
|||
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) {
|
||||
TBaseDepartment department = departmentService.lambdaQuery()
|
||||
.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.nflg.mobilebroken.common.constant.AppUserApplyForState;
|
||||
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.ApplyForExtensionRequest;
|
||||
import com.nflg.mobilebroken.common.pojo.request.ApproveAppUserApplyforRequest;
|
||||
|
|
@ -149,7 +150,7 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
|
|||
.setAreaId(applyfor.getAreaId())
|
||||
.setCompanyId(String.valueOf(applyfor.getCompanyId()))
|
||||
.setTitleId(applyfor.getTitleId())
|
||||
.setEnable(true)
|
||||
.setState(UserState.ToBeActivated.getState())
|
||||
.setCreateBy(applyfor.getCreateBy())
|
||||
.setCreateTime(LocalDateTime.now())
|
||||
.setExpireTime(appUser.getExpireTime())
|
||||
|
|
@ -158,7 +159,7 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
|
|||
} else if (applyfor.getType() == AppUserApplyforType.ENABLE.getState().byteValue()) {
|
||||
//账号启用
|
||||
AppUser appUser = appUserService.getById(applyfor.getUserId());
|
||||
appUser.setEnable(true)
|
||||
appUser.setState(UserState.Activated.getState())
|
||||
.setUpdateBy(applyfor.getCreateBy())
|
||||
.setUpdateTime(LocalDateTime.now());
|
||||
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.service.impl.ServiceImpl;
|
||||
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.request.*;
|
||||
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);
|
||||
AppUser user=getById(id);
|
||||
VUtils.trueThrowBusinessError(Objects.isNull(user)).throwMessage("用户不存在");
|
||||
user.setState(UserState.ToBeActivated.getState());
|
||||
user.setPassword(encodePassword);
|
||||
user.setUpdateTime(LocalDateTime.now());
|
||||
updateById(user);
|
||||
|
|
@ -162,7 +164,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
|||
.setSalesUserName(request.getSalesUserName())
|
||||
.setCreateBy(AdminUserUtil.getUserId())
|
||||
.setCreateTime(LocalDateTime.now())
|
||||
.setEnable(request.getEnable())
|
||||
.setState(UserState.ToBeActivated.getState())
|
||||
.setExpireTime(LocalDateTime.of(LocalDateTime.now().getYear(), 12, 31, 0, 0, 0).toLocalDate());
|
||||
save(user);
|
||||
}
|
||||
|
|
@ -185,7 +187,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
|||
.setIsPrimary(true)
|
||||
.setUpdateBy(AdminUserUtil.getUserId())
|
||||
.setUpdateTime(LocalDateTime.now())
|
||||
.setEnable(request.getEnable());
|
||||
.setState(request.getEnable() ? UserState.Activated.getState() : UserState.Disabled.getState());
|
||||
updateById(user);
|
||||
}
|
||||
|
||||
|
|
@ -234,7 +236,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
|||
.setAreaId(d.getAreaId())
|
||||
.setSalesUserName(d.getSalesUserName())
|
||||
.setAreaName(area.getName())
|
||||
.setEnable(d.getEnable())
|
||||
.setUserState(d.getState())
|
||||
.setExpireTime(d.getExpireTime())
|
||||
.setCreateBy(appUser.getName())
|
||||
.setCreateTime(d.getCreateTime())
|
||||
|
|
@ -249,7 +251,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
|||
@Override
|
||||
public void enable(EnableAppUserRequest request) {
|
||||
lambdaUpdate()
|
||||
.set(AppUser::getEnable, request.getEnable())
|
||||
.set(AppUser::getState, request.getEnable() ? UserState.Activated.getState() : UserState.Disabled.getState())
|
||||
.set(AppUser::getUpdateBy, AdminUserUtil.getUserId())
|
||||
.set(AppUser::getUpdateTime, LocalDateTime.now())
|
||||
.in(AppUser::getId, request.getIds())
|
||||
|
|
@ -286,9 +288,8 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
|||
.setEmail(d.getEmail())
|
||||
.setSalesUserName(d.getSalesUserName())
|
||||
.setAreaName(area.getName())
|
||||
.setEnable(d.getEnable())
|
||||
.setUserState(d.getState())
|
||||
.setPrimary(false)
|
||||
.setEnable(d.getEnable())
|
||||
.setExpireTime(d.getExpireTime())
|
||||
.setCreateBy(createUser.getName())
|
||||
.setCreateTime(d.getCreateTime())
|
||||
|
|
@ -312,7 +313,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
|||
.setEmail(d.getUserEmail())
|
||||
.setSalesUserName(d.getSalesUserName())
|
||||
.setAreaName(area.getName())
|
||||
.setEnable(false)
|
||||
.setUserState(UserState.ToBeActivated.getState())
|
||||
.setPrimary(false)
|
||||
.setState(0);
|
||||
}).collect(Collectors.toList()));
|
||||
|
|
@ -326,7 +327,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
|||
request.getIds().forEach(id -> {
|
||||
AppUser appUser = getById(id);
|
||||
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 + "不是主账号");
|
||||
appUser.setExpireTime(appUser.getExpireTime().plusMonths(request.getMonth()));
|
||||
appUser.setUpdateBy(AdminUserUtil.getUserId());
|
||||
|
|
@ -335,7 +336,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
|||
List<String> companys = StrUtil.split(",", appUser.getCompanyId());
|
||||
companys.forEach(c -> {
|
||||
List<AppUser> users = lambdaQuery()
|
||||
.eq(AppUser::getEnable, true)
|
||||
.eq(AppUser::getState, UserState.Activated.getState())
|
||||
.eq(AppUser::getIsPrimary, false)
|
||||
.eq(AppUser::getCompanyId, "," + c + ",")
|
||||
.list();
|
||||
|
|
@ -366,7 +367,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
|||
if (StrUtil.isNotBlank(request.getName())) {
|
||||
Set<Long> userCompanyIds = lambdaQuery()
|
||||
.select(AppUser::getCompanyId)
|
||||
.eq(AppUser::getEnable, true)
|
||||
.eq(AppUser::getState, UserState.Activated.getState())
|
||||
.eq(AppUser::getIsPrimary, true)
|
||||
.like(AppUser::getLoginName, request.getName())
|
||||
.like(AppUser::getName, request.getName())
|
||||
|
|
@ -388,10 +389,39 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
|||
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) {
|
||||
return lambdaQuery()
|
||||
.eq(AppUser::getCompanyId, companyId.toString())
|
||||
.eq(AppUser::getEnable, true)
|
||||
.eq(AppUser::getState, UserState.Activated.getState())
|
||||
.eq(AppUser::getIsPrimary, false)
|
||||
.list()
|
||||
.stream()
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
|
|||
.throwMessage("当前工单已归属别的CQM负责人");
|
||||
ticket.setUrgency(TicketUrgency.findByValue(request.getUrgency()).getState());
|
||||
ticket.setQuestion(request.getQuestion());
|
||||
ticket.setState(TicketState.Processing.getState());
|
||||
ticket.setRemark(request.getRemark());
|
||||
ticket.setHandle(StrUtil.join(",", request.getUserIds()));
|
||||
ticket.setCqm(AdminUserUtil.getUserId());
|
||||
|
|
|
|||
Loading…
Reference in New Issue