From fbdfd8df693070cb20673a93f3df0ab607ac15bf Mon Sep 17 00:00:00 2001 From: CGD <3030332422@qq.com> Date: Wed, 2 Apr 2025 23:52:13 +0800 Subject: [PATCH 01/14] =?UTF-8?q?=E5=AE=8C=E6=88=90"=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E9=85=8D=E7=BD=AE=E5=88=97=E8=A1=A8"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/manager-web/src/views/ModelConfig.vue | 47 ++++++++++++++++------ 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/main/manager-web/src/views/ModelConfig.vue b/main/manager-web/src/views/ModelConfig.vue index 3345fb2c..29d0251a 100644 --- a/main/manager-web/src/views/ModelConfig.vue +++ b/main/manager-web/src/views/ModelConfig.vue @@ -63,12 +63,18 @@ - - - + + + + + @@ -128,6 +134,7 @@ import HeaderBar from "@/components/HeaderBar.vue"; import ModelEditDialog from "@/components/ModelEditDialog.vue"; import TtsModel from "@/components/TtsModel.vue"; import AddModelDialog from "@/components/AddModelDialog.vue"; +import ModelApi from "@/apis/module/model"; export default { components: { HeaderBar, ModelEditDialog, TtsModel, AddModelDialog }, @@ -139,19 +146,19 @@ export default { editDialogVisible: false, editModelData: {}, ttsDialogVisible: false, - modelList: [ - { code: 'DeepSeek', candidateName: '深度求索', isApplied: true, supplier: '硅基流动' }, - { code: 'SmartAssist', candidateName: '智能助手', isApplied: false, supplier: '智脑科技' }, - { code: 'CogEngine', candidateName: '认知引擎', isApplied: true, supplier: '云智科技' }, - ], + modelList: [], currentPage: 1, - pageSize: 4, - total: 20, + pageSize: 5, + total: 0, selectedModels: [], isAllSelected: false }; }, + created() { + this.loadData(); + }, + computed: { pageCount() { return Math.ceil(this.total / this.pageSize); @@ -281,8 +288,24 @@ export default { this.currentPage = page; this.loadData(); }, + + // 获取模型配置列表 loadData() { - console.log('加载数据,当前页:', this.currentPage); + const params = { + modelType: this.activeTab, + modelName: this.search, + page: this.currentPage, + limit: this.pageSize + }; + + ModelApi.getModelList(params, ({data}) => { + if (data.code === 0) { + this.modelList = data.data.list; + this.total = data.data.total; + } else { + this.$message.error(data.msg || '获取模型列表失败'); + } + }); } }, }; From 14be24a5154411dad7d58f5e9e7e379d9a101b00 Mon Sep 17 00:00:00 2001 From: CGD <3030332422@qq.com> Date: Thu, 3 Apr 2025 08:24:47 +0800 Subject: [PATCH 02/14] =?UTF-8?q?=E5=AE=8C=E6=88=90=E2=80=9C=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=A8=A1=E5=9E=8B=E9=85=8D=E7=BD=AE=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E2=80=9D=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/manager-web/src/views/ModelConfig.vue | 18 +++++++++++++++++- main/manager-web/src/views/roleConfig.vue | 8 ++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/main/manager-web/src/views/ModelConfig.vue b/main/manager-web/src/views/ModelConfig.vue index 29d0251a..e92df918 100644 --- a/main/manager-web/src/views/ModelConfig.vue +++ b/main/manager-web/src/views/ModelConfig.vue @@ -46,7 +46,7 @@
-

大语言模型(LLM)

+

{{ modelTypeText }}

添加 @@ -160,6 +160,20 @@ export default { }, computed: { + + modelTypeText() { + const map = { + vad: '语言活动检测模型(VAD)', + asr: '语音识别模型(ASR)', + llm: '大语言模型(LLM)', + intent: '意图识别模型(Intent)', + tts: '语音合成模型(TTS)', + memory: '记忆模型(Memory)' + } + return map[this.activeTab] || '模型配置' + }, + + pageCount() { return Math.ceil(this.total / this.pageSize); }, @@ -189,6 +203,8 @@ export default { }, handleMenuSelect(index) { this.activeTab = index; + this.currentPage = 1; + this.loadData(); }, handleSearch() { console.log('查询:', this.search); diff --git a/main/manager-web/src/views/roleConfig.vue b/main/manager-web/src/views/roleConfig.vue index cc01e046..d8e3c56a 100644 --- a/main/manager-web/src/views/roleConfig.vue +++ b/main/manager-web/src/views/roleConfig.vue @@ -127,10 +127,10 @@ export default { models: [ {label: '大语言模型(LLM)', key: 'llmModelId'}, {label: '语音识别(ASR)', key: 'asrModelId'}, - {label: '语音活动检测模型(VAD)', key: 'vadModelId'}, - {label: '语音合成模型(TTS)', key: 'ttsModelId'}, - {label: '意图识别模型(Intent)', key: 'intentModelId'}, - {label: '记忆模型(Memory)', key: 'memModelId'} + {label: '语音活动检测(VAD)', key: 'vadModelId'}, + {label: '语音合成(TTS)', key: 'ttsModelId'}, + {label: '意图识别(Intent)', key: 'intentModelId'}, + {label: '记忆(Memory)', key: 'memModelId'} ], templates: ['湾湾小何', '星际游子', '英语老师', '好奇男孩', '汪汪队长'], loadingTemplate: false From 4ea27cbdc2519018fa251ab22569be4affb06dfe Mon Sep 17 00:00:00 2001 From: CGD <3030332422@qq.com> Date: Thu, 3 Apr 2025 10:47:31 +0800 Subject: [PATCH 03/14] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=86=E2=80=9C?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A8=A1=E5=9E=8B=E2=80=9D=E5=BC=B9=E6=A1=86?= =?UTF-8?q?=E7=9A=84=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/ModelEditDialog.vue | 308 +++++++++++++----- main/manager-web/src/views/ModelConfig.vue | 2 - 2 files changed, 219 insertions(+), 91 deletions(-) diff --git a/main/manager-web/src/components/ModelEditDialog.vue b/main/manager-web/src/components/ModelEditDialog.vue index 09e5570c..4aea1027 100644 --- a/main/manager-web/src/components/ModelEditDialog.vue +++ b/main/manager-web/src/components/ModelEditDialog.vue @@ -1,78 +1,84 @@ @@ -121,39 +127,163 @@ export default { diff --git a/main/manager-web/src/views/ModelConfig.vue b/main/manager-web/src/views/ModelConfig.vue index e92df918..751cc0fe 100644 --- a/main/manager-web/src/views/ModelConfig.vue +++ b/main/manager-web/src/views/ModelConfig.vue @@ -676,7 +676,6 @@ export default { margin-top: 15px; /* 导航按钮样式 (首页、上一页、下一页) */ - .pagination-btn:first-child, .pagination-btn:nth-child(2), .pagination-btn:nth-last-child(2) { @@ -702,7 +701,6 @@ export default { } /* 数字按钮样式 */ - .pagination-btn:not(:first-child):not(:nth-child(2)):not(:nth-last-child(2)) { min-width: 28px; height: 32px; From 5b28cf6c663258d6314461d1e524e959b3c0cad4 Mon Sep 17 00:00:00 2001 From: CGD <3030332422@qq.com> Date: Thu, 3 Apr 2025 14:31:57 +0800 Subject: [PATCH 04/14] =?UTF-8?q?=E5=AE=8C=E6=88=90=E2=80=9C=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=A8=A1=E5=9E=8B=E4=BE=9B=E5=BA=94=E5=99=A8=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E2=80=9D=E7=9A=84API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/manager-web/src/apis/module/model.js | 17 +++ .../src/components/AddModelDialog.vue | 111 ++++++------------ 2 files changed, 54 insertions(+), 74 deletions(-) diff --git a/main/manager-web/src/apis/module/model.js b/main/manager-web/src/apis/module/model.js index 2534bb5a..28df13de 100644 --- a/main/manager-web/src/apis/module/model.js +++ b/main/manager-web/src/apis/module/model.js @@ -26,5 +26,22 @@ export default { }) }).send() }, + // 获取模型供应器列表 + getModelProviders(modelType, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/models/${modelType}/provideTypes`) + .method('GET') + .success((res) => { + RequestService.clearRequestTime() + callback(res.data?.data || []) + }) + .fail((err) => { + console.error('获取供应器列表失败:', err) + this.$message.error('获取供应器列表失败') + RequestService.reAjaxFun(() => { + this.getModelProviders(modelType, callback) + }) + }).send() + } } diff --git a/main/manager-web/src/components/AddModelDialog.vue b/main/manager-web/src/components/AddModelDialog.vue index 074be175..ed59057e 100644 --- a/main/manager-web/src/components/AddModelDialog.vue +++ b/main/manager-web/src/components/AddModelDialog.vue @@ -1,13 +1,5 @@ diff --git a/main/manager-web/src/views/ModelConfig.vue b/main/manager-web/src/views/ModelConfig.vue index e6703776..cdb9e3ef 100644 --- a/main/manager-web/src/views/ModelConfig.vue +++ b/main/manager-web/src/views/ModelConfig.vue @@ -118,7 +118,7 @@
- +
@@ -209,48 +209,71 @@ export default { handleSearch() { console.log('查询:', this.search); }, + // 批量删除 batchDelete() { if (this.selectedModels.length === 0) { - this.$message.warning('请先选择要删除的模型'); - return; + this.$message.warning('请先选择要删除的模型') + return } + this.$confirm('确定要删除选中的模型吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { - const selectedIds = this.selectedModels.map(model => model.code); - this.modelList = this.modelList.filter(model => !selectedIds.includes(model.code)); - this.$message.success('删除成功'); - this.selectedModels = []; - this.isAllSelected = false; + const deletePromises = this.selectedModels.map(model => + new Promise(resolve => { + ModelApi.deleteModel( + this.activeTab, + model.configJson?.provider || '', + model.id, + ({data}) => resolve(data.code === 0) + ) + }) + ) + + Promise.all(deletePromises).then(results => { + if (results.every(Boolean)) { + this.$message.success('批量删除成功') + this.loadData() + } else { + this.$message.error('部分删除失败') + } + }) }).catch(() => { - this.$message.info('已取消删除'); - }); - }, + this.$message.info('已取消删除') + }) + }, addModel() { this.addDialogVisible = true; }, editModel(model) { - this.editModelData = { - code: model.code, - name: model.candidateName, - supplier: model.supplier, - }; + this.editModelData = JSON.parse(JSON.stringify(model)); this.editDialogVisible = true; }, - // 删除模型配置 + // 删除单个模型 deleteModel(model) { - this.$confirm(`确定要删除模型 ${model.candidateName} 吗?`, '提示', { + this.$confirm('确定要删除该模型吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { - this.modelList = this.modelList.filter(item => item.code !== model.code); - this.$message.success('删除成功'); + ModelApi.deleteModel( + this.activeTab, + model.configJson?.provider || '', // 从configJson获取provider + model.id, + ({data}) => { + if (data.code === 0) { + this.$message.success('删除成功') + this.loadData() + } else { + this.$message.error(data.msg || '删除失败') + } + } + ) }).catch(() => { - this.$message.info('已取消删除'); - }); + this.$message.info('已取消删除') + }) }, handleCurrentChange(page) { this.currentPage = page; From 6f46776484761704e17578cc2f9e3e6e623aa70a Mon Sep 17 00:00:00 2001 From: hrz <1710360675@qq.com> Date: Sat, 5 Apr 2025 19:37:18 +0800 Subject: [PATCH 07/14] =?UTF-8?q?update:=E7=BC=96=E8=BE=91=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E9=85=8D=E7=BD=AE(/models/{modelType}/{provideCode}/{?= =?UTF-8?q?id})=E4=BF=9D=E5=AD=98configJson=E8=BE=BE=E4=B8=8D=E5=88=B0?= =?UTF-8?q?=E9=A2=84=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/controller/ModelController.java | 28 +++++++++---------- .../modules/model/dto/ModelConfigBodyDTO.java | 3 +- .../modules/model/dto/ModelConfigDTO.java | 3 +- .../model/dto/ModelProviderFieldDTO.java | 19 ------------- .../model/entity/ModelConfigEntity.java | 5 ++-- .../model/service/ModelConfigService.java | 6 ++-- .../model/service/ModelProviderService.java | 3 -- .../service/impl/ModelConfigServiceImpl.java | 11 +------- .../impl/ModelProviderServiceImpl.java | 13 --------- .../sys/controller/AdminController.java | 10 +++++++ .../modules/sys/service/SysUserService.java | 8 ++++++ .../sys/service/impl/SysUserServiceImpl.java | 16 +++++++++-- .../resources/mapper/model/ModelConfigDao.xml | 16 +++++++++++ 13 files changed, 73 insertions(+), 68 deletions(-) delete mode 100644 main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelProviderFieldDTO.java diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelController.java b/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelController.java index af1e772f..7b3381ce 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelController.java @@ -17,11 +17,12 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import xiaozhi.common.page.PageData; +import xiaozhi.common.utils.ConvertUtils; import xiaozhi.common.utils.Result; import xiaozhi.modules.model.dto.ModelConfigBodyDTO; import xiaozhi.modules.model.dto.ModelConfigDTO; import xiaozhi.modules.model.dto.ModelProviderDTO; -import xiaozhi.modules.model.dto.ModelProviderFieldDTO; +import xiaozhi.modules.model.entity.ModelConfigEntity; import xiaozhi.modules.model.service.ModelConfigService; import xiaozhi.modules.model.service.ModelProviderService; @@ -52,15 +53,6 @@ public class ModelController { return new Result>().ok(modelProviderDTOS); } - @GetMapping("/{modelType}/{provideCode}/fields") - @Operation(summary = "获取模型供应器字段") - @RequiresPermissions("sys:role:superAdmin") - public Result> getModelProviderFields(@PathVariable String modelType, - @PathVariable String provideCode) { - List fieldList = modelProviderService.getFieldList(modelType, provideCode); - return new Result>().ok(fieldList); - } - @GetMapping("/models/list") @Operation(summary = "获取模型配置列表") @RequiresPermissions("sys:role:superAdmin") @@ -94,15 +86,23 @@ public class ModelController { return new Result().ok(modelConfigDTO); } - @DeleteMapping("/models/{modelType}/{provideCode}/{id}") + @DeleteMapping("/models/{id}") @Operation(summary = "删除模型配置") @RequiresPermissions("sys:role:superAdmin") - public Result deleteModelConfig(@PathVariable String modelType, @PathVariable String provideCode, - @PathVariable String id) { - modelConfigService.delete(modelType, provideCode, id); + public Result deleteModelConfig(@PathVariable String id) { + modelConfigService.delete(id); return new Result<>(); } + @GetMapping("/models/{id}") + @Operation(summary = "获取模型配置") + @RequiresPermissions("sys:role:superAdmin") + public Result getModelConfig(@PathVariable String id) { + ModelConfigEntity item = modelConfigService.selectById(id); + ModelConfigDTO modelConfigDTO = ConvertUtils.sourceToTarget(item, ModelConfigDTO.class); + return new Result().ok(modelConfigDTO); + } + @GetMapping("/models/{modelId}/voices") @Operation(summary = "获取模型音色") @RequiresPermissions("sys:role:normal") diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelConfigBodyDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelConfigBodyDTO.java index 3e335bf0..07758def 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelConfigBodyDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelConfigBodyDTO.java @@ -2,6 +2,7 @@ package xiaozhi.modules.model.dto; import java.io.Serial; +import cn.hutool.json.JSONObject; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -28,7 +29,7 @@ public class ModelConfigBodyDTO { private Integer isEnabled; @Schema(description = "模型配置(JSON格式)") - private String configJson; + private JSONObject configJson; @Schema(description = "官方文档链接") private String docLink; diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelConfigDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelConfigDTO.java index a7b1b436..ed73e1ff 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelConfigDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelConfigDTO.java @@ -3,6 +3,7 @@ package xiaozhi.modules.model.dto; import java.io.Serial; import java.io.Serializable; +import cn.hutool.json.JSONObject; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -32,7 +33,7 @@ public class ModelConfigDTO implements Serializable { private Integer isEnabled; @Schema(description = "模型配置(JSON格式)") - private String configJson; + private JSONObject configJson; @Schema(description = "官方文档链接") private String docLink; diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelProviderFieldDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelProviderFieldDTO.java deleted file mode 100644 index 8186b363..00000000 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelProviderFieldDTO.java +++ /dev/null @@ -1,19 +0,0 @@ -package xiaozhi.modules.model.dto; - -import java.io.Serializable; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -@Data -@Schema(description = "模型供应器字段") -public class ModelProviderFieldDTO implements Serializable { - @Schema(description = "字段名") - private String key; - - @Schema(description = "字段标签") - private String label; - - @Schema(description = "字段类型") - private String type; -} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelConfigEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelConfigEntity.java index 0111ea96..32ff911f 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelConfigEntity.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelConfigEntity.java @@ -9,11 +9,12 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import cn.hutool.json.JSONObject; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Data -@TableName("ai_model_config") +@TableName(value = "ai_model_config", autoResultMap = true) @Schema(description = "模型配置表") public class ModelConfigEntity { @@ -38,7 +39,7 @@ public class ModelConfigEntity { @TableField(typeHandler = JacksonTypeHandler.class) @Schema(description = "模型配置(JSON格式)") - private String configJson; + private JSONObject configJson; @Schema(description = "官方文档链接") private String docLink; diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelConfigService.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelConfigService.java index 78e9d0ce..59312589 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelConfigService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelConfigService.java @@ -3,10 +3,12 @@ package xiaozhi.modules.model.service; import java.util.List; import xiaozhi.common.page.PageData; +import xiaozhi.common.service.BaseService; import xiaozhi.modules.model.dto.ModelConfigBodyDTO; import xiaozhi.modules.model.dto.ModelConfigDTO; +import xiaozhi.modules.model.entity.ModelConfigEntity; -public interface ModelConfigService { +public interface ModelConfigService extends BaseService { List getModelCodeList(String modelType, String modelName); @@ -16,7 +18,7 @@ public interface ModelConfigService { ModelConfigDTO edit(String modelType, String provideCode, String id, ModelConfigBodyDTO modelConfigBodyDTO); - void delete(String modelType, String provideCode, String id); + void delete(String id); List getVoiceList(String modelName, String voiceName); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java index cb92c953..2ace101e 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java @@ -3,7 +3,6 @@ package xiaozhi.modules.model.service; import java.util.List; import xiaozhi.modules.model.dto.ModelProviderDTO; -import xiaozhi.modules.model.dto.ModelProviderFieldDTO; import xiaozhi.modules.model.entity.ModelProviderEntity; public interface ModelProviderService { @@ -19,6 +18,4 @@ public interface ModelProviderService { void delete(); List getList(String modelType, String provideCode); - - List getFieldList(String modelType, String provideCode); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelConfigServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelConfigServiceImpl.java index b98f70c6..998bf137 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelConfigServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelConfigServiceImpl.java @@ -91,16 +91,7 @@ public class ModelConfigServiceImpl extends BaseServiceImpl providerList = modelProviderService.getList(modelType, provideCode); - if (CollectionUtil.isEmpty(providerList)) { - throw new RenException("供应器不存在"); - } - + public void delete(String id) { modelConfigDao.deleteById(id); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java index 7580d479..fb06e4d5 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java @@ -10,10 +10,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.AllArgsConstructor; import xiaozhi.common.service.impl.BaseServiceImpl; import xiaozhi.common.utils.ConvertUtils; -import xiaozhi.common.utils.JsonUtils; import xiaozhi.modules.model.dao.ModelProviderDao; import xiaozhi.modules.model.dto.ModelProviderDTO; -import xiaozhi.modules.model.dto.ModelProviderFieldDTO; import xiaozhi.modules.model.entity.ModelProviderEntity; import xiaozhi.modules.model.service.ModelProviderService; @@ -56,15 +54,4 @@ public class ModelProviderServiceImpl extends BaseServiceImpl providerEntities = modelProviderDao.selectList(queryWrapper); return ConvertUtils.sourceToTarget(providerEntities, ModelProviderDTO.class); } - - @Override - public List getFieldList(String modelType, String providerCode) { - List modelProviderEntities = modelProviderDao.getFieldList(modelType, providerCode); - if (modelProviderEntities == null || modelProviderEntities.isEmpty()) { - return null; - } - String fields = modelProviderEntities.getFirst(); - List fieldList = JsonUtils.parseArray(fields, ModelProviderFieldDTO.class); - return fieldList; - } } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java index 9b43cab0..bae50cee 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java @@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @@ -79,6 +80,15 @@ public class AdminController { return new Result<>(); } + @PutMapping("/users/changeStatus/{status}") + @Operation(summary = "批量修改用户状态") + @RequiresPermissions("sys:role:superAdmin") + @Parameter(name = "status", description = "用户状态", required = true) + public Result changeStatus(@PathVariable Integer status, @RequestBody Long[] userIds) { + sysUserService.changeStatus(status, userIds); + return new Result(); + } + @GetMapping("/device/all") @Operation(summary = "分页查找设备") @RequiresPermissions("sys:role:superAdmin") diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java index 303cca76..8b7ff1c2 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java @@ -57,4 +57,12 @@ public interface SysUserService extends BaseService { * @return 用户列表分页数据 */ PageData page(AdminPageUserDTO dto); + + /** + * 批量修改用户状态 + * + * @param status 用户状态 + * @param userIds 用户ID数组 + */ + void changeStatus(Integer status, Long[] userIds); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java index 911011b5..d83dd3e0 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java @@ -189,10 +189,20 @@ public class SysUserServiceImpl extends BaseServiceImpl + + + + + + + + + + + + + + + +