fix(doctorstation): 解决医嘱签发时关键字段缺失问题 bug#181

- 处理前端体征字段中的 null 值转换为空字符串
- 移除后端保存和签发逻辑中的条件判断,确保关键字段始终被设置
- 修复 BUG #181 中医嘱签发时缺少必要业务字段的问题
- 统一保存和签发流程中的字段赋值逻辑
- 保持业务编号在签发时的一致性处理
This commit is contained in:
2026-03-18 12:33:37 +08:00
parent 0f9ef726bf
commit a3650aa386
2 changed files with 88 additions and 84 deletions

View File

@@ -634,38 +634,40 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
if (is_sign) {
medicationRequest.setSignCode(signCode);
}
// 保存时,处理数据(请求,发放,账单)
// 🔧 Bug Fix: 签发时也需要设置关键字段修复BUG #181
// 保存时生成业务编号,签发时沿用已有编号
if (is_save) {
medicationRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_RES_NO.getPrefix(), 4));
medicationRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源
medicationRequest.setQuantity(adviceSaveDto.getQuantity()); // 请求数量
medicationRequest.setExecuteNum(adviceSaveDto.getExecuteNum()); // 执行次数
medicationRequest.setUnitCode(adviceSaveDto.getUnitCode()); // 请求单位编码
medicationRequest.setLotNumber(adviceSaveDto.getLotNumber()); // 产品批号
medicationRequest.setCategoryEnum(adviceSaveDto.getCategoryEnum()); // 请求类型
medicationRequest.setMedicationId(adviceSaveDto.getAdviceDefinitionId());// 医嘱定义id
medicationRequest.setPatientId(adviceSaveDto.getPatientId()); // 患者
medicationRequest.setPractitionerId(adviceSaveDto.getPractitionerId()); // 开方医生
medicationRequest.setOrgId(adviceSaveDto.getFounderOrgId()); // 开方人科室
medicationRequest.setReqAuthoredTime(curDate); // 请求开始时间
// 发放药房
medicationRequest.setPerformLocation(adviceSaveDto.getLocationId());
medicationRequest.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id
medicationRequest.setConditionId(adviceSaveDto.getConditionId()); // 诊断id
medicationRequest.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id
medicationRequest.setTherapyEnum(adviceSaveDto.getTherapyEnum()); // 治疗类型,默认-临时
medicationRequest.setMethodCode(adviceSaveDto.getMethodCode()); // 用法
medicationRequest.setRateCode(adviceSaveDto.getRateCode()); // 用药频次
medicationRequest.setDose(adviceSaveDto.getDose()); // 单次剂量
medicationRequest.setDoseUnitCode(adviceSaveDto.getDoseUnitCode()); // 剂量单位
medicationRequest.setDispensePerDuration(adviceSaveDto.getDispensePerDuration()); // 每次发药供应天数
medicationRequest.setPackageId(adviceSaveDto.getPackageId()); // 组套id
medicationRequest.setContentJson(adviceSaveDto.getContentJson()); // 请求内容json
medicationRequest.setYbClassEnum(adviceSaveDto.getYbClassEnum());// 类别医保编码
medicationRequest.setSkinTestFlag(adviceSaveDto.getSkinTestFlag()); // 皮试标志
medicationRequest.setInfusionFlag(adviceSaveDto.getInjectFlag()); // 输液标志
medicationRequest.setSortNumber(adviceSaveDto.getSortNumber()); // 排序号
}
medicationRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源
medicationRequest.setQuantity(adviceSaveDto.getQuantity()); // 请求数量
medicationRequest.setExecuteNum(adviceSaveDto.getExecuteNum()); // 执行次数
medicationRequest.setUnitCode(adviceSaveDto.getUnitCode()); // 请求单位编码
medicationRequest.setLotNumber(adviceSaveDto.getLotNumber()); // 产品批号
medicationRequest.setCategoryEnum(adviceSaveDto.getCategoryEnum()); // 请求类型
medicationRequest.setMedicationId(adviceSaveDto.getAdviceDefinitionId());// 医嘱定义id
medicationRequest.setPatientId(adviceSaveDto.getPatientId()); // 患者
medicationRequest.setPractitionerId(adviceSaveDto.getPractitionerId()); // 开方医生
medicationRequest.setOrgId(adviceSaveDto.getFounderOrgId()); // 开方人科室
medicationRequest.setReqAuthoredTime(curDate); // 请求开始时间
// 发放药房
medicationRequest.setPerformLocation(adviceSaveDto.getLocationId());
medicationRequest.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id
medicationRequest.setConditionId(adviceSaveDto.getConditionId()); // 诊断id
medicationRequest.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id
medicationRequest.setTherapyEnum(adviceSaveDto.getTherapyEnum()); // 治疗类型,默认-临时
medicationRequest.setMethodCode(adviceSaveDto.getMethodCode()); // 用法
medicationRequest.setRateCode(adviceSaveDto.getRateCode()); // 用药频次
medicationRequest.setDose(adviceSaveDto.getDose()); // 单次剂量
medicationRequest.setDoseUnitCode(adviceSaveDto.getDoseUnitCode()); // 剂量单位
medicationRequest.setDispensePerDuration(adviceSaveDto.getDispensePerDuration()); // 每次发药供应天数
medicationRequest.setPackageId(adviceSaveDto.getPackageId()); // 组套id
medicationRequest.setContentJson(adviceSaveDto.getContentJson()); // 请求内容json
medicationRequest.setYbClassEnum(adviceSaveDto.getYbClassEnum());// 类别医保编码
medicationRequest.setSkinTestFlag(adviceSaveDto.getSkinTestFlag()); // 皮试标志
medicationRequest.setInfusionFlag(adviceSaveDto.getInjectFlag()); // 输液标志
medicationRequest.setSortNumber(adviceSaveDto.getSortNumber()); // 排序号
if (medicationRequest.getId() == null) {
firstTimeSave = true;
}
@@ -896,31 +898,32 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
deviceRequest.setCreateBy(currentUsername); // 设置创建人
deviceRequest.setCreateTime(curDate); // 设置创建时间
// 保存时,处理数据(请求,发放,账单)
// 🔧 Bug Fix: 签发时也需要设置关键字段修复BUG #181
// 保存时生成业务编号,签发时沿用已有编号
if (is_save) {
deviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.DEVICE_RES_NO.getPrefix(), 4));
deviceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源
deviceRequest.setQuantity(adviceSaveDto.getQuantity()); // 请求数量
deviceRequest.setUnitCode(adviceSaveDto.getUnitCode()); // 请求单位编码
deviceRequest.setLotNumber(adviceSaveDto.getLotNumber());// 产品批号
deviceRequest.setCategoryEnum(adviceSaveDto.getCategoryEnum()); // 请求类型
deviceRequest.setDeviceDefId(adviceSaveDto.getAdviceDefinitionId());// 耗材定义id
deviceRequest.setPatientId(adviceSaveDto.getPatientId()); // 患者
deviceRequest.setRequesterId(adviceSaveDto.getPractitionerId()); // 开方医生
deviceRequest.setOrgId(adviceSaveDto.getFounderOrgId());// 开方人科室
deviceRequest.setReqAuthoredTime(curDate); // 请求开始时间
// 发放耗材房
deviceRequest.setPerformLocation(adviceSaveDto.getLocationId());
deviceRequest.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id
deviceRequest.setPackageId(adviceSaveDto.getPackageId()); // 组套id
// deviceRequest.setActivityId(adviceSaveDto.getActivityId());
deviceRequest.setContentJson(adviceSaveDto.getContentJson()); // 请求内容json
deviceRequest.setYbClassEnum(adviceSaveDto.getYbClassEnum());// 类别医保编码
deviceRequest.setConditionId(adviceSaveDto.getConditionId()); // 诊断id
deviceRequest.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id
}
deviceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源
deviceRequest.setQuantity(adviceSaveDto.getQuantity()); // 请求数量
deviceRequest.setUnitCode(adviceSaveDto.getUnitCode()); // 请求单位编码
deviceRequest.setLotNumber(adviceSaveDto.getLotNumber());// 产品批号
deviceRequest.setCategoryEnum(adviceSaveDto.getCategoryEnum()); // 请求类型
deviceRequest.setDeviceDefId(adviceSaveDto.getAdviceDefinitionId());// 耗材定义id
deviceRequest.setPatientId(adviceSaveDto.getPatientId()); // 患者
deviceRequest.setRequesterId(adviceSaveDto.getPractitionerId()); // 开方医生
deviceRequest.setOrgId(adviceSaveDto.getFounderOrgId());// 开方人科室
deviceRequest.setReqAuthoredTime(curDate); // 请求开始时间
// 发放耗材房
deviceRequest.setPerformLocation(adviceSaveDto.getLocationId());
deviceRequest.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id
deviceRequest.setPackageId(adviceSaveDto.getPackageId()); // 组套id
// deviceRequest.setActivityId(adviceSaveDto.getActivityId());
deviceRequest.setContentJson(adviceSaveDto.getContentJson()); // 请求内容json
deviceRequest.setYbClassEnum(adviceSaveDto.getYbClassEnum());// 类别医保编码
deviceRequest.setConditionId(adviceSaveDto.getConditionId()); // 诊断id
deviceRequest.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id
iDeviceRequestService.saveOrUpdate(deviceRequest);
if (is_save) {
// 处理耗材发放
@@ -1047,42 +1050,42 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
if (is_sign) {
serviceRequest.setSignCode(signCode);
}
// 只有保存时才处理的字段属性
// 🔧 Bug Fix: 签发时也需要设置关键字段修复BUG #181
// 保存时生成业务编号,签发时沿用已有编号
if (is_save) {
serviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4));
serviceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源
serviceRequest.setQuantity(adviceSaveDto.getQuantity()); // 请求数量
serviceRequest.setUnitCode(adviceSaveDto.getUnitCode()); // 请求单位编码
}
serviceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源
serviceRequest.setQuantity(adviceSaveDto.getQuantity()); // 请求数量
serviceRequest.setUnitCode(adviceSaveDto.getUnitCode()); // 请求单位编码
// 🎯 判断是否为会诊医嘱如果categoryEnum为31则为会诊类型
Integer categoryEnum = adviceSaveDto.getCategoryEnum();
if (categoryEnum != null && categoryEnum == 31) {
// 会诊医嘱category_enum设置为31
serviceRequest.setCategoryEnum(31);
log.info("保存会诊医嘱category_enum=31");
} else {
// 普通诊疗医嘱
serviceRequest.setCategoryEnum(adviceSaveDto.getCategoryEnum());
}
serviceRequest.setActivityId(adviceSaveDto.getAdviceDefinitionId());// 诊疗定义id
serviceRequest.setPatientId(adviceSaveDto.getPatientId()); // 患者
serviceRequest.setRequesterId(adviceSaveDto.getPractitionerId()); // 开方医生
serviceRequest.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id
serviceRequest.setAuthoredTime(curDate); // 请求签发时间
// 执行科室
serviceRequest.setOrgId(adviceSaveDto.getPositionId());
serviceRequest.setContentJson(adviceSaveDto.getContentJson()); // 请求内容json
serviceRequest.setYbClassEnum(adviceSaveDto.getYbClassEnum());// 类别医保编码
serviceRequest.setConditionId(adviceSaveDto.getConditionId()); // 诊断id
serviceRequest.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id
// 基于皮试药品生成的皮试检查
if (adviceSaveDto.getBasedOnId() != null) {
serviceRequest.setBasedOnId(adviceSaveDto.getBasedOnId());
serviceRequest.setBasedOnTable(CommonConstants.TableName.MED_MEDICATION_REQUEST);
}
// 🎯 判断是否为会诊医嘱如果categoryEnum为31则为会诊类型
Integer categoryEnum = adviceSaveDto.getCategoryEnum();
if (categoryEnum != null && categoryEnum == 31) {
// 会诊医嘱category_enum设置为31
serviceRequest.setCategoryEnum(31);
log.info("保存会诊医嘱category_enum=31");
} else {
// 普通诊疗医嘱
serviceRequest.setCategoryEnum(adviceSaveDto.getCategoryEnum());
}
serviceRequest.setActivityId(adviceSaveDto.getAdviceDefinitionId());// 诊疗定义id
serviceRequest.setPatientId(adviceSaveDto.getPatientId()); // 患者
serviceRequest.setRequesterId(adviceSaveDto.getPractitionerId()); // 开方医生
serviceRequest.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id
serviceRequest.setAuthoredTime(curDate); // 请求签发时间
// 执行科室
serviceRequest.setOrgId(adviceSaveDto.getPositionId());
serviceRequest.setContentJson(adviceSaveDto.getContentJson()); // 请求内容json
serviceRequest.setYbClassEnum(adviceSaveDto.getYbClassEnum());// 类别医保编码
serviceRequest.setConditionId(adviceSaveDto.getConditionId()); // 诊断id
serviceRequest.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id
// 基于皮试药品生成的皮试检查
if (adviceSaveDto.getBasedOnId() != null) {
serviceRequest.setBasedOnId(adviceSaveDto.getBasedOnId());
serviceRequest.setBasedOnTable(CommonConstants.TableName.MED_MEDICATION_REQUEST);
}
iServiceRequestService.saveOrUpdate(serviceRequest);