| | |
| | | package com.yeshi.fanli.dao.order;
|
| | |
|
| | | import java.util.ArrayList;
|
| | | import java.util.Date;
|
| | | import java.util.List;
|
| | |
|
| | | 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;
|
| | | import org.springframework.stereotype.Repository;
|
| | |
|
| | | import com.mongodb.BasicDBList;
|
| | | import com.mongodb.BasicDBObject;
|
| | | import com.mongodb.DBCollection;
|
| | | import com.mongodb.DBObject;
|
| | | import com.mongodb.GroupCommand;
|
| | | import com.yeshi.fanli.entity.order.OrderMoneyDailyCount;
|
| | |
|
| | | @Repository
|
| | | public class OrderMoneyDailyCountDao {
|
| | |
|
| | | @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);
|
| | | }
|
| | |
|
| | | /**
|
| | | * 选择更新
|
| | | * |
| | | * @param info
|
| | | */
|
| | | public void updateSelective(OrderMoneyDailyCount info) {
|
| | | Query query = new Query();
|
| | | query.addCriteria(Criteria.where("id").is(info.getId()));
|
| | | Update update = new Update();
|
| | | if (info.getIncome() != null)
|
| | | update.set("income", info.getIncome());
|
| | | if (info.getIncomeTeam() != null)
|
| | | update.set("incomeTeam", info.getIncomeTeam());
|
| | | if (info.getOrderNum() != null)
|
| | | update.set("orderNum", info.getOrderNum());
|
| | | if (info.getOrderNumTeam() != null)
|
| | | update.set("orderNumTeam", info.getOrderNumTeam());
|
| | | update.set("updateTime", new Date());
|
| | | mongoTemplate.updateMulti(query, update, OrderMoneyDailyCount.class);
|
| | | }
|
| | |
|
| | | // 查询
|
| | | 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("bossSuperId").lte(uid));
|
| | | }
|
| | |
|
| | | if (maxDay != null) {
|
| | | list.add(Criteria.where("bossSuperId").gte(uid));
|
| | | }
|
| | |
|
| | | 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));
|
| | | }
|
| | | query.with(new Sort(Sort.Direction.ASC, "countDay"));
|
| | | return mongoTemplate.find(query, OrderMoneyDailyCount.class);
|
| | | }
|
| | |
|
| | | |
| | | // |
| | | // public List<PlaybackEntity> queryPlaybackRecord(FunctionUseQueryEntity queryEntity) {
|
| | | // Criteria criteria = Criteria.where("createTime").gte(queryEntity.getStartTime()).lte(queryEntity.getEndTime())
|
| | | // .and("status").is(1);
|
| | | // Query query = Query.query(criteria);
|
| | | //
|
| | | // BasicDBObject initial = new BasicDBObject();
|
| | | // initial.put("playbackNum", 0);
|
| | | //
|
| | | // String reduce = getReduce();
|
| | | // // 进行按天、周、月分组
|
| | | // String keyf = getKeyf(queryEntity);
|
| | | //
|
| | | // DBCollection collection = mongoTemplate.getCollection(COLLNAME);
|
| | | //
|
| | | // GroupCommand xx = new GroupCommand(collection, keyf, query.getQueryObject(), initial, reduce, null);
|
| | | //
|
| | | // BasicDBList objects = (BasicDBList) collection.group(xx);
|
| | | //
|
| | | // List<PlaybackEntity> results = new ArrayList<PlaybackEntity>();
|
| | | // if (objects != null) {
|
| | | // for (int i = 0; i < objects.size(); i++) {
|
| | | // PlaybackEntity play = new PlaybackEntity();
|
| | | // DBObject obj = (DBObject) objects.get(i);
|
| | | // play.setFormateTime((String) obj.get("strData"));
|
| | | // play.setPlaybackNum((Double) obj.get("playbackNum"));
|
| | | // results.add(play);
|
| | | // }
|
| | | // }
|
| | | // return results;
|
| | | // }
|
| | | //
|
| | | // private String getKeyf(FunctionUseQueryEntity queryEntity) {
|
| | | // StringBuilder keyfBuilder = new StringBuilder();
|
| | | // keyfBuilder.append("function(doc){ ").append(" var date = new Date(doc.createTime); ");
|
| | | // if (DateTypeEnum.DATE.getValue().equals(queryEntity.getType())) {
|
| | | // keyfBuilder.append(
|
| | | // " var dateKey = '' + date.getFullYear()+ '-' + (date.getMonth()+1) + '-' + date.getDate();");
|
| | | // } else if (DateTypeEnum.MONTH.getValue().equals(queryEntity.getType())) {
|
| | | // keyfBuilder.append(" var dateKey = '' + date.getFullYear()+ '-' + (date.getMonth()+1);");
|
| | | // }
|
| | | // keyfBuilder.append(" return {'strData':dateKey}; ").append(" }");
|
| | | // return keyfBuilder.toString();
|
| | | // }
|
| | | //
|
| | | // private String getReduce() {
|
| | | // StringBuilder reduceBuilder = new StringBuilder();
|
| | | // reduceBuilder.append("function Reduce(doc, out) { ").append(" out.playbackNum += 1; ").append(" }");
|
| | | // return reduceBuilder.toString();
|
| | | // }
|
| | |
|
| | | }
|
| | | package com.yeshi.fanli.dao.order; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | 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; |
| | | import com.mongodb.DBCollection; |
| | | import com.mongodb.DBObject; |
| | | import com.mongodb.GroupCommand; |
| | | import com.yeshi.common.MongodbBaseDao; |
| | | import com.yeshi.fanli.entity.order.OrderMoneyDailyCount; |
| | | 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"; |
| | | |
| | | /** |
| | | * 选择更新 |
| | | * |
| | | * @param info |
| | | */ |
| | | public void updateSelective(OrderMoneyDailyCount info) { |
| | | Query query = new Query(); |
| | | query.addCriteria(Criteria.where("id").is(info.getId())); |
| | | Update update = new Update(); |
| | | if (info.getIncome() != null) |
| | | update.set("income", info.getIncome()); |
| | | if (info.getIncomeTeam() != null) |
| | | update.set("incomeTeam", info.getIncomeTeam()); |
| | | if (info.getOrderNum() != null) |
| | | 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()); |
| | | if (info.getTeamDividentsOrderNum() != null) |
| | | update.set("teamDividentsOrderNum", info.getTeamDividentsOrderNum()); |
| | | if (info.getDirectOrderNum() != null) |
| | | update.set("directOrderNum", info.getDirectOrderNum()); |
| | | if (info.getInDirectOrderNum() != null) |
| | | update.set("inDirectOrderNum", info.getInDirectOrderNum()); |
| | | if (info.getBeyondOrderNum() != null) |
| | | update.set("beyondOrderNum", info.getBeyondOrderNum()); |
| | | update.set("updateTime", new Date()); |
| | | update(query, update); |
| | | } |
| | | |
| | | // 查询 |
| | | public List<OrderMoneyDailyCount> query(Long uid, Date minDay, Date maxDay) { |
| | | 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").lt(maxDay)); |
| | | |
| | | 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)); |
| | | } |
| | | query.with(new Sort(Sort.Direction.ASC, "countDay")); |
| | | return findList(query); |
| | | } |
| | | |
| | | /** |
| | | * 统计我的金额订单数量-- 来源分组统计 |
| | | * |
| | | * @param uid |
| | | * @param minDate |
| | | * @param maxDate |
| | | * @return |
| | | */ |
| | | 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;" |
| | | + "}"; |
| | | |
| | | // 查询条件 |
| | | 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)); |
| | | } |
| | | |
| | | BasicDBObject agg = new BasicDBObject("sourceType", ""); |
| | | |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("totalIncome", 0); |
| | | map.put("totalNum", 0); |
| | | BasicDBObject dbObject = new BasicDBObject(map); |
| | | // BasicDBObject basicDBObject2 = new BasicDBObject("total", 0); |
| | | |
| | | DBObject result = mongoTemplate.getCollection(collectionName).group(agg, query.getQueryObject(), dbObject, |
| | | reduce); |
| | | Map<String, BasicDBObject> mapResult = result.toMap(); |
| | | if (mapResult.size() > 0) { |
| | | SourceTypeEnum[] arrayEnun = SourceTypeEnum.values(); |
| | | |
| | | for (int i = 0; i < mapResult.size(); i++) { |
| | | BasicDBObject object = mapResult.get(i + ""); |
| | | 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())) { |
| | | sourceTypeEnum = arrayEnun[m]; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | OrderMoneyDailyCount dailyCount = new OrderMoneyDailyCount(); |
| | | dailyCount.setSourceType(sourceTypeEnum); |
| | | dailyCount.setIncome(new BigDecimal(object.get("totalIncome").toString()).intValue()); |
| | | dailyCount.setOrderNum(new BigDecimal(object.get("totalNum").toString()).intValue()); |
| | | listDailyCount.add(dailyCount); |
| | | } |
| | | } |
| | | return listDailyCount; |
| | | } |
| | | |
| | | /** |
| | | * 统计团队金额订单数量-- 来源分组统计 |
| | | * |
| | | * @param uid |
| | | * @param minDate |
| | | * @param maxDate |
| | | * @return |
| | | */ |
| | | public List<OrderMoneyDailyCount> sumTeamGroupBySourceType(Long uid, Date minDate, Date maxDate) { |
| | | List<OrderMoneyDailyCount> listDailyCount = new ArrayList<>(); |
| | | |
| | | // 统计方法 |
| | | String reduce = "function(doc, aggr){" + " aggr.totalIncome += doc.incomeTeam;" |
| | | + " aggr.totalNum += doc.orderNumTeam;" + "}"; |
| | | |
| | | // 查询条件 |
| | | 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)); |
| | | } |
| | | |
| | | BasicDBObject agg = new BasicDBObject("sourceType", ""); |
| | | |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("totalIncome", 0); |
| | | map.put("totalNum", 0); |
| | | BasicDBObject dbObject = new BasicDBObject(map); |
| | | // BasicDBObject basicDBObject2 = new BasicDBObject("total", 0); |
| | | |
| | | DBObject result = mongoTemplate.getCollection(collectionName).group(agg, query.getQueryObject(), dbObject, |
| | | reduce); |
| | | Map<String, BasicDBObject> mapResult = result.toMap(); |
| | | if (mapResult.size() > 0) { |
| | | SourceTypeEnum[] arrayEnun = SourceTypeEnum.values(); |
| | | for (int i = 0; i < mapResult.size(); i++) { |
| | | BasicDBObject object = mapResult.get(i + ""); |
| | | 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())) { |
| | | sourceTypeEnum = arrayEnun[m]; |
| | | break; |
| | | } |
| | | } |
| | | OrderMoneyDailyCount dailyCount = new OrderMoneyDailyCount(); |
| | | dailyCount.setSourceType(sourceTypeEnum); |
| | | 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(); |
| | | // } |
| | | |
| | | /** |
| | | * 统计每天订单收入、数量 |
| | | * @param uid |
| | | * @param minDate |
| | | * @param maxDate |
| | | * @return |
| | | */ |
| | | public List<OrderMoneyDailyCount> sumGroupByCountDay(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("totalIncome", 0); |
| | | map.put("totalNum", 0); |
| | | map.put("totalIncomeTeam", 0); |
| | | map.put("totalNumTeam", 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, getReduce(), 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.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()).intValue()); |
| | | dailyCount.setOrderNumTeam(new BigDecimal(dbObject.get("totalNumTeam").toString()).intValue()); |
| | | results.add(dailyCount); |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | continue; |
| | | } |
| | | } |
| | | } |
| | | return results; |
| | | } |
| | | |
| | | /** |
| | | * 统计每月订单收入、数量 |
| | | * @param uid |
| | | * @param minDate |
| | | * @param maxDate |
| | | * @return |
| | | */ |
| | | public List<OrderMoneyDailyCount> sumGroupByYearMonth(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("totalIncome", 0); |
| | | map.put("totalNum", 0); |
| | | map.put("totalIncomeTeam", 0); |
| | | map.put("totalNumTeam", 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, getReduce(), 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.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()).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(" aggr.totalNum += doc.teamDividentsOrderNum;"); |
| | | 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").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("totalReward", 0); |
| | | map.put("totalRewardNum", 0); |
| | | map.put("totalSubsidy", 0); |
| | | map.put("totalSubsidyNum", 0); |
| | | map.put("totalNum", 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()); |
| | | dailyCount.setTeamDividentsOrderNum(new BigDecimal(dbObject.get("totalNum").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").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("totalReward", 0); |
| | | map.put("totalRewardNum", 0); |
| | | map.put("totalSubsidy", 0); |
| | | map.put("totalSubsidyNum", 0); |
| | | map.put("totalNum", 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()); |
| | | 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; |
| | | } |
| | | |
| | | /** |
| | | * 根据订单排行榜进行uid分组订单数量排序 |
| | | * @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; |
| | | } |
| | | } |