ftl页面
<@credit.activity noActivityId=[(vo.activity.id)!] limit=[7] ;e,status>
<#if tdqyhnum=1>
<dt><a href="${e.url!''}"><img src="${resourceDomain}${e.shortImage!''}" alt=""></a><span><a href="${e.url!''}">${e.title!''}</a></span>${e.description!''}</dt>
<#else>
<dd><span><#if e.expireTime??>${e.expireTime?string("yyyy-MM-dd")}<#else>长期有效</#if></span><a href="${e.url!''}" title="">${e.title!''}</a></dd>
</#if>
<#assign tdqyhnum=tdqyhnum+1>
</@credit.activity>
<@credit.activity noActivityId=[(vo.activity.id)!] limit=[7] ;e,status>表明 调用credit标签中的activity方法 传递的参数是noActivityId
于是找到了
<#include 'common.ftl'>
<#-- 信用卡 -->
<#macro credit
creditId=[] <#--信用卡Id。列出指定信用卡[888, 889, 901]的文档-->
noCreditId=[]
flag=[] <#--自定义属性。头条:h 推荐:c 幻灯:f 特荐:a 滚动:s 加粗: b 图片: p 跳转: j。默认列出全部。例如:列出 头条和幻灯 ['h', 'c']-->
noFlag=[] <#--自定义属性。不包含集合中的属性。-->
tagId=[] <#--指定Tag的文档。例如:指定一个或多个tag的文档。例如:列出[1, 3]的文档-->
keyword=[] <#--指定包含在集合中的关键字的文档。['广发', '金卡']-->
orderBy='id desc' <#--排序方式-->
random=false
limit=[] <#--行数 [0, 10]或[10]都是从列出前10条数据-->
screeningId=[]
bankId=[]
isApply=2
regionId=[]
activityId=[]
>
<#local page=taglib.ftlCreditCreditcardService.findPage(creditId,noCreditId,flag,noFlag,tagId,keyword,orderBy,random,limit,screeningId,bankId,isApply,regionId,activityId)>
<#if pagination?? && pagination>
${(inner.pageStatus.setPageSize(pageSize))!}
${(inner.pageStatus.setPageCount(page.totalPages))!}
${(inner.pageStatus.setPage(page))!}
</#if>
<#list page.result as e>
<#nested e, iteratorStatus(e_index, page.result?size)><#t>
</#list>
</#macro>
<#-- 优惠活动 -->
<#macro activity
activityId=[] <#--信用卡Id。列出指定信用卡[888, 889, 901]的文档-->
noActivityId=[]
flag=[] <#--自定义属性。头条:h 推荐:c 幻灯:f 特荐:a 滚动:s 加粗: b 图片: p 跳转: j。默认列出全部。例如:列出 头条和幻灯 ['h', 'c']-->
noFlag=[]
tagId=[] <#--自定义属性。不包含集合中的属性。-->
keyword=[] <#--指定包含在集合中的关键字的文档。['广发', '金卡']-->
orderBy='id desc' <#--排序方式-->
random=false
limit=[] <#--行数 [0, 10]或[10]都是从列出前10条数据-->
brandId=[] <#--商户id-->
bankId=[] <#--银行id-->
screeningId=[] <#--塞选条件id-->
regionId=[] <#--城市id-->
creditCardId=[]
isSelf=2
>
<#local page=taglib.ftlCreditActivityService.findPage(activityId,noActivityId,flag,noFlag,tagId,keyword,orderBy,random,limit,brandId,bankId,screeningId,regionId,creditCardId,isSelf)>
<#if pagination?? && pagination>
${(inner.pageStatus.setPageSize(pageSize))!}
${(inner.pageStatus.setPageCount(page.totalPages))!}
${(inner.pageStatus.setPage(page))!}
</#if>
<#list page.result as e>
<#nested e, iteratorStatus(e_index, page.result?size)><#t>
</#list>
</#macro>
标签调用controller中的findpage方法 于是去找 ftlCreditActivityService
于是找到了
@Service
public class FtlCreditActivityService implements FtlService {
private static final Logger LOG = LoggerFactory.getLogger(FtlCreditActivityService.class);
@Autowired
CreditActivityApiService creditActivityApiService;
public Page<CreditActivityRestResult> findPage(List<Number> activityId, List<Number> noActivityId,
List<String> flag, List<String> noFlag, List<Number> tagId, List<String> keyword, String orderBy,
Boolean random, List<Number> limit, List<Number> storeId, List<Number> bankId, List<Number> screeningId,
List<Number> regionId, List<Number> creditcardId, Long isSelf) throws Exception {
CreditActivityParam creditActivityParam = new CreditActivityParam(activityId, noActivityId, flag, noFlag,
tagId, keyword, orderBy, random, limit, storeId, bankId, screeningId, regionId, creditcardId, isSelf);
@SuppressWarnings("unchecked")
List<CreditActivityRestResult> list = (List<CreditActivityRestResult>) creditActivityApiService.findList(
creditActivityParam).getDefaultModel();
Page<CreditActivityRestResult> page = new Page<CreditActivityRestResult>();
page.setResult(list);
return page;
}
}
用CreditActivityRestResult 来封装各类参数
调用findList
--solr部分
@Service
public class CreditActivityApiService {
@Autowired
HttpSolrServer httpSolrServer;
@Autowired
ActivityDao activityDao;
public Result findList(CreditActivityParam creditActivityParam) {
// 存在ID的情况,只看ID 的值,忽略其他
Result result = CreditApiResult.getInstance();
List<CreditActivityRestResult> activitysort = null;
if (creditActivityParam.getActivityId() != null && !creditActivityParam.getActivityId().isEmpty()) {
activitysort = findByDb(creditActivityParam.getActivityId());
} else {
try {
activitysort = findBySolr(creditActivityParam);
} catch (SolrServerException e) {
return new CreditApiResult(false);
}
}
result.setDefaultModel(activitysort);
result.setResultCode(new ResultCode(ErrorCode.SUCCESS));
return result;
}
private List<CreditActivityRestResult> findByDb(List<Number> activityId) {
List<CreditActivityRestResult> list = new CreditActivityRestResult().getRestResults(activityDao
.findByIds(activityId));
// 重新排序
return sortById(activityId, list);
}
private List<CreditActivityRestResult> findBySolr(CreditActivityParam creditActivityParam)
throws SolrServerException {
SolrQuery solrQuery = getSolrQuery(creditActivityParam);
QueryResponse res = httpSolrServer.query(solrQuery);
List<Number> ids = getIdsFromRes(res);
if (ids == null || ids.isEmpty()) {
return new ArrayList<CreditActivityRestResult>();
}
List<CreditActivityRestResult> creditActivityRestResults = new CreditActivityRestResult()
.getRestResults(activityDao.findByIds(getIdsFromRes(res)));
return sortById(ids, creditActivityRestResults);
}
private List<CreditActivityRestResult> sortById(List<Number> ids, List<CreditActivityRestResult> creditActivitys) {
List<CreditActivityRestResult> activitysort = new ArrayList<CreditActivityRestResult>();
for (Number id : ids) {
for (CreditActivityRestResult creditActivityRestResult : creditActivitys) {
if (creditActivityRestResult.getId().equals(id)) {
activitysort.add(creditActivityRestResult);
}
}
}
return activitysort;
}
private List<Number> getIdsFromRes(QueryResponse res) {
List<Number> ids = new ArrayList<Number>();
SolrDocumentList docs = res.getResults();
for (SolrDocument solrDocument : docs) {
ids.add((Number) solrDocument.get("id"));
}
return ids;
}
private SolrQuery getSolrQuery(CreditActivityParam creditActivityParam) {
SolrQuery solrQuery = new SolrQuery();
solrQuery.setQuery("*:*");
solrQuery.addFilterQuery("+modelType:" + AppConstant.CREDIT_CONSTANT + "_"
+ AppConstant.CREDIT_ACTIVITY_CONSTANT);
SolrUtil.addStringToQuery(solrQuery,
SolrUtil.buildListLike(creditActivityParam.getKeyword(), "queryFields", "+"));
SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.buildList(creditActivityParam.getActivityId(), "id", "+"));
SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.buildList(creditActivityParam.getNoActivityId(), "id", "-"));
SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.buildList(creditActivityParam.getTagId(), "tagId", "+"));
SolrUtil.addStringToFilterQuery(solrQuery,
SolrUtil.buildList(creditActivityParam.getRegionId(), "regionId", "+"));
SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.buildList(creditActivityParam.getFlag(), "flag", "+"));
SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.buildList(creditActivityParam.getNoFlag(), "flag", "-"));
SolrUtil.addStringToFilterQuery(solrQuery,
SolrUtil.buildList(creditActivityParam.getScreeningId(), "screening", "+"));
SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.buildList(creditActivityParam.getBankId(), "bankId", "+"));
SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.buildList(creditActivityParam.getBrandId(), "brandId", "+"));
SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.build(0L, "expired", "+"));
if (Flag.TRUE.getValue().equals(creditActivityParam.getIsSelf())) {
SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.build(Flag.TRUE.getValue(), "isSelf", "+"));
} else if (Flag.FALSE.getValue().equals(creditActivityParam.getIsSelf())) {
SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.build(Flag.FALSE.getValue(), "isSelf", "+"));
}
SolrUtil.addStringToFilterQuery(solrQuery,
SolrUtil.buildList(creditActivityParam.getCreditcardId(), "creditcardId", "+"));
SolrUtil.processLimit(solrQuery, creditActivityParam.getLimit());
SolrUtil.processRandomSort(solrQuery, creditActivityParam.getRandom());
SolrUtil.processOrderByQueryString(solrQuery, creditActivityParam.getOrderBy(), "id");
solrQuery.setFields("id");
return solrQuery;
}
}
其中