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/order/OrderMoneyDailyCountDao.java |  200 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 200 insertions(+), 0 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java b/fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java
index 84ea1a9..2ad0044 100644
--- a/fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java
+++ b/fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java
@@ -523,4 +523,204 @@
 		return results;
 	}
 	
+	
+	
+	private String getTeamOrderNumReduce() {
+		StringBuilder builder = new StringBuilder();
+		builder.append("function(doc, aggr){ ");
+		builder.append(" aggr.directOrderNum += doc.directOrderNum;");
+		builder.append(" aggr.inDirectOrderNum += doc.inDirectOrderNum;");
+		builder.append(" aggr.beyondOrderNum += doc.beyondOrderNum;");
+		builder.append(" }");
+		return builder.toString();
+	}
+	
+	/**
+	 *    缁熻姣忔湀璁㈠崟鏀跺叆銆佹暟閲�
+	 * @param uid
+	 * @param minDate
+	 * @param maxDate
+	 * @return
+	 */
+	public List<OrderMoneyDailyCount> sumTeamOrderNumGroupByCountDay(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, getTeamOrderNumReduce(), null);
+		BasicDBList objects = (BasicDBList) collection.group(xx);
+
+		List<OrderMoneyDailyCount> 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);
+					OrderMoneyDailyCount dailyCount = new OrderMoneyDailyCount();
+					dailyCount.setCountDay(dtime);
+					dailyCount.setDirectOrderNum(new BigDecimal(dbObject.get("directOrderNum").toString()).intValue());
+					dailyCount.setInDirectOrderNum(new BigDecimal(dbObject.get("inDirectOrderNum").toString()).intValue());
+					dailyCount.setBeyondOrderNum(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<OrderMoneyDailyCount> sumTeamOrderNumGroupByYearMonth(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, getTeamOrderNumReduce(), null);
+		BasicDBList objects = (BasicDBList) collection.group(xx);
+
+		List<OrderMoneyDailyCount> 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;
+				}
+				
+				OrderMoneyDailyCount dailyCount = new OrderMoneyDailyCount();
+				dailyCount.setYearMonth(object.toString());
+				dailyCount.setDirectOrderNum(new BigDecimal(dbObject.get("directOrderNum").toString()).intValue());
+				dailyCount.setInDirectOrderNum(new BigDecimal(dbObject.get("inDirectOrderNum").toString()).intValue());
+				dailyCount.setBeyondOrderNum(new BigDecimal(dbObject.get("beyondOrderNum").toString()).intValue());
+						
+				results.add(dailyCount);
+			}
+		}
+		return results;
+	}
+	
+	/**
+	 *    缁熻姣忔湀璁㈠崟鏀跺叆銆佹暟閲�
+	 * @param uid
+	 * @param minDate
+	 * @param maxDate
+	 * @return
+	 */
+	public List<OrderMoneyDailyCount> sumTeamOrderNumGroupByUid(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, getTeamOrderNumReduce(), null);
+		BasicDBList objects = (BasicDBList) collection.group(xx);
+
+		List<OrderMoneyDailyCount> 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;
+				}
+				
+				OrderMoneyDailyCount dailyCount = new OrderMoneyDailyCount();
+				dailyCount.setDirectOrderNum(new BigDecimal(dbObject.get("directOrderNum").toString()).intValue());
+				dailyCount.setInDirectOrderNum(new BigDecimal(dbObject.get("inDirectOrderNum").toString()).intValue());
+				dailyCount.setBeyondOrderNum(new BigDecimal(dbObject.get("beyondOrderNum").toString()).intValue());
+						
+				results.add(dailyCount);
+			}
+		}
+		return results;
+	}
 }

--
Gitblit v1.8.0