This commit is contained in:
wucongxing8150 2025-08-11 17:32:30 +08:00
parent ea2bf574db
commit f83f74f592
9 changed files with 418 additions and 85 deletions

View File

@ -0,0 +1,194 @@
# getAppDoctor方法修改说明
## 🎯 修改目标
1. 修改后端 `getAppDoctor` 方法,不再将医院信息存储到数据库
2. 处理返回的医生列表数据(之前是单个对象,现在是列表)
3. 更新前端代码,支持从多个医生中选择
4. 确保找到医生信息后,医院名称数据能正确展示
## 🔧 后端修改内容
### 1. 修改 `CaseClinicalDoctorService.java`
#### 主要变化:
- **返回类型**: 从 `ResponseDTO<AppDoctorVO>` 改为 `ResponseDTO<List<AppDoctorVO>>`
- **医院信息处理**: 不再存储到数据库,只获取并返回
- **列表处理**: 遍历返回的医生列表为每个医生创建VO对象
#### 具体修改:
```java
// 修改前
public ResponseDTO<AppDoctorVO> getAppDoctor(String doctorName)
// 修改后
public ResponseDTO<List<AppDoctorVO>> getAppDoctor(String doctorName)
```
#### 医院信息处理逻辑:
```java
// 修改前:查询数据库并存储
if (existingHospital != null) {
appDoctor.setHospitalId(existingHospital.getHospitalId());
appDoctor.setHospitalName(existingHospital.getHospitalName());
} else {
// 创建新的医院实体并插入数据库
BasicHospitalEntity newHospital = new BasicHospitalEntity();
// ... 设置医院信息
basicHospitalDao.insert(newHospital);
appDoctor.setHospitalId(newHospital.getHospitalId());
appDoctor.setHospitalName(newHospital.getHospitalName());
}
// 修改后:只获取信息,不存储
if (hospitalResponse != null && hospitalResponse.getData() != null) {
GetHospitalByUuidResponse.GetHospitalByUuidData hospitalData = hospitalResponse.getData();
appDoctor.setHospitalName(hospitalData.getName());
}
```
## 🎨 前端修改内容
### 1. 修改 `case-clinical-doctor-form.vue`
#### 新增功能:
- **医生选择对话框**: 当搜索到多个医生时,显示选择对话框
- **列表展示**: 显示医生姓名、手机号、省份、医院等信息
- **智能选择**: 只有一个结果时自动选择,多个结果时用户手动选择
- **医院名称显示**: 在医生信息提示和医院选择区域显示医生所在医院
#### 新增变量:
```javascript
const doctorSelectionVisible = ref(false); // 医生选择对话框显示状态
const doctorSelectionList = ref([]); // 医生选择列表
```
#### 新增函数:
```javascript
// 显示医生选择对话框
function showDoctorSelectionModal(doctorList) {
doctorSelectionList.value = doctorList;
doctorSelectionVisible.value = true;
}
// 关闭医生选择对话框
function closeDoctorSelectionModal() {
doctorSelectionVisible.value = false;
doctorSelectionList.value = [];
}
// 选择医生
function selectDoctor(doctor) {
appDoctorInfo.value = doctor;
closeDoctorSelectionModal();
message.info('已选择医生,请确认是否使用此信息');
}
```
#### 修改搜索逻辑:
```javascript
// 修改前:直接使用返回数据
if (result.data) {
appDoctorInfo.value = result.data;
message.info('找到APP医生信息请确认是否使用');
}
// 修改后:处理列表数据
if (result.data && Array.isArray(result.data) && result.data.length > 0) {
if (result.data.length === 1) {
// 只有一个结果,直接使用
appDoctorInfo.value = result.data[0];
message.info('找到APP医生信息请确认是否使用');
} else {
// 多个结果,显示选择对话框
showDoctorSelectionModal(result.data);
}
}
```
#### 医院名称显示逻辑:
```javascript
// 医生信息提示中显示医院名称
:description="`手机号:${appDoctorInfo.phone || '未知'} | 省份:${appDoctorInfo.province || '未知'}${appDoctorInfo.hospitalName ? ' | 医院:' + appDoctorInfo.hospitalName : ''}`"
// 医院选择区域显示医生所在医院
<div v-if="form.hospitalName && !form.doctorId" style="margin-bottom: 8px;">
<a-alert
:message="`医生所在医院:${form.hospitalName}`"
type="success"
show-icon
closable
@close="form.hospitalName = undefined"
/>
</div>
```
#### 新增UI组件
```html
<!-- 医生选择对话框 -->
<a-modal
title="选择医生"
:open="doctorSelectionVisible"
@cancel="closeDoctorSelectionModal"
:maskClosable="false"
:destroyOnClose="true"
width="600px"
>
<div class="doctor-selection-list">
<a-list :data-source="doctorSelectionList" item-layout="horizontal">
<!-- 医生信息展示 -->
</a-list>
</div>
</a-modal>
```
## 📋 修改检查清单
### 后端修改:
- [x] 修改返回类型为 `List<AppDoctorVO>`
- [x] 移除医院信息存储逻辑
- [x] 添加列表遍历处理
- [x] 添加必要的import语句
### 前端修改:
- [x] 修改搜索逻辑处理列表数据
- [x] 添加医生选择对话框
- [x] 添加相关状态变量
- [x] 添加选择处理函数
- [x] 添加样式美化
## 🚀 使用方法
### 1. 搜索医生
- 在医生姓名输入框中输入姓名
- 点击搜索按钮或按回车键
### 2. 处理搜索结果
- **单个结果**: 自动显示医生信息,用户确认后使用
- **多个结果**: 显示选择对话框,用户手动选择
### 3. 选择医生
- 在选择对话框中查看医生详细信息
- 点击"选择此医生"按钮确认选择
### 4. 医院信息显示
- **医生信息提示**: 显示医生姓名、手机号、省份、医院名称
- **医院选择区域**: 在所属医院字段上方显示医生所在医院
- **手动选择**: 用户需要手动选择对应的医院(不自动设置)
## ⚠️ 注意事项
1. **数据一致性**: 后端不再存储医院信息,每次查询都是实时获取
2. **性能考虑**: 多个医生时会有多次API调用获取医院信息
3. **错误处理**: 如果医院信息获取失败,医生信息仍然可用
4. **用户体验**: 多个结果时用户需要手动选择,增加了操作步骤
## ✅ 完成状态
- [x] 后端 `getAppDoctor` 方法修改完成
- [x] 前端医生选择对话框添加完成
- [x] 列表数据处理逻辑完成
- [x] 样式美化完成
- [x] 文档说明完成
**所有修改已完成!** 现在系统支持从多个医生中选择,并且不再将医院信息存储到数据库。

