admin
2019-07-26 0849ec5d0ba9934035e78f490357366ca7e84224
维权订单相关修改
8个文件已修改
453 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/admin/OrderAdminController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/admin/order/TaoBaoOrderController.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/taobao/TaoBaoWeiQuanOrderMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/taobao/TaoBaoWeiQuanOrder.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/taobao/TaoBaoWeiQuanOrderMapper.xml 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanDrawBackServiceImpl.java 209 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanOrderServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/TaoBaoWeiQuanOrderService.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/admin/OrderAdminController.java
@@ -1,6 +1,7 @@
package com.yeshi.fanli.controller.admin;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -17,16 +18,21 @@
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.yeshi.fanli.controller.admin.utils.AdminUtils;
import com.yeshi.fanli.entity.money.UserMoneyDebt.UserMoneyDebtTypeEnum;
import com.yeshi.fanli.entity.money.UserMoneyDebt;
import com.yeshi.fanli.entity.money.UserMoneyDetail;
import com.yeshi.fanli.entity.money.UserMoneyDetail.UserMoneyDetailTypeEnum;
import com.yeshi.fanli.entity.order.CommonOrder;
import com.yeshi.fanli.entity.order.HongBaoOrder;
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanDrawBack;
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
import com.yeshi.fanli.exception.order.CommonOrderException;
import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
import com.yeshi.fanli.service.inter.count.TaoBaoOrderCountService;
import com.yeshi.fanli.service.inter.money.UserMoneyDebtService;
import com.yeshi.fanli.service.inter.order.CommonOrderCountService;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.order.HongBaoOrderService;
import com.yeshi.fanli.service.inter.order.OrderProcessService;
import com.yeshi.fanli.service.inter.order.OrderService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoOrderService;
@@ -75,6 +81,12 @@
    @Resource
    private OrderProcessService orderProcessService;
    @Resource
    private HongBaoOrderService hongBaoOrderService;
    @Resource
    private UserMoneyDebtService userMoneyDebtService;
    /**
     * 统计历史订单-淘宝订单
@@ -200,7 +212,22 @@
                            // 退款成功
                            order.setWeiQuanBackMoney(detail.getMoney().abs().toString());
                        } else {// 尚未退款
                            order.setWeiQuanBackMoney("-" + order.getHongBao());
                            order.setWeiQuanBackMoney(drawBack.getDrawBackMoney().toString());
                            // 查询出对应的hongBaoId
                            CommonOrder commonOrder = commonOrderService.selectBySourceTypeAndTradeId(
                                    Constant.SOURCE_TYPE_TAOBAO, drawBack.getOrderItemId());
                            if (commonOrder != null) {
                                HongBaoOrder hongBaoOrder = hongBaoOrderService
                                        .selectDetailByCommonOrderId(commonOrder.getId());
                                if (hongBaoOrder != null) {
                                    UserMoneyDebt debt = userMoneyDebtService.selectByTypeAndSourceId(
                                            UserMoneyDebtTypeEnum.order, hongBaoOrder.getHongBaoV2().getId());
                                    if (debt != null && debt.getLeftMoney().compareTo(new BigDecimal(0)) > 0) {
                                        order.setWeiQuanBackMoney(
                                                new BigDecimal(0).subtract(debt.getLeftMoney()).toString());//未扣除
                                    }
                                }
                            }
                        }
                    } else {// 尚未退款
fanli/src/main/java/com/yeshi/fanli/controller/admin/order/TaoBaoOrderController.java
@@ -21,9 +21,11 @@
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
import com.yeshi.fanli.job.UpdateOrderJob;
import com.yeshi.fanli.job.UpdateRelationAndSpecialOrderJob;
import com.yeshi.fanli.service.inter.taobao.TaoBaoOrderService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoWeiQuanOrderService;
import com.yeshi.fanli.tag.PageEntity;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
@@ -37,6 +39,9 @@
    @Resource
    private TaoBaoOrderService taoBaoOrderService;
    @Resource
    private TaoBaoWeiQuanOrderService taoBaoWeiQuanOrderService;
    @Resource
    private UpdateRelationAndSpecialOrderJob updateRelationAndSpecialOrderJob;
@@ -140,4 +145,48 @@
        }
    }
    @RequestMapping(value = "listTaoBaoWQOrder")
    public void listTaoBaoWeiQuanOrder(String callback, String key, Integer pageIndex, PrintWriter out) {
        try {
            if (pageIndex == null || pageIndex < 0) {
                pageIndex = 1;
            }
            List<TaoBaoWeiQuanOrder> orderList = null;
            Long count = null;
            if (!StringUtil.isNullOrEmpty(key)) {
                orderList = taoBaoWeiQuanOrderService.listByOrderId(key);
                count = (long) orderList.size();
            } else {
                orderList = taoBaoWeiQuanOrderService.listByState(null, pageIndex, Constant.PAGE_SIZE);
                count = taoBaoWeiQuanOrderService.countByState(null);
            }
            int pageSize = Constant.PAGE_SIZE;
            int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
            PageEntity pe = new PageEntity(pageIndex, pageSize, count, totalPage);
            Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
                @Override
                public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
                    if (value == null) {
                        return new JsonPrimitive("");
                    } else {
                        return new JsonPrimitive(TimeUtil.getGernalTime(value.getTime(), "yyyy-MM-dd HH:mm:ss"));
                    }
                }
            }).create();
            JSONObject data = new JSONObject();
            data.put("pe", pe);
            data.put("result_list", gson.toJson(orderList));
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("查询失败"));
            e.printStackTrace();
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/taobao/TaoBaoWeiQuanOrderMapper.java
@@ -66,4 +66,26 @@
    List<TaoBaoWeiQuanOrder> listByState(@Param("state") String state, @Param("start") long start,
            @Param("count") int count);
    /**
     * 根据状态统计数量
     *
     * @param state
     * @return
     */
    long countByState(@Param("state") String state);
    /**
     * 根据订单号检索
     * @param orderId
     * @return
     */
    List<TaoBaoWeiQuanOrder> listByOrderId(String orderId);
    /**
     * 根据子订单号检索
     * @param tradeId
     * @return
     */
    TaoBaoWeiQuanOrder selectByOrderItem(String tradeId);
}
fanli/src/main/java/com/yeshi/fanli/entity/taobao/TaoBaoWeiQuanOrder.java
@@ -41,11 +41,11 @@
    private Date createTime;// 创建时间
    @Column(name = "tmo_updatetime")
    private Date updateTime;// 本地更新时间
    @Column(name = "tmo_settlement")
    private BigDecimal settlement;// 结算金额
    @Transient
    private int mate; // 是否已匹配
    public Long getId() {
        return id;
    }
