All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.gitee.mingbaobaba.apijson.querycondition.query.template.ApiJsonQueryTemplate Maven / Gradle / Ivy

There is a newer version: v1.1.0
Show newest version
package io.gitee.mingbaobaba.apijson.querycondition.query.template;


import io.gitee.mingbaobaba.apijson.querycondition.query.conditions.ApiJsonPageInfo;
import io.gitee.mingbaobaba.apijson.querycondition.query.conditions.ApiJsonQuery;
import io.gitee.mingbaobaba.apijson.querycondition.query.dao.DwQueryDao;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 

查询模板工具

* * @author yingsheng.ye * @version 1.0.0 * @since 2023/6/20 5:46 */ @Slf4j public class ApiJsonQueryTemplate { /** * 数仓查询接口 */ private DwQueryDao dao; /** * 设置查询数仓实现 * * @param dao DwQueryDao */ public void setDao(DwQueryDao dao) { this.dao = dao; } /** * 查询列表服务 * * @param query 查询条件 * @param tClass 结果转换类 * @param 泛型 * @return List */ public List getList(ApiJsonQuery query, Class tClass) { return queryList(query, tClass); } /** * 查询列表服务 * * @param query 查询条件 * @param typeReference 结果转换类 * @param 泛型 * @return List */ public List getList(ApiJsonQuery query, TypeReference typeReference) { return queryList(query, typeReference); } /** * 查询列表服务 * * @param query 查询条件 * @param o 结果转换类 * @param 泛型 * @return List */ private List queryList(ApiJsonQuery query, Object o) { //数仓返回单次有最大限制,所以需要循环分次获取 List result = new ArrayList<>(); int limit = 2000; int page = 1; loopQueryPage(result, page, limit, query, o); return result; } /** * 查询列表 * * @param result 查询结果 * @param page 当前页 * @param limit 分页大小 * @param query 查询条件 * @param o 返回类型 * @param 泛型 */ public void loopQueryPage(List result, int page, int limit, ApiJsonQuery query, Object o) { ApiJsonPageInfo dwPageInfo = queryPageList(query, page, limit, o); result.addAll(dwPageInfo.getData()); if ((long) page * limit < dwPageInfo.getTotal()) { //循环调用 loopQueryPage(result, ++page, limit, query, o); } } /** * 查询一条数据 * * @param query 查询条件 * @param tClass 结果转换类 * @param 泛型 * @return T */ public T getOne(ApiJsonQuery query, Class tClass) { List list = queryList(query, tClass); if (CollectionUtils.isEmpty(list)) { return null; } Assert.isTrue(list.size() == 1, "期望返回一条数据,但是结果返回多条数据"); return list.get(0); } /** * 查询一条数据 * * @param query 查询条件 * @param typeReference 结果转换类 * @param 泛型 * @return T */ public T getOne(ApiJsonQuery query, TypeReference typeReference) { List list = queryList(query, typeReference); if (CollectionUtils.isEmpty(list)) { return null; } Assert.isTrue(list.size() == 1, "期望返回一条数据,但是结果返回多条数据"); return list.get(0); } /** * 查询统计数量 * * @param query 查询条件 * @return 条数 */ public Long count(ApiJsonQuery query) { Map params = new HashMap<>(16); params.put("@schema", query.getSchema()); params.put("total@", "/[]/total"); Map modelParams = new HashMap<>(16); modelParams.put(query.getTable(), query.getApiJsonParam()); //查询表中的所有数据 modelParams.put("query", 1); params.put("[]", modelParams); JSONObject data = resultToObject(dao.getData(params, query.getBiSigns())); return data.getLong("total"); } /** * 分页查询结果 * * @param query 查询条件 * @param page 当前页 * @param limit 分页条数 * @param tClass 转换类 * @param 泛型 * @return DwPageInfo */ public ApiJsonPageInfo getPageList(ApiJsonQuery query, Integer page, Integer limit, Class tClass) { return queryPageList(query, page, limit, tClass); } /** * 分页查询结果 * * @param query 查询条件 * @param page 当前页 * @param limit 分页条数 * @param typeReference 转换类 * @param 泛型 * @return DwPageInfo */ public ApiJsonPageInfo getPageList(ApiJsonQuery query, Integer page, Integer limit, TypeReference typeReference) { return queryPageList(query, page, limit, typeReference); } /** * 分页查询结果 * * @param query 查询条件 * @param page 当前页 * @param limit 分页条数 * @param o 转换类 * @param 泛型 * @return DwPageInfo */ private ApiJsonPageInfo queryPageList(ApiJsonQuery query, Integer page, Integer limit, Object o) { if (null == page || page < 1) { page = 1; } if (null == limit || limit < 1) { limit = 10; } Map params = new HashMap<>(16); params.put("@schema", query.getSchema()); params.put("total@", "/[]/total"); Map modelParams = new HashMap<>(16); modelParams.put(query.getTable(), query.getApiJsonParam()); //apiJson分页从0开始 int currentPage = page - 1; //查询表中的所有数据 modelParams.put("page", currentPage); modelParams.put("count", limit); modelParams.put("query", 2); params.put("[]", modelParams); JSONObject data = resultToObject(dao.getData(params, query.getBiSigns())); ApiJsonPageInfo dwPageInfo = new ApiJsonPageInfo<>(); dwPageInfo.setData(praseResultToList(query.getTable(), data, o)); dwPageInfo.setPage(page); dwPageInfo.setLimit(limit); dwPageInfo.setTotal(data.getLong("total")); return dwPageInfo; } /** * 结果转换 * * @param res 返回结果 * @return JSONObject */ private JSONObject resultToObject(String res) { return JSON.parseObject(res); } /** * 将结果转换为list * * @param table 表名 * @param data 数据 * @param o 类型 * @param Class * @return List */ @SuppressWarnings("unchecked") private List praseResultToList(String table, JSONObject data, Object o) { //解析结果转义 JSONArray jsonArray = data.getJSONArray("[]"); List list = new ArrayList<>(); if (!CollectionUtils.isEmpty(jsonArray)) { for (int i = 0; i < jsonArray.size(); i++) { JSONObject resultObj = jsonArray.getJSONObject(i).getJSONObject(table); //将结果转换成对象 if (o instanceof JSONObject) { list.add((T) o); }else if (o instanceof TypeReference) { TypeReference tTypeReference = (TypeReference) o; list.add(JSON.parseObject(JSON.toJSONString(resultObj), tTypeReference)); } else { Class tClass = (Class) o; list.add(JSON.parseObject(JSON.toJSONString(resultObj), tClass)); } } } return list; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy