yujian
2019-12-03 2442c923fd35ef864be1cfe07e039eebfaf24ffc
新人红包功能
11个文件已修改
401 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/GoodsController.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/RedPackControllerV2.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserAccountControllerV2.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/TaoLiJinJob.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/ShareGoodsServiceImpl.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinNewbiesServiceImpl.java 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinRecordServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/redpack/UserTaoLiJinNewbiesService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/tlj/UserTaoLiJinRecordService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/vo/goods/GoodsDetailExtraVO.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/GoodsController.java
@@ -30,6 +30,7 @@
import com.yeshi.fanli.service.inter.monitor.BusinessEmergent110Service;
import com.yeshi.fanli.service.inter.monitor.MonitorService;
import com.yeshi.fanli.service.inter.taobao.TLJBuyGoodsService;
import com.yeshi.fanli.service.inter.taobao.TLJFreeBuyGoodsService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoBuyRelationMapService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinRecordService;
@@ -90,6 +91,10 @@
    @Resource
    private IntegralGetService integralGetService;
    @Resource
    private TLJFreeBuyGoodsService tljFreeBuyGoodsService;
    private void doTaoLiJinBuy(AcceptData acceptData, Long uid, Long auctionId, PrintWriter out) {
        JSONObject data = new JSONObject();
@@ -127,6 +132,7 @@
        integralGetService.addTaoLiJinBuy(uid, auctionId);
    }
    /**
     * 获取淘宝的分享链接
@@ -183,7 +189,7 @@
            doTaoLiJinBuy(acceptData, uid, auctionId, out);
            return;
        }
        ClientTBPid clientTBPid = null;
        String dpid = null;
@@ -239,16 +245,8 @@
            // 是返利商品库的商品
            if (specialConvert) {
                if (!StringUtil.isNullOrEmpty(specialId)) {
                    if (source != null && "taolijin".equals(source)) {
                        boolean isNewUser = userInfoExtraService.isNewUser(uid);
                        if (isNewUser) {
                            // 判定为老用户:
                            // 新人只要使用了新人红包,也就是那1块钱,那么,他看到的分享爆款中的商品-就只能分享。
                            long countRecord = userTaoLiJinRecordService.countRecordByUid(uid);
                            if (countRecord == 0) {
                                taoBaoLink = shareGoodsService.getTaoLiJinLinkForBuy(uid, specialId, auctionId, null);
                            }
                        }
                    if (source != null && "taolijin_free_buy".equals(source)) {
                        taoBaoLink = shareGoodsService.getTaoLiJinLinkForBuy(uid, specialId, auctionId, null);
                    }
                    if (taoBaoLink == null) {
@@ -276,17 +274,9 @@
                    LogHelper.errorDetailInfo(e, "uid:" + uid, null);
                }
                if (!StringUtil.isNullOrEmpty(relationId)) {//
                    if (source != null && "taolijin".equals(source)) {
                        boolean isNewUser = userInfoExtraService.isNewUser(uid);
                        if (isNewUser) {
                            // 判定为老用户:
                            // 新人只要使用了新人红包,也就是那1块钱,那么,他看到的分享爆款中的商品-就只能分享。
                            long countRecord = userTaoLiJinRecordService.countRecordByUid(uid);
                            if (countRecord == 0) {
                                taoBaoLink = shareGoodsService.getTaoLiJinLinkForBuy(uid, specialId, auctionId,
                    if (source != null && "taolijin_free_buy".equals(source)) {
                        taoBaoLink = shareGoodsService.getTaoLiJinLinkForBuy(uid, specialId, auctionId,
                                        TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID);
                            }
                        }
                    } else {
                        taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(uid, auctionId, relationId,
                                TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID);
@@ -316,6 +306,12 @@
            // 获得金币
            integralGetService.addCouponRebate(uid);
        } catch (ShareGoodsException e) {
            if (e.getCode() == 1001) {
                out.print(JsonUtil.loadFalseResult(1001, e.getMsg()));
            } else {
                out.print(JsonUtil.loadFalseResult(1, e.getMsg()));
            }
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java
@@ -2,9 +2,7 @@
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
@@ -13,7 +11,6 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.yeshi.utils.DateUtil;
import org.yeshi.utils.HttpUtil;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.taobao.TbImgUtil;
@@ -26,10 +23,8 @@
import com.yeshi.fanli.dto.pdd.PDDPromotionUrl;
import com.yeshi.fanli.dto.pdd.PDDSearchFilter;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinNewbies;
import com.yeshi.fanli.entity.bus.user.ShamUser;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.goods.CollectionGoodsV2;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.jd.JDGoodsClass;
@@ -435,7 +430,6 @@
            extraVO.setH5Url(h5Url);
        }
        
        String tips = null;
        String helpLink = null;
        boolean fanliValid = true;
        boolean shareValid = true;
@@ -500,24 +494,6 @@
            otherInfo.setReduceHongBao(newUserHongBao);
            goodsDetail.setOtherInfo(otherInfo);
            
            tips = "你不是“新用户”无法使用新人红包0元购买。";
            UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
            if (userInfoExtra != null  && userInfoExtra.getFirstLoginTime() != null) {
                try {
                    int    days = DateUtil.daysBetween2(userInfoExtra.getFirstLoginTime(), new Date());
                    if (days < Constant.TLJ_NEW_USER_DEFINE){
                        UserTaoLiJinNewbies winDetail = userTaoLiJinNewbiesService.selectByPrimaryKey(uid);
                        if (winDetail == null || winDetail.getEndTime().getTime() < java.lang.System.currentTimeMillis()
                                || winDetail.getMoney().compareTo(couponPrice) < 0) {
                            tips = "新人红包不足,请换个商品再试或继续领取到足额新人红包。";
                        } else {
                            tips = null;
                        }
                    }
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }
        } else {// 普通购买
            OtherInfo otherInfo = new OtherInfo();
            RewardCouponVO rewardCoupon = new RewardCouponVO();
@@ -539,7 +515,6 @@
        }
        extraVO.setFanliValid(fanliValid);
        extraVO.setShareValid(shareValid);
        extraVO.setTips(tips);
        MoneyInfoVO goodsMoney = goodsDetail.getMoneyInfo();
        if (goodsMoney != null) {
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/RedPackControllerV2.java
@@ -88,10 +88,10 @@
    @Resource
    private SwiperPictureService swiperPictureService;
    @Resource
    private UserSystemCouponService userSystemCouponService;
    @Resource
    private RedPackForbidService redPackForbidService;
@@ -118,7 +118,8 @@
        BigDecimal yesterdayUse = zero;
        BigDecimal thisMonthUse = zero;
        BigDecimal lastMonthUse = zero;
        BigDecimal balance = redPackBalanceService.getBalance(uid);;
        BigDecimal balance = redPackBalanceService.getBalance(uid);
        ;
        if (balance == null) {
            balance = zero;
        } else {
@@ -191,12 +192,9 @@
     * 
     * @param acceptData
     * @param uid
     * @param index
     *            List最末的主键ID
     * @param year
     *            年份
     * @param month
     *            月份
     * @param index      List最末的主键ID
     * @param year       年份
     * @param month      月份
     * @param out
     */
    @RequestMapping(value = "getMoneyDetails")
