yujian
2019-02-27 dcf7564dc5061fc88be3a9a4874305389d794155
券信息相关优化
13个文件已修改
262 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/order/OrderHongBaoMapMapper.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/user/UserSystemCouponMapper.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/user/UserSystemCouponRecordMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/order/OrderHongBaoMapMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/user/UserSystemCouponMapper.xml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/user/UserSystemCouponRecordMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/CommonOrderServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMapServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponRecordServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderHongBaoMapService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserSystemCouponRecordService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserSystemCouponService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/order/OrderHongBaoMapMapper.java
@@ -1,7 +1,6 @@
package com.yeshi.fanli.dao.mybatis.order;
import java.math.BigDecimal;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
@@ -10,5 +9,11 @@
public interface OrderHongBaoMapMapper extends BaseMapper<OrderHongBaoMap>{
    Map<String,BigDecimal> getCouponHongbaoByOrderNo(@Param("orderNo")String orderNo, @Param("uid")Long uid);
    /**
     * 获取奖励金额
     * @param orderNo
     * @param uid
     * @return
     */
    BigDecimal getCouponHongbaoByOrderNo(@Param("orderNo")String orderNo, @Param("uid")Long uid);
}
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/user/UserSystemCouponMapper.java
@@ -10,11 +10,6 @@
public interface UserSystemCouponMapper extends BaseMapper<UserSystemCoupon> {
    
    /**
     * 激活券
     * @param couponId
     */
    void activateCouponByType(@Param("uid") Long uid, @Param("couponId") Long couponId);
    
    List<UserSystemCoupon> getUserCouponList(@Param("start") long start, @Param("count") int count, 
            @Param("uid") Long uid);
@@ -56,5 +51,10 @@
     */
    List<UserSystemCoupon> getCouponByState(@Param("uid") Long uid, @Param("state") String state);
    
    /**
     * 查询没有激活的券
     * @param couponId
     */
    List<UserSystemCoupon> getCouponByTypeAndNotActivated(@Param("uid") Long uid, @Param("couponId") Long couponId);
    
}
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/user/UserSystemCouponRecordMapper.java
@@ -16,6 +16,15 @@
     * @param listCouponId
     * @return
     */
    List<UserSystemCouponRecord> getRecordByState(@Param("uid") Long uid, @Param("state") Integer state);
    /**
     * 根据单个订单查询
     * @param uid
     * @param activated
     * @param listCouponId
     * @return
     */
    UserSystemCouponRecord getRecordByOrderNo(@Param("orderNo") String orderNo, @Param("state") Integer state);
    
    
