forked from kidgrow-microservices-platform

zhaoxiaohao
2020-11-04 f5f444c2bbb1e1e90a6ea6d0fbbfa06c07deed2d
kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysDoctorServiceImpl.java
@@ -52,6 +52,8 @@
    @Autowired
    private ISysUserService iSysUserService;
    @Autowired
    private SysUserMapper sysUserMapper;
    @Autowired
    private PasswordEncoder passwordEncoder;
    @Autowired
    private ISysUserOrgService sysUserOrgService;
@@ -89,8 +91,8 @@
                if (sysUser != null) {
                    vo.setUsername(sysUser.getUsername());
                }
                QueryWrapper queryWrapper=new QueryWrapper();
                queryWrapper.eq("user_id",e.getUserId());
                QueryWrapper queryWrapper = new QueryWrapper();
                queryWrapper.eq("user_id", e.getUserId());
                List<SysRoleUser> roleUserList = sysUserRoleMapper.selectList(queryWrapper);
                List<Long> collect = roleUserList.stream().map(roleUser -> roleUser.getRoleId()).collect(Collectors.toList());
                vo.setRoles(collect);
@@ -116,10 +118,10 @@
        //查询user表
        SysDoctor sysDoctor = baseMapper.selectById(id);
        if (sysDoctor != null && sysDoctor.getUserId() != null) {
            boolean b = iSysUserService.delUser(sysDoctor.getUserId());
            boolean b = iSysUserService.deleteNoContact(sysDoctor.getUserId());
        }
        sysDoctor.setIsDel(true);
        int i = baseMapper.deleteById(id);
        int i = baseMapper.updateById(sysDoctor);
        return true;
    }
