yujian
2019-10-21 d085ca89e39b4cda025a9a53d3797fbe8b242ae7
订单补偿 +  奖励券使用倒计时
7个文件已修改
5个文件已添加
510 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserCouponController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/order/OrderSubsidyMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/order/OrderSubsidy.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/order/OrderSubsidyMapper.xml 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/CommonOrderServiceImpl.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderSubsidyServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderSubsidyService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserSystemCouponService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/vo/order/CommonOrderVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/src/main/java/org/yeshi/utils/DateUtil.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/src/main/java/org/yeshi/utils/entity/DateInfo.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserCouponController.java
@@ -294,7 +294,7 @@
        }
        
        try {
            UserSystemCouponService.useOrderCoupon(uid, cid, orderNo, goodsType);
            UserSystemCouponService.useOrderCoupon(uid, cid, orderNo, goodsType, acceptData);
            JSONObject data = commonOrderService.getRewardJumpInfo(orderNo, goodsType);
            out.print(JsonUtil.loadTrueResult(data));
        } catch (UserSystemCouponException e) {
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/order/OrderSubsidyMapper.java
New file
@@ -0,0 +1,18 @@
package com.yeshi.fanli.dao.mybatis.order;
import org.apache.ibatis.annotations.Param;
import com.yeshi.fanli.dao.BaseMapper;
import com.yeshi.fanli.entity.order.OrderSubsidy;
public interface OrderSubsidyMapper extends BaseMapper<OrderSubsidy> {
    /**
     * 查询用户补贴
     * @param uid
     * @param orderNo
     * @param Type
     * @return
     */
    OrderSubsidy getByOrderNoAndType(@Param("uid")Long uid, @Param("orderNo")String orderNo,@Param("type") Integer type);
}
fanli/src/main/java/com/yeshi/fanli/entity/order/OrderSubsidy.java
New file
@@ -0,0 +1,108 @@
package com.yeshi.fanli.entity.order;
import java.math.BigDecimal;
import java.util.Date;
import org.yeshi.utils.mybatis.Column;
import org.yeshi.utils.mybatis.Table;
/**
 * 订单补贴
 *
 * @author Administrator
 *
 */
@Table("yeshi_ec_order_subsidy")
public class OrderSubsidy {
    //未知
    public static final int STATE_UNKNOWN = 0;
    // 可补贴
    public static final int STATE_VALID = 1;
    // 不可补贴
    public static final int STATE_INVALID = 2;
    // 已补贴成功
    public static final int STATE_SUBSIDIZED = 3;
    @Column(name = "os_id")
    private Long id;
    @Column(name = "os_uid")
    private Long uid;
    @Column(name = "os_money")
    private BigDecimal money;
    @Column(name = "os_order_no")
    private String orderNo;
    @Column(name = "os_source_type")
    private Integer sourceType;
    @Column(name = "os_state")
    private Integer state;
    @Column(name = "os_create_time")
    private Date createTime;
    @Column(name = "os_update_time")
    private Date updateTime;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public Long getUid() {
        return uid;
    }
    public void setUid(Long uid) {
        this.uid = uid;
    }
    public BigDecimal getMoney() {
        return money;
    }
    public void setMoney(BigDecimal money) {
        this.money = money;
    }
    public String getOrderNo() {
        return orderNo;
    }
    public void setOrderNo(String orderNo) {
        this.orderNo = orderNo;
    }
    public Integer getSourceType() {
        return sourceType;
    }
    public void setSourceType(Integer sourceType) {
        this.sourceType = sourceType;
    }
    public Integer getState() {
        return state;
    }
    public void setState(Integer state) {
        this.state = state;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}
fanli/src/main/java/com/yeshi/fanli/mapping/order/OrderSubsidyMapper.xml
New file
@@ -0,0 +1,63 @@
<?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.OrderSubsidyMapper">
  <resultMap id="BaseResultMap" type="com.yeshi.fanli.entity.order.OrderSubsidy">
    <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"/>
  </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</sql>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long">select
    <include refid="Base_Column_List"/>from yeshi_ec_order_subsidy where os_id = #{id,jdbcType=BIGINT}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from yeshi_ec_order_subsidy where os_id = #{id,jdbcType=BIGINT}</delete>
  <insert id="insert" parameterType="com.yeshi.fanli.entity.order.OrderSubsidy" useGeneratedKeys="true" keyProperty="id">insert into yeshi_ec_order_subsidy (os_id,os_uid,os_money,os_order_no,os_source_type,os_state,os_create_time,os_update_time) 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})</insert>
  <insert id="insertSelective" parameterType="com.yeshi.fanli.entity.order.OrderSubsidy" useGeneratedKeys="true" keyProperty="id">insert into yeshi_ec_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>
    </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>
    </trim>
  </insert>
  <update id="updateByPrimaryKey" parameterType="com.yeshi.fanli.entity.order.OrderSubsidy">update yeshi_ec_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} where os_id = #{id,jdbcType=BIGINT}</update>
  <update id="updateByPrimaryKeySelective" parameterType="com.yeshi.fanli.entity.order.OrderSubsidy">update yeshi_ec_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>
    </set> where os_id = #{id,jdbcType=BIGINT}
  </update>
  <select id="getByOrderNoAndType" resultMap="BaseResultMap">
      SELECT * FROM yeshi_ec_order_subsidy
     WHERE os_uid = #{uid} AND os_order_no = #{orderNo}  AND os_source_type = #{type}
     LIMIT 1
  </select>
