Commit 3ca1d187 by WeiCong

优化简单分页查询请求

优化分页查询响应返回页号处理:由noui层记录和返回页号
parent a1e20ac0
...@@ -80,12 +80,8 @@ public class Alias { ...@@ -80,12 +80,8 @@ public class Alias {
this.revertRel = revertRel; this.revertRel = revertRel;
} }
public String getPrimaryLstPth() { public List<String> getLstPth() {
if (lstPths.isEmpty()) { return lstPths;
return null;
} else {
return lstPths.get(0);
}
} }
public boolean isSingleLst() { public boolean isSingleLst() {
......
...@@ -12,6 +12,7 @@ import org.sss.presentation.noui.api.exception.NoUiException; ...@@ -12,6 +12,7 @@ import org.sss.presentation.noui.api.exception.NoUiException;
import org.sss.presentation.noui.common.Constants; import org.sss.presentation.noui.common.Constants;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -139,18 +140,44 @@ public abstract class AbstractCache implements CacheController { ...@@ -139,18 +140,44 @@ public abstract class AbstractCache implements CacheController {
@Override @Override
public void prepareReadset(IModuleList moduleList) { public void prepareReadset(IModuleList moduleList) {
Map<String, Map<String, Integer>> paginationCache = (Map<String, Map<String, Integer>>) paginationMap.get(); Map<String, Map<String, Integer>> paginationCache = (Map<String, Map<String, Integer>>) paginationMap.get();
if (paginationCache == null) if (paginationCache == null || paginationCache.isEmpty()){
return; return;
Map<String, Integer> paginationItem = paginationCache.remove(moduleList.getUrl()); }
if (paginationCache.size() == 0) Map<String, Integer> paginationItem = paginationCache.get(moduleList.getUrl());
paginationMap.remove(); if (paginationItem == null || paginationItem.isEmpty()){
if (paginationItem == null)
return; return;
}
moduleList.setPageSize(paginationItem.get(Constants.PAGINATION_PAGESIZE)); moduleList.setPageSize(paginationItem.get(Constants.PAGINATION_PAGESIZE));
moduleList.setPage(paginationItem.get(Constants.PAGINATION_INDEX)); moduleList.setPage(paginationItem.get(Constants.PAGINATION_INDEX));
} }
protected abstract Object doCacheRead(String key); protected abstract Object doCacheRead(String key);
protected abstract void doCacheWrite(String key, Object lst, long keepAlive); protected abstract void doCacheWrite(String key, Object lst, long keepAlive);
public static Map<String,Object> getPageInfo(IModuleList moduleList) {
Map<String, Map<String, Integer>> paginationCache = (Map<String, Map<String, Integer>>) paginationMap.get();
if (paginationCache == null || paginationCache.isEmpty()){
return null;
}
Map<String, Integer> paginationItem = paginationCache.remove(moduleList.getUrl());
if (paginationCache.size() == 0){
paginationMap.remove();
}
if (paginationItem == null || paginationItem.isEmpty()){
return null;
}
Map<String, Object> paginationInfo = new HashMap<>();
int total = moduleList.fullSize();
int index = paginationItem.get(Constants.PAGINATION_INDEX);
int pageSize=paginationItem.get(Constants.PAGINATION_PAGESIZE);
if (total < pageSize * index) {
index = (total % pageSize!=0) ? (total / pageSize + 1) : total / pageSize;
}
paginationInfo.put(Constants.PAGINATION_TOTAL, total);
paginationInfo.put(Constants.PAGINATION_INDEX, index);
return paginationInfo;
}
} }
...@@ -19,6 +19,7 @@ import org.sss.presentation.noui.api.response.ErrorCodes; ...@@ -19,6 +19,7 @@ import org.sss.presentation.noui.api.response.ErrorCodes;
import org.sss.presentation.noui.api.response.NoUiVersion; import org.sss.presentation.noui.api.response.NoUiVersion;
import org.sss.presentation.noui.api.response.Result; import org.sss.presentation.noui.api.response.Result;
import org.sss.presentation.noui.api.response.ResultUtil; import org.sss.presentation.noui.api.response.ResultUtil;
import org.sss.presentation.noui.cache.AbstractCache;
import org.sss.presentation.noui.common.Constants; import org.sss.presentation.noui.common.Constants;
import org.sss.presentation.noui.context.NoUiContext; import org.sss.presentation.noui.context.NoUiContext;
import org.sss.presentation.noui.context.NoUiContextManager; import org.sss.presentation.noui.context.NoUiContextManager;
...@@ -223,8 +224,9 @@ public abstract class AbstractCommonController { ...@@ -223,8 +224,9 @@ public abstract class AbstractCommonController {
String aliasActionUrl = alias.getAliasActionUrl(); String aliasActionUrl = alias.getAliasActionUrl();
String actionUrl = alias.getRel().get(aliasActionUrl); String actionUrl = alias.getRel().get(aliasActionUrl);
IBaseObject baseObject = context.getSession().getBaseObject(context.getRoot(), actionUrl); IBaseObject baseObject = context.getSession().getBaseObject(context.getRoot(), actionUrl);
if (null == baseObject) if (null == baseObject){
throw new NoUiException("onClickUrl :" + actionUrl + " is not exsit"); throw new NoUiException("onClickUrl :" + actionUrl + " is not exsit");
}
return baseObject; return baseObject;
} }
...@@ -234,12 +236,16 @@ public abstract class AbstractCommonController { ...@@ -234,12 +236,16 @@ public abstract class AbstractCommonController {
item.put(Constants.DATA, lst); item.put(Constants.DATA, lst);
if (noUiRequest.isSelByPagination()) { if (noUiRequest.isSelByPagination()) {
//分页信息 //分页信息
int total = moduleList.fullSize(); /*int total = moduleList.fullSize();
int index = moduleList.getPage(); int index = moduleList.getPage();
Map<String, Object> pagination = new HashMap<>(); Map<String, Object> pagination = new HashMap<>();
pagination.put(Constants.PAGINATION_TOTAL, total); pagination.put(Constants.PAGINATION_TOTAL, total);
pagination.put(Constants.PAGINATION_INDEX, index); pagination.put(Constants.PAGINATION_INDEX, index);
item.put(Constants.PAGINATION, pagination); item.put(Constants.PAGINATION, pagination);*/
Map<String, Object> paginationInfo =AbstractCache.getPageInfo(moduleList);
if(paginationInfo!=null){
item.put(Constants.PAGINATION, paginationInfo);
}
} }
if (alias.isSingleLst()) { if (alias.isSingleLst()) {
dataMap.put(Constants.SIGNLE_LST, item); dataMap.put(Constants.SIGNLE_LST, item);
......
...@@ -4,7 +4,6 @@ import log.Log; ...@@ -4,7 +4,6 @@ import log.Log;
import log.LogFactory; import log.LogFactory;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.util.Assert;
import org.sss.common.impl.StreamImpl; import org.sss.common.impl.StreamImpl;
import org.sss.common.model.*; import org.sss.common.model.*;
import org.sss.module.pojo.AbstractPOJOModuleSession; import org.sss.module.pojo.AbstractPOJOModuleSession;
...@@ -76,8 +75,10 @@ public class NoUiPresentationUtil { ...@@ -76,8 +75,10 @@ public class NoUiPresentationUtil {
//处理分页信息 //处理分页信息
Map<String, ?> paginationMap = request.getPaginationMap(); Map<String, ?> paginationMap = request.getPaginationMap();
if (paginationMap.containsKey(Constants.PAGINATION_INDEX) && paginationMap.containsKey(Constants.PAGINATION_PAGESIZE)) { if (paginationMap.containsKey(Constants.PAGINATION_INDEX) && paginationMap.containsKey(Constants.PAGINATION_PAGESIZE)) {
String primaryLstPth = alias.getPrimaryLstPth(); String index = paginationMap.get(Constants.PAGINATION_INDEX) + "";
Assert.hasText(primaryLstPth, alias.getAliasActionUrl() + "请求的list模型路径未知"); String pageSize = paginationMap.get(Constants.PAGINATION_PAGESIZE) + "";
List<String> lstPth = alias.getLstPth();
for (String primaryLstPth : lstPth) {
IBaseObject baseObject = context.getSession().getBaseObject(context.getRoot(), primaryLstPth); IBaseObject baseObject = context.getSession().getBaseObject(context.getRoot(), primaryLstPth);
if (null == baseObject) { if (null == baseObject) {
throw new NoUiException("not found url :" + primaryLstPth); throw new NoUiException("not found url :" + primaryLstPth);
...@@ -87,9 +88,10 @@ public class NoUiPresentationUtil { ...@@ -87,9 +88,10 @@ public class NoUiPresentationUtil {
} }
IModuleList moduleList = (IModuleList) baseObject; IModuleList moduleList = (IModuleList) baseObject;
HashMap<String, Integer> tmp = new HashMap<String, Integer>(); HashMap<String, Integer> tmp = new HashMap<String, Integer>();
tmp.put(Constants.PAGINATION_INDEX, Integer.parseInt(paginationMap.get(Constants.PAGINATION_INDEX) + "")); tmp.put(Constants.PAGINATION_INDEX, Integer.parseInt(index));
tmp.put(Constants.PAGINATION_PAGESIZE, Integer.parseInt(paginationMap.get(Constants.PAGINATION_PAGESIZE) + "")); tmp.put(Constants.PAGINATION_PAGESIZE, Integer.parseInt(pageSize));
putPaginationCache(tmp, moduleList); putPaginationCache(tmp, moduleList);
}
} else { } else {
for (String aliasKey : paginationMap.keySet()) { for (String aliasKey : paginationMap.keySet()) {
String url = alias.getRelPath(aliasKey); String url = alias.getRelPath(aliasKey);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment