fix(doctorstation): 解决医嘱签发时关键字段缺失问题 bug#181
- 处理前端体征字段中的 null 值转换为空字符串 - 移除后端保存和签发逻辑中的条件判断,确保关键字段始终被设置 - 修复 BUG #181 中医嘱签发时缺少必要业务字段的问题 - 统一保存和签发流程中的字段赋值逻辑 - 保持业务编号在签发时的一致性处理
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -575,7 +575,8 @@ const handleSubmit = async () => {
|
||||
const vitalSignFields = ['height', 'weight', 'temperature', 'hertRate', 'pulse', 'endBloodPressure', 'highBloodPressure'];
|
||||
if (vitalSignFields.includes(key)) {
|
||||
// 体征字段:提交所有值,包括空字符串(用于清除数据)
|
||||
formData[key] = value === undefined ? '' : value;
|
||||
// 处理 undefined 和 null 都转为空字符串
|
||||
formData[key] = (value === undefined || value === null) ? '' : String(value);
|
||||
} else if (value !== '' && value !== null && value !== undefined) {
|
||||
// 其他字段:只保留非空值
|
||||
formData[key] = value;
|
||||
|
||||
Reference in New Issue
Block a user