From 8b3c82c0788e23acd889e6f67a91c855693352fd Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期三, 13 五月 2020 16:38:29 +0800
Subject: [PATCH] 团队分红统计

---
 fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java |  256 ++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 192 insertions(+), 64 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 fa3b3ec..5fb7f62 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
@@ -10,10 +10,7 @@
 import java.util.Locale;
 import java.util.Map;
 
-import javax.annotation.Resource;
-
 import org.springframework.data.domain.Sort;
-import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.data.mongodb.core.query.Update;
@@ -24,40 +21,15 @@
 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 {
+public class OrderMoneyDailyCountDao extends MongodbBaseDao<OrderMoneyDailyCount> {
 
 	private static String collectionName = "order_money_daily_count";
 
-	@Resource
-	private MongoTemplate mongoTemplate;
-
-	/**
-	 * 鏂板
-	 * 
-	 * @param record
-	 */
-	public void save(OrderMoneyDailyCount record) {
-		if (record == null) {
-			return;
-		}
-		mongoTemplate.save(record);
-	}
-
-	/**
-	 * 鏌ヨID
-	 * 
-	 * @param id
-	 * @return
-	 */
-	public OrderMoneyDailyCount getById(String id) {
-		Query query = new Query();
-		query.addCriteria(Criteria.where("id").is(id));
-		return mongoTemplate.findOne(query, OrderMoneyDailyCount.class);
-	}
 
 	/**
 	 * 閫夋嫨鏇存柊
@@ -76,24 +48,28 @@
 			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());
 		update.set("updateTime", new Date());
-		mongoTemplate.updateMulti(query, update, OrderMoneyDailyCount.class);
+		update(query, update);
 	}
 
 	// 鏌ヨ
 	public List<OrderMoneyDailyCount> query(Long uid, Date minDay, Date maxDay) {
-		Query query = new Query();
 		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));
 
-		if (minDay != null) {
-			list.add(Criteria.where("bossSuperId").lte(uid));
-		}
-
-		if (maxDay != null) {
-			list.add(Criteria.where("bossSuperId").gte(uid));
-		}
-
+		Query query = new Query();
 		if (list.size() > 0) {
 			Criteria[] cas = new Criteria[list.size()];
 			for (int i = 0; i < list.size(); i++)
@@ -101,7 +77,7 @@
 			query.addCriteria(new Criteria().andOperator(cas));
 		}
 		query.with(new Sort(Sort.Direction.ASC, "countDay"));
-		return mongoTemplate.find(query, OrderMoneyDailyCount.class);
+		return findList(query);
 	}
 
 	/**
@@ -114,10 +90,8 @@
 	 */
 	public List<OrderMoneyDailyCount> sumGroupBySourceType(Long uid, Date minDate, Date maxDate) {
 		List<OrderMoneyDailyCount> listDailyCount = new ArrayList<>();
-
-		// 缁熻鏂规硶
 		String reduce = "function(doc, aggr){"
-				+ " aggr.totalIncome += parseFloat((Math.round((doc.income)*100)/100).toFixed(2));"
+				+ " aggr.totalIncome += doc.income;"
 				+ " aggr.totalNum += doc.orderNum;" + "}";
 
 		// 鏌ヨ鏉′欢
@@ -162,7 +136,7 @@
 
 				OrderMoneyDailyCount dailyCount = new OrderMoneyDailyCount();
 				dailyCount.setSourceType(sourceTypeEnum);
-				dailyCount.setIncome(new BigDecimal(object.get("totalIncome").toString()));
+				dailyCount.setIncome(new BigDecimal(object.get("totalIncome").toString()).intValue());
 				dailyCount.setOrderNum(new BigDecimal(object.get("totalNum").toString()).intValue());
 				listDailyCount.add(dailyCount);
 			}
@@ -183,7 +157,7 @@
 
 		// 缁熻鏂规硶
 		String reduce = "function(doc, aggr){"
-				+ " aggr.totalIncome += parseFloat((Math.round((doc.incomeTeam)*100)/100).toFixed(2));"
+				+ " aggr.totalIncome += doc.incomeTeam;"
 				+ " aggr.totalNum += doc.orderNumTeam;" + "}";
 
 		// 鏌ヨ鏉′欢
@@ -227,13 +201,34 @@
 					}
 				}
 				dailyCount.setSourceType(sourceTypeEnum);
-				dailyCount.setIncome(new BigDecimal(object.get("totalIncome").toString()));
+				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();
+//}
 
 	
 
@@ -293,9 +288,9 @@
 					Date dtime = sdf.parse(date);
 					OrderMoneyDailyCount dailyCount = new OrderMoneyDailyCount();
 					dailyCount.setCountDay(dtime);
-					dailyCount.setIncome(new BigDecimal(dbObject.get("totalIncome").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()));
+					dailyCount.setIncomeTeam(new BigDecimal(dbObject.get("totalIncomeTeam").toString()).intValue());
 					dailyCount.setOrderNumTeam(new BigDecimal(dbObject.get("totalNumTeam").toString()).intValue());
 					results.add(dailyCount);
 				} catch (ParseException e) {
@@ -307,19 +302,7 @@
 		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
@@ -372,14 +355,159 @@
 				
 				OrderMoneyDailyCount dailyCount = new OrderMoneyDailyCount();
 				dailyCount.setYearMonth(object.toString());
-				dailyCount.setIncome(new BigDecimal(dbObject.get("totalIncome").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()));
+				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;
+	}
+	
 }

--
Gitblit v1.8.0