From 98b1a0affd69bbe63223c21fdd2c404e8bedfccb Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期三, 20 五月 2020 17:25:08 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/div' into 2.1.2 --- fanli/src/main/java/com/yeshi/fanli/dao/user/invite/TeamDailyRecordDao.java | 129 +++++++++++++++++++++++++++++++++++------- 1 files changed, 107 insertions(+), 22 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/dao/user/invite/TeamDailyRecordDao.java b/fanli/src/main/java/com/yeshi/fanli/dao/user/invite/TeamDailyRecordDao.java index 85d821e..a20d14b 100644 --- a/fanli/src/main/java/com/yeshi/fanli/dao/user/invite/TeamDailyRecordDao.java +++ b/fanli/src/main/java/com/yeshi/fanli/dao/user/invite/TeamDailyRecordDao.java @@ -9,10 +9,16 @@ import java.util.Locale; 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; @@ -21,6 +27,7 @@ import com.mongodb.GroupCommand; import com.yeshi.fanli.dao.MongodbBaseDao; import com.yeshi.fanli.entity.bus.user.invite.TeamDailyRecord; +import com.yeshi.fanli.vo.order.OrderRankingVO; @Repository public class TeamDailyRecordDao extends MongodbBaseDao<TeamDailyRecord> { @@ -180,9 +187,9 @@ private String getTeamNumReduce() { StringBuilder builder = new StringBuilder(); builder.append("function(doc, aggr){ "); - builder.append(" aggr.directOrderNum += doc.firstNum;"); - builder.append(" aggr.inDirectOrderNum += doc.secondNum;"); - builder.append(" aggr.beyondOrderNum += doc.beyondNum;"); + builder.append(" if(doc.firstNum > 0){ aggr.firstTotal += doc.firstNum;}"); + builder.append(" aggr.secondTotal += doc.secondNum;"); + builder.append(" aggr.beyondTotal += doc.beyondNum;"); builder.append(" }"); return builder.toString(); } @@ -213,9 +220,9 @@ } Map<String, Object> map = new HashMap<>(); - map.put("directOrderNum", 0); - map.put("inDirectOrderNum", 0); - map.put("beyondOrderNum", 0); + map.put("firstTotal", 0); + map.put("secondTotal", 0); + map.put("beyondTotal", 0); BasicDBObject initial = new BasicDBObject(map); // 杩涜鎸夊ぉ銆佸懆銆佹湀鍒嗙粍 @@ -243,9 +250,10 @@ Date dtime = sdf.parse(date); TeamDailyRecord dailyCount = new TeamDailyRecord(); dailyCount.setCountDay(dtime); - dailyCount.setFirstNum(new BigDecimal(dbObject.get("directOrderNum").toString()).intValue()); - dailyCount.setSecondNum(new BigDecimal(dbObject.get("inDirectOrderNum").toString()).intValue()); - dailyCount.setBeyondNum(new BigDecimal(dbObject.get("beyondOrderNum").toString()).intValue()); + dailyCount.setFirstNum(new BigDecimal(dbObject.get("firstTotal").toString()).intValue()); + dailyCount.setSecondNum(new BigDecimal(dbObject.get("secondTotal").toString()).intValue()); + dailyCount.setBeyondNum(new BigDecimal(dbObject.get("beyondTotal").toString()).intValue()); + results.add(dailyCount); } catch (Exception e) { e.printStackTrace(); @@ -281,9 +289,9 @@ } Map<String, Object> map = new HashMap<>(); - map.put("directOrderNum", 0); - map.put("inDirectOrderNum", 0); - map.put("beyondOrderNum", 0); + map.put("firstTotal", 0); + map.put("secondTotal", 0); + map.put("beyondTotal", 0); BasicDBObject initial = new BasicDBObject(map); // 杩涜鎸夊ぉ銆佸懆銆佹湀鍒嗙粍 @@ -307,9 +315,9 @@ TeamDailyRecord dailyCount = new TeamDailyRecord(); dailyCount.setYearMonth(object.toString()); - dailyCount.setFirstNum(new BigDecimal(dbObject.get("directOrderNum").toString()).intValue()); - dailyCount.setSecondNum(new BigDecimal(dbObject.get("inDirectOrderNum").toString()).intValue()); - dailyCount.setBeyondNum(new BigDecimal(dbObject.get("beyondOrderNum").toString()).intValue()); + dailyCount.setFirstNum(new BigDecimal(dbObject.get("firstTotal").toString()).intValue()); + dailyCount.setSecondNum(new BigDecimal(dbObject.get("secondTotal").toString()).intValue()); + dailyCount.setBeyondNum(new BigDecimal(dbObject.get("beyondTotal").toString()).intValue()); results.add(dailyCount); } @@ -342,9 +350,9 @@ } Map<String, Object> map = new HashMap<>(); - map.put("directOrderNum", 0); - map.put("inDirectOrderNum", 0); - map.put("beyondOrderNum", 0); + map.put("firstTotal", 0); + map.put("secondTotal", 0); + map.put("beyondTotal", 0); BasicDBObject initial = new BasicDBObject(map); // 杩涜鎸夊ぉ銆佸懆銆佹湀鍒嗙粍 @@ -367,13 +375,90 @@ } TeamDailyRecord dailyCount = new TeamDailyRecord(); - dailyCount.setFirstNum(new BigDecimal(dbObject.get("directOrderNum").toString()).intValue()); - dailyCount.setSecondNum(new BigDecimal(dbObject.get("inDirectOrderNum").toString()).intValue()); - dailyCount.setBeyondNum(new BigDecimal(dbObject.get("beyondOrderNum").toString()).intValue()); - + dailyCount.setFirstNum(new BigDecimal(dbObject.get("firstTotal").toString()).intValue()); + dailyCount.setSecondNum(new BigDecimal(dbObject.get("secondTotal").toString()).intValue()); + dailyCount.setBeyondNum(new BigDecimal(dbObject.get("beyondTotal").toString()).intValue()); results.add(dailyCount); } } return results; } + + + + + /** + * 鏍规嵁璁㈠崟鎺掕姒滆繘琛寀id鍒嗙粍璁㈠崟鏁伴噺鎺掑簭 + * @param uid + * @param minDate + * @param maxDate + * @return + */ + public List<OrderRankingVO> getRankingByFirstNum(Long uid, Date minDate, Date maxDate) { + LookupOperation lookupToLots = LookupOperation.newLookup(). + from("teamDailyRecord").//鍏宠仈琛ㄥ悕锛屽鏂� + localField("workerUid").// 涓昏〃鍏宠仈瀛楁 + foreignField("uid").// 娆¤〃瀛楁鍏宠仈瀛楁 + as("result"); // 娆¤〃鐨勫埆鍚� + + // 鏌ヨ鏉′欢 + 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("result")); + // 鏉′欢鍖归厤 + aggs.add(Aggregation.match(criteria)); + // 闇�瑕佽繑鍥炵殑瀛楁 + aggs.add(Aggregation.project().and("workerUid").as("workerUid").and("level").as("level") + .and("result.firstNum").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