指标库:原子指标新建时,右上方根据参数分页查询数据
This commit is contained in:
parent
c987d17ad5
commit
e0199799a0
@ -75,4 +75,11 @@ public class TargetController {
|
|||||||
result.put("columnList", tableColumnService.getColumnsByTableName(result.getString("tableName")));
|
result.put("columnList", tableColumnService.getColumnsByTableName(result.getString("tableName")));
|
||||||
return R.ok(result);
|
return R.ok(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "根据参数分页查询数据")
|
||||||
|
@PostMapping("/getDataByParam")
|
||||||
|
public R<Page<?>> getDataByParam(@RequestBody JSONObject params) {
|
||||||
|
Page<?> result = targetService.getDataByParam(params);
|
||||||
|
return R.ok(result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package iet.ustb.sf.service;
|
|||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import iet.ustb.sf.domain.Target;
|
import iet.ustb.sf.domain.Target;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
@ -23,4 +24,6 @@ public interface TargetService extends IService<Target> {
|
|||||||
void saveTarget(JSONObject params);
|
void saveTarget(JSONObject params);
|
||||||
|
|
||||||
JSONObject getDetailTarget(JSONObject params);
|
JSONObject getDetailTarget(JSONObject params);
|
||||||
|
|
||||||
|
Page<?> getDataByParam(JSONObject params);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package iet.ustb.sf.service.impl;
|
package iet.ustb.sf.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
@ -21,6 +22,8 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@ -348,6 +351,60 @@ public class TargetServiceImpl extends ServiceImpl<TargetMapper, Target>
|
|||||||
return getDetailTarget(optionList, target);
|
return getDetailTarget(optionList, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<?> getDataByParam(JSONObject params) {
|
||||||
|
String tableName = params.getString("tableName");
|
||||||
|
CheckUtils.checkTableName(tableName);
|
||||||
|
int pageIndex = Optional.ofNullable(params.getInteger("pageIndex")).orElse(1);
|
||||||
|
int pageSize = Optional.ofNullable(params.getInteger("pageSize")).orElse(10);
|
||||||
|
List<TargetOption> showList = params.getJSONArray("show").toJavaList(TargetOption.class);
|
||||||
|
|
||||||
|
String columns = showList.stream().map(TargetOption::getColumnName).collect(Collectors.joining(","));
|
||||||
|
CheckUtils.checkColumns(columns, tableName);
|
||||||
|
|
||||||
|
StringBuilder sql = new StringBuilder("SELECT " + columns + " FROM " + tableName);
|
||||||
|
StringBuilder whereSql = new StringBuilder(" WHERE ");
|
||||||
|
for (TargetOption option : showList) {
|
||||||
|
if (StringUtils.isEmpty(option.getVal())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int type = option.getType();
|
||||||
|
switch (type) {
|
||||||
|
case 1:
|
||||||
|
String[] times = option.getVal().split(",");
|
||||||
|
if (times.length == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
LocalDateTime end = LocalDateTime.parse(times[1]);
|
||||||
|
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||||
|
end = end.plusDays(1);
|
||||||
|
ThrowUtils.throwIf(times.length != 2, ErrorCode.PARAMS_ERROR, "时间范围输入错误!");
|
||||||
|
whereSql.append(option.getColumnName()).append(" >= ").append(times[0]).append("' and ")
|
||||||
|
.append(option.getColumnName()).append(" < ").append(end.format(dtf)).append("' and ");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
whereSql.append(getIsNullSql(option));
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
String[] nums = option.getVal().split(",");
|
||||||
|
ThrowUtils.throwIf(nums.length != 2, ErrorCode.PARAMS_ERROR, "范围条件请输入两个数值!");
|
||||||
|
double[] numbers = Arrays.stream(option.getVal().split(",")).mapToDouble(Double::parseDouble).toArray();
|
||||||
|
whereSql.append("CAST(").append(option.getColumnName()).append(" AS DOUBLE) ");
|
||||||
|
whereSql.append("between ").append(numbers[0]).append(" and ").append(numbers[1]).append(" and ");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
whereSql = new StringBuilder(whereSql.substring(0, whereSql.length() - 4));
|
||||||
|
sql.append(whereSql);
|
||||||
|
|
||||||
|
String countSql = "SELECT COUNT(1) FROM " + tableName + whereSql;
|
||||||
|
long total = SqlRunner.db().selectCount(countSql);
|
||||||
|
Page<Map<String, Object>> page = new Page<>(pageIndex, pageSize);
|
||||||
|
page.setTotal(total);
|
||||||
|
|
||||||
|
return SqlRunner.db().selectPage(page, String.valueOf(sql));
|
||||||
|
}
|
||||||
|
|
||||||
private JSONObject getDetailTarget(List<TargetOption> optionList, Target target) {
|
private JSONObject getDetailTarget(List<TargetOption> optionList, Target target) {
|
||||||
List<TargetOption> show = new ArrayList<>();
|
List<TargetOption> show = new ArrayList<>();
|
||||||
List<TargetOption> search = new ArrayList<>();
|
List<TargetOption> search = new ArrayList<>();
|
||||||
|
Loading…
Reference in New Issue
Block a user