fanli/src/main/java/com/yeshi/fanli/mapping/order/OrderHongBaoMapMapper.xml
@@ -66,12 +66,12 @@
    </update>
    
    
    <select id="getCouponHongbaoByOrderNo" resultType="java.util.Map">
        SELECT  COALESCE(SUM(IF(hb.hb_type=1,hb.`hb_money`,0)),0)AS totalMoney,
                COALESCE(SUM(IF(hb.hb_type=10,hb.`hb_money`,0)),0)AS couponMoney
    <select id="getCouponHongbaoByOrderNo" resultType="java.math.BigDecimal">
        SELECT  COALESCE(SUM(hb.`hb_money`),0)AS couponMoney
        FROM `yeshi_ec_order_hongbaov2_map` hm
        LEFT JOIN `yeshi_ec_order` o ON o.`id` = hm.`ohm_order_id`
        LEFT JOIN (SELECT * FROM yeshi_ec_hongbao_v2 v2  WHERE v2.`hb_uid`= #{uid} )hb ON hb.hb_id = hm.`ohm_hongbao_id`
        LEFT JOIN (SELECT v2.`hb_money`,v2.`hb_id` FROM yeshi_ec_hongbao_v2 v2
            WHERE v2.`hb_uid`= #{uid} AND v2.`hb_type` = 10 )hb ON hb.hb_id = hm.`ohm_hongbao_id`
        WHERE hb.hb_id IS NOT NULL AND o.`orderid` = #{orderNo}
    </select>
    
fanli/src/main/java/com/yeshi/fanli/mapping/user/UserSystemCouponMapper.xml
@@ -90,12 +90,6 @@
    </set> where usc_id = #{id,jdbcType=BIGINT}
  </update>
  
  <update id="activateCouponByType">
    UPDATE yeshi_ec_user_system_coupon SET usc_state_activate = 1
    WHERE usc_uid = #{uid} AND usc_coupon_id = #{couponId}
        AND (usc_state_activate = 0 OR usc_state_activate is null)
  </update>
  <select id="getUserCouponList" resultMap="BaseResultMap">
    SELECT * FROM `yeshi_ec_user_system_coupon` uc
    WHERE uc.`usc_uid`= #{uid}
@@ -127,7 +121,7 @@
        AND uc.usc_coupon_id in
        <foreach collection="list" item="item" open="(" close=")"
            separator=",">#{item}</foreach>
    ORDER BY uc.usc_state_activate, uc.`usc_create_time`
    ORDER BY uc.usc_state_activate desc, uc.`usc_create_time`
  </select>
  
  <select id="getCounponNowInvalid" resultMap="BaseResultMap">
@@ -144,4 +138,10 @@
        </if>
  </select>
  
  <select id="getCouponByTypeAndNotActivated" resultMap="BaseResultMap">
    SELECT * FROM yeshi_ec_user_system_coupon
    WHERE usc_uid = #{uid} AND usc_coupon_id = #{couponId}
        AND (usc_state_activate = 0 OR usc_state_activate is null)
  </select>
</mapper>
fanli/src/main/java/com/yeshi/fanli/mapping/user/UserSystemCouponRecordMapper.xml
@@ -60,6 +60,13 @@
    </set> where ucr_id = #{id,jdbcType=BIGINT}
  </update>
  
  <select id="getRecordByState" resultMap="BaseResultMap">
      SELECT * FROM  `yeshi_ec_user_system_coupon_record` cd
      LEFT JOIN `yeshi_ec_user_system_coupon` uc ON uc.`usc_id` = cd.`ucr_user_coupon_id`
    WHERE uc.`usc_uid` = #{uid} AND cd.`ucr_state` = #{state}
  </select>
  <select id="getRecordByOrderNo" resultMap="BaseResultMap">
      SELECT * FROM  `yeshi_ec_user_system_coupon_record` cd 
      LEFT JOIN `yeshi_ec_user_system_coupon` uc ON uc.`usc_id` = cd.`ucr_user_coupon_id`
fanli/src/main/java/com/yeshi/fanli/service/impl/order/CommonOrderServiceImpl.java
@@ -488,8 +488,9 @@
            if (rewardSuccess) {
                // 奖励成功
                rewardOrder = true; 
            } else if(hasRewardCoupon && !freeOrder && HongBaoV2.STATE_YILINGQU == hongBaoState) {
                // 有可用的奖励券 、非免单订单 、且已到账的
            } else if(hasRewardCoupon && !freeOrder && HongBaoV2.TYPE_ZIGOU == hongBaoType &&
                    HongBaoV2.STATE_YILINGQU == hongBaoState) {
                // 有可用的奖励券 、非免单订单 、且已到账的 、返利订单
                type = 2;
                rewardOrder = true; 
            }
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMapServiceImpl.java
@@ -2,7 +2,6 @@
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;
import javax.annotation.Resource;
@@ -35,7 +34,7 @@
    
    
    @Override
    public Map<String,BigDecimal> getCouponHongbaoByOrderNo(String orderNo, Long uid) {
    public BigDecimal getCouponHongbaoByOrderNo(String orderNo, Long uid) {
        return  orderHongBaoMapMapper.getCouponHongbaoByOrderNo(orderNo, uid);
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponRecordServiceImpl.java
@@ -36,6 +36,11 @@
    public int updateByPrimaryKey(UserSystemCouponRecord record) {
        return userSystemCouponRecordMapper.updateByPrimaryKey(record);
    }
    @Override
    public List<UserSystemCouponRecord>  getRecordByState(Long uid, Integer state) {
        return userSystemCouponRecordMapper.getRecordByState(uid, state);
    }
    @Override
    public UserSystemCouponRecord  getRecordByOrderNo(String orderNo, Integer state) {
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
@@ -218,7 +218,7 @@
        // 更新过期券
        updateCounponInvalid(uid);
        // 退回券
        sendBackCoupon(uid);
        sendBackTimeOutCoupon(uid);
        
        List<UserSystemCouponVO> listVO = userSystemCouponMapper.getUserCouponVOList(start, count, uid);
        if (listVO == null || listVO.size() == 0) {
@@ -465,7 +465,7 @@
        // 更新过期券
        updateCounponInvalid(uid);
        // 退回券
        sendBackCoupon(uid);
        sendBackTimeOutCoupon(uid);
                
        // 订单相关的券
        List<SystemCoupon> couponList = systemCouponService.getOrderCouponList();
@@ -485,7 +485,7 @@
        // 更新过期券
        updateCounponInvalid(uid);
        // 退回券
        sendBackCoupon(uid);
        sendBackTimeOutCoupon(uid);
        
        // 商品相关的券
        List<SystemCoupon> couponList = systemCouponService.getGoodsCouponList();
@@ -718,17 +718,20 @@
        }
        
        // 获取奖励金额
        Map<String, BigDecimal> map = orderHongBaoMapService.getCouponHongbaoByOrderNo(orderNo, uid);
        BigDecimal couponMoney = orderHongBaoMapService.getCouponHongbaoByOrderNo(orderNo, uid);
        UserSystemCouponRecordVO userRecordVO = new UserSystemCouponRecordVO();
        userRecordVO.setCouponMoneyState("已到账");
        userRecordVO.setCommonOrder(commonOrderVO);
        userRecordVO.setCouponName("奖励金: ¥" + map.get("couponMoney").setScale(2, BigDecimal.ROUND_DOWN));
        userRecordVO.setCouponName("奖励金: ¥" + couponMoney.setScale(2, BigDecimal.ROUND_DOWN));
        // 比例
        BigDecimal percent = baseCoupon.getPercent();
        BigDecimal hongBao = map.get("totalMoney").setScale(2, BigDecimal.ROUND_DOWN);
        userRecordVO.setCouponEffect("返利¥" + hongBao + "已返" + percent + "%");
        BigDecimal hongBao = commonOrderVO.getHongBao();
        if (hongBao == null) {
            hongBao = new BigDecimal(0);
        }
        userRecordVO.setCouponEffect("返利¥" + hongBao.setScale(2, BigDecimal.ROUND_DOWN) + "已返" + percent + "%");
        // 跳转福利中心
        JumpDetailV2 welfareCore = jumpDetailV2Service.getByTypeCache("welfareCore");
@@ -963,8 +966,32 @@
        if (systemCoupon == null) {
            return;
        }
        // 激活福利免单券
        userSystemCouponMapper.activateCouponByType(uid, systemCoupon.getId());
        // 待活福利免单券
        List<UserSystemCoupon> list = userSystemCouponMapper.getCouponByTypeAndNotActivated(uid, systemCoupon.getId());
        if (list == null || list.size() == 0) {
            return;
        }
        for (UserSystemCoupon userSystemCoupon: list) {
            // 激活
            userSystemCoupon.setStateActivated(1);
            userSystemCoupon.setUpdateTime(new Date());
            userSystemCouponMapper.updateByPrimaryKeySelective(userSystemCoupon);
            // 消息推送
            try {
                userOtherMsgNotificationService.welfareCouponGet(userSystemCoupon);
            } catch(Exception e) {
                try {
                    LogHelper.errorDetailInfo(e);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
        }
    }
    
@@ -1011,7 +1038,7 @@
    }
    
    @Override
    public void  sendBackCoupon(Long uid) {
    public void  sendBackTimeOutCoupon(Long uid) {
        // 超过120秒 未被匹配的券
        List<UserSystemCouponRecord> list = userSystemCouponRecordService.getCouponByUsingTimeOut(uid, 120);
        if (list == null || list.size() == 0) {
@@ -1025,9 +1052,6 @@
            userSystemCouponRecordService.updateByPrimaryKeySelective(couponRecord);
            
            UserSystemCoupon userSystemCoupon = couponRecord.getUserSystemCoupon();
            // 状态初始化
            userSystemCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
            userSystemCoupon.setUseTime(null);
            
            int expiryDay = 15;
            
@@ -1046,16 +1070,128 @@
            } catch (ParseException e) {
                e.printStackTrace();
            }
            // 状态初始化
            userSystemCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
            userSystemCoupon.setUseTime(null);
            // 有效期时间重新定义
            userSystemCoupon.setStartTime(new Date());
            userSystemCoupon.setEndTime(endTime);
            userSystemCoupon.setUpdateTime(new Date());
            userSystemCouponMapper.updateByPrimaryKey(userSystemCoupon);
        }
    }
    
    @Override
    public boolean updateCouponRecordUsed(Long uid, String orderNo, BigDecimal payment,
            Long auctionId) throws  Exception{
        boolean isfree = false;
        if (uid == null || payment == null || auctionId == null || orderNo == null ||
                orderNo.trim().length() == 0 ) {
            throw new Exception("传递参数不能为空");
        }
        // 查询等待匹配的券记录
        List<UserSystemCouponRecord> list = userSystemCouponRecordService.getRecordByState(uid, UserSystemCouponRecord.STATE_WAIT);
        if (list == null || list.size() == 0) {
            return  isfree;
        }
        // 匹配
        boolean matching = false;
        UserSystemCouponRecord record = null;
        for (UserSystemCouponRecord userSystemCouponRecord : list) {
            Long goodId = userSystemCouponRecord.getGoodId();
            if (auctionId.equals(goodId)) {
                matching = true; // 匹配成功
                record = userSystemCouponRecord;
                break;
            }
        }
        // 商品匹配成功
        if (matching) {
            record.setOrderNo(orderNo);
            record.setUpdateTime(new Date());
            UserSystemCoupon userSystemCoupon = record.getUserSystemCoupon();
            if (payment.compareTo(new BigDecimal(10)) > 0) {
                // 更新记录 -- 金额不匹配  大10元
                record.setState(UserSystemCouponRecord.STATE_FAIL_RULE);
                userSystemCouponRecordService.updateByPrimaryKeySelective(record);
                // 退回券
                sendBackCoupon(userSystemCoupon);
            } else {
                // 免单匹配成功
                isfree = true;
                //更新记录--免单中
                record.setState(UserSystemCouponRecord.STATE_FREE_ON);
                userSystemCouponRecordService.updateByPrimaryKeySelective(record);
                // 券结束使用
                userSystemCoupon.setState(UserSystemCoupon.STATE_END_USE);
                userSystemCoupon.setUpdateTime(new Date());
                userSystemCouponMapper.updateByPrimaryKeySelective(userSystemCoupon);
                SystemCoupon systemCoupon = userSystemCoupon.getSystemCoupon();
                SystemCoupon baseCoupon = systemCouponService.selectByPrimaryKey(systemCoupon.getId());
                if (baseCoupon == null) {
                    // 券已使用
                    userOtherMsgNotificationService.freeSheetCouponUsed(userSystemCoupon);
                } else     if (baseCoupon.getType() != CouponTypeEnum.welfareFreeCoupon) {
                    userOtherMsgNotificationService.welfareCouponUsed(userSystemCoupon);
                } else if (baseCoupon.getType() != CouponTypeEnum.freeCoupon) {
                    userOtherMsgNotificationService.freeSheetCouponUsed(userSystemCoupon);
                }
            }
        }
        return isfree;
    }
    /**
     * 退回券 初始数据
     * @param userSystemCoupon
     */
    public void sendBackCoupon(UserSystemCoupon userSystemCoupon) throws Exception{
        int expiryDay = 15;
        SystemCoupon systemCoupon = userSystemCoupon.getSystemCoupon();
        SystemCoupon coupon = systemCouponService.selectByPrimaryKey(systemCoupon.getId());
        if (coupon != null) {
            expiryDay = coupon.getExpiryDay();
        }
        // 结束日期
        Date endTime = null;
        try {
            String endDay = DateUtil.plusDay(expiryDay, new Date());
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            endTime = format.parse(endDay);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        // 状态初始化
        userSystemCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
        userSystemCoupon.setUseTime(null);
        // 有效期时间重新定义
        userSystemCoupon.setStartTime(new Date());
        userSystemCoupon.setEndTime(endTime);
        userSystemCoupon.setUpdateTime(new Date());
        userSystemCouponMapper.updateByPrimaryKey(userSystemCoupon);
    }
    
    
    
fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderHongBaoMapService.java
@@ -28,6 +28,6 @@
     * @param uid
     * @return
     */
    public Map<String, BigDecimal> getCouponHongbaoByOrderNo(String orderNo, Long uid);
    public BigDecimal getCouponHongbaoByOrderNo(String orderNo, Long uid);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserSystemCouponRecordService.java
@@ -25,5 +25,13 @@
     * @return
     */
    public List<UserSystemCouponRecord> getCouponByUsingTimeOut(Long uid, long seconds);
    /**
     * 查询状态
     * @param uid
     * @param state
     * @return
     */
    public List<UserSystemCouponRecord> getRecordByState(Long uid, Integer state);
    
}
fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserSystemCouponService.java
@@ -1,5 +1,6 @@
package com.yeshi.fanli.service.inter.user;
import java.math.BigDecimal;
import java.util.List;
import com.yeshi.fanli.entity.bus.user.UserSystemCoupon;
@@ -144,7 +145,7 @@
     * 退回券
     * @param uid
     */
    public void sendBackCoupon(Long uid);
    public void sendBackTimeOutCoupon(Long uid);
    /**
     * 激活福利免单券
@@ -152,5 +153,16 @@
     */
    public void activatedWelfareFreeCoupon(Long uid);
    /**
     * 更新券记录 ——匹配免单券
     * @param uid        用户id
     * @param orderNo    订单号
     * @param payment    付款金额
     * @param auctionId  商品id(淘宝)
     * @return           免单成功 true
     * @throws Exception
     */
    public boolean updateCouponRecordUsed(Long uid, String orderNo, BigDecimal payment, Long auctionId) throws  Exception;
    
}