1.5.9后端

AI智能表单填充,AI模型修改为从前端动态传参
AI相关功能增加权限配置
hwmom-htk
xs 4 months ago
parent e0f9c2186f
commit 96eb49c294

@ -41,4 +41,7 @@ public class RemoteFile implements Serializable {
*/
private String fileSuffix;
private String fileName;
}

@ -15,4 +15,17 @@ public interface HwMomAiConstants {
public static final String AI_FORM_SETTING_FIELD_TYPE_NORMAL = "1";//普通字段
public static final String AI_FORM_SETTING_FIELD_TYPE_RELATE = "2";//关联表
public static final String AI_FORM_SETTING_FIELD_TYPE_DICT = "3";//字典数据
public static final String AI_CHAT_MESSAGE_DETAIL_TYPE_QUESTION = "1";//AI问答
public static final String AI_CHAT_MESSAGE_DETAIL_TYPE_KNOWLEDGE_QUESTION = "2";//AI知识库问答
public static final String AI_CHAT_MESSAGE_DETAIL_TYPE_SQL = "3";//AI生成SQL
public static final String AI_CHAT_MESSAGE_DETAIL_TYPE_FORM = "4";//AI填报
public static final String AI_CHAT_MESSAGE_DETAIL_TYPE_QUESTION_VECTOR = "5";//提问获取向量
public static final String AI_CHAT_MESSAGE_DETAIL_TYPE_CONTENT_VECTOR = "6";//上传内容获取向量
public static final String AI_CHAT_MESSAGE_DETAIL_TYPE_TEST = "9";//AI测试
}

