diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java index 2d098227..1481fbd2 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java @@ -187,6 +187,12 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation condition.setTcmFlag(Whether.YES.getValue());// 中医标识 condition.setRecordedDatetime(new Date()); condition.setRecorderId(SecurityUtils.getLoginUser().getPractitionerId());// 记录人 + // 设置租户ID,避免数据库约束错误 + condition.setTenantId(SecurityUtils.getLoginUser().getTenantId()); + // 设置创建人,避免数据库约束错误 + condition.setCreateBy(SecurityUtils.getLoginUser().getUsername()); + // 设置创建时间,避免数据库约束错误 + condition.setCreateTime(new Date()); iConditionService.saveOrUpdate(condition); saveDiagnosisChildParam.setConditionId(condition.getId()); } @@ -225,6 +231,12 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation encounterDiagnosis.setIptDiseTypeCode(saveDiagnosisChildParam.getIptDiseTypeCode()); // 患者疾病诊断类型代码 encounterDiagnosis.setTcmFlag(Whether.YES.getValue());// 中医标识 encounterDiagnosis.setSyndromeGroupNo(saveDiagnosisChildParam.getSyndromeGroupNo());// 中医证候组号 + // 设置租户ID,避免数据库约束错误 + encounterDiagnosis.setTenantId(SecurityUtils.getLoginUser().getTenantId()); + // 设置创建人,避免数据库约束错误 + encounterDiagnosis.setCreateBy(SecurityUtils.getLoginUser().getUsername()); + // 设置创建时间,避免数据库约束错误 + encounterDiagnosis.setCreateTime(new Date()); iEncounterDiagnosisService.saveOrUpdate(encounterDiagnosis); if (saveDiagnosisChildParam.getDiagSrtNo() == null) { if (i == 1) { @@ -268,6 +280,12 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation condition.setTcmFlag(Whether.YES.getValue());// 中医标识 condition.setRecordedDatetime(new Date()); condition.setRecorderId(SecurityUtils.getLoginUser().getPractitionerId());// 记录人 + // 设置租户ID,避免数据库约束错误 + condition.setTenantId(SecurityUtils.getLoginUser().getTenantId()); + // 设置创建人,避免数据库约束错误 + condition.setCreateBy(SecurityUtils.getLoginUser().getUsername()); + // 设置创建时间,避免数据库约束错误 + condition.setCreateTime(new Date()); iConditionService.saveOrUpdate(condition); saveDiagnosisChildParam.setConditionId(condition.getId()); } @@ -289,6 +307,12 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation encounterDiagnosis.setIptDiseTypeCode(saveDiagnosisChildParam.getIptDiseTypeCode()); // 患者疾病诊断类型代码 encounterDiagnosis.setTcmFlag(Whether.YES.getValue());// 中医标识 encounterDiagnosis.setSyndromeGroupNo(saveDiagnosisChildParam.getSyndromeGroupNo());// 中医证候组号 + // 设置租户ID,避免数据库约束错误 + encounterDiagnosis.setTenantId(SecurityUtils.getLoginUser().getTenantId()); + // 设置创建人,避免数据库约束错误 + encounterDiagnosis.setCreateBy(SecurityUtils.getLoginUser().getUsername()); + // 设置创建时间,避免数据库约束错误 + encounterDiagnosis.setCreateTime(new Date()); iEncounterDiagnosisService.saveOrUpdate(encounterDiagnosis); } return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[]{"中医诊断"})); @@ -493,6 +517,7 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation medicationRequest.setDosageInstruction(adviceSaveDto.getDosageInstruction()); // 用药说明 , 即煎法 } iMedicationRequestService.saveOrUpdate(medicationRequest); + adviceSaveDto.setRequestId(medicationRequest.getId()); if (is_save) { // 处理药品发放 Long dispenseId @@ -608,11 +633,13 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation List requestIds = medicineList.stream() .filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType()) && e.getRequestId() != null) .collect(Collectors.toList()).stream().map(AdviceSaveDto::getRequestId).collect(Collectors.toList()); - iChargeItemService.update(new LambdaUpdateWrapper() - .set(ChargeItem::getStatusEnum, ChargeItemStatus.PLANNED.getValue()) - .eq(ChargeItem::getEncounterId, encounterId) - .eq(ChargeItem::getStatusEnum, ChargeItemStatus.DRAFT.getValue()) - .in(ChargeItem::getServiceId, requestIds)); + if (!requestIds.isEmpty()) { + iChargeItemService.update(new LambdaUpdateWrapper() + .set(ChargeItem::getStatusEnum, ChargeItemStatus.PLANNED.getValue()) + .eq(ChargeItem::getEncounterId, encounterId) + .eq(ChargeItem::getStatusEnum, ChargeItemStatus.DRAFT.getValue()) + .in(ChargeItem::getServiceId, requestIds)); + } } return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[]{"门诊中医医嘱"})); diff --git a/openhis-ui-vue3/src/views/doctorstation/components/tcm/tcmAdvice.vue b/openhis-ui-vue3/src/views/doctorstation/components/tcm/tcmAdvice.vue index c57ea4c9..05ab55f2 100644 --- a/openhis-ui-vue3/src/views/doctorstation/components/tcm/tcmAdvice.vue +++ b/openhis-ui-vue3/src/views/doctorstation/components/tcm/tcmAdvice.vue @@ -890,9 +890,12 @@ function selectAdviceBase(key, row, pIndex) { type: 'minUnit', }); } + const rowData = JSON.parse(JSON.stringify(row)); prescription.prescriptionList[rowIndex.value] = { - ...prescription.prescriptionList[rowIndex.value], - ...JSON.parse(JSON.stringify(row)), + ...prescription.prescriptionList[rowIndex.value], // 保留原有属性(如 uniqueKey, groupId) + ...rowData, // 覆盖药品信息 + statusEnum: 1, // 【关键修复】强制状态为“待签发/草稿”,确保能被保存过滤器捕获 + adviceDefinitionId: rowData.adviceDefinitionId // 确保这个字段有值,后端会根据这个字段过滤空行 }; prescription.prescriptionList[rowIndex.value].orgId = undefined; prescription.prescriptionList[rowIndex.value].dose = undefined; @@ -1233,44 +1236,27 @@ function handleSingOut(pIndex) { } // 处理行checkbox选中 +/** + * 处理行 checkbox 选中 (修改版) + * 删除了根据 groupId 自动联动的逻辑,支持单选。 + */ function handleCheckBoxChange(value, index, row, pIndex) { const prescription = tcmPrescriptionList.value[pIndex]; - // 选中将当前行索引记录下来,取消将当前行索引删除 + + // 1. 基础逻辑:记录或移除当前选中行的索引 if (value) { + // 选中时,将当前行索引记录到 groupIndexList prescription.groupIndexList.push(index); } else { - prescription.groupIndexList.splice(prescription.groupIndexList.indexOf(index), 1); - } - // 如果选中或取消行有组号,将全部相同组号的行全部选中,并记录或删除这些行的索引 - if (row.groupId) { - // 获取组号相同行 - let sameGroupIdList = prescription.prescriptionList.filter((item) => { - return item.groupId == row.groupId; - }); - // 如果只有一个组号的情况不做处理 - if (sameGroupIdList.length == 1) { - return; - } else { - sameGroupIdList.forEach((item) => { - // 排除掉当前选中行 - if (row.uniqueKey != item.uniqueKey) { - // 同步选中状态 - let currentIndex = prescription.prescriptionList.findIndex( - (k) => k.uniqueKey == item.uniqueKey - ); - prescription.prescriptionList[currentIndex].check = value; - if (value) { - prescription.groupIndexList.push(currentIndex); // 或使用索引或唯一标识 - } else if (!value) { - prescription.groupIndexList.splice( - prescription.groupIndexList.indexOf(currentIndex), - 1 - ); - } - } - }); + // 取消选中时,从 groupIndexList 中移除 + const targetIndex = prescription.groupIndexList.indexOf(index); + if (targetIndex !== -1) { + prescription.groupIndexList.splice(targetIndex, 1); } } + + // --- 原有的 groupId 联动逻辑已删除 --- + // 这样医生就可以单独勾选某一味药进行“删除”或“打印”操作,而不会影响同处方的其他药物。 } // 校验每个组号数量是否大于5和对应分组金额是否大于500