liusheng
2 天以前 cbe903c4c4493715ad8d307107fb95975acfc975
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -14,11 +14,12 @@
import com.ruoyi.system.mapper.*;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysUserService;
import com.smartor.domain.SvyTaskVO;
import com.smartor.mapper.SysUserDeptMapper;
import com.ruoyi.common.core.service.IUserExtInfoService;
import com.ruoyi.system.mapper.SysUserDeptMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -30,7 +31,7 @@
import java.util.stream.Collectors;
/**
 * 用户 业务层处理
 * 用户 业务层处�?
 *
 * @author ruoyi
 */
@@ -45,7 +46,9 @@
    private SysDeptMapper sysDeptMapper;
    @Autowired
    @Qualifier("sysUserDeptSystemMapper")
    private SysUserDeptMapper sysUserDeptMapper;
    @Autowired
    private SysRoleMapper roleMapper;
@@ -78,10 +81,16 @@
    @DataScope(deptAlias = "d", userAlias = "u")
    public List<SysUser> selectUserList(SysUser user) {
        return userMapper.selectUserList(user);
    }
    @Override
    public List<SysUser> getUserList(SysUser user) {
        return userMapper.getUserList(user);
    }
    /**
     * 根据条件分页查询已分配用户角色列表
     * 根据条件分页查询已分配用户角色列�?
     *
     * @param user 用户信息
     * @return 用户信息集合信息
@@ -93,7 +102,7 @@
    }
    /**
     * 根据条件分页查询未分配用户角色列表
     * 根据条件分页查询未分配用户角色列�?
     *
     * @param user 用户信息
     * @return 用户信息集合信息
@@ -105,9 +114,9 @@
    }
    /**
     * 通过用户名查询用户
     * 通过用户名查询用�?
     *
     * @param userName 用户名
     * @param userName 用户�?
     * @return 用户对象信息
     */
    @Override
