@@ -216,8 +216,19 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer
}
// 如果是手术申请单,需要额外生成手术医嘱
if ( ActivityDefCategory . PROCEDURE . getCode ( ) . equals ( typeCode ) ) {
log . info ( " 开始生成手术医嘱, encounterId={}, patientId={}, typeCode={} " , encounterId , patientId , typeCode ) ;
log . info ( " 【调试】判断手术医嘱生成条件: typeCode={}, PROCEDURE.code={}, typeCode类型={}, PROCEDURE.code类型={} " ,
typeCode , ActivityDefCategory . PROCEDURE . getCode ( ) ,
typeCode ! = null ? typeCode . getClass ( ) . getName ( ) : " null " ,
ActivityDefCategory . PROCEDURE . getCode ( ) . getClass ( ) . getName ( ) ) ;
boolean isProcedure = ActivityDefCategory . PROCEDURE . getCode ( ) . equals ( typeCode ) ;
log . info ( " 【调试】判断结果: isProcedure={}, typeCode字符串={}, PROCEDURE.code字符串={} " ,
isProcedure ,
typeCode ! = null ? " ' " + typeCode + " ' " : " null " ,
" ' " + ActivityDefCategory . PROCEDURE . getCode ( ) + " ' " ) ;
if ( isProcedure ) {
log . info ( " 开始生成手术医嘱, encounterId={}, patientId={}, typeCode={}, activityListSize={} " ,
encounterId , patientId , typeCode , activityList ! = null ? activityList . size ( ) : 0 ) ;
try {
// 从 descJson 中解析手术信息
String descJson = requestFormSaveDto . getDescJson ( ) ;
Map < String , Object > descMap = null ;
@@ -225,9 +236,12 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer
try {
ObjectMapper objectMapper = new ObjectMapper ( ) ;
descMap = objectMapper . readValue ( descJson , Map . class ) ;
log . info ( " 解析手术申请单 descJson 成功: {} " , descMap ) ;
} catch ( Exception e ) {
log . error ( " 解析手术申请单 descJson 失败" , e ) ;
log . error ( " 解析手术申请单 descJson 失败: {} " , descJson , e ) ;
}
} else {
log . warn ( " 手术申请单 descJson 为空 " ) ;
}
// 获取手术信息
@@ -239,6 +253,16 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer
String surgeryIndication = descMap ! = null ? ( String ) descMap . get ( " surgeryIndication " ) : null ;
String preoperativeDiagnosis = descMap ! = null ? ( String ) descMap . get ( " preoperativeDiagnosis " ) : null ;
// 🔧 BugFix#318: 从 activityList 获取手术项目名称
String adviceDefinitionName = null ;
if ( activityList ! = null & & ! activityList . isEmpty ( ) ) {
adviceDefinitionName = activityList . get ( 0 ) . getAdviceDefinitionName ( ) ;
log . info ( " 从 activityList 获取手术项目名称: {} " , adviceDefinitionName ) ;
}
log . info ( " 手术信息: surgeryName={}, surgeryCode={}, surgeryFee={}, anesthesiaFee={}, adviceDefinitionName={} " ,
surgeryName , surgeryCode , surgeryFee , anesthesiaFee , adviceDefinitionName ) ;
// 生成手术医嘱
ServiceRequest surgeryServiceRequest = new ServiceRequest ( ) ;
surgeryServiceRequest . setStatusEnum ( RequestStatus . DRAFT . getValue ( ) ) ;
@@ -249,18 +273,26 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer
surgeryServiceRequest . setQuantity ( BigDecimal . valueOf ( 1 ) ) ;
surgeryServiceRequest . setUnitCode ( " 次 " ) ;
surgeryServiceRequest . setCategoryEnum ( 4 ) ; // 4-手术
// 优先从 activityList 获取手术 ID,如果为空则从 descJson 获取
if ( ! activityList . isEmpty ( ) ) {
surgeryServiceRequest . setA ctivityId ( activityList . get ( 0 ) . getAdviceDefinitionId ( ) ) ;
// 优先从 activityList 获取手术 ID
if (activityList ! = null & & ! activityList . isEmpty ( ) ) {
Long a ctivityId = activityList . get ( 0 ) . getAdviceDefinitionId ( ) ;
surgeryServiceRequest . setActivityId ( activityId ) ;
log . info ( " 从 activityList 获取手术ID: {} " , activityId ) ;
} else {
log . warn ( " activityList 为空, 无法获取手术ID " ) ;
}
surgeryServiceRequest . setPatientId ( patientId ) ;
surgeryServiceRequest . setRequesterId ( practitionerId ) ;
surgeryServiceRequest . setEncounterId ( encounterId ) ;
surgeryServiceRequest . setAuthoredTime ( curDate ) ;
surgeryServiceRequest . setOrgId ( orgId ) ;
// 设置手术相关信息到 contentJson 字段
Map < String , String > contentMap = new java . util . HashMap < > ( ) ;
if ( surgeryName ! = null & & ! surgeryName . isEmpty ( ) ) {
// 🔧 BugFix#318: 优先使用 activityList 中的手术项目名称
if ( adviceDefinitionName ! = null & & ! adviceDefinitionName . isEmpty ( ) ) {
contentMap . put ( " surgeryName " , adviceDefinitionName ) ;
} else if ( surgeryName ! = null & & ! surgeryName . isEmpty ( ) ) {
contentMap . put ( " surgeryName " , surgeryName ) ;
}
if ( surgeryCode ! = null & & ! surgeryCode . isEmpty ( ) ) {
@@ -283,10 +315,16 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer
log . error ( " 序列化手术信息失败 " , e ) ;
}
}
try {
iServiceRequestService . save ( surgeryServiceRequest ) ;
log . info ( " 手术医嘱生成成功, serviceRequestId={}, prescriptionNo={} " , surgeryServiceRequest . getId ( ) , prescriptionNo ) ;
} catch ( Exception e ) {
log . error ( " 保存手术医嘱失败 " , e ) ;
throw new ServiceException ( " 保存手术医嘱失败: " + e . getMessage ( ) ) ;
}
// 生成手术收费项目
try {
ChargeItem surgeryChargeItem = new ChargeItem ( ) ;
surgeryChargeItem . setStatusEnum ( ChargeItemStatus . DRAFT . getValue ( ) ) ;
surgeryChargeItem . setBusNo ( AssignSeqEnum . CHARGE_ITEM_NO . getPrefix ( ) . concat ( surgeryServiceRequest . getBusNo ( ) ) ) ;
@@ -299,11 +337,11 @@ 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 ( ) ) {
// 优先从 activityList 获取 productId
if (activityList ! = null & & ! activityList . isEmpty ( ) ) {
surgeryChargeItem . setProductId ( activityList . get ( 0 ) . getAdviceDefinitionId ( ) ) ;
surgeryChargeItem . setAccountId ( activityList . get ( 0 ) . getAccountId ( ) ) ;
}
surgeryChargeItem . setAccountId ( activityList . isEmpty ( ) ? null : activityList . get ( 0 ) . getAccountId ( ) ) ;
surgeryChargeItem . setRequestingOrgId ( orgId ) ;
surgeryChargeItem . setQuantityValue ( BigDecimal . valueOf ( 1 ) ) ;
surgeryChargeItem . setQuantityUnit ( " 次 " ) ;
@@ -317,6 +355,11 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer
}
}
iChargeItemService . save ( surgeryChargeItem ) ;
log . info ( " 手术收费项目生成成功, chargeItemId={} " , surgeryChargeItem . getId ( ) ) ;
} catch ( Exception e ) {
log . error ( " 生成手术收费项目失败 " , e ) ;
throw new ServiceException ( " 生成手术收费项目失败: " + e . getMessage ( ) ) ;
}
// 如果存在麻醉费用,生成麻醉收费项目
if ( anesthesiaFee ! = null & & ! anesthesiaFee . isEmpty ( ) ) {
@@ -341,11 +384,18 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer
anesthesiaChargeItem . setUnitPrice ( anesthesiaFeeAmount ) ;
anesthesiaChargeItem . setTotalPrice ( anesthesiaFeeAmount ) ;
iChargeItemService . save ( anesthesiaChargeItem ) ;
log . info ( " 麻醉收费项目生成成功 " ) ;
}
} catch ( NumberFormatException e ) {
log . warn ( " 麻醉费用格式不正确:{} " , anesthesiaFee ) ;
}
}
} catch ( Exception e ) {
log . error ( " 生成手术医嘱过程中发生异常 " , e ) ;
throw e ;
}
} else {
log . info ( " 不是手术申请单, 跳过手术医嘱生成, typeCode={} " , typeCode ) ;
}
return R . ok ( null , MessageUtils . createMessage ( PromptMsgConstant . Common . M00002 , new Object [ ] { " 申请单 " } ) ) ;