package com.lxzn.ucenter.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.additional.query.impl.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.lxzn.activiti.service.IActivitiDefinitionService; import com.lxzn.auth.JwtUtil; import com.lxzn.framework.domain.activiti.ActivitiDefinition; import com.lxzn.framework.domain.nc.DevicePermissionStream; import com.lxzn.framework.domain.nc.PermissionStream; import com.lxzn.framework.domain.ucenter.*; import com.lxzn.framework.domain.ucenter.ext.UserDepartExport; import com.lxzn.framework.domain.ucenter.ext.UserDepartExt; import com.lxzn.framework.domain.ucenter.ext.UserExt; import com.lxzn.framework.domain.ucenter.request.UserPasswordRequest; import com.lxzn.framework.domain.ucenter.request.UserRequest; import com.lxzn.framework.domain.ucenter.response.UcenterCode; import com.lxzn.framework.exception.ExceptionCast; import com.lxzn.framework.model.response.CommonCode; import com.lxzn.framework.model.response.QueryPageResponseResult; import com.lxzn.framework.utils.BCryptUtil; import com.lxzn.framework.utils.ExcelUtils; import com.lxzn.framework.utils.ValidateUtil; import com.lxzn.nc.service.IDevicePermissionStreamService; import com.lxzn.nc.service.IPermissionStreamService; import com.lxzn.ucenter.dao.UserMapper; import com.lxzn.ucenter.service.*; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.servlet.ModelAndView; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @Service public class UserServiceImpl extends ServiceImpl implements IUserService { @Autowired private IMenuService menuService; @Autowired private IUserRoleService userRoleService; @Autowired private IDepartmentUserService departmentUserService; @Autowired private IRoleService roleService; @Autowired private IDepartmentService departmentService; @Autowired private IActivitiDefinitionService activitiDefinitionService; @Autowired private IPermissionStreamService permissionStreamService; @Autowired private IDevicePermissionStreamService devicePermissionStreamService; @Override @Transactional(rollbackFor = {Exception.class}) public boolean addUser(User user) { if(user == null) ExceptionCast.cast(CommonCode.INVALID_PARAM); if(!ValidateUtil.validateString(user.getUsername())) ExceptionCast.cast(UcenterCode.UCENTER_USERNAME_NONE); if(!ValidateUtil.validateString(user.getPassword())) ExceptionCast.cast(UcenterCode.UCENTER_PASSWORD_NONE); User en = findByUsername(user.getUsername()); if(en != null) { ExceptionCast.cast(UcenterCode.UCENTER_USER_EXIST); } user.setPassword(BCryptUtil.encode(user.getPassword())); return super.save(user); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean editUser(String id, User user) { if(!ValidateUtil.validateString(id) || user == null) ExceptionCast.cast(CommonCode.INVALID_PARAM); User en = super.getById(id); if(en == null) ExceptionCast.cast(UcenterCode.UCENTER_USER_NOT_EXIST); user.setUserId(id); user.setUsername(null);//不能更新用户名 //更新密码逻辑处理 if(!ValidateUtil.validateString(user.getPassword())) { user.setPassword(null); }else { user.setPassword(BCryptUtil.encode(user.getPassword())); } return super.updateById(user); } @Override public User findByUsername(String username) { if(!ValidateUtil.validateString(username)) return null; List list = super.lambdaQuery().eq(User::getUsername, username).list(); if(list == null || list.isEmpty()) return null; return list.get(0); } @Override public QueryPageResponseResult findUserPageList(int page, int size, UserRequest userRequest) { if(page < 1 || size < 1) { ExceptionCast.cast(CommonCode.INVALID_PAGE); } IPage pageData = new Page<>(page, size); LambdaQueryWrapper lambdaQuery = Wrappers.lambdaQuery(); if(userRequest != null) { if(ValidateUtil.validateString(userRequest.getUsername())) { lambdaQuery.like(User::getUsername, userRequest.getUsername()); } if(ValidateUtil.validateString(userRequest.getNickname())) { lambdaQuery.like(User::getNickname, userRequest.getNickname()); } if(ValidateUtil.validateString(userRequest.getDepartId())) { lambdaQuery.inSql(User::getUserId, "select user_id from sys_depart_user where depart_id=" + userRequest.getDepartId()); } if(ValidateUtil.validateString(userRequest.getAscStr())) { String[] ascArr = userRequest.getAscStr().split(","); ((Page) pageData).setAsc(ascArr); } if(ValidateUtil.validateString(userRequest.getDescStr())) { String[] descStr = userRequest.getDescStr().split(","); ((Page) pageData).setDesc(descStr); } } IPage userIPage = super.getBaseMapper().findUserDepartExtPageList(pageData, lambdaQuery); return new QueryPageResponseResult<>(CommonCode.SUCCESS, userIPage); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean deleteUserById(String id) { if(!ValidateUtil.validateString(id)) { ExceptionCast.cast(CommonCode.INVALID_PARAM); } User en = super.getById(id); if(en == null) ExceptionCast.cast(UcenterCode.UCENTER_USER_NOT_EXIST); List definitionList = activitiDefinitionService.findByUserId(id); if(definitionList != null && !definitionList.isEmpty()) ExceptionCast.cast(UcenterCode.UCENTER_ACT_EXIST); List permissionStreamList = permissionStreamService.findByUserId(id); if(permissionStreamList != null && !permissionStreamList.isEmpty()) ExceptionCast.cast(UcenterCode.UCENTER_PRODUCT_EXIST); List devicePermissionStreams = devicePermissionStreamService.findByUserId(id); if(devicePermissionStreams != null && !devicePermissionStreams.isEmpty()) ExceptionCast.cast(UcenterCode.UCENTER_DEVICE_EXIST); boolean b = userRoleService.deleteByUserId(id); if(!b) ExceptionCast.cast(CommonCode.FAIL); b = departmentUserService.deleteByUserId(id); if(!b) ExceptionCast.cast(CommonCode.FAIL); return super.removeById(id); } @Override public UserExt findUserExtByUsername(String username) { if(!ValidateUtil.validateString(username)) return null; QueryWrapper ew = Wrappers.query(); ew.eq("u.username", username); ew.eq("u.delete_flag", 0); List list = this.getBaseMapper().findUserExtByUsername(ew); if(list == null || list.size() != 1) return null; UserExt userExt = list.get(0); List menuList = menuService.findByUserId(userExt.getUserId()); if(menuList != null && !menuList.isEmpty()) userExt.setPermissions(menuList); return userExt; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean setPassword(UserPasswordRequest userPassword) { if(userPassword == null || !ValidateUtil.validateString(userPassword.getUserId()) || !ValidateUtil.validateString(userPassword.getOldPassword()) || !ValidateUtil.validateString(userPassword.getNewPassword())) ExceptionCast.cast(CommonCode.INVALID_PARAM); User en = super.getById(userPassword.getUserId()); if(en == null) { ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST); } boolean r = BCryptUtil.matches(userPassword.getOldPassword(), en.getPassword()); if(!r) { ExceptionCast.cast(UcenterCode.UCENTER_PASSWORD_ERROR); } String np = BCryptUtil.encode(userPassword.getNewPassword()); User up = new User(); up.setPassword(np); up.setUserId(userPassword.getUserId()); return super.updateById(up); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean assignAddRoles(String userId, String[] roleIds) { if(!ValidateUtil.validateString(userId)) ExceptionCast.cast(UcenterCode.UCENTER_USER_ID_NONE); User user = super.getById(userId); if(user == null) ExceptionCast.cast(UcenterCode.UCENTER_USER_NOT_EXIST); if(roleIds == null || roleIds.length < 1) { ExceptionCast.cast(UcenterCode.UCENTER_ROLE_NONE); } //校验数据 List roleIdList = new ArrayList<>(roleIds.length); Collections.addAll(roleIdList, roleIds); Collection roleList = roleService.listByIds(roleIdList); if(roleList == null || roleList.isEmpty() || roleList.size() != roleIds.length) ExceptionCast.cast(UcenterCode.UCENTER_ROLE_NONE); List userRoleList = new ArrayList<>(); roleList.forEach(item -> { UserRole userRole = userRoleService.getByUserIdAndRoleId(user.getUserId(), item.getRoleId()); if(userRole == null) { userRole = new UserRole(); userRole.setRoleId(item.getRoleId()); userRole.setUserId(user.getUserId()); userRoleList.add(userRole); } }); if(!userRoleList.isEmpty()) { return userRoleService.saveBatch(userRoleList); } return false; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean assignRemoveRoles(String userId, String[] roleIds) { if(!ValidateUtil.validateString(userId)) ExceptionCast.cast(UcenterCode.UCENTER_USER_ID_NONE); User user = super.getById(userId); if(user == null) ExceptionCast.cast(UcenterCode.UCENTER_USER_NOT_EXIST); if(roleIds == null || roleIds.length < 1) { ExceptionCast.cast(UcenterCode.UCENTER_ROLE_NONE); } //校验数据 List roleIdList = new ArrayList<>(roleIds.length); Collections.addAll(roleIdList, roleIds); Collection roleList = roleService.listByIds(roleIdList); if(roleList == null || roleList.isEmpty() || roleList.size() != roleIds.length) ExceptionCast.cast(UcenterCode.UCENTER_ROLE_NONE); List userRoleList = new ArrayList<>(); roleList.forEach(item -> { UserRole userRole = userRoleService.getByUserIdAndRoleId(user.getUserId(), item.getRoleId()); if(userRole != null) { userRoleList.add(userRole); } }); if(!userRoleList.isEmpty()) { return userRoleService.removeByCollection(userRoleList); } return false; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean assignAddDeparts(String userId, String[] departIds) { if(!ValidateUtil.validateString(userId)) ExceptionCast.cast(UcenterCode.UCENTER_USER_ID_NONE); if(departIds == null || departIds.length < 1) ExceptionCast.cast(UcenterCode.UCENTER_DEPART_NONE); User user = super.getById(userId); if(user == null) ExceptionCast.cast(UcenterCode.UCENTER_USER_NOT_EXIST); List departIdList = new ArrayList<>(departIds.length); Collections.addAll(departIdList, departIds); Collection departmentList = departmentService.listByIds(departIdList); if(departmentList == null || departmentList.isEmpty() || departIds.length != departmentList.size()) ExceptionCast.cast(UcenterCode.UCENTER_DEPART_NONE); List departmentUserList = new ArrayList<>(); departmentList.forEach(item -> { DepartmentUser departmentUser = departmentUserService.getByUserIdAndDepartId(user.getUserId(), item.getDepartId()); if(departmentUser == null) { departmentUser = new DepartmentUser(); departmentUser.setDepartId(item.getDepartId()); departmentUser.setUserId(user.getUserId()); departmentUserList.add(departmentUser); } }); if(!departmentUserList.isEmpty()) { return departmentUserService.saveBatch(departmentUserList); } return false; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean assignRemoveDeparts(String userId, String[] departIds) { if(!ValidateUtil.validateString(userId)) ExceptionCast.cast(UcenterCode.UCENTER_USER_ID_NONE); if(departIds == null || departIds.length < 1) ExceptionCast.cast(UcenterCode.UCENTER_DEPART_NONE); User user = super.getById(userId); if(user == null) ExceptionCast.cast(UcenterCode.UCENTER_USER_NOT_EXIST); List departIdList = new ArrayList<>(departIds.length); Collections.addAll(departIdList, departIds); Collection departmentList = departmentService.listByIds(departIdList); if(departmentList == null || departmentList.isEmpty() || departIds.length != departmentList.size()) ExceptionCast.cast(UcenterCode.UCENTER_DEPART_NONE); List departmentUserList = new ArrayList<>(); departmentList.forEach(item -> { DepartmentUser departmentUser = departmentUserService.getByUserIdAndDepartId(user.getUserId(), item.getDepartId()); if(departmentUser != null) { departmentUserList.add(departmentUser); } }); if(!departmentUserList.isEmpty()) { return departmentUserService.removeByCollection(departmentUserList); } return false; } @Override public List findAllUserDepartExtList() { return super.getBaseMapper().findAllUserDepartExtList(); } /** * 导出用户 * @return */ @Override public ModelAndView exportUser(UserRequest userRequest) { List userDepartExports=new ArrayList<>(); LambdaQueryChainWrapper lambdaQuery = super.lambdaQuery(); if(userRequest != null) { lambdaQuery.eq(StrUtil.isNotEmpty(userRequest.getUsername()),User::getUsername, userRequest.getUsername()); lambdaQuery.eq(StrUtil.isNotEmpty(userRequest.getNickname()),User::getNickname, userRequest.getNickname()); lambdaQuery.inSql(StrUtil.isNotEmpty(userRequest.getDepartId()),User::getUserId, "select user_id from sys_depart_user where depart_id=" + userRequest.getDepartId()); } lambdaQuery.orderByDesc(User::getCreateTime); List userList = lambdaQuery.list(); userList.forEach(item -> { UserDepartExport userDepartExport = new UserDepartExport(); BeanUtils.copyProperties(item, userDepartExport); List departmentUserList=departmentUserService.list(new QueryWrapper().eq("user_id",item.getUserId())); if (!departmentUserList.isEmpty()){ List departIds=departmentUserList.stream().map(DepartmentUser::getDepartId).collect(Collectors.toList()); if (!departIds.isEmpty()) { List departNames=departmentService.listByIds(departIds).stream().map(Department::getDepartName).collect(Collectors.toList()); //采用逗号分隔 userDepartExport.setDepartmentName(String.join(",", departNames)); userDepartExports.add(userDepartExport); } } }); String userId = JwtUtil.getUserId(); return ExcelUtils.export("用户管理", UserDepartExport.class, userDepartExports,this.getById(userId).getNickname()); } }