From a53d85bbecee697bd5128cfcfc5f8de4a43fde10 Mon Sep 17 00:00:00 2001 From: chenhao Date: Fri, 31 Jul 2026 17:07:57 +0800 Subject: [PATCH] =?UTF-8?q?refactor(core):=20=E9=87=8D=E6=9E=84=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E6=A8=A1=E5=9D=97=E4=BB=A3=E7=A0=81=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E5=B9=B6=E6=B8=85=E7=90=86=E5=86=97=E4=BD=99=E7=A9=BA=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 统一前后端业务模块(热词组、提示词模板等)的代码换行符与导入语句格式,移除 Java 实体、DTO、VO 及 Service 实现类中的冗余空行,优化前端组件及 API 文件的 import 结构。 --- .../com/imeeting/dto/biz/HotWordGroupDTO.java | 3 - .../com/imeeting/dto/biz/HotWordGroupVO.java | 3 - .../imeeting/dto/biz/PromptTemplateDTO.java | 3 - .../imeeting/dto/biz/PromptTemplateVO.java | 2 - .../com/imeeting/entity/biz/HotWordGroup.java | 3 - .../imeeting/entity/biz/PromptTemplate.java | 3 - .../biz/impl/HotWordGroupServiceImpl.java | 9 - .../MeetingRuntimeProfileResolverImpl.java | 2 - .../biz/impl/PromptTemplateServiceImpl.java | 12 +- frontend/src/api/business/hotwordGroup.ts | 2 - frontend/src/api/business/prompt.ts | 2 - frontend/src/pages/business/AiModels.tsx | 158 +++++++++-------- frontend/src/pages/business/HotWords.tsx | 3 - .../src/pages/business/PromptTemplates.tsx | 165 +++++++----------- 14 files changed, 147 insertions(+), 223 deletions(-) diff --git a/backend/src/main/java/com/imeeting/dto/biz/HotWordGroupDTO.java b/backend/src/main/java/com/imeeting/dto/biz/HotWordGroupDTO.java index 415f566..6638cf1 100644 --- a/backend/src/main/java/com/imeeting/dto/biz/HotWordGroupDTO.java +++ b/backend/src/main/java/com/imeeting/dto/biz/HotWordGroupDTO.java @@ -16,9 +16,6 @@ public class HotWordGroupDTO { @Schema(description = "热词组名称") private String groupName; - @Schema(description = "排序值,越小越靠前") - private Integer sortOrder; - @Schema(description = "状态:1-启用,0-禁用") private Integer status; diff --git a/backend/src/main/java/com/imeeting/dto/biz/HotWordGroupVO.java b/backend/src/main/java/com/imeeting/dto/biz/HotWordGroupVO.java index e0b7220..4b39167 100644 --- a/backend/src/main/java/com/imeeting/dto/biz/HotWordGroupVO.java +++ b/backend/src/main/java/com/imeeting/dto/biz/HotWordGroupVO.java @@ -24,9 +24,6 @@ public class HotWordGroupVO { @Schema(description = "状态:1-启用,0-禁用") private Integer status; - @Schema(description = "排序值,越小越靠前") - private Integer sortOrder; - @Schema(description = "组内热词数量") private Long hotWordCount; diff --git a/backend/src/main/java/com/imeeting/dto/biz/PromptTemplateDTO.java b/backend/src/main/java/com/imeeting/dto/biz/PromptTemplateDTO.java index 20725f4..d239ef8 100644 --- a/backend/src/main/java/com/imeeting/dto/biz/PromptTemplateDTO.java +++ b/backend/src/main/java/com/imeeting/dto/biz/PromptTemplateDTO.java @@ -31,9 +31,6 @@ public class PromptTemplateDTO { @Schema(description = "绑定热词组 ID") private Long hotWordGroupId; - @Schema(description = "鎺掑簭鍊硷紝瓒婂皬瓒婇潬鍓?") - private Integer sortOrder; - @Schema(description = "模板内容") private String promptContent; diff --git a/backend/src/main/java/com/imeeting/dto/biz/PromptTemplateVO.java b/backend/src/main/java/com/imeeting/dto/biz/PromptTemplateVO.java index 68a5a9e..3dbbe4e 100644 --- a/backend/src/main/java/com/imeeting/dto/biz/PromptTemplateVO.java +++ b/backend/src/main/java/com/imeeting/dto/biz/PromptTemplateVO.java @@ -30,8 +30,6 @@ public class PromptTemplateVO { private String hotWordGroupName; @Schema(description = "绑定热词列表") private List hotWords; - @Schema(description = "排序字段") - private Integer sortOrder; @Schema(description = "使用次数") private Integer usageCount; @Schema(description = "提示词正文") diff --git a/backend/src/main/java/com/imeeting/entity/biz/HotWordGroup.java b/backend/src/main/java/com/imeeting/entity/biz/HotWordGroup.java index ea4bad8..783ed47 100644 --- a/backend/src/main/java/com/imeeting/entity/biz/HotWordGroup.java +++ b/backend/src/main/java/com/imeeting/entity/biz/HotWordGroup.java @@ -24,9 +24,6 @@ public class HotWordGroup extends BaseEntity { @Schema(description = "创建者ID") private Long creatorId; - @Schema(description = "排序值,越小越靠前") - private Integer sortOrder; - @Schema(description = "备注") private String remark; } diff --git a/backend/src/main/java/com/imeeting/entity/biz/PromptTemplate.java b/backend/src/main/java/com/imeeting/entity/biz/PromptTemplate.java index 1578fe3..d24cd8b 100644 --- a/backend/src/main/java/com/imeeting/entity/biz/PromptTemplate.java +++ b/backend/src/main/java/com/imeeting/entity/biz/PromptTemplate.java @@ -39,9 +39,6 @@ public class PromptTemplate extends BaseEntity { @Schema(description = "绑定热词组 ID") private Long hotWordGroupId; - @Schema(description = "鎺掑簭鍊硷紝瓒婂皬瓒婇潬鍓?") - private Integer sortOrder; - @Schema(description = "使用次数") private Integer usageCount; diff --git a/backend/src/main/java/com/imeeting/service/biz/impl/HotWordGroupServiceImpl.java b/backend/src/main/java/com/imeeting/service/biz/impl/HotWordGroupServiceImpl.java index 5961736..ef9ad84 100644 --- a/backend/src/main/java/com/imeeting/service/biz/impl/HotWordGroupServiceImpl.java +++ b/backend/src/main/java/com/imeeting/service/biz/impl/HotWordGroupServiceImpl.java @@ -27,8 +27,6 @@ import java.util.stream.Collectors; @RequiredArgsConstructor public class HotWordGroupServiceImpl extends ServiceImpl implements HotWordGroupService { - private static final int DEFAULT_SORT_ORDER = 0; - private final HotWordMapper hotWordMapper; private final PromptTemplateMapper promptTemplateMapper; @@ -86,7 +84,6 @@ public class HotWordGroupServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper() .like(name != null && !name.isBlank(), HotWordGroup::getGroupName, name) .eq(status != null, HotWordGroup::getStatus, status) - .orderByAsc(HotWordGroup::getSortOrder) .orderByDesc(HotWordGroup::getCreatedAt); wrapper.eq(tenantId != null, HotWordGroup::getTenantId, tenantId); Page page = this.page(new Page<>(current, size), wrapper); @@ -104,7 +101,6 @@ public class HotWordGroupServiceImpl extends ServiceImpl listVisibleOptions(Long tenantId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper() .eq(HotWordGroup::getStatus, 1) - .orderByAsc(HotWordGroup::getSortOrder) .orderByDesc(HotWordGroup::getCreatedAt); wrapper.eq(tenantId != null, HotWordGroup::getTenantId, tenantId); List groups = this.list(wrapper); @@ -133,7 +129,6 @@ public class HotWordGroupServiceImpl extends ServiceImpl wrapper.eq(PromptTemplate::getTenantId, tenantId).or().eq(PromptTemplate::getTenantId, 0L)) .orderByDesc(PromptTemplate::getTenantId) - .orderByAsc(PromptTemplate::getSortOrder) .orderByDesc(PromptTemplate::getCreatedAt) .last("LIMIT 1")); if (template != null) { @@ -221,7 +220,6 @@ public class MeetingRuntimeProfileResolverImpl implements MeetingRuntimeProfileR .and(wrapper -> wrapper.eq(PromptTemplate::getTenantId, tenantId).or().eq(PromptTemplate::getTenantId, 0L)) .orderByDesc(PromptTemplate::getTenantId) .orderByDesc(PromptTemplate::getIsSystem) - .orderByAsc(PromptTemplate::getSortOrder) .orderByDesc(PromptTemplate::getCreatedAt) .last("LIMIT 1")); if (template == null) { diff --git a/backend/src/main/java/com/imeeting/service/biz/impl/PromptTemplateServiceImpl.java b/backend/src/main/java/com/imeeting/service/biz/impl/PromptTemplateServiceImpl.java index cf43c47..64cce28 100644 --- a/backend/src/main/java/com/imeeting/service/biz/impl/PromptTemplateServiceImpl.java +++ b/backend/src/main/java/com/imeeting/service/biz/impl/PromptTemplateServiceImpl.java @@ -29,8 +29,6 @@ import java.util.stream.Collectors; @RequiredArgsConstructor public class PromptTemplateServiceImpl extends ServiceImpl implements PromptTemplateService { - private static final int DEFAULT_SORT_ORDER = 0; - private final PromptTemplateUserConfigMapper userConfigMapper; private final HotWordGroupMapper hotWordGroupMapper; private final HotWordService hotWordService; @@ -72,8 +70,8 @@ public class PromptTemplateServiceImpl extends ServiceImpl wrapper = buildVisibilityWrapper(tenantId, userId, isPlatformAdmin, isTenantAdmin); wrapper.like(name != null && !name.isEmpty(), PromptTemplate::getTemplateName, name) .eq(category != null && !category.isEmpty(), PromptTemplate::getCategory, category) - .orderByDesc(PromptTemplate::getIsSystem) - .orderByAsc(PromptTemplate::getSortOrder) + .orderByAsc(PromptTemplate::getIsSystem) + .orderByDesc(PromptTemplate::getTenantId) .orderByDesc(PromptTemplate::getCreatedAt); Page page = this.page(new Page<>(current, size), wrapper); @@ -259,16 +257,11 @@ public class PromptTemplateServiceImpl extends ServiceImpl hotWordGroupMap) { PromptTemplateVO vo = new PromptTemplateVO(); vo.setId(entity.getId()); @@ -283,7 +276,6 @@ public class PromptTemplateServiceImpl extends ServiceImpl { const values = form.getFieldsValue(["provider", "baseUrl", "apiKey"]); if (!values.provider || !values.baseUrl) { - message.warning("璇峰厛濉啓鎻愪緵鍟嗗拰 Base URL"); + message.warning("请先填写提供商和 Base URL"); return; } @@ -248,7 +248,7 @@ const AiModels: React.FC = () => { const rawModels = (res as any)?.data?.data ?? (Array.isArray(res) ? res : []); const models = Array.isArray(rawModels) ? rawModels : []; setRemoteModels(models); - message.success(`鑾峰彇鍒?${models.length} 涓ā鍨媊); + message.success(`已获取 ${models.length} 个模型`); } finally { setFetchLoading(false); } @@ -292,7 +292,7 @@ const AiModels: React.FC = () => { const handleSubmit = async () => { const values = await form.validateFields(); if (values.isDefaultChecked && !values.statusChecked) { - message.warning("????????????"); + message.warning("默认模型必须保持启用状态"); return; } @@ -334,10 +334,10 @@ const AiModels: React.FC = () => { try { if (editingId) { await updateAiModel(payload); - message.success("鏇存柊鎴愬姛"); + message.success("更新成功"); } else { await saveAiModel(payload); - message.success("鏂板鎴愬姛"); + message.success("新增成功"); } setDrawerVisible(false); void fetchData(); @@ -363,7 +363,7 @@ const AiModels: React.FC = () => { max_tokens: extraValues.max_tokens, testMessage: DEFAULT_LLM_TEST_MESSAGE, }); - message.success("LLM ???????"); + message.success("LLM 连通性测试成功"); } finally { setConnectivityLoading(false); } @@ -372,7 +372,7 @@ const AiModels: React.FC = () => { const values = await form.validateFields(["provider", "baseUrl"]); if (String(values.provider || "").toLowerCase() !== "local") { - message.warning("???? ASR ????????"); + message.warning("仅本地 ASR 模型支持连通性测试"); return; } @@ -385,7 +385,7 @@ const AiModels: React.FC = () => { }); const profile = (res as any)?.data?.data ?? (res as any)?.data ?? (res as any); applyLocalProfile(profile as AiLocalProfileVO, values.baseUrl); - message.success("???????????"); + message.success("本地模型连通性测试成功"); } finally { setConnectivityLoading(false); } @@ -393,65 +393,63 @@ const AiModels: React.FC = () => { const handleDelete = async (record: AiModelVO) => { await deleteAiModelByType(record.id, record.modelType); - message.success("鍒犻櫎鎴愬姛"); + message.success("删除成功"); void fetchData(); }; const handleTenantToggle = async (record: AiModelVO, checked: boolean) => { if (checked) { await tenantEnableModel(record.id, activeType); - message.success(activeType === "ASR" ? "宸插垏鎹㈠綋鍓?ASR" : "宸插惎鐢ㄥ綋鍓?LLM"); + message.success(activeType === "ASR" ? "已启用当前 ASR 模型" : "已启用当前 LLM 模型"); } else { await tenantDisableModel(record.id, activeType); - message.success(activeType === "ASR" ? "宸插叧闂綋鍓?ASR" : "宸插叧闂綋鍓?LLM"); + message.success(activeType === "ASR" ? "已停用当前 ASR 模型" : "已停用当前 LLM 模型"); } await fetchData(); }; const handlePlatformStatusToggle = async (record: AiModelVO, checked: boolean) => { await updatePlatformModelStatus(record.id, activeType, checked ? 1 : 0); - message.success(checked ? `骞冲彴绾?${activeType} 宸插惎鐢╜ : `骞冲彴绾 ? ${activeType} - 宸茬鐢╜) - ; + message.success(checked ? `平台级 ${activeType} 已启用` : `平台级 ${activeType} 已禁用`); await fetchData(); }; const handleSyncCurrentAsr = async () => { await syncCurrentAsrSpeakers(); - message.success("?????????"); + message.success("当前 ASR 声纹已同步"); }; const handleSetTenantDefault = async (record: AiModelVO) => { await setTenantDefaultModel(record.id, "LLM"); - message.success("宸茶缃负榛樿 LLM"); + message.success("已设置为默认 LLM"); await fetchData(); }; const resolvedTableColumns = [ { - title: "妯″瀷鍚嶇О", + title: "模型名称", dataIndex: "modelName", key: "modelName", render: (text: string, record: AiModelVO) => ( {text} - {record.isDefault === 1 && 绯荤粺榛樿} - {record.tenantDefault === 1 && 绉熸埛榛樿} + {record.isDefault === 1 && 系统默认} + {record.tenantDefault === 1 && 租户默认} {record.tenantId === 0 && ( - + )} {record.scope && ( - {record.scope === "PLATFORM" ? "骞冲彴绾? : "绉熸埛绾 ?} + {record.scope === "PLATFORM" ? "平台级" : "租户级"} )} ), }, { - title: "???", + title: "提供商", dataIndex: "provider", key: "provider", render: (value: string) => { @@ -460,18 +458,18 @@ const AiModels: React.FC = () => { }, }, { - title: "妯″瀷缂栫爜", + title: "模型编码", dataIndex: "modelCode", key: "modelCode", }, { - title: "鎺掑簭", + title: "排序", dataIndex: "sortOrder", key: "sortOrder", render: (value: number | undefined) => value ?? 0, }, { - title: "??", + title: "状态", dataIndex: "status", key: "status", render: (status: number, record: AiModelVO) => { @@ -479,8 +477,8 @@ const AiModels: React.FC = () => { return ( void handlePlatformStatusToggle(record, checked)} /> ); @@ -488,8 +486,8 @@ const AiModels: React.FC = () => { return ( void handleTenantToggle(record, checked)} /> @@ -497,7 +495,7 @@ const AiModels: React.FC = () => { }, }, { - title: "鎿嶄綔", + title: "操作", key: "action", render: (_: unknown, record: AiModelVO) => { const canEdit = record.canEditConfig ?? (record.tenantId !== 0 || isPlatformAdmin); @@ -506,18 +504,18 @@ const AiModels: React.FC = () => { {canSetDefault && ( )} {canEdit && ( )} {canEdit && ( - handleDelete(record)}> + handleDelete(record)}> )} @@ -530,11 +528,11 @@ const AiModels: React.FC = () => { const leftActions = ( {activeType === "ASR" && ( )} @@ -543,8 +541,8 @@ const AiModels: React.FC = () => { return ( { setCurrent(1); }} items={[ - {key: "ASR", label: "ASR 妯″瀷"}, - {key: "LLM", label: "LLM 妯″瀷"}, + {key: "ASR", label: "ASR 模型"}, + {key: "LLM", label: "LLM 模型"}, ]} size="middle" type="card" @@ -568,7 +566,7 @@ const AiModels: React.FC = () => { rightActions={ } className="ai-models-search" onSearch={(value) => { @@ -605,13 +603,13 @@ const AiModels: React.FC = () => { width={600} open={drawerVisible} onClose={() => setDrawerVisible(false)} - title={{editingId ? "缂栬緫妯″瀷" : "鏂板妯″瀷"}} + title={{editingId ? "编辑模型" : "新增模型"}} forceRender extra={ - + } @@ -621,9 +619,9 @@ const AiModels: React.FC = () => { - + - {activeType === "ASR" ? "璇煶璇嗗埆 (ASR)" : "澶ц瑷€妯″瀷 (LLM)"} + {activeType === "ASR" ? "语音识别 (ASR)" : "大语言模型 (LLM)"} @@ -631,7 +629,7 @@ const AiModels: React.FC = () => { { @@ -642,10 +640,10 @@ const AiModels: React.FC = () => { - {providers.map((item) => (