yujian
2020-05-14 d24445181188425fbdc944a862bc82a8c5e52d69
Merge remote-tracking branch 'origin/div' into div
7个文件已修改
2个文件已添加
594 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserMoneyControllerV2.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/order/UserOrderDailyStatisticMapper.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/order/OrderMoneyDailyCount.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/order/dividents/TeamDividentsSourceOrderUserMap.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/order/OrderStatisticJob.java 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/order/UserOrderDailyStatisticMapper.xml 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneyDailyCountServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/manger/order/OrderMoneyStatisticManager.java 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
            }
    }
}