fix(charge): 解决门诊收费中耗材请求数据查询问题 BUG#145

- 在处方查询方法中添加耗材请求表名参数支持
- 修复数据库查询中缺少耗材请求表关联的问题
- 将设备费用项状态从草稿改为计划状态以确保正确显示
- 为设备请求设置处方号以保证门诊收费能正确关联
- 优化数据库表连接逻辑支持耗材请求数据查询
This commit is contained in:
2026-03-19 19:36:11 +08:00
parent dc2e4098ae
commit 4210f32a05
4 changed files with 30 additions and 22 deletions

View File

@@ -121,7 +121,8 @@ public class OutpatientChargeAppServiceImpl implements IOutpatientChargeAppServi
ChargeItemContext.DEVICE.getValue(), ChargeItemContext.REGISTER.getValue(), ChargeItemContext.DEVICE.getValue(), ChargeItemContext.REGISTER.getValue(),
ChargeItemStatus.PLANNED.getValue(), ChargeItemStatus.BILLABLE.getValue(), ChargeItemStatus.PLANNED.getValue(), ChargeItemStatus.BILLABLE.getValue(),
ChargeItemStatus.BILLED.getValue(), ChargeItemStatus.REFUNDING.getValue(), ChargeItemStatus.BILLED.getValue(), ChargeItemStatus.REFUNDING.getValue(),
ChargeItemStatus.REFUNDED.getValue(), ChargeItemStatus.PART_REFUND.getValue()); ChargeItemStatus.REFUNDED.getValue(), ChargeItemStatus.PART_REFUND.getValue(),
CommonConstants.TableName.WOR_DEVICE_REQUEST);
prescriptionDtoList.forEach(e -> { prescriptionDtoList.forEach(e -> {
// 收费状态枚举 // 收费状态枚举
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(ChargeItemStatus.class, e.getStatusEnum())); e.setStatusEnum_enumText(EnumUtils.getInfoByValue(ChargeItemStatus.class, e.getStatusEnum()));
@@ -229,7 +230,8 @@ public class OutpatientChargeAppServiceImpl implements IOutpatientChargeAppServi
ChargeItemStatus.REFUNDING.getValue(), ChargeItemStatus.REFUNDED.getValue(), ChargeItemStatus.REFUNDING.getValue(), ChargeItemStatus.REFUNDED.getValue(),
ChargeItemStatus.PART_REFUND.getValue(), YbPayment.DISCOUNT_PAY.getValue(), ChargeItemStatus.PART_REFUND.getValue(), YbPayment.DISCOUNT_PAY.getValue(),
YbPayment.SELF_CASH_VALUE.getValue(), YbPayment.SELF_CASH_VX_VALUE.getValue(), YbPayment.SELF_CASH_VALUE.getValue(), YbPayment.SELF_CASH_VX_VALUE.getValue(),
YbPayment.SELF_CASH_ALI_VALUE.getValue(), YbPayment.SELF_CASH_UNION_VALUE.getValue()); YbPayment.SELF_CASH_ALI_VALUE.getValue(), YbPayment.SELF_CASH_UNION_VALUE.getValue(),
CommonConstants.TableName.WOR_DEVICE_REQUEST);
prescriptionDtoList.forEach(e -> { prescriptionDtoList.forEach(e -> {
// 应收金额 // 应收金额
BigDecimal receivableAmount = e.getReceivableAmount(); BigDecimal receivableAmount = e.getReceivableAmount();

View File

@@ -48,13 +48,14 @@ public interface OutpatientChargeAppMapper {
* @param refunding 收费状态:退费中 * @param refunding 收费状态:退费中
* @param refunded 收费状态:全部退费 * @param refunded 收费状态:全部退费
* @param partRefund 收费状态:部分退费 * @param partRefund 收费状态:部分退费
* @param worDeviceRequest 耗材请求表名常量
* @return 患者处方列表 * @return 患者处方列表
*/ */
List<EncounterPatientPrescriptionDto> selectEncounterPatientPrescription(@Param("encounterId") Long encounterId, List<EncounterPatientPrescriptionDto> selectEncounterPatientPrescription(@Param("encounterId") Long encounterId,
@Param("activity") Integer activity, @Param("medication") Integer medication, @Param("device") Integer device, @Param("activity") Integer activity, @Param("medication") Integer medication, @Param("device") Integer device,
@Param("register") Integer register, @Param("planned") Integer planned, @Param("billable") Integer billable, @Param("register") Integer register, @Param("planned") Integer planned, @Param("billable") Integer billable,
@Param("billed") Integer billed, @Param("refunding") Integer refunding, @Param("refunded") Integer refunded, @Param("billed") Integer billed, @Param("refunding") Integer refunding, @Param("refunded") Integer refunded,
@Param("partRefund") Integer partRefund); @Param("partRefund") Integer partRefund, @Param("worDeviceRequest") String worDeviceRequest);
/** /**
* 根据就诊id查询患者处方列表并新增字段应收金额实收金额优惠金额折扣率 * 根据就诊id查询患者处方列表并新增字段应收金额实收金额优惠金额折扣率
@@ -75,6 +76,7 @@ public interface OutpatientChargeAppMapper {
* @param selfVxCode 微信枚举码 * @param selfVxCode 微信枚举码
* @param selfAliCode 支付宝枚举码 * @param selfAliCode 支付宝枚举码
* @param selfUnionCode 银联枚举码 * @param selfUnionCode 银联枚举码
* @param worDeviceRequest 耗材请求表名常量
* @return 患者处方列表 * @return 患者处方列表
*/ */
List<EncounterPatientPrescriptionDto> selectEncounterPatientPrescriptionWithPrice( List<EncounterPatientPrescriptionDto> selectEncounterPatientPrescriptionWithPrice(
@@ -84,5 +86,5 @@ public interface OutpatientChargeAppMapper {
@Param("refunding") Integer refunding, @Param("refunded") Integer refunded, @Param("refunding") Integer refunding, @Param("refunded") Integer refunded,
@Param("partRefund") Integer partRefund, @Param("discountCode") Integer discountCode, @Param("partRefund") Integer partRefund, @Param("discountCode") Integer discountCode,
@Param("self") Integer selfCode, @Param("selfVx") Integer selfVxCode, @Param("selfAli") Integer selfAliCode, @Param("self") Integer selfCode, @Param("selfVx") Integer selfVxCode, @Param("selfAli") Integer selfAliCode,
@Param("selfUnion") Integer selfUnionCode); @Param("selfUnion") Integer selfUnionCode, @Param("worDeviceRequest") String worDeviceRequest);
} }

View File

@@ -776,6 +776,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
// 关联到药品请求 // 关联到药品请求
deviceRequest.setBasedOnId(medicationRequest.getId()); deviceRequest.setBasedOnId(medicationRequest.getId());
deviceRequest.setBasedOnTable(CommonConstants.TableName.MED_MEDICATION_REQUEST); deviceRequest.setBasedOnTable(CommonConstants.TableName.MED_MEDICATION_REQUEST);
// 🔧 Bug Fix #145: 设置处方号,确保门诊收费能正确显示
deviceRequest.setPrescriptionNo(adviceSaveDto.getPrescriptionNo());
iDeviceRequestService.save(deviceRequest); iDeviceRequestService.save(deviceRequest);
@@ -808,7 +810,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
deviceChargeItem.setTenantId(tenantId); deviceChargeItem.setTenantId(tenantId);
deviceChargeItem.setCreateBy(currentUsername); deviceChargeItem.setCreateBy(currentUsername);
deviceChargeItem.setCreateTime(curDate); deviceChargeItem.setCreateTime(curDate);
deviceChargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); deviceChargeItem.setStatusEnum(ChargeItemStatus.PLANNED.getValue());
deviceChargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(deviceRequest.getBusNo())); deviceChargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(deviceRequest.getBusNo()));
deviceChargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); deviceChargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue());
deviceChargeItem.setPrescriptionNo(adviceSaveDto.getPrescriptionNo()); // 处方号,与药品一致 deviceChargeItem.setPrescriptionNo(adviceSaveDto.getPrescriptionNo()); // 处方号,与药品一致
@@ -932,11 +934,11 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
// 保存耗材费用项 // 保存耗材费用项
chargeItem = new ChargeItem(); chargeItem = new ChargeItem();
chargeItem.setId(adviceSaveDto.getChargeItemId()); // 费用项id chargeItem.setId(adviceSaveDto.getChargeItemId()); // 费用项 id
chargeItem.setTenantId(tenantId); // 补全租户ID chargeItem.setTenantId(tenantId); // 补全租户 ID
chargeItem.setCreateBy(currentUsername); // 补全创建人 chargeItem.setCreateBy(currentUsername); // 补全创建人
chargeItem.setCreateTime(curDate); // 补全创建时间 chargeItem.setCreateTime(curDate); // 补全创建时间
chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 收费状态 chargeItem.setStatusEnum(ChargeItemStatus.PLANNED.getValue()); // 收费状态
chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(deviceRequest.getBusNo())); chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(deviceRequest.getBusNo()));
chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源
chargeItem.setPatientId(adviceSaveDto.getPatientId()); // 患者 chargeItem.setPatientId(adviceSaveDto.getPatientId()); // 患者