View File

@ -0,0 +1,58 @@
package net.lab1024.sa.admin.extend.app.UserInfo;
import lombok.Data;
import java.util.List;
@Data
public class GetUserInfoListResponse {
/** 接口调用状态。200正常其它值调用出错 */
private int code;
/** 结果说明。如果接口调用出错,那么返回错误描述。成功则返回 ok */
private String msg;
/** 接口返回的用户信息数据 */
private List<ResponsData> data;
/** 接口是否调用成功 */
private boolean success;
/** 错误信息或提示信息 */
private String message;
@Data
public static class ResponsData {
/** app唯一标识 */
private String uuid;
/** 科室 */
private String officeName;
/** 姓名 */
private String realname;
/** 医院唯一标识 */
private String hospitalUuid;
/** 手机号 */
private String mobile;
/** 头像地址 */
private String img_host;
/** 头像地址 */
private String photo;
/** 创建时间 */
private String createDate;
/** 职称 */
private String positionName;
/** 省份 */
private String provName;
}
}

View File

@ -11,6 +11,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@ -159,12 +160,12 @@ public class UserInfo extends Base {
}
// 根据姓名获取信息
public GetUserInfoResponse getUserInfoByName(String doctorName) throws BusinessException {
public GetUserInfoListResponse getUserInfoByName(String doctorName) throws BusinessException {
String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
// 处理参数
Map<String, Object> requestData = new HashMap<>();
requestData.put("userName", doctorName);
requestData.put("user_name", doctorName);
requestData.put("platform", appConfig.getPlatform());
requestData.put("timestamp", timestamp);
@ -186,7 +187,7 @@ public class UserInfo extends Base {
}
// 反序列化 JSON
GetUserInfoResponse result = JSONUtil.toBean(response.body(), GetUserInfoResponse.class);
GetUserInfoListResponse result = JSONUtil.toBean(response.body(), GetUserInfoListResponse.class);
log.info("获取app数据返回:{}",result);
if (result.getCode() != 200){
if (!Objects.equals(result.getMsg(), "")){

View File

@ -176,7 +176,7 @@ public class CaseClinicalService {
// 新增医院统计
@Transactional
public StatsCaseClinicalHospitalEntity IncStatsCaseClinicalHospital(String hospitalId, Integer type, LocalDateTime lastPushDate){
public StatsCaseClinicalHospitalEntity IncStatsCaseClinicalHospital(String hospitalId, Integer type, LocalDateTime lastPushDate,Integer num){
LambdaQueryWrapper<StatsCaseClinicalHospitalEntity> mapQueryWrapper = new LambdaQueryWrapper<>();
mapQueryWrapper.eq(StatsCaseClinicalHospitalEntity::getHospitalId, hospitalId);
StatsCaseClinicalHospitalEntity statsCaseClinicalHospital = statsCaseClinicalHospitalDao.selectOne(mapQueryWrapper);
@ -185,9 +185,9 @@ public class CaseClinicalService {
statsCaseClinicalHospital.setHospitalId(Long.valueOf(hospitalId));
if (type == 1){
statsCaseClinicalHospital.setArticleNum(1);
statsCaseClinicalHospital.setArticleNum(num);
}else if(type == 2){
statsCaseClinicalHospital.setVideoNum(1);
statsCaseClinicalHospital.setVideoNum(num);
}
if (lastPushDate!=null){
@ -196,9 +196,9 @@ public class CaseClinicalService {
statsCaseClinicalHospitalDao.insert(statsCaseClinicalHospital);
}else{
if (type == 1){
statsCaseClinicalHospitalDao.inc(statsCaseClinicalHospital.getHospitalId(),"article_num",1);
statsCaseClinicalHospitalDao.inc(statsCaseClinicalHospital.getHospitalId(),"article_num",num);
}else{
statsCaseClinicalHospitalDao.inc(statsCaseClinicalHospital.getHospitalId(),"video_num",1);
statsCaseClinicalHospitalDao.inc(statsCaseClinicalHospital.getHospitalId(),"video_num",num);
}
}
@ -212,7 +212,7 @@ public class CaseClinicalService {
* @return
*/
@Transactional
public StatsCaseClinicalHospitalEntity DecStatsCaseClinicalHospital(String hospitalId,Integer type){
public StatsCaseClinicalHospitalEntity DecStatsCaseClinicalHospital(String hospitalId,Integer type,Integer num){
LambdaQueryWrapper<StatsCaseClinicalHospitalEntity> mapQueryWrapper = new LambdaQueryWrapper<>();
mapQueryWrapper.eq(StatsCaseClinicalHospitalEntity::getHospitalId, hospitalId);
StatsCaseClinicalHospitalEntity statsCaseClinicalHospital = statsCaseClinicalHospitalDao.selectOne(mapQueryWrapper);
@ -227,7 +227,7 @@ public class CaseClinicalService {
statsCaseClinicalHospitalDao.updateById(statsCaseClinicalHospital);
}
statsCaseClinicalHospitalDao.dec(statsCaseClinicalHospital.getHospitalId(),"article_num",1);
statsCaseClinicalHospitalDao.dec(statsCaseClinicalHospital.getHospitalId(),"article_num",num);
}else{
// 最后一篇文章发表时间
LocalDateTime lastPushDate = caseClinicalVideoDao.selectLastVideoPushDateByHospitalId(Long.valueOf(hospitalId));
@ -235,7 +235,7 @@ public class CaseClinicalService {
statsCaseClinicalHospital.setLastPushDate(lastPushDate);
statsCaseClinicalHospitalDao.updateById(statsCaseClinicalHospital);
}
statsCaseClinicalHospitalDao.dec(statsCaseClinicalHospital.getHospitalId(),"video_num",1);
statsCaseClinicalHospitalDao.dec(statsCaseClinicalHospital.getHospitalId(),"video_num",num);
}
}

View File

@ -238,7 +238,7 @@ public class CaseClinicalArticleService {
caseClinicalService.DecStatsCaseClinicalDoctor(String.valueOf(author.getDoctorId()),1);
// 减少医院统计
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),1);
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),1,1);
}
}
@ -305,7 +305,7 @@ public class CaseClinicalArticleService {
caseClinicalService.DecStatsCaseClinicalDoctor(String.valueOf(author.getDoctorId()),1);
// 减少医院统计
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),1);
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),1,1);
}
caseClinicalArticleDao.deleteById(articleId);
@ -360,7 +360,7 @@ public class CaseClinicalArticleService {
caseClinicalService.DecStatsCaseClinicalDoctor(String.valueOf(author.getDoctorId()),1);
// 减少医院统计
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),1);
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),1,1);
}
return ResponseDTO.ok();
@ -517,7 +517,8 @@ public class CaseClinicalArticleService {
caseClinicalService.DecStatsCaseClinicalDoctor(String.valueOf(author.getDoctorId()), 1);
// 减少医院统计
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()), 1);
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),
1,1);
}
} else if (status == 1) {
// 状态改为正常增加统计数量
@ -551,7 +552,8 @@ public class CaseClinicalArticleService {
caseClinicalService.IncStatsCaseClinicalDoctor(String.valueOf(author.getDoctorId()), 1, lastPushDate);
// 增加医院统计
caseClinicalService.IncStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()), 1, lastPushDate);
caseClinicalService.IncStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),
1, lastPushDate,1);
}
}
@ -713,7 +715,7 @@ public class CaseClinicalArticleService {
caseClinicalService.DecStatsCaseClinicalDoctor(String.valueOf(caseClinicalDoctor.getDoctorId()),1);
// 减少医院统计
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),1);
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),1,1);
// 删除该作者
caseClinicalArticleAuthorDao.deleteById(author.getAuthorId());
@ -741,7 +743,8 @@ public class CaseClinicalArticleService {
caseClinicalService.IncStatsCaseClinicalDoctor(String.valueOf(caseClinicalDoctor.getDoctorId()),1,lastPushDate);
// 新增医院统计
caseClinicalService.IncStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),1,lastPushDate);
caseClinicalService.IncStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),1,
lastPushDate,1);
// 生成用户证书-文章/视频
if (qrCodeBytes == null || qrCodeBytes.length == 0) {

View File

@ -92,7 +92,7 @@ public class CaseClinicalDoctorController {
@Operation(summary = "获取APP医生信息 @author xing")
@GetMapping("/caseClinicalDoctor/getAppDoctor")
@SaCheckPermission("caseClinicalDoctor:query")
public ResponseDTO<AppDoctorVO> getAppDoctor(@RequestParam String doctorName) {
public ResponseDTO<List<AppDoctorVO>> getAppDoctor(@RequestParam String doctorName) {
return caseClinicalDoctorService.getAppDoctor(doctorName);
}

View File

@ -34,4 +34,7 @@ public class CaseClinicalDoctorUpdateForm {
@JsonDeserialize(using = FileKeyVoDeserializer.class)
private String avatar;
@Schema(description = "所属医院id", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "所属医院id 不能为空")
private Long hospitalId;
}

View File

@ -1,8 +1,13 @@
package net.lab1024.sa.admin.module.business.caseClinicalDoctor.service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.ArrayList;
import java.util.Objects;
import lombok.extern.slf4j.Slf4j;
import net.lab1024.sa.admin.extend.app.UserInfo.GetUserInfoListResponse;
import net.lab1024.sa.admin.module.business.caseClinical.service.CaseClinicalService;
import net.lab1024.sa.admin.module.business.caseClinicalArticle.dao.CaseClinicalArticleDao;
import net.lab1024.sa.admin.module.business.caseClinicalDoctor.dao.CaseClinicalDoctorDao;
import net.lab1024.sa.admin.module.business.basicHospital.dao.BasicHospitalDao;
import net.lab1024.sa.admin.module.business.basicHospital.domain.entity.BasicHospitalEntity;
@ -13,6 +18,8 @@ import net.lab1024.sa.admin.module.business.caseClinicalDoctor.domain.form.CaseC
import net.lab1024.sa.admin.module.business.caseClinicalDoctor.domain.form.CaseClinicalDoctorUpdateForm;
import net.lab1024.sa.admin.module.business.caseClinicalDoctor.domain.vo.CaseClinicalDoctorVO;
import net.lab1024.sa.admin.module.business.caseClinicalDoctor.domain.vo.AppDoctorVO;
import net.lab1024.sa.admin.module.business.statsCaseClinical.dao.StatsCaseClinicalDoctorDao;
import net.lab1024.sa.admin.module.business.statsCaseClinical.domain.entity.StatsCaseClinicalDoctorEntity;
import net.lab1024.sa.admin.module.business.user.service.UserService;
import net.lab1024.sa.base.common.exception.BusinessException;
import net.lab1024.sa.admin.extend.app.UserInfo.UserInfo;
@ -27,6 +34,7 @@ import net.lab1024.sa.base.common.domain.ResponseDTO;
import net.lab1024.sa.base.common.domain.PageResult;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -61,6 +69,15 @@ public class CaseClinicalDoctorService {
@Resource
private UserService userService;
@Resource
private CaseClinicalService caseClinicalService;
@Autowired
private StatsCaseClinicalDoctorDao statsCaseClinicalDoctorDao;
@Autowired
private CaseClinicalArticleDao caseClinicalArticleDao;
/**
* 分页查询
*/
@ -170,9 +187,25 @@ public class CaseClinicalDoctorService {
return ResponseDTO.ok();
}
// 没有 uuid 按表单直接新增
// 没有 uuid 二次匹配
// 二次匹配姓名 + 医院
LambdaQueryWrapper<CaseClinicalDoctorEntity> doctorWrapper = new LambdaQueryWrapper<>();
doctorWrapper.eq(CaseClinicalDoctorEntity::getDoctorName, addForm.getDoctorName());
doctorWrapper.eq(CaseClinicalDoctorEntity::getHospitalId, addForm.getHospitalId());
CaseClinicalDoctorEntity caseClinicalDoctor = caseClinicalDoctorDao.selectOne(doctorWrapper);
if (caseClinicalDoctor != null) {
return ResponseDTO.ok();
}
CaseClinicalDoctorEntity caseClinicalDoctorEntity = SmartBeanUtil.copy(addForm, CaseClinicalDoctorEntity.class);
caseClinicalDoctorDao.insert(caseClinicalDoctorEntity);
LocalDateTime lastPushDate = caseClinicalArticleDao.selectLastArticlePushDateByHospitalId(addForm.getHospitalId());
// 新增新的医院统计-文章
caseClinicalService.IncStatsCaseClinicalHospital(String.valueOf(addForm.getHospitalId()),1,
lastPushDate,0);
return ResponseDTO.ok();
}
@ -181,8 +214,40 @@ public class CaseClinicalDoctorService {
*
*/
public ResponseDTO<String> update(CaseClinicalDoctorUpdateForm updateForm) {
CaseClinicalDoctorEntity caseClinicalDoctorEntity = SmartBeanUtil.copy(updateForm, CaseClinicalDoctorEntity.class);
caseClinicalDoctorDao.updateById(caseClinicalDoctorEntity);
// 获取医生数据
CaseClinicalDoctorEntity caseClinicalDoctor = caseClinicalDoctorDao.selectById(updateForm.getDoctorId());
if (caseClinicalDoctor == null) {
throw new BusinessException("操作失败");
}
// 检测医院是否改动
if (!Objects.equals(caseClinicalDoctor.getHospitalId(), updateForm.getHospitalId())){
// 获取医生统计
LambdaQueryWrapper<StatsCaseClinicalDoctorEntity> doctorWrapper = new LambdaQueryWrapper<>();
doctorWrapper.eq(StatsCaseClinicalDoctorEntity::getDoctorId, caseClinicalDoctor.getDoctorId());
StatsCaseClinicalDoctorEntity statsCaseClinicalDoctor = statsCaseClinicalDoctorDao.selectOne(doctorWrapper);
if (statsCaseClinicalDoctor != null) {
// 减少医院统计-文章
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),1
,statsCaseClinicalDoctor.getArticleNum());
LocalDateTime lastPushDate = caseClinicalArticleDao.selectLastArticlePushDateByHospitalId(updateForm.getHospitalId());
// 新增新的医院统计-文章
caseClinicalService.IncStatsCaseClinicalHospital(String.valueOf(updateForm.getHospitalId()),1,
lastPushDate,statsCaseClinicalDoctor.getArticleNum());
// 减少医院统计-视频
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),2
,statsCaseClinicalDoctor.getVideoNum());
// 新增新的医院统计-视频
caseClinicalService.IncStatsCaseClinicalHospital(String.valueOf(updateForm.getHospitalId()),1,
lastPushDate,statsCaseClinicalDoctor.getVideoNum());
}
}
return ResponseDTO.ok();
}
@ -238,78 +303,82 @@ public class CaseClinicalDoctorService {
/**
* 获取APP医生信息
*/
@Transactional
public ResponseDTO<AppDoctorVO> getAppDoctor(String doctorName) {
public ResponseDTO<List<AppDoctorVO>> getAppDoctor(String doctorName) {
if (doctorName == null || doctorName.trim().isEmpty()) {
return ResponseDTO.userErrorParam("医生姓名不能为空");
}
// 调用UserInfo获取医生信息
GetUserInfoResponse userInfoResponse = userInfo.getUserInfoByName(doctorName);
GetUserInfoListResponse userInfoResponse = userInfo.getUserInfoByName(doctorName);
if (userInfoResponse == null || userInfoResponse.getData() == null) {
throw new BusinessException("未找到医生信息");
}
if (userInfoResponse.getData().getUuid() == null) {
List<GetUserInfoListResponse.ResponsData> userDataList = userInfoResponse.getData();
if (userDataList.isEmpty()) {
throw new BusinessException("未找到医生信息");
}
GetUserInfoResponse.ResponsData userData = userInfoResponse.getData();
// 转换为AppDoctorVO
AppDoctorVO appDoctor = new AppDoctorVO();
appDoctor.setUuid(userData.getUuid());
appDoctor.setDoctorName(userData.getRealname());
appDoctor.setPhone(userData.getMobile());
appDoctor.setProvince(userData.getProvName());
appDoctor.setHospitalUuid(userData.getHospitalUuid());
// 如果存在hospitalUuid检查并获取医院信息
if (userData.getHospitalUuid() != null && !userData.getHospitalUuid().trim().isEmpty()) {
// 先查询数据库中是否已存在该医院
LambdaQueryWrapper<BasicHospitalEntity> hospitalQueryWrapper = new LambdaQueryWrapper<>();
hospitalQueryWrapper.eq(BasicHospitalEntity::getHospitalIden, userData.getHospitalUuid());
BasicHospitalEntity existingHospital = basicHospitalDao.selectOne(hospitalQueryWrapper);
if (existingHospital != null) {
// 医院已存在设置hospitalId和hospitalName
appDoctor.setHospitalId(existingHospital.getHospitalId());
appDoctor.setHospitalName(existingHospital.getHospitalName());
} else {
// 医院不存在调用API获取医院信息并存储
GetHospitalByUuidResponse hospitalResponse = hospital.getHospitalByUuid(userData.getHospitalUuid());
if (hospitalResponse == null || hospitalResponse.getData() == null) {
throw new BusinessException("获取医院信息失败:医院数据为空");
}
GetHospitalByUuidResponse.GetHospitalByUuidData hospitalData = hospitalResponse.getData();
// 创建新的医院实体
BasicHospitalEntity newHospital = new BasicHospitalEntity();
newHospital.setHospitalIden(hospitalData.getUuid());
newHospital.setHospitalName(hospitalData.getName());
newHospital.setHospitalLevel(hospitalData.getLevel());
newHospital.setProvince(hospitalData.getProv_name());
newHospital.setCity(hospitalData.getCity_name());
newHospital.setDoctorNumber(hospitalData.getExpert_num());
newHospital.setSource(2); // 默认来源为肝胆相照
// 插入医院数据
basicHospitalDao.insert(newHospital);
// 设置返回的hospitalId和hospitalName
appDoctor.setHospitalId(newHospital.getHospitalId());
appDoctor.setHospitalName(newHospital.getHospitalName());
List<AppDoctorVO> appDoctorList = new ArrayList<>();
for (GetUserInfoListResponse.ResponsData userData : userDataList) {
if (userData.getUuid() == null) {
continue; // 跳过无效数据
}
} else {
// 没有hospitalUuid设置为null
appDoctor.setHospitalId(null);
appDoctor.setHospitalName(null);
// 转换为AppDoctorVO
AppDoctorVO appDoctor = new AppDoctorVO();
appDoctor.setUuid(userData.getUuid());
appDoctor.setDoctorName(userData.getRealname());
appDoctor.setPhone(userData.getMobile());
appDoctor.setProvince(userData.getProvName());
appDoctor.setHospitalUuid(userData.getHospitalUuid());
// 如果存在hospitalUuid获取医院信息不存储到数据库
if (userData.getHospitalUuid() != null && !userData.getHospitalUuid().trim().isEmpty()) {
// 先查询数据库中是否已存在该医院
LambdaQueryWrapper<BasicHospitalEntity> hospitalQueryWrapper = new LambdaQueryWrapper<>();
hospitalQueryWrapper.eq(BasicHospitalEntity::getHospitalIden, userData.getHospitalUuid());
BasicHospitalEntity existingHospital = basicHospitalDao.selectOne(hospitalQueryWrapper);
if (existingHospital != null) {
// 医院已存在设置hospitalId和hospitalName
appDoctor.setHospitalId(existingHospital.getHospitalId());
appDoctor.setHospitalName(existingHospital.getHospitalName());
} else {
// 医院不存在调用API获取医院信息并存储
GetHospitalByUuidResponse hospitalResponse = hospital.getHospitalByUuid(userData.getHospitalUuid());
if (hospitalResponse == null || hospitalResponse.getData() == null) {
throw new BusinessException("获取医院信息失败:医院数据为空");
}
GetHospitalByUuidResponse.GetHospitalByUuidData hospitalData = hospitalResponse.getData();
// 创建新的医院实体
BasicHospitalEntity newHospital = new BasicHospitalEntity();
newHospital.setHospitalIden(hospitalData.getUuid());
newHospital.setHospitalName(hospitalData.getName());
newHospital.setHospitalLevel(hospitalData.getLevel());
newHospital.setProvince(hospitalData.getProv_name());
newHospital.setCity(hospitalData.getCity_name());
newHospital.setDoctorNumber(hospitalData.getExpert_num());
newHospital.setSource(2); // 默认来源为肝胆相照
// 插入医院数据
basicHospitalDao.insert(newHospital);
// 设置返回的hospitalId和hospitalName
appDoctor.setHospitalId(newHospital.getHospitalId());
appDoctor.setHospitalName(newHospital.getHospitalName());
}
}
appDoctorList.add(appDoctor);
}
return ResponseDTO.ok(appDoctor);
return ResponseDTO.ok(appDoctorList);
}
/**

View File

@ -237,7 +237,8 @@ public class CaseClinicalVideoService {
caseClinicalService.DecStatsCaseClinicalDoctor(String.valueOf(author.getDoctorId()),2);
// 减少医院统计
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),2);
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),2
,1);
}
}
@ -304,7 +305,8 @@ public class CaseClinicalVideoService {
caseClinicalService.DecStatsCaseClinicalDoctor(String.valueOf(author.getDoctorId()),2);
// 减少医院统计
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),2);
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),2
,1);
}
caseClinicalVideoDao.deleteById(videoId);
@ -359,7 +361,7 @@ public class CaseClinicalVideoService {
caseClinicalService.DecStatsCaseClinicalDoctor(String.valueOf(author.getDoctorId()),2);
// 减少医院统计
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),2);
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),2,1);
}
return ResponseDTO.ok();
@ -516,7 +518,8 @@ public class CaseClinicalVideoService {
caseClinicalService.DecStatsCaseClinicalDoctor(String.valueOf(author.getDoctorId()), 2);
// 减少医院统计
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()), 2);
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),
2,1);
}
} else if (status == 1) {
// 状态改为正常增加统计数量
@ -550,7 +553,8 @@ public class CaseClinicalVideoService {
caseClinicalService.IncStatsCaseClinicalDoctor(String.valueOf(author.getDoctorId()), 2, lastPushDate);
// 增加医院统计
caseClinicalService.IncStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()), 2, lastPushDate);
caseClinicalService.IncStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),
2, lastPushDate,1);
}
}
@ -624,7 +628,7 @@ public class CaseClinicalVideoService {
caseClinicalService.DecStatsCaseClinicalDoctor(String.valueOf(caseClinicalDoctor.getDoctorId()),2);
// 减少医院统计
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),2);
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),2,1);
// 删除该作者
caseClinicalVideoAuthorDao.deleteById(author.getAuthorId());
@ -652,7 +656,8 @@ public class CaseClinicalVideoService {
caseClinicalService.IncStatsCaseClinicalDoctor(String.valueOf(caseClinicalDoctor.getDoctorId()),2,lastPushDate);
// 新增医院统计
caseClinicalService.IncStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),2,lastPushDate);
caseClinicalService.IncStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),2,
lastPushDate,1);
// 生成用户证书-文章/视频
if (qrCodeBytes == null || qrCodeBytes.length == 0) {