@@ -167,7 +176,145 @@
    @Override
    public SysUser selectUserByUserName2(String userName) {
        String[] split = userName.split("&");
        SysUser sysUser = userMapper.selectUserByUserNameByCondition(split[0], split[1]);
        SysUser sysUser = userMapper.selectUserByUserNameByCondition(split[0], split[1], null);
        //获取当前登陆人的机构和院�?
        IUserExtInfoService userExtInfoService = SpringUtils.getBean(IUserExtInfoService.class);
        Map<String, String> userOrgInfo = userExtInfoService.getUserOrgInfo(
                sysUser.getUserId().toString(),
                split[1],
                split[2]);
        if (!userOrgInfo.isEmpty()) {
            sysUser.setOrgid(userOrgInfo.get("orgid"));
            sysUser.setCampusid(userOrgInfo.get("campusid"));
        }
        if (Objects.isNull(sysUser)) return sysUser;
        List<SysDept> sysDepts = null;
        if (StringUtils.isNotEmpty(split[0]) && split[0].equals("admin")) {
            SysDept dept = new SysDept();
            dept.setOrgid(split[1]);
            sysDepts = sysDeptMapper.selectDeptList(dept);
        } else {
            sysDepts = sysUserDeptMapper.selectDeptListByUserId(sysUser.getUserId());
        }
        List<Long> deptIds = new ArrayList<>();
        for (SysDept sysDept : sysDepts) {
            deptIds.add(sysDept.getDeptId());
        }
        SysUserDept sysUserDept = new SysUserDept();
        sysUserDept.setUserId(sysUser.getUserId());
        sysUserDept.setDeptType(sysUser.getSearchscope());
        sysUserDept.setOrgid(split[1]);
        List<SysUserDept> sysUserDeptKSs = null;
        List<SysUserDept> sysUserDeptBQs = null;
        if (StringUtils.isNotEmpty(sysUser.getSearchscope()) && sysUser.getSearchscope().equals("0")) {
            if (StringUtils.isNotEmpty(split[0]) && split[0].equals("admin")) {
                sysUserDept.setUserId(null);
            }
            sysUserDept.setDeptType("1");
            sysUserDeptKSs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
            sysUserDept.setDeptType("2");
            sysUserDeptBQs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
            //如果是admin,需要对sysUserDeptBQs,sysUserDeptBQs去重
            if (StringUtils.isNotEmpty(split[0]) && split[0].equals("admin")) {
                //如果是admin,只能去sys_dept去取数据
                SysDept dept = new SysDept();
                dept.setOrgid(split[1]);
                dept.setDeptType("1");
                sysDepts = sysDeptMapper.selectDeptList(dept);
                sysUserDeptKSs = DtoConversionUtils.sourceToTarget(sysDepts, SysUserDept.class);
                dept.setDeptType("2");
                sysDepts = sysDeptMapper.selectDeptList(dept);
                sysUserDeptBQs = DtoConversionUtils.sourceToTarget(sysDepts, SysUserDept.class);
                List<SysUserDept> distinctUserDepts = new ArrayList<>();
                Set<String> uniqueDeptCodes = new HashSet<>();
                for (SysUserDept userDept : sysUserDeptKSs) {
                    String deptCode = userDept.getDeptCode();
                    if (StringUtils.isNotEmpty(deptCode) && !uniqueDeptCodes.contains(deptCode)) {
                        distinctUserDepts.add(userDept);
                        uniqueDeptCodes.add(deptCode);
                    }
                }
                List<SysUserDept> distinctUserBQs = new ArrayList<>();
                Set<String> uniqueBQCodes = new HashSet<>();
                for (SysUserDept userDept : sysUserDeptBQs) {
                    String deptCode = userDept.getDeptCode();
                    if (StringUtils.isNotEmpty(deptCode) && !uniqueBQCodes.contains(deptCode)) {
                        distinctUserBQs.add(userDept);
                        uniqueBQCodes.add(deptCode);
                    }
                }
                sysUserDeptKSs = distinctUserDepts;
                sysUserDeptBQs = distinctUserBQs;
            }
        } else if (StringUtils.isNotEmpty(sysUser.getSearchscope()) && sysUser.getSearchscope().equals("1")) {
            sysUserDept.setDeptType("1");
            sysUserDeptKSs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
        } else if (StringUtils.isNotEmpty(sysUser.getSearchscope()) && sysUser.getSearchscope().equals("2")) {
            sysUserDept.setDeptType("2");
            sysUserDeptBQs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
        }
        sysUser.setDepts(deptIds);
        if (!CollectionUtils.isEmpty(sysUserDeptBQs)) {
            List<Map<String, Object>> list = new ArrayList<>();
            for (SysUserDept sud : sysUserDeptBQs) {
                Map<String, Object> map = new HashMap<>();
                map.put("districtCode", "");
                if (StringUtils.isNotEmpty(sud.getDeptCode())) map.put("districtCode", sud.getDeptCode());
                else continue;
                map.put("districtName", "");
                if (StringUtils.isNotEmpty(sud.getDeptName())) map.put("districtName", sud.getDeptName());
                list.add(map);
            }
            sysUser.setBelongWards(list);
        }
        if (!CollectionUtils.isEmpty(sysUserDeptKSs)) {
            List<Map<String, Object>> list = new ArrayList<>();
            for (SysUserDept sud : sysUserDeptKSs) {
                Map<String, Object> map = new HashMap<>();
                map.put("deptCode", "");
                if (StringUtils.isNotEmpty(sud.getDeptCode())) map.put("deptCode", sud.getDeptCode());
                else continue;
                map.put("deptName", "");
                if (StringUtils.isNotEmpty(sud.getDeptName())) map.put("deptName", sud.getDeptName());
                list.add(map);
            }
            //获取当前机构的满意度问题分类
            sysUser.setBelongDepts(list);
            Map<String, Object> satisfactionCategories = new HashMap<>();
            //设置当前用户的声音问题分类和问卷问题分类
            IUserExtInfoService userExtInfoService3 = SpringUtils.getBean(IUserExtInfoService.class);
            sysUser.setSatisfactionCategories(userExtInfoService3.getSatisfactionCategories(sysUser.getOrgid()));
        }
        return sysUser;
    }
    @Override
    public SysUser selectUserByUserNameAndDeptId(String userName) {
        String[] split = userName.split("&");
        if (split[2].contains("null")) {
            split[2] = null;
        }
        SysUser sysUser = userMapper.selectUserByUserNameByCondition(split[0], split[1], split[2]);
        //获取当前登陆人的机构和院�?
        IUserExtInfoService userExtInfoService2 = SpringUtils.getBean(IUserExtInfoService.class);
        Map<String, String> userOrgInfo2 = userExtInfoService2.getUserOrgInfo(
                sysUser.getUserId().toString(),
                split[1],
                split[3]);
        if (!userOrgInfo2.isEmpty()) {
            sysUser.setOrgid(userOrgInfo2.get("orgid"));
            sysUser.setCampusid(userOrgInfo2.get("campusid"));
        }
        log.info("selectUserByUserNameAndDeptId的sysUser的值为:{}", sysUser);
        if (Objects.isNull(sysUser)) return sysUser;
        List<SysDept> sysDepts = null;
        if (StringUtils.isNotEmpty(split[0]) && split[0].equals("admin")) {
@@ -269,6 +416,7 @@
        return sysUser;
    }
    /**
     * 通过用户ID查询用户
     *
@@ -290,7 +438,7 @@
    /**
     * 查询用户所属角色组
     *
     * @param userName 用户名
     * @param userName 用户�?
     * @return 结果
     */
    @Override
@@ -305,7 +453,7 @@
    /**
     * 查询用户所属岗位组
     *
     * @param userName 用户名
     * @param userName 用户�?
     * @return 结果
     */
    @Override
@@ -326,7 +474,7 @@
    @Override
    public String checkUserNameUnique(SysUser user) {
        Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
        SysUser info = userMapper.checkUserNameUnique(user.getUserName());
        SysUser info = userMapper.checkUserNameUnique(user);
        if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
            return UserConstants.NOT_UNIQUE;
        }
@@ -378,7 +526,7 @@
    }
    /**
     * 校验用户是否有数据权限
     * 校验用户是否有数据权�?
     *
     * @param userId 用户id
     */
