From e7920b14a9baab97035a1a529da85d124a2bcacd Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期二, 16 六月 2020 10:54:29 +0800
Subject: [PATCH] 云发单对测试用户显示
---
fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java | 360 +++++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 321 insertions(+), 39 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..0a089d3 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;
@@ -23,13 +28,13 @@
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;
+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";
-
/**
* 閫夋嫨鏇存柊
@@ -56,6 +61,8 @@
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)
@@ -73,7 +80,7 @@
if (minDay != null)
list.add(Criteria.where("countDay").gte(minDay));
if (maxDay != null)
- list.add(Criteria.where("countDay").lte(maxDay));
+ list.add(Criteria.where("countDay").lt(maxDay));
Query query = new Query();
if (list.size() > 0) {
@@ -96,9 +103,8 @@
*/
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;" + "}";
+ String reduce = "function(doc, aggr){" + " aggr.totalIncome += doc.income;" + " aggr.totalNum += doc.orderNum;"
+ + "}";
// 鏌ヨ鏉′欢
List<Criteria> list = new ArrayList<Criteria>();
@@ -106,7 +112,7 @@
if (minDate != null)
list.add(Criteria.where("countDay").gte(minDate));
if (maxDate != null)
- list.add(Criteria.where("countDay").lte(maxDate));
+ list.add(Criteria.where("countDay").lt(maxDate));
Query query = new Query();
if (list.size() > 0) {
@@ -135,7 +141,7 @@
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())) {
@@ -166,8 +172,7 @@
List<OrderMoneyDailyCount> listDailyCount = new ArrayList<>();
// 缁熻鏂规硶
- String reduce = "function(doc, aggr){"
- + " aggr.totalIncome += doc.incomeTeam;"
+ String reduce = "function(doc, aggr){" + " aggr.totalIncome += doc.incomeTeam;"
+ " aggr.totalNum += doc.orderNumTeam;" + "}";
// 鏌ヨ鏉′欢
@@ -176,7 +181,7 @@
if (minDate != null)
list.add(Criteria.where("countDay").gte(minDate));
if (maxDate != null)
- list.add(Criteria.where("countDay").lte(maxDate));
+ list.add(Criteria.where("countDay").lt(maxDate));
Query query = new Query();
if (list.size() > 0) {
@@ -204,7 +209,7 @@
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())) {
@@ -232,18 +237,18 @@
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();
-//}
-
-
+ // 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();
+ // }
/**
* 缁熻姣忓ぉ璁㈠崟鏀跺叆銆佹暟閲�
@@ -259,7 +264,7 @@
if (minDate != null)
list.add(Criteria.where("countDay").gte(minDate));
if (maxDate != null)
- list.add(Criteria.where("countDay").lte(maxDate));
+ list.add(Criteria.where("countDay").lt(maxDate));
Query query = new Query();
if (list.size() > 0) {
@@ -290,7 +295,7 @@
if (dbObject == null) {
continue;
}
-
+
Object object = dbObject.get("countDay");
if (object == null) {
continue;
@@ -315,7 +320,6 @@
return results;
}
-
/**
* 缁熻姣忔湀璁㈠崟鏀跺叆銆佹暟閲�
* @param uid
@@ -330,7 +334,7 @@
if (minDate != null)
list.add(Criteria.where("countDay").gte(minDate));
if (maxDate != null)
- list.add(Criteria.where("countDay").lte(maxDate));
+ list.add(Criteria.where("countDay").lt(maxDate));
Query query = new Query();
if (list.size() > 0) {
@@ -360,12 +364,12 @@
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());
@@ -377,8 +381,7 @@
}
return results;
}
-
-
+
private String getTeamReduce() {
StringBuilder builder = new StringBuilder();
builder.append("function(doc, aggr){ ");
@@ -386,11 +389,11 @@
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
@@ -405,7 +408,7 @@
if (minDate != null)
list.add(Criteria.where("countDay").gte(minDate));
if (maxDate != null)
- list.add(Criteria.where("countDay").lte(maxDate));
+ list.add(Criteria.where("countDay").lt(maxDate));
Query query = new Query();
if (list.size() > 0) {
@@ -420,6 +423,7 @@
map.put("totalRewardNum", 0);
map.put("totalSubsidy", 0);
map.put("totalSubsidyNum", 0);
+ map.put("totalNum", 0);
BasicDBObject initial = new BasicDBObject(map);
// 杩涜鎸夊ぉ銆佸懆銆佹湀鍒嗙粍
@@ -436,7 +440,7 @@
if (dbObject == null) {
continue;
}
-
+
Object object = dbObject.get("countDay");
if (object == null) {
continue;
@@ -451,6 +455,7 @@
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();
@@ -475,7 +480,7 @@
if (minDate != null)
list.add(Criteria.where("countDay").gte(minDate));
if (maxDate != null)
- list.add(Criteria.where("countDay").lte(maxDate));
+ list.add(Criteria.where("countDay").lt(maxDate));
Query query = new Query();
if (list.size() > 0) {
@@ -490,6 +495,7 @@
map.put("totalRewardNum", 0);
map.put("totalSubsidy", 0);
map.put("totalSubsidyNum", 0);
+ map.put("totalNum", 0);
BasicDBObject initial = new BasicDBObject(map);
// 杩涜鎸夊ぉ銆佸懆銆佹湀鍒嗙粍
@@ -505,22 +511,298 @@
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