wj-manager-system/src/main/java/com/wj/manager/service/impl/AccountServiceImpl.java
2025-01-17 18:33:19 +08:00

168 lines
6.2 KiB
Java

package com.wj.manager.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wj.manager.common.req.AccountRequest;
import com.wj.manager.common.req.CreateAccountReq;
import com.wj.manager.common.req.LoginReq;
import com.wj.manager.common.resp.AccountTokenResp;
import com.wj.manager.common.resp.LoginResp;
import com.wj.manager.dto.AccountInfoDTO;
import com.wj.manager.entity.AccountEntity;
import com.wj.manager.entity.ClassEntity;
import com.wj.manager.enums.CollegeTypeEnum;
import com.wj.manager.enums.EnableStatusEnum;
import com.wj.manager.enums.RoleTypeEnum;
import com.wj.manager.exception.BaseErrorCode;
import com.wj.manager.exception.BizException;
import com.wj.manager.mapper.AccountMapper;
import com.wj.manager.service.AccountService;
import com.wj.manager.service.ClassService;
import com.wj.manager.utils.JWTUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Service
public class AccountServiceImpl extends ServiceImpl<AccountMapper, AccountEntity> implements AccountService {
@Resource
private ClassService classService;
@Override
public boolean teacherRegister(AccountRequest req) {
AccountEntity accountEntity = new AccountEntity();
accountEntity.setUsername(req.getUsername());
accountEntity.setPassword(req.getPassword());
accountEntity.setClassId(0L);
accountEntity.setRole(RoleTypeEnum.TEACHER.getCode());
accountEntity.setStatus(EnableStatusEnum.ENABLE.getCode());
accountEntity.setCreateTime(new Date());
accountEntity.setUpdateTime(new Date());
return save(accountEntity);
}
// 登录
public LoginResp login(LoginReq req) {
// 查询用户信息
AccountEntity account = getById(req.getAccountId());
if (account == null) {
throw new BizException(BaseErrorCode.USER_NOT_EXIST);
}
// 密码校验
if (!req.getPassword().equals(account.getPassword())) {
throw new BizException(BaseErrorCode.PASSWORD_ERROR);
}
// token生成
String token = JWTUtils.createToken(account.getId().toString());
return LoginResp.builder()
.accountId(account.getId())
.username(account.getUsername())
.headImg(account.getHeadImg())
.role(account.getRole())
.token(token)
.build();
}
@Override
public boolean updateAccount(AccountInfoDTO dto) {
AccountEntity accountEntity = getById(dto.getUserId());
if (accountEntity == null) {
throw new BizException(BaseErrorCode.USER_NOT_EXIST);
}
String collegeValue = CollegeTypeEnum.getByName(dto.getCollege());
if (StringUtils.isEmpty(collegeValue)) {
collegeValue = dto.getCollege();
}
String gender = dto.getGender();
switch (gender) {
case "":
accountEntity.setGender(1);
break;
case "":
accountEntity.setGender(2);
break;
default:
accountEntity.setGender(Integer.parseInt(gender));
}
String birthday = dto.getBirthday().substring(0, 10);
accountEntity.setUsername(dto.getUsername());
accountEntity.setClassId(dto.getClassId());
accountEntity.setBirthday(birthday);
accountEntity.setPhone(dto.getPhone());
accountEntity.setCollege(collegeValue);
accountEntity.setUpdateTime(new Date());
return updateById(accountEntity);
}
@Override
public List<AccountInfoDTO> teacherList() {
LambdaQueryWrapper<AccountEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(AccountEntity::getRole, RoleTypeEnum.TEACHER.getCode());
return list(queryWrapper).stream()
.map(AccountInfoDTO::new)
.collect(Collectors.toList());
}
@Override
public AccountInfoDTO userInfo(Long userId) {
if (userId == null || userId <= 0) {
throw new BizException(BaseErrorCode.PARAM_INVALID);
}
AccountEntity accountEntity = getById(userId);
if (accountEntity == null) {
throw new BizException(BaseErrorCode.USER_NOT_EXIST);
}
return new AccountInfoDTO(accountEntity);
}
@Override
public List<AccountInfoDTO> classStudentList(Long classId, RoleTypeEnum role, Long userId) {
// 非教师、管理员无权限
if (!RoleTypeEnum.isAdminOrTeacher(role)) {
throw new BizException(BaseErrorCode.NO_PERMISSION);
}
LambdaQueryWrapper<AccountEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(AccountEntity::getRole, RoleTypeEnum.STUDENT.getCode());
if (classId != null ) {
queryWrapper.eq(AccountEntity::getClassId, classId);
}
return list(queryWrapper).stream()
.map(AccountInfoDTO::new)
.filter(accountInfoDTO -> userId == null || userId.equals(accountInfoDTO.getUserId()))
.filter(accountInfoDTO -> classId == null || classId.equals(accountInfoDTO.getClassId()))
.collect(Collectors.toList());
}
@Override
public boolean addAccount(CreateAccountReq req, RoleTypeEnum role) {
AccountEntity accountEntity = new AccountEntity();
accountEntity.setUsername(req.getUsername());
accountEntity.setPassword(req.getBirthday());
accountEntity.setGender(req.getGender());
accountEntity.setBirthday(req.getBirthday());
accountEntity.setPhone(req.getPhone());
accountEntity.setCollege(req.getCollege());
accountEntity.setClassId(req.getClassId());
accountEntity.setRole(role.getCode());
accountEntity.setStatus(EnableStatusEnum.ENABLE.getCode());
accountEntity.setRole(role.getCode());
accountEntity.setCreateTime(new Date());
accountEntity.setUpdateTime(new Date());
return save(accountEntity);
}
}