主要修复: - 检查申请医嘱类型正确设置为诊疗(3),避免被错误归类为药品 - 检查申请收费项获取真实自费账户,预结算验证accountId必须有效存在 - 签发时补充诊疗费用项诊断关联信息变更模块: - ExamApplyController:使用ItemType枚举,获取真实账户替代占位值0 -DoctorStationAdviceAppService:按枚举标准分类医嘱,验证accountId有效性 - IChargeBillService:productId=0时从ServiceRequest.contentJson获取项目名称 - PaymentRecService:预结算自动修复账户不存在的历史数据 - Mapper:排除衍生执行记录,productId=0时补充查询逻辑 - ServiceRequest实体:activityId字段添加ALWAYS插入策略
This commit is contained in:
@@ -5,9 +5,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.core.common.core.controller.BaseController;
|
||||
import com.core.common.core.domain.AjaxResult;
|
||||
import com.core.common.core.page.TableDataInfo;
|
||||
import com.core.common.exception.ServiceException;
|
||||
import com.core.common.utils.AssignSeqUtil;
|
||||
import com.core.common.utils.SecurityUtils;
|
||||
import com.openhis.administration.domain.Account;
|
||||
import com.openhis.administration.domain.ChargeItem;
|
||||
import com.openhis.administration.service.IAccountService;
|
||||
import com.openhis.administration.service.IChargeItemService;
|
||||
import com.openhis.check.domain.ExamApply;
|
||||
import com.openhis.check.domain.ExamApplyItem;
|
||||
@@ -17,8 +20,8 @@ import com.openhis.common.constant.CommonConstants;
|
||||
import com.openhis.common.enums.AssignSeqEnum;
|
||||
import com.openhis.common.enums.ChargeItemStatus;
|
||||
import com.openhis.common.enums.GenerateSource;
|
||||
import com.openhis.common.enums.ItemType;
|
||||
import com.openhis.common.enums.RequestStatus;
|
||||
import com.openhis.common.enums.EncounterClass;
|
||||
import com.openhis.web.check.dto.ExamApplyDto;
|
||||
import com.openhis.web.check.dto.ExamApplyItemDto;
|
||||
import com.openhis.workflow.domain.ServiceRequest;
|
||||
@@ -58,6 +61,9 @@ public class ExamApplyController extends BaseController {
|
||||
@Autowired
|
||||
private IChargeItemService chargeItemService;
|
||||
|
||||
@Autowired
|
||||
private IAccountService accountService;
|
||||
|
||||
@Autowired
|
||||
private AssignSeqUtil assignSeqUtil;
|
||||
|
||||
@@ -213,8 +219,9 @@ public class ExamApplyController extends BaseController {
|
||||
|
||||
// 检查申请不走诊疗定义,设置为0占位(数据库有NOT NULL约束)
|
||||
serviceRequest.setActivityId(0L);
|
||||
// 🔧 Bug #407修复:设置医嘱类型为诊疗(3),避免被错误识别为中成药
|
||||
serviceRequest.setCategoryEnum(3);
|
||||
// 🔧 Bug Fix: 设置医嘱类型为诊疗(3),与检验申请保持一致
|
||||
// categoryEnum=3 → SQL查询返回 adviceType=3(诊疗),避免被错误归类为药品
|
||||
serviceRequest.setCategoryEnum(ItemType.ACTIVITY.getValue());
|
||||
|
||||
// 患者和就诊信息 —— 使用前端传递的数字型ID
|
||||
if (dto.getPatientIdNum() != null) {
|
||||
@@ -227,7 +234,8 @@ public class ExamApplyController extends BaseController {
|
||||
serviceRequest.setRequesterId(currentUserId); // 开单医生
|
||||
serviceRequest.setOrgId(currentOrgId); // 执行科室
|
||||
serviceRequest.setAuthoredTime(now); // 签发时间
|
||||
serviceRequest.setCategoryEnum(EncounterClass.AMB.getValue()); // 请求类型:门诊
|
||||
// 🔧 Bug Fix: 不设置门诊类型,保留上面已设置的 categoryEnum=3(诊疗类型)
|
||||
// EncounterClass.AMB.getValue()=2 表示门诊类型,会覆盖诊疗类型导致医嘱被错误归类
|
||||
serviceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 来源=医生开立
|
||||
|
||||
// 将项目名称存入 contentJson,使医嘱列表能通过 JSON 字段回显 adviceName
|
||||
@@ -268,10 +276,17 @@ public class ExamApplyController extends BaseController {
|
||||
chargeItem.setRequestingOrgId(currentOrgId); // 开立科室
|
||||
chargeItem.setEnteredDate(now); // 开立时间
|
||||
|
||||
// 以下字段均有 NOT NULL 约束,检查申请不走定价/账户体系,用0占位
|
||||
// 以下字段均有 NOT NULL 约束,检查申请不走定价体系,用0占位
|
||||
chargeItem.setDefinitionId(0L); // 费用定价ID
|
||||
chargeItem.setAccountId(0L); // 关联账户ID
|
||||
chargeItem.setContextEnum(2); // 类型:2=诊疗
|
||||
// 🔧 BugFix#385: 获取患者真实的自费账户,预结算验证要求accountId必须真实存在
|
||||
Account selfAccount = accountService.getSelfAccount(dto.getEncounterId());
|
||||
if (selfAccount == null) {
|
||||
throw new ServiceException("患者自费账户不存在,无法创建检查收费项,encounterId=" + dto.getEncounterId());
|
||||
}
|
||||
chargeItem.setAccountId(selfAccount.getId());
|
||||
// 🔧 BugFix#385: 使用 ItemType.ACTIVITY.getValue()=3 表示诊疗,而不是硬编码的2
|
||||
// ItemType 枚举定义:MEDICINE=1, DEVICE=2(耗材), ACTIVITY=3(诊疗)
|
||||
chargeItem.setContextEnum(ItemType.ACTIVITY.getValue()); // 类型:3=诊疗
|
||||
chargeItem.setProductTable(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION); // 产品来源表
|
||||
chargeItem.setProductId(0L); // 产品ID
|
||||
|
||||
@@ -393,8 +408,9 @@ public class ExamApplyController extends BaseController {
|
||||
serviceRequest.setBasedOnTable("exam_apply");
|
||||
serviceRequest.setBasedOnId(examApply.getId());
|
||||
serviceRequest.setActivityId(0L);
|
||||
// 🔧 Bug #407修复:设置医嘱类型为诊疗(3),避免被错误识别为中成药
|
||||
serviceRequest.setCategoryEnum(3);
|
||||
// 🔧 Bug Fix: 设置医嘱类型为诊疗(3),与检验申请保持一致
|
||||
// categoryEnum=3 → SQL查询返回 adviceType=3(诊疗),避免被错误归类为药品
|
||||
serviceRequest.setCategoryEnum(ItemType.ACTIVITY.getValue());
|
||||
|
||||
if (dto.getPatientIdNum() != null) {
|
||||
serviceRequest.setPatientId(dto.getPatientIdNum());
|
||||
@@ -405,7 +421,8 @@ public class ExamApplyController extends BaseController {
|
||||
serviceRequest.setRequesterId(currentUserId);
|
||||
serviceRequest.setOrgId(currentOrgId);
|
||||
serviceRequest.setAuthoredTime(now);
|
||||
serviceRequest.setCategoryEnum(EncounterClass.AMB.getValue()); // 请求类型:门诊
|
||||
// 🔧 Bug Fix: 不设置门诊类型,保留上面已设置的 categoryEnum=3(诊疗类型)
|
||||
// EncounterClass.AMB.getValue()=2 表示门诊类型,会覆盖诊疗类型导致医嘱被错误归类
|
||||
serviceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue());
|
||||
|
||||
// 将项目名称存入 contentJson,使医嘱列表能通过 JSON 字段回显 adviceName
|
||||
@@ -440,8 +457,14 @@ public class ExamApplyController extends BaseController {
|
||||
chargeItem.setRequestingOrgId(currentOrgId);
|
||||
chargeItem.setEnteredDate(now);
|
||||
chargeItem.setDefinitionId(0L);
|
||||
chargeItem.setAccountId(0L);
|
||||
chargeItem.setContextEnum(2);
|
||||
// 🔧 BugFix#385: 获取患者真实的自费账户,预结算验证要求accountId必须真实存在
|
||||
Account selfAccount = accountService.getSelfAccount(dto.getEncounterId());
|
||||
if (selfAccount == null) {
|
||||
throw new ServiceException("患者自费账户不存在,无法创建检查收费项,encounterId=" + dto.getEncounterId());
|
||||
}
|
||||
chargeItem.setAccountId(selfAccount.getId());
|
||||
// 🔧 BugFix#385: 使用 ItemType.ACTIVITY.getValue()=3 表示诊疗
|
||||
chargeItem.setContextEnum(ItemType.ACTIVITY.getValue());
|
||||
chargeItem.setProductTable(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION);
|
||||
chargeItem.setProductId(0L);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user