|
@@ -4,27 +4,20 @@ import cn.hutool.core.util.StrUtil;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.stellvoy.api.client.auth.AuthClient;
|
|
|
import com.stellvoy.api.client.task.TaskClient;
|
|
|
-import com.stellvoy.api.dto.auth.RoleDTO;
|
|
|
import com.stellvoy.api.dto.task.NewTaskDTO;
|
|
|
import com.stellvoy.api.dto.user.LoginFormDTO;
|
|
|
-import com.stellvoy.api.dto.user.UserDTO;
|
|
|
import com.stellvoy.common.domain.dto.LoginUserDTO;
|
|
|
-import com.stellvoy.common.enums.UserType;
|
|
|
import com.stellvoy.common.exceptions.BadRequestException;
|
|
|
import com.stellvoy.common.exceptions.ForbiddenException;
|
|
|
-import com.stellvoy.common.exceptions.UnauthorizedException;
|
|
|
import com.stellvoy.common.utils.AssertUtils;
|
|
|
import com.stellvoy.common.utils.BeanUtils;
|
|
|
import com.stellvoy.common.utils.StringUtils;
|
|
|
import com.stellvoy.common.utils.UserContext;
|
|
|
import com.stellvoy.user.domain.dto.*;
|
|
|
import com.stellvoy.user.domain.po.User;
|
|
|
-import com.stellvoy.user.domain.po.UserDetail;
|
|
|
import com.stellvoy.user.domain.po.UserTask;
|
|
|
-import com.stellvoy.user.domain.vo.UserDetailVO;
|
|
|
import com.stellvoy.user.mapper.UserMapper;
|
|
|
import com.stellvoy.user.service.ICodeService;
|
|
|
-import com.stellvoy.user.service.IUserDetailService;
|
|
|
import com.stellvoy.user.service.IUserService;
|
|
|
import com.stellvoy.user.service.UserTaskService;
|
|
|
import com.stellvoy.user.utils.AliyunIdCardVerifier;
|
|
@@ -32,16 +25,15 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
-import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
-import java.time.Month;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
-import static com.stellvoy.user.constants.UserConstants.*;
|
|
|
import static com.stellvoy.user.constants.UserErrorInfo.Msg.*;
|
|
|
|
|
|
|
|
@@ -54,14 +46,8 @@ import static com.stellvoy.user.constants.UserErrorInfo.Msg.*;
|
|
|
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
|
|
|
|
|
|
@Autowired
|
|
|
- private PasswordEncoder passwordEncoder;
|
|
|
- @Autowired
|
|
|
private ICodeService codeService;
|
|
|
@Autowired
|
|
|
- private AuthClient authClient;
|
|
|
- @Autowired
|
|
|
- private IUserDetailService detailService;
|
|
|
- @Autowired
|
|
|
private AliyunIdCardVerifier aliyunIdCardVerifier;
|
|
|
@Autowired
|
|
|
private StringRedisTemplate stringRedisTemplate;
|
|
@@ -93,157 +79,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
|
|
|
return userDTO;
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public void resetPassword(Long userId) {
|
|
|
- User user = new User();
|
|
|
- user.setId(userId);
|
|
|
- user.setPassword(passwordEncoder.encode(DEFAULT_PASSWORD));
|
|
|
- AssertUtils.isTrue(updateById(user), USER_ID_NOT_EXISTS);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public UserDetailVO myInfo() {
|
|
|
- // 1.获取登录用户id
|
|
|
- Long userId = UserContext.getUser();
|
|
|
- if (userId == null) {
|
|
|
- return null;
|
|
|
- }
|
|
|
- // 2.查询用户
|
|
|
- UserDetail userDetail = detailService.queryById(userId);
|
|
|
- AssertUtils.isNotNull(userDetail, USER_ID_NOT_EXISTS);
|
|
|
- // 3.封装vo
|
|
|
- UserType type = userDetail.getType();
|
|
|
- // 3.1.基本信息
|
|
|
- UserDetailVO vo = BeanUtils.toBean(userDetail, UserDetailVO.class);
|
|
|
- // 3.2.详情信息
|
|
|
- switch (type) {
|
|
|
- case STAFF:
|
|
|
- RoleDTO roleDTO = authClient.queryRoleById(userDetail.getRoleId());
|
|
|
- vo.setRoleName(roleDTO == null ? "" : roleDTO.getName());
|
|
|
- break;
|
|
|
- case STUDENT:
|
|
|
- vo.setRoleName(STUDENT_ROLE_NAME);
|
|
|
- break;
|
|
|
- case TEACHER:
|
|
|
- vo.setRoleName(TEACHER_ROLE_NAME);
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- return vo;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void addUserByPhone(User user, String code) {
|
|
|
- // 1.验证码校验
|
|
|
- codeService.verifyCode(user.getCellPhone(), code);
|
|
|
- // 2.判断手机号是否存在
|
|
|
- Long count = lambdaQuery().eq(User::getCellPhone, user.getCellPhone()).count();
|
|
|
- if (count > 0) {
|
|
|
- throw new BadRequestException(PHONE_ALREADY_EXISTS);
|
|
|
- }
|
|
|
- // 3.加密密码
|
|
|
- user.setPassword(passwordEncoder.encode(user.getPassword()));
|
|
|
- // 4.新增
|
|
|
- user.setUsername(user.getCellPhone());
|
|
|
- save(user);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void updatePasswordByPhone(String cellPhone, String code, String password) {
|
|
|
- // 1.验证码校验
|
|
|
- codeService.verifyCode(cellPhone, code);
|
|
|
- // 2.查询用户
|
|
|
- User oldUser = lambdaQuery().eq(User::getCellPhone, cellPhone).one();
|
|
|
- if (oldUser == null) {
|
|
|
- // 手机号不存在
|
|
|
- throw new BadRequestException(PHONE_NOT_EXISTS);
|
|
|
- }
|
|
|
- // 2.修改密码
|
|
|
- User user = new User();
|
|
|
- user.setId(user.getId());
|
|
|
- user.setPassword(passwordEncoder.encode(password));
|
|
|
- updateById(user);
|
|
|
- }
|
|
|
-
|
|
|
- public void updatePhoneById(Long id, String cellPhone) {
|
|
|
- // 1.1.判断是否需要修改手机号
|
|
|
- if (StringUtils.isNotBlank(cellPhone)) {
|
|
|
- // 1.2.需要修改,封装数据
|
|
|
- User user = new User();
|
|
|
- user.setId(id);
|
|
|
- user.setUsername(cellPhone);
|
|
|
- user.setCellPhone(cellPhone);
|
|
|
- // 1.3.修改
|
|
|
- updateById(user);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @Transactional
|
|
|
- public Long saveUser(UserDTO userDTO) {
|
|
|
- // 1.保存用户基本信息
|
|
|
- User user = new User();
|
|
|
- user.setPassword(passwordEncoder.encode(DEFAULT_PASSWORD));
|
|
|
- user.setCellPhone(userDTO.getCellPhone());
|
|
|
- user.setUsername(userDTO.getCellPhone());
|
|
|
- save(user);
|
|
|
- // 2.新增详情
|
|
|
- UserDetail detail = BeanUtils.toBean(userDTO, UserDetail.class);
|
|
|
- detail.setId(user.getId());
|
|
|
- detailService.save(detail);
|
|
|
- return user.getId();
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @Transactional
|
|
|
- public void updateUser(UserDTO userDTO) {
|
|
|
- // 1.如果传递了手机号,则修改手机号
|
|
|
- String cellphone = userDTO.getCellPhone();
|
|
|
- if(StringUtils.isNotBlank(cellphone)){
|
|
|
- User user = new User();
|
|
|
- user.setId(userDTO.getId());
|
|
|
- user.setCellPhone(cellphone);
|
|
|
- user.setUsername(cellphone);
|
|
|
- updateById(user);
|
|
|
- }
|
|
|
- // 2.修改详情
|
|
|
- UserDetail detail = BeanUtils.toBean(userDTO, UserDetail.class);
|
|
|
- detail.setType(null);
|
|
|
- detailService.updateById(detail);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void updateUserWithPassword(UserFormDTO userDTO) {
|
|
|
- // 1.尝试更新密码
|
|
|
- String pw = userDTO.getPassword();
|
|
|
- String oldPw = userDTO.getOldPassword();
|
|
|
- if(StringUtils.isNotBlank(pw) && StringUtils.isNotBlank(pw)) {
|
|
|
- Long userId = UserContext.getUser();
|
|
|
- // 1.1.查询用户
|
|
|
- User user = getById(userId);
|
|
|
- // 1.2.校验
|
|
|
- if (user == null) {
|
|
|
- throw new UnauthorizedException(USER_ID_NOT_EXISTS);
|
|
|
- }
|
|
|
- // 1.3.校验密码
|
|
|
- if (!passwordEncoder.matches(oldPw, user.getPassword())) {
|
|
|
- // 密码不一致
|
|
|
- throw new UnauthorizedException(INVALID_UN_OR_PW);
|
|
|
- }
|
|
|
- // 1.4.修改密码
|
|
|
- user = new User();
|
|
|
- user.setId(userId);
|
|
|
- user.setPassword(passwordEncoder.encode(pw));
|
|
|
- updateById(user);
|
|
|
- }
|
|
|
- // 2.更新用户详情
|
|
|
- UserDetail detail = BeanUtils.toBean(userDTO, UserDetail.class);
|
|
|
- detail.setRoleId(null);
|
|
|
- detail.setType(null);
|
|
|
- detailService.updateById(detail);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 手机号注册
|
|
|
*/
|
|
@@ -263,6 +98,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
|
|
|
user.setUpdateTime(LocalDateTime.now());
|
|
|
user.setCreater(UserContext.getUser());
|
|
|
user.setUpdater(UserContext.getUser());
|
|
|
+ user.setUsername(dto.getCellPhone());
|
|
|
+ user.setImage("https://suppliermanage.oss-cn-shanghai.aliyuncs.com/gig/img/woman.png");
|
|
|
save(user);
|
|
|
return user;
|
|
|
}
|
|
@@ -279,12 +116,23 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
|
|
|
} else {
|
|
|
throw new RuntimeException("身份证号码不能为空");
|
|
|
}
|
|
|
+ int sex = 0;
|
|
|
+ String image = "https://suppliermanage.oss-cn-shanghai.aliyuncs.com/gig/img/woman.png";
|
|
|
+ if(!sex(dto.getIdentityCardId())){
|
|
|
+ sex = 1;
|
|
|
+ image = "https://suppliermanage.oss-cn-shanghai.aliyuncs.com/gig/img/man.png";
|
|
|
+ }
|
|
|
lambdaUpdate()
|
|
|
.eq(User::getId, userId)
|
|
|
.set(User::getIdentityCardId, dto.getIdentityCardId())
|
|
|
+ .set(User::getSex, sex)
|
|
|
+ .set(User::getImage, image)
|
|
|
.update();
|
|
|
}
|
|
|
-
|
|
|
+ private boolean sex(String getIdentityCardId) {
|
|
|
+ char[] charArray = getIdentityCardId.toCharArray();
|
|
|
+ return charArray[16] % 2 == 0;
|
|
|
+ }
|
|
|
/**
|
|
|
* 修改登录密码
|
|
|
*/
|
|
@@ -325,6 +173,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
|
|
|
*/
|
|
|
public UserTaskDTO getStats(Long userId) {
|
|
|
List<UserTask> userTaskList = userTaskService.lambdaQuery().eq(UserTask::getUserId, userId).list();
|
|
|
+
|
|
|
+ // 检查 userTaskList 是否为空
|
|
|
+ if (userTaskList == null || userTaskList.isEmpty()) {
|
|
|
+ return new UserTaskDTO();
|
|
|
+ }
|
|
|
+
|
|
|
UserTaskDTO userTaskDTO = new UserTaskDTO();
|
|
|
userTaskDTO.setOngoingTasks(0);
|
|
|
userTaskDTO.setSettledTasks(0);
|
|
@@ -358,13 +212,25 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
|
|
|
.filter(userTask -> userTask.getTaskStatus() == 3)
|
|
|
.map(UserTask::getTaskId)
|
|
|
.collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 检查 ids 是否为空
|
|
|
+ if (ids.isEmpty()) {
|
|
|
+ userTaskDTO.setTaskDetails(new ArrayList<>());
|
|
|
+ return userTaskDTO;
|
|
|
+ }
|
|
|
+
|
|
|
List<NewTaskDTO> newTaskDTOS = taskClient.queryTaskById(ids);
|
|
|
- List<TaskDetail> taskDetails = BeanUtils.copyList(newTaskDTOS, TaskDetail.class);
|
|
|
- userTaskDTO.setTaskDetails(taskDetails);
|
|
|
- return userTaskDTO;
|
|
|
- }
|
|
|
|
|
|
+ // 检查 newTaskDTOS 是否为空
|
|
|
+ if (newTaskDTOS == null || newTaskDTOS.isEmpty()) {
|
|
|
+ userTaskDTO.setTaskDetails(new ArrayList<>());
|
|
|
+ } else {
|
|
|
+ List<TaskDetail> taskDetails = BeanUtils.copyList(newTaskDTOS, TaskDetail.class);
|
|
|
+ userTaskDTO.setTaskDetails(taskDetails);
|
|
|
+ }
|
|
|
|
|
|
+ return userTaskDTO;
|
|
|
+ }
|
|
|
|
|
|
public User loginByPw(LoginFormDTO loginDTO) {
|
|
|
// 1.数据校验
|