package com.ycl.jxkg.service.impl;
|
|
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.ExcelWriter;
|
import com.alibaba.excel.read.listener.PageReadListener;
|
import com.alibaba.excel.write.metadata.WriteSheet;
|
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageInfo;
|
import com.ycl.jxkg.domain.entity.User;
|
import com.ycl.jxkg.domain.entity.UserEventLog;
|
import com.ycl.jxkg.domain.form.RegisterForm;
|
import com.ycl.jxkg.domain.form.StudentUpdatePwdForm;
|
import com.ycl.jxkg.domain.form.UpdatePwdForm;
|
import com.ycl.jxkg.domain.other.KeyValue;
|
import com.ycl.jxkg.domain.vo.StudentVO;
|
import com.ycl.jxkg.domain.vo.admin.user.UserExcelVo;
|
import com.ycl.jxkg.domain.vo.admin.user.UserPageRequestVO;
|
import com.ycl.jxkg.enums.RoleEnum;
|
import com.ycl.jxkg.enums.UserStatusEnum;
|
import com.ycl.jxkg.event.OnRegistrationCompleteEvent;
|
import com.ycl.jxkg.event.UserEvent;
|
import com.ycl.jxkg.exception.BusinessException;
|
import com.ycl.jxkg.mapper.UserMapper;
|
import com.ycl.jxkg.service.AuthenticationService;
|
import com.ycl.jxkg.service.UserService;
|
import lombok.RequiredArgsConstructor;
|
import lombok.SneakyThrows;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.context.ApplicationEventPublisher;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
|
@Service
|
@RequiredArgsConstructor
|
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
|
|
private final UserMapper userMapper;
|
private final ApplicationEventPublisher eventPublisher;
|
private final AuthenticationService authenticationService;
|
|
|
public List<User> getUsers() {
|
return userMapper.getAllUser();
|
}
|
|
public User getUserById(Integer id) {
|
return userMapper.getUserById(id);
|
}
|
|
public User getUserByUserName(String username) {
|
return userMapper.getUserByUserName(username);
|
}
|
|
@Override
|
public User getUserByUserNamePwd(String username, String pwd) {
|
return userMapper.getUserByUserNamePwd(username, pwd);
|
}
|
|
@Override
|
public User getUserByUuid(String uuid) {
|
return userMapper.getUserByUuid(uuid);
|
}
|
|
@Override
|
public List<User> userPageList(String name, Integer pageIndex, Integer pageSize) {
|
Map<String, Object> map = new HashMap<>(3);
|
map.put("name", name);
|
map.put("offset", ((int) pageIndex) * pageSize);
|
map.put("limit", pageSize);
|
return userMapper.userPageList(map);
|
}
|
|
@Override
|
public Integer userPageCount(String name) {
|
Map<String, Object> map = new HashMap<>(1);
|
map.put("name", name);
|
return userMapper.userPageCount(map);
|
}
|
|
|
@Override
|
public PageInfo<User> userPage(UserPageRequestVO requestVM) {
|
return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() ->
|
userMapper.userPage(requestVM)
|
);
|
}
|
|
|
@Override
|
public void insertUser(User user) {
|
user.setLastUpdatePasswordTime(new Date());
|
userMapper.insert(user);
|
eventPublisher.publishEvent(new OnRegistrationCompleteEvent(user));
|
}
|
|
@Override
|
@Transactional(rollbackFor = BusinessException.class)
|
public void insertUsers(List<User> users) {
|
users.stream().forEach(item -> {
|
item.setLastUpdatePasswordTime(new Date());
|
});
|
userMapper.insertUsers(users);
|
throw new BusinessException("test BusinessException roll back");
|
}
|
|
@Override
|
public void updateUser(User user) {
|
userMapper.updateUser(user);
|
}
|
|
@Override
|
public void updateUsersAge(Integer age, List<Integer> ids) {
|
Map<String, Object> map = new HashMap<>(2);
|
map.put("idslist", ids);
|
map.put("age", age);
|
userMapper.updateUsersAge(map);
|
}
|
|
@Override
|
public void deleteUserByIds(List<Integer> ids) {
|
userMapper.deleteUsersByIds(ids);
|
}
|
|
@Override
|
public Integer selectAllCount() {
|
return userMapper.selectAllCount();
|
}
|
|
@Override
|
public List<KeyValue> selectByUserName(String userName) {
|
return userMapper.selectByUserName(userName);
|
}
|
|
@Override
|
public List<User> selectByIds(List<Integer> ids) {
|
return userMapper.selectByIds(ids);
|
}
|
|
@Override
|
public User selectByWxOpenId(String wxOpenId) {
|
return userMapper.selectByWxOpenId(wxOpenId);
|
}
|
|
@Override
|
@Transactional
|
public void changePicture(User user, String imagePath) {
|
User changePictureUser = new User();
|
changePictureUser.setId(user.getId());
|
changePictureUser.setImagePath(imagePath);
|
userMapper.updateById(changePictureUser);
|
}
|
|
@Override
|
public void teacherRegister(RegisterForm form) {
|
User teacher = new User();
|
BeanUtils.copyProperties(form, teacher);
|
teacher.setRole(RoleEnum.ADMIN.getCode());
|
teacher.setUserUuid(UUID.randomUUID().toString());
|
teacher.setLastActiveTime(new Date());
|
teacher.setStatus(UserStatusEnum.Enable.getCode());
|
teacher.setDeleted(0);
|
this.insertUser(teacher);
|
// 发布注册事件,保存注册日志
|
UserEventLog userEventLog = new UserEventLog(teacher.getId(), teacher.getUserName(), teacher.getRealName(), new Date());
|
userEventLog.setContent("欢迎 " + teacher.getUserName() + " 注册来到音视频培训系统");
|
eventPublisher.publishEvent(new UserEvent(userEventLog));
|
}
|
|
@Override
|
public void studentRegister(RegisterForm form) {
|
User student = new User();
|
BeanUtils.copyProperties(form, student);
|
student.setRole(RoleEnum.ADMIN.getCode());
|
student.setUserUuid(UUID.randomUUID().toString());
|
student.setLastActiveTime(new Date());
|
student.setStatus(UserStatusEnum.Enable.getCode());
|
student.setDeleted(0);
|
this.insertUser(student);
|
// 发布注册事件,保存注册日志
|
UserEventLog userEventLog = new UserEventLog(student.getId(), student.getUserName(), student.getRealName(), new Date());
|
userEventLog.setContent("欢迎 " + student.getUserName() + " 注册来到音视频培训系统");
|
eventPublisher.publishEvent(new UserEvent(userEventLog));
|
}
|
|
@Override
|
public List<StudentVO> classesStudent(Integer classesId) {
|
return userMapper.classesStudent(classesId);
|
}
|
|
@Override
|
public void updatePassword(UpdatePwdForm form) {
|
new LambdaUpdateChainWrapper<>(baseMapper)
|
.eq(User::getId, form.getUserId())
|
.set(User::getPassword, authenticationService.pwdEncode(form.getNewPassword()))
|
.set(User::getLastUpdatePasswordTime, new Date())
|
.update();
|
}
|
|
@Override
|
public void updateStudentPassword(StudentUpdatePwdForm form) {
|
User user = baseMapper.selectById(form.getUserId());
|
if(user ==null){
|
throw new RuntimeException("用户不存在");
|
}
|
if(authenticationService.authUser(user,user.getUserName(),form.getOldPassword())){
|
//密码正确
|
new LambdaUpdateChainWrapper<>(baseMapper)
|
.eq(User::getId, form.getUserId())
|
.set(User::getPassword, authenticationService.pwdEncode(form.getNewPassword()))
|
.set(User::getLastUpdatePasswordTime, new Date())
|
.update();
|
}else {
|
//密码错误
|
throw new RuntimeException("旧密码错误,请确认后重新输入");
|
}
|
}
|
|
@Override
|
@SneakyThrows
|
public void importTemplate(HttpServletResponse response) {
|
List<UserExcelVo> list = new ArrayList<>();
|
UserExcelVo userExcelVo = new UserExcelVo();
|
userExcelVo.setUserName("zhangSan");
|
userExcelVo.setRealName("张三");
|
userExcelVo.setSex(1);
|
userExcelVo.setRole(1);
|
userExcelVo.setPhone("12345678901");
|
userExcelVo.setAge(24);
|
userExcelVo.setBirthDay("2000-01-01");
|
list.add(userExcelVo);
|
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), UserExcelVo.class).build();
|
WriteSheet writeSheet = EasyExcel.writerSheet(0, "用户信息").build();
|
excelWriter.write(list, writeSheet);
|
excelWriter.finish();
|
}
|
|
@Override
|
@SneakyThrows
|
@Transactional
|
public String importExcel(MultipartFile file) {
|
List<User> userList = new ArrayList<>();
|
List<String> errorList = new ArrayList<>();
|
EasyExcel.read(file.getInputStream(), UserExcelVo.class, new PageReadListener<UserExcelVo>(dataList -> dataList.forEach(item -> {
|
User user = new User();
|
user.setUserName(item.getUserName());
|
user.setPassword(authenticationService.pwdEncode("!Password123456789"));
|
user.setRealName(item.getRealName());
|
user.setSex(item.getSex());
|
user.setPhone(item.getPhone());
|
try {
|
user.setBirthDay(new SimpleDateFormat("yyyy-MM-dd").parse(item.getBirthDay()));
|
} catch (ParseException e) {
|
errorList.add(item.getRealName());
|
}
|
user.setAge(item.getAge());
|
user.setRole(item.getRole());
|
user.setStatus(UserStatusEnum.Enable.getCode());
|
user.setLastUpdatePasswordTime(new Date());
|
userList.add(user);
|
}))).sheet().doRead();
|
if (!errorList.isEmpty()) {
|
return "以下数据日期格式错误:" + String.join(",", errorList);
|
} else {
|
saveBatch(userList);
|
}
|
return "成功导入" + userList.size() + "条数据";
|
}
|
}
|