From 76bbafa1a559978d1dee000034608b4934551a33 Mon Sep 17 00:00:00 2001 From: yujian <yujian@163.com> Date: 星期一, 18 五月 2020 14:15:53 +0800 Subject: [PATCH] 统计 --- fanli/src/main/java/com/yeshi/fanli/dao/user/invite/TeamDailyRecordDao.java | 206 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 206 insertions(+), 0 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/dao/user/invite/TeamDailyRecordDao.java b/fanli/src/main/java/com/yeshi/fanli/dao/user/invite/TeamDailyRecordDao.java index 6e227bf..85d821e 100644 --- a/fanli/src/main/java/com/yeshi/fanli/dao/user/invite/TeamDailyRecordDao.java +++ b/fanli/src/main/java/com/yeshi/fanli/dao/user/invite/TeamDailyRecordDao.java @@ -1,10 +1,12 @@ package com.yeshi.fanli.dao.user.invite; import java.math.BigDecimal; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import org.springframework.data.mongodb.core.query.Criteria; @@ -12,8 +14,11 @@ import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Repository; +import com.mongodb.BasicDBList; import com.mongodb.BasicDBObject; +import com.mongodb.DBCollection; import com.mongodb.DBObject; +import com.mongodb.GroupCommand; import com.yeshi.fanli.dao.MongodbBaseDao; import com.yeshi.fanli.entity.bus.user.invite.TeamDailyRecord; @@ -170,4 +175,205 @@ } return listDailyCount; } + + + private String getTeamNumReduce() { + StringBuilder builder = new StringBuilder(); + builder.append("function(doc, aggr){ "); + builder.append(" aggr.directOrderNum += doc.firstNum;"); + builder.append(" aggr.inDirectOrderNum += doc.secondNum;"); + builder.append(" aggr.beyondOrderNum += doc.beyondNum;"); + builder.append(" }"); + return builder.toString(); + } + + + /** + * 缁熻姣忔湀璁㈠崟鏀跺叆銆佹暟閲� + * @param uid + * @param minDate + * @param maxDate + * @return + */ + public List<TeamDailyRecord> sumTeamNumGroupByCountDay(Long uid, Date minDate, Date maxDate) { + // 鏌ヨ鏉′欢 + List<Criteria> list = new ArrayList<Criteria>(); + list.add(Criteria.where("uid").is(uid)); + if (minDate != null) + list.add(Criteria.where("countDay").gte(minDate)); + if (maxDate != null) + list.add(Criteria.where("countDay").lte(maxDate)); + + Query query = new Query(); + if (list.size() > 0) { + Criteria[] cas = new Criteria[list.size()]; + for (int i = 0; i < list.size(); i++) + cas[i] = list.get(i); + query.addCriteria(new Criteria().andOperator(cas)); + } + + Map<String, Object> map = new HashMap<>(); + map.put("directOrderNum", 0); + map.put("inDirectOrderNum", 0); + map.put("beyondOrderNum", 0); + BasicDBObject initial = new BasicDBObject(map); + + // 杩涜鎸夊ぉ銆佸懆銆佹湀鍒嗙粍 + BasicDBObject agg = new BasicDBObject("countDay", ""); + DBCollection collection = mongoTemplate.getCollection(collectionName); + GroupCommand xx = new GroupCommand(collection, agg, query.getQueryObject(), initial, getTeamNumReduce(), null); + BasicDBList objects = (BasicDBList) collection.group(xx); + + List<TeamDailyRecord> results = new ArrayList<>(); + if (objects != null) { + SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US); + for (int i = 0; i < objects.size(); i++) { + BasicDBObject dbObject = (BasicDBObject) objects.get(i); + if (dbObject == null) { + continue; + } + + Object object = dbObject.get("countDay"); + if (object == null) { + continue; + } + + try { + String date = object.toString(); + Date dtime = sdf.parse(date); + TeamDailyRecord dailyCount = new TeamDailyRecord(); + dailyCount.setCountDay(dtime); + dailyCount.setFirstNum(new BigDecimal(dbObject.get("directOrderNum").toString()).intValue()); + dailyCount.setSecondNum(new BigDecimal(dbObject.get("inDirectOrderNum").toString()).intValue()); + dailyCount.setBeyondNum(new BigDecimal(dbObject.get("beyondOrderNum").toString()).intValue()); + results.add(dailyCount); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + return results; + } + + + /** + * 缁熻姣忔湀璁㈠崟鏀跺叆銆佹暟閲� + * @param uid + * @param minDate + * @param maxDate + * @return + */ + public List<TeamDailyRecord> sumTeamNumGroupByYearMonth(Long uid, Date minDate, Date maxDate) { + // 鏌ヨ鏉′欢 + List<Criteria> list = new ArrayList<Criteria>(); + list.add(Criteria.where("uid").is(uid)); + if (minDate != null) + list.add(Criteria.where("countDay").gte(minDate)); + if (maxDate != null) + list.add(Criteria.where("countDay").lte(maxDate)); + + Query query = new Query(); + if (list.size() > 0) { + Criteria[] cas = new Criteria[list.size()]; + for (int i = 0; i < list.size(); i++) + cas[i] = list.get(i); + query.addCriteria(new Criteria().andOperator(cas)); + } + + Map<String, Object> map = new HashMap<>(); + map.put("directOrderNum", 0); + map.put("inDirectOrderNum", 0); + map.put("beyondOrderNum", 0); + BasicDBObject initial = new BasicDBObject(map); + + // 杩涜鎸夊ぉ銆佸懆銆佹湀鍒嗙粍 + BasicDBObject agg = new BasicDBObject("yearMonth", ""); + DBCollection collection = mongoTemplate.getCollection(collectionName); + GroupCommand xx = new GroupCommand(collection, agg, query.getQueryObject(), initial, getTeamNumReduce(), null); + BasicDBList objects = (BasicDBList) collection.group(xx); + + List<TeamDailyRecord> results = new ArrayList<>(); + if (objects != null) { + for (int i = 0; i < objects.size(); i++) { + BasicDBObject dbObject = (BasicDBObject) objects.get(i); + if (dbObject == null) { + continue; + } + + Object object = dbObject.get("yearMonth"); + if (object == null) { + continue; + } + + TeamDailyRecord dailyCount = new TeamDailyRecord(); + dailyCount.setYearMonth(object.toString()); + dailyCount.setFirstNum(new BigDecimal(dbObject.get("directOrderNum").toString()).intValue()); + dailyCount.setSecondNum(new BigDecimal(dbObject.get("inDirectOrderNum").toString()).intValue()); + dailyCount.setBeyondNum(new BigDecimal(dbObject.get("beyondOrderNum").toString()).intValue()); + + results.add(dailyCount); + } + } + return results; + } + + /** + * 缁熻姣忔湀璁㈠崟鏀跺叆銆佹暟閲� + * @param uid + * @param minDate + * @param maxDate + * @return + */ + public List<TeamDailyRecord> sumTeamNumGroupByUid(Long uid, Date minDate, Date maxDate) { + // 鏌ヨ鏉′欢 + List<Criteria> list = new ArrayList<Criteria>(); + list.add(Criteria.where("uid").is(uid)); + if (minDate != null) + list.add(Criteria.where("countDay").gte(minDate)); + if (maxDate != null) + list.add(Criteria.where("countDay").lte(maxDate)); + + Query query = new Query(); + if (list.size() > 0) { + Criteria[] cas = new Criteria[list.size()]; + for (int i = 0; i < list.size(); i++) + cas[i] = list.get(i); + query.addCriteria(new Criteria().andOperator(cas)); + } + + Map<String, Object> map = new HashMap<>(); + map.put("directOrderNum", 0); + map.put("inDirectOrderNum", 0); + map.put("beyondOrderNum", 0); + BasicDBObject initial = new BasicDBObject(map); + + // 杩涜鎸夊ぉ銆佸懆銆佹湀鍒嗙粍 + BasicDBObject agg = new BasicDBObject("uid", ""); + DBCollection collection = mongoTemplate.getCollection(collectionName); + GroupCommand xx = new GroupCommand(collection, agg, query.getQueryObject(), initial, getTeamNumReduce(), null); + BasicDBList objects = (BasicDBList) collection.group(xx); + + List<TeamDailyRecord> results = new ArrayList<>(); + if (objects != null) { + for (int i = 0; i < objects.size(); i++) { + BasicDBObject dbObject = (BasicDBObject) objects.get(i); + if (dbObject == null) { + continue; + } + + Object object = dbObject.get("uid"); + if (object == null) { + continue; + } + + TeamDailyRecord dailyCount = new TeamDailyRecord(); + dailyCount.setFirstNum(new BigDecimal(dbObject.get("directOrderNum").toString()).intValue()); + dailyCount.setSecondNum(new BigDecimal(dbObject.get("inDirectOrderNum").toString()).intValue()); + dailyCount.setBeyondNum(new BigDecimal(dbObject.get("beyondOrderNum").toString()).intValue()); + + results.add(dailyCount); + } + } + return results; + } } -- Gitblit v1.8.0