From 04c359a40d51c391fdfea626e7f147422a33b89f Mon Sep 17 00:00:00 2001
From: zhaoxiaohao <913652501@qq.com>
Date: Fri, 19 Jun 2020 09:43:08 +0800
Subject: [PATCH] Merge branch 'dev' of http://192.168.2.240:7070/r/kidgrow-microservices-platform into dev

---
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysUserServiceImpl.java |  378 +++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 274 insertions(+), 104 deletions(-)

diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysUserServiceImpl.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysUserServiceImpl.java
index 4b67902..20d644f 100644
--- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysUserServiceImpl.java
+++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysUserServiceImpl.java
@@ -87,8 +87,6 @@
     @Autowired
     private SysUserRoleMapper sysUserRoleMapper;
 
-    private final String HOSPITAL_ADMIN="hospital_admin";
-
     @Override
     public LoginAppUser findByUsername(String username) {
         SysUser sysUser = this.selectByUsername(username);
@@ -117,6 +115,11 @@
     public LoginAppUser getLoginAppUser(SysUser sysUser) {
         LoginAppUser loginAppUser = new LoginAppUser();
         if (sysUser != null) {
+            //返回的数据为什么要把密码也返回?清空!!
+            loginAppUser.setPassword("");
+            loginAppUser.setNewPassword("");
+            loginAppUser.setOldPassword("");
+
             BeanUtils.copyProperties(sysUser, loginAppUser);
             //获取用户所属组织机构列表
             List<SysOrganization> sysOrganizations = organizationService.findListByUserId(sysUser.getId());
@@ -221,7 +224,7 @@
         }
     }
 
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public ResultBody updatePassword(Long id, String oldPassword, String newPassword, Boolean isdefault) {
         SysUser sysUser = baseMapper.selectById(id);
@@ -633,77 +636,113 @@
      * @param userRegVo
      * @return
      */
+    @Transactional(rollbackFor = Exception.class)
     @Override
-    public ResultBody doctorUserReg(UserRegVo userRegVo) {
+    public ResultBody doctorUserReg(UserRegVo userRegVo, SysUser sysUserd) {
         //检查手机号是否已经注册 H端登录名和手机号存一样的值
         if (phoneIsUsed(userRegVo.getMobile())) {
             return ResultBody.failed("该手机号已经注册");
         }
-        //检查判断是注册 还是添加用户,注册用户先走基本数据建设
+        //创建人id
+        Long createUserId=0L;
+        //创建人id
+        String createUserName="自动创建";
+        //是否注册用户
+        Boolean isReg=false;
+        //业务成功
+        Boolean isSuccess=true;
+        //业务失败提示信息
+        String expMsg="";
+        //检查判断是注册 还是添加用户,注册用户先走基本数据建设 组织/医院/科室
+        SysOrganization sysOrganizationHos=new SysOrganization();
+        SysOrganization sysOrganizationDe=new SysOrganization();
+        SysUserOrg sysUserOrgH=new SysUserOrg();
+        SysUserOrg sysUserOrgD=new SysUserOrg();
+        SysDictionaries sysDictionaries=new SysDictionaries();
+        List<SysOrganization> sysOrganizationList=new ArrayList<SysOrganization>();
+        SysDoctor sysDoctor=new SysDoctor();
         if (userRegVo.getHospitalId()==null) {
+            isReg=true;
             userRegVo.setDoctorState(true);
             //添加医院组织结构数据
-            List<SysOrganization> sysOrganizationList=new ArrayList<SysOrganization>();
-            SysOrganization sysOrganizationHos=new SysOrganization();
             sysOrganizationHos.setOrgAttr(1);
             sysOrganizationHos.setOrgLevel(1);
             sysOrganizationHos.setOrgName(userRegVo.getHospitalName());
-            sysOrganizationHos.setCreateUserName("自主注册");
-            sysOrganizationHos.setCreateUserId(0L);
-            sysOrganizationList.add(sysOrganizationHos);
+            sysOrganizationHos.setCreateUserName(createUserName);
+            sysOrganizationHos.setCreateUserId(createUserId);
+            Boolean H=organizationService.save(sysOrganizationHos);
+            if (H) {
+                sysOrganizationList.add(sysOrganizationHos);
+                //添加科室组织数据
+                sysOrganizationDe.setOrgAttr(2);
+                sysOrganizationDe.setOrgLevel(2);
+                sysOrganizationDe.setOrgName(userRegVo.getDepartmentName());
+                sysOrganizationDe.setCreateUserName(createUserName);
+                sysOrganizationDe.setCreateUserId(createUserId);
+                Boolean D=organizationService.save(sysOrganizationDe);
+                if (D) {
+                    sysOrganizationList.add(sysOrganizationDe);
+                    //写医院数据
+                    SysHospital sysHospital=new SysHospital();
+                    sysHospital.setHospitalName(userRegVo.getHospitalName());
+                    sysHospital.setOrgId(sysOrganizationHos.getId());
+                    sysHospital.setHospitalState(0);
+                    sysHospital.setCreateUserId(createUserId);
+                    sysHospital.setCreateUserName(createUserName);
 
-            //添加科室组织数据
-            SysOrganization sysOrganizationDe=new SysOrganization();
-            sysOrganizationDe.setOrgAttr(2);
-            sysOrganizationDe.setOrgLevel(2);
-            sysOrganizationDe.setOrgName(userRegVo.getDepartmentName());
-            sysOrganizationDe.setCreateUserName("自主注册");
-            sysOrganizationDe.setCreateUserId(0L);
-            sysOrganizationList.add(sysOrganizationDe);
-            //批量写入
-            boolean orgRe= organizationService.saveBatch(sysOrganizationList);
-            if (orgRe) {
-                //写医院数据
-                SysHospital sysHospital=new SysHospital();
-                sysHospital.setHospitalName(userRegVo.getHospitalName());
-                sysHospital.setOrgId(sysOrganizationHos.getId());
-                sysHospital.setAccountsCount(1);
-                sysHospital.setHospitalState(0);
-                sysHospital.setCreateUserId(0L);
-                sysHospital.setCreateUserName("自主注册");
-
-                boolean h=hospitalService.save(sysHospital);
-                if (h) {
-                    userRegVo.setHospitalId(sysHospital.getId());
-                    //保存科室数据
-                    SysDepartment sysDepartment=new SysDepartment();
-                    sysDepartment.setHospitalId(sysHospital.getId());
-                    sysDepartment.setOrgId(sysOrganizationDe.getId());
-                    sysDepartment.setDepartmentName(userRegVo.getDepartmentName());
-                    sysDepartment.setSaleUserId(0L);
-                    sysDepartment.setSaleUserName("自主注册");
-                    sysDepartment.setSaleUserTel("0");
-                    sysDepartment.setServerUserId(0L);
-                    sysDepartment.setServerUserTel("0");
-                    sysDepartment.setServerUserName("自主注册");
-                    boolean d=departmentService.save(sysDepartment);
-                    if (!d) {
-                        return ResultBody.failed("科室数据写入失败");
+                    boolean h=hospitalService.save(sysHospital);
+                    if (h) {
+                        userRegVo.setHospitalId(sysHospital.getId());
+                        //保存科室数据
+                        SysDepartment sysDepartment=new SysDepartment();
+                        sysDepartment.setHospitalId(sysHospital.getId());
+                        sysDepartment.setOrgId(sysOrganizationDe.getId());
+                        sysDepartment.setDepartmentName(userRegVo.getDepartmentName());
+                        sysDepartment.setSaleUserId(createUserId);
+                        sysDepartment.setAccountsCount(1);
+                        sysDepartment.setSaleUserName(createUserName);
+                        sysDepartment.setSaleUserTel("0");
+                        sysDepartment.setServerUserId(createUserId);
+                        sysDepartment.setServerUserTel("0");
+                        sysDepartment.setServerUserName(createUserName);
+                        boolean d=departmentService.save(sysDepartment);
+                        if (!d) {
+                            isSuccess=false;
+                            expMsg="科室数据写入失败";
+                        }
+                        else
+                        {
+                            userRegVo.setDepartmentId(sysDepartment.getId());
+                        }
                     }
                     else
                     {
-                        userRegVo.setDepartmentId(sysDepartment.getId());
+                        isSuccess=false;
+                        expMsg="医院数据写入失败";
                     }
                 }
                 else
                 {
-                    return ResultBody.failed("医院数据写入失败");
+                    isSuccess=false;
+                    expMsg="科室组织数据写入失败";
                 }
             }
             else
             {
-                return ResultBody.failed("组织数据写入失败");
+                isSuccess=false;
+                expMsg="医院组织数据写入失败";
             }
+        }
+
+        //业务执行中途出错  手动撤回数据
+        if (isReg&&!isSuccess) {
+            RollBackData(sysOrganizationList,userRegVo.getHospitalId(),
+                    userRegVo.getDepartmentId(),0L,0L,
+                    0L,0L, 0L);
+            return ResultBody.failed(expMsg);
+        }
+        if (!isReg&&departmetAccountsCount(userRegVo.getDepartmentId())<1) {
+            return ResultBody.failed("当前科室可创建账户数量已满");
         }
         //添加用户数据  如果没有输入密码,将会创建一个默认密码返回
         String defaultPassWord="";
@@ -735,83 +774,188 @@
         sysUser.setDel(false);
         sysUser.setTenantId("hospital");
         boolean u=this.save(sysUser);
+        SysRoleUser sysRoleUser=new SysRoleUser();
         if(u)
         {
-            //保存  角色信息
+            //保存角色用户绑定信息  sys_role_user
             Map<String,Object> map= new HashMap<>();
-            map.put("code",HOSPITAL_ADMIN);
+            map.put("code",CommonConstant.HOSPITAL_DOCTOR_CODE);
             map.put("enabled",1);
             map.put("is_del",0);
             List<SysRole> sysRoles = sysRoleMapper.selectByMap(map);
             if(sysRoles.size()>0){
-                //保存一个角色
+                //保存角色和用户绑定关系数据
                 SysRole sysRole = sysRoles.get(0);
-                SysRoleUser sysRoleUser=new SysRoleUser();
                 sysRoleUser.setRoleId(sysRole.getId());
                 sysRoleUser.setUserId(sysUser.getId());
                 int insert = sysUserRoleMapper.insert(sysRoleUser);
-            }
-            //写入职务数据
-            if (StringUtils.isNotBlank(userRegVo.getDoctorRank())) {
-                //检查医生职务是否存在
-                Map<String, Object> selectMap = new HashMap<>();
-                selectMap.put("dictionaries_name", userRegVo.getDoctorRank());
-                List<SysDictionaries> dictionariesList=sysDictionariesService.findAll(selectMap);
-                if (dictionariesList.size()>0) {
-                    for (int i = dictionariesList.size() - 1; i >= 0; i--) {
-                        if (dictionariesList.get(i).getDictionariesName().equals(userRegVo.getDoctorRank())) {
-                            userRegVo.setDoctorRankId(dictionariesList.get(i).getId());
-                            break;
+                if (insert>0) {
+                    //写入职务数据
+                    if (StringUtils.isNotBlank(userRegVo.getDoctorRank())) {
+                        //检查医生职务是否存在
+                        Map<String, Object> selectMap = new HashMap<>();
+                        selectMap.put("dictionaries_name", userRegVo.getDoctorRank());
+                        List<SysDictionaries> dictionariesList=sysDictionariesService.findAll(selectMap);
+                        if (dictionariesList.size()>0) {
+                            for (int i = dictionariesList.size() - 1; i >= 0; i--) {
+                                if (dictionariesList.get(i).getDictionariesName().equals(userRegVo.getDoctorRank())) {
+                                    userRegVo.setDoctorRankId(dictionariesList.get(i).getId());
+                                    break;
+                                }
+                            }
                         }
+                        else
+                        {
+                            //创建字典数据
+                            sysDictionaries.setDictionariesKey(DictionariesConstants.DOCTOR_RANK);
+                            sysDictionaries.setDictionariesClassId(DictionariesConstants.DOCTOR_RANK_ID.toString());
+                            //将名称汉字转为拼音
+                            sysDictionaries.setDictionariesKey(Pinyin4jUtil.makeStringByStringSet(Pinyin4jUtil.getPinyin(userRegVo.getDoctorRank(),true)));
+                            sysDictionaries.setDictionariesName(userRegVo.getDoctorRank());
+                            sysDictionaries.setCreateUserId(createUserId);
+                            sysDictionaries.setCreateUserName(createUserName);
+                            boolean d=sysDictionariesService.save(sysDictionaries);
+                            if (d) {
+                                userRegVo.setDoctorRankId(sysDictionaries.getId());
+                                //写用户组织关系表
+                                List<SysUserOrg> sysUserOrgList=new ArrayList<SysUserOrg>();
+
+                                sysUserOrgH.setUserId(sysUser.getId());
+                                sysUserOrgH.setOrgId(sysOrganizationHos.getId());
+                                sysUserOrgH.setCreateUserId(isReg?createUserId:sysUserd.getId());
+                                sysUserOrgH.setCreateUserName(isReg?createUserName:sysUserd.getUsername());
+                                sysUserOrgList.add(sysUserOrgH);
+
+                                sysUserOrgD.setUserId(sysUser.getId());
+                                sysUserOrgD.setOrgId(sysOrganizationHos.getId());
+                                sysUserOrgD.setCreateUserId(isReg?createUserId:sysUserd.getId());
+                                sysUserOrgD.setCreateUserName(isReg?createUserName:sysUserd.getUsername());
+                                sysUserOrgList.add(sysUserOrgD);
+                                boolean uOrg=iSysUserOrgService.saveBatch(sysUserOrgList);
+                                if (uOrg) {
+                                    //写入医生数据
+                                    sysDoctor.setUserId(sysUser.getId());
+                                    sysDoctor.setHospitalId(userRegVo.getHospitalId());
+                                    sysDoctor.setHospitalName(userRegVo.getHospitalName());
+                                    sysDoctor.setDepartmentId(userRegVo.getDepartmentId());
+                                    sysDoctor.setDepartmentName(userRegVo.getDepartmentName());
+                                    sysDoctor.setDoctorRank(userRegVo.getDoctorRank());
+                                    sysDoctor.setDoctorRankId(userRegVo.getDoctorRankId());
+                                    sysDoctor.setCreateUserId(isReg?createUserId:sysUserd.getId());
+                                    sysDoctor.setCreateUserName(isReg?createUserName:sysUserd.getUsername());
+                                    sysDoctor.setDoctorState(userRegVo.getDoctorState());
+                                    sysDoctor.setDoctorTel(userRegVo.getMobile());
+                                    sysDoctor.setDoctorName(userRegVo.getNickname());
+                                    sysDoctor.setServerUserId(isReg?createUserId:sysUserd.getId());
+                                    sysDoctor.setServerUserName(isReg?createUserName:sysUserd.getUsername());
+                                    if (sysDoctorMapper.insert(sysDoctor)==1) {
+                                        //非自主注册的 返回信息带密码
+                                        if (!isReg) {
+                                            sysUser.setPassword(userRegVo.getPassword());
+                                        }
+                                        else
+                                        {
+                                            sysUser.setPassword("");
+                                        }
+                                    }
+                                    else
+                                    {
+                                        isSuccess=false;
+                                        expMsg="医生数据写入失败";
+                                    }
+                                }
+                                else
+                                {
+                                    isSuccess=false;
+                                    expMsg="用户组织数据写入失败";
+                                }
+                            }
+                            else
+                            {
+                                isSuccess=false;
+                                expMsg="职称数据写入失败";
+                            }
+                        }
+                    }
+                    else
+                    {
+                        //没有职务数据
+                        isSuccess=false;
+                        expMsg="没有职称数据";
                     }
                 }
                 else
                 {
-                    //创建字典数据
-                    SysDictionaries sysDictionaries=new SysDictionaries();
-                    sysDictionaries.setDictionariesKey(DictionariesConstants.DOCTOR_RANK);
-                    sysDictionaries.setDictionariesClassId(DictionariesConstants.DOCTOR_RANK_ID.toString());
-                    //将名称汉字转为拼音
-
-                    sysDictionaries.setDictionariesKey(Pinyin4jUtil.makeStringByStringSet(Pinyin4jUtil.getPinyin(userRegVo.getDoctorRank(),true)));
-                    sysDictionaries.setDictionariesName(userRegVo.getDoctorRank());
-                    sysDictionaries.setCreateUserId(0L);
-                    sysDictionaries.setCreateUserName("自动创建");
-                    boolean d=sysDictionariesService.save(sysDictionaries);
-                    if (d) {
-                        userRegVo.setDoctorRankId(sysDictionaries.getId());
-                    }
+                    isSuccess=false;
+                    expMsg="角色绑定数据写入失败";
                 }
-            }
-            //写入医生数据
-            SysDoctor sysDoctor=new SysDoctor();
-            sysDoctor.setUserId(sysUser.getId());
-            sysDoctor.setHospitalId(userRegVo.getHospitalId());
-            sysDoctor.setHospitalName(userRegVo.getHospitalName());
-            sysDoctor.setDepartmentId(userRegVo.getDepartmentId());
-            sysDoctor.setDepartmentName(userRegVo.getDepartmentName());
-            sysDoctor.setDoctorRank(userRegVo.getDoctorRank());
-            sysDoctor.setDoctorRankId(userRegVo.getDoctorRankId());
-            sysDoctor.setCreateUserId(0L);
-            sysDoctor.setCreateUserName("自主注册");
-            sysDoctor.setDoctorState(userRegVo.getDoctorState());
-            sysDoctor.setDoctorTel(userRegVo.getMobile());
-            sysDoctor.setDoctorName(userRegVo.getNickname());
-            sysDoctor.setServerUserId(0L);
-            sysDoctor.setServerUserName("自主注册");
-            if (sysDoctorMapper.insert(sysDoctor)==1) {
-                sysUser.setPassword(userRegVo.getPassword());
-                return ResultBody.ok().data(sysUser);
-//                return ResultBody.ok(200,"注册成功").data(sysUser);
             }
             else
             {
-                return ResultBody.failed("医生数据写入失败");
+                isSuccess=false;
+                expMsg="对应角色没有数据";
             }
         }
         else
         {
-            return ResultBody.failed("用户数据写入失败");
+            isSuccess=false;
+            expMsg="用户数据写入失败";
+        }
+        /***返回数据***/
+        if (!isSuccess) {
+            //撤回数据
+            RollBackData(null,0L,
+                    0L,sysUser.getId(),sysUserOrgH.getId(),
+                    sysUserOrgH.getId(),sysDictionaries.getId(),
+                    sysDoctor.getId());
+            return ResultBody.failed(expMsg);
+        }
+        else
+        {
+            return ResultBody.ok().data(sysUser);
+        }
+    }
+
+    /**
+     * 手动撤回数据,需要撤回那个,给那个id传值,不需要的传0
+     * @param sysOrganizationList
+     * @param hospitalId
+     * @param departmentId
+     * @param userId
+     * @param userOrgIdH
+     * @param userOrgIdD
+     * @param dicId
+     * @param doctorId
+     */
+    private void RollBackData(List<SysOrganization> sysOrganizationList,Long hospitalId,Long departmentId,
+                              Long userId,Long userOrgIdH,Long userOrgIdD,Long dicId,Long doctorId)
+    {
+        if (sysOrganizationList!=null&&sysOrganizationList.size()>0) {
+            for (int i = 0; i < sysOrganizationList.size(); i++) {
+                organizationService.removeById(sysOrganizationList.get(i));
+            }
+        }
+        if (hospitalId>0) {
+            hospitalService.removeById(hospitalId);
+        }
+        if (departmentId>0) {
+            departmentService.removeById(departmentId);
+        }
+        if (userId>0) {
+            baseMapper.deleteById(userId);
+            sysUserRoleMapper.deleteById(userId);
+        }
+        if (userOrgIdH>0) {
+            sysUserRoleMapper.deleteById(userOrgIdH);
+        }
+        if (userOrgIdD>0) {
+            sysUserRoleMapper.deleteById(userOrgIdD);
+        }
+        if (dicId>0) {
+            sysDictionariesService.removeById(dicId);
+        }
+        if (doctorId>0) {
+            sysDoctorMapper.deleteById(doctorId);
         }
     }
     /**
@@ -844,7 +988,33 @@
         List<SysUser> sysUsers = baseMapper.selectByMap(selectMap);
         return (sysUsers.size() > 0);
     }
-
+    /**
+     * 检查科室有效剩余账户数量
+     *
+     * @param depatmentId
+     * @return
+     */
+    private Integer departmetAccountsCount(Long depatmentId) {
+        SysDepartment sysDepartment = departmentService.getById(depatmentId);
+        if (sysDepartment == null) {
+            return 0;
+        }
+        else {
+            Map<String, Object> selectMap = new HashMap<>();
+            selectMap.put("departmentId",depatmentId);
+            selectMap.put("enabled",1);
+            List<SysDoctor> sysDoctorList=sysDoctorMapper.selectByMap(selectMap);
+            if (sysDoctorList == null) {
+                int doctorCount=sysDoctorList.size();
+                int accountCount=sysDepartment.getAccountsCount();
+                return (accountCount-doctorCount);
+            }
+            else
+            {
+                return 0;
+            }
+        }
+    }
     /**
      * 检查用户登录名是否已经注册 true存在  false不存在
      *

--
Gitblit v1.8.0