fanli/src/main/java/com/yeshi/fanli/dao/mybatis/order/UserOrderDailyStatisticMapper.java
@@ -19,10 +19,9 @@ */ List<UserOrderDailyStatisticDTO> listFanLiAndShareByPlaceOrderTime(@Param("minTime") Date minTime, @Param("maxTime") Date maxTime); /** * * 根据下单时间统计(邀请) * @Title: listTeamByPlaceOrderTime * @Description: * @param minTime @@ -34,4 +33,31 @@ List<UserOrderDailyStatisticDTO> listTeamByPlaceOrderTime(@Param("minTime") Date minTime, @Param("maxTime") Date maxTime); /** * 根据下单时间统计订单数() * @Title: listOrderByPlaceOrderTime * @Description: * @param minTime * @param maxTime * @return * List<UserOrderDailyStatisticDTO> 返回类型 * @throws */ List<UserOrderDailyStatisticDTO> listOrderCountByPlaceOrderTime(@Param("minTime") Date minTime, @Param("maxTime") Date maxTime); /** * 统计团队分红(团队奖励与团队补贴)订单信息 * @Title: listDividentsOrderByCreateTime * @Description: * @param minTime * @param maxTime * @return * List<UserOrderDailyStatisticDTO> 返回类型 * @throws */ List<UserOrderDailyStatisticDTO> listDividentsOrderByCreateTime(@Param("minTime") Date minTime, @Param("maxTime") Date maxTime); } fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java
@@ -56,6 +56,12 @@ 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); } fanli/src/main/java/com/yeshi/fanli/entity/order/OrderMoneyDailyCount.java
@@ -57,20 +57,51 @@ @Field private Integer income; // 收入-我的收益 X 100 @Field private Integer incomeTeam; // 收入-团队收益 X 100 private Integer incomeTeam; // 收入-团队收益 X 100(二级内) @Field private Integer orderNum; // 订单数量-我的 @Field private Integer orderNumTeam; // 订单数量-团队 private Integer orderNumTeam; // 订单数量-团队(二级内) @Field private Integer teamReward; // 团队奖励 X 100 private Integer teamReward; // 团队奖励 X 100 @Field private Integer teamRewardNum; // 团队奖励订单数量 @Field private Integer teamSubsidy; // 团队补贴 X 100 private Integer teamSubsidy; // 团队补贴 X 100 @Field private Integer teamSubsidyNum; // 团队补贴订单数量 @Field private Integer directOrderNum;// 直接订单数量 @Field private Integer inDirectOrderNum;// 间接订单数量 @Field private Integer beyondOrderNum;// 二级外订单数量 public Integer getDirectOrderNum() { return directOrderNum; } public void setDirectOrderNum(Integer directOrderNum) { this.directOrderNum = directOrderNum; } public Integer getInDirectOrderNum() { return inDirectOrderNum; } public void setInDirectOrderNum(Integer inDirectOrderNum) { this.inDirectOrderNum = inDirectOrderNum; } public Integer getBeyondOrderNum() { return beyondOrderNum; } public void setBeyondOrderNum(Integer beyondOrderNum) { this.beyondOrderNum = beyondOrderNum; } @Field private Date updateTime; // 更新时间 public String getId() { fanli/src/main/java/com/yeshi/fanli/entity/order/dividents/TeamDividentsSourceOrderUserMap.java
@@ -14,8 +14,8 @@ */ @Table("yeshi_ec_team_dividents_source_order_user") public class TeamDividentsSourceOrderUserMap { public final static int TYPE_MORE_THAN_2 = 1;// 二级外分红 public final static int TYPE_TEAM_DIVIDENTS = 2;// 团队分红 public final static int TYPE_MORE_THAN_2 = 1;// 二级外分红( 团队补贴) public final static int TYPE_TEAM_DIVIDENTS = 2;// 团队分红(团队奖励) public final static int STATE_SX = 4; public final static int STATE_FK = 1; fanli/src/main/java/com/yeshi/fanli/mapping/order/UserOrderDailyStatisticMapper.xml
@@ -19,14 +19,17 @@ <select id="listFanLiAndShareByPlaceOrderTime" resultMap="BaseResultMap"> SELECT co.`co_uid` as uid,co.`co_child_source_type` AS `type`, SUM(v.`hb_money`) uid,co.`co_child_source_type` AS `type`, SUM(v.`hb_money`) AS money,DATE(co.`co_third_create_time`) AS `day`,COUNT(DISTINCT(CONCAT( co.co_order_no,'#',co.co_source_type))) AS orderCount FROM AS orderCount FROM yeshi_ec_hongbao_v2 v LEFT JOIN yeshi_ec_hongbao_order ho ON yeshi_ec_hongbao_order ho ON ho.`ho_hongbao_id`=v.`hb_id` LEFT JOIN yeshi_ec_common_order co ON co.`co_id`=ho.`ho_order_id` WHERE @@ -40,11 +43,17 @@ <select id="listTeamByPlaceOrderTime" resultMap="BaseResultMap"> SELECT v.`hb_uid` as uid,co.`co_child_source_type` AS `type`, SUM(v.`hb_money`) AS money,DATE(co.`co_third_create_time`) AS `day`,COUNT(DISTINCT(CONCAT( co.co_order_no,'#',co.co_source_type))) AS orderCount FROM yeshi_ec_hongbao_v2 v LEFT JOIN yeshi_ec_hongbao_order ho ON ho.`ho_hongbao_id`=v.`hb_pid` LEFT JOIN yeshi_ec_common_order co ON SELECT v.`hb_uid` as uid,co.`co_child_source_type` AS `type`, SUM(v.`hb_money`) AS money,DATE(co.`co_third_create_time`) AS `day`,COUNT(DISTINCT(CONCAT( co.co_order_no,'#',co.co_source_type))) AS orderCount FROM yeshi_ec_hongbao_v2 v LEFT JOIN yeshi_ec_hongbao_order ho ON ho.`ho_hongbao_id`=v.`hb_pid` LEFT JOIN yeshi_ec_common_order co ON co.`co_id`=ho.`ho_order_id` WHERE (v.`hb_type`=6 OR v.`hb_type`=7 OR v.`hb_type`=21 OR v.`hb_type`=22) AND co.`co_id`>0 AND co.`co_third_create_time`>=#{minTime} AND @@ -54,4 +63,30 @@ </select> <select id="listOrderCountByPlaceOrderTime" resultMap="BaseResultMap"> SELECT uid,a.day,COUNT(*) AS orderCount FROM ( SELECT co.`co_uid` AS uid,co.`co_order_no`,co.`co_source_type`, DATE(co.`co_third_create_time`) AS `day` FROM yeshi_ec_common_order co WHERE co.`co_third_create_time`>=#{minTime} AND #{maxTime}>co.`co_third_create_time` GROUP BY co.`co_order_no`,co.`co_source_type` ) a GROUP BY uid,a.day </select> <select id="listDividentsOrderByCreateTime" resultMap="BaseResultMap"> SELECT ou.`sou_target_uid` AS uid, DATE(ou.`sou_create_time`) AS `day`,ou.`sou_type` AS `type`,SUM(ou.`sou_money`) AS money,COUNT(*) AS orderCount FROM `yeshi_ec_team_dividents_source_order_user` ou WHERE ou.`sou_state`!=4 AND ou.`sou_create_time`>=#{minTime} and #{maxTime}>ou.`sou_create_time` GROUP BY ou.`sou_target_uid`, DATE(ou.`sou_create_time`),ou.`sou_type` </select> </mapper> fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneyDailyCountServiceImpl.java
@@ -1,6 +1,5 @@ package com.yeshi.fanli.service.impl.order; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; @@ -25,13 +24,16 @@ @Override @RequestSerializableByKeyService(key = "#record.uid") public void saveDailyCount(OrderMoneyDailyCount record) { if (record.getUid() == null || record.getCountDay() == null || record.getSourceType() == null) { if (record.getUid() == null || record.getCountDay() == null) { return; // 参数不全 } String gernalTime = TimeUtil.getGernalTime(record.getCountDay().getTime()); String id = StringUtil.Md5(record.getUid() + "#" + record.getSourceType().name() + "#" + gernalTime); String id = record.getUid() + "#"; if (record.getSourceType() != null) id += record.getSourceType().name() + "#"; id += gernalTime; id = StringUtil.Md5(id); // id record.setId(id); // 统计日期-年月日 record.setCountDay(new Date(TimeUtil.convertDateToTemp(gernalTime))); @@ -66,8 +68,16 @@ record.setTeamSubsidy(0); if (record.getTeamSubsidyNum() == null) record.setTeamSubsidyNum(0); if (record.getDirectOrderNum() == null) record.setDirectOrderNum(0); if (record.getInDirectOrderNum() == null) record.setInDirectOrderNum(0); if (record.getBeyondOrderNum() == null) record.setBeyondOrderNum(0); } @Override public List<OrderMoneyDailyCount> query(Long uid, Date minDay, Date maxDay) { return orderMoneyDailyCountDao.query(uid, minDay, maxDay); @@ -92,8 +102,7 @@ public List<OrderMoneyDailyCount> sumGroupByYearMonth(Long uid, Date minDay, Date maxDay) { return orderMoneyDailyCountDao.sumGroupByYearMonth(uid, minDay, maxDay); } @Override public List<OrderMoneyDailyCount> sumTeamGroupByCountDay(Long uid, Date minDay, Date maxDay) { return orderMoneyDailyCountDao.sumTeamGroupByCountDay(uid, minDay, maxDay); fanli/src/main/java/com/yeshi/fanli/service/manger/order/OrderMoneyStatisticManager.java
New file @@ -0,0 +1,204 @@ package com.yeshi.fanli.service.manger.order; import java.math.BigDecimal; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import javax.annotation.Resource; import org.springframework.stereotype.Component; import com.yeshi.fanli.dao.mybatis.order.UserOrderDailyStatisticDTO; import com.yeshi.fanli.dao.mybatis.order.UserOrderDailyStatisticMapper; import com.yeshi.fanli.entity.bus.user.ThreeSaleDetail; import com.yeshi.fanli.entity.order.OrderMoneyDailyCount; import com.yeshi.fanli.entity.order.OrderMoneyDailyCount.SourceTypeEnum; import com.yeshi.fanli.entity.order.dividents.TeamDividentsSourceOrderUserMap; import com.yeshi.fanli.service.inter.order.OrderMoneyDailyCountService; import com.yeshi.fanli.service.inter.user.invite.ThreeSaleDetailService; import com.yeshi.fanli.util.TimeUtil; @Component public class OrderMoneyStatisticManager { @Resource private UserOrderDailyStatisticMapper userOrderDailyStatisticMapper; @Resource private OrderMoneyDailyCountService orderMoneyDailyCountService; @Resource private ThreeSaleDetailService threeSaleDetailService; private static SourceTypeEnum getSourceTypeByDesc(String name) { for (SourceTypeEnum type : SourceTypeEnum.values()) { if (type.getDesc().equalsIgnoreCase(name)) return type; } return null; } /** * 同步自购与分享赚相关数据 * @Title: syncFanliAndShareData * @Description: * @param startTime * @param endTime * void 返回类型 * @throws */ public void syncFanliAndShareData(Date startTime, Date endTime) { List<UserOrderDailyStatisticDTO> dtoList = userOrderDailyStatisticMapper .listFanLiAndShareByPlaceOrderTime(startTime, endTime); for (UserOrderDailyStatisticDTO dto : dtoList) { OrderMoneyDailyCount count = new OrderMoneyDailyCount(); count.setUid(dto.getUid()); count.setCountDay(new Date(TimeUtil.convertToTimeTemp(dto.getDay(), "yyyy-MM-dd"))); if (dto.getMoney() != null) count.setIncome( dto.getMoney().setScale(2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue()); count.setOrderNum(dto.getOrderCount()); count.setSourceType(getSourceTypeByDesc(dto.getType())); count.setYearMonth( TimeUtil.getGernalTime(TimeUtil.convertToTimeTemp(dto.getDay(), "yyyy-MM-dd"), "yyyy-MM")); orderMoneyDailyCountService.saveDailyCount(count); } } /** * 同步团队订单相关数据(1级/2级) * @Title: syncTeamData * @Description: * @param startTime * @param endTime * void 返回类型 * @throws */ public void syncTeamData(Date startTime, Date endTime) { List<UserOrderDailyStatisticDTO> dtoList = userOrderDailyStatisticMapper.listTeamByPlaceOrderTime(startTime, endTime); for (UserOrderDailyStatisticDTO dto : dtoList) { OrderMoneyDailyCount count = new OrderMoneyDailyCount(); count.setUid(dto.getUid()); count.setCountDay(new Date(TimeUtil.convertToTimeTemp(dto.getDay(), "yyyy-MM-dd"))); if (dto.getMoney() != null) count.setIncomeTeam( dto.getMoney().setScale(2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue()); count.setOrderNumTeam(dto.getOrderCount()); count.setSourceType(getSourceTypeByDesc(dto.getType())); count.setYearMonth( TimeUtil.getGernalTime(TimeUtil.convertToTimeTemp(dto.getDay(), "yyyy-MM-dd"), "yyyy-MM")); orderMoneyDailyCountService.saveDailyCount(count); } } /** * 同步订单数量相关数据 * @Title: syncOrderNum * @Description: * @param minTime * @param maxTime * void 返回类型 * @throws */ // 同步订单数量数据 public void syncOrderNum(Date minTime, Date maxTime) { List<UserOrderDailyStatisticDTO> dtoList = userOrderDailyStatisticMapper.listOrderCountByPlaceOrderTime(minTime, maxTime); Set<Long> uidSets = new HashSet<>(); // 统计今天的数据 for (UserOrderDailyStatisticDTO dto : dtoList) { uidSets.add(dto.getUid()); } Map<Long, List<ThreeSaleDetail>> bossMap = new HashMap<>(); Map<String, Integer> countMap = new HashMap<>(); // 聚合数据 for (UserOrderDailyStatisticDTO dto : dtoList) { if (bossMap.get(dto.getUid()) == null) { List<ThreeSaleDetail> list = threeSaleDetailService.listByWorkerUid(dto.getUid()); bossMap.put(dto.getUid(), list); } List<ThreeSaleDetail> tsList = bossMap.get(dto.getUid()); if (tsList != null) for (ThreeSaleDetail tsd : tsList) { String key = tsd.getBossUid() + "#" + dto.getDay() + "#"; if (tsd.getLevel() < 3) key += tsd.getLevel(); else key += 3; if (countMap.get(key) == null) countMap.put(key, 0); countMap.put(key, countMap.get(key) + dto.getOrderCount()); } } // 插入数据 for (Iterator<String> its = countMap.keySet().iterator(); its.hasNext();) { String key = its.next(); String uid = key.split("#")[0]; String day = key.split("#")[1]; int level = Integer.parseInt(key.split("#")[2]); OrderMoneyDailyCount count = new OrderMoneyDailyCount(); count.setUid(Long.parseLong(uid)); count.setCountDay(new Date(TimeUtil.convertToTimeTemp(day, "yyyy-MM-dd"))); if (level == 1) count.setDirectOrderNum(countMap.get(key)); else if (level == 2) count.setInDirectOrderNum(countMap.get(key)); else count.setBeyondOrderNum(countMap.get(key)); count.setYearMonth(TimeUtil.getGernalTime(TimeUtil.convertToTimeTemp(day, "yyyy-MM-dd"), "yyyy-MM")); orderMoneyDailyCountService.saveDailyCount(count); } } /** * 同步分红订单统计数据 * @Title: syncDividents * @Description: * @param minTime * @param maxTime * void 返回类型 * @throws */ public void syncDividents(Date minTime, Date maxTime) { List<UserOrderDailyStatisticDTO> list = userOrderDailyStatisticMapper.listDividentsOrderByCreateTime(minTime, maxTime); if (list != null) for (UserOrderDailyStatisticDTO dto : list) { OrderMoneyDailyCount count = new OrderMoneyDailyCount(); count.setUid(dto.getUid()); count.setCountDay(new Date(TimeUtil.convertToTimeTemp(dto.getDay(), "yyyy-MM-dd"))); if (Integer.parseInt(dto.getType()) == TeamDividentsSourceOrderUserMap.TYPE_TEAM_DIVIDENTS) { count.setTeamReward(dto.getMoney().setScale(2, BigDecimal.ROUND_HALF_UP) .multiply(new BigDecimal(100)).intValue()); count.setTeamRewardNum(dto.getOrderCount()); } else { count.setTeamSubsidy(dto.getMoney().setScale(2, BigDecimal.ROUND_HALF_UP) .multiply(new BigDecimal(100)).intValue()); count.setTeamSubsidyNum(dto.getOrderCount()); } count.setYearMonth( TimeUtil.getGernalTime(TimeUtil.convertToTimeTemp(dto.getDay(), "yyyy-MM-dd"), "yyyy-MM")); orderMoneyDailyCountService.saveDailyCount(count); } } }