@@ -54,6 +54,14 @@
        this.id = id;
    }
    public BigDecimal getSettlement() {
        return settlement;
    }
    public void setSettlement(BigDecimal settlement) {
        this.settlement = settlement;
    }
    public Date getCreateTime() {
        return createTime;
    }
fanli/src/main/java/com/yeshi/fanli/mapping/taobao/TaoBaoWeiQuanOrderMapper.xml
@@ -20,8 +20,9 @@
            jdbcType="TIMESTAMP" />
        <result column="tmo_createtime" property="createTime" jdbcType="TIMESTAMP" />
        <result column="tmo_updatetime" property="updateTime" jdbcType="TIMESTAMP" />
        <result column="tmo_settlement" property="settlement" jdbcType="DECIMAL" />
    </resultMap>
    <sql id="Base_Column_List">tmo_id,tmo_order_id,tmo_order_item_id,tmo_goods_name,tmo_money,tmo_fan_money,tmo_state,tmo_jiesuan_time,tmo_weiquan_time,tmo_weiquan_finish_time,tmo_createtime,tmo_updatetime
    <sql id="Base_Column_List">tmo_id,tmo_order_id,tmo_order_item_id,tmo_goods_name,tmo_money,tmo_fan_money,tmo_state,tmo_jiesuan_time,tmo_weiquan_time,tmo_weiquan_finish_time,tmo_createtime,tmo_updatetime,tmo_settlement
    </sql>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap"
        parameterType="java.lang.Long">
@@ -30,23 +31,18 @@
        from yeshi_ec_taobao_weiqaun_order where tmo_id =
        #{id,jdbcType=BIGINT}
    </select>
    <select id="selectByOrderIdAndOrderItemId" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_taobao_weiqaun_order where tmo_order_id =#{orderId} and
        tmo_order_item_id=#{orderItemId}
    </select>
    <select id="selectListByOrderIdAndState" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_taobao_weiqaun_order where tmo_order_id =#{orderId} and
        tmo_state=#{state}
    </select>
    <select id="selectByOrderItemId" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
@@ -54,16 +50,37 @@
    </select>
    <select id="listByOrderId" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_taobao_weiqaun_order
        where tmo_order_id=#{0}
    </select>
    <select id="listByState" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_taobao_weiqaun_order
        <if test="state!=null">
            where tmo_state like '${state}%'
        </if>
        <if test="state!=null">where tmo_state like '${state}%'</if>
        order by tmo_createtime desc limit #{start},#{count}
    </select>
    <select id="countByState" resultType="java.lang.Long"
        parameterType="java.lang.String">
        select
        count(*)
        from yeshi_ec_taobao_weiqaun_order
        <if test="state!=null">where tmo_state like '${state}%'</if>
    </select>
    <select id="selectByOrderItem" resultMap="BaseResultMap" parameterType="java.lang.String">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_taobao_weiqaun_order
        where tmo_order_item_id=#{0}
    </select>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from
