// 创建条件
List<DBObject> pipeline = new ArrayList<>();
String lookupStr = "{\"$lookup\" : { \"from\" : \"risk_model_record\" , \"localField\" : \"riskId\" , \"foreignField\" : \"riskId\" , \"as\" : \"records\"}}";
DBObject lookup = (DBObject) JSON.parse(lookupStr);
String sortStr = "{ \"$sort\" : { \"createTime\" : -1,\"_id\" : -1}}";
DBObject sort = (DBObject) JSON.parse(sortStr);
String unwindStr = "{\"$unwind\" : {\"path\":\"$records\",\"preserveNullAndEmptyArrays\":true}}";
DBObject unwind = (DBObject) JSON.parse(unwindStr);
StringBuffer sb = new StringBuffer("{\"$match\":{$and:[");
boolean matched = false;
if (StringUtils.isNotBlank(param.getAppkey())) {
sb.append("{\"appkey\":{\"$eq\" :\"").append(param.getAppkey()).append("\"}},");
matched = true;
}
if (StringUtils.isNotBlank(param.getPlatformId())) {
sb.append("{\"platformId\":{\"$eq\" :\"").append(param.getPlatformId()).append("\"}},");
matched = true;
}
if (StringUtils.isNotBlank(param.getModelId())) {
sb.append("{\"modelId\":{\"$eq\" :\"").append(param.getModelId()).append("\"}},");
matched = true;
}
if (StringUtils.isNotBlank(param.getStart())) {
sb.append("{\"createTime\":{\"$gte\" :\"").append(param.getStart()).append("\"}},");
matched = true;
}
if (StringUtils.isNotBlank(param.getEnd())) {
sb.append("{\"createTime\":{\"$lte\" :\"").append(param.getEnd()).append("\"}},");
matched = true;
}
if (matched) {
sb.deleteCharAt(sb.length() - 1).append("]}}");
} else {
sb.append("]}}");
sb.replace(11, 18, "");
}
logger.info("查询条件[match]:{}", sb.toString());
DBObject match = (DBObject) JSON.parse(sb.toString());
String skipStr = "{$skip:" + (param.getCurrPage() - 1) * param.getPageSize() + "}";
DBObject skip = (DBObject) JSON.parse(skipStr);
String limitStr = "{$limit:" + param.getPageSize() + "}";
DBObject limit = (DBObject) JSON.parse(limitStr);
String projectStr = "{\"$project\" : {\"_id\":0,\"riskId\":\"$riskId\", \"appkey\" :\"$appkey\",\"appName\" :\"$appName\",\"platformId\" :\"$platformId\",\"platformName\" :\"$platformName\",\"createTime\" :\"$createTime\",\"modelId\" :\"$records.modelId\" , \"modelName\" : \"$records.modelName\" , \"modelResult\" : \"$records.modelResult\" , \"status\" : \"$records.status\", \"requestParams\" : \"$requestParams\",\"result\" : \"$result\",\"sync\" : \"$sync\", \"message\" : \"$records.message\"}}";
DBObject project = (DBObject) JSON.parse(projectStr);
String groupStr = "{$group:{_id:null,count:{$sum:1}}}";
DBObject group = (DBObject) JSON.parse(groupStr);
pipeline.add(lookup);
pipeline.add(project);
pipeline.add(match);
pipeline.add(group);
logger.info("查询条件[count]:{}", JSONObject.toJSON(pipeline));
Cursor cursor1 = mongoTemplate.getCollection("risk_model_log").aggregate(pipeline,
AggregationOptions.builder().outputMode(AggregationOptions.OutputMode.CURSOR).build());
int total = 0;
while (cursor1.hasNext()) {
try {
DBObject document = cursor1.next();
total = JSONObject.parseObject(document.toString()).getIntValue("count");
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
pipeline.remove(project);
pipeline.remove(group);
pipeline.remove(match);
pipeline.add(unwind);
pipeline.add(project);
pipeline.add(match);
pipeline.add(sort);
pipeline.add(skip);
pipeline.add(limit);
logger.info("查询条件[list]:{}", JSONObject.toJSON(pipeline));
Cursor cursor2 = mongoTemplate.getCollection("risk_model_log").aggregate(pipeline,
AggregationOptions.builder().outputMode(AggregationOptions.OutputMode.CURSOR).build());
// 组装page
List<RiskModelLog> list = new ArrayList<>();
while (cursor2.hasNext()) {
try {
DBObject document = cursor2.next();
RiskModelLog log = JSONObject.parseObject(JSONObject.toJSONString(document), RiskModelLog.class);
if("1".equals(log.getStatus())){
log.setStatus("通过");
} else if ("0".equals(log.getStatus())) {
log.setStatus("拒绝");
} else if("-1".equals(log.getStatus())){
log.setStatus("运行失败");
JSONObject jsonObject=new JSONObject();
jsonObject.put("errmsg",log.getMessage());
log.setResult(jsonObject.toJSONString());
}else if(log.getResult()!=null){
JSONObject result=JSONObject.parseObject((String)log.getResult());
if(result.getString("errcode")!=null){
log.setStatus("运行失败");
}else{
log.setStatus("运行中");
}
}
list.add(log);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
Page<RiskModelLog> page = new Page<RiskModelLog>(list, total, param.getPageSize(), param.getCurrPage());
return page;
mongo关联查询实例
最新推荐文章于 2023-09-22 16:51:17 发布
1876

被折叠的 条评论
为什么被折叠?



