diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/appservice/impl/CheckPackageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/appservice/impl/CheckPackageAppServiceImpl.java index 60221610..9a6d8a9b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/appservice/impl/CheckPackageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/check/appservice/impl/CheckPackageAppServiceImpl.java @@ -118,7 +118,24 @@ public class CheckPackageAppServiceImpl implements ICheckPackageAppService { return R.ok(checkPackage.getId(), "保存成功"); } catch (Exception e) { log.error("新增检查套餐失败", e); - return R.fail("新增检查套餐失败: " + e.getMessage()); + + // 捕获PostgreSQL唯一约束冲突异常 + String errorMessage = e.getMessage(); + if (errorMessage != null) { + // PostgreSQL唯一约束错误通常包含 "duplicate key value" 或约束名称 + if (errorMessage.contains("duplicate key value") || + errorMessage.contains("违反唯一约束") || + errorMessage.contains("unique constraint")) { + // 提取约束名称或字段信息 + String constraintInfo = ""; + if (errorMessage.contains("check_package")) { + constraintInfo = "套餐名称或编码"; + } + return R.fail("保存失败:数据重复," + constraintInfo + "已存在。详细错误:" + errorMessage); + } + } + + return R.fail("新增检查套餐失败: " + errorMessage); } } diff --git a/openhis-server-new/sql/diagnose_treatment_items_issue.sql b/openhis-server-new/sql/diagnose_treatment_items_issue.sql index 135aa5d5..c79e72af 100644 --- a/openhis-server-new/sql/diagnose_treatment_items_issue.sql +++ b/openhis-server-new/sql/diagnose_treatment_items_issue.sql @@ -93,6 +93,12 @@ WHERE aci.context_enum = 'ACTIVITY' + + + + + + diff --git a/openhis-ui-vue3/src/views/maintainSystem/Inspection/PackageManagement.vue b/openhis-ui-vue3/src/views/maintainSystem/Inspection/PackageManagement.vue index bfd19e28..6faa4562 100644 --- a/openhis-ui-vue3/src/views/maintainSystem/Inspection/PackageManagement.vue +++ b/openhis-ui-vue3/src/views/maintainSystem/Inspection/PackageManagement.vue @@ -1,5 +1,6 @@