@@ -389,7 +537,7 @@
            user.setUserId(userId);
            List<SysUser> users = SpringUtils.getAopProxy(this).selectUserList(user);
            if (StringUtils.isEmpty(users)) {
                throw new ServiceException("没有权限访问用户数据!");
                throw new ServiceException("没有权限访问用户数据");
            }
        }
    }
@@ -405,79 +553,21 @@
    public int insertUser(SysUser user) {
        // 新增用户信息
        int rows = userMapper.insertUser(user);
        //新增用户与部门关联
        if (!CollectionUtils.isEmpty(user.getDepts())) {
            for (Long deptId : user.getDepts()) {
                SysUserDept sysUserDep = new SysUserDept();
                sysUserDep.setUserId(user.getUserId());
                sysUserDep.setDeptId(deptId);
                sysUserDep.setCreateTime(new Date());
                sysUserDep.setUpdateTime(new Date());
                sysUserDep.setOrgid(user.getOrgid());
                sysUserDeptMapper.insertSysUserDept(sysUserDep);
            }
        }
        // 新增用户岗位关联
        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);
        //删除用户与部门的关联
        Long[] ids = {user.getUserId()};
        //新增用户与部门关联
//        sysUserDeptMapper.deleteSysUserDeptByIds(ids);
        //新增用户与部门关�?