</mapper>
fanli/src/main/java/com/yeshi/fanli/service/impl/order/CommonOrderServiceImpl.java
@@ -14,6 +14,8 @@
import org.apache.commons.beanutils.PropertyUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.yeshi.utils.DateUtil;
import org.yeshi.utils.entity.DateInfo;
import org.yeshi.utils.taobao.TbImgUtil;
import com.yeshi.fanli.dao.mybatis.order.CommonOrderGoodsMapper;
@@ -34,6 +36,7 @@
import com.yeshi.fanli.entity.order.CommonOrderGoods;
import com.yeshi.fanli.entity.order.CommonOrderTradeIdMap;
import com.yeshi.fanli.entity.order.HongBaoOrder;
import com.yeshi.fanli.entity.order.OrderSubsidy;
import com.yeshi.fanli.entity.pdd.PDDOrder;
import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
@@ -49,6 +52,7 @@
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.OrderSubsidyService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponRecordService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
import com.yeshi.fanli.util.Constant;
@@ -110,6 +114,10 @@
    @Resource
    private HongBaoOrderService hongBaoOrderService;
    @Resource
    private OrderSubsidyService orderSubsidyService;
    // 奖励订单图片
    public final static String PIC_REWARD = "http://img.flqapp.com/resource/order/order_state_reward.png";
