From f5416d4f90125564a4e2281c011e6001fd5842bd Mon Sep 17 00:00:00 2001
From: zxh <279049017@qq.com>
Date: Thu, 20 Aug 2020 16:58:19 +0800
Subject: [PATCH] 修改设为管理员失败

---
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysDoctorServiceImpl.java |  148 +++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 118 insertions(+), 30 deletions(-)

diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysDoctorServiceImpl.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysDoctorServiceImpl.java
index 7e46bb3..47c9e83 100644
--- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysDoctorServiceImpl.java
+++ b/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;
@@ -73,14 +75,14 @@
 //    private final String HOSPITAL_ADMIN="hospital_admin";
 
     @Override
-    public PageResult<SysDoctorVo> findList(Map<String, Object> params, SysUser user) {
+    public PageResult<SysDoctorDto> findList(Map<String, Object> params, SysUser user) {
         Page<SysDoctor> page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit"));
         //添加权限
         SysRoleOrganizationServiceImpl.getRoleOrg(params, user);
         List<SysDoctor> list = baseMapper.findList(page, params);
-        List<SysDoctorVo> listvo = new ArrayList<>();
+        List<SysDoctorDto> listvo = new ArrayList<>();
         list.forEach(e -> {
-            SysDoctorVo vo = new SysDoctorVo();
+            SysDoctorDto vo = new SysDoctorDto();
             BeanCopier beanCopier = BeanCopier.create(SysDoctor.class, SysDoctorVo.class, false);
             beanCopier.copy(e, vo, null);
             //查询用户的登录账号;
@@ -89,10 +91,15 @@
                 if (sysUser != null) {
                     vo.setUsername(sysUser.getUsername());
                 }
+                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);
             }
             listvo.add(vo);
         });
-        return PageResult.<SysDoctorVo>builder().data(listvo).code(0).count(page.getTotal()).build();
+        return PageResult.<SysDoctorDto>builder().data(listvo).code(0).count(page.getTotal()).build();
     }
 
     /**
@@ -111,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;
     }
 
@@ -183,12 +190,7 @@
                     return ResultBody.failed("选择一个角色");
                 }
             }
-            /**
-             * 管理员只有一个
-             */
-            if (isSupperRole(sysDoctor)) {
-                return ResultBody.failed("该部门已经有管理员");
-            }
+
             /**
              * 限制只有创建医生的个数
              *
@@ -201,7 +203,12 @@
             if (sysDoctor.getId() == null) {
                 Long sysUserId = null;
                 //保存部门信息
-                sysUserId = this.saveFenjiekou(sysDoctor, id, sysHospital, sysDepartment);
+                ResultBody resultBody = this.saveFenjiekou(sysDoctor, id, sysHospital, sysDepartment, null);
+                if (resultBody.getCode() == 0) {
+                    sysUserId = (Long) resultBody.getData();
+                } else {
+                    return resultBody;
+                }
                 //保存doctor的数据
                 SysDoctor sysDoc = new SysDoctor();
                 BeanCopier beanCopier = BeanCopier.create(SysDoctorDto.class, SysDoctor.class, false);
@@ -216,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);
@@ -239,6 +268,16 @@
                         redisUtils.hdel(RedisConstant.USER_ORGANIZATION, getOne.getUserId().toString());
                     }
                     redisUtils.hset(RedisConstant.USER_ORGANIZATION, getOne.getUserId().toString(), sysUserOrg);
+                    //角色更换
+                    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) {
                     /**
                      * 管理员只有一个
@@ -246,7 +285,13 @@
                     if (isSupperRole(sysDoctor)) {
                         return ResultBody.failed("该部门已经有管理员");
                     }
-                    Long sysUserId = 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 {
+                        return resultBody;
+                    }
                     sysDoctor.setUserId(sysUserId);
                     baseMapper.updateById(sysDoctor);
                 } else if (getOne.getDoctorType() != 2 && sysDoctor.getDoctorType() == 2) {
@@ -256,16 +301,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){
-//                        iSysUserService.delUser(byId.getId());
-                        boolean userdelete = iSysUserService.removeById(byId.getId());
+                    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);
                 }
@@ -273,8 +323,9 @@
         }
         return ResultBody.ok();
     }
+
     //是否可以使是超管角色
-    public Boolean isSupperRole(SysDoctorDto sysDoctor){
+    public Boolean isSupperRole(SysDoctorDto sysDoctor) {
         Boolean flag = false;
         /**
          * 限制管理员只有一个
@@ -293,7 +344,7 @@
                 wrapper.in("user_id", collect);
                 List<SysRoleUser> list = this.sysUserRoleMapper.selectList(wrapper);
                 for (SysRoleUser sysRoleUser : list) {
-                    if (sysRoleUser.getRoleId() == CommonConstant.HOSPITAL_ADMIN_ID) {
+                    if (sysRoleUser.getRoleId().equals(CommonConstant.HOSPITAL_ADMIN_ID)) {
                         flag = true;
                     }
                 }
@@ -303,14 +354,20 @@
     }
 
     //保存的分接口
-    public Long 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;
+        /**
+         * 管理员只有一个
+         */
+        if (isSupperRole(sysDoctor)) {
+            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());
@@ -321,7 +378,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,7 +430,7 @@
             //保存到Redis
             boolean hset = redisUtils.hset(RedisConstant.USER_ORGANIZATION, sysUserOrg.getUserId().toString(), sysUserOrg);
         }
-        return sysUserId;
+        return ResultBody.ok().data(sysUserId);
     }
 
     @Override
@@ -365,6 +448,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("当前操作用户不是管理员");
@@ -379,8 +465,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) {
@@ -394,8 +481,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("管理员设置成功!");

--
Gitblit v1.8.0