//        if (!CollectionUtils.isEmpty(user.getDepts())) {
//            for (Long deptId : user.getDepts()) {
//                SysUserDept sysUserDep = new SysUserDept();
//                sysUserDep.setUserId(user.getUserId());
//                sysUserDep.setDeptId(deptId);
//                //查询是否 已经关联该部门
//                List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectSysUserDeptList(sysUserDep);
//                if (!CollectionUtils.isEmpty(sysUserDepts)) {
//                    SysUserDept sysUserDept = sysUserDepts.get(0);
//                    sysUserDept.setDelFlag(0L);
//                    sysUserDeptMapper.updateSysUserDept(sysUserDept);
//                    continue;
//                }
//                sysUserDep.setCreateTime(new Date());
//                sysUserDep.setUpdateTime(new Date());
//                sysUserDep.setOrgid(user.getOrgid());
//                sysUserDeptMapper.insertSysUserDept(sysUserDep);
//            }
//        }
        if (!CollectionUtils.isEmpty(user.getDeptCodes())) {
            for (String deptCode : user.getDeptCodes()) {
                SysDept sysDept = sysDeptMapper.selectDeptByCode(deptCode);
                SysDept sysDept = sysDeptMapper.selectDeptByCode("1", user.getOrgid(), deptCode);
                if (ObjectUtils.isEmpty(sysDept)) {
                    continue;
                }
@@ -503,7 +593,116 @@
        }
        if (!CollectionUtils.isEmpty(user.getWardCodes())) {
            for (String wardCode : user.getWardCodes()) {
                SysDept sysDept = sysDeptMapper.selectDeptByCode(wardCode);
                SysDept sysDept = sysDeptMapper.selectDeptByCode("2", user.getOrgid(), wardCode);
                if (ObjectUtils.isEmpty(sysDept)) {
                    continue;
                }
                SysUserDept sysUserDept = new SysUserDept();
                sysUserDept.setUserId(user.getUserId());
                sysUserDept.setDeptCode(wardCode);
                sysUserDept.setDeptId(sysDept.getDeptId());
                sysUserDept.setOrgid(user.getOrgid());
                List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
                sysUserDept.setDelFlag(0L);
                sysUserDept.setDeptType("2");
                sysUserDept.setOrgid(user.getOrgid());
                sysUserDept.setDeptName(sysDept.getDeptName());
                sysUserDept.setUpdateTime(new Date());
                if (!CollectionUtils.isEmpty(sysUserDepts)) {
                    sysUserDeptMapper.updateSysUserDept(sysUserDept);
                    continue;
                }
                sysUserDept.setCreateTime(new Date());
                sysUserDeptMapper.insertSysUserDept(sysUserDept);
            }
        }
        // 新增用户岗位关联
        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);
        //删除用户与部门的关联
        Long[] ids = {user.getUserId()};
        //新增用户与部门关�?
