| | |
| | | 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 javax.annotation.Resource;
|
| | |
|
| | |
| | | import com.mongodb.DBObject;
|
| | | import com.mongodb.GroupCommand;
|
| | | import com.yeshi.fanli.entity.order.OrderMoneyDailyCount;
|
| | | import com.yeshi.fanli.entity.order.OrderMoneyDailyCount.SourceTypeEnum;
|
| | |
|
| | | @Repository
|
| | | public class OrderMoneyDailyCountDao {
|
| | |
|
| | | private static String collectionName = "order_money_daily_count";
|
| | |
|
| | | @Resource
|
| | | private MongoTemplate mongoTemplate;
|
| | |
| | | return mongoTemplate.find(query, OrderMoneyDailyCount.class);
|
| | | }
|
| | |
|
| | | /**
|
| | | * 统计我的金额订单数量-- 来源分组统计
|
| | | * |
| | | * @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 += parseFloat((Math.round((doc.income)*100)/100).toFixed(2));"
|
| | | + " 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 + "");
|
| | | 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()));
|
| | | 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 += parseFloat((Math.round((doc.incomeTeam)*100)/100).toFixed(2));"
|
| | | + " 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 + "");
|
| | | OrderMoneyDailyCount dailyCount = new OrderMoneyDailyCount();
|
| | |
|
| | | SourceTypeEnum sourceTypeEnum = null;
|
| | | for (int m = 0; m < arrayEnun.length; m++) {
|
| | | if (arrayEnun[m].name().equals(object.get("sourceType").toString())) {
|
| | | sourceTypeEnum = arrayEnun[m];
|
| | | break;
|
| | | }
|
| | | }
|
| | | dailyCount.setSourceType(sourceTypeEnum);
|
| | | dailyCount.setIncome(new BigDecimal(object.get("totalIncome").toString()));
|
| | | dailyCount.setOrderNum(new BigDecimal(object.get("totalNum").toString()).intValue());
|
| | | listDailyCount.add(dailyCount);
|
| | | }
|
| | | }
|
| | | return listDailyCount;
|
| | | }
|
| | |
|
| | |
|
| | | // |
| | | // 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();
|
| | | // }
|
| | |
|
| | | /**
|
| | | * 统计每天订单收入、数量
|
| | | * @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()));
|
| | | dailyCount.setOrderNum(new BigDecimal(dbObject.get("totalNum").toString()).intValue());
|
| | | dailyCount.setIncomeTeam(new BigDecimal(dbObject.get("totalIncomeTeam").toString()));
|
| | | dailyCount.setOrderNumTeam(new BigDecimal(dbObject.get("totalNumTeam").toString()).intValue());
|
| | | results.add(dailyCount);
|
| | | } catch (ParseException e) {
|
| | | e.printStackTrace();
|
| | | continue;
|
| | | }
|
| | | }
|
| | | }
|
| | | return results;
|
| | | }
|
| | |
|
| | | |
| | | private String getReduce() {
|
| | | 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> 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()));
|
| | | dailyCount.setOrderNum(new BigDecimal(dbObject.get("totalNum").toString()).intValue());
|
| | | dailyCount.setIncomeTeam(new BigDecimal(dbObject.get("totalIncomeTeam").toString()));
|
| | | dailyCount.setOrderNumTeam(new BigDecimal(dbObject.get("totalNumTeam").toString()).intValue());
|
| | | results.add(dailyCount);
|
| | | }
|
| | | }
|
| | | return results;
|
| | | }
|
| | |
|
| | | }
|