@@ -72,9 +89,9 @@
    <insert id="insert" parameterType="com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder"
        useGeneratedKeys="true" keyProperty="id">insert into
        yeshi_ec_taobao_weiqaun_order
        (tmo_id,tmo_order_id,tmo_order_item_id,tmo_goods_name,tmo_money,tmo_fan_money,tmo_state,tmo_jiesuan_time,tmo_weiquan_time,tmo_weiquan_finish_time,tmo_createtime,tmo_updatetime)
        (tmo_id,tmo_order_id,tmo_order_item_id,tmo_goods_name,tmo_money,tmo_fan_money,tmo_state,tmo_jiesuan_time,tmo_weiquan_time,tmo_weiquan_finish_time,tmo_createtime,tmo_updatetime,tmo_settlement)
        values
        (#{id,jdbcType=BIGINT},#{orderId,jdbcType=VARCHAR},#{orderItemId,jdbcType=VARCHAR},#{goodsName,jdbcType=VARCHAR},#{money,jdbcType=DECIMAL},#{fanMoney,jdbcType=DECIMAL},#{state,jdbcType=VARCHAR},#{jieSuanTime,jdbcType=TIMESTAMP},#{weiQuanTime,jdbcType=TIMESTAMP},#{weiQuanFinishTime,jdbcType=TIMESTAMP},#{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP})
        (#{id,jdbcType=BIGINT},#{orderId,jdbcType=VARCHAR},#{orderItemId,jdbcType=VARCHAR},#{goodsName,jdbcType=VARCHAR},#{money,jdbcType=DECIMAL},#{fanMoney,jdbcType=DECIMAL},#{state,jdbcType=VARCHAR},#{jieSuanTime,jdbcType=TIMESTAMP},#{weiQuanTime,jdbcType=TIMESTAMP},#{weiQuanFinishTime,jdbcType=TIMESTAMP},#{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP},#{settlement,jdbcType=DECIMAL})
    </insert>
    <insert id="insertSelective" parameterType="com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder"
        useGeneratedKeys="true" keyProperty="id">
@@ -92,6 +109,7 @@
            <if test="weiQuanFinishTime != null">tmo_weiquan_finish_time,</if>
            <if test="createTime != null">tmo_createtime,</if>
            <if test="updateTime != null">tmo_updatetime,</if>
            <if test="settlement != null">tmo_settlement,</if>
        </trim>
        values
        <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -107,6 +125,7 @@
            <if test="weiQuanFinishTime != null">#{weiQuanFinishTime,jdbcType=TIMESTAMP},</if>
            <if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">#{updateTime,jdbcType=TIMESTAMP},</if>
            <if test="settlement != null">#{settlement,jdbcType=DECIMAL}</if>
        </trim>
    </insert>
    <update id="updateByPrimaryKey" parameterType="com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder">update
@@ -121,7 +140,8 @@
        #{weiQuanTime,jdbcType=TIMESTAMP},tmo_weiquan_finish_time =
        #{weiQuanFinishTime,jdbcType=TIMESTAMP},tmo_createtime =
        #{createTime,jdbcType=TIMESTAMP},tmo_updatetime =
        #{updateTime,jdbcType=TIMESTAMP} where tmo_id = #{id,jdbcType=BIGINT}
        #{updateTime,jdbcType=TIMESTAMP} ,tmo_settlement
        =#{settlement,jdbcType=DECIMAL} where tmo_id = #{id,jdbcType=BIGINT}
    </update>
    <update id="updateByPrimaryKeySelective" parameterType="com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder">
        update yeshi_ec_taobao_weiqaun_order
@@ -138,23 +158,16 @@
            </if>
            <if test="createTime != null">tmo_createtime=#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">tmo_updatetime=#{updateTime,jdbcType=TIMESTAMP},</if>
            <if test="settlement !=null">tmo_settlement =#{settlement,jdbcType=DECIMAL},</if>
        </set>
        where tmo_id = #{id,jdbcType=BIGINT}
    </update>
    <sql id="Column_DateType">
        <if test="dateType == 1">
            DATE_FORMAT(t.`tmo_weiquan_time`,'%Y-%m-%d') AS 'showDate'
        <if test="dateType == 1">DATE_FORMAT(t.`tmo_weiquan_time`,'%Y-%m-%d') AS 'showDate'
        </if>
        <if test="dateType == 2">
            DATE_FORMAT(t.`tmo_weiquan_time`,'%m') AS 'showDate'
        </if>
        <if test="dateType == 3">
            DATE_FORMAT(t.`tmo_weiquan_time`,'%Y') AS 'showDate'
        </if>
        <if test="dateType == 2">DATE_FORMAT(t.`tmo_weiquan_time`,'%m') AS 'showDate'</if>
        <if test="dateType == 3">DATE_FORMAT(t.`tmo_weiquan_time`,'%Y') AS 'showDate'</if>
    </sql>
    <sql id="Count_Select_DateType">
        <if test="startTime != null and startTime != '' ">
            AND DATE_FORMAT(t.`tmo_weiquan_time`,'%Y-%m-%d')<![CDATA[ >= ]]>'${startTime}'
@@ -162,38 +175,27 @@
        <if test="endTime != null and endTime != '' ">
            AND DATE_FORMAT(t.`tmo_weiquan_time`,'%Y-%m-%d') <![CDATA[ <= ]]>'${endTime}'
        </if>
        <if test="year != null and year != '' ">
            AND DATE_FORMAT(t.`tmo_weiquan_time`,'%Y') = '${year}'
        <if test="year != null and year != '' ">AND DATE_FORMAT(t.`tmo_weiquan_time`,'%Y') = '${year}'
        </if>
    </sql>
    <sql id="Count_Group_DateType">
        <if test="dateType == 1">
            GROUP BY DATE_FORMAT(t.`tmo_weiquan_time`,'%Y-%m-%d')
        </if>
        <if test="dateType == 2">
            GROUP BY DATE_FORMAT(t.`tmo_weiquan_time`,'%Y-%m')
        </if>
        <if test="dateType == 3">
            GROUP BY DATE_FORMAT(t.`tmo_weiquan_time`,'%Y')
        </if>
        <if test="dateType == 1">GROUP BY DATE_FORMAT(t.`tmo_weiquan_time`,'%Y-%m-%d')</if>
        <if test="dateType == 2">GROUP BY DATE_FORMAT(t.`tmo_weiquan_time`,'%Y-%m')</if>
        <if test="dateType == 3">GROUP BY DATE_FORMAT(t.`tmo_weiquan_time`,'%Y')</if>
    </sql>
    <select id="countWeiQaunOrderNumber" resultType="java.util.HashMap">
        SELECT IFNULL(COUNT(t.`tmo_id`),0) AS showValue,
        <include refid="Column_DateType" />
        FROM yeshi_ec_taobao_weiqaun_order t
        WHERE t.`tmo_createtime`IS NOT
        FROM yeshi_ec_taobao_weiqaun_order t WHERE t.`tmo_createtime`IS NOT
        NULL
        <include refid="Count_Select_DateType" />
        <include refid="Count_Group_DateType" />
        ORDER BY t.`tmo_weiquan_time`
    </select>
    <select id="countWeiQaunOrderMoney" resultType="java.util.HashMap">
        SELECT CAST(SUM(t.`tmo_fan_money`)AS DECIMAL(19,2)) AS showValue,
        <include refid="Column_DateType" />
        FROM yeshi_ec_taobao_weiqaun_order t
        WHERE t.`tmo_createtime` IS NOT
        FROM yeshi_ec_taobao_weiqaun_order t WHERE t.`tmo_createtime` IS NOT
        NULL
        <include refid="Count_Select_DateType" />
        <include refid="Count_Group_DateType" />
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanDrawBackServiceImpl.java
@@ -103,6 +103,21 @@
        userMoneyDebtService.addUserMoneyDebt(debt);
    }
    /**
     * 计算退款金额
     *
     * @param settlement
     * @param wqMoney
     * @param hongBaoMoney
     * @return
     */
    private BigDecimal computeDrawBackMoney(BigDecimal settlement, BigDecimal wqMoney, BigDecimal hongBaoMoney) {
        BigDecimal money = (hongBaoMoney.multiply(wqMoney)).divide(settlement, 2, BigDecimal.ROUND_UP);
        if (money.compareTo(hongBaoMoney) > 0)
            money = hongBaoMoney;
        return money;
    }
    @Transactional
    @Override
    public void doWeiQuanFanli(String orderId) throws TaoBaoWeiQuanException {
@@ -112,19 +127,6 @@
        List<TaoBaoWeiQuanOrder> list = taoBaoWeiQuanOrderService.getWeiQuanSuccessOrders(orderId);
        if (list == null || list.size() == 0)
            return;
        // 查询订单库
        List<TaoBaoOrder> orderList = taoBaoOrderMapper.selectTaoBaoOrderByOrderId(orderId);
        // 计算淘宝联盟返给平台的资金
        BigDecimal sumFee = new BigDecimal("0");
        for (TaoBaoOrder order : orderList)
            if (order.getOrderState().equalsIgnoreCase("订单结算")) {
                sumFee = sumFee.add(order.geteIncome());
                if (order.getSubsidy() != null)
                    sumFee = sumFee.add(order.getSubsidy());
            }
        if (new BigDecimal(0).compareTo(sumFee) == 0)
            throw new TaoBaoWeiQuanException(TaoBaoWeiQuanException.CODE_NEDD_UPDATE_ORDER, "需要更新订单");
        // 获取和该订单号有关联的用户
        // 获取主红包(同一个订单号的单只会对应同一个用户)
        List<CommonOrderVO> typeList = new ArrayList<>();
@@ -144,7 +146,16 @@
                commonOrderMapper.updateByPrimaryKeySelective(co);
                HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(vo.getId());
                mainHongBaoList.add(hongBaoOrder.getHongBaoV2());
                if (hongBaoOrder.getCommonOrder() != null
                        && !StringUtil.isNullOrEmpty(hongBaoOrder.getCommonOrder().getTradeId()))
                // 查询是否已经维权
                {
                    TaoBaoWeiQuanDrawBack drawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(
                            hongBaoOrder.getCommonOrder().getTradeId(),
                            hongBaoOrder.getHongBaoV2().getUserInfo().getId());
                    if (drawBack == null)// 添加还未扣款的子订单
                        mainHongBaoList.add(hongBaoOrder.getHongBaoV2());
                }
            }
        if (mainHongBaoList == null || mainHongBaoList.size() == 0)
            return;
@@ -166,7 +177,7 @@
        if (mainHongBaoList != null)
            for (HongBaoV2 hongBao : mainHongBaoList) {
                if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO)
                if (hongBao.getState() != HongBaoV2.STATE_YILINGQU)
                    continue;
                // 累计主红包的金额
                if (fanMoneyMap.get(hongBao.getUserInfo().getId()) == null) {
@@ -181,28 +192,48 @@
        while (its.hasNext()) {
            Long uid = its.next();
            BigDecimal userGetMoney = fanMoneyMap.get(uid);
            BigDecimal fanMoney = new BigDecimal("0");
            BigDecimal wqMoney = new BigDecimal("0");
            // 统计用户在这个单中需要扣除的资金
            TaoBaoWeiQuanDrawBack weiQuanDrawBack = null;
            List<TaoBaoWeiQuanDrawBack> newWeiQuanDrawBackList = new ArrayList<>();
            BigDecimal settleMent = new BigDecimal(0);
            for (TaoBaoWeiQuanOrder weiQuanOrder : list) {
                weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(),
                        uid);
                if (weiQuanDrawBack != null)
                    continue;
                // 计算结算金额
                TaoBaoOrder taoBaoOrder = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(weiQuanOrder.getOrderItemId());
                if (taoBaoOrder == null)
                    throw new TaoBaoWeiQuanException(101, "未找到子订单相关数据");
                if (taoBaoOrder.getSettlement() == null)
                    throw new TaoBaoWeiQuanException(102, "淘宝结算金额为空");
                settleMent = settleMent.add(taoBaoOrder.getSettlement());
                // 退款的资金
                fanMoney = fanMoney.add(weiQuanOrder.getFanMoney());
                wqMoney = wqMoney.add(weiQuanOrder.getMoney());
                weiQuanDrawBack = new TaoBaoWeiQuanDrawBack();
                weiQuanDrawBack.setCreateTime(new Date());
                // 暂时设为0
                weiQuanDrawBack.setDrawBackMoney(new BigDecimal(0));
                CommonOrder commonOrder = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO,
                        weiQuanOrder.getOrderItemId());
                HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
                // 计算退款的资金
                BigDecimal drawBack = null;
                if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null)
                    drawBack = computeDrawBackMoney(commonOrder.getSettlement(), weiQuanOrder.getMoney(),
                            hongBaoOrder.getHongBaoV2().getMoney());
                weiQuanDrawBack.setDrawBackMoney(drawBack);
                weiQuanDrawBack.setOrderId(weiQuanOrder.getOrderId());
                weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId());
                weiQuanDrawBack.setUser(new UserInfo(uid));
                newWeiQuanDrawBackList.add(weiQuanDrawBack);
            }
            if (fanMoney.compareTo(new BigDecimal("0")) <= 0)
            if (wqMoney.compareTo(new BigDecimal("0")) <= 0)
                continue;
            // 插入记录
