List<DBObject> pipeline = new ArrayList<DBObject>();
BasicDBObject group = new BasicDBObject();
group.put("$group",
new BasicDBObject("_id", new BasicDBObject("quoteDate",
new BasicDBObject("$substr", Stream.of("$quoteHistory.quoteTime", 0, 10)
.collect(Collectors.toList()))).append("quoteArea",
"$quoteHistory.areaCode")).append("plateNos",
new BasicDBObject("$addToSet", "$quoteCar.plateNo")));
BasicDBObject match = new BasicDBObject();
match.put("$match", new BasicDBObject("quoteHistory.groupChannelId", groupId)
.append("quoteHistory.quoteStatus", new BasicDBObject("$in", quoteStatus))
.append("quoteHistory.quoteTime", new BasicDBObject("$gt", DateConverter.parseDate(dateStr))));
pipeline.add(match);
pipeline.add(group);
AggregationOutput outPut = mongoTemplate.getCollection("quote_record").aggregate(pipeline);
Iterator<DBObject> results = outPut.results().iterator();
List<QuoteInfoLog> quoteLogList = new ArrayList<>();
int i = 0;
while (results.hasNext()) {
DBObject dbObj = results.next();
JSONObject jsonObj = JSONObject.fromObject(dbObj);
String quoteDate = jsonObj.getJSONObject("_id").getString("quoteDate");
String quoteArea = jsonObj.getJSONObject("_id").getString("quoteArea");
JSONArray jsonArray = jsonObj.getJSONArray("plateNos");
Set<String> plateNoSet = new HashSet<>();
for(int j=0;j<jsonArray.size();j++) {
plateNoSet.add(jsonArray.getString(j));
}
int count = plateNoSet.size();
QuoteInfoLog quoteLog = new QuoteInfoLog();
quoteLog.setQuoteDate(quoteDate);
quoteLog.setAreaCode(quoteArea);
quoteLog.setGroupId(groupId);
quoteLog.setDeleteId(DeletedIdEnum.VALID.getKey());
Method method = quoteLog.getClass().getDeclaredMethod("set" + upperFirstLetter(fieldName),
quoteLog.getClass().getDeclaredField(fieldName).getType());
method.invoke(quoteLog, Integer.valueOf(count));
quoteLogList.add(quoteLog);
i++;
if (i > batchExecAmount) {
if ("insert".equals(opType)) {
dataStatisticsService.insertQuoteInfoLogSelective(quoteLogList);
i = 0;
quoteLogList.clear();
} else if ("update".equals(opType)) {
dataStatisticsService.updateQuoteInfoLogSelective(quoteLogList);
i = 0;
quoteLogList.clear();
}
}
}
if ("insert".equals(opType) && quoteLogList.size() > 0) {
dataStatisticsService.insertQuoteInfoLogSelective(quoteLogList);
} else if ("update".equals(opType) && quoteLogList.size() > 0) {
dataStatisticsService.updateQuoteInfoLogSelective(quoteLogList);
}