fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserMoneyControllerV2.java
@@ -87,11 +87,10 @@ @Resource private OrderMoneyDailyCountService orderMoneyDailyCountService; @Resource private TeamEincomeRecordService teamEincomeRecordService; private Gson getGson() { GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(BigDecimal.class, new JsonSerializer<BigDecimal>() { @@ -108,7 +107,7 @@ }); return builder.create(); } /** * 用户资金统计 * @@ -128,7 +127,7 @@ vo.setLink(configService.get(ConfigKeyEnum.autoExtractHelpUrl.getKey())); vo.setBalanceMoney(user.getMyHongBao()); vo.setExtractDesc("提现金额就是已成功转账到提现支付宝的资金。"); vo.setMoneyArrivalDesc("资金已到账后提现时间不受限制、金额受限制。"); vo.setMoneyArrivalDesc("资金已到账后提现时间不受限制、金额不受限制。"); // 获取提现中的信息 BigDecimal extractingMoney = extractService.sumVerifyingMoney(uid); @@ -239,9 +238,25 @@ Gson gson = getGson(); out.print(JsonUtil.loadTrueResult(gson.toJson(vo))); } @RequestMapping(value = "getUserMoneyInfo") public void getUserMoneyInfo(AcceptData acceptData, Long uid, PrintWriter out) { if (uid == null || uid == 0) { out.print(JsonUtil.loadFalseResult(1, "用户未登录")); return; } UserInfo user = userInfoService.getUserById(uid); MoneyStatisticVO vo = new MoneyStatisticVO(); vo.setLink(configService.get(ConfigKeyEnum.autoExtractHelpUrl.getKey())); vo.setBalanceMoney(user.getMyHongBao()); // 获取提现中的信息 BigDecimal extractingMoney = extractService.sumVerifyingMoney(uid); if (extractingMoney.compareTo(new BigDecimal(0)) > 0) vo.setExtractingMoneyInfo("提现中:¥" + extractingMoney.setScale(2, RoundingMode.HALF_UP)); Gson gson = getGson(); out.print(JsonUtil.loadTrueResult(gson.toJson(vo))); } private MoneyPredictVO cratePredictVO(List<OrderMoneyDailyCount> list) { MoneyPredictVO predictVO = new MoneyPredictVO(); @@ -257,9 +272,11 @@ if (dailyCount.getOrderNumTeam() != null) predictVO.setTeamNum(predictVO.getTeamNum() + dailyCount.getOrderNumTeam()); if (dailyCount.getIncome() != null) predictVO.setMineMoney(predictVO.getMineMoney().add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncome()), hundred))); predictVO.setMineMoney(predictVO.getMineMoney() .add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncome()), hundred))); if (dailyCount.getIncomeTeam() != null) predictVO.setTeamMoney(predictVO.getTeamMoney().add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncomeTeam()), hundred))); predictVO.setTeamMoney(predictVO.getTeamMoney() .add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncomeTeam()), hundred))); } } predictVO.setTotalNum(predictVO.getTeamNum() + predictVO.getMineNum()); @@ -308,8 +325,6 @@ out.print(JsonUtil.loadTrueResult(json)); } /** * 历史详情 * @@ -387,19 +402,23 @@ Date countDay = dailyCount.getCountDay(); if (datetype == 1 && countDay != null && countDate.equals(formatDay.format(countDay))) { predictVO.setMineNum(dailyCount.getOrderNum()); predictVO.setMineMoney(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncome()), hundred)); predictVO.setMineMoney( MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncome()), hundred)); predictVO.setTeamNum(dailyCount.getOrderNumTeam()); predictVO.setTeamMoney(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncomeTeam()), hundred)); predictVO.setTeamMoney( MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncomeTeam()), hundred)); break; } String yearMonth = dailyCount.getYearMonth(); if (datetype == 2 && !StringUtil.isNullOrEmpty(yearMonth) && countDate.equals(formatMonth.format(TimeUtil.parseYYYYMMDD(DateUtil.getFirstDayOfMonth(yearMonth))))) { if (datetype == 2 && !StringUtil.isNullOrEmpty(yearMonth) && countDate.equals( formatMonth.format(TimeUtil.parseYYYYMMDD(DateUtil.getFirstDayOfMonth(yearMonth))))) { predictVO.setMineNum(dailyCount.getOrderNum()); predictVO.setMineMoney(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncome()), hundred)); predictVO.setMineMoney( MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncome()), hundred)); predictVO.setTeamNum(dailyCount.getOrderNumTeam()); predictVO.setTeamMoney(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncomeTeam()), hundred)); predictVO.setTeamMoney( MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncomeTeam()), hundred)); break; } } @@ -473,7 +492,8 @@ for (OrderMoneyDailyCount dailyCount : listDailyCount) { if (dailyCount.getSourceType() == typeEnum) { detail.setNum(detail.getNum() + dailyCount.getOrderNum()); detail.setMoney(detail.getMoney().add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncome()), hundred))); detail.setMoney(detail.getMoney() .add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncome()), hundred))); } } } @@ -488,8 +508,6 @@ out.print(JsonUtil.loadTrueResult(object)); } /** * 团队分红 * @param acceptData @@ -525,7 +543,6 @@ BigDecimal subsidy = teamEincomeRecordService.sumRecieveByType(uid, TeamEincomeRecord.TYPE_TEAM_SUBSIDY); BigDecimal reward = teamEincomeRecordService.sumRecieveByType(uid, TeamEincomeRecord.TYPE_TEAM_DIVIDENTS); Gson gson = getGson(); JSONObject object = new JSONObject(); object.put("total", subsidy.add(reward).setScale(2).toString()); @@ -535,10 +552,9 @@ object.put("month", gson.toJson(monthVO)); out.print(JsonUtil.loadTrueResult(object)); } private TeamPredictVO crateTeamPredictVO(List<OrderMoneyDailyCount> list) { TeamPredictVO predictVO = new TeamPredictVO(BigDecimal.ZERO,0,BigDecimal.ZERO,0); TeamPredictVO predictVO = new TeamPredictVO(BigDecimal.ZERO, 0, BigDecimal.ZERO, 0); if (list != null && list.size() > 0) { BigDecimal hundred = BigDecimal.valueOf(100); for (OrderMoneyDailyCount dailyCount : list) { @@ -547,20 +563,19 @@ if (dailyCount.getTeamSubsidyNum() != null) predictVO.setSubsidyNum(predictVO.getSubsidyNum() + dailyCount.getTeamSubsidyNum()); if (dailyCount.getTeamReward() != null) predictVO.setReward(predictVO.getReward().add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamReward()), hundred))); predictVO.setReward(predictVO.getReward() .add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamReward()), hundred))); if (dailyCount.getTeamSubsidy() != null) predictVO.setSubsidy(predictVO.getSubsidy().add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamSubsidy()), hundred))); predictVO.setSubsidy(predictVO.getSubsidy() .add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamSubsidy()), hundred))); } } predictVO.setTotalNum(predictVO.getRewardNum() + predictVO.getSubsidyNum()); predictVO.setTotalMoney(predictVO.getReward().add(predictVO.getSubsidy())); return predictVO; } /** * 历史详情 * @@ -570,7 +585,8 @@ * @param out */ @RequestMapping(value = "getTeamDividendHistory") public void getTeamDividendHistory(AcceptData acceptData, Long uid, String date, Integer datetype, PrintWriter out) { public void getTeamDividendHistory(AcceptData acceptData, Long uid, String date, Integer datetype, PrintWriter out) { if (uid == null || uid == 0) { out.print(JsonUtil.loadFalseResult(1, "用户未登录")); return; @@ -638,19 +654,23 @@ Date countDay = dailyCount.getCountDay(); if (datetype == 1 && countDay != null && countDate.equals(formatDay.format(countDay))) { predictVO.setRewardNum(dailyCount.getTeamRewardNum()); predictVO.setReward(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamReward()), hundred)); predictVO.setReward( MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamReward()), hundred)); predictVO.setSubsidyNum(dailyCount.getTeamSubsidyNum()); predictVO.setSubsidy(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamSubsidy()), hundred)); predictVO.setSubsidy( MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamSubsidy()), hundred)); break; } String yearMonth = dailyCount.getYearMonth(); if (datetype == 2 && !StringUtil.isNullOrEmpty(yearMonth) && countDate.equals(formatMonth.format(TimeUtil.parseYYYYMMDD(DateUtil.getFirstDayOfMonth(yearMonth))))) { if (datetype == 2 && !StringUtil.isNullOrEmpty(yearMonth) && countDate.equals( formatMonth.format(TimeUtil.parseYYYYMMDD(DateUtil.getFirstDayOfMonth(yearMonth))))) { predictVO.setRewardNum(dailyCount.getTeamRewardNum()); predictVO.setReward(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamReward()), hundred)); predictVO.setReward( MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamReward()), hundred)); predictVO.setSubsidyNum(dailyCount.getTeamSubsidyNum()); predictVO.setSubsidy(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamSubsidy()), hundred)); predictVO.setSubsidy( MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamSubsidy()), hundred)); break; } } @@ -670,6 +690,5 @@ e.printStackTrace(); } } } 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
@@ -3,6 +3,7 @@ import java.util.Date; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.index.Indexed; import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Field; @@ -46,31 +47,65 @@ @Id @Field private String id; @Indexed @Field private Long uid; // 上级id @Field private SourceTypeEnum sourceType; // 来源类型 @Indexed @Field private String yearMonth; // 统计日期-字符串 @Indexed @Field private Date countDay; // 统计日期 @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/job/order/OrderStatisticJob.java
New file @@ -0,0 +1,134 @@ package com.yeshi.fanli.job.order; import java.util.Date; import javax.annotation.Resource; import org.springframework.stereotype.Component; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.annotation.XxlJob; import com.yeshi.fanli.service.manger.order.OrderMoneyStatisticManager; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TimeUtil; //订单统计任务 @Component public class OrderStatisticJob { @Resource private OrderMoneyStatisticManager orderMoneyStatisticManager; public OrderStatisticJob() { } /** * 同步返利与分享赚 * @Title: syncFanliAndShareData * @Description: * @param param * @return * @throws Exception * ReturnT<String> 返回类型 * @throws */ @XxlJob("order-statistic-syncFanliAndShareData") public ReturnT<String> syncFanliAndShareData(String param) throws Exception { long startTime = System.currentTimeMillis(); if (!StringUtil.isNullOrEmpty(param)) { startTime = TimeUtil.convertToTimeTemp(param, "yyyy-MM-dd"); } Date start = new Date( TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(startTime, "yyyy-MM-dd"), "yyyy-MM-dd")); Date end = new Date(TimeUtil.convertToTimeTemp( TimeUtil.getGernalTime(startTime + 1000 * 60 * 60 * 24L, "yyyy-MM-dd"), "yyyy-MM-dd")); orderMoneyStatisticManager.syncFanliAndShareData(start, end); return ReturnT.SUCCESS; } /** * 同步团队数据 * @Title: syncTeamData * @Description: * @param param * @return * @throws Exception * ReturnT<String> 返回类型 * @throws */ @XxlJob("order-statistic-syncTeamData") public ReturnT<String> syncTeamData(String param) throws Exception { long startTime = System.currentTimeMillis(); if (!StringUtil.isNullOrEmpty(param)) { startTime = TimeUtil.convertToTimeTemp(param, "yyyy-MM-dd"); } Date start = new Date( TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(startTime, "yyyy-MM-dd"), "yyyy-MM-dd")); Date end = new Date(TimeUtil.convertToTimeTemp( TimeUtil.getGernalTime(startTime + 1000 * 60 * 60 * 24L, "yyyy-MM-dd"), "yyyy-MM-dd")); orderMoneyStatisticManager.syncTeamData(start, end); return ReturnT.SUCCESS; } /** * 同步订单数量 * @Title: syncOrderNum * @Description: * @param param * @return * @throws Exception * ReturnT<String> 返回类型 * @throws */ @XxlJob("order-statistic-syncOrderNum") public ReturnT<String> syncOrderNum(String param) throws Exception { long startTime = System.currentTimeMillis(); if (!StringUtil.isNullOrEmpty(param)) { startTime = TimeUtil.convertToTimeTemp(param, "yyyy-MM-dd"); } Date start = new Date( TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(startTime, "yyyy-MM-dd"), "yyyy-MM-dd")); Date end = new Date(TimeUtil.convertToTimeTemp( TimeUtil.getGernalTime(startTime + 1000 * 60 * 60 * 24L, "yyyy-MM-dd"), "yyyy-MM-dd")); orderMoneyStatisticManager.syncOrderNum(start, end); return ReturnT.SUCCESS; } /** * 同步分红 * @Title: syncDividents * @Description: * @param param * @return * @throws Exception * ReturnT<String> 返回类型 * @throws */ @XxlJob("order-statistic-syncDividents") public ReturnT<String> syncDividents(String param) throws Exception { long startTime = System.currentTimeMillis(); if (!StringUtil.isNullOrEmpty(param)) { startTime = TimeUtil.convertToTimeTemp(param, "yyyy-MM-dd"); } Date start = new Date( TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(startTime, "yyyy-MM-dd"), "yyyy-MM-dd")); Date end = new Date(TimeUtil.convertToTimeTemp( TimeUtil.getGernalTime(startTime + 1000 * 60 * 60 * 24L, "yyyy-MM-dd"), "yyyy-MM-dd")); orderMoneyStatisticManager.syncDividents(start, end); return ReturnT.SUCCESS; } } 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); } } }