From 3e4ef41ffacd7f5fda2e81c3810cd11a6375b83c Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期一, 15 六月 2020 16:32:35 +0800 Subject: [PATCH] 好单库转链支持 --- fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java | 202 +++++++++++++++++++++++++++++++++++--------------- 1 files changed, 142 insertions(+), 60 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 2ad0044..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,26 +511,25 @@ 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){ "); @@ -534,7 +539,7 @@ builder.append(" }"); return builder.toString(); } - + /** * 缁熻姣忔湀璁㈠崟鏀跺叆銆佹暟閲� * @param uid @@ -549,7 +554,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) { @@ -568,7 +573,8 @@ // 杩涜鎸夊ぉ銆佸懆銆佹湀鍒嗙粍 BasicDBObject agg = new BasicDBObject("countDay", ""); DBCollection collection = mongoTemplate.getCollection(collectionName); - GroupCommand xx = new GroupCommand(collection, agg, query.getQueryObject(), initial, getTeamOrderNumReduce(), null); + GroupCommand xx = new GroupCommand(collection, agg, query.getQueryObject(), initial, getTeamOrderNumReduce(), + null); BasicDBList objects = (BasicDBList) collection.group(xx); List<OrderMoneyDailyCount> results = new ArrayList<>(); @@ -579,19 +585,20 @@ 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.setInDirectOrderNum( + new BigDecimal(dbObject.get("inDirectOrderNum").toString()).intValue()); dailyCount.setBeyondOrderNum(new BigDecimal(dbObject.get("beyondOrderNum").toString()).intValue()); results.add(dailyCount); } catch (Exception e) { @@ -601,8 +608,7 @@ } return results; } - - + /** * 缁熻姣忔湀璁㈠崟鏀跺叆銆佹暟閲� * @param uid @@ -617,7 +623,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) { @@ -636,7 +642,8 @@ // 杩涜鎸夊ぉ銆佸懆銆佹湀鍒嗙粍 BasicDBObject agg = new BasicDBObject("yearMonth", ""); DBCollection collection = mongoTemplate.getCollection(collectionName); - GroupCommand xx = new GroupCommand(collection, agg, query.getQueryObject(), initial, getTeamOrderNumReduce(), null); + GroupCommand xx = new GroupCommand(collection, agg, query.getQueryObject(), initial, getTeamOrderNumReduce(), + null); BasicDBList objects = (BasicDBList) collection.group(xx); List<OrderMoneyDailyCount> results = new ArrayList<>(); @@ -646,24 +653,24 @@ 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 @@ -678,7 +685,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) { @@ -697,7 +704,8 @@ // 杩涜鎸夊ぉ銆佸懆銆佹湀鍒嗙粍 BasicDBObject agg = new BasicDBObject("uid", ""); DBCollection collection = mongoTemplate.getCollection(collectionName); - GroupCommand xx = new GroupCommand(collection, agg, query.getQueryObject(), initial, getTeamOrderNumReduce(), null); + GroupCommand xx = new GroupCommand(collection, agg, query.getQueryObject(), initial, getTeamOrderNumReduce(), + null); BasicDBList objects = (BasicDBList) collection.group(xx); List<OrderMoneyDailyCount> results = new ArrayList<>(); @@ -707,20 +715,94 @@ 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