From 30d8e227e8d823b6c38c3b9c90ac2df03b63befe Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 25 二月 2025 16:41:22 +0800
Subject: [PATCH] 淘宝转链接口更新

---
 fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java | 1334 +++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 808 insertions(+), 526 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..bfe3201 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
@@ -1,526 +1,808 @@
-package com.yeshi.fanli.dao.order;
-
-import java.math.BigDecimal;
-import java.text.ParseException;
-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.domain.Sort;
-import org.springframework.data.mongodb.core.query.Criteria;
-import org.springframework.data.mongodb.core.query.Query;
-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.order.OrderMoneyDailyCount;
-import com.yeshi.fanli.entity.order.OrderMoneyDailyCount.SourceTypeEnum;
-
-@Repository
-public class OrderMoneyDailyCountDao extends MongodbBaseDao<OrderMoneyDailyCount> {
-
-	private static String collectionName = "order_money_daily_count";
-
-
-	/**
-	 * 閫夋嫨鏇存柊
-	 * 
-	 * @param info
-	 */
-	public void updateSelective(OrderMoneyDailyCount info) {
-		Query query = new Query();
-		query.addCriteria(Criteria.where("id").is(info.getId()));
-		Update update = new Update();
-		if (info.getIncome() != null)
-			update.set("income", info.getIncome());
-		if (info.getIncomeTeam() != null)
-			update.set("incomeTeam", info.getIncomeTeam());
-		if (info.getOrderNum() != null)
-			update.set("orderNum", info.getOrderNum());
-		if (info.getOrderNumTeam() != null)
-			update.set("orderNumTeam", info.getOrderNumTeam());
-		if (info.getTeamReward() != null)
-			update.set("teamReward", info.getTeamReward());
-		if (info.getTeamRewardNum() != null)
-			update.set("teamRewardNum", info.getTeamRewardNum());
-		if (info.getTeamSubsidy() != null)
-			update.set("teamSubsidy", info.getTeamSubsidy());
-		if (info.getTeamSubsidyNum() != null)
-			update.set("teamSubsidyNum", info.getTeamSubsidyNum());
-		if (info.getDirectOrderNum() != null)
-			update.set("directOrderNum", info.getDirectOrderNum());
-		if (info.getInDirectOrderNum() != null)
-			update.set("inDirectOrderNum", info.getInDirectOrderNum());
-		if (info.getBeyondOrderNum() != null)
-			update.set("beyondOrderNum", info.getBeyondOrderNum());
-		update.set("updateTime", new Date());
-		update(query, update);
-	}
-
-	// 鏌ヨ
-	public List<OrderMoneyDailyCount> query(Long uid, Date minDay, Date maxDay) {
-		List<Criteria> list = new ArrayList<Criteria>();
-		list.add(Criteria.where("uid").is(uid));
-		if (minDay != null)
-			list.add(Criteria.where("countDay").gte(minDay));
-		if (maxDay != null)
-			list.add(Criteria.where("countDay").lte(maxDay));
-
-		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));
-		}
-		query.with(new Sort(Sort.Direction.ASC, "countDay"));
-		return findList(query);
-	}
-
-	/**
-	 * 缁熻鎴戠殑閲戦璁㈠崟鏁伴噺-- 鏉ユ簮鍒嗙粍缁熻
-	 * 
-	 * @param uid
-	 * @param minDate
-	 * @param maxDate
-	 * @return
-	 */
-	public List<OrderMoneyDailyCount> sumGroupBySourceType(Long uid, Date minDate, Date maxDate) {
-		List<OrderMoneyDailyCount> listDailyCount = new ArrayList<>();
-		String reduce = "function(doc, aggr){"
-				+ " aggr.totalIncome += doc.income;"
-				+ " aggr.totalNum += doc.orderNum;" + "}";
-
-		// 鏌ヨ鏉′欢
-		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));
-		}
-
-		BasicDBObject agg = new BasicDBObject("sourceType", "");
-
-		Map<String, Object> map = new HashMap<>();
-		map.put("totalIncome", 0);
-		map.put("totalNum", 0);
-		BasicDBObject dbObject = new BasicDBObject(map);
-		// BasicDBObject basicDBObject2 = new BasicDBObject("total", 0);
-
-		DBObject result = mongoTemplate.getCollection(collectionName).group(agg, query.getQueryObject(), dbObject,
-				reduce);
-		Map<String, BasicDBObject> mapResult = result.toMap();
-		if (mapResult.size() > 0) {
-			SourceTypeEnum[] arrayEnun = SourceTypeEnum.values();
-
-			for (int i = 0; i < mapResult.size(); i++) {
-				BasicDBObject object = mapResult.get(i + "");
-				if (object == null || object.get("sourceType") == null) {
-					continue;
-				}
-				
-				SourceTypeEnum sourceTypeEnum = null;
-				for (int m = 0; m < arrayEnun.length; m++) {
-					if (arrayEnun[m].name().equals(object.get("sourceType").toString())) {
-						sourceTypeEnum = arrayEnun[m];
-						break;
-					}
-				}
-
-				OrderMoneyDailyCount dailyCount = new OrderMoneyDailyCount();
-				dailyCount.setSourceType(sourceTypeEnum);
-				dailyCount.setIncome(new BigDecimal(object.get("totalIncome").toString()).intValue());
-				dailyCount.setOrderNum(new BigDecimal(object.get("totalNum").toString()).intValue());
-				listDailyCount.add(dailyCount);
-			}
-		}
-		return listDailyCount;
-	}
-
-	/**
-	 * 缁熻鍥㈤槦閲戦璁㈠崟鏁伴噺-- 鏉ユ簮鍒嗙粍缁熻
-	 * 
-	 * @param uid
-	 * @param minDate
-	 * @param maxDate
-	 * @return
-	 */
-	public List<OrderMoneyDailyCount> sumTeamGroupBySourceType(Long uid, Date minDate, Date maxDate) {
-		List<OrderMoneyDailyCount> listDailyCount = new ArrayList<>();
-
-		// 缁熻鏂规硶
-		String reduce = "function(doc, aggr){"
-				+ " aggr.totalIncome += doc.incomeTeam;"
-				+ " aggr.totalNum += doc.orderNumTeam;" + "}";
-
-		// 鏌ヨ鏉′欢
-		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));
-		}
-
-		BasicDBObject agg = new BasicDBObject("sourceType", "");
-
-		Map<String, Object> map = new HashMap<>();
-		map.put("totalIncome", 0);
-		map.put("totalNum", 0);
-		BasicDBObject dbObject = new BasicDBObject(map);
-		// BasicDBObject basicDBObject2 = new BasicDBObject("total", 0);
-
-		DBObject result = mongoTemplate.getCollection(collectionName).group(agg, query.getQueryObject(), dbObject,
-				reduce);
-		Map<String, BasicDBObject> mapResult = result.toMap();
-		if (mapResult.size() > 0) {
-			SourceTypeEnum[] arrayEnun = SourceTypeEnum.values();
-			for (int i = 0; i < mapResult.size(); i++) {
-				BasicDBObject object = mapResult.get(i + "");
-				if (object == null || object.get("sourceType") == null) {
-					continue;
-				}
-				
-				SourceTypeEnum sourceTypeEnum = null;
-				for (int m = 0; m < arrayEnun.length; m++) {
-					if (arrayEnun[m].name().equals(object.get("sourceType").toString())) {
-						sourceTypeEnum = arrayEnun[m];
-						break;
-					}
-				}
-				OrderMoneyDailyCount dailyCount = new OrderMoneyDailyCount();
-				dailyCount.setSourceType(sourceTypeEnum);
-				dailyCount.setIncome(new BigDecimal(object.get("totalIncome").toString()).intValue());
-				dailyCount.setOrderNum(new BigDecimal(object.get("totalNum").toString()).intValue());
-				listDailyCount.add(dailyCount);
-			}
-		}
-		return listDailyCount;
-	}
-
-	private String getReduce() {
-		StringBuilder builder = new StringBuilder();
-		builder.append("function(doc, aggr){ ");
-		builder.append(" aggr.totalIncome += doc.income;");
-		builder.append(" aggr.totalNum += doc.orderNum;");
-		builder.append(" aggr.totalIncomeTeam += doc.incomeTeam;");
-		builder.append(" aggr.totalNumTeam += doc.orderNumTeam;");
-		builder.append(" }");
-		return builder.toString();
-	}
-//	private String getReduce2() {
-//	StringBuilder builder = new StringBuilder();
-//	builder.append("function(doc, aggr){ ");
-//	builder.append(" aggr.totalIncome += parseFloat((Math.round((doc.income)*100)/100).toFixed(2));");
-//	builder.append(" aggr.totalNum += doc.orderNum;");
-//	builder.append(" aggr.totalIncomeTeam += parseFloat((Math.round((doc.incomeTeam)*100)/100).toFixed(2));");
-//	builder.append(" aggr.totalNumTeam += doc.orderNumTeam;");
-//	builder.append(" }");
-//	return builder.toString();
-//}
-
-	
-
-	/**
-	 * 缁熻姣忓ぉ璁㈠崟鏀跺叆銆佹暟閲�
-	 * @param uid
-	 * @param minDate
-	 * @param maxDate
-	 * @return
-	 */
-	public List<OrderMoneyDailyCount> sumGroupByCountDay(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("totalIncome", 0);
-		map.put("totalNum", 0);
-		map.put("totalIncomeTeam", 0);
-		map.put("totalNumTeam", 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, getReduce(), 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.setIncome(new BigDecimal(dbObject.get("totalIncome").toString()).intValue());
-					dailyCount.setOrderNum(new BigDecimal(dbObject.get("totalNum").toString()).intValue());
-					dailyCount.setIncomeTeam(new BigDecimal(dbObject.get("totalIncomeTeam").toString()).intValue());
-					dailyCount.setOrderNumTeam(new BigDecimal(dbObject.get("totalNumTeam").toString()).intValue());
-					results.add(dailyCount);
-				} catch (ParseException e) {
-					e.printStackTrace();
-					continue;
-				}
-			}
-		}
-		return results;
-	}
-
-
-	/**
-	 *    缁熻姣忔湀璁㈠崟鏀跺叆銆佹暟閲�
-	 * @param uid
-	 * @param minDate
-	 * @param maxDate
-	 * @return
-	 */
-	public List<OrderMoneyDailyCount> sumGroupByYearMonth(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("totalIncome", 0);
-		map.put("totalNum", 0);
-		map.put("totalIncomeTeam", 0);
-		map.put("totalNumTeam", 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, getReduce(), 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.setIncome(new BigDecimal(dbObject.get("totalIncome").toString()).intValue());
-				dailyCount.setOrderNum(new BigDecimal(dbObject.get("totalNum").toString()).intValue());
-				dailyCount.setIncomeTeam(new BigDecimal(dbObject.get("totalIncomeTeam").toString()).intValue());
-				dailyCount.setOrderNumTeam(new BigDecimal(dbObject.get("totalNumTeam").toString()).intValue());
-				results.add(dailyCount);
-			}
-		}
-		return results;
-	}
-	 	
-	
-	private String getTeamReduce() {
-		StringBuilder builder = new StringBuilder();
-		builder.append("function(doc, aggr){ ");
-		builder.append(" aggr.totalReward += doc.teamReward;");
-		builder.append(" aggr.totalRewardNum += doc.teamRewardNum;");
-		builder.append(" aggr.totalSubsidy += doc.teamSubsidy;");
-		builder.append(" aggr.totalSubsidyNum += doc.teamSubsidyNum;");
-		builder.append(" }");
-		return builder.toString();
-	}
-
-	
-	/**
-	 * 缁熻姣忓ぉ璁㈠崟鏀跺叆銆佹暟閲�
-	 * @param uid
-	 * @param minDate
-	 * @param maxDate
-	 * @return
-	 */
-	public List<OrderMoneyDailyCount> sumTeamGroupByCountDay(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("totalReward", 0);
-		map.put("totalRewardNum", 0);
-		map.put("totalSubsidy", 0);
-		map.put("totalSubsidyNum", 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, getTeamReduce(), 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.setTeamReward(new BigDecimal(dbObject.get("totalReward").toString()).intValue());
-					dailyCount.setTeamRewardNum(new BigDecimal(dbObject.get("totalRewardNum").toString()).intValue());
-					dailyCount.setTeamSubsidy(new BigDecimal(dbObject.get("totalSubsidy").toString()).intValue());
-					dailyCount.setTeamSubsidyNum(new BigDecimal(dbObject.get("totalSubsidyNum").toString()).intValue());
-					results.add(dailyCount);
-				} catch (ParseException e) {
-					e.printStackTrace();
-					continue;
-				}
-			}
-		}
-		return results;
-	}
-
-	/**
-	 *    缁熻姣忔湀璁㈠崟鏀跺叆銆佹暟閲�
-	 * @param uid
-	 * @param minDate
-	 * @param maxDate
-	 * @return
-	 */
-	public List<OrderMoneyDailyCount> sumTeamGroupByYearMonth(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("totalReward", 0);
-		map.put("totalRewardNum", 0);
-		map.put("totalSubsidy", 0);
-		map.put("totalSubsidyNum", 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, getTeamReduce(), 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.setTeamReward(new BigDecimal(dbObject.get("totalReward").toString()).intValue());
-				dailyCount.setTeamRewardNum(new BigDecimal(dbObject.get("totalRewardNum").toString()).intValue());
-				dailyCount.setTeamSubsidy(new BigDecimal(dbObject.get("totalSubsidy").toString()).intValue());
-				dailyCount.setTeamSubsidyNum(new BigDecimal(dbObject.get("totalSubsidyNum").toString()).intValue());
-				results.add(dailyCount);
-			}
-		}
-		return results;
-	}
-	
-}
+package com.yeshi.fanli.dao.order;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+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.domain.Sort;
+import org.springframework.data.mongodb.core.aggregation.Aggregation;
+import org.springframework.data.mongodb.core.aggregation.AggregationOperation;
+import org.springframework.data.mongodb.core.aggregation.AggregationResults;
+import org.springframework.data.mongodb.core.aggregation.LookupOperation;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
+import org.springframework.stereotype.Repository;
+import org.yeshi.utils.DateUtil;
+
+import com.mongodb.BasicDBList;
+import com.mongodb.BasicDBObject;
+import com.mongodb.DBCollection;
+import com.mongodb.DBObject;
+import com.mongodb.GroupCommand;
+import com.yeshi.common.MongodbBaseDao;
+import com.yeshi.fanli.entity.order.OrderMoneyDailyCount;
+import com.yeshi.fanli.entity.order.SourceTypeEnum;
+import com.yeshi.fanli.vo.order.OrderRankingVO;
+
+@Repository
+public class OrderMoneyDailyCountDao extends MongodbBaseDao<OrderMoneyDailyCount> {
+
+	private static String collectionName = "order_money_daily_count";
+
+	/**
+	 * 閫夋嫨鏇存柊
+	 * 
+	 * @param info
+	 */
+	public void updateSelective(OrderMoneyDailyCount info) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("id").is(info.getId()));
+		Update update = new Update();
+		if (info.getIncome() != null)
+			update.set("income", info.getIncome());
+		if (info.getIncomeTeam() != null)
+			update.set("incomeTeam", info.getIncomeTeam());
+		if (info.getOrderNum() != null)
+			update.set("orderNum", info.getOrderNum());
+		if (info.getOrderNumTeam() != null)
+			update.set("orderNumTeam", info.getOrderNumTeam());
+		if (info.getTeamReward() != null)
+			update.set("teamReward", info.getTeamReward());
+		if (info.getTeamRewardNum() != null)
+			update.set("teamRewardNum", info.getTeamRewardNum());
+		if (info.getTeamSubsidy() != null)
+			update.set("teamSubsidy", info.getTeamSubsidy());
+		if (info.getTeamSubsidyNum() != null)
+			update.set("teamSubsidyNum", info.getTeamSubsidyNum());
+		if (info.getTeamDividentsOrderNum() != null)
+			update.set("teamDividentsOrderNum", info.getTeamDividentsOrderNum());
+		if (info.getDirectOrderNum() != null)
+			update.set("directOrderNum", info.getDirectOrderNum());
+		if (info.getInDirectOrderNum() != null)
+			update.set("inDirectOrderNum", info.getInDirectOrderNum());
+		if (info.getBeyondOrderNum() != null)
+			update.set("beyondOrderNum", info.getBeyondOrderNum());
+		update.set("updateTime", new Date());
+		update(query, update);
+	}
+
+	// 鏌ヨ
+	public List<OrderMoneyDailyCount> query(Long uid, Date minDay, Date maxDay) {
+		List<Criteria> list = new ArrayList<Criteria>();
+		list.add(Criteria.where("uid").is(uid));
+		if (minDay != null)
+			list.add(Criteria.where("countDay").gte(minDay));
+		if (maxDay != null)
+			list.add(Criteria.where("countDay").lt(maxDay));
+
+		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));
+		}
+		query.with(new Sort(Sort.Direction.ASC, "countDay"));
+		return findList(query);
+	}
+
+	/**
+	 * 缁熻鎴戠殑閲戦璁㈠崟鏁伴噺-- 鏉ユ簮鍒嗙粍缁熻
+	 * 
+	 * @param uid
+	 * @param minDate
+	 * @param maxDate
+	 * @return
+	 */
+	public List<OrderMoneyDailyCount> sumGroupBySourceType(Long uid, Date minDate, Date maxDate) {
+		List<OrderMoneyDailyCount> listDailyCount = new ArrayList<>();
+		String reduce = "function(doc, aggr){" + " aggr.totalIncome += doc.income;" + " aggr.totalNum += doc.orderNum;"
+				+ "}";
+
+		// 鏌ヨ鏉′欢
+		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").lt(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));
+		}
+
+		BasicDBObject agg = new BasicDBObject("sourceType", "");
+
+		Map<String, Object> map = new HashMap<>();
+		map.put("totalIncome", 0);
+		map.put("totalNum", 0);
+		BasicDBObject dbObject = new BasicDBObject(map);
+		// BasicDBObject basicDBObject2 = new BasicDBObject("total", 0);
+
+		DBObject result = mongoTemplate.getCollection(collectionName).group(agg, query.getQueryObject(), dbObject,
+				reduce);
+		Map<String, BasicDBObject> mapResult = result.toMap();
+		if (mapResult.size() > 0) {
+			SourceTypeEnum[] arrayEnun = SourceTypeEnum.values();
+
+			for (int i = 0; i < mapResult.size(); i++) {
+				BasicDBObject object = mapResult.get(i + "");
+				if (object == null || object.get("sourceType") == null) {
+					continue;
+				}
+
+				SourceTypeEnum sourceTypeEnum = null;
+				for (int m = 0; m < arrayEnun.length; m++) {
+					if (arrayEnun[m].name().equals(object.get("sourceType").toString())) {
+						sourceTypeEnum = arrayEnun[m];
+						break;
+					}
+				}
+
+				OrderMoneyDailyCount dailyCount = new OrderMoneyDailyCount();
+				dailyCount.setSourceType(sourceTypeEnum);
+				dailyCount.setIncome(new BigDecimal(object.get("totalIncome").toString()).intValue());
+				dailyCount.setOrderNum(new BigDecimal(object.get("totalNum").toString()).intValue());
+				listDailyCount.add(dailyCount);
+			}
+		}
+		return listDailyCount;
+	}
+
+	/**
+	 * 缁熻鍥㈤槦閲戦璁㈠崟鏁伴噺-- 鏉ユ簮鍒嗙粍缁熻
+	 * 
+	 * @param uid
+	 * @param minDate
+	 * @param maxDate
+	 * @return
+	 */
+	public List<OrderMoneyDailyCount> sumTeamGroupBySourceType(Long uid, Date minDate, Date maxDate) {
+		List<OrderMoneyDailyCount> listDailyCount = new ArrayList<>();
+
+		// 缁熻鏂规硶
+		String reduce = "function(doc, aggr){" + " aggr.totalIncome += doc.incomeTeam;"
+				+ " aggr.totalNum += doc.orderNumTeam;" + "}";
+
+		// 鏌ヨ鏉′欢
+		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").lt(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));
+		}
+
+		BasicDBObject agg = new BasicDBObject("sourceType", "");
+
+		Map<String, Object> map = new HashMap<>();
+		map.put("totalIncome", 0);
+		map.put("totalNum", 0);
+		BasicDBObject dbObject = new BasicDBObject(map);
+		// BasicDBObject basicDBObject2 = new BasicDBObject("total", 0);
+
+		DBObject result = mongoTemplate.getCollection(collectionName).group(agg, query.getQueryObject(), dbObject,
+				reduce);
+		Map<String, BasicDBObject> mapResult = result.toMap();
+		if (mapResult.size() > 0) {
+			SourceTypeEnum[] arrayEnun = SourceTypeEnum.values();
+			for (int i = 0; i < mapResult.size(); i++) {
+				BasicDBObject object = mapResult.get(i + "");
+				if (object == null || object.get("sourceType") == null) {
+					continue;
+				}
+
+				SourceTypeEnum sourceTypeEnum = null;
+				for (int m = 0; m < arrayEnun.length; m++) {
+					if (arrayEnun[m].name().equals(object.get("sourceType").toString())) {
+						sourceTypeEnum = arrayEnun[m];
+						break;
+					}
+				}
+				OrderMoneyDailyCount dailyCount = new OrderMoneyDailyCount();
+				dailyCount.setSourceType(sourceTypeEnum);
+				dailyCount.setIncome(new BigDecimal(object.get("totalIncome").toString()).intValue());
+				dailyCount.setOrderNum(new BigDecimal(object.get("totalNum").toString()).intValue());
+				listDailyCount.add(dailyCount);
+			}
+		}
+		return listDailyCount;
+	}
+
+	private String getReduce() {
+		StringBuilder builder = new StringBuilder();
+		builder.append("function(doc, aggr){ ");
+		builder.append(" aggr.totalIncome += doc.income;");
+		builder.append(" aggr.totalNum += doc.orderNum;");
+		builder.append(" aggr.totalIncomeTeam += doc.incomeTeam;");
+		builder.append(" aggr.totalNumTeam += doc.orderNumTeam;");
+		builder.append(" }");
+		return builder.toString();
+	}
+	// private String getReduce2() {
+	// StringBuilder builder = new StringBuilder();
+	// builder.append("function(doc, aggr){ ");
+	// builder.append(" aggr.totalIncome +=
+	// parseFloat((Math.round((doc.income)*100)/100).toFixed(2));");
+	// builder.append(" aggr.totalNum += doc.orderNum;");
+	// builder.append(" aggr.totalIncomeTeam +=
+	// parseFloat((Math.round((doc.incomeTeam)*100)/100).toFixed(2));");
+	// builder.append(" aggr.totalNumTeam += doc.orderNumTeam;");
+	// builder.append(" }");
+	// return builder.toString();
+	// }
+
+	/**
+	 * 缁熻姣忓ぉ璁㈠崟鏀跺叆銆佹暟閲�
+	 * @param uid
+	 * @param minDate
+	 * @param maxDate
+	 * @return
+	 */
+	public List<OrderMoneyDailyCount> sumGroupByCountDay(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").lt(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("totalIncome", 0);
+		map.put("totalNum", 0);
+		map.put("totalIncomeTeam", 0);
+		map.put("totalNumTeam", 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, getReduce(), 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.setIncome(new BigDecimal(dbObject.get("totalIncome").toString()).intValue());
+					dailyCount.setOrderNum(new BigDecimal(dbObject.get("totalNum").toString()).intValue());
+					dailyCount.setIncomeTeam(new BigDecimal(dbObject.get("totalIncomeTeam").toString()).intValue());
+					dailyCount.setOrderNumTeam(new BigDecimal(dbObject.get("totalNumTeam").toString()).intValue());
+					results.add(dailyCount);
+				} catch (ParseException e) {
+					e.printStackTrace();
+					continue;
+				}
+			}
+		}
+		return results;
+	}
+
+	/**
+	 *    缁熻姣忔湀璁㈠崟鏀跺叆銆佹暟閲�
+	 * @param uid
+	 * @param minDate
+	 * @param maxDate
+	 * @return
+	 */
+	public List<OrderMoneyDailyCount> sumGroupByYearMonth(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").lt(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("totalIncome", 0);
+		map.put("totalNum", 0);
+		map.put("totalIncomeTeam", 0);
+		map.put("totalNumTeam", 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, getReduce(), 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.setIncome(new BigDecimal(dbObject.get("totalIncome").toString()).intValue());
+				dailyCount.setOrderNum(new BigDecimal(dbObject.get("totalNum").toString()).intValue());
+				dailyCount.setIncomeTeam(new BigDecimal(dbObject.get("totalIncomeTeam").toString()).intValue());
+				dailyCount.setOrderNumTeam(new BigDecimal(dbObject.get("totalNumTeam").toString()).intValue());
+				results.add(dailyCount);
+			}
+		}
+		return results;
+	}
+
+	private String getTeamReduce() {
+		StringBuilder builder = new StringBuilder();
+		builder.append("function(doc, aggr){ ");
+		builder.append(" aggr.totalReward += doc.teamReward;");
+		builder.append(" aggr.totalRewardNum += doc.teamRewardNum;");
+		builder.append(" aggr.totalSubsidy += doc.teamSubsidy;");
+		builder.append(" aggr.totalSubsidyNum += doc.teamSubsidyNum;");
+		builder.append(" aggr.totalNum += doc.teamDividentsOrderNum;");
+		builder.append(" }");
+		return builder.toString();
+	}
+
+	/**
+	 * 缁熻姣忓ぉ璁㈠崟鏀跺叆銆佹暟閲�
+	 * @param uid
+	 * @param minDate
+	 * @param maxDate
+	 * @return
+	 */
+	public List<OrderMoneyDailyCount> sumTeamGroupByCountDay(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").lt(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("totalReward", 0);
+		map.put("totalRewardNum", 0);
+		map.put("totalSubsidy", 0);
+		map.put("totalSubsidyNum", 0);
+		map.put("totalNum", 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, getTeamReduce(), 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.setTeamReward(new BigDecimal(dbObject.get("totalReward").toString()).intValue());
+					dailyCount.setTeamRewardNum(new BigDecimal(dbObject.get("totalRewardNum").toString()).intValue());
+					dailyCount.setTeamSubsidy(new BigDecimal(dbObject.get("totalSubsidy").toString()).intValue());
+					dailyCount.setTeamSubsidyNum(new BigDecimal(dbObject.get("totalSubsidyNum").toString()).intValue());
+					dailyCount.setTeamDividentsOrderNum(new BigDecimal(dbObject.get("totalNum").toString()).intValue());
+					results.add(dailyCount);
+				} catch (ParseException e) {
+					e.printStackTrace();
+					continue;
+				}
+			}
+		}
+		return results;
+	}
+
+	/**
+	 *    缁熻姣忔湀璁㈠崟鏀跺叆銆佹暟閲�
+	 * @param uid
+	 * @param minDate
+	 * @param maxDate
+	 * @return
+	 */
+	public List<OrderMoneyDailyCount> sumTeamGroupByYearMonth(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").lt(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("totalReward", 0);
+		map.put("totalRewardNum", 0);
+		map.put("totalSubsidy", 0);
+		map.put("totalSubsidyNum", 0);
+		map.put("totalNum", 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, getTeamReduce(), 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.setTeamReward(new BigDecimal(dbObject.get("totalReward").toString()).intValue());
+				dailyCount.setTeamRewardNum(new BigDecimal(dbObject.get("totalRewardNum").toString()).intValue());
+				dailyCount.setTeamSubsidy(new BigDecimal(dbObject.get("totalSubsidy").toString()).intValue());
+				dailyCount.setTeamSubsidyNum(new BigDecimal(dbObject.get("totalSubsidyNum").toString()).intValue());
+				dailyCount.setTeamDividentsOrderNum(new BigDecimal( dbObject.get("totalNum") .toString()).intValue());
+				results.add(dailyCount);
+			}
+		}
+		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").lt(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").lt(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").lt(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;
+	}
+
+	/**
+	 * 鏍规嵁璁㈠崟鎺掕姒滆繘琛寀id鍒嗙粍璁㈠崟鏁伴噺鎺掑簭
+	 * @param uid
+	 * @param minDate
+	 * @param maxDate
+	 * @return
+	 */
+	public List<OrderRankingVO> getRankingByOrderNum(Long uid, Date minDate, Date maxDate) {
+		LookupOperation lookupToLots = LookupOperation.newLookup().from("order_money_daily_count").// 鍏宠仈琛ㄥ悕锛屽鏂�
+				localField("workerUid").// 涓昏〃鍏宠仈瀛楁
+				foreignField("uid").// 娆¤〃瀛楁鍏宠仈瀛楁
+				as("orders"); // 娆¤〃鐨勫埆鍚�
+
+		// 鏌ヨ鏉′欢
+		List<Criteria> list = new ArrayList<Criteria>();
+		list.add(Criteria.where("bossUid").is(uid));
+		list.add(Criteria.where("orders.orderNum").gt(0));
+		if (minDate != null) {
+			minDate = DateUtil.reduceDay(minDate, 1);
+			list.add(Criteria.where("orders.countDay").gt(minDate));
+		}
+		if (maxDate != null) {
+			maxDate = DateUtil.reduceDay(maxDate, 1);
+			list.add(Criteria.where("orders.countDay").lte(maxDate));
+		}
+		// 杞崲鏁扮粍
+		Criteria[] cas = new Criteria[list.size()];
+		for (int i = 0; i < list.size(); i++)
+			cas[i] = list.get(i);
+		// 鏌ヨ鍙傛暟
+		Criteria criteria = new Criteria().andOperator(cas);
+
+		List<AggregationOperation> aggs = new ArrayList<>();
+		// 宸﹁繛鎺�
+		aggs.add(lookupToLots);
+		// 鎷嗗垎瀛愭暟缁�
+		aggs.add(Aggregation.unwind("orders"));
+		// 鏉′欢鍖归厤
+		aggs.add(Aggregation.match(criteria));
+		// 闇�瑕佽繑鍥炵殑瀛楁
+		aggs.add(Aggregation.project().and("workerUid").as("workerUid").and("level").as("level").and("orders.orderNum")
+				.as("number"));
+		// 鍒嗙粍姹傚拰骞惰繑鍥�
+		aggs.add(Aggregation.group("workerUid").first("workerUid").as("workerUid").first("level").as("level")
+				.sum("number").as("number"));
+		// 鎺掑簭
+		aggs.add(Aggregation.sort(new Sort(Sort.Direction.DESC, "number")));
+		aggs.add(Aggregation.limit(10));
+
+		// 缁勭粐鏉′欢
+		Aggregation agg = Aggregation.newAggregation(aggs);
+		// 鎵ц鏌ヨ
+		AggregationResults<BasicDBObject> results = mongoTemplate.aggregate(agg, "threeSaleDetail",
+				BasicDBObject.class);
+
+		// 杩斿洖缁撴灉澶勭悊
+		List<BasicDBObject> livevideo = results.getMappedResults();
+
+		List<OrderRankingVO> resultList = new ArrayList<>();
+		for (BasicDBObject obj : livevideo) {
+			Object object = obj.get("workerUid");
+			if (object == null) {
+				continue;
+			}
+
+			OrderRankingVO vo = new OrderRankingVO();
+			vo.setUid(new BigDecimal(obj.get("workerUid").toString()).longValue());
+			vo.setGrade(new BigDecimal(obj.get("level").toString()).intValue());
+			vo.setNumber(new BigDecimal(obj.get("number").toString()).intValue());
+			resultList.add(vo);
+		}
+		return resultList;
+	}
+}

--
Gitblit v1.8.0