@@ -489,14 +497,42 @@
                order.setHongBaoTypePic(CommonOrder.TYPE_SHARE);
                signList.add(CommonOrder.TYPE_SHARE);
            } else if (HongBaoV2.TYPE_YAOQING == hongBaoType || HongBaoV2.TYPE_YIJI == hongBaoType
                    || HongBaoV2.TYPE_ERJI == hongBaoType || HongBaoV2.TYPE_SHARE_YIJI == hongBaoType
                    || HongBaoV2.TYPE_SHARE_ERJI == hongBaoType) {
                // 邀请
            } else if (HongBaoV2.TYPE_SHARE_YIJI == hongBaoType || HongBaoV2.TYPE_SHARE_ERJI == hongBaoType) {
                // 下级的分享订单:  显示邀请
                hongbaoInfo = "奖金";
                order.setOrderOrigin("3");
                order.setHongBaoTypePic(CommonOrder.TYPE_INVITE);
                signList.add(CommonOrder.TYPE_INVITE);
            } else if (HongBaoV2.TYPE_YAOQING == hongBaoType || HongBaoV2.TYPE_YIJI == hongBaoType
                    || HongBaoV2.TYPE_ERJI == hongBaoType) {
                // 邀请订单
                hongbaoInfo = "奖金";
                order.setOrderOrigin("3");
                order.setHongBaoTypePic(CommonOrder.TYPE_INVITE);
                signList.add(CommonOrder.TYPE_INVITE);
                // 版本区分:2-0-2
                if (VersionUtil.greaterThan_2_0_2(acceptData.getPlatform(), acceptData.getVersion())) {
                    OrderSubsidy orderSubsidy = orderSubsidyService.getByOrderNoAndType(uid, order.getOrderNo(), sourceType2);
                    if (orderSubsidy != null) {
                        ClientTextStyleVO subsidyInfo = new ClientTextStyleVO();
                        if (orderSubsidy.getState() == OrderSubsidy.STATE_SUBSIDIZED) {
                            subsidyInfo.setColor("#E5005C");
                            subsidyInfo.setContent("已补贴¥" + orderSubsidy.getMoney());
                        } else {
                            subsidyInfo.setColor("#888888");
                            subsidyInfo.setContent("补贴¥" + orderSubsidy.getMoney());
                            // 解释信息(问号)
                            List<String> subsidyList = new ArrayList<String>();
                            subsidyList.add("额外补贴能否获得由系统算法自动判断,人为无法干涉;");
                            subsidyList.add("额外补贴到账时间以及金额请以实际到账为准;");
                            subsidyList.add("额外补贴产生后将会在消息-资金消息中提醒你。");
                            order.setSubsidyList(subsidyList);
                        }
                        order.setSubsidy(subsidyInfo);
                    }
                }
            }
            String hongBaoDate = null;