@@ -201,10 +203,10 @@
            if (sysDoctor.getId() == null) {
                Long sysUserId = null;
                //保存部门信息
                ResultBody resultBody = this.saveFenjiekou(sysDoctor, id, sysHospital, sysDepartment);
                if(resultBody.getCode()==0){
                    sysUserId=(Long)resultBody.getData();
                }else {
                ResultBody resultBody = this.saveFenjiekou(sysDoctor, id, sysHospital, sysDepartment, null);
                if (resultBody.getCode() == 0) {
                    sysUserId = (Long) resultBody.getData();
                } else {
                    return resultBody;
                }
                //保存doctor的数据
@@ -221,6 +223,28 @@
                //更新
                SysDoctor getOne = baseMapper.selectById(sysDoctor.getId());
                if (getOne.getDoctorType() != 2 && sysDoctor.getDoctorType() != 2) {
                    QueryWrapper queryrole = new QueryWrapper();
                    queryrole.eq("user_id", getOne.getUserId());
                    List<SysRoleUser> list = sysUserRoleMapper.selectList(queryrole);
                    //如果是本来是管理员的话,不用走判读管理员的方法
                    if (!list.isEmpty()) {
                        List<Long> collect = list.stream().map(e -> e.getRoleId()).collect(Collectors.toList());
                        if (!collect.contains(CommonConstant.HOSPITAL_ADMIN_ID)) {
                            /**
                             * 管理员只有一个
                             */
                            if (isSupperRole(sysDoctor)) {
                                return ResultBody.failed("该部门已经有管理员");
                            }
                        }
                    } else {
                        /**
                         * 管理员只有一个
                         */
                        if (isSupperRole(sysDoctor)) {
                            return ResultBody.failed("该部门已经有管理员");
                        }
                    }
                    Map<String, Object> columnMap = new HashMap<>();
                    columnMap.put("user_id", sysDoctor.getUserId());
                    boolean b = sysUserOrgService.removeByMap(columnMap);
@@ -232,18 +256,31 @@
                    sysUserOrg.setFromLevel(CommonConstant.SYSTEM_ORG_DEP_LEVEL);
                    sysUserOrg.setOrgId(sysDepartment.getOrgId());
                    sysUserOrg.setCreateTime(new Date());
                    List<SysUserOrg> sysUserOrgs=new ArrayList<>();
                    sysUserOrgs.add(sysUserOrg);
                    sysUserOrgService.saveOrUpdate(sysUserOrg);
                    SysUserOrg sysGongsi = new SysUserOrg();
                    sysGongsi.setUserId(getOne.getId());
                    sysGongsi.setOrgId(sysHospital.getOrgId());
                    sysGongsi.setFromId(sysDoctor.getHospitalId());
                    sysGongsi.setFromLevel(CommonConstant.SYSTEM_ORG_DEP_LEVEL);
                    sysUserOrgs.add(sysGongsi);
                    sysUserOrgService.saveOrUpdate(sysGongsi);
                    baseMapper.updateById(sysDoctor);
                    if (redisUtils.hHasKey(RedisConstant.USER_ORGANIZATION, getOne.getUserId().toString())) {
                        redisUtils.hdel(RedisConstant.USER_ORGANIZATION, getOne.getUserId().toString());
                    }
                    redisUtils.hset(RedisConstant.USER_ORGANIZATION, getOne.getUserId().toString(), sysUserOrg);
                    redisUtils.hset(RedisConstant.USER_ORGANIZATION, getOne.getUserId().toString(), sysUserOrgs);
                    //角色更换
                    QueryWrapper queryWrapper = new QueryWrapper();
                    queryWrapper.eq("user_id", getOne.getUserId());
                    int delete = sysUserRoleMapper.delete(queryWrapper);
                    sysDoctor.getRoles().forEach(e -> {
                        SysRoleUser sysRoleUser = new SysRoleUser();
                        sysRoleUser.setRoleId(e);
                        sysRoleUser.setUserId(getOne.getUserId());
                        int insert = sysUserRoleMapper.insert(sysRoleUser);
                    });
                } else if (getOne.getDoctorType() == 2 && sysDoctor.getDoctorType() != 2) {
                    /**
                     * 管理员只有一个
@@ -251,11 +288,11 @@
                    if (isSupperRole(sysDoctor)) {
                        return ResultBody.failed("该部门已经有管理员");
                    }
                    ResultBody resultBody = this.saveFenjiekou(sysDoctor, id, sysHospital, sysDepartment);
                    ResultBody resultBody = this.saveFenjiekou(sysDoctor, id, sysHospital, sysDepartment, getOne);
                    Long sysUserId = null;
                    if(resultBody.getCode()==0){
                        sysUserId=(Long)resultBody.getData();
                    }else {
                    if (resultBody.getCode() == 0) {
                        sysUserId = (Long) resultBody.getData();
                    } else {
                        return resultBody;
                    }
                    sysDoctor.setUserId(sysUserId);
@@ -267,16 +304,21 @@
                    boolean b = sysUserOrgService.removeByMap(columnMap);
                    SysUser byId = iSysUserService.getById(getOne.getUserId());
                    //将角色删除
                    QueryWrapper queryWrapper=new QueryWrapper();
                    queryWrapper.eq("user_id",getOne.getUserId());
                    QueryWrapper queryWrapper = new QueryWrapper();
                    queryWrapper.eq("user_id", getOne.getUserId());
                    int delete = sysUserRoleMapper.delete(queryWrapper);
                    if(byId!=null){
                    if (byId != null) {
                        byId.setDel(true);
                        boolean b1 = iSysUserService.updateById(byId);
                    }
                    redisUtils.hdel(RedisConstant.USER_ORGANIZATION, getOne.getUserId().toString());
                    sysDoctor.setUserId(null);
                    baseMapper.updateById(sysDoctor);
                    //将用户删除
                    SysUser sysUser = new SysUser();
                    sysUser.setId(getOne.getUserId());
                    sysUser.setDel(true);
                    sysUserMapper.deleteById(sysUser);
                } else if (getOne.getDoctorType() == 2 && sysDoctor.getDoctorType() == 2) {
                    baseMapper.updateById(sysDoctor);
                }
@@ -284,28 +326,31 @@
        }
        return ResultBody.ok();
    }
    //是否可以使是超管角色
    public Boolean isSupperRole(SysDoctorDto sysDoctor){
    public Boolean isSupperRole(SysDoctorDto sysDoctor) {
        Boolean flag = false;
        /**
         * 限制管理员只有一个
         */
        if (sysDoctor.getRoles().contains(CommonConstant.HOSPITAL_ADMIN_ID)) {
            //查询一个部门下的所有医生
            QueryWrapper wrapper = new QueryWrapper();
            wrapper.eq("is_del", 0);
            wrapper.eq("enabled", 1);
            wrapper.eq("department_id", sysDoctor.getDepartmentId());
            List<SysDoctor> doctoerList = this.baseMapper.selectList(wrapper);
            if (doctoerList.size() > 0) {
                //查询role——user
                List<Long> collect = doctoerList.stream().map(e -> e.getUserId()).collect(Collectors.toList());
                wrapper = new QueryWrapper();
                wrapper.in("user_id", collect);
                List<SysRoleUser> list = this.sysUserRoleMapper.selectList(wrapper);
                for (SysRoleUser sysRoleUser : list) {
                    if (sysRoleUser.getRoleId() == CommonConstant.HOSPITAL_ADMIN_ID) {
                        flag = true;
        if (sysDoctor.getDoctorType() != 2) {
            if (sysDoctor.getRoles().contains(CommonConstant.HOSPITAL_ADMIN_ID)) {
                //查询一个部门下的所有医生
                QueryWrapper wrapper = new QueryWrapper();
                wrapper.eq("is_del", 0);
                wrapper.eq("enabled", 1);
                wrapper.eq("department_id", sysDoctor.getDepartmentId());
                List<SysDoctor> doctoerList = this.baseMapper.selectList(wrapper);
                if (doctoerList.size() > 0) {
                    //查询role——user
                    List<Long> collect = doctoerList.stream().map(e -> e.getUserId()).collect(Collectors.toList());
                    wrapper = new QueryWrapper();
                    wrapper.in("user_id", collect);
                    List<SysRoleUser> list = this.sysUserRoleMapper.selectList(wrapper);
                    for (SysRoleUser sysRoleUser : list) {
                        if (sysRoleUser.getRoleId().equals(CommonConstant.HOSPITAL_ADMIN_ID)) {
                            flag = true;
                        }
                    }
                }
            }
@@ -314,7 +359,7 @@
    }
    //保存的分接口
    public ResultBody saveFenjiekou(SysDoctorDto sysDoctor, String id, SysHospital sysHospital, SysDepartment sysDepartment) {
    public ResultBody saveFenjiekou(SysDoctorDto sysDoctor, String id, SysHospital sysHospital, SysDepartment sysDepartment, SysDoctor getOne) {
        Long sysUserId = null;
        /**
         * 管理员只有一个
@@ -323,11 +368,11 @@
            return ResultBody.failed("该部门已经有管理员");
        }
        if (sysDoctor.getDoctorType() != 2) {
            //保存
            SysUser sysUser = new SysUser();
            //保存
            sysUser.setUsername(sysDoctor.getUsername());
            sysUser.setPassword(passwordEncoder.encode(sysDoctor.getPassword()));
            sysUser.setNickname(sysDoctor.getHospitalName());
            sysUser.setNickname(sysDoctor.getDoctorName());
            sysUser.setHeadImgUrl(sysDoctor.getDoctorLogo());
            sysUser.setMobile(sysDoctor.getDoctorTel());
            sysUser.setType(UserType.DOCTOR.name());
@@ -338,7 +383,33 @@
                sysUser.setCreateUserId(byId.getId());
                sysUser.setCreateUserName(byId.getUsername());
            }
            iSysUserService.save(sysUser);
            //做判断是否注册过手机号;
            QueryWrapper queryWrapper = new QueryWrapper();
            queryWrapper.eq("username", sysDoctor.getDoctorTel());
            queryWrapper.eq("enabled", 1);
            queryWrapper.eq("is_del", 0);
            Integer integer = sysUserMapper.selectCount(queryWrapper);
            if (integer > 0) {
                return ResultBody.failed("该手机号已经注册");
            }
            if (getOne != null && getOne.getUserId() != null) {
                Map<String, Object> map = new HashMap<>();
                map.put("id", getOne.getUserId());
                map.put("enabled", 1);
                map.put("is_del", 1);
                List<SysUser> sysUsers = sysUserMapper.selectByMap(map);
                if (sysUsers != null && !sysUsers.isEmpty()) {
                    sysUser.setId(sysUsers.get(sysUsers.size() - 1).getId());
                }
            }
            if (sysUser.getId() != null) {
                //更新
                sysUser.setDel(false);
                iSysUserService.updateById(sysUser);
            } else {
                //保存
                iSysUserService.save(sysUser);
            }
            sysUserId = sysUser.getId();
            //保存一个角色
            sysDoctor.getRoles().forEach(e -> {
@@ -347,12 +418,14 @@
                sysRoleUser.setUserId(sysUser.getId());
                int insert = sysUserRoleMapper.insert(sysRoleUser);
            });
            List<SysUserOrg> sysUserOrgs=new ArrayList<>();
            //保存将sys_user_org 保存部门
            SysUserOrg sysUserOrg = new SysUserOrg();
            sysUserOrg.setUserId(sysUser.getId());
            sysUserOrg.setFromId(sysDoctor.getDepartmentId());
            sysUserOrg.setFromLevel(CommonConstant.SYSTEM_ORG_DEP_LEVEL);
            sysUserOrg.setOrgId(sysDepartment.getOrgId());
            sysUserOrgs.add(sysUserOrg);
            //保存公司
            sysUserOrgService.saveOrUpdate(sysUserOrg);
            SysUserOrg sysGongsi = new SysUserOrg();
@@ -361,8 +434,9 @@
            sysGongsi.setFromId(sysDoctor.getHospitalId());
            sysGongsi.setFromLevel(CommonConstant.SYSTEM_ORG_DEP_LEVEL);
            sysUserOrgService.saveOrUpdate(sysGongsi);
            sysUserOrgs.add(sysGongsi);
            //保存到Redis
            boolean hset = redisUtils.hset(RedisConstant.USER_ORGANIZATION, sysUserOrg.getUserId().toString(), sysUserOrg);
            boolean hset = redisUtils.hset(RedisConstant.USER_ORGANIZATION, sysUserOrg.getUserId().toString(), sysUserOrgs);
        }
        return ResultBody.ok().data(sysUserId);
    }
@@ -382,6 +456,9 @@
        if (id > 0 && adminId > 0) {
            Map<String, Object> map = new HashMap<>();
            map.put("user_id", adminId);
            map.put("is_admin_user", 1);
            map.put("is_del", 0);
            map.put("enabled", 1);
            List<SysDoctor> sysDoctors = baseMapper.selectByMap(map);
            if (sysDoctors == null || sysDoctors.size() <= 0) {
                return ResultBody.failed("当前操作用户不是管理员");
@@ -396,8 +473,9 @@
                    sysRoleUser.setRoleId(CommonConstant.HOSPITAL_DOCTOR_ID);
                    QueryWrapper queryWrapper = new QueryWrapper();
                    queryWrapper.eq("user_id", adminId);
                    queryWrapper.eq("role_id", CommonConstant.HOSPITAL_ADMIN_ID);
                    int update = sysUserRoleMapper.update(sysRoleUser, queryWrapper);
//                    queryWrapper.eq("role_id", CommonConstant.HOSPITAL_ADMIN_ID);
                    int delete = sysUserRoleMapper.delete(queryWrapper);
                    int update = sysUserRoleMapper.insert(sysRoleUser);
                    //现将操作人员设为非管理角色
                    sysDoctor.setIsAdminUser(false);
                    if (baseMapper.updateById(sysDoctor) > 0) {
@@ -411,8 +489,9 @@
                                sysRoleUser.setRoleId(CommonConstant.HOSPITAL_ADMIN_ID);
                                queryWrapper = new QueryWrapper();
                                queryWrapper.eq("user_id", sysDoctor.getUserId());
                                queryWrapper.eq("role_id", CommonConstant.HOSPITAL_DOCTOR_ID);
                                sysUserRoleMapper.update(sysRoleUser, queryWrapper);
//                                queryWrapper.eq("role_id", CommonConstant.HOSPITAL_DOCTOR_ID);
                                sysUserRoleMapper.delete(queryWrapper);
                                sysUserRoleMapper.insert(sysRoleUser);
                                sysDoctor.setIsAdminUser(true);
                                if (baseMapper.updateById(sysDoctor) > 0) {
                                    return ResultBody.ok().data(true).msg("管理员设置成功!");