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 implements UserService { @Override public IPage getUserPage(Long current, Long size, String username, String realName, String deptCode, List permissionDeptCodes) { Page page = new Page<>(current, size); page.setOptimizeJoinOfCountSql(false); page.setOptimizeCountSql(false); LambdaQueryWrapper 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 permissionDeptCodes) { List userList = new ArrayList<>(); List errorMsgs = new ArrayList<>(); try { EasyExcel.read(file.getInputStream(), UserImportExcel.class, new ReadListener() { @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 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); } }