diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/IRequestFormManageAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/IRequestFormManageAppService.java index 658e7540..f865495d 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/IRequestFormManageAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/IRequestFormManageAppService.java @@ -63,4 +63,20 @@ public interface IRequestFormManageAppService { * @return 申请单 */ IPage getRequestFormPage(RequestFormDto requestFormDto); + + /** + * 删除申请单(仅待签发状态可删除) + * + * @param requestFormId 申请单ID + * @return 结果 + */ + R deleteRequestForm(Long requestFormId); + + /** + * 撤回申请单(已签发状态撤回至待签发) + * + * @param requestFormId 申请单ID + * @return 结果 + */ + R withdrawRequestForm(Long requestFormId); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java index 1ad8ec3c..d3c1e4e2 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java @@ -471,4 +471,68 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer return requestFormManageAppMapper.getRequestFormPage(requestFormDto, page); } + /** + * 删除申请单(仅待签发状态可删除) + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R deleteRequestForm(Long requestFormId) { + if (requestFormId == null) { + return R.fail("申请单ID不能为空"); + } + RequestForm requestForm = iRequestFormService.getById(requestFormId); + if (requestForm == null) { + return R.fail("申请单不存在"); + } + if (!Integer.valueOf(0).equals(requestForm.getStatus())) { + return R.fail("仅待签发状态的申请单可删除"); + } + // 删除申请单 + iRequestFormService.removeById(requestFormId); + // 删除关联的诊疗项目及账单 + String prescriptionNo = requestForm.getPrescriptionNo(); + List serviceRequestIds = iServiceRequestService + .list(new LambdaQueryWrapper().eq(ServiceRequest::getPrescriptionNo, prescriptionNo)) + .stream().map(ServiceRequest::getId).collect(Collectors.toList()); + for (Long serviceRequestId : serviceRequestIds) { + iServiceRequestService.removeById(serviceRequestId); + iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.WOR_SERVICE_REQUEST, serviceRequestId); + } + return R.ok(null, "删除成功"); + } + + /** + * 撤回申请单(已签发状态撤回至待签发) + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R withdrawRequestForm(Long requestFormId) { + if (requestFormId == null) { + return R.fail("申请单ID不能为空"); + } + RequestForm requestForm = iRequestFormService.getById(requestFormId); + if (requestForm == null) { + return R.fail("申请单不存在"); + } + if (!Integer.valueOf(1).equals(requestForm.getStatus())) { + return R.fail("仅已签发状态的申请单可撤回"); + } + // 将申请单状态回滚至待签发 + RequestForm updateForm = new RequestForm(); + updateForm.setId(requestFormId); + updateForm.setStatus(0); + iRequestFormService.updateById(updateForm); + // 将关联的诊疗项目状态回滚至DRAFT + String prescriptionNo = requestForm.getPrescriptionNo(); + List serviceRequests = iServiceRequestService + .list(new LambdaQueryWrapper().eq(ServiceRequest::getPrescriptionNo, prescriptionNo)); + for (ServiceRequest serviceRequest : serviceRequests) { + ServiceRequest updateService = new ServiceRequest(); + updateService.setId(serviceRequest.getId()); + updateService.setStatusEnum(RequestStatus.DRAFT.getValue()); + iServiceRequestService.updateById(updateService); + } + return R.ok(null, "撤回成功"); + } + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java index 5af14f35..cfbc0d7a 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java @@ -98,7 +98,7 @@ public class RequestFormManageController { * @param startDate 开始日期(可选,格式:yyyy-MM-dd) * @param endDate 结束日期(可选,格式:yyyy-MM-dd) * @param status 单据状态(可选) - * @param keyword 关键字(可选,申请单号/检验项目模糊匹配) + * @param keyword 关键字(可选,申请单号/检验项目名称模糊匹配) * @return 检验申请单 */ @GetMapping(value = "/get-inspection") diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/AdviceProcessAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/AdviceProcessAppMapper.xml index 3aa27ecb..c31e33cf 100755 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/AdviceProcessAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/AdviceProcessAppMapper.xml @@ -280,9 +280,17 @@ aa.balance_amount ) AS personal_account ON personal_account.encounter_id = ae.id - LEFT JOIN med_medication_dispense mmd + LEFT JOIN ( + SELECT med_req_id, status_enum + FROM ( + SELECT med_req_id, status_enum, + ROW_NUMBER() OVER (PARTITION BY med_req_id ORDER BY id DESC) AS rn + FROM med_medication_dispense + WHERE delete_flag = '0' + ) t + WHERE rn = 1 + ) mmd ON mmd.med_req_id = T1.id - AND mmd.delete_flag = '0' WHERE T1.delete_flag = '0' AND T1.refund_medicine_id IS NULL AND T1.generate_source_enum = #{doctorPrescription} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/domain/RequestForm.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/domain/RequestForm.java index e52ffd07..4b0d4102 100755 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/domain/RequestForm.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/domain/RequestForm.java @@ -59,4 +59,9 @@ public class RequestForm extends HisBaseEntity { */ private String typeCode; + /** + * 单据状态 0=待签发 1=已签发 2=已校对 3=待接收 4=已接收 5=已检查 6=已出报告 7=已作废 + */ + private Integer status; + } \ No newline at end of file diff --git a/openhis-ui-vue3/src/views/doctorstation/components/examination/examinationApplication.vue b/openhis-ui-vue3/src/views/doctorstation/components/examination/examinationApplication.vue index 6d5d2942..f01a3f64 100755 --- a/openhis-ui-vue3/src/views/doctorstation/components/examination/examinationApplication.vue +++ b/openhis-ui-vue3/src/views/doctorstation/components/examination/examinationApplication.vue @@ -682,7 +682,6 @@ async function handleCategoryExpand(cat) { code: m.code, price: m.price || 0, packageName: m.packageName || '', - packageId: m.packageId || null, packagePrice: m.packagePrice || null, serviceFee: m.serviceFee || null })); @@ -1026,18 +1025,12 @@ function handleRowClick(row) { code: md.code, price: m.itemFee || 0, // fallback 到已保存的价格 packageName: md.packageName || '', - packageId: md.packageId || null, packagePrice: md.packagePrice || null, // Bug #384修复: 套餐价格 serviceFee: md.serviceFee || null })); // 如果有已保存的检查方法信息,尝试匹配 if (m.checkMethodId) { item.selectedMethod = item.methods.find(md => md.id === m.checkMethodId) || null; - // 从已保存的方法中获取套餐信息 - if (item.selectedMethod?.packageId) { - item.isPackage = true; - item.packageId = item.selectedMethod.packageId; - } } } } catch (err) { @@ -1098,13 +1091,6 @@ async function handleMethodSelect(checked, method, cat) { const existingItem = selectedItems.value.find(s => s.id === targetItem.id); if (existingItem) { existingItem.selectedMethod = method; - // 从方法中获取套餐信息 - if (method.packageId) { - existingItem.isPackage = true; - existingItem.packageId = method.packageId; - // 预加载套餐明细 - loadPackageDetailsForItem(existingItem); - } updateMethodDisplay(); return; } @@ -1119,7 +1105,7 @@ async function handleMethodSelect(checked, method, cat) { } } - const newItem = { + selectedItems.value.push({ id: targetItem.id, name: targetItem.name, price: targetItem.price, quantity: 1, serviceFee: targetItem.serviceFee || 0, @@ -1131,16 +1117,9 @@ async function handleMethodSelect(checked, method, cat) { methods: [method], selectedMethod: method, expanded: false, - // 从方法中获取套餐信息(优先级高于项目本身的 packageName) - isPackage: !!method.packageId || !!targetItem.packageName, - packageId: method.packageId || targetItem.packageId || null - }; - selectedItems.value.push(newItem); - - // 如果是套餐,预加载套餐明细 - if (newItem.isPackage && newItem.packageId) { - loadPackageDetailsForItem(newItem); - } + isPackage: !!targetItem.packageName, + packageId: targetItem.packageId || null + }); // 自动回填执行科室 if (selectedItems.value.length === 1 && cat?.performDeptName) { @@ -1185,7 +1164,6 @@ async function handleItemSelect(checked, item, cat) { code: m.code, price: m.price || item.price, // fallback 到项目价格 packageName: m.packageName || '', - packageId: m.packageId || null, packagePrice: m.packagePrice || null, // Bug #384修复: 套餐价格 serviceFee: m.serviceFee || null // Bug #384修复: 服务费 })); diff --git a/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/applicationForm/laboratoryTests.vue b/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/applicationForm/laboratoryTests.vue index 1e87fede..03d3a205 100755 --- a/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/applicationForm/laboratoryTests.vue +++ b/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/applicationForm/laboratoryTests.vue @@ -164,7 +164,7 @@ onMounted(() => { * type(1:watch监听类型 2:点击保存类型) * selectProjectIds(选中项目的id数组) * */ -const projectWithDepartment = (selectProjectIds, type) => { +const projectWithDepartment = (selectProjectIds) => { //1.获取选中的项目 2.判断项目的执行科室是否相同 3.判断执行科室是否配置 4.将项目的执行科室复值到执行科室下拉选位置 let isRelease = true; // 选中项目的数组 diff --git a/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/applicationForm/medicalExaminations.vue b/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/applicationForm/medicalExaminations.vue index c320f833..17f205fd 100755 --- a/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/applicationForm/medicalExaminations.vue +++ b/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/applicationForm/medicalExaminations.vue @@ -483,7 +483,7 @@ const submit = () => { encounterId: patientInfo.value.encounterId, organizationId: patientInfo.value.inHospitalOrgId, requestFormId: '', - name: applicationListAllFilter.map(item => item.adviceName).join('、'), + name: '检查申请单', descJson: JSON.stringify(submitForm), categoryEnum: '2', }).then((res) => {