View File

@@ -76,11 +76,11 @@
T1.quantity_unit, T1.quantity_unit,
T1.unit_price, T1.unit_price,
T1.total_price, T1.total_price,
mmr.prescription_no, mmr.prescription_no,
mmr.method_code, mmr.method_code AS method_code,
mmr.rate_code, mmr.rate_code,
mmr.dose, mmr.dose,
mmr.dose_unit_code, mmr.dose_unit_code,
T1.bus_no, T1.bus_no,
T1.entered_date, T1.entered_date,
T1.account_id, T1.account_id,
@@ -134,8 +134,9 @@
LEFT JOIN fin_contract AS T8 LEFT JOIN fin_contract AS T8
ON T6.contract_no = T8.bus_no ON T6.contract_no = T8.bus_no
AND T8.delete_flag = '0' AND T8.delete_flag = '0'
LEFT JOIN med_medication_request AS mmr ON mmr.id = T1.service_id AND mmr.delete_flag = '0' LEFT JOIN med_medication_request AS mmr ON mmr.id = T1.service_id AND mmr.delete_flag = '0'
WHERE T1.encounter_id = #{encounterId} LEFT JOIN wor_device_request AS wdr ON wdr.id = T1.service_id AND T1.service_table = #{worDeviceRequest} AND wdr.delete_flag = '0'
WHERE T1.encounter_id = #{encounterId}
AND T1.status_enum IN (#{planned} AND T1.status_enum IN (#{planned}
, #{billable} , #{billable}
, #{billed} , #{billed}
@@ -168,11 +169,11 @@
T1.quantity_unit, T1.quantity_unit,
T1.unit_price, T1.unit_price,
T1.total_price, T1.total_price,
mmr.prescription_no, mmr.prescription_no,
mmr.method_code, mmr.method_code AS method_code,
mmr.rate_code, mmr.rate_code,
mmr.dose, mmr.dose,
mmr.dose_unit_code, mmr.dose_unit_code,
T1.bus_no, T1.bus_no,
T1.entered_date, T1.entered_date,
T1.account_id, T1.account_id,
@@ -227,8 +228,9 @@
LEFT JOIN fin_contract AS T8 LEFT JOIN fin_contract AS T8
ON T6.contract_no = T8.bus_no ON T6.contract_no = T8.bus_no
AND T8.delete_flag = '0' AND T8.delete_flag = '0'
LEFT JOIN med_medication_request AS mmr ON mmr.id = T1.service_id AND mmr.delete_flag = '0' LEFT JOIN med_medication_request AS mmr ON mmr.id = T1.service_id AND mmr.delete_flag = '0'
WHERE T1.encounter_id = #{encounterId} LEFT JOIN wor_device_request AS wdr ON wdr.id = T1.service_id AND T1.service_table = #{worDeviceRequest} AND wdr.delete_flag = '0'
WHERE T1.encounter_id = #{encounterId}
AND T1.status_enum IN (#{planned} AND T1.status_enum IN (#{planned}
, #{billable} , #{billable}
, #{billed} , #{billed}