package com.vci.web.controller;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.vci.corba.common.PLException;
|
import com.vci.corba.query.data.KV;
|
import com.vci.starter.web.exception.VciBaseException;
|
import com.vci.starter.web.pagemodel.BaseResult;
|
import com.vci.web.util.PlatformClientUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* Description:利用sql转化表格的控制器
|
*
|
* @author: LiHang
|
* @date: Created on 2022/1/20
|
*/
|
@RestController()
|
@RequestMapping("/sqlController")
|
public class Sql2TableController {
|
@Autowired
|
private PlatformClientUtil platformClientUtil;
|
|
@GetMapping("/excute")
|
public BaseResult excute(String sql,String oid){
|
//返回结果集,分为key和value。key是列名。
|
if (sql == null){
|
throw new VciBaseException("查询语句为空,请检查后再试");
|
}else if (sql.contains("sql:")){
|
sql = sql.replace("sql:","");
|
}
|
|
if (oid == null && sql.contains("?")){
|
throw new VciBaseException("where语句没有赋值,请检查后重试");
|
}else if (oid != null && sql.contains("?")){
|
sql = sql.replace("?","'" + oid + "'");
|
}
|
Set<TableDisplay> columns = new HashSet<>();
|
List<JSONObject> valueList = new ArrayList<>();
|
KV[][] keyValues = new KV[0][0];
|
try {
|
keyValues = platformClientUtil.getQueryService().queryBySql(sql);
|
} catch ( PLException vciError) {
|
vciError.printStackTrace();
|
return BaseResult.fail("sql语句有问题,请检查后重试");
|
}
|
if (keyValues.length > 0){
|
//1.第一层数组是该sql的查询结果有多少条
|
for (KV kv : keyValues[0]) {
|
TableDisplay column = new TableDisplay();
|
column.setField(kv.key);
|
column.setTitle(kv.key);
|
columns.add(column);
|
}
|
for (KV[] kvs : keyValues) {
|
//2.第二层数组是该行数据的具体列名和数据。
|
Map<String, Object> dataMap = Arrays.stream(kvs).collect(Collectors.toMap(k -> k.key, v -> v.value));
|
JSONObject json = new JSONObject(dataMap);
|
valueList.add(json);
|
}
|
}
|
BaseResult baseResult = new BaseResult();
|
baseResult.setSuccess(true);
|
baseResult.setData(valueList);
|
baseResult.setObj(columns);
|
return baseResult;
|
}
|
|
class TableDisplay {
|
private String field;
|
private String title;
|
|
public String getField() {
|
return field;
|
}
|
|
public void setField(String field) {
|
this.field = field;
|
}
|
|
public String getTitle() {
|
return title;
|
}
|
|
public void setTitle(String title) {
|
this.title = title;
|
}
|
}
|
}
|