feat: 一些调整

This commit is contained in:
曹鹏飞 2025-02-11 17:21:13 +08:00
parent cfc9b461da
commit 1f7e2ca89d
26 changed files with 347 additions and 63 deletions

View File

@ -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();

View File

@ -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);
} }

View File

@ -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")

View File

@ -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")

View File

@ -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();
} }

View File

@ -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);
}
}

View File

@ -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";

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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;
} }

View File

@ -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;
} }

View File

@ -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;

View File

@ -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;
} }

View File

@ -17,5 +17,5 @@ public class SearchAccountRequest extends PageRequest {
private Integer departmentId; private Integer departmentId;
// 状态 // 状态
private Boolean enable; private Byte state;
} }

View File

@ -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;
}

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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;
/** /**

View File

@ -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);
} }

View File

@ -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);
} }

View File

@ -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)

View File

@ -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);

View File

@ -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()

View File

@ -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());