@@ -211,30 +242,25 @@
            }
            // 退款金额
            BigDecimal drawBackMoney = MoneyBigDecimalUtil.div(userGetMoney.multiply(fanMoney), sumFee);
            if (drawBackMoney.compareTo(userGetMoney) > 0)
                drawBackMoney = userGetMoney;// 退款金额不能比获得的金额大
            BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, wqMoney, userGetMoney);
            // 计算资金是否充足
            UserInfo user = userInfoMapper.selectByPKey(uid);
            if (user != null && user.getMyHongBao().compareTo(drawBackMoney) < 0)// 资金不足
            {
                // 添加债务
                for (TaoBaoWeiQuanOrder weiQuanOrder : list) {
                    TaoBaoOrder taoBaoOrder = taoBaoOrderMapper
                            .selectTaoBaoOrderByTradeId(weiQuanOrder.getOrderItemId());
                for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList) {
                    TaoBaoOrder taoBaoOrder = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(drawBack.getOrderItemId());
                    if (taoBaoOrder != null) {
                        BigDecimal totalFee = taoBaoOrder.geteIncome();
                        if (taoBaoOrder.getSubsidy() != null)
                            totalFee = totalFee.add(taoBaoOrder.getSubsidy());
                        //
                        TaoBaoWeiQuanOrder weiQuanOrder = taoBaoWeiQuanOrderService
                                .selectByTradeId(drawBack.getOrderItemId());
                        CommonOrder co = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO,
                                weiQuanOrder.getOrderItemId());
                                drawBack.getOrderItemId());
                        if (co != null) {
                            HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(co.getId());
                            if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) {
                                BigDecimal drawback = MoneyBigDecimalUtil.div(
                                        hongBaoOrder.getHongBaoV2().getMoney().multiply(weiQuanOrder.getFanMoney()),
                                        totalFee);
                                BigDecimal drawback = computeDrawBackMoney(taoBaoOrder.getSettlement(),
                                        weiQuanOrder.getMoney(), hongBaoOrder.getHongBaoV2().getMoney());
                                try {
                                    addDebt(uid, hongBaoOrder.getHongBaoV2().getId(), drawback);
                                } catch (UserMoneyDebtException e) {
@@ -277,19 +303,8 @@
        List<TaoBaoWeiQuanOrder> list = taoBaoWeiQuanOrderService.getWeiQuanSuccessOrders(orderId);
        if (list == null || list.size() == 0)
            return;
        // 查询订单库
        List<TaoBaoOrder> orderList = taoBaoOrderMapper.selectTaoBaoOrderByOrderId(orderId);
        // 计算淘宝联盟返给平台的资金
        BigDecimal sumFee = new BigDecimal("0");
        for (TaoBaoOrder order : orderList)
            if (order.getOrderState().equalsIgnoreCase("订单结算")) {
                sumFee = sumFee.add(order.geteIncome());
                if (order.getSubsidy() != null)
                    sumFee = sumFee.add(order.getSubsidy());
            }
        // 获取和该订单号有关联的用户
        // 获取主红包(同一个订单号的单只会对应同一个用户)
        List<CommonOrderVO> typeList = new ArrayList<>();
        CommonOrderVO cv = new CommonOrderVO();
        cv.setSourceType(Constant.SOURCE_TYPE_TAOBAO);
@@ -305,9 +320,17 @@
                co.setState(CommonOrder.STATE_WQ);
                co.setUpdateTime(new Date());
                commonOrderMapper.updateByPrimaryKeySelective(co);
                HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(vo.getId());
                mainHongBaoList.add(hongBaoOrder.getHongBaoV2());
                if (hongBaoOrder.getCommonOrder() != null
                        && !StringUtil.isNullOrEmpty(hongBaoOrder.getCommonOrder().getTradeId()))
                // 查询是否已经维权
                {
                    TaoBaoWeiQuanDrawBack drawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(
                            hongBaoOrder.getCommonOrder().getTradeId(),
                            hongBaoOrder.getHongBaoV2().getUserInfo().getId());
                    if (drawBack == null)// 添加还未扣款的子订单
                        mainHongBaoList.add(hongBaoOrder.getHongBaoV2());
                }
            }
        if (mainHongBaoList == null || mainHongBaoList.size() == 0)
@@ -317,9 +340,9 @@
        Map<Long, BigDecimal> fanMoneyMap = new HashMap<>();
        if (mainHongBaoList != null)
            for (HongBaoV2 hongBao : mainHongBaoList) {
            for (HongBaoV2 hongBao : mainHongBaoList) {// 统计订单下的所有主红包
                hongBao = hongBaoV2Mapper.selectByPrimaryKey(hongBao.getId());
                if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO)
                if (hongBao.getState() != HongBaoV2.STATE_YILINGQU)
                    continue;
                // 只计入分享赚的红包
@@ -333,12 +356,13 @@
                }
            }
        // 计算每个用户的返利比例
        Iterator<Long> its = fanMoneyMap.keySet().iterator();
        // 查询和这个订单有关的用户(主订单)
        while (its.hasNext()) {
            Long uid = its.next();
            BigDecimal userGetMoney = fanMoneyMap.get(uid);
            BigDecimal fanMoney = new BigDecimal("0");
            BigDecimal wqMoney = new BigDecimal("0");
            BigDecimal settleMent = new BigDecimal("0");
            // 统计用户在这个单中需要扣除的资金
            TaoBaoWeiQuanDrawBack weiQuanDrawBack = null;
@@ -348,24 +372,44 @@
                        uid);
                if (weiQuanDrawBack != null)
                    continue;
                // 计算结算金额
                TaoBaoOrder taoBaoOrder = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(weiQuanOrder.getOrderItemId());
                if (taoBaoOrder == null)
                    throw new TaoBaoWeiQuanException(101, "未找到子订单相关数据");
                if (taoBaoOrder.getSettlement() == null)
                    throw new TaoBaoWeiQuanException(102, "淘宝结算金额为空");
                settleMent = settleMent.add(taoBaoOrder.getSettlement());
                // 退款的资金
                fanMoney = fanMoney.add(weiQuanOrder.getFanMoney());
                wqMoney = wqMoney.add(weiQuanOrder.getMoney());
                // 插入记录
                weiQuanDrawBack = new TaoBaoWeiQuanDrawBack();
                weiQuanDrawBack.setCreateTime(new Date());
                // TODO 暂时设为0
                weiQuanDrawBack.setDrawBackMoney(new BigDecimal(0));
                // 计算退款资金
                CommonOrder commonOrder = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO,
                        weiQuanOrder.getOrderItemId());
                HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
                // 计算退款的资金
                BigDecimal drawBack = null;
                if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null)
                    drawBack = computeDrawBackMoney(commonOrder.getSettlement(), weiQuanOrder.getMoney(),
                            hongBaoOrder.getHongBaoV2().getMoney());
                weiQuanDrawBack.setDrawBackMoney(drawBack);
                weiQuanDrawBack.setOrderId(weiQuanOrder.getOrderId());
                weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId());
                weiQuanDrawBack.setUser(new UserInfo(uid));
                newWeiQuanDrawBackList.add(weiQuanDrawBack);
            }
            if (fanMoney.compareTo(new BigDecimal("0")) <= 0)
            if (wqMoney.compareTo(new BigDecimal("0")) <= 0)
                continue;
            // 退款金额
            BigDecimal drawBackMoney = MoneyBigDecimalUtil.div(userGetMoney.multiply(fanMoney), sumFee);
            BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, wqMoney, userGetMoney);
            if (drawBackMoney.compareTo(userGetMoney) > 0)
                drawBackMoney = userGetMoney;
