|
@@ -1,10 +1,262 @@
|
|
|
package com.lantone.security.facade;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
+import com.graphbuilder.math.func.FactFunction;
|
|
|
+import com.lantone.common.dto.DownBoxRegionDTO;
|
|
|
+import com.lantone.common.dto.GetDeptTreeDTO;
|
|
|
+import com.lantone.common.dto.GetHospitalByIdDTO;
|
|
|
+import com.lantone.common.dto.GetHospitalTreeDTO;
|
|
|
+import com.lantone.common.dto.GetHospitalUserDTO;
|
|
|
+import com.lantone.common.enums.IsDeleteEnum;
|
|
|
+import com.lantone.common.exception.Asserts;
|
|
|
+import com.lantone.common.util.DateUtil;
|
|
|
+import com.lantone.common.vo.AddHospitalTreeVO;
|
|
|
+import com.lantone.common.vo.AddHospitalUserVO;
|
|
|
+import com.lantone.common.vo.AddHospitalVO;
|
|
|
+import com.lantone.common.vo.AddRoleVO;
|
|
|
+import com.lantone.common.vo.AddUserVO;
|
|
|
+import com.lantone.common.vo.UpdateHospitalVO;
|
|
|
+import com.lantone.dblayermbg.entity.Hospital;
|
|
|
+import com.lantone.dblayermbg.entity.HospitalUser;
|
|
|
+import com.lantone.dblayermbg.entity.Region;
|
|
|
+import com.lantone.dblayermbg.entity.Role;
|
|
|
+import com.lantone.dblayermbg.entity.User;
|
|
|
+import com.lantone.dblayermbg.facade.HospitalFacade;
|
|
|
+import com.lantone.dblayermbg.facade.HospitalUserFacade;
|
|
|
+import com.lantone.dblayermbg.facade.RegionFacade;
|
|
|
+import com.lantone.dblayermbg.facade.RoleFacade;
|
|
|
+import com.lantone.dblayermbg.facade.UserFacade;
|
|
|
+import com.lantone.dblayermbg.facade.UserRoleFacade;
|
|
|
+import com.lantone.security.enums.HospitalTypeEnum;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
/**
|
|
|
* 组织管理API
|
|
|
*/
|
|
|
@Component
|
|
|
public class HospitalManagementFacade {
|
|
|
+ @Autowired
|
|
|
+ private HospitalFacade hospitalFacade;
|
|
|
+ @Autowired
|
|
|
+ private HospitalUserFacade hospitalUserFacade;
|
|
|
+ @Autowired
|
|
|
+ private UserRoleFacade userRoleFacade;
|
|
|
+ @Autowired
|
|
|
+ private UserManagementFacade userManagementFacade;
|
|
|
+ @Autowired
|
|
|
+ private UserFacade userFacade;
|
|
|
+ @Autowired
|
|
|
+ private RoleManagementFacade roleManagementFacade;
|
|
|
+ @Autowired
|
|
|
+ private RoleFacade roleFacade;
|
|
|
+ @Autowired
|
|
|
+ private RegionFacade regionFacade;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param addHospitalVO
|
|
|
+ * @Description添加组织
|
|
|
+ * @Return boolean
|
|
|
+ */
|
|
|
+ public boolean addHospital(AddHospitalVO addHospitalVO) {
|
|
|
+ Hospital hospital = new Hospital();
|
|
|
+ BeanUtils.copyProperties(addHospitalVO, hospital);
|
|
|
+ hospital.setGmtCreate(DateUtil.now());
|
|
|
+ //1.添加组织信息
|
|
|
+ if (hospitalFacade.save(hospital)) {
|
|
|
+ //2.保存该组织的用户
|
|
|
+ return saveUser(hospital.getId(), addHospitalVO);
|
|
|
+ } else {
|
|
|
+ Asserts.fail("组织添加失败");
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param hospitalId
|
|
|
+ * @param addHospitalVO
|
|
|
+ * @Description添加组织的用户
|
|
|
+ * @Return boolean
|
|
|
+ */
|
|
|
+ private boolean saveUser(Long hospitalId, AddHospitalVO addHospitalVO) {
|
|
|
+
|
|
|
+ //1.添加角色
|
|
|
+ AddRoleVO addRoleVO = new AddRoleVO();
|
|
|
+ addRoleVO.setRemark(addHospitalVO.getName() + "管理员");
|
|
|
+ addRoleVO.setStatus("1");
|
|
|
+ addRoleVO.setSoftwares(addHospitalVO.getSoftwares());
|
|
|
+ if (roleManagementFacade.addRole(addRoleVO)) {
|
|
|
+ //2.获取角色id完善新增用户信息
|
|
|
+ Long roleId = roleFacade.list(new QueryWrapper<Role>()
|
|
|
+ .eq("remark", addHospitalVO.getName() + "管理员")).get(0).getId();
|
|
|
+ //拼装添加用户信息
|
|
|
+ AddUserVO addUserVO = new AddUserVO();
|
|
|
+ //用户与角色的关系
|
|
|
+ addUserVO.setRoles(new ArrayList<>());
|
|
|
+ addUserVO.getRoles().add(roleId);
|
|
|
+ BeanUtils.copyProperties(addHospitalVO.getAddHospitalUserVO(), addUserVO);
|
|
|
+ //用户与组织的关系
|
|
|
+ AddHospitalTreeVO addHospitalTreeVO = new AddHospitalTreeVO();
|
|
|
+ addHospitalTreeVO.setId(hospitalId);
|
|
|
+ BeanUtils.copyProperties(addHospitalVO, addHospitalTreeVO);
|
|
|
+ addHospitalTreeVO.setHospitals(new ArrayList<>());
|
|
|
+ addHospitalTreeVO.getHospitals().add(hospitalId);
|
|
|
+ addUserVO.setAddHospitalTreeVO(addHospitalTreeVO);
|
|
|
+ return userManagementFacade.addUser(addUserVO);
|
|
|
+ } else {
|
|
|
+ Asserts.fail("角色插入失败");
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * @Description删除组织
|
|
|
+ * @param hospitalId
|
|
|
+ * @Return boolean
|
|
|
+ */
|
|
|
+ public boolean deleteHospital(Long hospitalId) {
|
|
|
+ //1.删除组织表sys_hospital
|
|
|
+ if(hospitalFacade.removeById(hospitalId)){
|
|
|
+ //2.删除该组织的管理用户、角色
|
|
|
+ return deleteHUserAndRole(hospitalId);
|
|
|
+ }else {
|
|
|
+ Asserts.fail("组织表删除失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Description删除该组织的管理用户、角色
|
|
|
+ * @param hospitalId
|
|
|
+ * @Return boolean
|
|
|
+ */
|
|
|
+ private boolean deleteHUserAndRole(Long hospitalId) {
|
|
|
+ //1.获取用户id
|
|
|
+ Long userId = hospitalUserFacade.getBaseMapper().getHospitalUserById(hospitalId);
|
|
|
+ if(userManagementFacade.deleteUser(userId)){
|
|
|
+ //2.获取角色id
|
|
|
+ Long roleId = userRoleFacade.getBaseMapper().getUserRoleById(userId);
|
|
|
+ return roleManagementFacade.deleteRole(roleId);
|
|
|
+ }else {
|
|
|
+ Asserts.fail("管理用户删除失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Description修改组织信息
|
|
|
+ * @param updateHospitalVO
|
|
|
+ * @Return boolean
|
|
|
+ */
|
|
|
+ public boolean updateHospital(UpdateHospitalVO updateHospitalVO) {
|
|
|
+ //1.删除该组织关联的管理用户以及角色
|
|
|
+ if(deleteHUserAndRole(updateHospitalVO.getId())){
|
|
|
+ Hospital hospital = new Hospital();
|
|
|
+ BeanUtils.copyProperties(updateHospitalVO,hospital);
|
|
|
+ //2.修改组织信息
|
|
|
+ if(hospitalFacade.updateById(hospital)){
|
|
|
+ //3.创建组织与管理用户、角色
|
|
|
+ AddHospitalVO addHospitalVO = new AddHospitalVO();
|
|
|
+ BeanUtils.copyProperties(addHospitalVO,updateHospitalVO);
|
|
|
+ addHospitalVO.setAddHospitalUserVO(updateHospitalVO.getAddHospitalUserVO());
|
|
|
+ addHospitalVO.setSoftwares(updateHospitalVO.getSoftwares());
|
|
|
+ return saveUser(updateHospitalVO.getId(),addHospitalVO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Description禁用启用组织
|
|
|
+ * @param hospitalId
|
|
|
+ * @param status
|
|
|
+ * @Return boolean
|
|
|
+ */
|
|
|
+ public boolean disableHospital(Long hospitalId, String status) {
|
|
|
+ return hospitalFacade.update(new UpdateWrapper<Hospital>().set("status",status).eq("id",hospitalId));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Description通过组织id获取该组织及用户详情
|
|
|
+ * @param hospitalId
|
|
|
+ * @param local
|
|
|
+ * @Return com.lantone.common.dto.GetHospitalByIdDTO
|
|
|
+ */
|
|
|
+ public GetHospitalByIdDTO getHospitalById(Long hospitalId, Long local) {
|
|
|
+ GetHospitalByIdDTO getHospitalByIdDTO = new GetHospitalByIdDTO();
|
|
|
+ //1.获取医院详情
|
|
|
+ Hospital hospital = hospitalFacade.getById(hospitalId);
|
|
|
+ BeanUtils.copyProperties(hospital,getHospitalByIdDTO);
|
|
|
+ getHospitalByIdDTO.setParentName(hospitalFacade.getById(hospital.getParentId()).getName());
|
|
|
+ //2.获取该医院的管理用户详情
|
|
|
+ User user = userFacade.getById(hospitalUserFacade.getBaseMapper().getHospitalUserById(hospitalId));
|
|
|
+ GetHospitalUserDTO getHospitalUserDTO = new GetHospitalUserDTO();
|
|
|
+ BeanUtils.copyProperties(user,getHospitalUserDTO);
|
|
|
+ getHospitalByIdDTO.setGetHospitalUserDTO(getHospitalUserDTO);
|
|
|
+ //3.获取管理角色相关信息
|
|
|
+ getHospitalByIdDTO.setGetRoleDTO(roleManagementFacade.getRoleById(userRoleFacade.getBaseMapper()
|
|
|
+ .getUserRoleById(user.getId())));
|
|
|
+ return getHospitalByIdDTO;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Description组织管理列表页管理员下拉框筛选类型、病区查询
|
|
|
+ * @param
|
|
|
+ * @Return java.util.Map<java.lang.String,java.lang.Object>
|
|
|
+ */
|
|
|
+ public Map<String,Object> getManagerBoxInfo(Long local) {
|
|
|
+ Map<String,Object> outMap = new HashMap<>();
|
|
|
+ Map<Integer,String> hospitalTypeMap = new HashMap<>();
|
|
|
+ //1.获取当前用户的组织类型
|
|
|
+ int hospitalType = -1;
|
|
|
+ Hospital hospital = hospitalFacade.getById(local);//###当前登录用户的医院id
|
|
|
+ if (hospital != null) {
|
|
|
+ hospitalType = Integer.parseInt(hospital.getType());
|
|
|
+ }
|
|
|
+ //单家医院
|
|
|
+ if (HospitalTypeEnum.SINGLE_HOSPITAL.getKey() == hospitalType) {
|
|
|
+ //获取病区信息
|
|
|
+ List<DownBoxRegionDTO> downBoxRegions = new ArrayList<>();
|
|
|
+ regionFacade.list(new QueryWrapper<Region>()
|
|
|
+ .eq("hospital_id",hospital.getId())
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey())).stream().forEach(region -> {
|
|
|
+ DownBoxRegionDTO downBoxRegionDTO = new DownBoxRegionDTO();
|
|
|
+ BeanUtils.copyProperties(region,downBoxRegionDTO);
|
|
|
+ downBoxRegions.add(downBoxRegionDTO);
|
|
|
+ });
|
|
|
+ outMap.put("所属病区",downBoxRegions);
|
|
|
+ }else if (HospitalTypeEnum.AI_PLATFORM.getKey()== hospitalType) {
|
|
|
+ hospitalTypeMap.put(HospitalTypeEnum.GROUP_HOSPITAL.getKey(),HospitalTypeEnum.GROUP_HOSPITAL.getName());
|
|
|
+ hospitalTypeMap.put(HospitalTypeEnum.SINGLE_HOSPITAL.getKey(),HospitalTypeEnum.SINGLE_HOSPITAL.getName());
|
|
|
+ hospitalTypeMap.put(HospitalTypeEnum.COMMON_HOSPITAL.getKey(),HospitalTypeEnum.COMMON_HOSPITAL.getName());
|
|
|
+ hospitalTypeMap.put(HospitalTypeEnum.UNION_HOSPITAL.getKey(),HospitalTypeEnum.UNION_HOSPITAL.getName());
|
|
|
+ outMap.put("类型",hospitalTypeMap);
|
|
|
+ }
|
|
|
+ else if (HospitalTypeEnum.GROUP_HOSPITAL.getKey()== hospitalType) {
|
|
|
+ hospitalTypeMap.put(HospitalTypeEnum.GROUP_HOSPITAL.getKey(),HospitalTypeEnum.GROUP_HOSPITAL.getName());
|
|
|
+ hospitalTypeMap.put(HospitalTypeEnum.SINGLE_HOSPITAL.getKey(),HospitalTypeEnum.SINGLE_HOSPITAL.getName());
|
|
|
+ outMap.put("类型",hospitalTypeMap);
|
|
|
+ }
|
|
|
+ else if (HospitalTypeEnum.COMMON_HOSPITAL.getKey()== hospitalType) {
|
|
|
+ hospitalTypeMap.put(HospitalTypeEnum.SINGLE_HOSPITAL.getKey(),HospitalTypeEnum.SINGLE_HOSPITAL.getName());
|
|
|
+ hospitalTypeMap.put(HospitalTypeEnum.COMMON_HOSPITAL.getKey(),HospitalTypeEnum.COMMON_HOSPITAL.getName());
|
|
|
+ outMap.put("类型",hospitalTypeMap);
|
|
|
+ }
|
|
|
+ else if (HospitalTypeEnum.UNION_HOSPITAL.getKey()== hospitalType) {
|
|
|
+ hospitalTypeMap.put(HospitalTypeEnum.SINGLE_HOSPITAL.getKey(),HospitalTypeEnum.SINGLE_HOSPITAL.getName());
|
|
|
+ hospitalTypeMap.put(HospitalTypeEnum.UNION_HOSPITAL.getKey(),HospitalTypeEnum.UNION_HOSPITAL.getName());
|
|
|
+ outMap.put("类型",hospitalTypeMap);
|
|
|
+ }
|
|
|
+ return outMap;
|
|
|
+ }
|
|
|
+
|
|
|
}
|