@@ -676,29 +712,104 @@
        }
        if (rewardOrder) {
            try {
                boolean newEdition = false;
                String num = null;
                String unit = null;
                boolean canUse = false;
                // 版本区分:2.0.2
                if (VersionUtil.greaterThan_2_0_2(acceptData.getPlatform(), acceptData.getVersion())) {
                    Date thirdCreateTime = order.getThirdCreateTime();
                    if (thirdCreateTime != null) {
                        long downOrderTime = thirdCreateTime.getTime();
                        long limitDate = Long.parseLong("1573315200000"); // TODO 日期待确定2019-11-10
                        if (downOrderTime > limitDate) {
                            newEdition = true;
                            Date endDay = DateUtil.plusDayDate(4, thirdCreateTime);
                            long currentTime = java.lang.System.currentTimeMillis();
                            if (endDay.getTime() > currentTime) {
                                DateInfo dateInfo = DateUtil.dateDiff3(currentTime, endDay.getTime());
                                if (dateInfo != null) {
                                    if (dateInfo.getDay() > 0) {
                                        canUse = true;
                                        unit = "天";
                                        num = dateInfo.getDay().toString();
                                    }
                                    if (!canUse && dateInfo.getHour() > 0) {
                                        canUse = true;
                                        unit = "小时";
                                        num = dateInfo.getHour().toString();
                                    }
                                    if (!canUse && dateInfo.getMinute() > 0) {
                                        canUse = true;
                                        unit = "分";
                                        num = dateInfo.getMinute().toString();
                                    }
                                    if (!canUse && dateInfo.getSecond() > 0) {
                                        canUse = true;
                                        unit = "秒";
                                        num = dateInfo.getSecond().toString();
                                    }
                                }
                            }
                        }
                    }
                }
                if (newEdition && !canUse) {
                    // 新版不可使用
                } else {
                    Map<String, Object> rewardMap = new HashMap<String, Object>();
            ClientTextStyleVO rewardStyleVO = new ClientTextStyleVO();
            // 奖励券进度详情
            rewardStyleVO.setContent("返利奖励 >");
            rewardStyleVO.setColor("#E5005C");
            rewardStyleVO.setBottomColor("#FFDCEA");
                    if (!newEdition) {
                        rewardStyleVO.setContent("返利奖励 >");
                    } else if (canUse) {
                        rewardStyleVO.setContent("返利奖励 ");
                        ClientTextStyleVO txt1 = new ClientTextStyleVO();
                        txt1.setContent("剩");
                        txt1.setColor("#666666");
                        txt1.setBottomColor("#FFDCEA");
                        ClientTextStyleVO txt2 = new ClientTextStyleVO();
                        txt2.setContent(num);
                        txt2.setColor("#E5005C");
                        txt2.setBottomColor("#FFDCEA");
                        ClientTextStyleVO txt3 = new ClientTextStyleVO();
                        txt3.setContent(unit + "关闭 >");
                        txt3.setColor("#666666");
                        txt3.setBottomColor("#FFDCEA");
                        List<ClientTextStyleVO> ticking = new ArrayList<ClientTextStyleVO>();
                        ticking.add(txt1);
                        ticking.add(txt2);
                        ticking.add(txt3);
                        rewardMap.put("ticking", ticking);
                    }
                    rewardMap.put("text", rewardStyleVO);
            Map<String, Object> jumpLink = new HashMap<String, Object>();
            jumpLink.put("orderNo", order.getOrderNo());
            if (VersionUtil.greaterThan_1_6_0(acceptData.getPlatform(), acceptData.getVersion())) {
                jumpLink.put("goodsType", order.getSourceType()+"");
            }
            Map<String, Object> jump = new HashMap<String, Object>();
            jump.put("type", type);
            jump.put("params", jumpLink);
            jump.put("jumpDetail", jumpDetailV2Service.getByTypeCache("rewardCouponDetail"));
            Map<String, Object> rewardMap = new HashMap<String, Object>();
            rewardMap.put("text", rewardStyleVO);
            rewardMap.put("jump", jump);
            order.setRewardDetail(rewardMap);
        }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        if (freeOrder) {
            ClientTextStyleVO rewardStyleVO = new ClientTextStyleVO();
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderSubsidyServiceImpl.java
New file
@@ -0,0 +1,22 @@
package com.yeshi.fanli.service.impl.order;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.yeshi.fanli.dao.mybatis.order.OrderSubsidyMapper;
import com.yeshi.fanli.entity.order.OrderSubsidy;
import com.yeshi.fanli.service.inter.order.OrderSubsidyService;
@Service
public class OrderSubsidyServiceImpl implements OrderSubsidyService {
    @Resource
    private OrderSubsidyMapper orderSubsidyMapper;
    @Override
    public OrderSubsidy getByOrderNoAndType(Long uid, String orderNo, Integer type) {
        return orderSubsidyMapper.getByOrderNoAndType(uid, orderNo, type);
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
@@ -16,11 +16,12 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.yeshi.utils.DateUtil;
import org.yeshi.utils.entity.DateInfo;
import com.yeshi.fanli.dao.mybatis.user.UserSystemCouponMapper;
import com.yeshi.fanli.dto.msg.MsgOtherCouponActivateDTO;
import com.yeshi.fanli.dto.msg.MsgOtherGiveContentDTO;
import com.yeshi.fanli.dto.msg.MsgOtherSystemGiveDTO;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.msg.MsgOtherDetail.MsgTypeOtherTypeEnum;
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.bus.user.Order;
@@ -66,6 +67,7 @@
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TokenUtil;
import com.yeshi.fanli.util.VersionUtil;
import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
import com.yeshi.fanli.util.factory.msg.MsgOtherSystemGiveDTOFactory;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
@@ -764,55 +766,79 @@
    @Transactional
    @Override
    public void useOrderCoupon(Long uid, Long id, String orderNo, Integer sourceType)
    public void useOrderCoupon(Long uid, Long id, String orderNo, Integer sourceType, AcceptData acceptData)
            throws UserSystemCouponException, Exception {
        if (id == null) {
        if (id == null)
            throw new UserSystemCouponException(1, "券id不存在");
        }
        if (sourceType == null) {
        if (sourceType == null)
            sourceType = Constant.SOURCE_TYPE_TAOBAO;
        }
        // 用户券
        UserSystemCoupon userSystemCoupon = selectByPrimaryKey(id);
        if (userSystemCoupon == null) {
        if (userSystemCoupon == null)
            throw new UserSystemCouponException(1, "券信息不存在");
        }
        if (userSystemCoupon.getUid().longValue() != uid) {
        if (userSystemCoupon.getUid().longValue() != uid)
            throw new UserSystemCouponException(1, "不属于该用户的券");
        }
        Integer state = userSystemCoupon.getState();
        Integer stateActivated = userSystemCoupon.getStateActivated();
        if (UserSystemCoupon.STATE_CAN_USE != state || 1 != stateActivated) {
        if (UserSystemCoupon.STATE_CAN_USE != state || 1 != stateActivated)
            throw new UserSystemCouponException(1, "该券不能被使用");
        }
        // 系统券信息
        SystemCoupon systemCoupon = userSystemCoupon.getSystemCoupon();
        if (systemCoupon != null && systemCoupon.getId() != null) {
            systemCoupon = systemCouponService.selectByPrimaryKey(systemCoupon.getId());
            if (systemCoupon == null) {
            if (systemCoupon == null)
                throw new UserSystemCouponException(1, "券已不存在");
            }
        }
        if (systemCoupon.getType() != CouponTypeEnum.rebatePercentCoupon) {
        if (systemCoupon.getType() != CouponTypeEnum.rebatePercentCoupon)
            throw new UserSystemCouponException(1, "券类型不匹配");
        }
        if (orderNo == null || orderNo.trim().length() == 0) {
        if (orderNo == null || orderNo.trim().length() == 0)
            throw new UserSystemCouponException(1, "订单号不存在");
        }
        // 订单
        CommonOrderVO orderVO = commonOrderService.getCommonOrderByOrderNo(uid, orderNo, CommonOrder.STATE_JS,
                sourceType);
        if (orderVO == null) {
        if (orderVO == null)
            throw new UserSystemCouponException(1, "订单信息获取失败");
        // 版本区分:2.0.2
        if (VersionUtil.greaterThan_2_0_2(acceptData.getPlatform(), acceptData.getVersion())) {
            Date thirdCreateTime = orderVO.getThirdCreateTime();
            if (thirdCreateTime != null) {
                long downOrderTime = thirdCreateTime.getTime();
                long limitDate = Long.parseLong("1573315200000"); // TODO 日期待确定2019-11-10
                if (downOrderTime > limitDate) {
                    Date endDay = DateUtil.plusDayDate(4, thirdCreateTime);
                    long currentTime = java.lang.System.currentTimeMillis();
                    if (endDay.getTime() > currentTime) {
                        boolean valid = false;
                        DateInfo dateInfo = DateUtil.dateDiff3(currentTime, endDay.getTime());
                        if (dateInfo != null) {
                            if (dateInfo.getDay() > 0)
                                valid = true;
                            if (!valid && dateInfo.getHour() > 0)
                                valid = true;
                            if (!valid && dateInfo.getMinute() > 0)
                                valid = true;
                            if (!valid && dateInfo.getSecond() >= 0)
                                valid = true;
                        }
                        if (!valid)
                            throw new UserSystemCouponException(1, "该订单已不能使用使用奖励券,详情请咨询客服");
                    }
                }
            }
        }
        BigDecimal hongBao = orderVO.getHongBao();
fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderSubsidyService.java
New file
@@ -0,0 +1,16 @@
package com.yeshi.fanli.service.inter.order;
import com.yeshi.fanli.entity.order.OrderSubsidy;
public interface OrderSubsidyService {
    /**
     * 查询补贴
     * @param uid
     * @param orderNo
     * @param type
     * @return
     */
    public OrderSubsidy getByOrderNoAndType(Long uid, String orderNo, Integer type);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserSystemCouponService.java
@@ -3,6 +3,7 @@
import java.math.BigDecimal;
import java.util.List;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.UserSystemCoupon;
import com.yeshi.fanli.entity.bus.user.UserSystemCouponGiveRecord;
import com.yeshi.fanli.entity.system.SystemCoupon;
@@ -91,7 +92,7 @@
     * @throws UserSystemCouponException
     * @throws Exception
     */
    public void useOrderCoupon(Long uid, Long id, String orderNo, Integer sourceType) throws UserSystemCouponException, Exception;
    public void useOrderCoupon(Long uid, Long id, String orderNo, Integer sourceType, AcceptData acceptData) throws UserSystemCouponException, Exception;
    /**
     * 根据订单号获取奖励券使用进度
fanli/src/main/java/com/yeshi/fanli/vo/order/CommonOrderVO.java
@@ -9,6 +9,7 @@
import com.google.gson.annotations.Expose;
import com.yeshi.fanli.entity.order.CommonOrder;
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
/**
 * 订单-简版
@@ -88,6 +89,12 @@
    @Expose
    private WeiQuanInfo weiQuanInfo;
   
    // 补贴信息
    @Expose
    private ClientTextStyleVO subsidy;
    // 补贴解释信息
    @Expose
    private List<String> subsidyList;
    
    
    // 直接收益人-ID
@@ -390,4 +397,20 @@
    public void setWeiQuanInfo(WeiQuanInfo weiQuanInfo) {
        this.weiQuanInfo = weiQuanInfo;
    }
    public ClientTextStyleVO getSubsidy() {
        return subsidy;
    }
    public void setSubsidy(ClientTextStyleVO subsidy) {
        this.subsidy = subsidy;
    }
    public List<String> getSubsidyList() {
        return subsidyList;
    }
    public void setSubsidyList(List<String> subsidyList) {
        this.subsidyList = subsidyList;
    }
}
utils/src/main/java/org/yeshi/utils/DateUtil.java
@@ -7,6 +7,8 @@
import java.util.Date;
import java.util.List;
import org.yeshi.utils.entity.DateInfo;
public class DateUtil {
    public static String dateDiff(String startTime, String endTime) {
@@ -63,6 +65,28 @@
        return datatime;
    }
    public static DateInfo dateDiff3(long startTime, long endTime) throws Exception {
        long nm = 1000 * 60;// 一分钟的毫秒数
        long nh = 1000 * 60 * 60;// 一小时的毫秒数
        long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
        // 获得两个时间的毫秒时间差异
        long diff = endTime - startTime;
        int day = (int) (diff / nd);// 计算差多少天
        long hour = diff % nd / nh;// 计算差多少小时
        long minute = diff % nd % nh / nm;// 计算差多少分钟
        long second =(diff/1000-day*24*60*60-hour*60*60-minute*60); // 计算差多少秒
        DateInfo dateInfo = new DateInfo();
        dateInfo.setDay(day);
        dateInfo.setHour(hour);
        dateInfo.setMinute(minute);
        dateInfo.setSecond(second);
        return dateInfo;
    }
    /**
     * 通过时间秒毫秒数判断两个时间的间隔
     * 
utils/src/main/java/org/yeshi/utils/entity/DateInfo.java
@@ -29,6 +29,13 @@
    private String agenary_hour;
    
    
    // 小时
    private Long hour;
    // 分钟
    private Long minute;
    // 秒数
    private Long second;
    public Integer getYear() {
        return year;
@@ -118,4 +125,27 @@
        this.agenary_hour = agenary_hour;
    }
    public Long getHour() {
        return hour;
    }
    public void setHour(Long hour) {
        this.hour = hour;
    }
    public Long getMinute() {
        return minute;
    }
    public void setMinute(Long minute) {
        this.minute = minute;
    }
    public Long getSecond() {
        return second;
    }
    public void setSecond(Long second) {
        this.second = second;
    }
}