@ -1,12 +1,20 @@
package org.dromara.ai.asr.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.ObjectUtil;
import com.google.protobuf.ServiceException;
import jakarta.annotation.Resource;
import org.dromara.ai.asr.service.AliAsrService;
import org.dromara.common.core.domain.R;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.resource.api.RemoteFileService;
import org.dromara.resource.api.domain.RemoteFile;
import org.hibernate.validator.internal.util.stereotypes.Lazy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.HashMap;
import java.util.Map;
@ -21,6 +29,9 @@ public class AsrController {
@Autowired
private AliAsrService aliAsrService;
@Resource
private RemoteFileService remoteFileService;
// /**
// * 语音识别接口
// * @param audioFile 音频文件
@ -52,6 +63,29 @@ public class AsrController {
// }
/**
* OSS
*
* @param file
*/
// @SaCheckPermission("system:oss:upload")
// @Log(title = "OSS对象存储", businessType = BusinessType.INSERT)
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<RemoteFile> upload(@RequestPart("file") MultipartFile file) {
if (ObjectUtil.isNull(file)) {
return R.fail("上传文件不能为空");
}
try {
RemoteFile oss = remoteFileService.upload(file.getName(), file.getOriginalFilename(), file.getContentType(), file.getBytes());
oss.setUrl(oss.getUrl());
oss.setOssId(oss.getOssId());
oss.setFileName(oss.getOriginalName());
return R.ok(oss);
} catch (Exception e) {
throw new RuntimeException("请重试:" + e.getMessage());
}
}
/**
* URL
*/
@ -68,7 +102,7 @@ public class AsrController {
return R.ok(response);
}
System.out.println("接收到音频文件URL: {"+audioUrl+"}");
System.out.println("接收到音频文件URL: {" + audioUrl + "}");
String resultText = aliAsrService.recognizeSpeechByUrl(audioUrl);

@ -58,8 +58,6 @@ public class AiAssistantController extends BaseController {
private final IAiChatMessageDetailService aiChatMessageDetailService;
private final IVectorDBService vectorDBService;
/**
* AI
*/
@ -90,6 +88,7 @@ public class AiAssistantController extends BaseController {
/**
* message topic
*/
@SaCheckPermission("ai:aiChatMessage:list")
@Log(title = "会话标题", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/updateAiChatMessageTopic")
@ -102,7 +101,7 @@ public class AiAssistantController extends BaseController {
*
* @param sessionId ID
*/
@SaCheckPermission("ai:aiChatMessage:remove")
@SaCheckPermission("ai:aiChatMessage:list")
@Log(title = "聊天消息", businessType = BusinessType.DELETE)
@DeleteMapping("/{sessionId}")
public R<Void> remove(@NotEmpty(message = "会话ID不能为空")
@ -114,6 +113,7 @@ public class AiAssistantController extends BaseController {
*
*/
@PostMapping(value = "/chatStream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
@SaCheckPermission("ai:aiChatMessage:list")
public Flux<String> chatStream(
@RequestParam("provider") String provider, @RequestBody AIRequest request) {
// LoginUser loginUser = LoginHelper.getLoginUser();
@ -152,6 +152,7 @@ public class AiAssistantController extends BaseController {
* @return
*/
@PostMapping(value = "/aiFillForm")
@SaCheckPermission("ai:aiAssistant:aiFillForm")
public JSONObject aiFillForm(@Validated(EditGroup.class) @RequestBody AIFillFormRequest aiFillFormRequest) {
try {
return aiAssistantService.aiFillForm(aiFillFormRequest);

@ -146,6 +146,7 @@ public class AiKnowledgeBaseController extends BaseController {
*
*/
@PostMapping(value = "/uploadKnowledgeContent")
@SaCheckPermission("ai:aiKnowledgeContent:upload")
public R<KnowledgeContentUploadResponse> uploadKnowledgeContent(KnowledgeContentUploadRequest request) throws IOException {
// knowledgeInfoService.upload(request);
// aiKnowledgeContentService.uploadKnowledgeContent(request);
@ -174,6 +175,7 @@ public class AiKnowledgeBaseController extends BaseController {
*
*/
@PostMapping(value = "/vectorizeKnowledgeContent")
@SaCheckPermission("ai:aiKnowledgeContent:upload")
public R<KnowledgeContentUploadResponse> vectorizeKnowledgeContent(@Validated(EditGroup.class) @RequestBody AIKnowledgeEmbedding aiKnowledgeEmbedding) {
aiKnowledgeBaseService.vectorizeKnowledgeContent(aiKnowledgeEmbedding);
return R.ok();
@ -185,12 +187,13 @@ public class AiKnowledgeBaseController extends BaseController {
*/
// @SaCheckPermission("ai:aiKnowledgeContent:list")
@GetMapping("/listAiKnowledgeContent")
@SaCheckPermission("ai:aiKnowledgeContent:list")
public TableDataInfo<AiKnowledgeContent> listAiKnowledgeContent(AiKnowledgeContentBo bo, PageQuery pageQuery) {
return aiKnowledgeContentService.queryContentPageList(bo, pageQuery);
}
/**
* AI
* AI
*
* @param knowledgeBaseId ID
* @param knowledgeContentIds
@ -198,6 +201,7 @@ public class AiKnowledgeBaseController extends BaseController {
// @SaCheckPermission("ai:aiKnowledgeBase:remove")
@Log(title = "AI知识库内容", businessType = BusinessType.DELETE)
@PostMapping("/deleteKnowledgeContent/{knowledgeBaseId}/{knowledgeContentIds}")
@SaCheckPermission("ai:aiKnowledgeContent:remove")
public R<Void> deleteKnowledgeContent(@NotNull(message = "知识库ID不能为空")
@PathVariable Long knowledgeBaseId, @NotEmpty(message = " 知识库内容ID不能为空")
@PathVariable Long[] knowledgeContentIds) {
@ -205,7 +209,13 @@ public class AiKnowledgeBaseController extends BaseController {
}
/**
*
* @param knowledgeContentId
* @return
*/
@PostMapping("/removeContentFile/{knowledgeContentId}")
@SaCheckPermission("ai:aiKnowledgeContent:upload")
public R<Void> removeContentFile(@NotNull(message = " 知识库内容ID不能为空")
@PathVariable Long knowledgeContentId) {
return toAjax(aiKnowledgeBaseService.removeContentFile(knowledgeContentId));

@ -53,11 +53,7 @@ public class AiModelController extends BaseController {
private final IAiModelService aiModelService;
private final IAiPlatformService aiPlatformService;
private final IAiBaseModelService baseModelService;
private final IAIAssistantService assistantService;
@Autowired
private AIProviderProcessorFactory aiProviderProcessorFactory;

@ -54,7 +54,7 @@ public class AiPlatformController extends BaseController {
/**
* AI
*/
@SaCheckPermission("ai/base:aiPlatform:list")
@SaCheckPermission("ai:aiPlatform:list")
@GetMapping("/list")
public R<List<AiPlatformVo>> list(AiPlatformBo bo) {
return R.ok(aiPlatformService.queryList(bo));
@ -76,7 +76,6 @@ public class AiPlatformController extends BaseController {
/**
* AI
*/
@SaCheckPermission("ai/base:aiPlatform:export")
@Log(title = "AI平台", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(AiPlatformBo bo, HttpServletResponse response) {
@ -89,7 +88,7 @@ public class AiPlatformController extends BaseController {
*
* @param platformId
*/
@SaCheckPermission("ai/base:aiPlatform:query")
@SaCheckPermission("ai:aiPlatform:query")
@GetMapping("/{platformId}")
public R<AiPlatformVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long platformId) {
@ -99,7 +98,6 @@ public class AiPlatformController extends BaseController {
/**
* AI
*/
@SaCheckPermission("ai/base:aiPlatform:add")
@Log(title = "AI平台", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
@ -110,7 +108,6 @@ public class AiPlatformController extends BaseController {
/**
* AI
*/
@SaCheckPermission("ai/base:aiPlatform:edit")
@Log(title = "AI平台", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
@ -123,7 +120,6 @@ public class AiPlatformController extends BaseController {
*
* @param platformIds
*/
@SaCheckPermission("ai/base:aiPlatform:remove")
@Log(title = "AI平台", businessType = BusinessType.DELETE)
@DeleteMapping("/{platformIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")

@ -1,5 +1,6 @@
package org.dromara.ai.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -16,6 +17,7 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
* @author xins
* @date 2025-08-14
*/
@InterceptorIgnore(dataPermission = "true", tenantLine = "true")
public interface AiChatMessageDetailMapper extends BaseMapperPlus<AiChatMessageDetail, AiChatMessageDetailVo> {
@DataPermission({

@ -38,6 +38,18 @@ public class AIFillFormRequest {
@NotNull(message = "AI表单设置属性详情列表不能为空", groups = { AddGroup.class, EditGroup.class })
private List<AiFormSettingDetail> formSettingDetailList;
/**
* AIID
*/
@NotNull(message = "AI平台ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long platformId;
/**
* AIID
*/
@NotNull(message = "AI模型ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long modelId;
/**
*
*/

@ -43,7 +43,7 @@ public class TongYiQianWenProcessor extends BaseAIProviderProcessor {
private static final Pattern JSON_PATTERN = Pattern.compile("\\{(?:[^{}]|\\{(?:[^{}]|\\{[^{}]*\\})*\\})*\\}");
private final String apiKey = "sk-e1df7a607644479e8ebad3be233ddafa";
private final String apiUrl = "https://api.deepseek.com/v1/";
private final String apiUrl = "https://api.t.com/v1/";
private static final String API_URL = "https://api.deepseek.com/v1/chat/completions";
private final String deepSeekChatModel = "deepseek-chat";

@ -237,7 +237,7 @@ public class AIAssistantServiceImpl implements IAIAssistantService {
// 2. 构建 AI 提示
String prompt = String.format(
"你是一个专业的 SQL Server 数据库专家。仅根据以下数据库结构(如果以下数据库结构中没有则返回select * from):\n\n%s\n\n" +
"你是一个专业的 SQL Server 数据库专家。必须基于表结构生成SQL,其中的表名和字段名必须来自表结构信息(如果以下数据库结构中没有则返回select * from):\n\n%s\n\n" +
"请将以下自然语言查询转换为优化的 SQL Server T-SQL 语句:\n" +
"---\n%s\n---\n\n" +
"要求:\n" +
@ -407,9 +407,9 @@ public class AIAssistantServiceImpl implements IAIAssistantService {
// }
String naturalLanguageQuery = aiFillFormRequest.getNaturalLanguageQuery();
String naturalLanguageQuery = aiFillFormRequest.getNaturalLanguageQuery()+".";
List<AiFormSettingDetail> aiFormSettingDetailList = aiFillFormRequest.getFormSettingDetailList();
StringBuilder sb = new StringBuilder("你是一个智能表单填充助手。请根据我的要求、提供的数据库表字段信息生成一份用于直接填充Vue3前端表单的JSON数据。\n\n");
StringBuilder sb = new StringBuilder("你是一个智能表单填充助手。请根据我的要求、提供的数据库表结构信息生成一份用于直接填充Vue3前端表单的JSON数据。\n\n");
sb.append("【要求】\n");
sb.append(naturalLanguageQuery).append(",\n\n");
@ -422,17 +422,19 @@ public class AIAssistantServiceImpl implements IAIAssistantService {
sb.append("2. 生成一个纯净的JSON对象不要任何额外的解释、文本或markdown代码块标记键是字段名值是根据我的要求推断出来的值\n");
// sb.append("3. 请返回**纯净的JSON格式**数据不要任何额外的解释、文本或markdown代码块标记\n");
sb.append("3. 仅返回一个JSON对象不要返回JSON数组,不要返回任何测试数据和推测的数据\n");
sb.append("4. 其他没有要求返回的数据返回空字符串\n");
sb.append("4. 其中的表名和字段名必须来自数据库表结构信息\n");
sb.append("5. 其他没有要求返回的数据返回空字符串\n");
IUnifiedAIProviderProcessor processor = aiProviderProcessorFactory.getProcessorByPlatformId(1L);
IUnifiedAIProviderProcessor processor = aiProviderProcessorFactory
.getProcessorByPlatformId(aiFillFormRequest.getPlatformId());
AIMessage aiMessage = new AIMessage();
aiMessage.setRole("user");
aiMessage.setContent(sb.toString());
Long modelId = aiFillFormRequest.getModelId();
AIRequest aiRequest = new AIRequest();
aiRequest.setMessages(Collections.singletonList(aiMessage));
//todo modelId
aiRequest.setModelId(1L);
aiRequest.setModelId(modelId);
Mono<AIResponse> response = processor.chat(aiRequest);
if (Objects.requireNonNull(response.block()).isSuccess()) {
@ -440,7 +442,7 @@ public class AIAssistantServiceImpl implements IAIAssistantService {
JSONObject contentJson = JSONObject.parseObject(content);
parseRelateTable(aiFormSettingDetailList, contentJson);
processor.saveTokenUsage(HwMomAiConstants.AI_CHAT_MESSAGE_DETAIL_TYPE_FORM,sb.toString(), content, response.block().getTokenUsage(),
1L, null, null,
modelId, null, null,
null, null, "0", "1",LoginHelper.getUserId());
System.out.println(contentJson.toJSONString());

@ -116,7 +116,6 @@ public class AiBaseModelServiceImpl implements IAiBaseModelService {
*
*/
private void validEntityBeforeSave(AiBaseModel entity){
//TODO 做一些数据校验,如唯一约束
}
/**
@ -129,7 +128,6 @@ public class AiBaseModelServiceImpl implements IAiBaseModelService {
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}

@ -130,7 +130,6 @@ public class AiChatMessageDetailServiceImpl implements IAiChatMessageDetailServi
*
*/
private void validEntityBeforeSave(AiChatMessageDetail entity) {
//TODO 做一些数据校验,如唯一约束
}
/**
@ -143,7 +142,6 @@ public class AiChatMessageDetailServiceImpl implements IAiChatMessageDetailServi
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
@ -194,7 +192,7 @@ public class AiChatMessageDetailServiceImpl implements IAiChatMessageDetailServi
.eq(ObjectUtil.isNotNull(bo.getMessageDetailType()), "acmd.message_detail_type", bo.getMessageDetailType())
.eq(ObjectUtil.isNotNull(bo.getCreateBy()), "acmd.create_by", bo.getCreateBy())
.eq(ObjectUtil.isNotNull(bo.getModelId()), "acmd.model_id", bo.getModelId())
.orderByAsc("acmd.message_detail_id");
.orderByDesc("acmd.message_detail_id");
Page<AiChatMessageDetailVo> page = baseMapper.selectAiChatMessageDetailJoinList(pageQuery.build(), wrapper);
return TableDataInfo.build(page);
}

@ -127,7 +127,6 @@ public class AiChatMessageServiceImpl implements IAiChatMessageService {
*
*/
private void validEntityBeforeSave(AiChatMessage entity) {
//TODO 做一些数据校验,如唯一约束
}
/**
@ -140,7 +139,6 @@ public class AiChatMessageServiceImpl implements IAiChatMessageService {
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
@ -174,7 +172,6 @@ public class AiChatMessageServiceImpl implements IAiChatMessageService {
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidBySessionId(String sessionId, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
// 先删除AI会话明细

@ -157,7 +157,6 @@ public class AiFormSettingServiceImpl implements IAiFormSettingService {
*
*/
private void validEntityBeforeSave(AiFormSetting entity) {
//TODO 做一些数据校验,如唯一约束
}
/**
@ -171,7 +170,6 @@ public class AiFormSettingServiceImpl implements IAiFormSettingService {
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
ids.forEach(id -> {
aiFormSettingDetailMapper.delete(Wrappers.<AiFormSettingDetail>lambdaQuery()

@ -209,7 +209,6 @@ public class AiKnowledgeBaseServiceImpl implements IAiKnowledgeBaseService {
*
*/
private void validEntityBeforeSave(AiKnowledgeBase entity) {
//TODO 做一些数据校验,如唯一约束
}
/**
@ -222,7 +221,6 @@ public class AiKnowledgeBaseServiceImpl implements IAiKnowledgeBaseService {
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
boolean result = baseMapper.deleteByIds(ids) > 0;
for(Long knowledgeBaseId:ids){
@ -393,7 +391,6 @@ public class AiKnowledgeBaseServiceImpl implements IAiKnowledgeBaseService {
@Transactional(rollbackFor = Exception.class)
public Boolean deleteKnowledgeContentWithValidByIds(Long knowledgeBaseId,Collection<Long> knowledgeContentIds, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
aiContentFragmentMapper.delete(new QueryWrapper<AiContentFragment>().in("content_id", knowledgeContentIds));

@ -115,7 +115,6 @@ public class AiKnowledgeBaseTypeServiceImpl implements IAiKnowledgeBaseTypeServi
*
*/
private void validEntityBeforeSave(AiKnowledgeBaseType entity) {
//TODO 做一些数据校验,如唯一约束
}
/**
@ -128,7 +127,6 @@ public class AiKnowledgeBaseTypeServiceImpl implements IAiKnowledgeBaseTypeServi
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;

@ -143,7 +143,6 @@ public class AiKnowledgeContentServiceImpl implements IAiKnowledgeContentService
*
*/
private void validEntityBeforeSave(AiKnowledgeContent entity){
//TODO 做一些数据校验,如唯一约束
}
/**
@ -156,7 +155,6 @@ public class AiKnowledgeContentServiceImpl implements IAiKnowledgeContentService
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}

@ -200,7 +200,6 @@ public class AiModelServiceImpl implements IAiModelService {
validEntityBeforeSave(update);
String apiKey = update.getApiKey();
String apiSecret = update.getApiSecret();
//todo:前端显示什么,如何修改
if (StringUtils.isNotEmpty(apiKey)) {
String encryptApiKey = EncryptUtils.encryptByBase64(update.getApiKey());
// String decryptApiKey = EncryptUtils.decryptByBase64(encryptApiKey);
@ -219,7 +218,6 @@ public class AiModelServiceImpl implements IAiModelService {
*
*/
private void validEntityBeforeSave(AiModel entity) {
//TODO 做一些数据校验,如唯一约束
}
/**
@ -232,7 +230,6 @@ public class AiModelServiceImpl implements IAiModelService {
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}

@ -117,7 +117,6 @@ public class AiPlatformServiceImpl implements IAiPlatformService {
*
*/
private void validEntityBeforeSave(AiPlatform entity){
//TODO 做一些数据校验,如唯一约束
}
/**
@ -130,7 +129,6 @@ public class AiPlatformServiceImpl implements IAiPlatformService {
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}

@ -134,7 +134,6 @@ public class AiSqlTableServiceImpl implements IAiSqlTableService {
*
*/
private void validEntityBeforeSave(AiSqlTable entity) {
//TODO 做一些数据校验,如唯一约束
}
/**
@ -147,7 +146,6 @@ public class AiSqlTableServiceImpl implements IAiSqlTableService {
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
@ -247,7 +245,11 @@ public class AiSqlTableServiceImpl implements IAiSqlTableService {
getTableSchema(dbSchemaJson, aiSqlTableList);
return baseMapper.insertBatch(aiSqlTableList);
for(AiSqlTable toInsertedTable:aiSqlTableList){
baseMapper.insert(toInsertedTable);
}
return true;
// return baseMapper.insertBatch(aiSqlTableList);
}

@ -123,7 +123,6 @@ public class AiTokenUsageServiceImpl implements IAiTokenUsageService {
*
*/
private void validEntityBeforeSave(AiTokenUsage entity){
//TODO 做一些数据校验,如唯一约束
}
/**
@ -136,7 +135,6 @@ public class AiTokenUsageServiceImpl implements IAiTokenUsageService {
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}

Loading…
Cancel
Save