admin
2020-03-19 0d91bad397c1a1b41bc77d9cd9f7555ed78f7f1a
团队奖励相关机制建立
28个文件已修改
10个文件已添加
2057 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserAccountController.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/money/OrderTeamRewardDebtMapper.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/money/OrderTeamRewardDebtRepayHistoryMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/order/InviteOrderSubsidyMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/order/OrderTeamRewardMapper.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/bus/msg/MsgMoneyDetail.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/money/InviteOrderSubsidyDebt.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/money/OrderTeamRewardDebt.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/money/UserMoneyDetail.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/order/InviteOrderSubsidy.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/order/OrderTeamReward.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/exception/money/OrderTeamRewardDebtException.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/money/InviteOrderSubsidyDebtMapper.xml 240 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/money/OrderTeamRewardDebtMapper.xml 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/money/OrderTeamRewardDebtRepayHistoryMapper.xml 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/order/InviteOrderSubsidyMapper.xml 239 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/order/OrderTeamRewardMapper.xml 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/money/OrderTeamRewardDebtServiceImpl.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/money/msg/UserMoneyMsgNotificationServiceImpl.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/InviteOrderSubsidyServiceImpl.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/InviteOrderSubsidyServiceImplV2.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMoneyComputeServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderTeamRewardServiceImpl.java 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/ThreeSaleSerivceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/money/OrderTeamRewardDebtService.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/money/msg/UserMoneyMsgNotificationService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/order/InviteOrderSubsidyService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/order/InviteOrderSubsidyServiceV2.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderHongBaoMoneyComputeService.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderMoneySettleService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderTeamRewardService.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/invite/ThreeSaleSerivce.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/factory/UserMoneyDetailFactory.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/factory/msg/MsgMoneyDetailFactory.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/factory/msg/UserMsgVOFactory.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/order/InviteOrderSubsidyMessageListener.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserAccountController.java
@@ -69,6 +69,7 @@
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.ThreadUtil;
import com.yeshi.fanli.util.VersionUtil;
import com.yeshi.fanli.util.account.UserUtil;
import com.yeshi.fanli.util.wx.WXLoginUtil;
@@ -174,7 +175,6 @@
    @Resource
    private DeviceActiveService deviceActiveService;
    /**
     * 
     * @param acceptData
@@ -192,6 +192,13 @@
    public void login(AcceptData acceptData, String code, String vcode, String phone, boolean wxinstall,
            String tbOpenid, String tbNickName, String tbPortrait, String tbSession, int loginType, Boolean first,
            HttpSession session, HttpServletRequest request, PrintWriter out) {
        // 2.0以下版本不允许登录
        if (!VersionUtil.greaterThan_2_0(acceptData.getPlatform(), acceptData.getVersion())) {
            out.print("请升级到最新版本");
            return;
        }
        BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
                acceptData.getPackages());
        if (system == null) {
@@ -306,6 +313,12 @@
    @RequestMapping(value = "register")
    public void register(AcceptData acceptData, String tbOpenid, String tbNickName, String tbPortrait, String vcode,
            String phone, HttpServletRequest request, HttpSession session, PrintWriter out) {
        // 2.0以下版本不允许登录
        if (!VersionUtil.greaterThan_2_0(acceptData.getPlatform(), acceptData.getVersion())) {
            out.print("请升级到最新版本");
            return;
        }
        BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
                acceptData.getPackages());
        if (system == null) {
@@ -355,7 +368,6 @@
            out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
        }
    }
    /**
     * 获取用户ID
@@ -1145,6 +1157,12 @@
    public void loginNew(AcceptData acceptData, String vcode, String phone, String code, int loginType,
            HttpServletRequest request, PrintWriter out) {
        // 2.0以下版本不允许登录
        if (!VersionUtil.greaterThan_2_0(acceptData.getPlatform(), acceptData.getVersion())) {
            out.print("请升级到最新版本");
            return;
        }
        try {
            BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
                    acceptData.getPackages());
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/money/OrderTeamRewardDebtMapper.java
New file
@@ -0,0 +1,48 @@
package com.yeshi.fanli.dao.mybatis.money;
import java.math.BigDecimal;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.yeshi.fanli.dao.BaseMapper;
import com.yeshi.fanli.entity.money.OrderTeamRewardDebt;
public interface OrderTeamRewardDebtMapper extends BaseMapper<OrderTeamRewardDebt> {
    /**
     * 检索(根据剩余资金与用户ID)
     *
     * @param minMoney
     * @param maxMoney
     * @param uid
     * @param page
     * @param pageSize
     * @return
     */
    List<OrderTeamRewardDebt> listByLeftMoneyAndUid(@Param("minMoney") BigDecimal minMoney,
            @Param("maxMoney") BigDecimal maxMoney, @Param("uid") Long uid, @Param("start") long start,
            @Param("count") int count);
    /**
     * 检索(根据剩余资金与用户ID)
     *
     * @param minMoney
     * @param maxMoney
     * @param uid
     * @return
     */
    long countByLeftMoneyAndUid(@Param("minMoney") BigDecimal minMoney, @Param("maxMoney") BigDecimal maxMoney,
            @Param("uid") Long uid);
    OrderTeamRewardDebt selectByPrimaryKeyForUpdate(Long id);
    /**
     * 计算欠款金额(根据用户ID)
     *
     * @param uid
     * @return
     */
    BigDecimal sumLeftMoneyByUid(Long uid);
}
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/money/OrderTeamRewardDebtRepayHistoryMapper.java
New file
@@ -0,0 +1,8 @@
package com.yeshi.fanli.dao.mybatis.money;
import com.yeshi.fanli.dao.BaseMapper;
import com.yeshi.fanli.entity.money.OrderTeamRewardDebtRepayHistory;
public interface OrderTeamRewardDebtRepayHistoryMapper extends BaseMapper<OrderTeamRewardDebtRepayHistory> {
}
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/order/InviteOrderSubsidyMapper.java
@@ -48,4 +48,8 @@
     * @return
     */
    List<InviteOrderSubsidy> listByOrderNoAndType(@Param("orderNo") String orderNo, @Param("type") Integer type);
    InviteOrderSubsidy selectByPrimaryKeyForUpdate(Long id);
}
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/order/OrderTeamRewardMapper.java
New file
@@ -0,0 +1,99 @@
package com.yeshi.fanli.dao.mybatis.order;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.yeshi.fanli.dao.BaseMapper;
import com.yeshi.fanli.entity.order.OrderTeamReward;
public interface OrderTeamRewardMapper extends BaseMapper<OrderTeamReward> {
    /**
     * 查询用户补贴
     *
     * @param uid
     * @param orderNo
     * @param Type
     * @return
     */
    OrderTeamReward getByOrderNoAndType(@Param("uid") Long uid, @Param("orderNo") String orderNo,
            @Param("type") Integer type);
    /**
     * 查询加锁
     *
     * @param uid
     * @param orderNo
     * @param type
     * @return
     */
    OrderTeamReward getByOrderNoAndTypeForUpdate(@Param("uid") Long uid, @Param("orderNo") String orderNo,
            @Param("type") Integer type);
    /**
     * 根据订单号与来源类型查询
     *
     * @param orderNo
     * @param type
     * @return
     */
    long countByOrderNoAndType(@Param("orderNo") String orderNo, @Param("type") Integer type);
    /**
     * 根据订单号与来源类型查询
     *
     * @param orderNo
     * @param type
     * @return
     */
    List<OrderTeamReward> listByOrderNoAndType(@Param("orderNo") String orderNo, @Param("type") Integer type);
    /**
     * 根据补贴与用户ID查询
     * @Title: selectBySubsidyIdAndUid
     * @Description:
     * @param subsidyId
     * @param uid
     * @return
     * OrderTeamReward 返回类型
     * @throws
     */
    OrderTeamReward selectBySubsidyIdAndUidForUpdate(@Param("subsidyId") Long subsidyId, @Param("uid") Long uid);
    /**
     * 根据补贴ID查询
     * @Title: listBySubsidyId
     * @Description:
     * @param subsidyId
     * @return
     * List<OrderTeamReward> 返回类型
     * @throws
     */
    List<OrderTeamReward> listBySubsidyId(Long subsidyId);
    /**
     * 通过用户ID查询可以结算的奖励列表
     * @Title: listCanSettleByUid
     * @Description:
     * @param uid
     * @param page
     * @param pageSize
     * @return
     * List<OrderTeamReward> 返回类型
     * @throws
     */
    List<OrderTeamReward> listCanSettleByUid(@Param("uid") Long uid, @Param("start") long start,
            @Param("count") int count);
    /**
     * 通过用户ID统计可以结算的奖励数量
     * @Title: countCanSettle
     * @Description:
     * @param uid
     * @return
     * long 返回类型
     * @throws
     */
    long countCanSettle(@Param("uid") Long uid);
}
fanli/src/main/java/com/yeshi/fanli/entity/bus/msg/MsgMoneyDetail.java
@@ -44,7 +44,8 @@
        redPackUseFail("红包使用失败"),
        redPackForbid("红包封禁"),
        redPackForbidRemove("红包解封"),
        redPackDeduct("红包扣除");
        redPackDeduct("红包扣除"),
        orderTeamReward("团队奖励");
        private final String desc;
