|
|
@@ -1,6 +1,30 @@
|
|
|
package cn.tr.module.smart.common.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.comparator.CompareUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import cn.tr.core.enums.CreateEnum;
|
|
|
import cn.tr.core.exception.TRExcCode;
|
|
|
+import cn.tr.core.utils.PswUtils;
|
|
|
+import cn.tr.module.smart.common.service.IBizSmsService;
|
|
|
+import cn.tr.module.smart.common.util.CacheUtil;
|
|
|
+import cn.tr.module.sys.tenant.dto.*;
|
|
|
+import cn.tr.module.sys.tenant.mapper.SysTenantMapper;
|
|
|
+import cn.tr.module.sys.tenant.po.SysTenantPO;
|
|
|
+import cn.tr.module.sys.tenant.po.SysTenantPackagePO;
|
|
|
+import cn.tr.module.sys.tenant.repository.SysTenantPackageRepository;
|
|
|
+import cn.tr.module.sys.tenant.repository.SysTenantRepository;
|
|
|
+import cn.tr.module.sys.user.enums.UserStatusEnum;
|
|
|
+import cn.tr.module.sys.user.mapper.SysUserMapper;
|
|
|
+import cn.tr.module.sys.user.po.SysRolePO;
|
|
|
+import cn.tr.module.sys.user.po.SysUserPO;
|
|
|
+import cn.tr.module.sys.user.po.SysUserRolePO;
|
|
|
+import cn.tr.module.sys.user.po.SysUserTenantPO;
|
|
|
+import cn.tr.module.sys.user.repository.SysRoleRepository;
|
|
|
+import cn.tr.module.sys.user.repository.SysUserRepository;
|
|
|
+import cn.tr.module.sys.user.repository.SysUserRoleRepository;
|
|
|
+import cn.tr.module.sys.user.repository.SysUserTenantRepository;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
@@ -24,7 +48,22 @@ import cn.tr.module.smart.common.mapper.BizHospitalMapper;
|
|
|
public class BizHospitalServiceImpl implements IBizHospitalService {
|
|
|
@Autowired
|
|
|
private BizHospitalRepository baseRepository;
|
|
|
+ @Autowired
|
|
|
+ private CacheUtil cacheUtil;
|
|
|
+ @Autowired
|
|
|
+ private SysUserRepository sysUserRepository;
|
|
|
+ @Autowired
|
|
|
+ private SysRoleRepository sysRoleRepository;
|
|
|
+ @Autowired
|
|
|
+ private SysUserRoleRepository sysUserRoleRepository;
|
|
|
+ @Autowired
|
|
|
+ private SysUserTenantRepository sysUserTenantRepository;
|
|
|
+ @Autowired
|
|
|
+ private SysTenantPackageRepository sysTenantPackageRepository;
|
|
|
+ @Autowired
|
|
|
+ private SysTenantRepository tenantRepository;
|
|
|
|
|
|
+ private IBizSmsService bizSmsService;
|
|
|
|
|
|
/**
|
|
|
* 根据条件查询医院信息
|
|
|
@@ -38,7 +77,7 @@ public class BizHospitalServiceImpl implements IBizHospitalService {
|
|
|
baseRepository.selectList(new LambdaQueryWrapper<BizHospitalPO>()
|
|
|
)
|
|
|
);
|
|
|
- };
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 根据id查询医院信息
|
|
|
@@ -49,7 +88,7 @@ public class BizHospitalServiceImpl implements IBizHospitalService {
|
|
|
@Override
|
|
|
public BizHospitalDTO selectBizHospitalById(String id){
|
|
|
return BizHospitalMapper.INSTANCE.convertDto(baseRepository.selectById(id));
|
|
|
- };
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 编辑医院信息
|
|
|
@@ -61,7 +100,7 @@ public class BizHospitalServiceImpl implements IBizHospitalService {
|
|
|
@Override
|
|
|
public boolean updateBizHospitalById(BizHospitalDTO source){
|
|
|
return baseRepository.updateById(BizHospitalMapper.INSTANCE.convertPO(source))!=0;
|
|
|
- };
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 新增医院信息
|
|
|
@@ -73,7 +112,7 @@ public class BizHospitalServiceImpl implements IBizHospitalService {
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public boolean insertBizHospital(BizHospitalDTO source){
|
|
|
return baseRepository.insert(BizHospitalMapper.INSTANCE.convertPO(source))!=0;
|
|
|
- };
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 删除医院信息详情
|
|
|
@@ -88,5 +127,173 @@ public class BizHospitalServiceImpl implements IBizHospitalService {
|
|
|
throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"请选择要删除的数据");
|
|
|
}
|
|
|
return baseRepository.deleteBatchIds(ids);
|
|
|
- };
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public SysAdminAddCacheDTO generateAddAdmin(String tenantId) {
|
|
|
+ if (StrUtil.isEmpty(tenantId)) {
|
|
|
+ throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "请传入医院ID");
|
|
|
+ }
|
|
|
+ SysTenantPO sysTenantPO = tenantRepository.selectById(tenantId);
|
|
|
+ if (ObjectUtil.isNull(sysTenantPO)) {
|
|
|
+ throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "该医院不存在");
|
|
|
+ }
|
|
|
+ if (StrUtil.isNotEmpty(sysTenantPO.getTenantUserId())) {
|
|
|
+ throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "该医院已经存在管理员,无须添加");
|
|
|
+ }
|
|
|
+ //增加缓存
|
|
|
+ return cacheUtil.addAdminCache(604800L, tenantId, sysTenantPO.getName());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public SysAdminAddCacheDTO getCache(String tenantId) {
|
|
|
+ return cacheUtil.getAdminCache(tenantId);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean saveAdmin(SysAdminAddDTO adminAddDTO) {
|
|
|
+ //校验失效
|
|
|
+ SysAdminAddCacheDTO adminCache = cacheUtil.getAdminCache(adminAddDTO.getTenantId());
|
|
|
+ //缓存对象内容为空即缓存不存在
|
|
|
+ if (ObjectUtil.isNull(adminCache) || StrUtil.isBlank(adminCache.getTenantId())) {
|
|
|
+ throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "缓存已失效,请重新生成链接添加管理员");
|
|
|
+ }
|
|
|
+ if (CompareUtil.compare(adminCache.getTenantId(), adminCache.getTenantId(), true) != 0) {
|
|
|
+ throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "医院ID跟缓存中的不匹配");
|
|
|
+ }
|
|
|
+ //校验手机code码正确
|
|
|
+ String phoneCode = bizSmsService.getSmsCode("3", adminAddDTO.getPhone());
|
|
|
+ if (!StrUtil.equals(phoneCode, adminAddDTO.getSmsCode())) {
|
|
|
+ throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "手机验证码错误");
|
|
|
+ }
|
|
|
+ //查询手机号是否已经存储了如果已经存储使用已经存储的用户
|
|
|
+ SysUserPO sysUserPO = sysUserRepository.selectOne(new LambdaQueryWrapper<SysUserPO>()
|
|
|
+ .eq(SysUserPO::getPhone, adminAddDTO.getPhone())
|
|
|
+ .last("limit 1"));
|
|
|
+ if (Objects.isNull(sysUserPO)) {
|
|
|
+ sysUserPO = SysUserMapper.INSTANCE.addAdminDTOtoPO(adminAddDTO);
|
|
|
+ sysUserPO.setUsername(adminAddDTO.getPhone());
|
|
|
+ sysUserPO.setPassword(PswUtils.encryptPassword(adminAddDTO.getPassword()));
|
|
|
+ sysUserPO.setStatus(UserStatusEnum.normal.getValue());
|
|
|
+ sysUserRepository.insert(sysUserPO);
|
|
|
+ }
|
|
|
+ SysUserTenantPO sysUserTenantPO = new SysUserTenantPO();
|
|
|
+ sysUserTenantPO.setUserId(sysUserPO.getId());
|
|
|
+ sysUserTenantPO.setTenantId(adminAddDTO.getTenantId());
|
|
|
+ sysUserTenantRepository.insert(sysUserTenantPO);
|
|
|
+ SysRolePO sysRolePO = sysRoleRepository.selectOne(new LambdaQueryWrapper<SysRolePO>()
|
|
|
+ .eq(SysRolePO::getTenantId, adminAddDTO.getTenantId())
|
|
|
+ .eq(SysRolePO::getCode, "admin")
|
|
|
+ .last("limit 1"));
|
|
|
+ if (ObjectUtil.isNull(sysRolePO)) {
|
|
|
+ throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "该医院没有角色,请先添加角色");
|
|
|
+ }
|
|
|
+ SysUserRolePO sysUserRolePO = new SysUserRolePO();
|
|
|
+ sysUserRolePO.setUserId(sysUserPO.getId());
|
|
|
+ sysUserRolePO.setRoleId(sysRolePO.getId());
|
|
|
+ sysUserRolePO.setTenantId(adminAddDTO.getTenantId());
|
|
|
+ //回写管理员ID到医院包
|
|
|
+ tenantRepository.update(null, new LambdaUpdateWrapper<SysTenantPO>()
|
|
|
+ .set(SysTenantPO::getTenantUserId, sysUserPO.getId())
|
|
|
+ .eq(SysTenantPO::getId, adminAddDTO.getTenantId()));
|
|
|
+ return sysUserRoleRepository.insert(sysUserRolePO) != 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 手动添加医院
|
|
|
+ *
|
|
|
+ * @param addDTO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean saveHospital(SysTenantAndRoleAddDTO addDTO) {
|
|
|
+ SysTenantPO sysTenantPO = tenantRepository.selectOne(new LambdaQueryWrapper<SysTenantPO>()
|
|
|
+ .eq(SysTenantPO::getName, addDTO.getName()));
|
|
|
+ if (ObjectUtil.isNotNull(sysTenantPO)) {
|
|
|
+ throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "医院名称不能重复");
|
|
|
+ }
|
|
|
+ sysTenantPO = SysTenantMapper.INSTANCE.toPO(addDTO);
|
|
|
+ sysTenantPO.setType(CreateEnum.sys.name());
|
|
|
+ sysTenantPO.setDisable(Boolean.FALSE);
|
|
|
+ tenantRepository.insert(sysTenantPO);
|
|
|
+ SysRolePO sysRolePO = new SysRolePO();
|
|
|
+ sysRolePO.setTenantId(sysTenantPO.getId());
|
|
|
+ sysRolePO.setCode("admin");
|
|
|
+ sysRolePO.setName("管理员");
|
|
|
+ sysRolePO.setType(CreateEnum.sys.name());
|
|
|
+ sysRolePO.setDisable(Boolean.FALSE);
|
|
|
+ sysRolePO.setStatus(Boolean.FALSE);
|
|
|
+ sysRolePO.setSort(1);
|
|
|
+ return sysRoleRepository.insert(sysRolePO) != 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据邀请添加医院和管理员
|
|
|
+ *
|
|
|
+ * @param addDTO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean saveHospitalAndAdmin(SysTenantAndAdminAddDTO addDTO) {
|
|
|
+ SysTenantAddNoPackageDTO tenantDTO = addDTO.getTenantDTO();
|
|
|
+ SysAdminNoTenantIdAddDTO adminDTO = addDTO.getAdminDTO();
|
|
|
+ SysTenantPO sysTenantPO = tenantRepository.selectOne(new LambdaQueryWrapper<SysTenantPO>()
|
|
|
+ .eq(SysTenantPO::getName, tenantDTO.getName()));
|
|
|
+ if (ObjectUtil.isNotNull(sysTenantPO)) {
|
|
|
+ throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "医院名称不能重复");
|
|
|
+ }
|
|
|
+
|
|
|
+ //校验手机code码正确
|
|
|
+ String phoneCode = bizSmsService.getSmsCode("3", adminDTO.getPhone());
|
|
|
+ if (!StrUtil.equals(phoneCode, adminDTO.getSmsCode())) {
|
|
|
+ throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "手机验证码错误");
|
|
|
+ }
|
|
|
+ sysTenantPO = SysTenantMapper.INSTANCE.toPONoPackage(tenantDTO);
|
|
|
+ sysTenantPO.setType(CreateEnum.sys.name());
|
|
|
+ //根据确定的套餐修改查询
|
|
|
+ SysTenantPackagePO sysTenantPackagePO = sysTenantPackageRepository.selectOne(new LambdaQueryWrapper<SysTenantPackagePO>()
|
|
|
+ .eq(SysTenantPackagePO::getPackageCode, "hospital")
|
|
|
+ .eq(SysTenantPackagePO::getType, CreateEnum.custom.name())
|
|
|
+ .last("limit 1"));
|
|
|
+ sysTenantPO.setPackageId(sysTenantPackagePO.getId());
|
|
|
+ sysTenantPO.setDisable(Boolean.FALSE);
|
|
|
+ tenantRepository.insert(sysTenantPO);
|
|
|
+ SysRolePO sysRolePO = new SysRolePO();
|
|
|
+ sysRolePO.setTenantId(sysTenantPO.getId());
|
|
|
+ sysRolePO.setCode("admin");
|
|
|
+ sysRolePO.setName("管理员");
|
|
|
+ sysRolePO.setType(CreateEnum.sys.name());
|
|
|
+ sysRolePO.setDisable(Boolean.FALSE);
|
|
|
+ sysRolePO.setStatus(Boolean.FALSE);
|
|
|
+ sysRolePO.setSort(1);
|
|
|
+ sysRoleRepository.insert(sysRolePO);
|
|
|
+ //存储管理员
|
|
|
+ //查询手机号是否已经存储了如果已经存储使用已经存储的用户
|
|
|
+ SysUserPO sysUserPO = sysUserRepository.selectOne(new LambdaQueryWrapper<SysUserPO>()
|
|
|
+ .eq(SysUserPO::getPhone, adminDTO.getPhone())
|
|
|
+ .last("limit 1"));
|
|
|
+ if (Objects.isNull(sysUserPO)) {
|
|
|
+ sysUserPO = SysUserMapper.INSTANCE.addAdminDTOtoPO(adminDTO);
|
|
|
+ sysUserPO.setUsername(adminDTO.getPhone());
|
|
|
+ sysUserPO.setPassword(PswUtils.encryptPassword(adminDTO.getPassword()));
|
|
|
+ sysUserPO.setStatus(UserStatusEnum.normal.getValue());
|
|
|
+ sysUserPO.setTenantId(sysTenantPO.getId());
|
|
|
+ sysUserRepository.insert(sysUserPO);
|
|
|
+ }
|
|
|
+ SysUserTenantPO sysUserTenantPO = new SysUserTenantPO();
|
|
|
+ sysUserTenantPO.setUserId(sysUserPO.getId());
|
|
|
+ sysUserTenantPO.setTenantId(sysTenantPO.getId());
|
|
|
+ sysUserTenantRepository.insert(sysUserTenantPO);
|
|
|
+ SysUserRolePO sysUserRolePO = new SysUserRolePO();
|
|
|
+ sysUserRolePO.setUserId(sysUserPO.getId());
|
|
|
+ sysUserRolePO.setRoleId(sysRolePO.getId());
|
|
|
+ sysUserRolePO.setTenantId(sysTenantPO.getId());
|
|
|
+ //回写管理员ID到医院包
|
|
|
+ tenantRepository.update(null, new LambdaUpdateWrapper<SysTenantPO>()
|
|
|
+ .set(SysTenantPO::getTenantUserId, sysUserPO.getId())
|
|
|
+ .eq(SysTenantPO::getId, sysTenantPO.getId()));
|
|
|
+ return sysUserRoleRepository.insert(sysUserRolePO) != 0;
|
|
|
+ }
|
|
|
}
|