fix(inpatient): 解决手术申请单数据同步和命名问题
- 在应用表单底部按钮中添加延迟刷新机制,确保后端数据提交完成后再触发刷新事件 - 在手术组件中添加诊疗定义名称字段,完善手术项目信息传递 - 优化手术医嘱生成功能,添加详细的调试日志以便追踪问题 - 修复手术项目名称获取逻辑,优先使用activityList中的手术项目名称 - 完善手术收费项目生成流程,添加异常处理和日志记录 - 在控制器中添加手术申请单保存的日志输出,便于问题排查
This commit is contained in:
@@ -216,8 +216,19 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 如果是手术申请单,需要额外生成手术医嘱
|
// 如果是手术申请单,需要额外生成手术医嘱
|
||||||
if (ActivityDefCategory.PROCEDURE.getCode().equals(typeCode)) {
|
log.info("【调试】判断手术医嘱生成条件: typeCode={}, PROCEDURE.code={}, typeCode类型={}, PROCEDURE.code类型={}",
|
||||||
log.info("开始生成手术医嘱,encounterId={}, patientId={}, typeCode={}", encounterId, patientId, typeCode);
|
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 中解析手术信息
|
// 从 descJson 中解析手术信息
|
||||||
String descJson = requestFormSaveDto.getDescJson();
|
String descJson = requestFormSaveDto.getDescJson();
|
||||||
Map<String, Object> descMap = null;
|
Map<String, Object> descMap = null;
|
||||||
@@ -225,9 +236,12 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer
|
|||||||
try {
|
try {
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
descMap = objectMapper.readValue(descJson, Map.class);
|
descMap = objectMapper.readValue(descJson, Map.class);
|
||||||
|
log.info("解析手术申请单 descJson 成功: {}", descMap);
|
||||||
} catch (Exception e) {
|
} 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 surgeryIndication = descMap != null ? (String) descMap.get("surgeryIndication") : null;
|
||||||
String preoperativeDiagnosis = descMap != null ? (String) descMap.get("preoperativeDiagnosis") : 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();
|
ServiceRequest surgeryServiceRequest = new ServiceRequest();
|
||||||
surgeryServiceRequest.setStatusEnum(RequestStatus.DRAFT.getValue());
|
surgeryServiceRequest.setStatusEnum(RequestStatus.DRAFT.getValue());
|
||||||
@@ -249,18 +273,26 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer
|
|||||||
surgeryServiceRequest.setQuantity(BigDecimal.valueOf(1));
|
surgeryServiceRequest.setQuantity(BigDecimal.valueOf(1));
|
||||||
surgeryServiceRequest.setUnitCode("次");
|
surgeryServiceRequest.setUnitCode("次");
|
||||||
surgeryServiceRequest.setCategoryEnum(4); // 4-手术
|
surgeryServiceRequest.setCategoryEnum(4); // 4-手术
|
||||||
// 优先从 activityList 获取手术 ID,如果为空则从 descJson 获取
|
// 优先从 activityList 获取手术 ID
|
||||||
if (!activityList.isEmpty()) {
|
if (activityList != null && !activityList.isEmpty()) {
|
||||||
surgeryServiceRequest.setActivityId(activityList.get(0).getAdviceDefinitionId());
|
Long activityId = activityList.get(0).getAdviceDefinitionId();
|
||||||
|
surgeryServiceRequest.setActivityId(activityId);
|
||||||
|
log.info("从 activityList 获取手术ID: {}", activityId);
|
||||||
|
} else {
|
||||||
|
log.warn("activityList 为空,无法获取手术ID");
|
||||||
}
|
}
|
||||||
surgeryServiceRequest.setPatientId(patientId);
|
surgeryServiceRequest.setPatientId(patientId);
|
||||||
surgeryServiceRequest.setRequesterId(practitionerId);
|
surgeryServiceRequest.setRequesterId(practitionerId);
|
||||||
surgeryServiceRequest.setEncounterId(encounterId);
|
surgeryServiceRequest.setEncounterId(encounterId);
|
||||||
surgeryServiceRequest.setAuthoredTime(curDate);
|
surgeryServiceRequest.setAuthoredTime(curDate);
|
||||||
surgeryServiceRequest.setOrgId(orgId);
|
surgeryServiceRequest.setOrgId(orgId);
|
||||||
|
|
||||||
// 设置手术相关信息到 contentJson 字段
|
// 设置手术相关信息到 contentJson 字段
|
||||||
Map<String, String> contentMap = new java.util.HashMap<>();
|
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);
|
contentMap.put("surgeryName", surgeryName);
|
||||||
}
|
}
|
||||||
if (surgeryCode != null && !surgeryCode.isEmpty()) {
|
if (surgeryCode != null && !surgeryCode.isEmpty()) {
|
||||||
@@ -283,10 +315,16 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer
|
|||||||
log.error("序列化手术信息失败", e);
|
log.error("序列化手术信息失败", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
iServiceRequestService.save(surgeryServiceRequest);
|
iServiceRequestService.save(surgeryServiceRequest);
|
||||||
log.info("手术医嘱生成成功,serviceRequestId={}, prescriptionNo={}", surgeryServiceRequest.getId(), prescriptionNo);
|
log.info("手术医嘱生成成功,serviceRequestId={}, prescriptionNo={}", surgeryServiceRequest.getId(), prescriptionNo);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("保存手术医嘱失败", e);
|
||||||
|
throw new ServiceException("保存手术医嘱失败: " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
// 生成手术收费项目
|
// 生成手术收费项目
|
||||||
|
try {
|
||||||
ChargeItem surgeryChargeItem = new ChargeItem();
|
ChargeItem surgeryChargeItem = new ChargeItem();
|
||||||
surgeryChargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue());
|
surgeryChargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue());
|
||||||
surgeryChargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(surgeryServiceRequest.getBusNo()));
|
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.setServiceTable(CommonConstants.TableName.WOR_SERVICE_REQUEST);
|
||||||
surgeryChargeItem.setServiceId(surgeryServiceRequest.getId());
|
surgeryChargeItem.setServiceId(surgeryServiceRequest.getId());
|
||||||
surgeryChargeItem.setProductTable(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION);
|
surgeryChargeItem.setProductTable(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION);
|
||||||
// 优先从 activityList 获取 productId,如果为空则不设置
|
// 优先从 activityList 获取 productId
|
||||||
if (!activityList.isEmpty()) {
|
if (activityList != null && !activityList.isEmpty()) {
|
||||||
surgeryChargeItem.setProductId(activityList.get(0).getAdviceDefinitionId());
|
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.setRequestingOrgId(orgId);
|
||||||
surgeryChargeItem.setQuantityValue(BigDecimal.valueOf(1));
|
surgeryChargeItem.setQuantityValue(BigDecimal.valueOf(1));
|
||||||
surgeryChargeItem.setQuantityUnit("次");
|
surgeryChargeItem.setQuantityUnit("次");
|
||||||
@@ -317,6 +355,11 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
iChargeItemService.save(surgeryChargeItem);
|
iChargeItemService.save(surgeryChargeItem);
|
||||||
|
log.info("手术收费项目生成成功,chargeItemId={}", surgeryChargeItem.getId());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("生成手术收费项目失败", e);
|
||||||
|
throw new ServiceException("生成手术收费项目失败: " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
// 如果存在麻醉费用,生成麻醉收费项目
|
// 如果存在麻醉费用,生成麻醉收费项目
|
||||||
if (anesthesiaFee != null && !anesthesiaFee.isEmpty()) {
|
if (anesthesiaFee != null && !anesthesiaFee.isEmpty()) {
|
||||||
@@ -341,11 +384,18 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer
|
|||||||
anesthesiaChargeItem.setUnitPrice(anesthesiaFeeAmount);
|
anesthesiaChargeItem.setUnitPrice(anesthesiaFeeAmount);
|
||||||
anesthesiaChargeItem.setTotalPrice(anesthesiaFeeAmount);
|
anesthesiaChargeItem.setTotalPrice(anesthesiaFeeAmount);
|
||||||
iChargeItemService.save(anesthesiaChargeItem);
|
iChargeItemService.save(anesthesiaChargeItem);
|
||||||
|
log.info("麻醉收费项目生成成功");
|
||||||
}
|
}
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
log.warn("麻醉费用格式不正确:{}", anesthesiaFee);
|
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[] {"申请单"}));
|
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"申请单"}));
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ public class RequestFormManageController {
|
|||||||
*/
|
*/
|
||||||
@PostMapping(value = "/save-surgery")
|
@PostMapping(value = "/save-surgery")
|
||||||
public R<?> saveSurgeryRequestForm(@RequestBody RequestFormSaveDto requestFormSaveDto) {
|
public R<?> saveSurgeryRequestForm(@RequestBody RequestFormSaveDto requestFormSaveDto) {
|
||||||
|
log.info("【Controller】保存手术申请单,typeCode={}", ActivityDefCategory.PROCEDURE.getCode());
|
||||||
return iRequestFormManageAppService.saveRequestForm(requestFormSaveDto,
|
return iRequestFormManageAppService.saveRequestForm(requestFormSaveDto,
|
||||||
ActivityDefCategory.PROCEDURE.getCode());
|
ActivityDefCategory.PROCEDURE.getCode());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -141,7 +141,10 @@ const submitApplicationForm = () => {
|
|||||||
const submitOk = () => {
|
const submitOk = () => {
|
||||||
applicationFormDialogVisible.value = false;
|
applicationFormDialogVisible.value = false;
|
||||||
applicationFormName.value = null;
|
applicationFormName.value = null;
|
||||||
|
// 🔧 BugFix#318: 延迟刷新,确保后端数据已提交
|
||||||
|
setTimeout(() => {
|
||||||
emits('refResh');
|
emits('refResh');
|
||||||
|
}, 500);
|
||||||
};
|
};
|
||||||
defineExpose({ state });
|
defineExpose({ state });
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -215,6 +215,7 @@ const submit = () => {
|
|||||||
applicationListAllFilter = applicationListAllFilter.map((item) => {
|
applicationListAllFilter = applicationListAllFilter.map((item) => {
|
||||||
return {
|
return {
|
||||||
adviceDefinitionId: item.adviceDefinitionId /** 诊疗定义id */,
|
adviceDefinitionId: item.adviceDefinitionId /** 诊疗定义id */,
|
||||||
|
adviceDefinitionName: item.adviceDefinitionName /** 诊疗定义名称(手术项目名称) */,
|
||||||
quantity: 1, // /** 请求数量 */
|
quantity: 1, // /** 请求数量 */
|
||||||
unitCode: item.priceList[0].unitCode /** 请求单位编码 */,
|
unitCode: item.priceList[0].unitCode /** 请求单位编码 */,
|
||||||
unitPrice: item.priceList[0].price /** 单价 */,
|
unitPrice: item.priceList[0].price /** 单价 */,
|
||||||
|
|||||||
Reference in New Issue
Block a user