package com.jcdm.system.service.impl; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import javax.validation.Validator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import com.jcdm.common.annotation.DataScope; import com.jcdm.common.constant.UserConstants; import com.jcdm.common.core.domain.entity.SysRole; import com.jcdm.common.core.domain.entity.SysUser; import com.jcdm.common.exception.ServiceException; import com.jcdm.common.utils.SecurityUtils; import com.jcdm.common.utils.StringUtils; import com.jcdm.common.utils.bean.BeanValidators; import com.jcdm.common.utils.spring.SpringUtils; import com.jcdm.system.domain.SysPost; import com.jcdm.system.domain.SysUserPost; import com.jcdm.system.domain.SysUserRole; import com.jcdm.system.mapper.SysPostMapper; import com.jcdm.system.mapper.SysRoleMapper; import com.jcdm.system.mapper.SysUserMapper; import com.jcdm.system.mapper.SysUserPostMapper; import com.jcdm.system.mapper.SysUserRoleMapper; import com.jcdm.system.service.ISysConfigService; import com.jcdm.system.service.ISysUserService; /** * 用户 ä¸šåŠ¡å±‚å¤„ç† * * @author jc */ @Service public class SysUserServiceImpl implements ISysUserService { private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class); @Autowired private SysUserMapper userMapper; @Autowired private SysRoleMapper roleMapper; @Autowired private SysPostMapper postMapper; @Autowired private SysUserRoleMapper userRoleMapper; @Autowired private SysUserPostMapper userPostMapper; @Autowired private ISysConfigService configService; @Autowired protected Validator validator; /** * æ ¹æ®æ¡ä»¶åˆ†é¡µæŸ¥è¯¢ç”¨æˆ·åˆ—表 * * @param user ç”¨æˆ·ä¿¡æ¯ * @return 用户信æ¯é›†åˆä¿¡æ¯ */ @Override @DataScope(deptAlias = "d", userAlias = "u") public List<SysUser> selectUserList(SysUser user) { return userMapper.selectUserList(user); } /** * æ ¹æ®æ¡ä»¶åˆ†é¡µæŸ¥è¯¢å·²åˆ†é…用户角色列表 * * @param user ç”¨æˆ·ä¿¡æ¯ * @return 用户信æ¯é›†åˆä¿¡æ¯ */ @Override @DataScope(deptAlias = "d", userAlias = "u") public List<SysUser> selectAllocatedList(SysUser user) { return userMapper.selectAllocatedList(user); } /** * æ ¹æ®æ¡ä»¶åˆ†é¡µæŸ¥è¯¢æœªåˆ†é…用户角色列表 * * @param user ç”¨æˆ·ä¿¡æ¯ * @return 用户信æ¯é›†åˆä¿¡æ¯ */ @Override @DataScope(deptAlias = "d", userAlias = "u") public List<SysUser> selectUnallocatedList(SysUser user) { return userMapper.selectUnallocatedList(user); } /** * 通过用户å查询用户 * * @param userName 用户å * @return ç”¨æˆ·å¯¹è±¡ä¿¡æ¯ */ @Override public SysUser selectUserByUserName(String userName) { return userMapper.selectUserByUserName(userName); } /** * 通过用户ID查询用户 * * @param userId 用户ID * @return ç”¨æˆ·å¯¹è±¡ä¿¡æ¯ */ @Override public SysUser selectUserById(Long userId) { return userMapper.selectUserById(userId); } /** * 查询用户所属角色组 * * @param userName 用户å * @return 结果 */ @Override public String selectUserRoleGroup(String userName) { List<SysRole> list = roleMapper.selectRolesByUserName(userName); if (CollectionUtils.isEmpty(list)) { return StringUtils.EMPTY; } return list.stream().map(SysRole::getRoleName).collect(Collectors.joining(",")); } /** * 查询用户所属岗ä½ç»„ * * @param userName 用户å * @return 结果 */ @Override public String selectUserPostGroup(String userName) { List<SysPost> list = postMapper.selectPostsByUserName(userName); if (CollectionUtils.isEmpty(list)) { return StringUtils.EMPTY; } return list.stream().map(SysPost::getPostName).collect(Collectors.joining(",")); } /** * æ ¡éªŒç”¨æˆ·å称是å¦å”¯ä¸€ * * @param user ç”¨æˆ·ä¿¡æ¯ * @return 结果 */ @Override public boolean checkUserNameUnique(SysUser user) { Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); SysUser info = userMapper.checkUserNameUnique(user.getUserName()); if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; } /** * æ ¡éªŒæ‰‹æœºå·ç 是å¦å”¯ä¸€ * * @param user ç”¨æˆ·ä¿¡æ¯ * @return */ @Override public boolean checkPhoneUnique(SysUser user) { Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber()); if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; } /** * æ ¡éªŒemail是å¦å”¯ä¸€ * * @param user ç”¨æˆ·ä¿¡æ¯ * @return */ @Override public boolean checkEmailUnique(SysUser user) { Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); SysUser info = userMapper.checkEmailUnique(user.getEmail()); if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; } /** * æ ¡éªŒç”¨æˆ·æ˜¯å¦å…许æ“作 * * @param user ç”¨æˆ·ä¿¡æ¯ */ @Override public void checkUserAllowed(SysUser user) { if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) { throw new ServiceException("ä¸å…许æ“作超级管ç†å‘˜ç”¨æˆ·"); } } /** * æ ¡éªŒç”¨æˆ·æ˜¯å¦æœ‰æ•°æ®æƒé™ * * @param userId 用户id */ @Override public void checkUserDataScope(Long userId) { if (!SysUser.isAdmin(SecurityUtils.getUserId())) { SysUser user = new SysUser(); user.setUserId(userId); List<SysUser> users = SpringUtils.getAopProxy(this).selectUserList(user); if (StringUtils.isEmpty(users)) { throw new ServiceException("没有æƒé™è®¿é—®ç”¨æˆ·æ•°æ®ï¼"); } } } /** * 新增ä¿å˜ç”¨æˆ·ä¿¡æ¯ * * @param user ç”¨æˆ·ä¿¡æ¯ * @return 结果 */ @Override @Transactional public int insertUser(SysUser user) { // æ–°å¢žç”¨æˆ·ä¿¡æ¯ int rows = userMapper.insertUser(user); // 新增用户岗ä½å…³è” insertUserPost(user); // æ–°å¢žç”¨æˆ·ä¸Žè§’è‰²ç®¡ç† insertUserRole(user); return rows; } /** * æ³¨å†Œç”¨æˆ·ä¿¡æ¯ * * @param user ç”¨æˆ·ä¿¡æ¯ * @return 结果 */ @Override public boolean registerUser(SysUser user) { return userMapper.insertUser(user) > 0; } /** * 修改ä¿å˜ç”¨æˆ·ä¿¡æ¯ * * @param user ç”¨æˆ·ä¿¡æ¯ * @return 结果 */ @Override @Transactional public int updateUser(SysUser user) { Long userId = user.getUserId(); // åˆ é™¤ç”¨æˆ·ä¸Žè§’è‰²å…³è” userRoleMapper.deleteUserRoleByUserId(userId); // æ–°å¢žç”¨æˆ·ä¸Žè§’è‰²ç®¡ç† insertUserRole(user); // åˆ é™¤ç”¨æˆ·ä¸Žå²—ä½å…³è” userPostMapper.deleteUserPostByUserId(userId); // 新增用户与岗ä½ç®¡ç† insertUserPost(user); return userMapper.updateUser(user); } /** * 用户授æƒè§’色 * * @param userId 用户ID * @param roleIds 角色组 */ @Override @Transactional public void insertUserAuth(Long userId, Long[] roleIds) { userRoleMapper.deleteUserRoleByUserId(userId); insertUserRole(userId, roleIds); } /** * ä¿®æ”¹ç”¨æˆ·çŠ¶æ€ * * @param user ç”¨æˆ·ä¿¡æ¯ * @return 结果 */ @Override public int updateUserStatus(SysUser user) { return userMapper.updateUser(user); } /** * ä¿®æ”¹ç”¨æˆ·åŸºæœ¬ä¿¡æ¯ * * @param user ç”¨æˆ·ä¿¡æ¯ * @return 结果 */ @Override public int updateUserProfile(SysUser user) { return userMapper.updateUser(user); } /** * ä¿®æ”¹ç”¨æˆ·å¤´åƒ * * @param userName 用户å * @param avatar 头åƒåœ°å€ * @return 结果 */ @Override public boolean updateUserAvatar(String userName, String avatar) { return userMapper.updateUserAvatar(userName, avatar) > 0; } /** * é‡ç½®ç”¨æˆ·å¯†ç * * @param user ç”¨æˆ·ä¿¡æ¯ * @return 结果 */ @Override public int resetPwd(SysUser user) { return userMapper.updateUser(user); } /** * é‡ç½®ç”¨æˆ·å¯†ç * * @param userName 用户å * @param password 密ç * @return 结果 */ @Override public int resetUserPwd(String userName, String password) { return userMapper.resetUserPwd(userName, password); } /** * æ–°å¢žç”¨æˆ·è§’è‰²ä¿¡æ¯ * * @param user 用户对象 */ public void insertUserRole(SysUser user) { this.insertUserRole(user.getUserId(), user.getRoleIds()); } /** * 新增用户岗ä½ä¿¡æ¯ * * @param user 用户对象 */ public void insertUserPost(SysUser user) { Long[] posts = user.getPostIds(); if (StringUtils.isNotEmpty(posts)) { // 新增用户与岗ä½ç®¡ç† List<SysUserPost> list = new ArrayList<SysUserPost>(posts.length); for (Long postId : posts) { SysUserPost up = new SysUserPost(); up.setUserId(user.getUserId()); up.setPostId(postId); list.add(up); } userPostMapper.batchUserPost(list); } } /** * æ–°å¢žç”¨æˆ·è§’è‰²ä¿¡æ¯ * * @param userId 用户ID * @param roleIds 角色组 */ public void insertUserRole(Long userId, Long[] roleIds) { if (StringUtils.isNotEmpty(roleIds)) { // æ–°å¢žç”¨æˆ·ä¸Žè§’è‰²ç®¡ç† List<SysUserRole> list = new ArrayList<SysUserRole>(roleIds.length); for (Long roleId : roleIds) { SysUserRole ur = new SysUserRole(); ur.setUserId(userId); ur.setRoleId(roleId); list.add(ur); } userRoleMapper.batchUserRole(list); } } /** * 通过用户IDåˆ é™¤ç”¨æˆ· * * @param userId 用户ID * @return 结果 */ @Override @Transactional public int deleteUserById(Long userId) { // åˆ é™¤ç”¨æˆ·ä¸Žè§’è‰²å…³è” userRoleMapper.deleteUserRoleByUserId(userId); // åˆ é™¤ç”¨æˆ·ä¸Žå²—ä½è¡¨ userPostMapper.deleteUserPostByUserId(userId); return userMapper.deleteUserById(userId); } /** * 批é‡åˆ é™¤ç”¨æˆ·ä¿¡æ¯ * * @param userIds 需è¦åˆ 除的用户ID * @return 结果 */ @Override @Transactional public int deleteUserByIds(Long[] userIds) { for (Long userId : userIds) { checkUserAllowed(new SysUser(userId)); checkUserDataScope(userId); } // åˆ é™¤ç”¨æˆ·ä¸Žè§’è‰²å…³è” userRoleMapper.deleteUserRole(userIds); // åˆ é™¤ç”¨æˆ·ä¸Žå²—ä½å…³è” userPostMapper.deleteUserPost(userIds); return userMapper.deleteUserByIds(userIds); } /** * å¯¼å…¥ç”¨æˆ·æ•°æ® * * @param userList 用户数æ®åˆ—表 * @param isUpdateSupport 是å¦æ›´æ–°æ”¯æŒï¼Œå¦‚果已å˜åœ¨ï¼Œåˆ™è¿›è¡Œæ›´æ–°æ•°æ® * @param operName æ“作用户 * @return 结果 */ @Override public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) { if (StringUtils.isNull(userList) || userList.size() == 0) { throw new ServiceException("导入用户数æ®ä¸èƒ½ä¸ºç©ºï¼"); } int successNum = 0; int failureNum = 0; StringBuilder successMsg = new StringBuilder(); StringBuilder failureMsg = new StringBuilder(); String password = configService.selectConfigByKey("sys.user.initPassword"); for (SysUser user : userList) { try { // 验è¯æ˜¯å¦å˜åœ¨è¿™ä¸ªç”¨æˆ· SysUser u = userMapper.selectUserByUserName(user.getUserName()); if (StringUtils.isNull(u)) { BeanValidators.validateWithException(validator, user); user.setPassword(SecurityUtils.encryptPassword(password)); user.setCreateBy(operName); userMapper.insertUser(user); successNum++; successMsg.append("<br/>" + successNum + "ã€è´¦å· " + user.getUserName() + " 导入æˆåŠŸ"); } else if (isUpdateSupport) { BeanValidators.validateWithException(validator, user); checkUserAllowed(u); checkUserDataScope(u.getUserId()); user.setUserId(u.getUserId()); user.setUpdateBy(operName); userMapper.updateUser(user); successNum++; successMsg.append("<br/>" + successNum + "ã€è´¦å· " + user.getUserName() + " æ›´æ–°æˆåŠŸ"); } else { failureNum++; failureMsg.append("<br/>" + failureNum + "ã€è´¦å· " + user.getUserName() + " å·²å˜åœ¨"); } } catch (Exception e) { failureNum++; String msg = "<br/>" + failureNum + "ã€è´¦å· " + user.getUserName() + " 导入失败:"; failureMsg.append(msg + e.getMessage()); log.error(msg, e); } } if (failureNum > 0) { failureMsg.insert(0, "很抱æ‰ï¼Œå¯¼å…¥å¤±è´¥ï¼å…± " + failureNum + " æ¡æ•°æ®æ ¼å¼ä¸æ£ç¡®ï¼Œé”™è¯¯å¦‚下:"); throw new ServiceException(failureMsg.toString()); } else { successMsg.insert(0, "æ喜您,数æ®å·²å…¨éƒ¨å¯¼å…¥æˆåŠŸï¼å…± " + successNum + " æ¡ï¼Œæ•°æ®å¦‚下:"); } return successMsg.toString(); } }