package com.kidgrow.usercenter.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.kidgrow.common.constant.CommonConstant; import com.kidgrow.common.constant.SecurityConstants; import com.kidgrow.common.model.*; import com.kidgrow.common.service.impl.SuperServiceImpl; import com.kidgrow.common.utils.StringUtils; import com.kidgrow.redis.util.RedisConstant; import com.kidgrow.redis.util.RedisUtils; import com.kidgrow.usercenter.mapper.*; import com.kidgrow.usercenter.model.SysDepartment; import com.kidgrow.usercenter.model.SysDoctor; import com.kidgrow.usercenter.model.SysHospital; import com.kidgrow.usercenter.model.SysRoleUser; import com.kidgrow.usercenter.service.ISysDoctorService; import com.kidgrow.usercenter.service.ISysUserOrgService; import com.kidgrow.usercenter.service.ISysUserService; import com.kidgrow.usercenter.vo.SysDoctorDto; import com.kidgrow.usercenter.vo.SysDoctorVo; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.MapUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cglib.beans.BeanCopier; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import java.util.*; import java.util.stream.Collectors; /** * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020
* * @version 1.0 * @Description:
* @Project: 用户中心
* @CreateDate: Created in 2020-04-02 14:02:50
* @Author: liuke */ @Slf4j @Service public class SysDoctorServiceImpl extends SuperServiceImpl implements ISysDoctorService { /** * 列表 * * @param params * @return */ @Autowired private ISysUserService iSysUserService; @Autowired private PasswordEncoder passwordEncoder; @Autowired private ISysUserOrgService sysUserOrgService; @Autowired private RedisUtils redisUtils; @Autowired private SysRoleOrganizationServiceImpl SysRoleOrganizationServiceImpl; @Autowired private SysRoleMapper sysRoleMapper; @Autowired private SysHospitalMapper sysHospitalMapper; @Autowired private SysDepartmentMapper sysDepartmentMapper; @Autowired private SysUserRoleMapper sysUserRoleMapper; @Autowired private SysUserServiceImpl sysUserServiceImpl; // private final String HOSPITAL_ADMIN="hospital_admin"; @Override public PageResult findList(Map params, SysUser user) { Page page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit")); //添加权限 SysRoleOrganizationServiceImpl.getRoleOrg(params, user); List list = baseMapper.findList(page, params); List listvo = new ArrayList<>(); list.forEach(e -> { SysDoctorVo vo = new SysDoctorVo(); BeanCopier beanCopier = BeanCopier.create(SysDoctor.class, SysDoctorVo.class, false); beanCopier.copy(e, vo, null); //查询用户的登录账号; if (e.getUserId() != null) { SysUser sysUser = iSysUserService.getById(e.getUserId()); if (sysUser != null) { vo.setUsername(sysUser.getUsername()); } } listvo.add(vo); }); return PageResult.builder().data(listvo).code(0).count(page.getTotal()).build(); } /** * 根据SysDoctor对象当做查询条件进行查询 * * @param sysDoctor * @return SysDoctor */ @Override public SysDoctor findByObject(SysDoctor sysDoctor) { return baseMapper.findByObject(sysDoctor); } @Override public boolean delete(Long id) { //查询user表 SysDoctor sysDoctor = baseMapper.selectById(id); if (sysDoctor != null && sysDoctor.getUserId() != null) { boolean b = iSysUserService.delUser(sysDoctor.getUserId()); } sysDoctor.setIsDel(true); int i = baseMapper.deleteById(id); return true; } /** * 根据userid删除医生数据 * @param userId * @return */ @Override public int deleteByUserId(Long userId) { Map params = new HashMap<>(); params.put("userId", userId); return baseMapper.deleteByMap(params); } @Override public ResultBody enable(Map params) { Long aLong = MapUtils.getLong(params,"id"); SysDoctor sysDoctor = baseMapper.selectById(aLong); Boolean enabled = MapUtils.getBoolean(params, "enabled"); if (sysDoctor != null && sysDoctor.getUserId() != null) { SysUser byId = iSysUserService.getById(sysDoctor.getUserId()); if(byId!=null){ byId.setEnabled(enabled); iSysUserService.updateById(byId); } } if(sysDoctor!=null){ sysDoctor.setEnabled(enabled); baseMapper.updateById(sysDoctor); }else { return ResultBody.failed("禁用失败"); } return ResultBody.ok(0,"禁用成功"); } @Override @Transactional(rollbackFor = Exception.class) public ResultBody saveOrUpdateSer(SysDoctorDto sysDoctor, HttpServletRequest request,SysUser user) { String id = request.getHeader(SecurityConstants.USER_ID_HEADER); if(null==sysDoctor){ return ResultBody.failed("请填写信息"); }else { if(sysDoctor.getRoles()==null||sysDoctor.getRoles().size()<=0){ return ResultBody.failed("选择一个角色"); } /** * 限制管理员只有一个 */ 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 doctoerList = this.baseMapper.selectList(wrapper); if(doctoerList.size()>0){ //查询role——user List collect = doctoerList.stream().map(e -> e.getUserId()).collect(Collectors.toList()); wrapper=new QueryWrapper(); wrapper.in("user_id",collect); List list= this.sysUserRoleMapper.selectList(wrapper); for (SysRoleUser sysRoleUser : list) { if(sysRoleUser.getRoleId()==CommonConstant.HOSPITAL_ADMIN_ID){ flag=true; } } } } if(flag){ return ResultBody.failed("该部门已经有管理员"); } /** * 限制只有创建医生的个数 * */ if(sysUserServiceImpl.departmetAccountsCount(sysDoctor.getDepartmentId())<=0){ return ResultBody.failed("该部门创建人数已经达到上限"); } SysHospital sysHospital= sysHospitalMapper.selectById(sysDoctor.getHospitalId()); SysDepartment sysDepartment= sysDepartmentMapper.selectById(sysDoctor.getDepartmentId()); if (sysDoctor.getId()==null) { //保存 SysUser sysUser=new SysUser(); sysUser.setUsername(sysDoctor.getUsername()); sysUser.setPassword(passwordEncoder.encode(sysDoctor.getPassword())); sysUser.setNickname(sysDoctor.getHospitalName()); sysUser.setHeadImgUrl(sysDoctor.getDoctorLogo()); sysUser.setMobile(sysDoctor.getDoctorTel()); sysUser.setType(CommonConstant.H_DOCTOR); sysUser.setTenantId(CommonConstant.H_TENANT); sysUser.setCreateTime(new Date()); SysUser byId = iSysUserService.getById(id); if(byId!=null){ sysUser.setCreateUserId(byId.getId()); sysUser.setCreateUserName(byId.getUsername()); } iSysUserService.save(sysUser); //保存 角色信息 // Map map= new HashMap<>(); // map.put("code",HOSPITAL_ADMIN); // map.put("enabled",1); // map.put("is_del",0); // List sysRoles = sysRoleMapper.selectByMap(map); // if(sysRoles.size()>0){ //保存一个角色 sysDoctor.getRoles().forEach(e->{ SysRoleUser sysRoleUser=new SysRoleUser(); sysRoleUser.setRoleId(e); sysRoleUser.setUserId(sysUser.getId()); int insert = sysUserRoleMapper.insert(sysRoleUser); }); //保存doctor的数据 SysDoctor sysDoc=new SysDoctor(); BeanCopier beanCopier = BeanCopier.create(SysDoctorDto.class, SysDoctor.class, false); beanCopier.copy(sysDoctor,sysDoc,null); sysDoc.setUserId(sysUser.getId()); if(user.getOrganizations()!=null){ List organizations = user.getOrganizations(); sysDoc.setCreateUserOrgCode(organizations.get(organizations.size()-1).getOrgCode()); } baseMapper.insert(sysDoc); //保存将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()); //保存公司 sysUserOrgService.saveOrUpdate(sysUserOrg); SysUserOrg sysGongsi=new SysUserOrg(); sysGongsi.setUserId(sysUser.getId()); sysGongsi.setOrgId(sysHospital.getOrgId()); sysGongsi.setFromId(sysDoctor.getHospitalId()); sysGongsi.setFromLevel(CommonConstant.SYSTEM_ORG_DEP_LEVEL); sysUserOrgService.saveOrUpdate(sysGongsi); //保存到Redis boolean hset = redisUtils.hset(RedisConstant.USER_ORGANIZATION, sysUserOrg.getUserId().toString(), sysUserOrg); }else { //更新 SysDoctor getOne = baseMapper.selectById(sysDoctor.getId()); Map columnMap=new HashMap<>(); columnMap.put("user_id",sysDoctor.getUserId()); boolean b = sysUserOrgService.removeByMap(columnMap); //保存将sys_user_org SysUserOrg sysUserOrg=new SysUserOrg(); sysUserOrg.setUserId(getOne.getUserId()); sysUserOrg.setEnabled(false); sysUserOrg.setFromId(sysDoctor.getDepartmentId()); sysUserOrg.setFromLevel(CommonConstant.SYSTEM_ORG_DEP_LEVEL); sysUserOrg.setOrgId(sysDepartment.getOrgId()); sysUserOrg.setCreateTime(new Date()); 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); 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); } } return ResultBody.ok(); } @Override public List findByMap(Map map) { map.put("enabled",1); map.put("is_del",0); return baseMapper.selectByMap(map); } @Override @Transactional(rollbackFor = Exception.class) public ResultBody setAdminDoctor(Map params) { Long id = MapUtils.getLong(params, "id"); Long adminId = MapUtils.getLong(params, "adminId"); if (id>0&&adminId>0) { Map map= new HashMap<>(); map.put("user_id",adminId); List sysDoctors = baseMapper.selectByMap(map); if(sysDoctors==null||sysDoctors.size()<=0){ return ResultBody.failed("当前操作用户不是管理员"); } SysDoctor sysDoctor = sysDoctors.get(0); //先检查操作用户是否管理员 if(sysDoctor!=null){ if (sysDoctor.getIsAdminUser()) { //将超级管理员的角色设为普通角色 SysRoleUser sysRoleUser=new SysRoleUser(); sysRoleUser.setUserId(adminId); 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); //现将操作人员设为非管理角色 sysDoctor.setIsAdminUser(false); if(baseMapper.updateById(sysDoctor)>0) { //再将新用户设为管理 sysDoctor=baseMapper.selectById(id); if (sysDoctor != null) { if (!sysDoctor.getIsAdminUser()) { //现将普通人员设为管理角色 sysRoleUser=new SysRoleUser(); sysRoleUser.setUserId(sysDoctor.getUserId()); 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); sysDoctor.setIsAdminUser(true); if (baseMapper.updateById(sysDoctor)>0) { return ResultBody.ok().data(true).msg("管理员设置成功!"); } else { return ResultBody.failed("设为管理失败!").data(false); } } else { return ResultBody.failed("设为管理失败,改用户就是管理员!").data(false); } } else { return ResultBody.failed("用户信息有误!").data(false); } } else { return ResultBody.failed("设为管理失败!").data(false); } } else { return ResultBody.failed("当前操作用户不是管理员!").data(false); } } else { return ResultBody.failed("用户信息有误!").data(false); } } else { return ResultBody.failed("业务参数有误!").data(false); } } /** * 判断用户名是否管理员 * @param userName * @return */ @Override public ResultBody userIsAdmin(String userName) { if (StringUtils.isNotBlank(userName)) { SysDoctor sysDoctor= baseMapper.userIsAdmin(userName); if (sysDoctor != null) { return ResultBody.ok().data(sysDoctor.getIsAdminUser()); } else { return ResultBody.failed().data(false); } }else { return ResultBody.failed("用户名不能为空!").data(false); } } }