package com.example.service.impl;
|
|
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.context.AnalysisContext;
|
import com.alibaba.excel.read.listener.ReadListener;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
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.example.entity.User;
|
import com.example.excel.UserImportExcel;
|
import com.example.mapper.UserMapper;
|
import com.example.service.UserService;
|
import com.example.utils.Md5Util;
|
import org.springframework.stereotype.Service;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
@Service
|
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
|
|
@Override
|
public IPage<User> getUserPage(Long current, Long size, String username, String realName, String deptCode, List<String> permissionDeptCodes) {
|
Page<User> page = new Page<>(current, size);
|
page.setOptimizeJoinOfCountSql(false);
|
page.setOptimizeCountSql(false);
|
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
|
wrapper.like(username != null && !username.isEmpty(), User::getUsername, username)
|
.like(realName != null && !realName.isEmpty(), User::getRealName, realName)
|
.eq(deptCode != null && !deptCode.isEmpty(), User::getDeptCode, deptCode)
|
.in(permissionDeptCodes != null && !permissionDeptCodes.isEmpty(), User::getDeptCode, permissionDeptCodes)
|
.orderByDesc(User::getId);
|
return page(page, wrapper);
|
}
|
|
@Override
|
public User getUserWithDeptById(Long id) {
|
return baseMapper.selectUserWithDeptById(id);
|
}
|
|
@Override
|
public boolean checkUsernameExists(String username) {
|
return lambdaQuery().eq(User::getUsername, username).one() != null;
|
}
|
|
@Override
|
public String importUsers(MultipartFile file, List<String> permissionDeptCodes) {
|
List<User> userList = new ArrayList<>();
|
List<String> errorMsgs = new ArrayList<>();
|
|
try {
|
EasyExcel.read(file.getInputStream(), UserImportExcel.class, new ReadListener<UserImportExcel>() {
|
@Override
|
public void invoke(UserImportExcel data, AnalysisContext context) {
|
if (checkUsernameExists(data.getUsername())) {
|
errorMsgs.add("用户名已存在: " + data.getUsername());
|
return;
|
}
|
if (!permissionDeptCodes.contains(data.getDeptCode())) {
|
errorMsgs.add("无权限导入部门: " + data.getDeptCode() + ", 用户名: " + data.getUsername());
|
return;
|
}
|
User user = new User();
|
user.setUsername(data.getUsername());
|
user.setRealName(data.getRealName());
|
user.setPassword(Md5Util.encrypt("123456"));
|
if(data.getEmail() != null && !data.getEmail().isEmpty()){
|
user.setEmail(data.getEmail());
|
}
|
if(data.getPhone() != null && !data.getPhone().isEmpty()){
|
user.setPhone(data.getPhone());
|
}
|
user.setDeptCode(data.getDeptCode());
|
user.setStatus(1);
|
userList.add(user);
|
}
|
|
@Override
|
public void doAfterAllAnalysed(AnalysisContext context) {
|
}
|
}).sheet().doRead();
|
} catch (IOException e) {
|
return "导入失败: " + e.getMessage();
|
}
|
|
if (!errorMsgs.isEmpty()) {
|
return "导入部分失败: " + String.join(", ", errorMsgs);
|
}
|
|
if (saveBatch(userList)) {
|
return "成功导入 " + userList.size() + " 条记录";
|
} else {
|
return "导入失败";
|
}
|
}
|
|
@Override
|
public List<User> getUsersByDeptCode(String deptCode) {
|
return baseMapper.selectByDeptCode(deptCode);
|
}
|
|
@Override
|
public boolean changePassword(Long userId, String oldPassword, String newPassword) {
|
User user = getById(userId);
|
if (user == null) {
|
return false;
|
}
|
if (!user.getPassword().equals(Md5Util.encrypt(oldPassword))) {
|
return false;
|
}
|
user.setPassword(Md5Util.encrypt(newPassword));
|
return updateById(user);
|
}
|
}
|