@@ -379,7 +377,7 @@
    @RequestMapping(value = "getBasicInfo")
    public void getBasicInfo(AcceptData acceptData, Long uid, String callback, PrintWriter out) {
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "用户未登录"));
            return;
        }
@@ -395,19 +393,19 @@
        } else {
            data.put("inviteCode", "");
        }
        //
      long freeCouponCount=    userSystemCouponService.countUsableFreeCouponForBuy(uid);
      long     rewardCouponCount=  userSystemCouponService.countUsableRewardCoupon(uid);
      data.put("freeCouponCount", freeCouponCount);
      data.put("rewardCouponCount", rewardCouponCount);
        long freeCouponCount = userSystemCouponService.countUsableFreeCouponForBuy(uid);
        long rewardCouponCount = userSystemCouponService.countUsableRewardCoupon(uid);
        data.put("freeCouponCount", freeCouponCount);
        data.put("rewardCouponCount", rewardCouponCount);
        if (!StringUtil.isNullOrEmpty(callback)) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data)));
        } else
        } else {
            out.print(JsonUtil.loadTrueResult(data));
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserAccountControllerV2.java
@@ -349,15 +349,15 @@
     * @param out
     */
    @RequestMapping(value = "getVIPInfo")
    public void getVIPInfo(AcceptData acceptData, Long uid, PrintWriter out) {
    public void getVIPInfo(String callback, AcceptData acceptData, Long uid, PrintWriter out) {
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadFalseResult("用户id为空"));
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "用户未登录"));
            return;
        }
        
        UserInfo userInfo = userInfoService.selectByPKey(uid);
        if (userInfo == null) {
            out.print(JsonUtil.loadFalseResult("该用户不存在"));
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "该用户不存在"));
            return;
        }
        
