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

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

View File

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

View File

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

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

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

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

View File

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

View File

@ -40,10 +40,6 @@ public class PrimaryAppUserAddRequest {
@NotNull
private Integer areaId;
//是否启用
@NotNull
private Boolean enable;
//头像
private String avatar;

View File

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

View File

@ -17,5 +17,5 @@ public class SearchAccountRequest extends PageRequest {
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 Boolean enabled;
//状态0待激活1-启用2
private Byte state;
//头像
private String avatar;

View File

@ -38,8 +38,8 @@ public class AppUserForAdminVO {
//区域名称
private String areaName;
//是否启
private boolean enable;
//状态0待激活1-启用2
private Byte userState;
//账号过期时间
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.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

View File

@ -61,9 +61,9 @@ public class AppUser implements Serializable {
private String phone;
/**
* 是否已启
* 状态0待激活1-启用2
*/
private Boolean enable;
private byte state;
/**
* 区域id

View File

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

View File

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

View File

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

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

View File

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

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

View File

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