Browse Source

fix:大模型sql执行接口

zhongwei
haungxing 5 months ago
parent
commit
948000e500
  1. 59
      hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/datasource/service/DataSourceService.java
  2. 11
      hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/interactive/controller/HznlmInteractiveController.java
  3. 3
      hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/interactive/dto/AuthDataDTO.java

59
hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/datasource/service/DataSourceService.java

@ -45,33 +45,44 @@ public class DataSourceService {
}); });
String sql = sqlVO.getSql(); String sql = sqlVO.getSql();
String userAuthDataSQL = userAuthDataService.getUserAuthDataSQL(Long.parseLong(sqlVO.getUserId())); String userAuthDataSQL = userAuthDataService.getUserAuthDataSQL(Long.parseLong(sqlVO.getUserId()));
List<Map<String,String>> tempViewList = Lists.newArrayList();
try {
for (TableAuthVO tableAuthVO : sqlVO.getTableAuthVOList()) { for (TableAuthVO tableAuthVO : sqlVO.getTableAuthVOList()) {
// 创建视图语句 String tableSubStr = "(SELECT * FROM " + tableAuthVO.getTableName() + " where" + userAuthDataSQL +") temp";
String viewName = "V_TEMP_" + UUID.randomUUID().toString().replace("-", ""); sql = sql.replace(tableAuthVO.getTableName(),tableSubStr);
String createView = "CREATE VIEW " + viewName + " AS SELECT * FROM " + tableAuthVO.getTableName() + " where " + userAuthDataSQL;
this.updateOnSpecificDataSource(createView,tableAuthVO.getDatasourceName());
Map<String,String> viewMap = new HashMap(2);
viewMap.put("datasource",tableAuthVO.getDatasourceName());
viewMap.put("viewName",viewName);
tempViewList.add(viewMap);
sql = sql.replace(tableAuthVO.getTableName(),viewName);
} }
log.info("执行sql:{}",sql);
return this.queryListOnSpecificDataSource(sql, sqlVO.getTableAuthVOList().get(0).getDatasourceName()); return this.queryListOnSpecificDataSource(sql, sqlVO.getTableAuthVOList().get(0).getDatasourceName());
} // 过滤更新、删除语句
catch(Exception e) { // Assert.isTrue(!DataSourceService.isUpdateOrDelete(sqlVO.getSql()),() -> {
log.error("An Error occurred!",e); // throw new ServiceException("执行sql语句包含更新/删除操作,执行失败!");
throw new ServiceException("sql执行失败!"); // });
} // String sql = sqlVO.getSql();
finally { // String userAuthDataSQL = userAuthDataService.getUserAuthDataSQL(Long.parseLong(sqlVO.getUserId()));
if(CollectionUtil.isNotEmpty(tempViewList)) { // List<Map<String,String>> tempViewList = Lists.newArrayList();
tempViewList.forEach(viewMap -> { // try {
this.updateOnSpecificDataSource("DROP VIEW IF EXISTS `" + viewMap.get("viewName")+"`;",viewMap.get("datasource")); // for (TableAuthVO tableAuthVO : sqlVO.getTableAuthVOList()) {
}); // // 创建视图语句
} // String viewName = "V_TEMP_" + UUID.randomUUID().toString().replace("-", "");
} // String createView = "CREATE VIEW " + viewName + " AS SELECT * FROM " + tableAuthVO.getTableName() + " where " + userAuthDataSQL;
// this.updateOnSpecificDataSource(createView,tableAuthVO.getDatasourceName());
// Map<String,String> viewMap = new HashMap(2);
// viewMap.put("datasource",tableAuthVO.getDatasourceName());
// viewMap.put("viewName",viewName);
// tempViewList.add(viewMap);
// sql = sql.replace(tableAuthVO.getTableName(),viewName);
// }
// log.info("执行sql:{}",sql);
// return this.queryListOnSpecificDataSource(sql, sqlVO.getTableAuthVOList().get(0).getDatasourceName());
// }
// catch(Exception e) {
// log.error("An Error occurred!",e);
// throw new ServiceException("sql执行失败!");
// }
// finally {
// if(CollectionUtil.isNotEmpty(tempViewList)) {
// tempViewList.forEach(viewMap -> {
// this.updateOnSpecificDataSource("DROP VIEW IF EXISTS `" + viewMap.get("viewName")+"`;",viewMap.get("datasource"));
// });
// }
// }
} }
/** /**

11
hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/interactive/controller/HznlmInteractiveController.java

@ -2,6 +2,8 @@ package com.hnac.hzims.bigmodel.interactive.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.hnac.hzims.bigmodel.BigModelConstants; import com.hnac.hzims.bigmodel.BigModelConstants;
import com.hnac.hzims.bigmodel.datasource.service.DataSourceService;
import com.hnac.hzims.bigmodel.datasource.vo.SqlVO;
import com.hnac.hzims.bigmodel.interactive.dto.AuthDataDTO; import com.hnac.hzims.bigmodel.interactive.dto.AuthDataDTO;
import com.hnac.hzims.bigmodel.interactive.req.ModelFunctionReq; import com.hnac.hzims.bigmodel.interactive.req.ModelFunctionReq;
import com.hnac.hzims.bigmodel.interactive.service.IHznlmInteractiveService; import com.hnac.hzims.bigmodel.interactive.service.IHznlmInteractiveService;
@ -17,6 +19,7 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @Author: huangxing * @Author: huangxing
@ -30,6 +33,7 @@ import java.util.List;
public class HznlmInteractiveController { public class HznlmInteractiveController {
private final IHznlmInteractiveService interactiveService; private final IHznlmInteractiveService interactiveService;
private final DataSourceService dataSourceService;
@PostMapping(value = "/get_auth_data") @PostMapping(value = "/get_auth_data")
@ApiOperation("获取鉴权数据") @ApiOperation("获取鉴权数据")
@ -44,4 +48,11 @@ public class HznlmInteractiveController {
public R<ExtraVO> resolve(@RequestBody ModelFunctionReq req) { public R<ExtraVO> resolve(@RequestBody ModelFunctionReq req) {
return R.data(interactiveService.resolve(req)); return R.data(interactiveService.resolve(req));
} }
@PostMapping("/execute_query")
@ApiOperation("执行大模型sql")
@ApiOperationSupport(order = 1)
public R<List<Map<String, Object>>> executeQuery(@RequestBody @Valid SqlVO sqlVO) {
return R.data(dataSourceService.queryListOnSpecificDataSource(sqlVO));
}
} }

3
hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/interactive/dto/AuthDataDTO.java

@ -19,12 +19,11 @@ import java.io.Serializable;
@EqualsAndHashCode @EqualsAndHashCode
public class AuthDataDTO implements Serializable { public class AuthDataDTO implements Serializable {
@JsonProperty("chat_id") @JsonProperty("chatId")
@ApiModelProperty("问答ID,用于获取前端发起问答传入缓存中数据") @ApiModelProperty("问答ID,用于获取前端发起问答传入缓存中数据")
@NotBlank @NotBlank
private String sessionId; private String sessionId;
@JsonProperty("user_id")
@ApiModelProperty("提问用户ID") @ApiModelProperty("提问用户ID")
@NotBlank @NotBlank
private String userId; private String userId;

Loading…
Cancel
Save