@@ -416,6 +416,11 @@
        vo.setLimitHongBao(Long.parseLong(userVipConfigService.getValueByKey("require_shop_buy")));
        vo.setLimitMoney(new BigDecimal(userVipConfigService.getValueByKey("require_fan_money")));
        vo.setLimitgoldCoin(new BigDecimal(userVipConfigService.getValueByKey("require_gold_coin")));
        out.print(JsonUtil.loadTrueResult(vo));
        if (!StringUtil.isNullOrEmpty(callback)) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(vo)));
        } else {
            out.print(JsonUtil.loadTrueResult(vo));
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/job/TaoLiJinJob.java
@@ -11,7 +11,6 @@
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.yeshi.fanli.entity.taobao.ShareHotGoods;
import com.yeshi.fanli.entity.taobao.TLJBuyGoods;
import com.yeshi.fanli.entity.taobao.TLJFreeBuyGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
@@ -19,7 +18,6 @@
import com.yeshi.fanli.entity.taobao.TaoKeAppInfo;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.taobao.ShareHotGoodsService;
import com.yeshi.fanli.service.inter.taobao.TLJBuyGoodsService;
import com.yeshi.fanli.service.inter.taobao.TLJFreeBuyGoodsService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
@@ -28,7 +26,6 @@
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinOriginService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinReportService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.TaoBaoConstant;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
@@ -38,9 +35,6 @@
    @Resource
    private UserTaoLiJinReportService userTaoLiJinReportService;
    @Resource
    private ShareHotGoodsService shareHotGoodsService;
    @Resource
    private TLJBuyGoodsService tljBuyGoodsService;
@@ -60,28 +54,7 @@
    @Resource
    private TLJFreeBuyGoodsService tljFreeBuyGoodsService;
    
    /**
     * 每天凌晨过5分钟验证
     */
    @Scheduled(cron = "0 2 0 * * ?")
    public void updateShareTLJGoods() {
        if (!Constant.IS_TASK)
            return;
        LogHelper.test("验证爆款商品库商品");
        String day = TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd");
        List<ShareHotGoods> list = shareHotGoodsService.listByDay(day, 15);
        int count = 0;
        for (int i = 0; i < list.size(); i++) {
            if (count >= 10)
                break;
            boolean success = shareHotGoodsService.verifyCanCreateTLJ(list.get(i).getGoods().getAuctionId(),
                    new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET,
                            TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT));
            if (success) {
                count++;
            }
        }
    }
    /**
     * 每天凌晨5点过10分钟验证
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/ShareGoodsServiceImpl.java
@@ -25,9 +25,7 @@
import com.yeshi.fanli.dao.mybatis.share.PidUserMapper;
import com.yeshi.fanli.dto.taobao.TaoLiJinDTO;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsHistory;
import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinRecord;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserMoneyExtra;
import com.yeshi.fanli.entity.taobao.PidUser;
import com.yeshi.fanli.entity.taobao.TBPid;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
@@ -39,7 +37,7 @@
import com.yeshi.fanli.exception.taobao.TaoKeApiException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.exception.tlj.TaoLiJinCreateException;
import com.yeshi.fanli.exception.tlj.UserTaoLiJinRecordException;
import com.yeshi.fanli.exception.tlj.UserTaoLiJinNewbiesException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
@@ -47,6 +45,7 @@
import com.yeshi.fanli.service.inter.money.UserMoneyExtraService;
import com.yeshi.fanli.service.inter.monitor.BusinessEmergent110Service;
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
import com.yeshi.fanli.service.inter.redpack.UserTaoLiJinNewbiesService;
import com.yeshi.fanli.service.inter.taobao.TLJBuyGoodsService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
import com.yeshi.fanli.service.inter.taobao.UserTLJBuyHistoryService;
@@ -119,6 +118,9 @@
    @Resource
    private BusinessEmergent110Service businessEmergent110Service;
    @Resource
    private UserTaoLiJinNewbiesService userTaoLiJinNewbiesService;
    @Override
    public void addShareGoodsHistory(UserShareGoodsHistory history) {
        UserShareGoodsHistory userShareGoodsHistory = userShareGoodsHistoryMapper
@@ -677,39 +679,31 @@
    @Override
    public TaoBaoLink getTaoLiJinLinkForBuy(Long uid, String specialId, Long auctionId, String pid)
            throws ShareGoodsException {
        if (uid == null || uid <= 0) {
        if (uid == null || uid <= 0)
            throw new ShareGoodsException(1, "用户ID不能为空");
        }
        if (auctionId == null || auctionId <= 0) {
            throw new ShareGoodsException(2, "商品ID不能为空");
        }
        // 用户剩余可以淘礼金验证
        UserMoneyExtra userMoneyExtra = userMoneyExtraService.selectByPrimaryKey(uid);
        if (userMoneyExtra == null || userMoneyExtra.getTlj() == null) {
            throw new ShareGoodsException(101, "红包余额不足");
        }
        if (auctionId == null || auctionId <= 0)
            throw new ShareGoodsException(1, "商品ID不能为空");
        TaoKeAppInfo app = new TaoKeAppInfo();
        app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
        app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
        if (pid == null)
        if (pid == null) {
            app.setPid(TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT);
        else
        } else {
            app.setPid(pid);
        TaoBaoGoodsBrief goods = TaoKeApiUtil.specialConvertCoupon(auctionId, app);
        if (goods == null) {
            throw new ShareGoodsException(1, "");
        }
        TaoBaoGoodsBrief goods = TaoKeApiUtil.specialConvertCoupon(auctionId, app);
        if (goods == null)
            throw new ShareGoodsException(1, "转链接失败");
        String taoLiJinLink = null;
        try {
            goods.setAuctionId(auctionId);
            UserTaoLiJinRecord createUserTaoLiJin = userTaoLiJinRecordService.createSelfBuyTaoLiJin(uid, 1, goods);
            taoLiJinLink = createUserTaoLiJin.getSendUrl();
        } catch (UserTaoLiJinRecordException e) {
            throw new ShareGoodsException(e.getCode(), e.getMsg());
            taoLiJinLink = userTaoLiJinNewbiesService.createTaoLiJinForBuy(goods, uid);
        } catch (UserTaoLiJinNewbiesException e1) {
            throw new ShareGoodsException(e1.getCode(), e1.getMsg());
        }
        TaoBaoLink taoBaoLink = new TaoBaoLink();
@@ -717,7 +711,6 @@
        taoBaoLink.setClickUrl(goods.getAuctionUrl());
        taoBaoLink.setCouponLink(taoLiJinLink);
        taoBaoLink.setGoods(goods);
        return taoBaoLink;
    }
fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinNewbiesServiceImpl.java
@@ -1,31 +1,48 @@
package com.yeshi.fanli.service.impl.tlj;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.yeshi.utils.DateUtil;
import com.yeshi.fanli.dao.mybatis.tlj.UserTaoLiJinNewbiesMapper;
import com.yeshi.fanli.dto.taobao.TaoLiJinDTO;
import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinDetail;
import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinDetail.TaoLiJinDetailTypeEnum;
import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinNewbies;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.push.DeviceActive;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoKeAppInfo;
import com.yeshi.fanli.exception.taobao.TaoKeApiException;
import com.yeshi.fanli.exception.tlj.TaoLiJinCreateException;
import com.yeshi.fanli.exception.tlj.UserTaoLiJinNewbiesException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService;
import com.yeshi.fanli.service.inter.push.DeviceActiveService;
import com.yeshi.fanli.service.inter.redpack.UserTaoLiJinNewbiesService;
import com.yeshi.fanli.service.inter.taobao.TLJFreeBuyGoodsService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoBuyRelationMapService;
import com.yeshi.fanli.service.inter.tlj.ConfigTaoLiJinService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinDetailService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TaoBaoConstant;
import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.vo.redpack.TaoLiJinWinDetailVO;
@Service
@@ -48,6 +65,18 @@
    
    @Resource
    private JumpDetailV2Service jumpDetailV2Service;
    @Resource(name = "taskExecutor")
    private TaskExecutor executor;
    @Resource
    private TLJFreeBuyGoodsService tljFreeBuyGoodsService;
    @Resource
    private UserTaoLiJinDetailService userTaoLiJinDetailService;
    @Resource
    private TaoBaoBuyRelationMapService taoBaoBuyRelationMapService;
    
    
    @Override
@@ -152,17 +181,18 @@
            BigDecimal rate = new BigDecimal(randomNum/100).setScale(2, BigDecimal.ROUND_DOWN);
            money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.sub(Constant.TLJ_NEW_USER_MONEY,redPackWin.getMoney()),rate);
        }
        if (money.compareTo(new BigDecimal(0)) <= 0)
            return null;
        money = money.setScale(2);
        
        // 插入领取记录
        int num = 1;
        BigDecimal balance = null;
        if (redPackWin == null) {
            balance = money;
            // 注册开始 有效期
            Date endDate = DateUtil.plusDayDate(Constant.TLJ_NEW_USER_LIMIT, firstLoginTime);
            redPackWin = new UserTaoLiJinNewbies();
            redPackWin.setId(uid);
            redPackWin.setNum(1);
@@ -177,6 +207,16 @@
            num = redPackWin.getNum() + 1;
            balance = MoneyBigDecimalUtil.add(money, redPackWin.getMoney());
        }
        // 明细
        UserTaoLiJinDetail detail = new UserTaoLiJinDetail();
        detail.setUid(uid);
        detail.setMoney(money);
        detail.setTitle(TaoLiJinDetailTypeEnum.add.getDesc());
        detail.setType(TaoLiJinDetailTypeEnum.add);
        detail.setCreateTime(new Date());
        userTaoLiJinDetailService.insertSelective(detail);
        
        Map<String,String> map = new HashMap<String,String>();
        map.put("url", configTaoLiJinService.getValueByKey("new_user_free_buy_list"));
@@ -194,10 +234,148 @@
        return winDetailVO;
    }
    
    @RequestSerializableByKeyService(key = "#uid")
    @Transactional(rollbackFor = Exception.class)
    @Override
    public String createTaoLiJinForBuy(TaoBaoGoodsBrief goods, Long uid) throws UserTaoLiJinNewbiesException {
        if (uid == null || uid <= 0 || goods == null)
            throw new UserTaoLiJinNewbiesException(1,"参数信息缺失");
        if (goods == null || goods.getCouponAmount() == null ||
                goods.getCouponAmount().compareTo(new BigDecimal(0)) == 0) {
            executor.execute(new Runnable() {
                @Override
                public void run() {
                    tljFreeBuyGoodsService.deleteByGoodsId(goods.getId());
                }
            });
            throw new UserTaoLiJinNewbiesException(1, "该商品非免单商品");
        }
        BigDecimal money = TaoBaoUtil.getAfterUseCouplePrice(goods);
        if (money.compareTo(new BigDecimal(1.0)) < 0 && money.compareTo(new BigDecimal(2.0)) > 0) {
            executor.execute(new Runnable() {
                @Override
                public void run() {
                    tljFreeBuyGoodsService.deleteByGoodsId(goods.getId());
                }
            });
            throw new UserTaoLiJinNewbiesException(1, "该商品非免单商品");
        }
        UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
        if (userInfoExtra == null || userInfoExtra.getFirstLoginTime() == null)
            throw new UserTaoLiJinNewbiesException(1001, "你不是“新用户”无法使用新人红包0元购买。");
        try {
            int days = DateUtil.daysBetween2(userInfoExtra.getFirstLoginTime(), new Date());
            if (days > Constant.TLJ_NEW_USER_DEFINE)
                throw new UserTaoLiJinNewbiesException(1001, "你不是“新用户”无法使用新人红包0元购买。");
        } catch (ParseException e1) {
            throw new UserTaoLiJinNewbiesException(1, "日期信息计算失败");
        }
        UserTaoLiJinNewbies taoLiJinNewbies = userTaoLiJinNewbiesMapper.selectForUpdate(uid);
        if (taoLiJinNewbies == null || taoLiJinNewbies.getMoney() == null ||
                taoLiJinNewbies.getMoney().compareTo(money)    < 0)
            throw new UserTaoLiJinNewbiesException(1001, "新人红包不足,请换个商品再试或继续领取到足额新人红包。");
        if (taoLiJinNewbies.getEndTime() == null
                || taoLiJinNewbies.getEndTime().getTime() < java.lang.System.currentTimeMillis())
            throw new UserTaoLiJinNewbiesException(1, "新人红包已过期");
        // 红包减少
        userTaoLiJinNewbiesMapper.subMoney(uid, money);
        // 加入明细
        UserTaoLiJinDetail detail = new UserTaoLiJinDetail();
        detail.setUid(uid);
        detail.setMoney(new BigDecimal("-" + money));
        detail.setTitle(TaoLiJinDetailTypeEnum.reduce.getDesc());
        detail.setType(TaoLiJinDetailTypeEnum.reduce);
        detail.setCreateTime(new Date());
        userTaoLiJinDetailService.insertSelective(detail);
        // 创建淘礼金链接
        if (TaoBaoUtil.isSpecialGoods(goods.getMaterialLibType())) {
            return createTaoLiJin(goods.getAuctionId(), money, 1, TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT);
        } else { // 非返利库商品
            String relationId = null;
            try {
                relationId = taoBaoBuyRelationMapService.getRelationId(uid);
            } catch (Exception e) {
                LogHelper.errorDetailInfo(e, "uid:" + uid, null);
            }
            if (StringUtil.isNullOrEmpty(relationId))
                throw new UserTaoLiJinNewbiesException(1, "渠道未备案");
            return createTaoLiJin(goods.getAuctionId(), money, 1, TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID)
                    + "&relationId=" + relationId;
        }
    }
    @Transactional
    private String createTaoLiJin(Long auctionId, BigDecimal perface, int totalNum, String pid) throws UserTaoLiJinNewbiesException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat formatStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String name = "新人免单购";
        Date date = new Date();
        String date_str = format.format(date);
        String sendEndTime_str = date_str + " 22:00:00";
        String useEndTime_str = date_str + " 23:59:59";
        // 发放时间
        Date sendStartTime = date;
        Date sendEndTime = null;
        // 使用时间
        Date useStartTime = null;
        Date useEndTime = null;
        try {
            sendEndTime = formatStr.parse(sendEndTime_str);
            useEndTime = formatStr.parse(useEndTime_str);
        } catch (ParseException e2) {
            e2.printStackTrace();
        }
        // 创建淘礼金红包
        TaoLiJinDTO taoLiJinDTO = null;
        TaoKeAppInfo taoKeAppInfo = new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET, pid);
        try {
            taoLiJinDTO = TaoKeApiUtil.createTaoLiJin(auctionId, name, perface, totalNum, sendStartTime,
                    sendEndTime, useStartTime, useEndTime, taoKeAppInfo);
        } catch (TaoLiJinCreateException e) {
            LogHelper.errorDetailInfo(e);
            executor.execute(new Runnable() {
                @Override
                public void run() {
                    if (e.getCode() == TaoLiJinCreateException.CODE_TLJ_FORBIDDEN) {
                        // 该商品不支持创建淘礼金红包
                        tljFreeBuyGoodsService.deleteByGoodsId(auctionId);
                    } else if (e.getCode() == TaoLiJinCreateException.CODE_TLJ_NO_MONEY) {
                        // 官方玩法钱包余额不足 TODO
                    }
                }
            });
        } catch (TaoKeApiException e) {
            LogHelper.errorDetailInfo(e);
        }
        if (taoLiJinDTO == null || StringUtil.isNullOrEmpty(taoLiJinDTO.getSendUrl()))
            throw new UserTaoLiJinNewbiesException(1, "淘宝API红包创建失败");
        return taoLiJinDTO.getSendUrl();
    }
    @Override
    public UserTaoLiJinNewbies selectByPrimaryKey(Long uid) {
        return userTaoLiJinNewbiesMapper.selectByPrimaryKey(uid);
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinRecordServiceImpl.java
@@ -126,7 +126,7 @@
    @Transactional
    @Override
    public UserTaoLiJinRecord createSelfBuyTaoLiJin(Long uid, int totalNum, TaoBaoGoodsBrief goods)
    public UserTaoLiJinRecord createSelfBuyTaoLiJin(Long uid, BigDecimal couplePrice, TaoBaoGoodsBrief goods)
            throws UserTaoLiJinRecordException {
        Date date = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
@@ -148,8 +148,6 @@
        } catch (ParseException e2) {
            e2.printStackTrace();
        }
        // 新人红包 自购一元
        BigDecimal perface = new BigDecimal(1);
        if (!TaoBaoUtil.isSpecialGoods(goods.getMaterialLibType())) {// 非返利库商品
            String relationId = null;
@@ -162,7 +160,7 @@
            if (StringUtil.isNullOrEmpty(relationId)) {
                throw new UserTaoLiJinRecordException(101, "渠道未备案");
            }
            UserTaoLiJinRecord record = createUserTaoLiJin(1, uid, goods.getAuctionId(), perface, 1, name,
            UserTaoLiJinRecord record = createUserTaoLiJin(1, uid, goods.getAuctionId(), couplePrice, 1, name,
                    sendStartTime, sendEndTime, null, useEndTime, TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID);
            record.setSendUrl(record.getSendUrl() + "&relationId=" + relationId);
            UserTaoLiJinRecord updateRecoed = new UserTaoLiJinRecord();
@@ -171,7 +169,7 @@
            userTaoLiJinRecordMapper.updateByPrimaryKeySelective(record);
            return record;
        } else {// 返利库商品
            return createUserTaoLiJin(1, uid, goods.getAuctionId(), perface, 1, name, sendStartTime, sendEndTime, null,
            return createUserTaoLiJin(1, uid, goods.getAuctionId(), couplePrice, 1, name, sendStartTime, sendEndTime, null,
                    useEndTime, TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT);
        }
fanli/src/main/java/com/yeshi/fanli/service/inter/redpack/UserTaoLiJinNewbiesService.java
@@ -1,6 +1,8 @@
package com.yeshi.fanli.service.inter.redpack;
import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinNewbies;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.exception.tlj.UserTaoLiJinNewbiesException;
import com.yeshi.fanli.vo.redpack.TaoLiJinWinDetailVO;
public interface UserTaoLiJinNewbiesService {
@@ -27,4 +29,13 @@
     */
    public UserTaoLiJinNewbies selectByPrimaryKey(Long uid);
    /**
     * 红包减少
     * @param uid
     * @param money
     * @return
     * @throws UserTaoLiJinNewbiesException
     */
    public String createTaoLiJinForBuy(TaoBaoGoodsBrief goods, Long uid) throws UserTaoLiJinNewbiesException;
}
fanli/src/main/java/com/yeshi/fanli/service/inter/tlj/UserTaoLiJinRecordService.java
@@ -83,7 +83,7 @@
     * @return
     * @throws UserTaoLiJinRecordException
     */
    public UserTaoLiJinRecord createSelfBuyTaoLiJin(Long uid, int totalNum, TaoBaoGoodsBrief goods)
    public UserTaoLiJinRecord createSelfBuyTaoLiJin(Long uid, BigDecimal couplePrice, TaoBaoGoodsBrief goods)
            throws UserTaoLiJinRecordException;
    /**
fanli/src/main/java/com/yeshi/fanli/vo/goods/GoodsDetailExtraVO.java
@@ -38,9 +38,6 @@
    // 是否跳转原生APP
    @Expose
    private Boolean isNative;
    // 弹出框提示语
    @Expose
    private String tips;
        
    // 图文详情链接
    @Expose
@@ -190,11 +187,4 @@
        this.listCouponUser = listCouponUser;
    }
    public String getTips() {
        return tips;
    }
    public void setTips(String tips) {
        this.tips = tips;
    }
}