1024,废话不多说,直接上代码!!!
public R<GoldNetPage<ReceiptCheckInfoVo>> receiptChecks(CommonQueryParam param) {
GoldNetUser user = AuthUtil.getUser();
if (Objects.isNull(user)) {
return R.fail("用户信息为空");
}
List<Map<String, Object>> params = param.getParam();
String purchaserId = StrategyUtil.getNameValue(param.getParam(), "purchaserId");
if (param.getParam() != null) {
for (Map<String, Object> data : param.getParam()) {
if (Func.isEmpty(data.get("name")) || Func.isEmpty(data.get("value")) || Func.isEmpty(data.get("nameType"))) {
continue;
}
String fieldName = data.get("name").toString();
if ("purchaserId".equals(fieldName)) {
data.put("value", null);
}
}
}
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.size(1000);
sourceBuilder.trackTotalHits(true);
SearchRequest searchRequest = new SearchRequest(ES_RECEIPT_INDEX);
searchRequest.scroll(TimeValue.timeValueMinutes(1L));
BoolQueryBuilder queryBuilder = commonService.queryBuilder(params, user);
queryBuilder.must(QueryBuilders.termQuery("supplierCode.keyword", user.getEnterpriseId()));
queryBuilder.must(QueryBuilders.termQuery("enterpriseId.keyword", purchaserId));
sourceBuilder.query(queryBuilder);
sourceBuilder.sort("createTime", SortOrder.DESC);
searchRequest.source(sourceBuilder);
log.info("receipt checks queryBuilder is:{}", JSONObject.toJSONString(queryBuilder));
SearchResponse response = null;
try {
response = client.search(searchRequest, RequestOptions.DEFAULT);
} catch (Exception e) {
log.warn("验收异议单条件查询索引{}时出错", ES_RECEIPT_INDEX);
log.warn("验收异议单条件查询索引出错:", e);
}
SearchHit[] hits = response.getHits().getHits();
RestStatus status = response.status();
if (status.getStatus() != 200) {
log.info("验收异议单查询失败");
return R.fail("验收异议单查询失败");
}
String scrollId = response.getScrollId();
List<Map<String, Object>> sourceList = new ArrayList<>();
for (SearchHit hit : hits) {
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
sourceList.add(sourceAsMap);
}
log.info("receipt checks sourceList size is:{}", sourceList.size());
while (true) {
SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
scrollRequest.scroll(TimeValue.timeValueMinutes(1L));
SearchResponse scrollResp = null;
try {
scrollResp = client.scroll(scrollRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
throw new RuntimeException(e);
}
SearchHit[] searchHits = scrollResp.getHits().getHits();
if (searchHits != null && searchHits.length > 0) {
for (SearchHit hit : searchHits) {
sourceList.add(hit.getSourceAsMap());
}
} else {
break;
}
}
ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
clearScrollRequest.addScrollId(scrollId);
ClearScrollResponse clearScrollResponse = null;
try {
clearScrollResponse = client.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
log.error("删除scroll异常:", e);
throw new RuntimeException(e);
}
boolean succeeded = clearScrollResponse.isSucceeded();
log.info("删除scrollId:{}", succeeded);
log.info("查询总个数:{}", sourceList.size());
List<Map<String, Object>> retMapList = new ArrayList<>();
List<Map<String, Object>> receiptDetailsMapList = new ArrayList<>();
for (Map<String, Object> map : sourceList) {
if (Func.isEmpty(map.get("receiptDetails"))) {
continue;
}
receiptDetailsMapList.add(map);
}
for (Map<String, Object> map : receiptDetailsMapList) {
List<Map<String, Object>> recepitList = (List<Map<String, Object>>) map.get("receiptDetails");
for (Map<String, Object> receipt : recepitList) {
if (!"3".equals(Func.toStr(receipt.get("checkStatus")))) {
continue;
}
Set<String> receiptMapKeys = receipt.keySet();
for (String receiptMapKey : receiptMapKeys) {
if (Func.isEmpty(map.get(receiptMapKey))) {
map.put(receiptMapKey, receipt.get(receiptMapKey));
}
}
retMapList.add(map);
}
}
log.info("receipt checks retMapList size is:{}",retMapList.size());
List<Map<String, Object>> sortList = retMapList.stream().sorted((a, b) -> {
Long al = Func.toLong(Func.isNotEmpty(a.get("createTime")) ? a.get("createTime") : 0L);
Long bl = Func.toLong(Func.isNotEmpty(b.get("createTime")) ? b.get("createTime") : 0L);
return bl.compareTo(al);
}).collect(Collectors.toList());
GoldNetPage result = new GoldNetPage<>();
int current = param.getCurrent();
int size = param.getSize();
result.setCurrent(current);
result.setSize(size);
result.setTotal(sortList.size());
result.setRecords(sortList);
if (Func.isNotEmpty(sortList)) {
int pageFrom = (current - 1) * size;
int pageTo = current * size;
if (pageTo > retMapList.size()) {
result.setRecords(sortList.subList(pageFrom, sortList.size()));
} else {
result.setRecords(sortList.subList(pageFrom, pageTo));
}
}
return R.data(result);
}