diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationLabApplyServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationLabApplyServiceImpl.java index 3ac71b08..be054fb7 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationLabApplyServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationLabApplyServiceImpl.java @@ -1,7 +1,9 @@ package com.openhis.web.doctorstation.appservice.impl; import com.core.common.core.domain.R; +import com.core.common.enums.DelFlag; import com.core.common.utils.SecurityUtils; +import com.openhis.common.enums.DbOpType; import com.openhis.administration.service.IAccountService; import com.openhis.administration.domain.Account; import com.openhis.lab.domain.InspectionLabApply; @@ -23,7 +25,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.openhis.web.doctorstation.dto.DoctorStationLabApplyItemDto; import com.openhis.workflow.service.IActivityDefinitionService; @@ -100,7 +101,7 @@ public class DoctorStationLabApplyServiceImpl implements IDoctorStationInspectio inspectionLabApply.setCreateBy(SecurityUtils.getLoginUser().getUsername()); inspectionLabApply.setOperatorId(userId); inspectionLabApply.setCreateTime(new Date()); - inspectionLabApply.setDeleteFlag("0"); + inspectionLabApply.setDeleteFlag(DelFlag.NO.getCode()); log.debug("保存检验申请单信息:{}", inspectionLabApply); inspectionLabApplyService.saveOrUpdate(inspectionLabApply); @@ -123,7 +124,7 @@ public class DoctorStationLabApplyServiceImpl implements IDoctorStationInspectio inspectionLabApplyItem.setItemSeq((long) (index + 1)); index++; - inspectionLabApplyItem.setDeleteFlag("0"); + inspectionLabApplyItem.setDeleteFlag(DelFlag.NO.getCode()); log.debug("保存申请单明细信息:{}", inspectionLabApplyItem); inspectionLabApplyItemService.saveOrUpdate(inspectionLabApplyItem); @@ -138,7 +139,7 @@ public class DoctorStationLabApplyServiceImpl implements IDoctorStationInspectio barCode.setTenantId(SecurityUtils.getLoginUser().getTenantId()); barCode.setCreateBy(SecurityUtils.getLoginUser().getUsername()); barCode.setCreateTime(new Date()); - barCode.setDeleteFlag("0"); + barCode.setDeleteFlag(DelFlag.NO.getCode()); log.debug("插入条码数据前,barCode:{}",barCode); @@ -165,17 +166,14 @@ public class DoctorStationLabApplyServiceImpl implements IDoctorStationInspectio // 1. 根据检验项目名称查询诊疗定义(检验项目) String itemName = labApplyItemDto.getItemName(); Long activityDefinitionId = activityDefinitionService.getAppointActivityDefinitionId(itemName); -// log.debug("检验项目:{} 对应的诊疗定义 ID: {}", itemName, activityDefinitionId); if (activityDefinitionId == null) { -// log.error("未找到检验项目对应的诊疗定义:{}", itemName); throw new RuntimeException("未找到检验项目 '" + itemName + "' 对应的诊疗定义"); } // 2. 获取诊疗定义详情 ActivityDefinition activityDefinition = activityDefinitionService.getById(activityDefinitionId); if (activityDefinition == null) { -// log.error("诊疗定义不存在,ID: {}", activityDefinitionId); throw new RuntimeException("诊疗定义不存在"); } @@ -199,7 +197,7 @@ public class DoctorStationLabApplyServiceImpl implements IDoctorStationInspectio // 4. 创建医嘱保存对象 AdviceSaveDto adviceSaveDto = new AdviceSaveDto(); // 设置医嘱操作类型 - adviceSaveDto.setDbOpType("1"); // 1:新增 + adviceSaveDto.setDbOpType(DbOpType.INSERT.getCode()); // 设置医嘱类型 adviceSaveDto.setAdviceType(3); // 3:项目(检验项目) @@ -229,22 +227,17 @@ public class DoctorStationLabApplyServiceImpl implements IDoctorStationInspectio // 开方科室 ID - AdviceSaveDto 构造函数已设置,这里可覆盖 adviceSaveDto.setFounderOrgId(SecurityUtils.getDeptId()); // 账户 ID - 获取就诊的账户(多级回退策略) -// log.debug("获取就诊 id 的参数:{}", doctorStationLabApplyDto.getEncounterId()); Long accountId = accountService.getSelfPayAccount(doctorStationLabApplyDto.getEncounterId()); if (accountId == null) { -// log.warn("未找到就诊 ID {} 对应的自费账户,尝试获取医保账户", doctorStationLabApplyDto.getEncounterId()); accountId = accountService.getMedicalInsuranceAccount(doctorStationLabApplyDto.getEncounterId()); } if (accountId == null) { -// log.warn("未找到就诊 ID {} 对应的医保账户,尝试获取任何账户", doctorStationLabApplyDto.getEncounterId()); List accountList = accountService.getAccountListByEncounter(doctorStationLabApplyDto.getEncounterId()); if (accountList != null && !accountList.isEmpty()) { accountId = accountList.get(0).getId(); -// log.info("使用就诊 ID {} 的第一个账户,ID: {}", doctorStationLabApplyDto.getEncounterId(), accountId); } } if (accountId == null) { -// log.error("就诊 ID {} 没有任何关联的账户", doctorStationLabApplyDto.getEncounterId()); throw new RuntimeException("未找到就诊对应的账户,请确认患者已完成挂号并拥有有效的账户"); } adviceSaveDto.setAccountId(accountId); @@ -279,9 +272,7 @@ public class DoctorStationLabApplyServiceImpl implements IDoctorStationInspectio // 调用门诊医嘱保存接口,创建关联的医嘱记录 try { iDoctorStationAdviceAppService.saveAdvice(adviceSaveParam, "1"); // "1"表示保存操作 -// log.info("成功创建与检验申请单 [{}] 关联的门诊医嘱记录", doctorStationLabApplyDto.getApplyNo()); } catch (Exception e) { -// log.error("创建与检验申请单 [{}] 关联的门诊医嘱记录失败:{}", doctorStationLabApplyDto.getApplyNo(), e.getMessage(), e); throw new RuntimeException("创建关联医嘱记录失败", e); } return R.ok(); @@ -335,51 +326,51 @@ public class DoctorStationLabApplyServiceImpl implements IDoctorStationInspectio @Transactional(rollbackFor = Exception.class) public R deleteInspectionLabApply(String applyNo) { log.debug("删除检验申请单 [{}]", applyNo); - + try { // 1. 根据申请单号查询检验申请单信息 InspectionLabApply inspectionLabApply = inspectionLabApplyService.getOne( new QueryWrapper().eq("apply_no", applyNo) ); - + if (inspectionLabApply == null) { log.warn("未找到申请单号为 [{}] 的检验申请单", applyNo); return R.fail("未找到对应的检验申请单"); } - - // 2. 删除关联的门诊医嘱 - deleteAssociatedAdvice(applyNo); - - // 3. 删除检验申请单明细 - deleteInspectionLabApplyItems(applyNo); - - // 4. 删除条码数据 - deleteBarCodeData(applyNo); - - // 5. 删除检验申请单主表数据,并设置更新人和更新时间 + + // 2. 获取当前登录用户和时间 String currentUsername = SecurityUtils.getUsername(); Date currentTime = new Date(); - boolean deleteResult = inspectionLabApplyService.update( + + // 3. 删除检验申请单主表数据,并设置更新人和更新时间 + boolean deleteMainResult = inspectionLabApplyService.update( new LambdaUpdateWrapper() - .set(InspectionLabApply::getDeleteFlag, "1") + .set(InspectionLabApply::getDeleteFlag, DelFlag.YES.getCode()) .set(InspectionLabApply::getUpdateBy, currentUsername) .set(InspectionLabApply::getUpdateTime, currentTime) .eq(InspectionLabApply::getApplyNo, applyNo) ); - - if (deleteResult) { - log.debug("成功删除申请单号为 [{}] 的检验申请单及相关数据,更新人:{},更新时间:{}", - applyNo, currentUsername, currentTime); - return R.ok("删除成功"); - } else { + + if (!deleteMainResult) { log.error("删除申请单号为 [{}] 的检验申请单失败", applyNo); - // 手动抛出异常,确保事务回滚 throw new RuntimeException("删除检验申请单失败,申请单号:" + applyNo); } - + + // 4. 删除检验申请单明细 + deleteInspectionLabApplyItems(applyNo); + + // 5. 删除条码数据 + deleteBarCodeData(applyNo); + + // 6. 删除关联的门诊医嘱 + deleteAssociatedAdvice(applyNo); + + log.debug("成功删除申请单号为 [{}] 的检验申请单及相关数据,更新人:{},更新时间:{}", + applyNo, currentUsername, currentTime); + return R.ok("删除成功"); + } catch (Exception e) { log.error("删除检验申请单 [{}] 时发生异常,事务将回滚", applyNo, e); - // 重新抛出异常,确保事务回滚 throw new RuntimeException("删除检验申请单过程中发生异常:" + e.getMessage(), e); } } @@ -404,7 +395,7 @@ public class DoctorStationLabApplyServiceImpl implements IDoctorStationInspectio Date currentTime = new Date(); boolean updateResult = serviceRequestService.update( new LambdaUpdateWrapper() - .set(ServiceRequest::getDeleteFlag, "1") + .set(ServiceRequest::getDeleteFlag, DelFlag.YES.getCode()) .set(ServiceRequest::getUpdateBy, currentUsername) .set(ServiceRequest::getUpdateTime, currentTime) .in(ServiceRequest::getId, requestIds) @@ -474,7 +465,7 @@ public class DoctorStationLabApplyServiceImpl implements IDoctorStationInspectio Date currentTime = new Date(); boolean deleteResult = inspectionLabApplyItemService.update( new LambdaUpdateWrapper() - .set(InspectionLabApplyItem::getDeleteFlag, "1") + .set(InspectionLabApplyItem::getDeleteFlag, DelFlag.YES.getCode()) .set(InspectionLabApplyItem::getUpdateBy, currentUsername) .set(InspectionLabApplyItem::getUpdateTime, currentTime) .eq(InspectionLabApplyItem::getApplyNo, applyNo) @@ -504,7 +495,7 @@ public class DoctorStationLabApplyServiceImpl implements IDoctorStationInspectio Date currentTime = new Date(); boolean deleteResult = inspectionLabBarCodeService.update( new LambdaUpdateWrapper() - .set(BarCode::getDeleteFlag, "1") + .set(BarCode::getDeleteFlag, DelFlag.YES.getCode()) .set(BarCode::getUpdateBy, currentUsername) .set(BarCode::getUpdateTime, currentTime) .eq(BarCode::getApplyNo, applyNo) diff --git a/openhis-ui-vue3/src/views/doctorstation/components/inspection/inspectionApplication.vue b/openhis-ui-vue3/src/views/doctorstation/components/inspection/inspectionApplication.vue index be7c326b..504d3e40 100644 --- a/openhis-ui-vue3/src/views/doctorstation/components/inspection/inspectionApplication.vue +++ b/openhis-ui-vue3/src/views/doctorstation/components/inspection/inspectionApplication.vue @@ -47,22 +47,22 @@ @@ -489,7 +489,7 @@