@@ -376,46 +420,22 @@
            if (user != null && user.getMyHongBao().compareTo(drawBackMoney) < 0)// 资金不足
            {
                // 添加债务
                for (TaoBaoWeiQuanOrder weiQuanOrder : list) {
                    TaoBaoOrder taoBaoOrder = taoBaoOrderMapper
                            .selectTaoBaoOrderByTradeId(weiQuanOrder.getOrderItemId());
                for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList) {
                    TaoBaoOrder taoBaoOrder = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(drawBack.getOrderItemId());
                    if (taoBaoOrder != null) {
                        BigDecimal totalFee = taoBaoOrder.geteIncome();
                        if (taoBaoOrder.getSubsidy() != null)
                            totalFee = totalFee.add(taoBaoOrder.getSubsidy());
                        //
                        TaoBaoWeiQuanOrder weiQuanOrder = taoBaoWeiQuanOrderService
                                .selectByTradeId(drawBack.getOrderItemId());
                        BigDecimal settleMentMoney = taoBaoOrder.getSettlement();
                        CommonOrder co = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO,
                                weiQuanOrder.getOrderItemId());
                        if (co != null) {
                            HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(co.getId());
                            BigDecimal drawback = MoneyBigDecimalUtil.div(
                                    hongBaoOrder.getHongBaoV2().getMoney().multiply(weiQuanOrder.getFanMoney()),
                                    totalFee);
                            BigDecimal drawback = computeDrawBackMoney(settleMentMoney, weiQuanOrder.getMoney(),
                                    hongBaoOrder.getHongBaoV2().getMoney());
                            try {
                                addDebt(uid, hongBaoOrder.getHongBaoV2().getId(), drawback);
                            } catch (UserMoneyDebtException e) {
                                throw new TaoBaoWeiQuanException(101, "资金借贷异常");
                            }
                            if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) {
                                List<HongBaoV2> hongBaoList = hongBaoV2Mapper
                                        .listChildrenById(hongBaoOrder.getHongBaoV2().getId());
                                for (int i = 0; i < hongBaoList.size(); i++) {
                                    if (hongBaoList.get(i).getUserInfo().getId().longValue() != uid) {
                                        hongBaoList.remove(i);
                                        i--;
                                    }
                                }
                                for (HongBaoV2 hb : hongBaoList) {
                                    drawback = MoneyBigDecimalUtil
                                            .div(hb.getMoney().multiply(weiQuanOrder.getFanMoney()), totalFee);
                                    try {
                                        addDebt(hb.getUserInfo().getId(), hb.getId(), drawback);
                                    } catch (UserMoneyDebtException e) {
                                        throw new TaoBaoWeiQuanException(101, "资金借贷异常");
                                    }
                                }
                            }
                        }
                    }
