From 7f7f7d69f724d4ab1a94902a11770abbb2dfb890 Mon Sep 17 00:00:00 2001 From: chenqi Date: Tue, 31 Mar 2026 17:37:15 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DBug=20#318=20-=20?= =?UTF-8?q?=E9=97=A8=E8=AF=8A=E5=8C=BB=E7=94=9F=E7=AB=99=E6=89=8B=E6=9C=AF?= =?UTF-8?q?=E7=94=B3=E8=AF=B7=E5=8D=95=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90?= =?UTF-8?q?=E6=89=8B=E6=9C=AF=E5=8C=BB=E5=98=B1=EF=BC=88=E4=BB=8EdescJson?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/RequestFormManageAppServiceImpl.java | 84 ++++++++++++++++++- 1 file changed, 83 insertions(+), 1 deletion(-) 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 6aa2e7f8..4c6053d7 100644 --- 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 @@ -8,6 +8,7 @@ import com.core.common.exception.ServiceException; import com.core.common.utils.AssignSeqUtil; import com.core.common.utils.MessageUtils; import com.core.common.utils.SecurityUtils; +import com.fasterxml.jackson.databind.ObjectMapper; import com.openhis.administration.domain.ChargeItem; import com.openhis.administration.service.IChargeItemService; import com.openhis.common.constant.CommonConstants; @@ -31,6 +32,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -214,6 +216,27 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer // 如果是手术申请单,需要额外生成手术医嘱 if (ActivityDefCategory.PROCEDURE.getCode().equals(typeCode)) { + // 从 descJson 中解析手术信息 + String descJson = requestFormSaveDto.getDescJson(); + Map descMap = null; + if (descJson != null && !descJson.isEmpty()) { + try { + ObjectMapper objectMapper = new ObjectMapper(); + descMap = objectMapper.readValue(descJson, Map.class); + } catch (Exception e) { + log.error("解析手术申请单 descJson 失败", e); + } + } + + // 获取手术信息 + String surgeryName = descMap != null ? (String) descMap.get("surgeryName") : null; + String surgeryCode = descMap != null ? (String) descMap.get("surgeryCode") : null; + String surgeryFee = descMap != null ? (String) descMap.get("surgeryFee") : null; + String anesthesiaFee = descMap != null ? (String) descMap.get("anesthesiaFee") : null; + String plannedTime = descMap != null ? (String) descMap.get("plannedTime") : null; + String surgeryIndication = descMap != null ? (String) descMap.get("surgeryIndication") : null; + String preoperativeDiagnosis = descMap != null ? (String) descMap.get("preoperativeDiagnosis") : null; + // 生成手术医嘱 ServiceRequest surgeryServiceRequest = new ServiceRequest(); surgeryServiceRequest.setStatusEnum(RequestStatus.DRAFT.getValue()); @@ -224,7 +247,7 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer surgeryServiceRequest.setQuantity(BigDecimal.valueOf(1)); surgeryServiceRequest.setUnitCode("次"); surgeryServiceRequest.setCategoryEnum(4); // 4-手术 - // 从 activityList 中获取第一个手术 ID 作为活动 ID + // 优先从 activityList 获取手术 ID,如果为空则从 descJson 获取 if (!activityList.isEmpty()) { surgeryServiceRequest.setActivityId(activityList.get(0).getAdviceDefinitionId()); } @@ -233,6 +256,26 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer surgeryServiceRequest.setEncounterId(encounterId); surgeryServiceRequest.setAuthoredTime(curDate); surgeryServiceRequest.setOrgId(orgId); + // 设置手术相关信息到 note 字段 + StringBuilder noteBuilder = new StringBuilder(); + if (surgeryName != null && !surgeryName.isEmpty()) { + noteBuilder.append("手术名称:").append(surgeryName).append("; "); + } + if (surgeryCode != null && !surgeryCode.isEmpty()) { + noteBuilder.append("手术编码:").append(surgeryCode).append("; "); + } + if (plannedTime != null && !plannedTime.isEmpty()) { + noteBuilder.append("计划时间:").append(plannedTime).append("; "); + } + if (surgeryIndication != null && !surgeryIndication.isEmpty()) { + noteBuilder.append("手术指征:").append(surgeryIndication).append("; "); + } + if (preoperativeDiagnosis != null && !preoperativeDiagnosis.isEmpty()) { + noteBuilder.append("术前诊断:").append(preoperativeDiagnosis).append("; "); + } + if (noteBuilder.length() > 0) { + surgeryServiceRequest.setNote(noteBuilder.toString()); + } iServiceRequestService.save(surgeryServiceRequest); // 生成手术收费项目 @@ -248,6 +291,7 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer surgeryChargeItem.setServiceTable(CommonConstants.TableName.WOR_SERVICE_REQUEST); surgeryChargeItem.setServiceId(surgeryServiceRequest.getId()); surgeryChargeItem.setProductTable(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION); + // 优先从 activityList 获取 productId,如果为空则不设置 if (!activityList.isEmpty()) { surgeryChargeItem.setProductId(activityList.get(0).getAdviceDefinitionId()); } @@ -255,7 +299,45 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer surgeryChargeItem.setRequestingOrgId(orgId); surgeryChargeItem.setQuantityValue(BigDecimal.valueOf(1)); surgeryChargeItem.setQuantityUnit("次"); + // 设置手术费用 + if (surgeryFee != null && !surgeryFee.isEmpty()) { + try { + surgeryChargeItem.setUnitPrice(new BigDecimal(surgeryFee)); + surgeryChargeItem.setTotalPrice(new BigDecimal(surgeryFee)); + } catch (NumberFormatException e) { + log.warn("手术费用格式不正确:{}", surgeryFee); + } + } iChargeItemService.save(surgeryChargeItem); + + // 如果存在麻醉费用,生成麻醉收费项目 + if (anesthesiaFee != null && !anesthesiaFee.isEmpty()) { + try { + BigDecimal anesthesiaFeeAmount = new BigDecimal(anesthesiaFee); + if (anesthesiaFeeAmount.compareTo(BigDecimal.ZERO) > 0) { + ChargeItem anesthesiaChargeItem = new ChargeItem(); + anesthesiaChargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); + anesthesiaChargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(surgeryServiceRequest.getBusNo())); + anesthesiaChargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); + anesthesiaChargeItem.setPatientId(patientId); + anesthesiaChargeItem.setContextEnum(3); // 3-诊疗 + anesthesiaChargeItem.setEncounterId(encounterId); + anesthesiaChargeItem.setEntererId(practitionerId); + anesthesiaChargeItem.setEnteredDate(curDate); + anesthesiaChargeItem.setServiceTable(CommonConstants.TableName.WOR_SERVICE_REQUEST); + anesthesiaChargeItem.setServiceId(surgeryServiceRequest.getId()); + anesthesiaChargeItem.setProductTable(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION); + anesthesiaChargeItem.setRequestingOrgId(orgId); + anesthesiaChargeItem.setQuantityValue(BigDecimal.valueOf(1)); + anesthesiaChargeItem.setQuantityUnit("次"); + anesthesiaChargeItem.setUnitPrice(anesthesiaFeeAmount); + anesthesiaChargeItem.setTotalPrice(anesthesiaFeeAmount); + iChargeItemService.save(anesthesiaChargeItem); + } + } catch (NumberFormatException e) { + log.warn("麻醉费用格式不正确:{}", anesthesiaFee); + } + } } return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"申请单"}));