fix(doctorstation): 修复会诊模块数据加载异常处理
- 添加了接口响应空值检查,防止因空响应导致的页面崩溃 - 完善了错误处理逻辑,统一返回空数组避免组件渲染异常 - 增强了网络错误捕获,提供更准确的错误信息提示 - 优化了后端服务异常处理,确保查询失败时返回安全的默认值 - 修复了手术收费模块中的用户卡信息引用错误 - 改进了学生合同号处理逻辑,增加了前置条件验证
This commit is contained in:
@@ -121,17 +121,27 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
|
||||
|
||||
@Override
|
||||
public List<ConsultationRequestDto> getConsultationList(Long encounterId) {
|
||||
// 查询会诊列表
|
||||
LambdaQueryWrapper<ConsultationRequest> wrapper = new LambdaQueryWrapper<>();
|
||||
|
||||
try {
|
||||
log.info("开始查询会诊列表,encounterId: {}", encounterId);
|
||||
|
||||
// 根据就诊ID,查询该患者的会诊申请
|
||||
wrapper.eq(ConsultationRequest::getEncounterId, encounterId);
|
||||
wrapper.orderByDesc(ConsultationRequest::getCreateTime);
|
||||
// 查询会诊列表
|
||||
LambdaQueryWrapper<ConsultationRequest> wrapper = new LambdaQueryWrapper<>();
|
||||
|
||||
List<ConsultationRequest> list = consultationRequestMapper.selectList(wrapper);
|
||||
// 转换为DTO
|
||||
return list.stream().map(this::convertToDto).collect(Collectors.toList());
|
||||
// 根据就诊ID,查询该患者的会诊申请
|
||||
wrapper.eq(ConsultationRequest::getEncounterId, encounterId);
|
||||
wrapper.orderByDesc(ConsultationRequest::getCreateTime);
|
||||
|
||||
List<ConsultationRequest> list = consultationRequestMapper.selectList(wrapper);
|
||||
log.info("查询到 {} 个会诊申请记录", list.size());
|
||||
|
||||
// 转换为DTO
|
||||
List<ConsultationRequestDto> result = list.stream().map(this::convertToDto).collect(Collectors.toList());
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
log.error("获取会诊列表失败,encounterId: {}", encounterId, e);
|
||||
// 返回空列表而不是抛出异常,避免前端崩溃
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -915,19 +925,25 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
|
||||
@Override
|
||||
public List<ConsultationActivityDto> getConsultationActivities() {
|
||||
try {
|
||||
log.info("开始查询会诊项目列表");
|
||||
|
||||
// 查询所有会诊相关的诊疗活动
|
||||
LambdaQueryWrapper<ActivityDefinition> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.like(ActivityDefinition::getName, "会诊")
|
||||
.eq(ActivityDefinition::getDeleteFlag, "0")
|
||||
.orderBy(true, true, ActivityDefinition::getSortOrder);
|
||||
|
||||
|
||||
List<ActivityDefinition> activityList = activityDefinitionMapper.selectList(wrapper);
|
||||
log.info("查询到 {} 个会诊相关诊疗活动", activityList.size());
|
||||
|
||||
if (activityList.isEmpty()) {
|
||||
log.warn("未查询到任何会诊项目,请检查数据库配置");
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
|
||||
// 转换为DTO并查询价格
|
||||
List<ConsultationActivityDto> resultList = new ArrayList<>();
|
||||
int missingPriceCount = 0;
|
||||
for (ActivityDefinition activity : activityList) {
|
||||
ConsultationActivityDto dto = new ConsultationActivityDto();
|
||||
dto.setId(activity.getId());
|
||||
@@ -937,7 +953,7 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
|
||||
dto.setCategoryCode(activity.getCategoryCode());
|
||||
dto.setUnitCode(activity.getPermittedUnitCode());
|
||||
dto.setStatusEnum(activity.getStatusEnum());
|
||||
|
||||
|
||||
// 查询价格
|
||||
LambdaQueryWrapper<ChargeItemDefinition> priceWrapper = new LambdaQueryWrapper<>();
|
||||
priceWrapper.eq(ChargeItemDefinition::getInstanceTable, "wor_activity_definition")
|
||||
@@ -945,17 +961,24 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
|
||||
.eq(ChargeItemDefinition::getStatusEnum, 2) // 2=启用
|
||||
.eq(ChargeItemDefinition::getDeleteFlag, "0")
|
||||
.last("LIMIT 1");
|
||||
|
||||
|
||||
ChargeItemDefinition chargeItem = chargeItemDefinitionMapper.selectOne(priceWrapper);
|
||||
if (chargeItem != null && chargeItem.getPrice() != null) {
|
||||
dto.setPrice(chargeItem.getPrice());
|
||||
} else {
|
||||
dto.setPrice(java.math.BigDecimal.ZERO);
|
||||
log.warn("会诊项目: {} 未找到价格定义", activity.getName());
|
||||
missingPriceCount++;
|
||||
log.warn("会诊项目: {} (ID: {}) 未找到价格定义", activity.getName(), activity.getId());
|
||||
}
|
||||
|
||||
|
||||
resultList.add(dto);
|
||||
}
|
||||
|
||||
if (missingPriceCount > 0) {
|
||||
log.warn("共 {} 个会诊项目缺少价格定义", missingPriceCount);
|
||||
}
|
||||
|
||||
log.info("会诊项目列表查询成功,共 {} 个项目", resultList.size());
|
||||
return resultList;
|
||||
} catch (Exception e) {
|
||||
log.error("查询会诊项目列表失败", e);
|
||||
|
||||
@@ -39,10 +39,12 @@ public class ConsultationController {
|
||||
@ApiParam("就诊ID(可选,不传则查询当前医生的所有会诊申请)")
|
||||
@RequestParam(required = false) Long encounterId) {
|
||||
try {
|
||||
log.info("获取会诊列表,encounterId: {}", encounterId);
|
||||
List<ConsultationRequestDto> list = consultationAppService.getConsultationList(encounterId);
|
||||
log.info("获取会诊列表成功,共 {} 条记录", list != null ? list.size() : 0);
|
||||
return R.ok(list);
|
||||
} catch (Exception e) {
|
||||
log.error("获取会诊列表失败", e);
|
||||
log.error("获取会诊列表失败,encounterId: {}", encounterId, e);
|
||||
return R.fail("获取会诊列表失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1906,11 +1906,13 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
|
||||
: outpatientRegistrationAddParam.getYbMdtrtCertType());
|
||||
iAccountService.save(accountZf);
|
||||
}
|
||||
String accountContractNo = outpatientRegistrationAddParam.getAccountFormData().getContractNo();
|
||||
if (!CommonConstants.BusinessName.DEFAULT_CONTRACT_NO
|
||||
.equals(outpatientRegistrationAddParam.getAccountFormData().getContractNo())
|
||||
.equals(accountContractNo)
|
||||
&& !CommonConstants.BusinessName.DEFAULT_STUDENT_CONTRACT_NO
|
||||
.equals(outpatientRegistrationAddParam.getAccountFormData().getContractNo())
|
||||
&& outpatientRegistrationAddParam.getAccountFormData().getContractNo().length() > 11) {
|
||||
.equals(accountContractNo)
|
||||
&& accountContractNo.length() > 11
|
||||
&& accountContractNo.startsWith("STUDENT")) {
|
||||
// 建立学生自费ACCOUNT
|
||||
Account accountStudentZf = new Account();
|
||||
BeanUtils.copyProperties(accountFormData, accountStudentZf);
|
||||
@@ -1920,8 +1922,9 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
|
||||
: outpatientRegistrationAddParam.getYbMdtrtCertType());
|
||||
iAccountService.save(accountStudentZf);
|
||||
|
||||
Contract contractYb = contractService.getContract(
|
||||
outpatientRegistrationAddParam.getAccountFormData().getContractNo().substring("STUDENT".length()));
|
||||
// 截取医保合同号时,先验证是否以"STUDENT"开头
|
||||
String ybContractNo = accountContractNo.substring("STUDENT".length());
|
||||
Contract contractYb = contractService.getContract(ybContractNo);
|
||||
if (contractYb != null && 1 == contractYb.getYbFlag()) {
|
||||
// 建立纯医保ACCOUNT
|
||||
Account accountYb = new Account();
|
||||
|
||||
Reference in New Issue
Block a user