From 8b3c82c0788e23acd889e6f67a91c855693352fd Mon Sep 17 00:00:00 2001 From: yujian <yujian@163.com> Date: 星期三, 13 五月 2020 16:38:29 +0800 Subject: [PATCH] 团队分红统计 --- fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java | 256 ++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 192 insertions(+), 64 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java b/fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java index fa3b3ec..5fb7f62 100644 --- a/fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java +++ b/fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java @@ -10,10 +10,7 @@ import java.util.Locale; import java.util.Map; -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; @@ -24,40 +21,15 @@ 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 { +public class OrderMoneyDailyCountDao extends MongodbBaseDao<OrderMoneyDailyCount> { private static String collectionName = "order_money_daily_count"; - @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); - } /** * 閫夋嫨鏇存柊 @@ -76,24 +48,28 @@ 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()); update.set("updateTime", new Date()); - mongoTemplate.updateMulti(query, update, OrderMoneyDailyCount.class); + update(query, update); } // 鏌ヨ 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("countDay").gte(minDay)); + if (maxDay != null) + list.add(Criteria.where("countDay").lte(maxDay)); - if (minDay != null) { - list.add(Criteria.where("bossSuperId").lte(uid)); - } - - if (maxDay != null) { - list.add(Criteria.where("bossSuperId").gte(uid)); - } - + Query query = new Query(); if (list.size() > 0) { Criteria[] cas = new Criteria[list.size()]; for (int i = 0; i < list.size(); i++) @@ -101,7 +77,7 @@ query.addCriteria(new Criteria().andOperator(cas)); } query.with(new Sort(Sort.Direction.ASC, "countDay")); - return mongoTemplate.find(query, OrderMoneyDailyCount.class); + return findList(query); } /** @@ -114,10 +90,8 @@ */ 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.totalIncome += doc.income;" + " aggr.totalNum += doc.orderNum;" + "}"; // 鏌ヨ鏉′欢 @@ -162,7 +136,7 @@ OrderMoneyDailyCount dailyCount = new OrderMoneyDailyCount(); dailyCount.setSourceType(sourceTypeEnum); - dailyCount.setIncome(new BigDecimal(object.get("totalIncome").toString())); + dailyCount.setIncome(new BigDecimal(object.get("totalIncome").toString()).intValue()); dailyCount.setOrderNum(new BigDecimal(object.get("totalNum").toString()).intValue()); listDailyCount.add(dailyCount); } @@ -183,7 +157,7 @@ // 缁熻鏂规硶 String reduce = "function(doc, aggr){" - + " aggr.totalIncome += parseFloat((Math.round((doc.incomeTeam)*100)/100).toFixed(2));" + + " aggr.totalIncome += doc.incomeTeam;" + " aggr.totalNum += doc.orderNumTeam;" + "}"; // 鏌ヨ鏉′欢 @@ -227,13 +201,34 @@ } } dailyCount.setSourceType(sourceTypeEnum); - dailyCount.setIncome(new BigDecimal(object.get("totalIncome").toString())); + 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(); +//} @@ -293,9 +288,9 @@ Date dtime = sdf.parse(date); OrderMoneyDailyCount dailyCount = new OrderMoneyDailyCount(); dailyCount.setCountDay(dtime); - dailyCount.setIncome(new BigDecimal(dbObject.get("totalIncome").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())); + dailyCount.setIncomeTeam(new BigDecimal(dbObject.get("totalIncomeTeam").toString()).intValue()); dailyCount.setOrderNumTeam(new BigDecimal(dbObject.get("totalNumTeam").toString()).intValue()); results.add(dailyCount); } catch (ParseException e) { @@ -307,19 +302,7 @@ 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 @@ -372,14 +355,159 @@ OrderMoneyDailyCount dailyCount = new OrderMoneyDailyCount(); dailyCount.setYearMonth(object.toString()); - dailyCount.setIncome(new BigDecimal(dbObject.get("totalIncome").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())); + 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; + } + } -- Gitblit v1.8.0