@@ -435,11 +455,8 @@
                }
            }
            userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail);
            userMoneyMsgNotificationService.shareOrderWeiQuan(uid, orderId, drawBackMoney,
                    userInfoMapper.selectByPrimaryKey(uid).getMyHongBao());
            userNotificationService.weiQuanTiCheng(uid, orderId, drawBackMoney);
        }
    }
@@ -455,14 +472,12 @@
        // 查询订单库
        for (TaoBaoWeiQuanOrder weiQuanOrder : list) {
            TaoBaoOrder taoBaoOrder = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(weiQuanOrder.getOrderItemId());
            BigDecimal fanMoney = weiQuanOrder.getFanMoney();
            BigDecimal wqMoney = weiQuanOrder.getMoney();
            if (taoBaoOrder == null)
                throw new TaoBaoWeiQuanException(1, "来源交易ID有误");
            BigDecimal sumFee = new BigDecimal("0");
            BigDecimal settleMent = new BigDecimal("0");
            if (taoBaoOrder.getOrderState().equalsIgnoreCase("订单结算")) {
                sumFee = sumFee.add(taoBaoOrder.geteIncome());
                if (taoBaoOrder.getSubsidy() != null)
                    sumFee = sumFee.add(taoBaoOrder.getSubsidy());
                settleMent = settleMent.add(taoBaoOrder.getSettlement());
            }
            // 查询下级子用户
@@ -487,9 +502,7 @@
                            .selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(), child.getUserInfo().getId());
                    if (weiQuanDrawBack != null)
                        continue;
                    BigDecimal drawBackMoney = MoneyBigDecimalUtil.div(child.getMoney().multiply(fanMoney), sumFee);
                    if (drawBackMoney.compareTo(child.getMoney()) > 0)
                        drawBackMoney = child.getMoney();
                    BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, wqMoney, child.getMoney());
                    weiQuanDrawBack = new TaoBaoWeiQuanDrawBack();
                    weiQuanDrawBack.setCreateTime(new Date());
                    weiQuanDrawBack.setDrawBackMoney(drawBackMoney);
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanOrderServiceImpl.java
@@ -90,4 +90,19 @@
        return taoBaoWeiQuanOrderMapper.listByState(state, (page - 1) * pageSize, pageSize);
    }
    @Override
    public long countByState(String state) {
        return taoBaoWeiQuanOrderMapper.countByState(state);
    }
    @Override
    public List<TaoBaoWeiQuanOrder> listByOrderId(String orderId) {
        return taoBaoWeiQuanOrderMapper.listByOrderId(orderId);
    }
    @Override
    public TaoBaoWeiQuanOrder selectByTradeId(String tradeId) {
        return taoBaoWeiQuanOrderMapper.selectByOrderItem(tradeId);
    }
}
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/TaoBaoWeiQuanOrderService.java
@@ -20,23 +20,46 @@
     * @return
     */
    public List<TaoBaoWeiQuanOrder> getWeiQuanSuccessOrders(String orderId);
    /**
     * 根据订单检索
     *
     * @param orderId
     * @return
     */
    public List<TaoBaoWeiQuanOrder> listByOrderId(String orderId);
    /**
     * 根据交易ID查询维权状态
     *
     * @param tradeId
     * @return
     */
    public TaoBaoWeiQuanOrder listByorderItemId(String tradeId);
    /**
     * 根据状态检索
     *
     * @param state
     * @param page
     * @param pageSize
     * @return
     */
    public List<TaoBaoWeiQuanOrder> listByState(String state,int page,int pageSize);
    public List<TaoBaoWeiQuanOrder> listByState(String state, int page, int pageSize);
    /**
     * 根据状态统计数据
     *
     * @param state
     * @return
     */
    public long countByState(String state);
    /**
     *
     * @param tradeId
     * @return
     */
    public TaoBaoWeiQuanOrder selectByTradeId(String tradeId);
}