From ab1b4d8553699e452acea0bf3de97ad784b09512 Mon Sep 17 00:00:00 2001 From: dougang <78125310@kidgrow.com> Date: Fri, 19 Jun 2020 14:30:23 +0800 Subject: [PATCH] 优化代码 --- kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysUserServiceImpl.java | 462 ++++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 339 insertions(+), 123 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 23d5af5..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 @@ -16,15 +16,15 @@ import com.kidgrow.common.model.*; import com.kidgrow.common.service.impl.SuperServiceImpl; import com.kidgrow.common.utils.DateUtils; +import com.kidgrow.common.utils.Pinyin4jUtil; import com.kidgrow.redis.util.RedisUtils; import com.kidgrow.sms.feign.SmsChuangLanService; import com.kidgrow.sms.model.ConstantSMS; -import com.kidgrow.usercenter.mapper.SysDoctorMapper; -import com.kidgrow.usercenter.mapper.SysRoleMenuMapper; -import com.kidgrow.usercenter.mapper.SysUserMapper; +import com.kidgrow.usercenter.mapper.*; import com.kidgrow.usercenter.model.SysDoctor; import com.kidgrow.usercenter.model.*; import com.kidgrow.usercenter.service.*; +import com.kidgrow.usercenter.vo.HospitalDoctorListVo; import com.kidgrow.usercenter.vo.UserRegVo; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.MapUtils; @@ -82,6 +82,11 @@ @Autowired private SysDoctorMapper sysDoctorMapper; + @Autowired + private SysRoleMapper sysRoleMapper; + @Autowired + private SysUserRoleMapper sysUserRoleMapper; + @Override public LoginAppUser findByUsername(String username) { SysUser sysUser = this.selectByUsername(username); @@ -110,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()); @@ -132,11 +142,12 @@ //是否医院管理员 com.kidgrow.usercenter.model.SysDoctor sysDoctor = findDoctorByUserId(sysUser.getId()); if (sysDoctor.getIsAdminUser() != null) { - sysUser.setHAdminUser(sysDoctor.getIsAdminUser()); + loginAppUser.setHAdminUser(sysDoctor.getIsAdminUser()); } //医院信息 只有H端要返回的信息 - if (sysUser.getTenantId() == CommonConstant.H_TENANT) { - sysUser.setDoctorUserAllVO(baseMapper.findDoctorUserAllData(sysUser.getId())); + if (sysUser.getTenantId().toLowerCase().equals(CommonConstant.H_TENANT.toLowerCase())) { + DoctorUserAll doctorUserAllVo=baseMapper.findDoctorUserAllData(sysUser.getId()); + loginAppUser.setDoctorUserAllVO(doctorUserAllVo); } } return loginAppUser; @@ -213,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); @@ -622,82 +633,129 @@ /** * H端用户注册 管理员添加用户 - * * @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("该手机号已经注册"); } - //检查判断是注册 还是添加用户,注册用户先走基本数据建设 - if (StringUtils.isBlank(userRegVo.getHospitalId().toString())) { + //创建人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()); - 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()); - 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"); - boolean d = departmentService.save(sysDepartment); - if (!d) { - return ResultBody.failed("科室数据写入失败"); - } else { - userRegVo.setDepartmentId(sysDepartment.getId()); + 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 { - return ResultBody.failed("医院数据写入失败"); + else + { + isSuccess=false; + expMsg="医院数据写入失败"; + } } - } else { - return ResultBody.failed("组织数据写入失败"); + else + { + isSuccess=false; + expMsg="科室组织数据写入失败"; + } + } + else + { + 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 = ""; - SysUser sysUser = new SysUser(); + String defaultPassWord=""; + SysUser sysUser=new SysUser(); sysUser.setUsername(userRegVo.getUsername()); sysUser.setMobile(userRegVo.getMobile()); if (StringUtils.isBlank(userRegVo.getPassword())) { - defaultPassWord = com.kidgrow.common.utils.RandomValueUtils.getRandom(6); + defaultPassWord=com.kidgrow.common.utils.RandomValueUtils.getRandom(6); sysUser.setPassword(passwordEncoder.encode(defaultPassWord)); sysUser.setDefaultAuth(true); userRegVo.setPassword(defaultPassWord); - } else { + } + else { sysUser.setPassword(passwordEncoder.encode(userRegVo.getPassword())); sysUser.setDefaultAuth(false); } @@ -706,74 +764,215 @@ sysUser.setEnabled(true); if (StringUtils.isNotBlank(userRegVo.getType())) { sysUser.setType(userRegVo.getType()); - } else { + } + else + { sysUser.setType(UserType.DOCTOR.name()); } sysUser.setHAdminUser(false); sysUser.setOpenId(userRegVo.getOpenId()); sysUser.setDel(false); - boolean u = this.save(sysUser); - if (u) { - //写入职务数据 - 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; + 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",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.setRoleId(sysRole.getId()); + sysRoleUser.setUserId(sysUser.getId()); + int insert = sysUserRoleMapper.insert(sysRoleUser); + 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 { - //创建字典数据 - SysDictionaries sysDictionaries = new SysDictionaries(); - sysDictionaries.setDictionariesKey(DictionariesConstants.DOCTOR_RANK); - sysDictionaries.setDictionariesClassId(DictionariesConstants.DOCTOR_RANK_ID.toString()); - //将名称汉字转为拼音 - sysDictionaries.setDictionariesKey("temp"); - sysDictionaries.setDictionariesName(userRegVo.getDoctorRank()); - sysDictionaries.setCreateUserId(0L); - sysDictionaries.setCreateUserName("自动创建"); - boolean d = sysDictionariesService.save(sysDictionaries); - if (d) { - userRegVo.setDoctorRankId(sysDictionaries.getId()); + else + { + //没有职务数据 + 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) { - if (StringUtils.isNotBlank(defaultPassWord)) { - //默认密码需要返回 - sysUser.setPassword(defaultPassWord); } else { - sysUser.setPassword(""); + isSuccess=false; + expMsg="角色绑定数据写入失败"; } - return ResultBody.ok(200, "注册成功").data(sysUser); - } else { - return ResultBody.failed("医生数据写入失败"); } - } else { - return ResultBody.failed("用户数据写入失败"); + else + { + isSuccess=false; + expMsg="对应角色没有数据"; + } + } + else + { + 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); + } + } + /** + * 获取医院科室下的所有有效的医生 + * @param hospitalId + * @param departmentId + * @return + */ + @Override + public ResultBody hospitalDoctorList(Long hospitalId, Long departmentId) { + if (hospitalId>0&&departmentId>0) { + List<HospitalDoctorListVo> listVoList=baseMapper.hospitalDoctorList(hospitalId,departmentId); + return ResultBody.ok().data(listVoList); + } + else + { + return ResultBody.failed("医院数据有误"); } } @@ -789,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不存在 * @@ -813,14 +1038,5 @@ return sysDoctorList.get(0); } return new com.kidgrow.usercenter.model.SysDoctor(); - } - - public ResultBody userIsAdmin(String userName) { - - Map<String, Object> selectMap = new HashMap<>(); - selectMap.put("username", userName); - List<SysUser> sysUsers = baseMapper.selectByMap(selectMap); - - return null; } } \ No newline at end of file -- Gitblit v1.8.0