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.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.dao.MongodbBaseDao;
|
import com.yeshi.fanli.entity.order.OrderMoneyDailyCount;
|
import com.yeshi.fanli.entity.order.OrderMoneyDailyCount.SourceTypeEnum;
|
|
@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.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").lte(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").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));
|
}
|
|
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").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));
|
}
|
|
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").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("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").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("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(" }");
|
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").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("totalReward", 0);
|
map.put("totalRewardNum", 0);
|
map.put("totalSubsidy", 0);
|
map.put("totalSubsidyNum", 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());
|
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").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("totalReward", 0);
|
map.put("totalRewardNum", 0);
|
map.put("totalSubsidy", 0);
|
map.put("totalSubsidyNum", 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());
|
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").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;
|
}
|
}
|