admin
2020-05-14 dafde3b367e679405ae188106ccbd1b9e522998a
订单资金统计数据更改
6个文件已修改
1个文件已添加
359 ■■■■■ 已修改文件
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 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/order/dividents/TeamDividentsSourceOrderUserMap.java 4 ●●●● 补丁 | 查看 | 原始文档 | 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/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);
            }
    }
}