//        sysUserDeptMapper.deleteSysUserDeptByIds(ids);
//        if (!CollectionUtils.isEmpty(user.getDepts())) {
//            for (Long deptId : user.getDepts()) {
//                SysUserDept sysUserDep = new SysUserDept();
//                sysUserDep.setUserId(user.getUserId());
//                sysUserDep.setDeptId(deptId);
//                //查询是否 已经关联该部�?
//                List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectSysUserDeptList(sysUserDep);
//                if (!CollectionUtils.isEmpty(sysUserDepts)) {
//                    SysUserDept sysUserDept = sysUserDepts.get(0);
//                    sysUserDept.setDelFlag(0L);
//                    sysUserDeptMapper.updateSysUserDept(sysUserDept);
//                    continue;
//                }
//                sysUserDep.setCreateTime(new Date());
//                sysUserDep.setUpdateTime(new Date());
//                sysUserDeptMapper.insertSysUserDept(sysUserDep);
//            }
//        }
        if (!CollectionUtils.isEmpty(user.getDeptCodes())) {
            for (String deptCode : user.getDeptCodes()) {
                SysDept sysDept = sysDeptMapper.selectDeptByCode("1", user.getOrgid(), deptCode);
                if (ObjectUtils.isEmpty(sysDept)) {
                    continue;
                }
                SysUserDept sysUserDept = new SysUserDept();
                sysUserDept.setUserId(user.getUserId());
                sysUserDept.setOrgid(user.getOrgid());
                sysUserDept.setDeptCode(deptCode);
                sysUserDept.setDeptId(sysDept.getDeptId());
                List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
                sysUserDept.setDelFlag(0L);
                sysUserDept.setDeptType("1");
                sysUserDept.setDeptName(sysDept.getDeptName());
                sysUserDept.setUpdateTime(new Date());
                if (!CollectionUtils.isEmpty(sysUserDepts)) {
                    sysUserDept.setId(sysUserDepts.get(0).getId());
                    sysUserDeptMapper.updateSysUserDept(sysUserDept);
                    continue;
                }
                sysUserDept.setCreateTime(new Date());
                sysUserDeptMapper.insertSysUserDept(sysUserDept);
            }
        }
        if (!CollectionUtils.isEmpty(user.getWardCodes())) {
            for (String wardCode : user.getWardCodes()) {
                SysDept sysDept = sysDeptMapper.selectDeptByCode("2", user.getOrgid(), wardCode);
                if (ObjectUtils.isEmpty(sysDept)) {
                    continue;
                }
@@ -533,7 +732,7 @@
     * 用户授权角色
     *
     * @param userId  用户ID
     * @param roleIds 角色组
     * @param roleIds 角色�?
     */
    @Override
    @Transactional
@@ -543,7 +742,7 @@
    }
    /**
     * 修改用户状态
     * 修改用户状�?
     *
     * @param user 用户信息
     * @return 结果
@@ -567,7 +766,7 @@
    /**
     * 修改用户头像
     *
     * @param userName 用户名
     * @param userName 用户�?
     * @param avatar   头像地址
     * @return 结果
     */
@@ -590,7 +789,7 @@
    /**
     * 重置用户密码
     *
     * @param userName 用户名
     * @param userName 用户�?
     * @param password 密码
     * @return 结果
     */
@@ -616,7 +815,7 @@
    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();
@@ -633,11 +832,11 @@
     * 新增用户角色信息
     *
     * @param userId  用户ID
     * @param roleIds 角色组
     * @param roleIds 角色�?
     */
    public void insertUserRole(Long userId, Long[] roleIds, String orgid) {
        if (StringUtils.isNotEmpty(roleIds)) {
            // 新增用户与角色管理
            // 新增用户与角色管�?
            List<SysUserRole> list = new ArrayList<SysUserRole>(roleIds.length);
            for (Long roleId : roleIds) {
                SysUserRole ur = new SysUserRole();
@@ -659,7 +858,7 @@
    @Override
    @Transactional
    public int deleteUserById(Long userId) {
        // 删除用户与角色关联
        // 删除用户与角色关�?
        userRoleMapper.deleteUserRoleByUserId(userId);
        // 删除用户与岗位表
        userPostMapper.deleteUserPostByUserId(userId);
@@ -679,9 +878,9 @@
            checkUserAllowed(new SysUser(userId));
            checkUserDataScope(userId);
        }
        // 删除用户与角色关联
        // 删除用户与角色关�?
        userRoleMapper.deleteUserRole(userIds);
        // 删除用户与岗位关联
        // 删除用户与岗位关�?
        userPostMapper.deleteUserPost(userIds);
        return userMapper.deleteUserByIds(userIds);
    }
@@ -697,7 +896,7 @@
    @Override
    public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) {
        if (StringUtils.isNull(userList) || userList.size() == 0) {
            throw new ServiceException("导入用户数据不能为空!");
            throw new ServiceException("导入用户数据不能为空");
        }
        int successNum = 0;
        int failureNum = 0;
@@ -714,7 +913,7 @@
                    user.setCreateBy(operName);
                    this.insertUser(user);
                    successNum++;
                    successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功");
                    successMsg.append("<br/>" + successNum + "、账�?" + user.getUserName() + " 导入成功");
                } else if (isUpdateSupport) {
                    BeanValidators.validateWithException(validator, user);
                    checkUserAllowed(user);
@@ -722,14 +921,14 @@
                    user.setUpdateBy(operName);
                    this.updateUser(user);
                    successNum++;
                    successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功");
                    successMsg.append("<br/>" + successNum + "账号?" + user.getUserName() + " 更新成功");
                } else {
                    failureNum++;
                    failureMsg.append("<br/>" + failureNum + "、账号 " + user.getUserName() + " 已存在");
                    failureMsg.append("<br/>" + failureNum + "账号" + user.getUserName() + " 已存在");
                }
            } catch (Exception e) {
                failureNum++;
                String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:";
                String msg = "<br/>" + failureNum + "账号" + user.getUserName() + " 导入失败";
                failureMsg.append(msg + e.getMessage());
                log.error(msg, e);
            }
@@ -738,7 +937,7 @@
            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
            throw new ServiceException(failureMsg.toString());
        } else {
            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
            successMsg.insert(0, "恭喜您,数据已全部导入成功!共" + successNum + "条,数据如下:");
        }
        return successMsg.toString();
    }