fanli/src/main/java/com/yeshi/fanli/entity/money/InviteOrderSubsidyDebt.java
@@ -30,6 +30,16 @@
    private Date createTime;
    @Column(name = "sd_update_time")
    private Date updateTime;
    @Column(name = "sd_trade_id")
    private String tradeId;
    public String getTradeId() {
        return tradeId;
    }
    public void setTradeId(String tradeId) {
        this.tradeId = tradeId;
    }
    public Long getId() {
        return id;
fanli/src/main/java/com/yeshi/fanli/entity/money/OrderTeamRewardDebt.java
@@ -29,6 +29,16 @@
    private Date createTime;
    @Column(name = "trd_update_time")
    private Date updateTime;
    @Column(name = "trd_trade_id")
    private String tradeId;
    public String getTradeId() {
        return tradeId;
    }
    public void setTradeId(String tradeId) {
        this.tradeId = tradeId;
    }
    public Long getId() {
        return id;
fanli/src/main/java/com/yeshi/fanli/entity/money/UserMoneyDetail.java
@@ -56,7 +56,8 @@
        redPackExchange("红包提现到余额", "http://img.flqapp.com/resource/msg/icon_hongbao_tixian.png", ""),
        extractAutoWX("自动提现", "http://img.flqapp.com/resource/money_detail/icon_extract.png", ""),
        extractAutoWXRefund("自动提现失败", "http://img.flqapp.com/resource/money_detail/icon_extract.png", ""),
        subsidy("额外补贴", "http://img.flqapp.com/resource/msg/icon_msg_subsidy.png", "");
        subsidy("额外补贴", "http://img.flqapp.com/resource/msg/icon_msg_subsidy.png", ""),
        orderTeamReward("团队奖励", "http://img.flqapp.com/resource/msg/icon_msg_subsidy.png", "");
        private final String desc;
        private final String picture;
fanli/src/main/java/com/yeshi/fanli/entity/order/InviteOrderSubsidy.java
@@ -14,6 +14,10 @@
 */
@Table("yeshi_ec_invite_order_subsidy")
public class InviteOrderSubsidy {
    public static final int LEVEL_ONE = 1;// 直接补贴
    public static final int LEVEL_TWO = 2;// 间接补贴
    // 未知
    public static final int STATE_UNKNOWN = 0;
    // 可补贴
@@ -49,6 +53,36 @@
    private Date createTime;
    @Column(name = "os_update_time")
    private Date updateTime;
    @Column(name = "os_pre_get_time")
    private Date preGetTime;
    @Column(name = "os_get_time")
    private Date getTime;
    @Column(name = "os_level")
    private Integer level;// 直接/间接
    public Integer getLevel() {
        return level;
    }
    public void setLevel(Integer level) {
        this.level = level;
    }
    public Date getPreGetTime() {
        return preGetTime;
    }
    public void setPreGetTime(Date preGetTime) {
        this.preGetTime = preGetTime;
    }
    public Date getGetTime() {
        return getTime;
    }
    public void setGetTime(Date getTime) {
        this.getTime = getTime;
    }
    public Long getId() {
        return id;
fanli/src/main/java/com/yeshi/fanli/entity/order/OrderTeamReward.java
@@ -13,6 +13,10 @@
 */
@Table("yeshi_ec_order_team_reward")
public class OrderTeamReward {
    public static final int LEVEL_ONE = 1;// 直接奖励
    public static final int LEVEL_TWO = 2;// 间接奖励
    // 未知
    public static final int STATE_UNKNOWN = 0;
    // 未到账
@@ -46,10 +50,27 @@
    private BigDecimal money;
    @Column(name = "otr_original_money")
    private BigDecimal originalMoney;
    @Column(name = "otr_pre_get_time")
    private Date preGetTime;// 预估到账时间
    @Column(name = "otr_get_time")
    private Date getTime;// 实际到账时间
    @Column(name = "otr_create_time")
    private Date createTime;
    @Column(name = "otr_update_time")
    private Date updateTime;
    @Column(name = "otr_level")
    private Integer level;// 直接/间接补贴
    public Integer getLevel() {
        return level;
    }
    public void setLevel(Integer level) {
        this.level = level;
    }
    public Long getId() {
        return id;
@@ -131,4 +152,20 @@
        this.updateTime = updateTime;
    }
    public Date getPreGetTime() {
        return preGetTime;
    }
    public void setPreGetTime(Date preGetTime) {
        this.preGetTime = preGetTime;
    }
    public Date getGetTime() {
        return getTime;
    }
    public void setGetTime(Date getTime) {
        this.getTime = getTime;
    }
}
fanli/src/main/java/com/yeshi/fanli/exception/money/OrderTeamRewardDebtException.java
New file
@@ -0,0 +1,20 @@
package com.yeshi.fanli.exception.money;
import com.yeshi.fanli.exception.BaseException;
public class OrderTeamRewardDebtException extends BaseException {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    public OrderTeamRewardDebtException(int code, String msg) {
        super(code, msg);
    }
    public OrderTeamRewardDebtException() {
        super();
    }
}
fanli/src/main/java/com/yeshi/fanli/mapping/money/InviteOrderSubsidyDebtMapper.xml
@@ -1,132 +1,108 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeshi.fanli.dao.mybatis.money.InviteOrderSubsidyDebtMapper">
    <resultMap id="BaseResultMap"
        type="com.yeshi.fanli.entity.money.InviteOrderSubsidyDebt">
        <id column="sd_id" property="id" jdbcType="BIGINT" />
        <result column="sd_uid" property="uid" jdbcType="BIGINT" />
        <result column="sd_origin_money" property="originMoney"
            jdbcType="DECIMAL" />
        <result column="sd_left_money" property="leftMoney" jdbcType="DECIMAL" />
        <result column="sd_source_id" property="sourceId" jdbcType="BIGINT" />
        <result column="sd_beizhu" property="beiZhu" jdbcType="VARCHAR" />
        <result column="sd_create_time" property="createTime" jdbcType="TIMESTAMP" />
        <result column="sd_update_time" property="updateTime" jdbcType="TIMESTAMP" />
    </resultMap>
    <sql id="Base_Column_List">sd_id,sd_uid,sd_origin_money,sd_left_money,sd_source_id,sd_beizhu,sd_create_time,sd_update_time
    </sql>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap"
        parameterType="java.lang.Long">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_invite_order_subsidy_debt where sd_id =
        #{id,jdbcType=BIGINT}
    </select>
    <select id="selectByPrimaryKeyForUpdate" resultMap="BaseResultMap"
        parameterType="java.lang.Long">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_invite_order_subsidy_debt where sd_id =
        #{0} for update
    </select>
    <select id="listByLeftMoneyAndUid" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_invite_order_subsidy_debt where sd_uid =
        #{uid}
        <if test="minMoney!=null">
            and sd_left_money>=#{minMoney}
        </if>
        <if test="maxMoney!=null">
            and #{maxMoney}>sd_left_money
        </if>
        limit #{start},#{count}
    </select>
    <select id="countByLeftMoneyAndUid" resultType="java.lang.Long">
        select
        count(*)
        from yeshi_ec_invite_order_subsidy_debt where sd_uid =
        #{uid}
        <if test="minMoney!=null">
            and sd_left_money>=#{minMoney}
        </if>
        <if test="maxMoney!=null">
            and #{maxMoney}>sd_left_money
        </if>
    </select>
    <select id="sumLeftMoneyByUid" resultType="java.math.BigDecimal" parameterType="java.lang.Long">
        select
        sum(sd_left_money)
        from yeshi_ec_invite_order_subsidy_debt where sd_uid =
        #{0}
    </select>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from
        yeshi_ec_invite_order_subsidy_debt where sd_id = #{id,jdbcType=BIGINT}
    </delete>
    <insert id="insert" parameterType="com.yeshi.fanli.entity.money.InviteOrderSubsidyDebt"
        useGeneratedKeys="true" keyProperty="id">insert into
        yeshi_ec_invite_order_subsidy_debt
        (sd_id,sd_uid,sd_origin_money,sd_left_money,sd_source_id,sd_beizhu,sd_create_time,sd_update_time)
        values
        (#{id,jdbcType=BIGINT},#{uid,jdbcType=BIGINT},#{originMoney,jdbcType=DECIMAL},#{leftMoney,jdbcType=DECIMAL},#{sourceId,jdbcType=BIGINT},#{beiZhu,jdbcType=VARCHAR},#{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP})
    </insert>
    <insert id="insertSelective" parameterType="com.yeshi.fanli.entity.money.InviteOrderSubsidyDebt"
        useGeneratedKeys="true" keyProperty="id">
        insert into yeshi_ec_invite_order_subsidy_debt
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">sd_id,</if>
            <if test="uid != null">sd_uid,</if>
            <if test="originMoney != null">sd_origin_money,</if>
            <if test="leftMoney != null">sd_left_money,</if>
            <if test="sourceId != null">sd_source_id,</if>
            <if test="beiZhu != null">sd_beizhu,</if>
            <if test="createTime != null">sd_create_time,</if>
            <if test="updateTime != null">sd_update_time,</if>
        </trim>
        values
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id,jdbcType=BIGINT},</if>
            <if test="uid != null">#{uid,jdbcType=BIGINT},</if>
            <if test="originMoney != null">#{originMoney,jdbcType=DECIMAL},</if>
            <if test="leftMoney != null">#{leftMoney,jdbcType=DECIMAL},</if>
            <if test="sourceId != null">#{sourceId,jdbcType=BIGINT},</if>
            <if test="beiZhu != null">#{beiZhu,jdbcType=VARCHAR},</if>
            <if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">#{updateTime,jdbcType=TIMESTAMP},</if>
        </trim>
    </insert>
    <update id="updateByPrimaryKey" parameterType="com.yeshi.fanli.entity.money.InviteOrderSubsidyDebt">update
        yeshi_ec_invite_order_subsidy_debt set sd_uid =
        #{uid,jdbcType=BIGINT},sd_origin_money =
        #{originMoney,jdbcType=DECIMAL},sd_left_money =
        #{leftMoney,jdbcType=DECIMAL},sd_source_id =
        #{sourceId,jdbcType=BIGINT},sd_beizhu =
        #{beiZhu,jdbcType=VARCHAR},sd_create_time =
        #{createTime,jdbcType=TIMESTAMP},sd_update_time =
        #{updateTime,jdbcType=TIMESTAMP} where sd_id = #{id,jdbcType=BIGINT}
    </update>
    <update id="updateByPrimaryKeySelective" parameterType="com.yeshi.fanli.entity.money.InviteOrderSubsidyDebt">
        update yeshi_ec_invite_order_subsidy_debt
        <set>
            <if test="uid != null">sd_uid=#{uid,jdbcType=BIGINT},</if>
            <if test="originMoney != null">sd_origin_money=#{originMoney,jdbcType=DECIMAL},</if>
            <if test="leftMoney != null">sd_left_money=#{leftMoney,jdbcType=DECIMAL},</if>
            <if test="sourceId != null">sd_source_id=#{sourceId,jdbcType=BIGINT},</if>
            <if test="beiZhu != null">sd_beizhu=#{beiZhu,jdbcType=VARCHAR},</if>
            <if test="createTime != null">sd_create_time=#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">sd_update_time=#{updateTime,jdbcType=TIMESTAMP},</if>
        </set>
        where sd_id = #{id,jdbcType=BIGINT}
    </update>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeshi.fanli.dao.mybatis.money.InviteOrderSubsidyDebtMapper">
    <resultMap id="BaseResultMap"
        type="com.yeshi.fanli.entity.money.InviteOrderSubsidyDebt">
        <id column="sd_id" property="id" jdbcType="BIGINT" />
        <result column="sd_uid" property="uid" jdbcType="BIGINT" />
        <result column="sd_origin_money" property="originMoney"
            jdbcType="DECIMAL" />
        <result column="sd_left_money" property="leftMoney" jdbcType="DECIMAL" />
        <result column="sd_source_id" property="sourceId" jdbcType="BIGINT" />
        <result column="sd_beizhu" property="beiZhu" jdbcType="VARCHAR" />
        <result column="sd_create_time" property="createTime" jdbcType="TIMESTAMP" />
        <result column="sd_update_time" property="updateTime" jdbcType="TIMESTAMP" />
        <result column="sd_trade_id" property="tradeId" jdbcType="VARCHAR" />
    </resultMap>
    <sql id="Base_Column_List">sd_id,sd_uid,sd_origin_money,sd_left_money,sd_source_id,sd_beizhu,sd_create_time,sd_update_time,sd_trade_id</sql>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap"
        parameterType="java.lang.Long">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_invite_order_subsidy_debt where sd_id =
        #{id,jdbcType=BIGINT}
    </select>
    <select id="selectByPrimaryKeyForUpdate" resultMap="BaseResultMap"
        parameterType="java.lang.Long">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_invite_order_subsidy_debt where sd_id = #{0} for update
    </select>
    <select id="listByLeftMoneyAndUid" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_invite_order_subsidy_debt where sd_uid = #{uid}
        <if test="minMoney!=null">and sd_left_money&gt;=#{minMoney}</if>
        <if test="maxMoney!=null">and #{maxMoney}&gt;sd_left_money</if>
        limit #{start},#{count}
    </select>
    <select id="countByLeftMoneyAndUid" resultType="java.lang.Long">
        select count(*) from yeshi_ec_invite_order_subsidy_debt where sd_uid =
        #{uid}
        <if test="minMoney!=null">and sd_left_money&gt;=#{minMoney}</if>
        <if test="maxMoney!=null">and #{maxMoney}&gt;sd_left_money</if>
    </select>
    <select id="sumLeftMoneyByUid" resultType="java.math.BigDecimal"
        parameterType="java.lang.Long">select sum(sd_left_money) from
        yeshi_ec_invite_order_subsidy_debt where sd_uid = #{0}</select>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from
        yeshi_ec_invite_order_subsidy_debt where sd_id = #{id,jdbcType=BIGINT}</delete>
    <insert id="insert" parameterType="com.yeshi.fanli.entity.money.InviteOrderSubsidyDebt"
        useGeneratedKeys="true" keyProperty="id">insert into
        yeshi_ec_invite_order_subsidy_debt
        (sd_id,sd_uid,sd_origin_money,sd_left_money,sd_source_id,sd_beizhu,sd_create_time,sd_update_time,sd_trade_id)
        values
        (#{id,jdbcType=BIGINT},#{uid,jdbcType=BIGINT},#{originMoney,jdbcType=DECIMAL},#{leftMoney,jdbcType=DECIMAL},#{sourceId,jdbcType=BIGINT},#{beiZhu,jdbcType=VARCHAR},#{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP},#{tradeId,jdbcType=VARCHAR})</insert>
    <insert id="insertSelective" parameterType="com.yeshi.fanli.entity.money.InviteOrderSubsidyDebt"
        useGeneratedKeys="true" keyProperty="id">
        insert into yeshi_ec_invite_order_subsidy_debt
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">sd_id,</if>
            <if test="uid != null">sd_uid,</if>
            <if test="originMoney != null">sd_origin_money,</if>
            <if test="leftMoney != null">sd_left_money,</if>
            <if test="sourceId != null">sd_source_id,</if>
            <if test="beiZhu != null">sd_beizhu,</if>
            <if test="createTime != null">sd_create_time,</if>
            <if test="updateTime != null">sd_update_time,</if>
            <if test="tradeId != null">sd_trade_id,</if>
        </trim>
        values
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id,jdbcType=BIGINT},</if>
            <if test="uid != null">#{uid,jdbcType=BIGINT},</if>
            <if test="originMoney != null">#{originMoney,jdbcType=DECIMAL},</if>
            <if test="leftMoney != null">#{leftMoney,jdbcType=DECIMAL},</if>
            <if test="sourceId != null">#{sourceId,jdbcType=BIGINT},</if>
            <if test="beiZhu != null">#{beiZhu,jdbcType=VARCHAR},</if>
            <if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">#{updateTime,jdbcType=TIMESTAMP},</if>
            <if test="tradeId != null">#{tradeId,jdbcType=VARCHAR}</if>
        </trim>
    </insert>
    <update id="updateByPrimaryKey" parameterType="com.yeshi.fanli.entity.money.InviteOrderSubsidyDebt">update
        yeshi_ec_invite_order_subsidy_debt set sd_uid =
        #{uid,jdbcType=BIGINT},sd_origin_money =
        #{originMoney,jdbcType=DECIMAL},sd_left_money =
        #{leftMoney,jdbcType=DECIMAL},sd_source_id =
        #{sourceId,jdbcType=BIGINT},sd_beizhu =
        #{beiZhu,jdbcType=VARCHAR},sd_create_time =
        #{createTime,jdbcType=TIMESTAMP},sd_update_time =
        #{updateTime,jdbcType=TIMESTAMP} ,sd_trade_id
        =#{tradeId,jdbcType=VARCHAR} where sd_id = #{id,jdbcType=BIGINT}</update>
    <update id="updateByPrimaryKeySelective" parameterType="com.yeshi.fanli.entity.money.InviteOrderSubsidyDebt">
        update yeshi_ec_invite_order_subsidy_debt
        <set>
            <if test="uid != null">sd_uid=#{uid,jdbcType=BIGINT},</if>
            <if test="originMoney != null">sd_origin_money=#{originMoney,jdbcType=DECIMAL},</if>
            <if test="leftMoney != null">sd_left_money=#{leftMoney,jdbcType=DECIMAL},</if>
            <if test="sourceId != null">sd_source_id=#{sourceId,jdbcType=BIGINT},</if>
            <if test="beiZhu != null">sd_beizhu=#{beiZhu,jdbcType=VARCHAR},</if>
            <if test="createTime != null">sd_create_time=#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">sd_update_time=#{updateTime,jdbcType=TIMESTAMP},</if>
            <if test="tradeId !=null">sd_trade_id =#{tradeId,jdbcType=VARCHAR},</if>
        </set>
        where sd_id = #{id,jdbcType=BIGINT}
    </update>
</mapper>
fanli/src/main/java/com/yeshi/fanli/mapping/money/OrderTeamRewardDebtMapper.xml
New file
@@ -0,0 +1,115 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeshi.fanli.dao.mybatis.money.OrderTeamRewardDebtMapper">
    <resultMap id="BaseResultMap"
        type="com.yeshi.fanli.entity.money.OrderTeamRewardDebt">
        <id column="trd_id" property="id" jdbcType="BIGINT" />
        <result column="trd_uid" property="uid" jdbcType="BIGINT" />
        <result column="trd_origin_money" property="originMoney"
            jdbcType="DECIMAL" />
        <result column="trd_left_money" property="leftMoney" jdbcType="DECIMAL" />
        <result column="trd_source_id" property="sourceId" jdbcType="BIGINT" />
        <result column="trd_beizhu" property="beiZhu" jdbcType="VARCHAR" />
        <result column="trd_create_time" property="createTime"
            jdbcType="TIMESTAMP" />
        <result column="trd_update_time" property="updateTime"
            jdbcType="TIMESTAMP" />
        <result column="trd_trade_id" property="tradeId" jdbcType="VARCHAR" />
    </resultMap>
    <sql id="Base_Column_List">trd_id,trd_uid,trd_origin_money,trd_left_money,trd_source_id,trd_beizhu,trd_create_time,trd_update_time,trd_trade_id
    </sql>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap"
        parameterType="java.lang.Long">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_order_team_reward_debt where trd_id =
        #{id,jdbcType=BIGINT}
    </select>
    <select id="selectByPrimaryKeyForUpdate" resultMap="BaseResultMap"
        parameterType="java.lang.Long">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_order_team_reward_debt where trd_id = #{0} for update
    </select>
    <select id="listByLeftMoneyAndUid" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_order_team_reward_debt where trd_uid = #{uid}
        <if test="minMoney!=null">and trd_left_money&gt;=#{minMoney}</if>
        <if test="maxMoney!=null">and #{maxMoney}&gt;trd_left_money</if>
        limit #{start},#{count}
    </select>
    <select id="countByLeftMoneyAndUid" resultType="java.lang.Long">
        select count(*) from yeshi_ec_order_team_reward_debt where trd_uid =
        #{uid}
        <if test="minMoney!=null">and trd_left_money&gt;=#{minMoney}</if>
        <if test="maxMoney!=null">and #{maxMoney}&gt;trd_left_money</if>
    </select>
    <select id="sumLeftMoneyByUid" resultType="java.math.BigDecimal"
        parameterType="java.lang.Long">select sum(trd_left_money) from
        yeshi_ec_order_team_reward_debt where trd_uid = #{0}
    </select>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from
        yeshi_ec_order_team_reward_debt where trd_id = #{id,jdbcType=BIGINT}
    </delete>
    <insert id="insert" parameterType="com.yeshi.fanli.entity.money.OrderTeamRewardDebt"
        useGeneratedKeys="true" keyProperty="id">insert into
        yeshi_ec_order_team_reward_debt
        (trd_id,trd_uid,trd_origin_money,trd_left_money,trd_source_id,trd_beizhu,trd_create_time,trd_update_time,trd_trade_id)
        values
        (#{id,jdbcType=BIGINT},#{uid,jdbcType=BIGINT},#{originMoney,jdbcType=DECIMAL},#{leftMoney,jdbcType=DECIMAL},#{sourceId,jdbcType=BIGINT},#{beiZhu,jdbcType=VARCHAR},#{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP},#{tradeId,jdbcType=VARCHAR})
    </insert>
    <insert id="insertSelective" parameterType="com.yeshi.fanli.entity.money.OrderTeamRewardDebt"
        useGeneratedKeys="true" keyProperty="id">
        insert into yeshi_ec_order_team_reward_debt
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">trd_id,</if>
            <if test="uid != null">trd_uid,</if>
            <if test="originMoney != null">trd_origin_money,</if>
            <if test="leftMoney != null">trd_left_money,</if>
            <if test="sourceId != null">trd_source_id,</if>
            <if test="beiZhu != null">trd_beizhu,</if>
            <if test="createTime != null">trd_create_time,</if>
            <if test="updateTime != null">trd_update_time,</if>
            <if test="tradeId != null">trd_trade_id,</if>
        </trim>
        values
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id,jdbcType=BIGINT},</if>
            <if test="uid != null">#{uid,jdbcType=BIGINT},</if>
            <if test="originMoney != null">#{originMoney,jdbcType=DECIMAL},</if>
            <if test="leftMoney != null">#{leftMoney,jdbcType=DECIMAL},</if>
            <if test="sourceId != null">#{sourceId,jdbcType=BIGINT},</if>
            <if test="beiZhu != null">#{beiZhu,jdbcType=VARCHAR},</if>
            <if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">#{updateTime,jdbcType=TIMESTAMP},</if>
            <if test="tradeId != null">#{tradeId,jdbcType=VARCHAR}</if>
        </trim>
    </insert>
    <update id="updateByPrimaryKey" parameterType="com.yeshi.fanli.entity.money.OrderTeamRewardDebt">update
        yeshi_ec_order_team_reward_debt set trd_uid =
        #{uid,jdbcType=BIGINT},trd_origin_money =
        #{originMoney,jdbcType=DECIMAL},trd_left_money =
        #{leftMoney,jdbcType=DECIMAL},trd_source_id =
        #{sourceId,jdbcType=BIGINT},trd_beizhu =
        #{beiZhu,jdbcType=VARCHAR},trd_create_time =
        #{createTime,jdbcType=TIMESTAMP},trd_update_time =
        #{updateTime,jdbcType=TIMESTAMP} ,trd_trade_id
        =#{tradeId,jdbcType=VARCHAR} where trd_id = #{id,jdbcType=BIGINT}
    </update>
    <update id="updateByPrimaryKeySelective" parameterType="com.yeshi.fanli.entity.money.OrderTeamRewardDebt">
        update yeshi_ec_order_team_reward_debt
        <set>
            <if test="uid != null">trd_uid=#{uid,jdbcType=BIGINT},</if>
            <if test="originMoney != null">trd_origin_money=#{originMoney,jdbcType=DECIMAL},</if>
            <if test="leftMoney != null">trd_left_money=#{leftMoney,jdbcType=DECIMAL},</if>
            <if test="sourceId != null">trd_source_id=#{sourceId,jdbcType=BIGINT},</if>
            <if test="beiZhu != null">trd_beizhu=#{beiZhu,jdbcType=VARCHAR},</if>
            <if test="createTime != null">trd_create_time=#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">trd_update_time=#{updateTime,jdbcType=TIMESTAMP},</if>
            <if test="tradeId !=null">trd_trade_id =#{tradeId,jdbcType=VARCHAR},</if>
        </set>
        where trd_id = #{id,jdbcType=BIGINT}
    </update>
</mapper>
fanli/src/main/java/com/yeshi/fanli/mapping/money/OrderTeamRewardDebtRepayHistoryMapper.xml
New file
@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
    namespace="com.yeshi.fanli.dao.mybatis.money.OrderTeamRewardDebtRepayHistoryMapper">
    <resultMap id="BaseResultMap"
        type="com.yeshi.fanli.entity.money.OrderTeamRewardDebtRepayHistory">
        <id column="drh_id" property="id" jdbcType="BIGINT" />
        <result column="drh_money" property="money" jdbcType="DECIMAL" />
        <result column="drh_uid" property="uid" jdbcType="BIGINT" />
        <result column="drh_beizhu" property="beiZhu" jdbcType="VARCHAR" />
        <result column="drh_create_time" property="createTime" jdbcType="TIMESTAMP" />
        <association property="debt" column="drh_debt_id"
            javaType="com.yeshi.fanli.entity.money.InviteOrderSubsidyDebt">
            <id column="drh_debt_id" property="id" jdbcType="BIGINT" />
        </association>
    </resultMap>
    <sql id="Base_Column_List">drh_id,drh_debt_id,drh_money,drh_uid,drh_beizhu,drh_create_time
    </sql>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap"
        parameterType="java.lang.Long">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_order_team_reward_debt_repay_history where drh_id =
        #{id,jdbcType=BIGINT}
    </select>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from
        yeshi_ec_order_team_reward_debt_repay_history where drh_id =
        #{id,jdbcType=BIGINT}
    </delete>
    <insert id="insert"
        parameterType="com.yeshi.fanli.entity.money.OrderTeamRewardDebtRepayHistory"
        useGeneratedKeys="true" keyProperty="id">insert into
        yeshi_ec_order_team_reward_debt_repay_history
        (drh_id,drh_debt_id,drh_money,drh_uid,drh_beizhu,drh_create_time) values
        (#{id,jdbcType=BIGINT},#{debt.id,jdbcType=BIGINT},#{money,jdbcType=DECIMAL},#{uid,jdbcType=BIGINT},#{beiZhu,jdbcType=VARCHAR},#{createTime,jdbcType=TIMESTAMP})
    </insert>
    <insert id="insertSelective"
        parameterType="com.yeshi.fanli.entity.money.OrderTeamRewardDebtRepayHistory"
        useGeneratedKeys="true" keyProperty="id">
        insert into yeshi_ec_order_team_reward_debt_repay_history
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">drh_id,</if>
            <if test="debt != null">drh_debt_id,</if>
            <if test="money != null">drh_money,</if>
            <if test="uid != null">drh_uid,</if>
            <if test="beiZhu != null">drh_beizhu,</if>
            <if test="createTime != null">drh_create_time,</if>
        </trim>
        values
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id,jdbcType=BIGINT},</if>
            <if test="debt != null">#{debt.id,jdbcType=BIGINT},</if>
            <if test="money != null">#{money,jdbcType=DECIMAL},</if>
            <if test="uid != null">#{uid,jdbcType=BIGINT},</if>
            <if test="beiZhu != null">#{beiZhu,jdbcType=VARCHAR},</if>
            <if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if>
        </trim>
    </insert>
    <update id="updateByPrimaryKey"
        parameterType="com.yeshi.fanli.entity.money.OrderTeamRewardDebtRepayHistory">update yeshi_ec_order_team_reward_debt_repay_history
        set
        drh_debt_id = #{debt.id,jdbcType=BIGINT},drh_money =
        #{money,jdbcType=DECIMAL},drh_uid = #{uid,jdbcType=BIGINT},drh_beizhu =
        #{beiZhu,jdbcType=VARCHAR},drh_create_time =
        #{createTime,jdbcType=TIMESTAMP} where drh_id = #{id,jdbcType=BIGINT}
    </update>
    <update id="updateByPrimaryKeySelective"
        parameterType="com.yeshi.fanli.entity.money.OrderTeamRewardDebtRepayHistory">
        update yeshi_ec_order_team_reward_debt_repay_history
        <set>
            <if test="debt != null">drh_debt_id=#{debt.id,jdbcType=BIGINT},</if>
            <if test="money != null">drh_money=#{money,jdbcType=DECIMAL},</if>
            <if test="uid != null">drh_uid=#{uid,jdbcType=BIGINT},</if>
            <if test="beiZhu != null">drh_beizhu=#{beiZhu,jdbcType=VARCHAR},</if>
            <if test="createTime != null">drh_create_time=#{createTime,jdbcType=TIMESTAMP},</if>
        </set>
        where drh_id = #{id,jdbcType=BIGINT}
    </update>
</mapper>
fanli/src/main/java/com/yeshi/fanli/mapping/order/InviteOrderSubsidyMapper.xml
@@ -1,113 +1,126 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeshi.fanli.dao.mybatis.order.InviteOrderSubsidyMapper">
    <resultMap id="BaseResultMap"
        type="com.yeshi.fanli.entity.order.InviteOrderSubsidy">
        <id column="os_id" property="id" jdbcType="BIGINT" />
        <result column="os_uid" property="uid" jdbcType="BIGINT" />
        <result column="os_money" property="money" jdbcType="DECIMAL" />
        <result column="os_order_no" property="orderNo" jdbcType="VARCHAR" />
        <result column="os_source_type" property="sourceType" jdbcType="INTEGER" />
        <result column="os_state" property="state" jdbcType="INTEGER" />
        <result column="os_create_time" property="createTime" jdbcType="TIMESTAMP" />
        <result column="os_update_time" property="updateTime" jdbcType="TIMESTAMP" />
        <result column="os_original_money" property="originalMoney"
            jdbcType="DECIMAL" />
    </resultMap>
    <sql id="Base_Column_List">os_id,os_uid,os_money,os_order_no,os_source_type,os_state,os_create_time,os_update_time,os_original_money
    </sql>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap"
        parameterType="java.lang.Long">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_invite_order_subsidy where os_id = #{id,jdbcType=BIGINT}
    </select>
    <select id="listByOrderNoAndType" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_invite_order_subsidy where os_order_no = #{orderNo} AND
        os_source_type = #{type}
    </select>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from
        yeshi_ec_invite_order_subsidy where os_id = #{id,jdbcType=BIGINT}
    </delete>
    <insert id="insert" parameterType="com.yeshi.fanli.entity.order.InviteOrderSubsidy"
        useGeneratedKeys="true" keyProperty="id">insert into
        yeshi_ec_invite_order_subsidy
        (os_id,os_uid,os_money,os_order_no,os_source_type,os_state,os_create_time,os_update_time,os_original_money)
        values
        (#{id,jdbcType=BIGINT},#{uid,jdbcType=BIGINT},#{money,jdbcType=DECIMAL},#{orderNo,jdbcType=VARCHAR},#{sourceType,jdbcType=INTEGER},#{state,jdbcType=INTEGER},#{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP},#{originalMoney,jdbcType=DECIMAL})
    </insert>
    <insert id="insertSelective" parameterType="com.yeshi.fanli.entity.order.InviteOrderSubsidy"
        useGeneratedKeys="true" keyProperty="id">
        insert into yeshi_ec_invite_order_subsidy
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">os_id,</if>
            <if test="uid != null">os_uid,</if>
            <if test="money != null">os_money,</if>
            <if test="orderNo != null">os_order_no,</if>
            <if test="sourceType != null">os_source_type,</if>
            <if test="state != null">os_state,</if>
            <if test="createTime != null">os_create_time,</if>
            <if test="updateTime != null">os_update_time,</if>
            <if test="originalMoney != null">os_original_money,</if>
        </trim>
        values
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id,jdbcType=BIGINT},</if>
            <if test="uid != null">#{uid,jdbcType=BIGINT},</if>
            <if test="money != null">#{money,jdbcType=DECIMAL},</if>
            <if test="orderNo != null">#{orderNo,jdbcType=VARCHAR},</if>
            <if test="sourceType != null">#{sourceType,jdbcType=INTEGER},</if>
            <if test="state != null">#{state,jdbcType=INTEGER},</if>
            <if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">#{updateTime,jdbcType=TIMESTAMP},</if>
            <if test="originalMoney != null">#{originalMoney,jdbcType=DECIMAL}</if>
        </trim>
    </insert>
    <update id="updateByPrimaryKey" parameterType="com.yeshi.fanli.entity.order.InviteOrderSubsidy">update
        yeshi_ec_invite_order_subsidy set os_uid =
        #{uid,jdbcType=BIGINT},os_money =
        #{money,jdbcType=DECIMAL},os_order_no =
        #{orderNo,jdbcType=VARCHAR},os_source_type =
        #{sourceType,jdbcType=INTEGER},os_state =
        #{state,jdbcType=INTEGER},os_create_time =
        #{createTime,jdbcType=TIMESTAMP},os_update_time =
        #{updateTime,jdbcType=TIMESTAMP} ,os_original_money
        =#{originalMoney,jdbcType=DECIMAL} where os_id = #{id,jdbcType=BIGINT}
    </update>
    <update id="updateByPrimaryKeySelective" parameterType="com.yeshi.fanli.entity.order.InviteOrderSubsidy">
        update yeshi_ec_invite_order_subsidy
        <set>
            <if test="uid != null">os_uid=#{uid,jdbcType=BIGINT},</if>
            <if test="money != null">os_money=#{money,jdbcType=DECIMAL},</if>
            <if test="orderNo != null">os_order_no=#{orderNo,jdbcType=VARCHAR},</if>
            <if test="sourceType != null">os_source_type=#{sourceType,jdbcType=INTEGER},</if>
            <if test="state != null">os_state=#{state,jdbcType=INTEGER},</if>
            <if test="createTime != null">os_create_time=#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">os_update_time=#{updateTime,jdbcType=TIMESTAMP},</if>
            <if test="originalMoney !=null">os_original_money =#{originalMoney,jdbcType=DECIMAL},
            </if>
        </set>
        where os_id = #{id,jdbcType=BIGINT}
    </update>
    <select id="getByOrderNoAndType" resultMap="BaseResultMap">SELECT * FROM
        yeshi_ec_invite_order_subsidy WHERE os_uid = #{uid} AND os_order_no =
        #{orderNo} AND os_source_type = #{type} LIMIT 1
    </select>
    <select id="getByOrderNoAndTypeForUpdate" resultMap="BaseResultMap">SELECT *
        FROM
        yeshi_ec_invite_order_subsidy WHERE os_uid = #{uid} AND
        os_order_no =
        #{orderNo} AND os_source_type = #{type} for update
    </select>
    <select id="countByOrderNoAndType" resultType="java.lang.Long">SELECT count(*)
        FROM yeshi_ec_invite_order_subsidy WHERE os_order_no = #{orderNo} AND
        os_source_type = #{type}
    </select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeshi.fanli.dao.mybatis.order.InviteOrderSubsidyMapper">
    <resultMap id="BaseResultMap"
        type="com.yeshi.fanli.entity.order.InviteOrderSubsidy">
        <id column="os_id" property="id" jdbcType="BIGINT" />
        <result column="os_uid" property="uid" jdbcType="BIGINT" />
        <result column="os_money" property="money" jdbcType="DECIMAL" />
        <result column="os_order_no" property="orderNo" jdbcType="VARCHAR" />
        <result column="os_source_type" property="sourceType" jdbcType="INTEGER" />
        <result column="os_state" property="state" jdbcType="INTEGER" />
        <result column="os_create_time" property="createTime" jdbcType="TIMESTAMP" />
        <result column="os_update_time" property="updateTime" jdbcType="TIMESTAMP" />
        <result column="os_original_money" property="originalMoney"
            jdbcType="DECIMAL" />
        <result column="os_pre_get_time" property="preGetTime"
            jdbcType="TIMESTAMP" />
        <result column="os_get_time" property="getTime" jdbcType="TIMESTAMP" />
        <result column="os_level" property="level" jdbcType="INTEGER" />
    </resultMap>
    <sql id="Base_Column_List">os_id,os_uid,os_money,os_order_no,os_source_type,os_state,os_create_time,os_update_time,os_original_money,os_pre_get_time,os_get_time,os_level
    </sql>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap"
        parameterType="java.lang.Long">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_invite_order_subsidy where os_id = #{id,jdbcType=BIGINT}
    </select>
    <select id="selectByPrimaryKeyForUpdate" resultMap="BaseResultMap"
        parameterType="java.lang.Long">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_invite_order_subsidy where os_id = #{0} for update
    </select>
    <select id="listByOrderNoAndType" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_invite_order_subsidy where os_order_no = #{orderNo} AND
        os_source_type = #{type}
    </select>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from
        yeshi_ec_invite_order_subsidy where os_id = #{id,jdbcType=BIGINT}
    </delete>
    <insert id="insert" parameterType="com.yeshi.fanli.entity.order.InviteOrderSubsidy"
        useGeneratedKeys="true" keyProperty="id">insert into
        yeshi_ec_invite_order_subsidy
        (os_id,os_uid,os_money,os_order_no,os_source_type,os_state,os_create_time,os_update_time,os_original_money,os_pre_get_time,os_get_time,os_level)
        values
        (#{id,jdbcType=BIGINT},#{uid,jdbcType=BIGINT},#{money,jdbcType=DECIMAL},#{orderNo,jdbcType=VARCHAR},#{sourceType,jdbcType=INTEGER},#{state,jdbcType=INTEGER},#{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP},#{originalMoney,jdbcType=DECIMAL},#{preGetTime,jdbcType=TIMESTAMP},#{getTime,jdbcType=TIMESTAMP},#{level,jdbcType=INTEGER})
    </insert>
    <insert id="insertSelective" parameterType="com.yeshi.fanli.entity.order.InviteOrderSubsidy"
        useGeneratedKeys="true" keyProperty="id">
        insert into yeshi_ec_invite_order_subsidy
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">os_id,</if>
            <if test="uid != null">os_uid,</if>
            <if test="money != null">os_money,</if>
            <if test="orderNo != null">os_order_no,</if>
            <if test="sourceType != null">os_source_type,</if>
            <if test="state != null">os_state,</if>
            <if test="createTime != null">os_create_time,</if>
            <if test="updateTime != null">os_update_time,</if>
            <if test="originalMoney != null">os_original_money,</if>
            <if test="preGetTime != null">os_pre_get_time,</if>
            <if test="getTime != null">os_get_time,</if>
            <if test="level != null">os_level,</if>
        </trim>
        values
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id,jdbcType=BIGINT},</if>
            <if test="uid != null">#{uid,jdbcType=BIGINT},</if>
            <if test="money != null">#{money,jdbcType=DECIMAL},</if>
            <if test="orderNo != null">#{orderNo,jdbcType=VARCHAR},</if>
            <if test="sourceType != null">#{sourceType,jdbcType=INTEGER},</if>
            <if test="state != null">#{state,jdbcType=INTEGER},</if>
            <if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">#{updateTime,jdbcType=TIMESTAMP},</if>
            <if test="originalMoney != null">#{originalMoney,jdbcType=DECIMAL},</if>
            <if test="preGetTime != null">#{preGetTime,jdbcType=TIMESTAMP},</if>
            <if test="getTime != null">#{getTime,jdbcType=TIMESTAMP},</if>
            <if test="level != null">#{level,jdbcType=INTEGER}</if>
        </trim>
    </insert>
    <update id="updateByPrimaryKey" parameterType="com.yeshi.fanli.entity.order.InviteOrderSubsidy">update
        yeshi_ec_invite_order_subsidy set os_uid =
        #{uid,jdbcType=BIGINT},os_money =
        #{money,jdbcType=DECIMAL},os_order_no =
        #{orderNo,jdbcType=VARCHAR},os_source_type =
        #{sourceType,jdbcType=INTEGER},os_state =
        #{state,jdbcType=INTEGER},os_create_time =
        #{createTime,jdbcType=TIMESTAMP},os_update_time =
        #{updateTime,jdbcType=TIMESTAMP} ,os_original_money
        =#{originalMoney,jdbcType=DECIMAL} ,os_pre_get_time
        =#{preGetTime,jdbcType=TIMESTAMP} ,os_get_time
        =#{getTime,jdbcType=TIMESTAMP} ,os_level =#{level,jdbcType=INTEGER}
        where os_id = #{id,jdbcType=BIGINT}</update>
    <update id="updateByPrimaryKeySelective" parameterType="com.yeshi.fanli.entity.order.InviteOrderSubsidy">
        update yeshi_ec_invite_order_subsidy
        <set>
            <if test="uid != null">os_uid=#{uid,jdbcType=BIGINT},</if>
            <if test="money != null">os_money=#{money,jdbcType=DECIMAL},</if>
            <if test="orderNo != null">os_order_no=#{orderNo,jdbcType=VARCHAR},</if>
            <if test="sourceType != null">os_source_type=#{sourceType,jdbcType=INTEGER},</if>
            <if test="state != null">os_state=#{state,jdbcType=INTEGER},</if>
            <if test="createTime != null">os_create_time=#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">os_update_time=#{updateTime,jdbcType=TIMESTAMP},</if>
            <if test="originalMoney !=null">os_original_money =#{originalMoney,jdbcType=DECIMAL},
            </if>
            <if test="preGetTime !=null">os_pre_get_time =#{preGetTime,jdbcType=TIMESTAMP},</if>
            <if test="getTime !=null">os_get_time =#{getTime,jdbcType=TIMESTAMP},</if>
            <if test="level !=null">os_level =#{level,jdbcType=INTEGER},</if>
        </set>
        where os_id = #{id,jdbcType=BIGINT}
    </update>
    <select id="getByOrderNoAndType" resultMap="BaseResultMap">SELECT * FROM
        yeshi_ec_invite_order_subsidy WHERE os_uid = #{uid} AND os_order_no =
        #{orderNo} AND os_source_type = #{type} LIMIT 1</select>
    <select id="getByOrderNoAndTypeForUpdate" resultMap="BaseResultMap">SELECT *
        FROM yeshi_ec_invite_order_subsidy WHERE os_uid = #{uid} AND
        os_order_no = #{orderNo} AND os_source_type = #{type} for update
    </select>
    <select id="countByOrderNoAndType" resultType="java.lang.Long">SELECT count(*)
        FROM yeshi_ec_invite_order_subsidy WHERE os_order_no = #{orderNo} AND
        os_source_type = #{type}</select>
</mapper>
fanli/src/main/java/com/yeshi/fanli/mapping/order/OrderTeamRewardMapper.xml
New file
@@ -0,0 +1,160 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeshi.fanli.dao.mybatis.order.OrderTeamRewardMapper">
    <resultMap id="BaseResultMap" type="com.yeshi.fanli.entity.order.OrderTeamReward">
        <id column="otr_id" property="id" jdbcType="BIGINT" />
        <result column="otr_uid" property="uid" jdbcType="BIGINT" />
        <result column="otr_money" property="money" jdbcType="DECIMAL" />
        <result column="otr_order_no" property="orderNo" jdbcType="VARCHAR" />
        <result column="otr_source_type" property="sourceType"
            jdbcType="INTEGER" />
        <result column="otr_state" property="state" jdbcType="INTEGER" />
        <result column="otr_create_time" property="createTime"
            jdbcType="TIMESTAMP" />
        <result column="otr_update_time" property="updateTime"
            jdbcType="TIMESTAMP" />
        <result column="otr_original_money" property="originalMoney"
            jdbcType="DECIMAL" />
        <result column="otr_pre_get_time" property="preGetTime"
            jdbcType="TIMESTAMP" />
        <result column="otr_get_time" property="getTime" jdbcType="TIMESTAMP" />
        <result column="otr_level" property="level" jdbcType="INTEGER" />
        <association property="subsidy"
            javaType="com.yeshi.fanli.entity.order.InviteOrderSubsidy" column="otr_subsidy_id">
            <id column="otr_subsidy_id" property="id" />
        </association>
    </resultMap>
    <sql id="Base_Column_List">otr_id,otr_uid,otr_money,otr_order_no,otr_source_type,otr_state,otr_create_time,otr_update_time,otr_original_money,otr_subsidy_id,otr_pre_get_time,otr_get_time,otr_level
    </sql>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap"
        parameterType="java.lang.Long">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_order_team_reward where otr_id = #{id,jdbcType=BIGINT}
    </select>
    <select id="listByOrderNoAndType" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_order_team_reward where otr_order_no = #{orderNo} AND
        otr_source_type = #{type}
    </select>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from
        yeshi_ec_order_team_reward where otr_id = #{id,jdbcType=BIGINT}
    </delete>
    <insert id="insert" parameterType="com.yeshi.fanli.entity.order.OrderTeamReward"
        useGeneratedKeys="true" keyProperty="id">insert into
        yeshi_ec_order_team_reward
        (otr_id,otr_uid,otr_money,otr_order_no,otr_source_type,otr_state,otr_create_time,otr_update_time,otr_original_money,otr_subsidy_id,otr_pre_get_time,otr_get_time,otr_level)
        values
        (#{id,jdbcType=BIGINT},#{uid,jdbcType=BIGINT},#{money,jdbcType=DECIMAL},#{orderNo,jdbcType=VARCHAR},#{sourceType,jdbcType=INTEGER},#{state,jdbcType=INTEGER},#{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP},#{originalMoney,jdbcType=DECIMAL},#{subsidy.id,jdbcType=BIGINT},#{preGetTime,jdbcType=TIMESTAMP},#{getTime,jdbcType=TIMESTAMP},#{level,jdbcType=INTEGER})
    </insert>
    <insert id="insertSelective" parameterType="com.yeshi.fanli.entity.order.OrderTeamReward"
        useGeneratedKeys="true" keyProperty="id">
        insert into yeshi_ec_order_team_reward
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">otr_id,</if>
            <if test="uid != null">otr_uid,</if>
            <if test="money != null">otr_money,</if>
            <if test="orderNo != null">otr_order_no,</if>
            <if test="sourceType != null">otr_source_type,</if>
            <if test="state != null">otr_state,</if>
            <if test="createTime != null">otr_create_time,</if>
            <if test="updateTime != null">otr_update_time,</if>
            <if test="originalMoney != null">otr_original_money,</if>
            <if test="subsidy != null">otr_subsidy_id,</if>
            <if test="preGetTime != null">otr_pre_get_time,</if>
            <if test="getTime != null">otr_get_time,</if>
            <if test="level != null">otr_level,</if>
        </trim>
        values
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id,jdbcType=BIGINT},</if>
            <if test="uid != null">#{uid,jdbcType=BIGINT},</if>
            <if test="money != null">#{money,jdbcType=DECIMAL},</if>
            <if test="orderNo != null">#{orderNo,jdbcType=VARCHAR},</if>
            <if test="sourceType != null">#{sourceType,jdbcType=INTEGER},</if>
            <if test="state != null">#{state,jdbcType=INTEGER},</if>
            <if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">#{updateTime,jdbcType=TIMESTAMP},</if>
            <if test="originalMoney != null">#{originalMoney,jdbcType=DECIMAL},</if>
            <if test="subsidy != null">#{subsidy.id,jdbcType=BIGINT},</if>
            <if test="preGetTime != null">#{preGetTime,jdbcType=TIMESTAMP},</if>
            <if test="getTime != null">#{getTime,jdbcType=TIMESTAMP},</if>
            <if test="level != null">#{level,jdbcType=INTEGER},</if>
        </trim>
    </insert>
    <update id="updateByPrimaryKey" parameterType="com.yeshi.fanli.entity.order.OrderTeamReward">update
        yeshi_ec_order_team_reward set otr_uid =
        #{uid,jdbcType=BIGINT},otr_money =
        #{money,jdbcType=DECIMAL},otr_order_no =
        #{orderNo,jdbcType=VARCHAR},otr_source_type =
        #{sourceType,jdbcType=INTEGER},otr_state =
        #{state,jdbcType=INTEGER},otr_create_time =
        #{createTime,jdbcType=TIMESTAMP},otr_update_time =
        #{updateTime,jdbcType=TIMESTAMP} ,otr_original_money
        =#{originalMoney,jdbcType=DECIMAL},otr_subsidy_id
        =#{subsidy.id,jdbcType=BIGINT} ,otr_pre_get_time
        =#{preGetTime,jdbcType=TIMESTAMP} ,otr_get_time
        =#{getTime,jdbcType=TIMESTAMP} ,otr_level =#{level,jdbcType=INTEGER}
        where otr_id = #{id,jdbcType=BIGINT}
    </update>
    <update id="updateByPrimaryKeySelective" parameterType="com.yeshi.fanli.entity.order.OrderTeamReward">
        update yeshi_ec_order_team_reward
        <set>
            <if test="uid != null">otr_uid=#{uid,jdbcType=BIGINT},</if>
            <if test="money != null">otr_money=#{money,jdbcType=DECIMAL},</if>
            <if test="orderNo != null">otr_order_no=#{orderNo,jdbcType=VARCHAR},</if>
            <if test="sourceType != null">otr_source_type=#{sourceType,jdbcType=INTEGER},</if>
            <if test="state != null">otr_state=#{state,jdbcType=INTEGER},</if>
            <if test="createTime != null">otr_create_time=#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">otr_update_time=#{updateTime,jdbcType=TIMESTAMP},</if>
            <if test="originalMoney !=null">otr_original_money =#{originalMoney,jdbcType=DECIMAL},
            </if>
            <if test="subsidy !=null">otr_subsidy_id =#{subsidy.id,jdbcType=BIGINT},</if>
            <if test="preGetTime !=null">otr_pre_get_time =#{preGetTime,jdbcType=TIMESTAMP},</if>
            <if test="getTime !=null">otr_get_time =#{getTime,jdbcType=TIMESTAMP},</if>
            <if test="id !=null">otr_id =#{id,jdbcType=BIGINT},</if>
            <if test="level !=null">otr_level =#{level,jdbcType=INTEGER},</if>
        </set>
        where otr_id = #{id,jdbcType=BIGINT}
    </update>
    <select id="getByOrderNoAndType" resultMap="BaseResultMap">SELECT * FROM
        yeshi_ec_order_team_reward WHERE otr_uid = #{uid} AND otr_order_no =
        #{orderNo} AND otr_source_type = #{type} LIMIT 1
    </select>
    <select id="getByOrderNoAndTypeForUpdate" resultMap="BaseResultMap">SELECT *
        FROM yeshi_ec_order_team_reward WHERE otr_uid = #{uid} AND
        otr_order_no = #{orderNo} AND otr_source_type = #{type} for update
    </select>
    <select id="countByOrderNoAndType" resultType="java.lang.Long">SELECT count(*)
        FROM yeshi_ec_order_team_reward WHERE otr_order_no = #{orderNo} AND
        otr_source_type = #{type}
    </select>
    <select id="selectBySubsidyIdAndUidForUpdate" resultMap="BaseResultMap">SELECT *
        FROM yeshi_ec_order_team_reward WHERE otr_subsidy_id = #{subsidyId}
        AND otr_uid = #{uid} for update
    </select>
    <select id="listBySubsidyId" resultMap="BaseResultMap"
        parameterType="java.lang.Long">SELECT * FROM yeshi_ec_order_team_reward WHERE
        otr_subsidy_id = #{0}
    </select>
    <select id="listCanSettleByUid" resultMap="BaseResultMap"
        parameterType="java.lang.Long">SELECT * FROM yeshi_ec_order_team_reward WHERE
        otr_uid
        =#{uid} AND otr_state=1 AND NOW()>otr_pre_get_time
        limit
        #{start},#{count}
    </select>
    <select id="countCanSettle" resultType="java.lang.Long"
        parameterType="java.lang.Long">SELECT count(*) FROM yeshi_ec_order_team_reward
        WHERE
        otr_uid =#{0} AND otr_state=1 AND NOW()>otr_pre_get_time
    </select>
</mapper>
fanli/src/main/java/com/yeshi/fanli/service/impl/money/OrderTeamRewardDebtServiceImpl.java
New file
@@ -0,0 +1,120 @@
package com.yeshi.fanli.service.impl.money;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.yeshi.fanli.dao.mybatis.money.OrderTeamRewardDebtMapper;
import com.yeshi.fanli.dao.mybatis.money.OrderTeamRewardDebtRepayHistoryMapper;
import com.yeshi.fanli.entity.money.OrderTeamRewardDebt;
import com.yeshi.fanli.entity.money.OrderTeamRewardDebtRepayHistory;
import com.yeshi.fanli.exception.money.OrderTeamRewardDebtException;
import com.yeshi.fanli.service.inter.money.OrderTeamRewardDebtService;
@Service
public class OrderTeamRewardDebtServiceImpl implements OrderTeamRewardDebtService {
    @Resource
    private OrderTeamRewardDebtMapper orderTeamRewardDebtMapper;
    @Resource
    private OrderTeamRewardDebtRepayHistoryMapper orderTeamRewardDebtRepayHistoryMapper;
    @Transactional(rollbackFor=Exception.class)
    @Override
    public void addDebt(OrderTeamRewardDebt debt) throws OrderTeamRewardDebtException {
        if (debt == null || debt.getOriginMoney() == null || debt.getUid() == null) {
            throw new OrderTeamRewardDebtException(1, "数据不完整");
        }
        if (debt.getCreateTime() == null)
            debt.setCreateTime(new Date());
        debt.setLeftMoney(debt.getOriginMoney());
        orderTeamRewardDebtMapper.insertSelective(debt);
    }
    @Transactional(rollbackFor=Exception.class)
    @Override
    public void repayDebt(Long debtId, BigDecimal money) throws OrderTeamRewardDebtException {
        OrderTeamRewardDebt debt = orderTeamRewardDebtMapper.selectByPrimaryKeyForUpdate(debtId);
        if (debt == null)
            throw new OrderTeamRewardDebtException(1, "债务ID不存在");
        if (money == null || money.compareTo(new BigDecimal(0)) <= 0)
            throw new OrderTeamRewardDebtException(3, "还钱必须大于0");
        if (debt.getLeftMoney().compareTo(money) < 0)
            throw new OrderTeamRewardDebtException(2, "还钱过多");
        // 还钱
        OrderTeamRewardDebt update = new OrderTeamRewardDebt();
        update.setId(debt.getId());
        update.setLeftMoney(debt.getLeftMoney().subtract(money));
        update.setUpdateTime(new Date());
        orderTeamRewardDebtMapper.updateByPrimaryKeySelective(update);
        // 加入还钱记录
        OrderTeamRewardDebtRepayHistory record = new OrderTeamRewardDebtRepayHistory();
        record.setCreateTime(new Date());
        record.setDebt(debt);
        record.setMoney(money);
        record.setUid(debt.getUid());
        orderTeamRewardDebtRepayHistoryMapper.insertSelective(record);
    }
    @Transactional(rollbackFor=Exception.class)
    @Override
    public BigDecimal repayDebtByUid(Long uid, BigDecimal money) throws OrderTeamRewardDebtException {
        // 还钱
        long count = countNeedRepayDebt(uid);
        int page = (int) (count % 200 == 0 ? count / 200 : count / 200 + 1);
        List<OrderTeamRewardDebt> totalList = new ArrayList<>();
        for (int i = 0; i < page; i++) {
            List<OrderTeamRewardDebt> tempList = listNeedRepayDebt(uid, i + 1, 200);
            if (tempList != null && tempList.size() > 0) {
                totalList.addAll(tempList);
            }
        }
        // 剩余资金
        BigDecimal leftMoney = new BigDecimal(money.toString());
        for (OrderTeamRewardDebt debt : totalList) {
            if (leftMoney.compareTo(new BigDecimal(0)) <= 0)// 余额不足扣款
                break;
            BigDecimal repayMoney = null;
            if (debt.getLeftMoney().compareTo(leftMoney) >= 0)
                repayMoney = new BigDecimal(leftMoney.toString());
            else
                repayMoney = debt.getLeftMoney();
            try {
                repayDebt(debt.getId(), repayMoney);
                leftMoney = leftMoney.subtract(repayMoney);
            } catch (OrderTeamRewardDebtException e) {
                // 上笔还款未成功,继续下一笔还款
            }
        }
        return leftMoney;//返回剩余的资金
    }
    @Override
    public List<OrderTeamRewardDebt> listNeedRepayDebt(Long uid, int page, int count) {
        return orderTeamRewardDebtMapper.listByLeftMoneyAndUid(new BigDecimal("0.01"), null, uid, (page - 1) * count,
                count);
    }
    @Override
    public long countNeedRepayDebt(Long uid) {
        return orderTeamRewardDebtMapper.countByLeftMoneyAndUid(new BigDecimal("0.01"), null, uid);
    }
    @Override
    public BigDecimal getTotalDebtMoney(Long uid) {
        BigDecimal money = orderTeamRewardDebtMapper.sumLeftMoneyByUid(uid);
        if (money == null)
            money = new BigDecimal(0);
        return money;
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/money/msg/UserMoneyMsgNotificationServiceImpl.java
@@ -286,7 +286,7 @@
            e.printStackTrace();
        }
    }
    @Override
    public void redPackMsg(Long uid, MsgTypeMoneyTypeEnum type, String content, String beiZhu) {
        MsgMoneyDetail detail = MsgMoneyDetailFactory.createRedPackMsg(uid, type, content, beiZhu);
@@ -296,9 +296,9 @@
            e.printStackTrace();
        }
    }
    @Override
    public void teamRedPackRewardMsg(Long uid, MsgTypeMoneyTypeEnum type,BigDecimal money, String stateDesc,
    public void teamRedPackRewardMsg(Long uid, MsgTypeMoneyTypeEnum type, BigDecimal money, String stateDesc,
            String content) {
        MsgMoneyDetail detail = new MsgMoneyDetail();
        detail.setRead(false);
@@ -318,7 +318,8 @@
    @Override
    public void inviteOrderSubSidy(Long uid, Date date, String from, BigDecimal money, BigDecimal balance) {
        MsgMoneyDetail detail = MsgMoneyDetailFactory.createInviteOrderSubSidyMsg(uid, date, from, money, balance, null);
        MsgMoneyDetail detail = MsgMoneyDetailFactory.createInviteOrderSubSidyMsg(uid, date, from, money, balance,
                null);
        try {
            msgMoneyDetailService.addMsgMoneyDetail(detail);
        } catch (MsgMoneyDetailException e) {
@@ -326,4 +327,16 @@
        }
    }
    @Override
    public void orderTeamReward(Long uid, Date date, String from, BigDecimal money, BigDecimal balance) {
        MsgMoneyDetail detail = MsgMoneyDetailFactory.createOrderTeamRewardMsg(uid, date, from, money, balance, null);
        try {
            msgMoneyDetailService.addMsgMoneyDetail(detail);
        } catch (MsgMoneyDetailException e) {
            e.printStackTrace();
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java
@@ -23,27 +23,32 @@
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.money.InviteOrderSubsidyDebt;
import com.yeshi.fanli.entity.money.OrderTeamRewardDebt;
import com.yeshi.fanli.entity.money.UserMoneyDebt;
import com.yeshi.fanli.entity.money.UserMoneyDebt.UserMoneyDebtTypeEnum;
import com.yeshi.fanli.entity.money.UserMoneyDetail;
import com.yeshi.fanli.entity.order.CommonOrder;
import com.yeshi.fanli.entity.order.HongBaoOrder;
import com.yeshi.fanli.entity.order.InviteOrderSubsidy;
import com.yeshi.fanli.entity.order.OrderTeamReward;
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanDrawBack;
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
import com.yeshi.fanli.exception.money.InviteOrderSubsidyDebtException;
import com.yeshi.fanli.exception.money.OrderTeamRewardDebtException;
import com.yeshi.fanli.exception.money.UserMoneyDebtException;
import com.yeshi.fanli.exception.money.UserMoneyDetailException;
import com.yeshi.fanli.exception.order.TaoBaoWeiQuanException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.money.InviteOrderSubsidyDebtService;
import com.yeshi.fanli.service.inter.money.OrderTeamRewardDebtService;
import com.yeshi.fanli.service.inter.money.UserMoneyDebtService;
import com.yeshi.fanli.service.inter.money.UserMoneyDetailService;
import com.yeshi.fanli.service.inter.money.UserMoneyService;
import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService;
import com.yeshi.fanli.service.inter.money.tb.TaoBaoWeiQuanDrawBackService;
import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyService;
import com.yeshi.fanli.service.inter.order.OrderTeamRewardService;
import com.yeshi.fanli.service.inter.order.tb.TaoBaoWeiQuanOrderService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
@@ -88,7 +93,13 @@
    private InviteOrderSubsidyService inviteOrderSubsidyService;
    @Resource
    private OrderTeamRewardService orderTeamRewardService;
    @Resource
    private InviteOrderSubsidyDebtService inviteOrderSubsidyDebtService;
    @Resource
    private OrderTeamRewardDebtService orderTeamRewardDebtService;
    @Resource
    private UserMoneyDetailService userMoneyDetailService;
@@ -527,7 +538,7 @@
                    taoBaoWeiQuanDrawBackMapper.insertSelective(weiQuanDrawBack);// 加入返还记录
                    // 加入邀请补贴返还记录
                    doInviteOrderSubsidy(orderId, Constant.SOURCE_TYPE_TAOBAO, uid, settleMent, wqMoney);
                    doInviteOrderSubsidy(orderId, Constant.SOURCE_TYPE_TAOBAO, uid, settleMent, wqMoney,weiQuanOrder.getOrderItemId());
                    // 如果资金大于0才扣除
@@ -575,7 +586,7 @@
     * @param sourceType
     */
    private void doInviteOrderSubsidy(String orderId, int sourceType, Long uid, BigDecimal settleMent,
            BigDecimal weiQuanMoney) throws TaoBaoWeiQuanException {
            BigDecimal weiQuanMoney,String tradeId) throws TaoBaoWeiQuanException {
        InviteOrderSubsidy subSidy = inviteOrderSubsidyService.getByOrderNoAndType(uid, orderId, sourceType);
        if (subSidy != null)// 添加借贷关系
        {
@@ -587,14 +598,47 @@
            debt.setOriginMoney(drawBackMoney);
            debt.setUid(uid);
            debt.setCreateTime(new Date());
            debt.setTradeId(tradeId);
            try {
                inviteOrderSubsidyDebtService.addDebt(debt);
            } catch (InviteOrderSubsidyDebtException e) {
                throw new TaoBaoWeiQuanException(101, "邀请订单补贴异常");
            }
            doOrderTeamReard(subSidy.getId(), settleMent, weiQuanMoney,tradeId);
        }
    }
    /**
     * 团队奖励维权处理
     * @Title: doOrderTeamReard
     * @Description:
     * @param subsidyId
     * void 返回类型
     * @throws
     */
    private void doOrderTeamReard(Long subsidyId, BigDecimal settleMent, BigDecimal weiQuanMoney,String tradeId)
            throws TaoBaoWeiQuanException {
        List<OrderTeamReward> list = orderTeamRewardService.listBySubsidyId(subsidyId);
        if (list != null)
            for (OrderTeamReward reward : list) {
                BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, weiQuanMoney, reward.getOriginalMoney());
                if (drawBackMoney.compareTo(new BigDecimal(0)) <= 0)
                    return;
                OrderTeamRewardDebt debt = new OrderTeamRewardDebt();
                debt.setBeiZhu("订单售后");
                debt.setOriginMoney(drawBackMoney);
                debt.setUid(reward.getUid());
                debt.setCreateTime(new Date());
                debt.setTradeId(tradeId);
                try {
                    orderTeamRewardDebtService.addDebt(debt);
                } catch (OrderTeamRewardDebtException e) {
                    throw new TaoBaoWeiQuanException(102, "团队奖励异常");
                }
            }
    }
    @Override
    public TaoBaoWeiQuanDrawBack selectByOrderItemId(String orderItemId) {
        List<TaoBaoWeiQuanDrawBack> list = taoBaoWeiQuanDrawBackMapper.selectByOrderItemId(orderItemId);
fanli/src/main/java/com/yeshi/fanli/service/impl/order/InviteOrderSubsidyServiceImpl.java
@@ -2,6 +2,7 @@
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
@@ -16,9 +17,11 @@
import com.yeshi.fanli.dao.mybatis.order.InviteOrderSubsidyMapper;
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.bus.user.Order;
import com.yeshi.fanli.entity.order.CommonOrder;
import com.yeshi.fanli.entity.order.HongBaoOrder;
import com.yeshi.fanli.entity.order.InviteOrderSubsidy;
import com.yeshi.fanli.exception.order.InviteOrderSubsidyException;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.order.HongBaoOrderService;
import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyService;
@@ -28,6 +31,7 @@
import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
@Service
public class InviteOrderSubsidyServiceImpl implements InviteOrderSubsidyService {
@@ -53,6 +57,9 @@
    @Resource
    private UserVIPInfoService userVIPInfoService;
    @Resource
    private CommonOrderService commonOrderService;
    @Override
    public InviteOrderSubsidy getByOrderNoAndType(Long uid, String orderNo, Integer type) {
        return inviteOrderSubsidyMapper.getByOrderNoAndType(uid, orderNo, type);
@@ -63,7 +70,7 @@
        return inviteOrderSubsidyMapper.getByOrderNoAndTypeForUpdate(uid, orderNo, type);
    }
    @Transactional(rollbackFor=Exception.class)
    @Transactional(rollbackFor = Exception.class)
    private void addOrderSubsidy(InviteOrderSubsidy orderSubsidy) throws InviteOrderSubsidyException {
        if (orderSubsidy.getMoney() == null || StringUtil.isNullOrEmpty(orderSubsidy.getOrderNo())
                || orderSubsidy.getSourceType() == null || orderSubsidy.getUid() == null)
@@ -91,7 +98,7 @@
        }
    }
    @Transactional(rollbackFor=Exception.class)
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void addOrUpdateByOrder(String orderId, int sourceType) throws InviteOrderSubsidyException {
        List<HongBaoOrder> list = hongBaoOrderService.listByOrderIdAndSourceType(orderId, sourceType);
@@ -162,6 +169,10 @@
                            orderSubsidy.setOrderNo(orderId);
                            orderSubsidy.setSourceType(sourceType);
                            orderSubsidy.setState(state);
                            if (type == HongBaoV2.TYPE_YIJI)
                                orderSubsidy.setLevel(InviteOrderSubsidy.LEVEL_ONE);
                            else
                                orderSubsidy.setLevel(InviteOrderSubsidy.LEVEL_TWO);
                            // VIP用户才能补贴
                            if (userVIPInfoService.isVIP(uid))
                                addOrderSubsidy(orderSubsidy);
@@ -219,7 +230,8 @@
    @Transactional
    @Override
    public void validByOrderIdAndSourceType(String orderId, int sourceType) {
    public void validByOrderIdAndSourceType(String orderId, int sourceType) throws InviteOrderSubsidyException {
        List<InviteOrderSubsidy> list = inviteOrderSubsidyMapper.listByOrderNoAndType(orderId, sourceType);
        if (list != null && list.size() > 0)
            for (InviteOrderSubsidy subsidy : list) {
@@ -233,6 +245,7 @@
    }
    @Transactional
    @Override
    public void settleById(Long id, BigDecimal money) {
        InviteOrderSubsidy orderSubsidy = new InviteOrderSubsidy(id);
@@ -240,6 +253,8 @@
        orderSubsidy.setState(InviteOrderSubsidy.STATE_SUBSIDIZED);
        orderSubsidy.setUpdateTime(new Date());
        inviteOrderSubsidyMapper.updateByPrimaryKeySelective(orderSubsidy);
        // 设置可结算
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/order/InviteOrderSubsidyServiceImplV2.java
@@ -2,10 +2,13 @@
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import javax.annotation.Resource;
@@ -15,21 +18,29 @@
import com.yeshi.fanli.dao.mybatis.order.InviteOrderSubsidyMapper;
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.bus.user.ThreeSale;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum;
import com.yeshi.fanli.entity.order.CommonOrder;
import com.yeshi.fanli.entity.order.HongBaoOrder;
import com.yeshi.fanli.entity.order.InviteOrderSubsidy;
import com.yeshi.fanli.entity.order.OrderTeamReward;
import com.yeshi.fanli.exception.order.CommonOrderException;
import com.yeshi.fanli.exception.order.InviteOrderSubsidyException;
import com.yeshi.fanli.exception.order.OrderTeamRewardException;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.order.HongBaoOrderService;
import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyServiceV2;
import com.yeshi.fanli.service.inter.order.OrderHongBaoMapService;
import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
import com.yeshi.fanli.service.inter.order.OrderTeamRewardService;
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
import com.yeshi.fanli.service.manger.user.UserLevelManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
@Service
public class InviteOrderSubsidyServiceImplV2 implements InviteOrderSubsidyServiceV2 {
@@ -61,6 +72,12 @@
    @Resource
    private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
    @Resource
    private OrderTeamRewardService orderTeamRewardService;
    @Resource
    private ThreeSaleSerivce threeSaleSerivce;
    @Override
    public InviteOrderSubsidy getByOrderNoAndType(Long uid, String orderNo, Integer type) {
        return inviteOrderSubsidyMapper.getByOrderNoAndType(uid, orderNo, type);
@@ -72,7 +89,8 @@
    }
    @Transactional(rollbackFor = Exception.class)
    private void addOrderSubsidy(InviteOrderSubsidy orderSubsidy) throws InviteOrderSubsidyException {
    private void addOrderSubsidy(InviteOrderSubsidy orderSubsidy)
            throws InviteOrderSubsidyException, OrderTeamRewardException, CommonOrderException {
        if (orderSubsidy.getMoney() == null || StringUtil.isNullOrEmpty(orderSubsidy.getOrderNo())
                || orderSubsidy.getSourceType() == null || orderSubsidy.getUid() == null)
            throw new InviteOrderSubsidyException(1, "数据不完整");
@@ -92,10 +110,77 @@
            update.setState(orderSubsidy.getState());
            update.setUpdateTime(new Date());
            inviteOrderSubsidyMapper.updateByPrimaryKeySelective(update);
            // 添加奖励
            addTeamReward(old.getId());
        } else {// 添加
            if (orderSubsidy.getCreateTime() == null)
                orderSubsidy.setCreateTime(new Date());
            inviteOrderSubsidyMapper.insertSelective(orderSubsidy);
            // 添加奖励
            addTeamReward(orderSubsidy.getId());
        }
    }
    // 添加团队奖励
    private void addTeamReward(Long subsidyId) throws OrderTeamRewardException, CommonOrderException {
        // 查询团队奖励的人
        // 计算相应的比例
        InviteOrderSubsidy subsidy = inviteOrderSubsidyMapper.selectByPrimaryKeyForUpdate(subsidyId);
        if (subsidy == null)
            throw new OrderTeamRewardException(20, "补贴不存在");
        // 获取上4级用户
        List<CommonOrder> commonOrderList = commonOrderService.listBySourceTypeAndOrderId(subsidy.getSourceType(),
                subsidy.getOrderNo());
        if (commonOrderList == null || commonOrderList.size() == 0) {
            throw new CommonOrderException(1, "订单不存在");
        }
        Long sourceUid = commonOrderList.get(0).getUserInfo().getId();
        List<ThreeSale> bossList = threeSaleSerivce.getMyBossDeepList(sourceUid, 4);
        // 无需要团队奖励的上级
        if (bossList.size() < 3)
            return;
        Set<Long> rewardUid = new HashSet<>();
        for (int i = 2; i < bossList.size(); i++) {
            rewardUid.add(bossList.get(i).getBoss().getId());
        }
        // 删除本补贴用户的下级
        for (int i = 0; i < bossList.size(); i++) {
            if (bossList.get(i).getBoss().getId().longValue() == subsidy.getUid()) {
                break;
            } else {
                bossList.remove(i);
                i--;
            }
        }
        // 获取补贴用户的直接上级
        if (bossList.size() > 1 && bossList.get(1).getSucceedTime() < subsidy.getCreateTime().getTime()) {
            UserInfo boss = bossList.get(1).getBoss();
            UserLevelEnum userLevel = userLevelManager.getUserLevel(boss.getId());
            BigDecimal rewardMoney = orderHongBaoMoneyComputeService.computeFirstTeamReward(subsidy.getMoney(),
                    subsidy.getCreateTime(), userLevel);
            if (rewardMoney != null) {
                // 添加奖励
                orderTeamRewardService.addOrUpdate(subsidy, rewardMoney, boss.getId(), OrderTeamReward.LEVEL_ONE);
            }
            // 获取补贴的间接上级
            if (bossList.size() > 2 && bossList.get(2).getSucceedTime() < subsidy.getCreateTime().getTime()) {
                boss = bossList.get(2).getBoss();
                userLevel = userLevelManager.getUserLevel(boss.getId());
                rewardMoney = orderHongBaoMoneyComputeService.computeSecondTeamReward(subsidy.getMoney(),
                        subsidy.getCreateTime(), userLevel);
                if (rewardMoney != null) {
                    // 添加奖励
                    orderTeamRewardService.addOrUpdate(subsidy, rewardMoney, boss.getId(), OrderTeamReward.LEVEL_TWO);
                }
            }
        }
    }
@@ -183,9 +268,19 @@
                            orderSubsidy.setOrderNo(orderId);
                            orderSubsidy.setSourceType(sourceType);
                            orderSubsidy.setState(state);
                            if (type == HongBaoV2.TYPE_YIJI)
                                orderSubsidy.setLevel(InviteOrderSubsidy.LEVEL_ONE);
                            else
                                orderSubsidy.setLevel(InviteOrderSubsidy.LEVEL_TWO);
                            // 会员才能补贴
                            if (userLevel != UserLevelEnum.daRen)
                                addOrderSubsidy(orderSubsidy);
                                try {
                                    addOrderSubsidy(orderSubsidy);
                                } catch (OrderTeamRewardException e) {
                                    throw new InviteOrderSubsidyException(e.getCode(), e.getMsg());
                                } catch (CommonOrderException e) {
                                    throw new InviteOrderSubsidyException(e.getCode(), e.getMsg());
                                }
                        }
                    }
                }
@@ -222,7 +317,7 @@
        return inviteOrderSubsidyMapper.countByOrderNoAndType(orderId, sourceType);
    }
    @Transactional
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void invalidByOrderIdAndSourceType(String orderId, int sourceType) {
        List<InviteOrderSubsidy> list = inviteOrderSubsidyMapper.listByOrderNoAndType(orderId, sourceType);
@@ -234,13 +329,29 @@
                    update.setState(InviteOrderSubsidy.STATE_INVALID);
                    update.setUpdateTime(new Date());
                    inviteOrderSubsidyMapper.updateByPrimaryKeySelective(update);
                    orderTeamRewardService.invalidByOrderIdAndSourceType(subsidy.getId());
                }
            }
    }
    @Transactional
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void validByOrderIdAndSourceType(String orderId, int sourceType) {
    public void validByOrderIdAndSourceType(String orderId, int sourceType) throws InviteOrderSubsidyException {
        // 查询预计到账时间
        List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId(sourceType, orderId);
        if (orderList == null || orderList.size() == 0)
            throw new InviteOrderSubsidyException(31, "订单不存在");
        if (orderList.get(0).getSettleTime() == null)
            throw new InviteOrderSubsidyException(32, "订单尚未确认收货");
        // 确认收货时间的下月25号到账
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(orderList.get(0).getSettleTime());
        calendar.add(Calendar.MONTH, 1);
        Date preGetTime = new Date(TimeUtil.convertToTimeTemp(
                calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd"));
        List<InviteOrderSubsidy> list = inviteOrderSubsidyMapper.listByOrderNoAndType(orderId, sourceType);
        if (list != null && list.size() > 0)
            for (InviteOrderSubsidy subsidy : list) {
@@ -248,10 +359,11 @@
                    InviteOrderSubsidy update = new InviteOrderSubsidy(subsidy.getId());
                    update.setState(InviteOrderSubsidy.STATE_VALID);
                    update.setUpdateTime(new Date());
                    update.setPreGetTime(preGetTime);
                    inviteOrderSubsidyMapper.updateByPrimaryKeySelective(update);
                    orderTeamRewardService.validByOrderIdAndSourceType(subsidy.getId(), preGetTime);
                }
            }
    }
    @Override
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMoneyComputeServiceImpl.java
@@ -110,24 +110,20 @@
                baseRate.add(officialSubsidyRate).multiply(new BigDecimal(100)));
    }
    public BigDecimal computeFirstTeamReward(BigDecimal firstTeamSubsidy, Date placeOrderTime,
            BigDecimal secondTeamSubsidy, UserLevelEnum userLevel) {
    @Override
    public BigDecimal computeFirstTeamReward(BigDecimal money, Date placeOrderTime, UserLevelEnum userLevel) {
        if (userLevel != UserLevelEnum.superVIP)
            return null;
        BigDecimal firstRate = getTeamRewardRate(placeOrderTime, userLevel, true);
        BigDecimal secondRate = getTeamRewardRate(placeOrderTime, userLevel, false);
        if (firstRate == null || secondRate == null)
        if (firstRate == null)
            return null;
        BigDecimal firstReward = MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(secondRate, firstTeamSubsidy),
                new BigDecimal(100));
        BigDecimal secondReward = MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(firstRate, secondTeamSubsidy),
                new BigDecimal(100));
        BigDecimal reward = MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(firstRate, money), new BigDecimal(100));
        return firstReward.add(secondReward);
        return reward;
    }
    /**
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java
@@ -37,22 +37,25 @@
import com.yeshi.fanli.entity.order.HongBaoOrder;
import com.yeshi.fanli.entity.order.HongBaoV2SettleTemp;
import com.yeshi.fanli.entity.order.InviteOrderSubsidy;
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
import com.yeshi.fanli.entity.order.OrderTeamReward;
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
import com.yeshi.fanli.exception.money.InviteOrderSubsidyDebtException;
import com.yeshi.fanli.exception.money.OrderMoneySettleException;
import com.yeshi.fanli.exception.money.OrderTeamRewardDebtException;
import com.yeshi.fanli.exception.money.UserMoneyDetailException;
import com.yeshi.fanli.exception.order.TaoBaoWeiQuanException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.hongbao.AccountDetailsHongBaoMapService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoV2SettleTempService;
import com.yeshi.fanli.service.inter.money.InviteOrderSubsidyDebtService;
import com.yeshi.fanli.service.inter.money.OrderTeamRewardDebtService;
import com.yeshi.fanli.service.inter.money.UserMoneyService;
import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService;
import com.yeshi.fanli.service.inter.money.tb.TaoBaoWeiQuanDrawBackService;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyService;
import com.yeshi.fanli.service.inter.order.OrderMoneySettleService;
import com.yeshi.fanli.service.inter.order.OrderTeamRewardService;
import com.yeshi.fanli.service.inter.order.tb.TaoBaoOrderService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
import com.yeshi.fanli.util.Constant;
@@ -62,7 +65,6 @@
import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory;
import com.yeshi.fanli.util.rocketmq.MQTopicName;
import com.yeshi.fanli.util.taobao.TaoKeOrderApiUtil;
@Service
public class OrderMoneySettleServiceImpl implements OrderMoneySettleService {
@@ -114,7 +116,13 @@
    @Resource
    private HongBaoV2SettleTempService hongBaoV2SettleTempService;
    //下级被封禁,红包失效
    @Resource
    private OrderTeamRewardService orderTeamRewardService;
    @Resource
    private OrderTeamRewardDebtService orderTeamRewardDebtService;
    // 下级被封禁,红包失效
    private void invalidHongBaoForbidden(Long id) {
        HongBaoV2 updateHongBaoV2 = new HongBaoV2(id);
        updateHongBaoV2.setState(HongBaoV2.STATE_SHIXIAO);
@@ -1064,4 +1072,90 @@
        }
        return debtMoney;
    }
    private BigDecimal kouKuanReward(List<OrderTeamReward> rewardList, BigDecimal debtMoney) {
        BigDecimal average = debtMoney.divide(new BigDecimal(rewardList.size()), 2, RoundingMode.UP);
        for (int i = 0; i < rewardList.size(); i++) {
            OrderTeamReward sidy = rewardList.get(i);
            BigDecimal subMoney = null;
            if (average.compareTo(sidy.getMoney()) >= 0) {
                subMoney = sidy.getMoney();
            } else {
                subMoney = average;
            }
            if (subMoney.compareTo(debtMoney) > 0)
                subMoney = debtMoney;
            debtMoney = debtMoney.subtract(subMoney);
            sidy.setMoney(sidy.getMoney().subtract(subMoney));
            if (sidy.getMoney().compareTo(new BigDecimal(0)) == 0) {
                rewardList.remove(i);
                i--;
            }
        }
        return debtMoney;
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void orderTeamRewardSettle(Long uid) throws OrderMoneySettleException {
        long count = orderTeamRewardService.countCanSettle(uid);
        if (count <= 0) {
            return;
        }
        int pageSize = 2000;
        int page = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
        // 查询出需要到账的奖励
        List<OrderTeamReward> totalList = new ArrayList<>();
        for (int i = 0; i < page; i++) {
            List<OrderTeamReward> list = orderTeamRewardService.listCanSettle(uid, i + 1, pageSize);
            if (list != null && list.size() > 0)
                totalList.addAll(list);
        }
        if (totalList.size() > 0) {
            BigDecimal debtMoney = orderTeamRewardDebtService.getTotalDebtMoney(uid);
            BigDecimal originalDebtMoney = new BigDecimal(debtMoney.toString());// 总的欠款
            List<OrderTeamReward> copyRewardList = new ArrayList<>();
            copyRewardList.addAll(totalList);
            while (debtMoney.compareTo(new BigDecimal(0)) > 0 && copyRewardList.size() > 0) {// 有欠款,还有还的
                debtMoney = kouKuanReward(copyRewardList, debtMoney);
            }
            // 偿还欠款金额
            BigDecimal repayMoney = originalDebtMoney.subtract(debtMoney);
            BigDecimal bannce = null;
            if (repayMoney.compareTo(new BigDecimal(0)) > 0) {
                try {
                    bannce = orderTeamRewardDebtService.repayDebtByUid(uid, repayMoney);
                    // 剩余的补贴金额
                } catch (OrderTeamRewardDebtException e) {
                    throw new OrderMoneySettleException(2, "还款异常");
                }
            }
            if (bannce != null && bannce.compareTo(new BigDecimal(0)) > 0) {
                // 如果有还剩下的钱就加到第一个上面
                totalList.get(0).setMoney(totalList.get(0).getMoney().add(bannce));
            }
            BigDecimal totalMoney = new BigDecimal(0);
            for (OrderTeamReward reward : totalList) {
                orderTeamRewardService.settleById(reward.getId(), reward.getMoney());
                totalMoney = totalMoney.add(reward.getMoney());
            }
            // 实际到账奖励
            UserMoneyDetail userMoneyDetail = null;
            try {
                userMoneyDetail = UserMoneyDetailFactory.createOrderTeamReward(uid, totalMoney, new Date());
            } catch (UserMoneyDetailException e) {
                throw new OrderMoneySettleException(1, "账户明细构建出错");
            }
            // 添加资金
            userMoneyService.addUserMoney(uid, totalMoney, userMoneyDetail);
            // 添加消息
            userMoneyMsgNotificationService.orderTeamReward(uid, new Date(), "系统自动下发", totalMoney,
                    userInfoMapper.selectAvailableByPrimaryKey(uid).getMyHongBao());
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderTeamRewardServiceImpl.java
New file
@@ -0,0 +1,164 @@
package com.yeshi.fanli.service.impl.order;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.yeshi.fanli.dao.mybatis.order.OrderTeamRewardMapper;
import com.yeshi.fanli.entity.order.InviteOrderSubsidy;
import com.yeshi.fanli.entity.order.OrderTeamReward;
import com.yeshi.fanli.exception.order.OrderTeamRewardException;
import com.yeshi.fanli.service.inter.order.OrderTeamRewardService;
import com.yeshi.fanli.util.StringUtil;
@Service
public class OrderTeamRewardServiceImpl implements OrderTeamRewardService {
    @Resource
    private OrderTeamRewardMapper orderTeamRewardMapper;
    @Override
    public OrderTeamReward getByOrderNoAndType(Long uid, String orderNo, Integer type) {
        return orderTeamRewardMapper.getByOrderNoAndType(uid, orderNo, type);
    }
    @Override
    public OrderTeamReward getByOrderNoAndTypeForUpdate(Long uid, String orderNo, Integer type) {
        return orderTeamRewardMapper.getByOrderNoAndTypeForUpdate(uid, orderNo, type);
    }
    @Transactional(rollbackFor = Exception.class)
    private void addOrderSubsidy(OrderTeamReward orderSubsidy) throws OrderTeamRewardException {
        if (orderSubsidy.getMoney() == null || StringUtil.isNullOrEmpty(orderSubsidy.getOrderNo())
                || orderSubsidy.getSourceType() == null || orderSubsidy.getUid() == null)
            throw new OrderTeamRewardException(1, "数据不完整");
        OrderTeamReward old = getByOrderNoAndType(orderSubsidy.getUid(), orderSubsidy.getOrderNo(),
                orderSubsidy.getSourceType());
        if (old != null) {// 修改
            if (old.getState() == OrderTeamReward.STATE_INVALID || old.getState() == OrderTeamReward.STATE_RECIEVED)
                return;
            // 修改状态
            OrderTeamReward update = new OrderTeamReward(old.getId());
            update.setMoney(orderSubsidy.getMoney());
            if (old.getState() == OrderTeamReward.STATE_UNKNOWN) {// 状态未确定之前才可以更改原始补贴资金
                update.setOriginalMoney(orderSubsidy.getOriginalMoney());
            }
            update.setState(orderSubsidy.getState());
            update.setUpdateTime(new Date());
            orderTeamRewardMapper.updateByPrimaryKeySelective(update);
        } else {// 添加
            if (orderSubsidy.getCreateTime() == null)
                orderSubsidy.setCreateTime(new Date());
            orderTeamRewardMapper.insertSelective(orderSubsidy);
        }
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void addOrUpdate(InviteOrderSubsidy subsidy, BigDecimal money, Long uid,int level) throws OrderTeamRewardException {
        if (subsidy == null || subsidy.getId() == null)
            throw new OrderTeamRewardException(1, "补贴为空");
        if (money == null)
            throw new OrderTeamRewardException(2, "团队奖励资金为空");
        OrderTeamReward reward = orderTeamRewardMapper.selectBySubsidyIdAndUidForUpdate(subsidy.getId(), uid);
        if (reward != null) {// 原来已存在
            if (reward.getState() == OrderTeamReward.STATE_RECIEVED)
                return;
            if (reward.getState() == OrderTeamReward.STATE_INVALID)
                return;
            if (subsidy.getState().intValue() != reward.getState() || money.compareTo(reward.getMoney()) != 0) {
                // 状态或者资金改变,需要改变数据
                OrderTeamReward updateReward = new OrderTeamReward(reward.getId());
                updateReward.setState(subsidy.getState());
                updateReward.setMoney(money);
                updateReward.setUpdateTime(new Date());
                orderTeamRewardMapper.updateByPrimaryKeySelective(updateReward);
            }
        } else {// 原来不存在
            reward = new OrderTeamReward();
            reward.setCreateTime(new Date());
            reward.setMoney(money);
            reward.setOrderNo(subsidy.getOrderNo());
            reward.setOriginalMoney(money);
            reward.setSourceType(subsidy.getSourceType());
            reward.setState(subsidy.getState());
            reward.setSubsidy(subsidy);
            reward.setUid(uid);
            reward.setLevel(level);
            orderTeamRewardMapper.insertSelective(reward);
        }
    }
    @Override
    public long countByOrderIdAndSourceType(String orderId, int sourceType) {
        return orderTeamRewardMapper.countByOrderNoAndType(orderId, sourceType);
    }
    @Transactional
    @Override
    public void invalidByOrderIdAndSourceType(Long subsidyId) {
        List<OrderTeamReward> list = orderTeamRewardMapper.listBySubsidyId(subsidyId);
        if (list != null && list.size() > 0)
            for (OrderTeamReward subsidy : list) {
                if (subsidy.getState() == OrderTeamReward.STATE_UNKNOWN
                        || subsidy.getState() == OrderTeamReward.STATE_VALID) {
                    OrderTeamReward update = new OrderTeamReward(subsidy.getId());
                    update.setState(OrderTeamReward.STATE_INVALID);
                    update.setUpdateTime(new Date());
                    orderTeamRewardMapper.updateByPrimaryKeySelective(update);
                }
            }
    }
    @Transactional
    @Override
    public void validByOrderIdAndSourceType(Long subsidyId, Date preGetTime) {
        List<OrderTeamReward> list = orderTeamRewardMapper.listBySubsidyId(subsidyId);
        if (list != null && list.size() > 0)
            for (OrderTeamReward subsidy : list) {
                if (subsidy.getState() == OrderTeamReward.STATE_UNKNOWN) {
                    OrderTeamReward update = new OrderTeamReward(subsidy.getId());
                    update.setState(OrderTeamReward.STATE_VALID);
                    update.setUpdateTime(new Date());
                    update.setPreGetTime(preGetTime);
                    orderTeamRewardMapper.updateByPrimaryKeySelective(update);
                }
            }
    }
    @Override
    public void settleById(Long id, BigDecimal money) {
        OrderTeamReward orderSubsidy = new OrderTeamReward(id);
        orderSubsidy.setMoney(money);
        orderSubsidy.setState(OrderTeamReward.STATE_RECIEVED);
        orderSubsidy.setUpdateTime(new Date());
        orderTeamRewardMapper.updateByPrimaryKeySelective(orderSubsidy);
    }
    @Override
    public List<OrderTeamReward> listBySubsidyId(Long subsidyId) {
        return orderTeamRewardMapper.listBySubsidyId(subsidyId);
    }
    @Override
    public List<OrderTeamReward> listCanSettle(Long uid, int page, int pageSize) {
        return orderTeamRewardMapper.listCanSettleByUid(uid, (page-1)*pageSize, pageSize);
    }
    @Override
    public long countCanSettle(Long uid) {
        return orderTeamRewardMapper.countCanSettle(uid);
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/ThreeSaleSerivceImpl.java
@@ -631,10 +631,23 @@
        return threeSaleMapper.getTeamOrderNumByWorkerId(workerId);
    }
    @Override
    public List<ThreeSale> getValidWorkerIdsByTime(Long bossId, long limitTime) {
        return threeSaleMapper.getValidWorkerIdsByTime(bossId, limitTime);
    }
    @Override
    public List<ThreeSale> getMyBossDeepList(Long uid, int deep) {
        List<ThreeSale> deepList = new ArrayList<>();
        ThreeSale boss = getMyBoss(uid);
        while (deep > 0 && boss != null) {
            deep--;
            deepList.add(boss);
            boss = getMyBoss(boss.getBoss().getId());
        }
        return deepList;
    }
}
fanli/src/main/java/com/yeshi/fanli/service/inter/money/OrderTeamRewardDebtService.java
New file
@@ -0,0 +1,68 @@
package com.yeshi.fanli.service.inter.money;
import java.math.BigDecimal;
import java.util.List;
import com.yeshi.fanli.entity.money.OrderTeamRewardDebt;
import com.yeshi.fanli.exception.money.OrderTeamRewardDebtException;
/**
 * 团队奖金欠款处理
 * @author Administrator
 *
 */
public interface OrderTeamRewardDebtService {
    /**
     * 添加债务
     *
     * @param debt
     * @throws OrderTeamRewardDebtException
     */
    public void addDebt(OrderTeamRewardDebt debt) throws OrderTeamRewardDebtException;
    /**
     * 偿还债务
     *
     * @param debtId
     * @param money
     */
    public void repayDebt(Long debtId, BigDecimal money) throws OrderTeamRewardDebtException;
    /**
     * 还款
     *
     * @param uid
     * @param money
     * @return 还剩下的资金
     * @throws OrderTeamRewardDebtException
     */
    public BigDecimal repayDebtByUid(Long uid, BigDecimal money) throws OrderTeamRewardDebtException;
    /**
     * 检索需要偿还的债务
     *
     * @param uid
     * @param page
     * @param count
     * @return
     */
    public List<OrderTeamRewardDebt> listNeedRepayDebt(Long uid, int page, int count);
    /**
     * 检索需要偿还的债务
     *
     * @param uid
     * @return
     */
    public long countNeedRepayDebt(Long uid);
    /**
     * 获取总共欠钱金额
     *
     * @param uid
     * @return
     */
    public BigDecimal getTotalDebtMoney(Long uid);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/money/msg/UserMoneyMsgNotificationService.java
@@ -177,4 +177,19 @@
     */
    public void teamRedPackRewardMsg(Long uid, MsgTypeMoneyTypeEnum type, BigDecimal money, String stateDesc,String content);
    
    /**
     * 团队奖励消息
     * @Title: orderTeamReward
     * @Description:
     * @param uid
     * @param date
     * @param from
     * @param money
     * @param balance
     * void 返回类型
     * @throws
     */
    public void orderTeamReward(Long uid, Date date, String from, BigDecimal money, BigDecimal balance);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/order/InviteOrderSubsidyService.java
@@ -59,7 +59,7 @@
     * @param orderId
     * @param sourceType
     */
    public void validByOrderIdAndSourceType(String orderId, int sourceType);
    public void validByOrderIdAndSourceType(String orderId, int sourceType) throws InviteOrderSubsidyException;
    
    
    /**
fanli/src/main/java/com/yeshi/fanli/service/inter/order/InviteOrderSubsidyServiceV2.java
@@ -3,7 +3,9 @@
import java.math.BigDecimal;
import com.yeshi.fanli.entity.order.InviteOrderSubsidy;
import com.yeshi.fanli.exception.order.CommonOrderException;
import com.yeshi.fanli.exception.order.InviteOrderSubsidyException;
import com.yeshi.fanli.exception.order.OrderTeamRewardException;
public interface InviteOrderSubsidyServiceV2 {
@@ -25,8 +27,6 @@
     * @return
     */
    public InviteOrderSubsidy getByOrderNoAndTypeForUpdate(Long uid, String orderNo, Integer type);
    /**
     * 添加或修改(按照订单号与来源)
@@ -34,7 +34,8 @@
     * @param orderId
     * @param sourceType
     */
    public void addOrUpdateByOrder(String orderId, int sourceType) throws InviteOrderSubsidyException;
    public void addOrUpdateByOrder(String orderId, int sourceType)
            throws InviteOrderSubsidyException, OrderTeamRewardException, CommonOrderException;
    /**
     * 根据订单号与来源查询
@@ -53,19 +54,17 @@
     */
    public void invalidByOrderIdAndSourceType(String orderId, int sourceType);
    /**
     * 使订单号对应的数据有效
     * @param orderId
     * @param sourceType
     */
    public void validByOrderIdAndSourceType(String orderId, int sourceType);
    public void validByOrderIdAndSourceType(String orderId, int sourceType) throws InviteOrderSubsidyException;
    /**
     * 结算金额
     * @param id
     * @param money
     */
    public void settleById(Long id,BigDecimal money);
    public void settleById(Long id, BigDecimal money);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderHongBaoMoneyComputeService.java
@@ -46,7 +46,7 @@
     * BigDecimal 返回类型
     * @throws
     */
    public BigDecimal computeFirstInviteMoney(CommonOrder order,UserLevelEnum buyer);
    public BigDecimal computeFirstInviteMoney(CommonOrder order, UserLevelEnum buyer);
    /**
     * 计算间接粉丝邀请奖金
@@ -57,7 +57,7 @@
     * BigDecimal 返回类型
     * @throws
     */
    public BigDecimal computeSecondInviteMoney(CommonOrder order,UserLevelEnum buyer);
    public BigDecimal computeSecondInviteMoney(CommonOrder order, UserLevelEnum buyer);
    /**
     * 计算直接粉丝团队补贴
@@ -70,7 +70,8 @@
     * BigDecimal 返回类型
     * @throws
     */
    public BigDecimal computeFirstTeamSubsidy(BigDecimal fanLiMoney,Date placeOrderTime, UserLevelEnum buyerUserLevel, UserLevelEnum userLevel);
    public BigDecimal computeFirstTeamSubsidy(BigDecimal fanLiMoney, Date placeOrderTime, UserLevelEnum buyerUserLevel,
            UserLevelEnum userLevel);
    /**
     * 计算间接粉丝团队补贴
@@ -84,7 +85,7 @@
     * @throws
     */
    public BigDecimal computeSecondTeamSubsidy(BigDecimal fanLiMoney,Date placeOrderTime, UserLevelEnum buyerUserLevel,
    public BigDecimal computeSecondTeamSubsidy(BigDecimal fanLiMoney, Date placeOrderTime, UserLevelEnum buyerUserLevel,
            UserLevelEnum userLevel);
    /**
@@ -98,10 +99,8 @@
     * BigDecimal 返回类型
     * @throws
     */
    public BigDecimal computeFirstTeamReward(BigDecimal firstTeamSubsidy,Date placeOrderTime, BigDecimal secondTeamSubsidy,
            UserLevelEnum userLevel);
    public BigDecimal computeFirstTeamReward(BigDecimal firstTeamSubsidy, Date placeOrderTime, UserLevelEnum userLevel);
    /**
     * 计算二级团队奖励
     * @Title: computeSecondTeamReward
@@ -112,6 +111,7 @@
     * BigDecimal 返回类型
     * @throws
     */
    public BigDecimal computeSecondTeamReward(BigDecimal secondTeamSubsidy,Date placeOrderTime, UserLevelEnum userLevel);
    public BigDecimal computeSecondTeamReward(BigDecimal secondTeamSubsidy, Date placeOrderTime,
            UserLevelEnum userLevel);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderMoneySettleService.java
@@ -38,7 +38,7 @@
     * @param orderId
     * @param sourceType
     */
    public void ziGouSettle(String orderId, int sourceType,String taskKey) throws OrderMoneySettleException;
    public void ziGouSettle(String orderId, int sourceType, String taskKey) throws OrderMoneySettleException;
    /**
     * 邀请补贴结算
@@ -47,4 +47,14 @@
     * @throws OrderMoneySettleException
     */
    public void inviteSubsidySettle(Long uid, String taskKey) throws OrderMoneySettleException;
    /**
     * 团队奖励到账
     * @Title: orderTeamRewardSettle
     * @Description:
     * @param uid
     * void 返回类型
     * @throws
     */
    public void orderTeamRewardSettle(Long uid) throws OrderMoneySettleException;
}
fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderTeamRewardService.java
@@ -1,7 +1,10 @@
package com.yeshi.fanli.service.inter.order;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.yeshi.fanli.entity.order.InviteOrderSubsidy;
import com.yeshi.fanli.entity.order.OrderTeamReward;
import com.yeshi.fanli.exception.order.OrderTeamRewardException;
@@ -25,8 +28,6 @@
     * @return
     */
    public OrderTeamReward getByOrderNoAndTypeForUpdate(Long uid, String orderNo, Integer type);
    /**
     * 添加或修改(按照订单号与来源)
@@ -34,7 +35,8 @@
     * @param orderId
     * @param sourceType
     */
    public void addOrUpdateByOrder(String orderId, int sourceType) throws OrderTeamRewardException;
    public void addOrUpdate(InviteOrderSubsidy subsidy, BigDecimal money, Long uid,int level)
            throws OrderTeamRewardException;
    /**
     * 根据订单号与来源查询
@@ -51,21 +53,57 @@
     * @param orderId
     * @param sourceType
     */
    public void invalidByOrderIdAndSourceType(String orderId, int sourceType);
    public void invalidByOrderIdAndSourceType(Long subsidyId);
    /**
     * 使订单号对应的数据有效
     * @param orderId
     * @param sourceType
     */
    public void validByOrderIdAndSourceType(String orderId, int sourceType);
    public void validByOrderIdAndSourceType(Long subsidyId,Date preGetTime);
    /**
     * 结算金额
     * @param id
     * @param money
     */
    public void settleById(Long id,BigDecimal money);
    public void settleById(Long id, BigDecimal money);
    /**
     * 根据补贴ID获取团队奖励
     * @Title: listBySubsidyId
     * @Description:
     * @param subsidyId
     * @return
     * List<OrderTeamReward> 返回类型
     * @throws
     */
    public List<OrderTeamReward> listBySubsidyId(Long subsidyId);
    /**
     * 查询可以结算的
     * @Title: listCanSettle
     * @Description:
     * @param uid
     * @param page
     * @param pageSize
     * @return
     * List<OrderTeamReward> 返回类型
     * @throws
     */
    public List<OrderTeamReward> listCanSettle(Long uid,int page,int pageSize);
    /**
     * 统计可以结算的数量
     * @Title: countCanSettle
     * @Description:
     * @param uid
     * @return
     * long 返回类型
     * @throws
     */
    public long countCanSettle(Long uid);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/user/invite/ThreeSaleSerivce.java
@@ -327,5 +327,18 @@
     * @return
     */
    public List<ThreeSale> getValidWorkerIdsByTime(Long bossId, long limitTime);
    /**
     * 获取上几级邀请人
     * @Title: getMyBossDeepList
     * @Description:
     * @param uid
     * @param deep 上deep级
     * @return
     * List<ThreeSale> 返回类型
     * @throws
     */
    public List<ThreeSale> getMyBossDeepList(Long uid,int deep);
}
fanli/src/main/java/com/yeshi/fanli/util/factory/UserMoneyDetailFactory.java
@@ -600,5 +600,38 @@
        detail.setOrderType(orderType);
        return detail;
    }
    public static UserMoneyDetail createOrderTeamReward(Long uid,BigDecimal money, Date time)
            throws UserMoneyDetailException {
        if (money == null)
            throw new UserMoneyDetailException(1, "返利金额为空");
        if (uid == null)
            throw new UserMoneyDetailException(1, "UID为空");
        if (time == null)
            throw new UserMoneyDetailException(1, "发生时间为空");
        Calendar ca = Calendar.getInstance();
        ca.setTime(time);
        ca.add(Calendar.MONTH, -1);
        String timeF = TimeUtil.getGernalTime(ca.getTimeInMillis(), "yyyy.M");
        UserMoneyDetail detail = new UserMoneyDetail();
        detail.setCreateTime(new Date());
        detail.setIdentifyCode(
                StringUtil.Md5(UserMoneyDetailTypeEnum.orderTeamReward.name() + "-" + uid + "-" + timeF));
        detail.setMoney(money);
        detail.setTitle(
                timeF + UserMoneyDetailTypeEnum.orderTeamReward.getDesc());
        detail.setType(UserMoneyDetailTypeEnum.orderTeamReward);
        detail.setDescInfo("团队奖励");
        detail.setUpdateTime(new Date());
        detail.setUserInfo(new UserInfo(uid));
        return detail;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/factory/msg/MsgMoneyDetailFactory.java
@@ -399,6 +399,41 @@
        return detail;
    }
    
    /**
     * 团队奖励
     * @Title: createOrderTeamRewardMsg
     * @Description:
     * @param uid
     * @param date
     * @param from
     * @param money
     * @param balance
     * @param beiZhu
     * @return
     * MsgMoneyDetail 返回类型
     * @throws
     */
    public static MsgMoneyDetail createOrderTeamRewardMsg(Long uid, Date date, String from, BigDecimal money,
            BigDecimal balance, String beiZhu) {
        if (money == null || money == null || uid == null)
            return null;
        MsgMoneyDetail detail = new MsgMoneyDetail();
        detail.setBalance(balance);
        detail.setBeiZhu(beiZhu);
        detail.setCreateTime(new Date());
        detail.setMoney(money);
        detail.setMsgType(MsgTypeMoneyTypeEnum.orderTeamReward);
        detail.setRead(false);
        detail.setUser(new UserInfo(uid));
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        detail.setStateDesc(String.format("%s年%s月团队奖励到账", calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH)));
        detail.setDesc(from);
        return detail;
    }
    
    /**
     * 红包相关信息
fanli/src/main/java/com/yeshi/fanli/util/factory/msg/UserMsgVOFactory.java
@@ -585,6 +585,30 @@
            return new UserMsgVO("http://img.flqapp.com/resource/msg/icon_msg_subsidy.png", msg.getMsgType().getDesc(),
                    msg.getUpdateTime() == null ? msg.getCreateTime() : msg.getUpdateTime(), items);
        }else if (msg.getMsgType() == MsgTypeMoneyTypeEnum.orderTeamReward) { // 团队奖励
            contentList = new ArrayList<>();
            contentList.add(new ClientTextStyleVO(msg.getStateDesc(), COLOR_CONTENT));
            items.add(new CommonMsgItemVO(new ClientTextStyleVO("类别", COLOR_TITLE), contentList));
            contentList = new ArrayList<>();
            contentList.add(new ClientTextStyleVO("¥" + filterMoney(msg.getMoney()), COLOR_HIGHLIGHT_CONTENT));
            items.add(new CommonMsgItemVO(new ClientTextStyleVO("金额", COLOR_TITLE), contentList));
            contentList = new ArrayList<>();
            contentList.add(new ClientTextStyleVO(msg.getDesc(), COLOR_CONTENT));
            items.add(new CommonMsgItemVO(new ClientTextStyleVO("来源", COLOR_TITLE), contentList));
            contentList = new ArrayList<>();
            contentList.add(new ClientTextStyleVO("¥" + filterMoney(msg.getBalance()), COLOR_HIGHLIGHT_CONTENT));
            items.add(new CommonMsgItemVO(new ClientTextStyleVO("账户余额", COLOR_TITLE), contentList));
            contentList = new ArrayList<>();
            contentList.add(new ClientTextStyleVO(StringUtil.isNullOrEmpty(msg.getBeiZhu()) ? "无" : msg.getBeiZhu(),
                    COLOR_CONTENT));
            items.add(new CommonMsgItemVO(new ClientTextStyleVO("备注", COLOR_TITLE), contentList));
            return new UserMsgVO("http://img.flqapp.com/resource/msg/icon_msg_subsidy.png", msg.getMsgType().getDesc(),
                    msg.getUpdateTime() == null ? msg.getCreateTime() : msg.getUpdateTime(), items);
        } else if (msg.getMsgType() == MsgTypeMoneyTypeEnum.redPackReceiveOff) { // 红包成功领取
            if (StringUtil.isNullOrEmpty(msg.getContent()))
                return null;
fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/order/InviteOrderSubsidyMessageListener.java
@@ -119,8 +119,13 @@
                                        dto.getSourceType());
                            } else {
                                // 使数据有效
                                inviteOrderSubsidyService.validByOrderIdAndSourceType(dto.getOrderId(),
                                        dto.getSourceType());
                                try {
                                    inviteOrderSubsidyService.validByOrderIdAndSourceType(dto.getOrderId(),
                                            dto.getSourceType());
                                } catch (InviteOrderSubsidyException e) {
                                    e.printStackTrace();
                                    return Action.ReconsumeLater;
                                }
                            }
                        }
                    }