From 28cf328a098334b51a3e9d2d56f983fb8c862211 Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期六, 23 五月 2020 09:54:38 +0800
Subject: [PATCH] 足迹、收藏订单兼容新需求

---
 fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java |  300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 298 insertions(+), 2 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 5fb7f62..9a306d7 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
@@ -11,10 +11,15 @@
 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;
@@ -24,6 +29,8 @@
 import com.yeshi.fanli.dao.MongodbBaseDao;
 import com.yeshi.fanli.entity.order.OrderMoneyDailyCount;
 import com.yeshi.fanli.entity.order.OrderMoneyDailyCount.SourceTypeEnum;
+import com.yeshi.fanli.util.TimeUtil;
+import com.yeshi.fanli.vo.order.OrderRankingVO;
 
 @Repository
 public class OrderMoneyDailyCountDao extends MongodbBaseDao<OrderMoneyDailyCount> {
@@ -56,6 +63,12 @@
 			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);
 	}
@@ -126,6 +139,10 @@
 
 			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())) {
@@ -191,8 +208,10 @@
 			SourceTypeEnum[] arrayEnun = SourceTypeEnum.values();
 			for (int i = 0; i < mapResult.size(); i++) {
 				BasicDBObject object = mapResult.get(i + "");
-				OrderMoneyDailyCount dailyCount = new OrderMoneyDailyCount();
-
+				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())) {
@@ -200,6 +219,7 @@
 						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());
@@ -510,4 +530,280 @@
 		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;
+	}
+	
+	
+	
+	/**
+	 * 鏍规嵁璁㈠崟鎺掕姒滆繘琛寀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));
+		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