admin
2020-05-19 744594ef1a2f530fc3e86ea9dc48b62247f79420
fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java
@@ -523,4 +523,204 @@
      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").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("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").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("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").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("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;
   }
}