mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-29 17:23:57 +08:00
update:编辑模型配置(/models/{modelType}/{provideCode}/{id})保存configJson达不到预期
This commit is contained in:
+14
-14
@@ -17,11 +17,12 @@ import io.swagger.v3.oas.annotations.Operation;
|
|||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import xiaozhi.common.page.PageData;
|
import xiaozhi.common.page.PageData;
|
||||||
|
import xiaozhi.common.utils.ConvertUtils;
|
||||||
import xiaozhi.common.utils.Result;
|
import xiaozhi.common.utils.Result;
|
||||||
import xiaozhi.modules.model.dto.ModelConfigBodyDTO;
|
import xiaozhi.modules.model.dto.ModelConfigBodyDTO;
|
||||||
import xiaozhi.modules.model.dto.ModelConfigDTO;
|
import xiaozhi.modules.model.dto.ModelConfigDTO;
|
||||||
import xiaozhi.modules.model.dto.ModelProviderDTO;
|
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.ModelConfigService;
|
||||||
import xiaozhi.modules.model.service.ModelProviderService;
|
import xiaozhi.modules.model.service.ModelProviderService;
|
||||||
|
|
||||||
@@ -52,15 +53,6 @@ public class ModelController {
|
|||||||
return new Result<List<ModelProviderDTO>>().ok(modelProviderDTOS);
|
return new Result<List<ModelProviderDTO>>().ok(modelProviderDTOS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/{modelType}/{provideCode}/fields")
|
|
||||||
@Operation(summary = "获取模型供应器字段")
|
|
||||||
@RequiresPermissions("sys:role:superAdmin")
|
|
||||||
public Result<List<ModelProviderFieldDTO>> getModelProviderFields(@PathVariable String modelType,
|
|
||||||
@PathVariable String provideCode) {
|
|
||||||
List<ModelProviderFieldDTO> fieldList = modelProviderService.getFieldList(modelType, provideCode);
|
|
||||||
return new Result<List<ModelProviderFieldDTO>>().ok(fieldList);
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/models/list")
|
@GetMapping("/models/list")
|
||||||
@Operation(summary = "获取模型配置列表")
|
@Operation(summary = "获取模型配置列表")
|
||||||
@RequiresPermissions("sys:role:superAdmin")
|
@RequiresPermissions("sys:role:superAdmin")
|
||||||
@@ -94,15 +86,23 @@ public class ModelController {
|
|||||||
return new Result<ModelConfigDTO>().ok(modelConfigDTO);
|
return new Result<ModelConfigDTO>().ok(modelConfigDTO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/models/{modelType}/{provideCode}/{id}")
|
@DeleteMapping("/models/{id}")
|
||||||
@Operation(summary = "删除模型配置")
|
@Operation(summary = "删除模型配置")
|
||||||
@RequiresPermissions("sys:role:superAdmin")
|
@RequiresPermissions("sys:role:superAdmin")
|
||||||
public Result<Void> deleteModelConfig(@PathVariable String modelType, @PathVariable String provideCode,
|
public Result<Void> deleteModelConfig(@PathVariable String id) {
|
||||||
@PathVariable String id) {
|
modelConfigService.delete(id);
|
||||||
modelConfigService.delete(modelType, provideCode, id);
|
|
||||||
return new Result<>();
|
return new Result<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/models/{id}")
|
||||||
|
@Operation(summary = "获取模型配置")
|
||||||
|
@RequiresPermissions("sys:role:superAdmin")
|
||||||
|
public Result<ModelConfigDTO> getModelConfig(@PathVariable String id) {
|
||||||
|
ModelConfigEntity item = modelConfigService.selectById(id);
|
||||||
|
ModelConfigDTO modelConfigDTO = ConvertUtils.sourceToTarget(item, ModelConfigDTO.class);
|
||||||
|
return new Result<ModelConfigDTO>().ok(modelConfigDTO);
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/models/{modelId}/voices")
|
@GetMapping("/models/{modelId}/voices")
|
||||||
@Operation(summary = "获取模型音色")
|
@Operation(summary = "获取模型音色")
|
||||||
@RequiresPermissions("sys:role:normal")
|
@RequiresPermissions("sys:role:normal")
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package xiaozhi.modules.model.dto;
|
|||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@@ -28,7 +29,7 @@ public class ModelConfigBodyDTO {
|
|||||||
private Integer isEnabled;
|
private Integer isEnabled;
|
||||||
|
|
||||||
@Schema(description = "模型配置(JSON格式)")
|
@Schema(description = "模型配置(JSON格式)")
|
||||||
private String configJson;
|
private JSONObject configJson;
|
||||||
|
|
||||||
@Schema(description = "官方文档链接")
|
@Schema(description = "官方文档链接")
|
||||||
private String docLink;
|
private String docLink;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package xiaozhi.modules.model.dto;
|
|||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@@ -32,7 +33,7 @@ public class ModelConfigDTO implements Serializable {
|
|||||||
private Integer isEnabled;
|
private Integer isEnabled;
|
||||||
|
|
||||||
@Schema(description = "模型配置(JSON格式)")
|
@Schema(description = "模型配置(JSON格式)")
|
||||||
private String configJson;
|
private JSONObject configJson;
|
||||||
|
|
||||||
@Schema(description = "官方文档链接")
|
@Schema(description = "官方文档链接")
|
||||||
private String docLink;
|
private String docLink;
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
@@ -9,11 +9,12 @@ import com.baomidou.mybatisplus.annotation.TableId;
|
|||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
|
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@TableName("ai_model_config")
|
@TableName(value = "ai_model_config", autoResultMap = true)
|
||||||
@Schema(description = "模型配置表")
|
@Schema(description = "模型配置表")
|
||||||
public class ModelConfigEntity {
|
public class ModelConfigEntity {
|
||||||
|
|
||||||
@@ -38,7 +39,7 @@ public class ModelConfigEntity {
|
|||||||
|
|
||||||
@TableField(typeHandler = JacksonTypeHandler.class)
|
@TableField(typeHandler = JacksonTypeHandler.class)
|
||||||
@Schema(description = "模型配置(JSON格式)")
|
@Schema(description = "模型配置(JSON格式)")
|
||||||
private String configJson;
|
private JSONObject configJson;
|
||||||
|
|
||||||
@Schema(description = "官方文档链接")
|
@Schema(description = "官方文档链接")
|
||||||
private String docLink;
|
private String docLink;
|
||||||
|
|||||||
+4
-2
@@ -3,10 +3,12 @@ package xiaozhi.modules.model.service;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import xiaozhi.common.page.PageData;
|
import xiaozhi.common.page.PageData;
|
||||||
|
import xiaozhi.common.service.BaseService;
|
||||||
import xiaozhi.modules.model.dto.ModelConfigBodyDTO;
|
import xiaozhi.modules.model.dto.ModelConfigBodyDTO;
|
||||||
import xiaozhi.modules.model.dto.ModelConfigDTO;
|
import xiaozhi.modules.model.dto.ModelConfigDTO;
|
||||||
|
import xiaozhi.modules.model.entity.ModelConfigEntity;
|
||||||
|
|
||||||
public interface ModelConfigService {
|
public interface ModelConfigService extends BaseService<ModelConfigEntity> {
|
||||||
|
|
||||||
List<String> getModelCodeList(String modelType, String modelName);
|
List<String> getModelCodeList(String modelType, String modelName);
|
||||||
|
|
||||||
@@ -16,7 +18,7 @@ public interface ModelConfigService {
|
|||||||
|
|
||||||
ModelConfigDTO edit(String modelType, String provideCode, String id, ModelConfigBodyDTO modelConfigBodyDTO);
|
ModelConfigDTO edit(String modelType, String provideCode, String id, ModelConfigBodyDTO modelConfigBodyDTO);
|
||||||
|
|
||||||
void delete(String modelType, String provideCode, String id);
|
void delete(String id);
|
||||||
|
|
||||||
List<String> getVoiceList(String modelName, String voiceName);
|
List<String> getVoiceList(String modelName, String voiceName);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package xiaozhi.modules.model.service;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import xiaozhi.modules.model.dto.ModelProviderDTO;
|
import xiaozhi.modules.model.dto.ModelProviderDTO;
|
||||||
import xiaozhi.modules.model.dto.ModelProviderFieldDTO;
|
|
||||||
import xiaozhi.modules.model.entity.ModelProviderEntity;
|
import xiaozhi.modules.model.entity.ModelProviderEntity;
|
||||||
|
|
||||||
public interface ModelProviderService {
|
public interface ModelProviderService {
|
||||||
@@ -19,6 +18,4 @@ public interface ModelProviderService {
|
|||||||
void delete();
|
void delete();
|
||||||
|
|
||||||
List<ModelProviderDTO> getList(String modelType, String provideCode);
|
List<ModelProviderDTO> getList(String modelType, String provideCode);
|
||||||
|
|
||||||
List<ModelProviderFieldDTO> getFieldList(String modelType, String provideCode);
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-10
@@ -91,16 +91,7 @@ public class ModelConfigServiceImpl extends BaseServiceImpl<ModelConfigDao, Mode
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void delete(String modelType, String provideCode, String id) {
|
public void delete(String id) {
|
||||||
// 先验证有没有供应器
|
|
||||||
if (StringUtils.isBlank(modelType) || StringUtils.isBlank(provideCode)) {
|
|
||||||
throw new RenException("modelType和provideCode不能为空");
|
|
||||||
}
|
|
||||||
List<ModelProviderDTO> providerList = modelProviderService.getList(modelType, provideCode);
|
|
||||||
if (CollectionUtil.isEmpty(providerList)) {
|
|
||||||
throw new RenException("供应器不存在");
|
|
||||||
}
|
|
||||||
|
|
||||||
modelConfigDao.deleteById(id);
|
modelConfigDao.deleteById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-13
@@ -10,10 +10,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import xiaozhi.common.service.impl.BaseServiceImpl;
|
import xiaozhi.common.service.impl.BaseServiceImpl;
|
||||||
import xiaozhi.common.utils.ConvertUtils;
|
import xiaozhi.common.utils.ConvertUtils;
|
||||||
import xiaozhi.common.utils.JsonUtils;
|
|
||||||
import xiaozhi.modules.model.dao.ModelProviderDao;
|
import xiaozhi.modules.model.dao.ModelProviderDao;
|
||||||
import xiaozhi.modules.model.dto.ModelProviderDTO;
|
import xiaozhi.modules.model.dto.ModelProviderDTO;
|
||||||
import xiaozhi.modules.model.dto.ModelProviderFieldDTO;
|
|
||||||
import xiaozhi.modules.model.entity.ModelProviderEntity;
|
import xiaozhi.modules.model.entity.ModelProviderEntity;
|
||||||
import xiaozhi.modules.model.service.ModelProviderService;
|
import xiaozhi.modules.model.service.ModelProviderService;
|
||||||
|
|
||||||
@@ -56,15 +54,4 @@ public class ModelProviderServiceImpl extends BaseServiceImpl<ModelProviderDao,
|
|||||||
List<ModelProviderEntity> providerEntities = modelProviderDao.selectList(queryWrapper);
|
List<ModelProviderEntity> providerEntities = modelProviderDao.selectList(queryWrapper);
|
||||||
return ConvertUtils.sourceToTarget(providerEntities, ModelProviderDTO.class);
|
return ConvertUtils.sourceToTarget(providerEntities, ModelProviderDTO.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<ModelProviderFieldDTO> getFieldList(String modelType, String providerCode) {
|
|
||||||
List<String> modelProviderEntities = modelProviderDao.getFieldList(modelType, providerCode);
|
|
||||||
if (modelProviderEntities == null || modelProviderEntities.isEmpty()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
String fields = modelProviderEntities.getFirst();
|
|
||||||
List<ModelProviderFieldDTO> fieldList = JsonUtils.parseArray(fields, ModelProviderFieldDTO.class);
|
|
||||||
return fieldList;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.DeleteMapping;
|
|||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.PutMapping;
|
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.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
@@ -79,6 +80,15 @@ public class AdminController {
|
|||||||
return new Result<>();
|
return new Result<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PutMapping("/users/changeStatus/{status}")
|
||||||
|
@Operation(summary = "批量修改用户状态")
|
||||||
|
@RequiresPermissions("sys:role:superAdmin")
|
||||||
|
@Parameter(name = "status", description = "用户状态", required = true)
|
||||||
|
public Result<Void> changeStatus(@PathVariable Integer status, @RequestBody Long[] userIds) {
|
||||||
|
sysUserService.changeStatus(status, userIds);
|
||||||
|
return new Result<Void>();
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/device/all")
|
@GetMapping("/device/all")
|
||||||
@Operation(summary = "分页查找设备")
|
@Operation(summary = "分页查找设备")
|
||||||
@RequiresPermissions("sys:role:superAdmin")
|
@RequiresPermissions("sys:role:superAdmin")
|
||||||
|
|||||||
@@ -57,4 +57,12 @@ public interface SysUserService extends BaseService<SysUserEntity> {
|
|||||||
* @return 用户列表分页数据
|
* @return 用户列表分页数据
|
||||||
*/
|
*/
|
||||||
PageData<AdminPageUserVO> page(AdminPageUserDTO dto);
|
PageData<AdminPageUserVO> page(AdminPageUserDTO dto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量修改用户状态
|
||||||
|
*
|
||||||
|
* @param status 用户状态
|
||||||
|
* @param userIds 用户ID数组
|
||||||
|
*/
|
||||||
|
void changeStatus(Integer status, Long[] userIds);
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-3
@@ -189,10 +189,20 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUserDao, SysUserEntit
|
|||||||
*/
|
*/
|
||||||
private String generatePassword() {
|
private String generatePassword() {
|
||||||
StringBuilder password = new StringBuilder();
|
StringBuilder password = new StringBuilder();
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 12; i++) {
|
||||||
int randomIndex = random.nextInt(CHARACTERS.length());
|
password.append(CHARACTERS.charAt(random.nextInt(CHARACTERS.length())));
|
||||||
password.append(CHARACTERS.charAt(randomIndex));
|
|
||||||
}
|
}
|
||||||
return password.toString();
|
return password.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void changeStatus(Integer status, Long[] userIds) {
|
||||||
|
for (Long userId : userIds) {
|
||||||
|
SysUserEntity entity = new SysUserEntity();
|
||||||
|
entity.setId(userId);
|
||||||
|
entity.setStatus(status);
|
||||||
|
updateById(entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,22 @@
|
|||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
|
||||||
<mapper namespace="xiaozhi.modules.model.dao.ModelConfigDao">
|
<mapper namespace="xiaozhi.modules.model.dao.ModelConfigDao">
|
||||||
|
<resultMap id="ModelConfigResultMap" type="xiaozhi.modules.model.entity.ModelConfigEntity">
|
||||||
|
<id column="id" property="id"/>
|
||||||
|
<result column="model_type" property="modelType"/>
|
||||||
|
<result column="model_code" property="modelCode"/>
|
||||||
|
<result column="model_name" property="modelName"/>
|
||||||
|
<result column="is_default" property="isDefault"/>
|
||||||
|
<result column="is_enabled" property="isEnabled"/>
|
||||||
|
<result column="config_json" property="configJson" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
|
||||||
|
<result column="doc_link" property="docLink"/>
|
||||||
|
<result column="remark" property="remark"/>
|
||||||
|
<result column="sort" property="sort"/>
|
||||||
|
<result column="updater" property="updater"/>
|
||||||
|
<result column="update_date" property="updateDate"/>
|
||||||
|
<result column="creator" property="creator"/>
|
||||||
|
<result column="create_date" property="createDate"/>
|
||||||
|
</resultMap>
|
||||||
<!-- 获取模型供应器字段 -->
|
<!-- 获取模型供应器字段 -->
|
||||||
<select id="getModelCodeList" resultType="String">
|
<select id="getModelCodeList" resultType="String">
|
||||||
select model_name from ai_model_config where model_type = #{modelType}
|
select model_name from ai_model_config where model_type = #{modelType}
|
||||||
|
|||||||
Reference in New Issue
Block a user