From fb885c8bff26484f2bb21e697f182cc35bc4fa63 Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期二, 12 五月 2020 15:27:08 +0800
Subject: [PATCH] 2.1.1 新需求

---
 fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java |  337 +++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 287 insertions(+), 50 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 dd77db7..f141f17 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,8 +1,14 @@
 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 javax.annotation.Resource;
 
@@ -19,9 +25,12 @@
 import com.mongodb.DBObject;
 import com.mongodb.GroupCommand;
 import com.yeshi.fanli.entity.order.OrderMoneyDailyCount;
+import com.yeshi.fanli.entity.order.OrderMoneyDailyCount.SourceTypeEnum;
 
 @Repository
 public class OrderMoneyDailyCountDao {
+
+	private static String collectionName = "order_money_daily_count";
 
 	@Resource
 	private MongoTemplate mongoTemplate;
@@ -95,56 +104,284 @@
 		return mongoTemplate.find(query, OrderMoneyDailyCount.class);
 	}
 
+	/**
+	 * 缁熻鎴戠殑閲戦璁㈠崟鏁伴噺-- 鏉ユ簮鍒嗙粍缁熻
+	 * 
+	 * @param uid
+	 * @param minDate
+	 * @param maxDate
+	 * @return
+	 */
+	public List<OrderMoneyDailyCount> sumGroupBySourceType(Long uid, Date minDate, Date maxDate) {
+		String collectionName = "order_money_daily_count";
+		List<OrderMoneyDailyCount> listDailyCount = new ArrayList<>();
+
+		// 缁熻鏂规硶
+		String reduce = "function(doc, aggr){"
+				+ " aggr.totalIncome += parseFloat((Math.round((doc.income)*100)/100).toFixed(2));"
+				+ " 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 + "");
+				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()));
+				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) {
+		String collectionName = "order_money_daily_count";
+		List<OrderMoneyDailyCount> listDailyCount = new ArrayList<>();
+
+		// 缁熻鏂规硶
+		String reduce = "function(doc, aggr){"
+				+ " aggr.totalIncome += parseFloat((Math.round((doc.incomeTeam)*100)/100).toFixed(2));"
+				+ " 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 + "");
+				OrderMoneyDailyCount dailyCount = new OrderMoneyDailyCount();
+
+				SourceTypeEnum sourceTypeEnum = null;
+				for (int m = 0; m < arrayEnun.length; m++) {
+					if (arrayEnun[m].name().equals(object.get("sourceType").toString())) {
+						sourceTypeEnum = arrayEnun[m];
+						break;
+					}
+				}
+				dailyCount.setSourceType(sourceTypeEnum);
+				dailyCount.setIncome(new BigDecimal(object.get("totalIncome").toString()));
+				dailyCount.setOrderNum(new BigDecimal(object.get("totalNum").toString()).intValue());
+				listDailyCount.add(dailyCount);
+			}
+		}
+		return listDailyCount;
+	}
+
 	
-//	
-//	public List<PlaybackEntity> queryPlaybackRecord(FunctionUseQueryEntity queryEntity) {
-//		Criteria criteria = Criteria.where("createTime").gte(queryEntity.getStartTime()).lte(queryEntity.getEndTime())
-//				.and("status").is(1);
-//		Query query = Query.query(criteria);
-//
-//		BasicDBObject initial = new BasicDBObject();
-//		initial.put("playbackNum", 0);
-//
-//		String reduce = getReduce();
-//		// 杩涜鎸夊ぉ銆佸懆銆佹湀鍒嗙粍
-//		String keyf = getKeyf(queryEntity);
-//
-//		DBCollection collection = mongoTemplate.getCollection(COLLNAME);
-//
-//		GroupCommand xx = new GroupCommand(collection, keyf, query.getQueryObject(), initial, reduce, null);
-//
-//		BasicDBList objects = (BasicDBList) collection.group(xx);
-//
-//		List<PlaybackEntity> results = new ArrayList<PlaybackEntity>();
-//		if (objects != null) {
-//			for (int i = 0; i < objects.size(); i++) {
-//				PlaybackEntity play = new PlaybackEntity();
-//				DBObject obj = (DBObject) objects.get(i);
-//				play.setFormateTime((String) obj.get("strData"));
-//				play.setPlaybackNum((Double) obj.get("playbackNum"));
-//				results.add(play);
-//			}
-//		}
-//		return results;
-//	}
-//
-//	private String getKeyf(FunctionUseQueryEntity queryEntity) {
-//		StringBuilder keyfBuilder = new StringBuilder();
-//		keyfBuilder.append("function(doc){ ").append("    var date = new Date(doc.createTime); ");
-//		if (DateTypeEnum.DATE.getValue().equals(queryEntity.getType())) {
-//			keyfBuilder.append(
-//					"    var dateKey = '' + date.getFullYear()+ '-' + (date.getMonth()+1) + '-' + date.getDate();");
-//		} else if (DateTypeEnum.MONTH.getValue().equals(queryEntity.getType())) {
-//			keyfBuilder.append("    var dateKey = '' + date.getFullYear()+ '-' + (date.getMonth()+1);");
-//		}
-//		keyfBuilder.append("    return {'strData':dateKey};  ").append(" }");
-//		return keyfBuilder.toString();
-//	}
-//
-//	private String getReduce() {
-//		StringBuilder reduceBuilder = new StringBuilder();
-//		reduceBuilder.append("function Reduce(doc, out) { ").append("    out.playbackNum += 1; ").append(" }");
-//		return reduceBuilder.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()));
+					dailyCount.setOrderNum(new BigDecimal(dbObject.get("totalNum").toString()).intValue());
+					dailyCount.setIncomeTeam(new BigDecimal(dbObject.get("totalIncomeTeam").toString()));
+					dailyCount.setOrderNumTeam(new BigDecimal(dbObject.get("totalNumTeam").toString()).intValue());
+					results.add(dailyCount);
+				} catch (ParseException e) {
+					e.printStackTrace();
+					continue;
+				}
+			}
+		}
+		return results;
+	}
+
+	 	
+	private String getReduce() {
+		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> 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()));
+				dailyCount.setOrderNum(new BigDecimal(dbObject.get("totalNum").toString()).intValue());
+				dailyCount.setIncomeTeam(new BigDecimal(dbObject.get("totalIncomeTeam").toString()));
+				dailyCount.setOrderNumTeam(new BigDecimal(dbObject.get("totalNumTeam").toString()).intValue());
+				results.add(dailyCount);
+			}
+		}
+		return results;
+	}
 
 }

--
Gitblit v1.8.0