admin
2019-12-03 1215065e40d634a443cc13e54eefd2b10dcb3061
Merge remote-tracking branch 'origin/div' into div

Conflicts:
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java
4个文件已删除
1 文件已重命名
21个文件已修改
14个文件已添加
2355 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/GoodsController.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ConfigControllerV2.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java 131 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/RedPackControllerV2.java 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/TaoLiJinControllerV2.java 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserAccountControllerV2.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserOrderControllerV2.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/web/TLJFreeBuyGoodsController.java 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mongodb/redpack/RedPackWinNewUserDao.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/HongBaoV2CountMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/tlj/UserTaoLiJinNewbiesMapper.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/taobao/TLJFreeBuyGoodsDao.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/bus/tlj/UserTaoLiJinNewbies.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/redpack/RedPackWinNewUser.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/taobao/TLJFreeBuyGoods.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/exception/tlj/UserTaoLiJinNewbiesException.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/TaoLiJinJob.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/hongbao/HongBaoV2CountMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/tlj/UserTaoLiJinNewbiesMapper.xml 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/count/HongBaoV2CountServiceImpl.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/ShareGoodsServiceImpl.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinNewUserServiceImpl.java 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TLJFreeBuyGoodsServiceImpl.java 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TLJFreeBuyGoodsUpdateServiceImpl.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoGoodsUpdateServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinNewbiesServiceImpl.java 381 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinRecordServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/count/HongBaoV2CountService.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/redpack/RedPackWinNewUserService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/redpack/UserTaoLiJinNewbiesService.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/TLJFreeBuyGoodsService.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/TLJFreeBuyGoodsUpdateService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/tlj/UserTaoLiJinRecordService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/Constant.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/dataoke/DaTaoKeApiUtil.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/vo/goods/GoodsDetailExtraVO.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/vo/redpack/TaoLiJinWinDetailVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/vo/tlj/NewUserHongBao.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/ehcache.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/src/main/java/org/yeshi/utils/DateUtil.java 20 ●●●●● 补丁 | 查看 | 原始文档 | 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/ConfigControllerV2.java
@@ -24,7 +24,7 @@
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.homemodule.FloatADService;
import com.yeshi.fanli.service.inter.msg.MsgDeviceReadStateService;
import com.yeshi.fanli.service.inter.redpack.RedPackWinNewUserService;
import com.yeshi.fanli.service.inter.redpack.UserTaoLiJinNewbiesService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinOriginService;
import com.yeshi.fanli.service.inter.user.TBPidService;
@@ -79,7 +79,7 @@
    private UserActiveLogService userActiveLogService;
    @Resource
    private RedPackWinNewUserService redPackWinNewUserService;
    private UserTaoLiJinNewbiesService userTaoLiJinNewbiesService;
    /**
     * s 首页配置信息
@@ -167,7 +167,7 @@
        for (int i = 0; i < listAD.size(); i++) {
            FloatAD floatAD = listAD.get(i);
            FloatADTypeEnum typeEnum = floatAD.getTypeEnum();
            if (typeEnum == FloatADTypeEnum.newUserRedPack && !redPackWinNewUserService.verifyHasReward(uid, acceptData.getDevice())) {
            if (typeEnum == FloatADTypeEnum.newUserRedPack && !userTaoLiJinNewbiesService.verifyHasReward(uid, acceptData.getDevice())) {
                listAD.remove(i);
                i--;
                continue;
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java
@@ -3,7 +3,6 @@
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -29,7 +28,6 @@
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.ShamUser;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserMoneyExtra;
import com.yeshi.fanli.entity.goods.CollectionGoodsV2;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.jd.JDGoods;
@@ -38,6 +36,7 @@
import com.yeshi.fanli.entity.system.SystemClientParams;
import com.yeshi.fanli.entity.taobao.ClientTBPid;
import com.yeshi.fanli.entity.taobao.TLJBuyGoods;
import com.yeshi.fanli.entity.taobao.TLJFreeBuyGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoBaoShop;
import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig;
@@ -56,14 +55,14 @@
import com.yeshi.fanli.service.inter.jd.JDGoodsClassService;
import com.yeshi.fanli.service.inter.money.UserMoneyExtraService;
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.TLJFreeBuyGoodsService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoShopService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailService;
import com.yeshi.fanli.service.inter.tlj.ConfigTaoLiJinService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinOriginService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinRecordService;
import com.yeshi.fanli.service.inter.user.ShamUserService;
import com.yeshi.fanli.service.inter.user.TBPidService;
import com.yeshi.fanli.service.inter.user.UserGoodsStorageService;
@@ -89,7 +88,6 @@
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.util.taobao.TaoLiJinUtil;
import com.yeshi.fanli.vo.goods.CouponInfoVO;
import com.yeshi.fanli.vo.goods.GoodsDetailExtraVO;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
@@ -99,10 +97,9 @@
import com.yeshi.fanli.vo.goods.ShareVO;
import com.yeshi.fanli.vo.goods.ShopInfoVO;
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
import com.yeshi.fanli.vo.tlj.NewUserHongBao;
import com.yeshi.fanli.vo.tlj.ReduceHongBao;
import com.yeshi.fanli.vo.tlj.SpreadHongBao;
import net.sf.json.JSON;
import net.sf.json.JSONObject;
@Controller
@@ -155,13 +152,7 @@
    private UserGoodsStorageService userGoodsStorageService;
    @Resource
    private UserTaoLiJinOriginService userTaoLiJinOriginService;
    @Resource
    private ConfigTaoLiJinService configTaoLiJinService;
    @Resource
    private UserTaoLiJinRecordService userTaoLiJinRecordService;
    @Resource
    private UserInfoExtraService userInfoExtraService;
@@ -192,6 +183,12 @@
    @Resource
    private JDGoodsClassService jdGoodsClassService;
    @Resource
    private TLJFreeBuyGoodsService tljFreeBuyGoodsService;
    @Resource
    private UserTaoLiJinNewbiesService userTaoLiJinNewbiesService;
    /**
     * 淘宝商品详情
@@ -436,93 +433,13 @@
        } catch (Exception e) {
            extraVO.setH5Url(h5Url);
        }
        String helpLink = null;
        boolean fanliValid = true;
        boolean shareValid = true;
        int moneyType = 1;
        // 推广红包
        if (from != null && from.equals("taolijin")) {
            // 计算推广红包
            String warningRate = configTaoLiJinService.getValueByKey("warning_value", new Date());
            BigDecimal spreadMoney = TaoLiJinUtil.getSpreadMoney(warningRate, goods);
            // 推广红包 不能小于1
            if (spreadMoney.compareTo(new BigDecimal(1.1)) < 0) {
                out.print(JsonUtil.loadFalseResult(2, "商品不存在"));
                return;
            }
            // 取消新用户自购
            boolean isNewUser = false;// userInfoExtraService.isNewUser(uid);
            if (isNewUser) {
                // 判定为老用户: 新人只要使用了新人红包,也就是那1块钱,那么,他看到的分享爆款中的商品-就只能分享。
                long countRecord = userTaoLiJinRecordService.countRecordByUid(uid);
                if (countRecord > 0) {
                    isNewUser = false;
                }
            }
            SpreadHongBao spreadHongBao = new SpreadHongBao();
            if (isNewUser) {
                spreadHongBao.setMoney("1");
            } else {
                moneyType = 2;
                fanliValid = false;
                spreadHongBao.setMoney(spreadMoney.toString());
                ClientTextStyleVO textStyleVO1 = new ClientTextStyleVO();
                textStyleVO1.setContent("分享");
                textStyleVO1.setColor("#666666");
                ClientTextStyleVO textStyleVO2 = new ClientTextStyleVO();
                textStyleVO2.setContent("赚奖金");
                textStyleVO2.setColor("#F14242");
                ClientTextStyleVO textStyleVO3 = new ClientTextStyleVO();
                textStyleVO3.setContent(",好友");
                textStyleVO3.setColor("#666666");
                ClientTextStyleVO textStyleVO4 = new ClientTextStyleVO();
                textStyleVO4.setContent("领红包!");
                textStyleVO4.setColor("#F14242");
                List<ClientTextStyleVO> listText = new ArrayList<ClientTextStyleVO>();
                listText.add(textStyleVO1);
                listText.add(textStyleVO2);
                listText.add(textStyleVO3);
                listText.add(textStyleVO4);
                extraVO.setTip(listText);
            }
            spreadHongBao.setName("推广红包 ");
            spreadHongBao.setTip("当日领取,当日内使用,过期失效");
            OtherInfo otherInfo = new OtherInfo();
            otherInfo.setSpreadHongBao(spreadHongBao);
            goodsDetail.setOtherInfo(otherInfo);
            // 1.6.5后改为福利价
            if (com.yeshi.fanli.util.VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion())) {
                if (goodsDetail.getCouponPrice() != null
                        && goodsDetail.getCouponPrice().compareTo(new BigDecimal(0)) > 0)
                    goodsDetail.setCouponPrice(goodsDetail.getCouponPrice().subtract(spreadMoney));
                else
                    goodsDetail.setZkPrice(goodsDetail.getZkPrice().subtract(spreadMoney));
            }
            goodsDetail.getMoneyInfo().setFanliMoney(TaoBaoUtil.getGoodsHongBaoInfo(goods,
                    hongBaoManageService.getTLJShareRate(System.currentTimeMillis())));
            goodsDetail.getMoneyInfo().setShareMoney(TaoBaoUtil.getGoodsHongBaoInfo(goods,
                    hongBaoManageService.getTLJShareRate(System.currentTimeMillis())));
            // 用户淘礼金
            UserMoneyExtra userMoneyExtra = userMoneyExtraService.selectByPrimaryKey(uid);
            if (userMoneyExtra == null || userMoneyExtra.getTlj() == null) {
                extraVO.setUserTLJ(new BigDecimal(0).setScale(2).toString());
            } else {
                extraVO.setUserTLJ(userMoneyExtra.getTlj().setScale(2).toString());
            }
            helpLink = configTaoLiJinService.getValueByKey("share_goods_help_link", new Date());
        } else if (from != null && from.equals("taolijin_buy")) {
        if (from != null && from.equals("taolijin_buy")) {
            // 查询分享库
            TLJBuyGoods buyGoods = tljBuyGoodsService.selectByAuctionIdAndDay(id,
                    TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd"));
@@ -557,6 +474,30 @@
                else
                    goodsDetail.setZkPrice(goodsDetail.getZkPrice().subtract(tljHongBao));
            }
        } else if (from != null && from.equals("taolijin_free_buy")) {
            TLJFreeBuyGoods freeGoods = tljFreeBuyGoodsService.selectByAuctionIdAndDay(id, TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd"));
            if (freeGoods == null) {
                out.print(JsonUtil.loadFalseResult(2, "免单商品已下架"));
                return;
            }
            fanliValid = true;
            shareValid = false;
            BigDecimal couponPrice = goodsDetail.getCouponPrice();
            if (couponPrice == null)
                couponPrice = goodsDetail.getZkPrice();
            NewUserHongBao newUserHongBao = new NewUserHongBao();
            newUserHongBao.setMoney(couponPrice.setScale(2).toString());
            newUserHongBao.setName("新人红包 ");
            newUserHongBao.setTip("当日领取,当日内使用,过期失效");
            newUserHongBao.setLeft(1);
            newUserHongBao.setTotal(1);
            OtherInfo otherInfo = new OtherInfo();
            otherInfo.setReduceHongBao(newUserHongBao);
            goodsDetail.setOtherInfo(otherInfo);
        } else {// 普通购买
            OtherInfo otherInfo = new OtherInfo();
            RewardCouponVO rewardCoupon = new RewardCouponVO();
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/RedPackControllerV2.java
@@ -26,7 +26,6 @@
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.homemodule.SwiperPicture;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.redpack.RedPackDetail.RedPackDetailTypeEnum;
@@ -44,7 +43,6 @@
import com.yeshi.fanli.service.inter.redpack.RedPackForbidService;
import com.yeshi.fanli.service.inter.redpack.RedPackGiveRecordService;
import com.yeshi.fanli.service.inter.redpack.RedPackWinInviteService;
import com.yeshi.fanli.service.inter.redpack.RedPackWinNewUserService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
@@ -53,7 +51,6 @@
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.UserInviteUtil;
import com.yeshi.fanli.vo.redpack.RedPackDetailVO;
import com.yeshi.fanli.vo.redpack.RedPackWinDetailVO;
import com.yeshi.fanli.vo.redpack.RedPackWinInviteVO;
import net.sf.json.JSONObject;
@@ -81,9 +78,6 @@
    private RedPackWinInviteService redPackWinInviteService;
    @Resource
    private RedPackWinNewUserService redPackWinNewUserService;
    @Resource
    private UserInfoService userInfoService;
    @Resource
@@ -94,10 +88,10 @@
    @Resource
    private SwiperPictureService swiperPictureService;
    @Resource
    private UserSystemCouponService userSystemCouponService;
    @Resource
    private RedPackForbidService redPackForbidService;
@@ -124,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 {
@@ -197,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")
@@ -385,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;
        }
@@ -401,62 +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));
    }
    /**
     * 新人红包详情
     *
     * @param acceptData
     * @param uid
     * @param out
     */
    @RequestMapping(value = "getWinDetail", method = RequestMethod.POST)
    public void getWinDetail(AcceptData acceptData, Long uid, PrintWriter out) {
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
            return;
        }
        try {
            RedPackWinDetailVO winDetail = redPackWinNewUserService.receiveReward(uid);
            if (winDetail == null) {
                out.print(JsonUtil.loadFalseResult(1, "红包已被抢光"));
                return;
            }
            winDetail.setLogo(Constant.systemCommonConfig.getDefaultPortrait());
            winDetail.setLogoLight(Constant.systemCommonConfig.getDefaultPortrait());
            JSONObject params = new JSONObject();
            params.put("url", redPackConfigService.getValueByKey("goods_shop_link_h5"));
            winDetail.setParams(params.toString());
            winDetail.setJumpDetail(jumpDetailV2Service.getByTypeCache("web",
                    Constant.getPlatformCode(acceptData.getPlatform()), Integer.parseInt(acceptData.getVersion())));
            winDetail.setTips(redPackConfigService.getValueByKey("new_user_win_tips"));
            // 2、顶部轮播图
            List<SwiperPicture> oldtopPicList = swiperPictureService.getByBannerCard("redpack_win_detail_banner");
            List<SwiperPicture> topPicList = new ArrayList<>();
            if (oldtopPicList != null && oldtopPicList.size() > 0)
                topPicList.addAll(oldtopPicList);
            JSONObject data = new JSONObject();
            data.put("detail", JsonUtil.getApiCommonGson().toJson(winDetail));
            data.put("banner", JsonUtil.getApiCommonGson().toJson(topPicList));
            out.print(JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
            out.print(JsonUtil.loadFalseResult(1, "红包已被抢光啦"));
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/TaoLiJinControllerV2.java
@@ -15,6 +15,7 @@
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.JsonUtil;
import com.google.gson.Gson;
@@ -30,11 +31,14 @@
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.homemodule.SwiperPicture;
import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinDetail.TaoLiJinDetailTypeEnum;
import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinNewbies;
import com.yeshi.fanli.entity.bus.user.UserMoneyExtra;
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;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBriefExtra;
import com.yeshi.fanli.exception.user.UserInfoException;
import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.goods.ShareGoodsService;
@@ -45,8 +49,10 @@
import com.yeshi.fanli.service.inter.monitor.BusinessEmergent110Service;
import com.yeshi.fanli.service.inter.monitor.MonitorService;
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
import com.yeshi.fanli.service.inter.redpack.UserTaoLiJinNewbiesService;
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.tlj.ConfigTaoLiJinService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinDetailService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinOriginService;
@@ -66,6 +72,7 @@
import com.yeshi.fanli.vo.goods.OtherInfo;
import com.yeshi.fanli.vo.goods.taobao.TLJBuyHongBaoVO;
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
import com.yeshi.fanli.vo.redpack.TaoLiJinWinDetailVO;
import com.yeshi.fanli.vo.tlj.ReduceHongBao;
import com.yeshi.fanli.vo.tlj.SpreadHongBao;
import com.yeshi.fanli.vo.tlj.TaoLiJinDetailVO;
@@ -140,6 +147,13 @@
    @Resource
    private SwiperPictureService swiperPictureService;
    @Resource
    private UserTaoLiJinNewbiesService userTaoLiJinNewbiesService;
    @Resource
    private TLJFreeBuyGoodsService tljFreeBuyGoodsService;
    /**
     * 获取淘礼金分享记录
@@ -714,4 +728,124 @@
        out.print(JsonUtil.loadFalseResult(1, "抱歉,推广红包相关功能已下线!"));
    }
    /**
     * 新人红包详情
     *
     * @param acceptData
     * @param uid
     * @param out
     */
    @RequestMapping(value = "getWinDetail", method = RequestMethod.POST)
    public void getWinDetail(AcceptData acceptData, Long uid, PrintWriter out) {
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
            return;
        }
        try {
            TaoLiJinWinDetailVO winDetail = userTaoLiJinNewbiesService.receiveReward(uid);
            if (winDetail == null) {
                out.print(JsonUtil.loadFalseResult(1, "红包已被抢光"));
                return;
            }
            // 2、顶部轮播图
            List<SwiperPicture> oldtopPicList = swiperPictureService.getByBannerCard("redpack_win_detail_banner");
            List<SwiperPicture> topPicList = new ArrayList<>();
            if (oldtopPicList != null && oldtopPicList.size() > 0)
                topPicList.addAll(oldtopPicList);
            JSONObject data = new JSONObject();
            data.put("detail", JsonUtil.getApiCommonGson().toJson(winDetail));
            data.put("banner", JsonUtil.getApiCommonGson().toJson(topPicList));
            out.print(JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
            out.print(JsonUtil.loadFalseResult(1, "红包已被抢光啦"));
        }
    }
    /**
     * 新人免单列表
     * @param acceptData
     * @param uid
     * @param out
     */
    @RequestMapping(value = "gerFreeList")
    public void gerFreeList(String callback, AcceptData acceptData, int page, Long uid, PrintWriter out) {
        if (uid == null || uid <= 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "用户未登录"));
            return;
        }
        String day = TimeUtil.getGernalTime(java.lang.System.currentTimeMillis());
        List<TLJFreeBuyGoods> listFree = tljFreeBuyGoodsService.listByDay(day);
        if (listFree == null) {
            listFree = new ArrayList<TLJFreeBuyGoods>();
        }
        JSONArray array = new JSONArray();
        Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
                .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
        BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
        ConfigParamsDTO paramsDTO = new ConfigParamsDTO(fanLiRate, fanLiRate, Constant.MAX_REWARD_RATE);
        for (TLJFreeBuyGoods freeGoods : listFree) {
            TaoBaoGoodsBrief goods = freeGoods.getGoods();
            if (goods == null)
                continue;
            // 计算券后价  1<= n <= 2
            BigDecimal couplePrice = TaoBaoUtil.getAfterUseCouplePrice(goods);
            if (couplePrice.compareTo(new BigDecimal(1.0)) < 0 && couplePrice.compareTo(new BigDecimal(2.0)) > 0)
                continue;
            GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(goods, paramsDTO);
            // 专属标签
            List<ClientTextStyleVO> labels = new ArrayList<ClientTextStyleVO>();
            labels.add(new ClientTextStyleVO("新人专属", "#FE0014"));
            labels.add(new ClientTextStyleVO("实付0元", "#FF9600"));
            detailVO.setLabels(labels);
            array.add(gson.toJson(detailVO));
        }
        if (page > 1)
            array.clear();
        JSONObject data = new JSONObject();
        data.put("count", array.size());
        data.put("list", array);
        if (page == 1) {
            try {
                data.put("portrait", userInfoService.getUserInfo(uid).getPortrait());
            } catch (UserInfoException e) {
                JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, e.getMsg()));
                return;
            }
            String state = "已过期";
            BigDecimal balance = new BigDecimal(0);
            UserTaoLiJinNewbies winDetail = userTaoLiJinNewbiesService.selectByPrimaryKey(uid);
            if (winDetail != null) {
                balance = winDetail.getMoney() ;
                if (winDetail.getEndTime().getTime() > java.lang.System.currentTimeMillis()) {
                    try {
                        String remaining = DateUtil.dateDiff2(new Date(), winDetail.getEndTime());
                        if (!remaining.equals("0分"))
                            state = "剩" + remaining + "过期";
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
            data.put("state", state);
            data.put("balance","新人红包:" + balance.setScale(2) + "元");
            data.put("rule", configTaoLiJinService.getValueByKey("new_user_free_buy_list_rule"));
        }
        JsonUtil.printMode(out, callback, 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/controller/client/v2/UserOrderControllerV2.java
@@ -113,9 +113,9 @@
        Integer orderType = null;
        if (StringUtil.isNullOrEmpty(type)) {
            orderType = null;
        } else if ("0".equalsIgnoreCase(type)){
        } else if (!"0".equalsIgnoreCase(type)){
            orderType = Integer.parseInt(type); 
        }
        }
        // 筛选时间
        if (slotTime != null) {
@@ -135,12 +135,14 @@
            // 筛选结果顶部统计
            String validMoney = "0.00";
            String invalidMoney = "0.00";
            if (dateType != null) {
                BigDecimal predictMoney = hongBaoV2CountService.getRewardMoneyByDate(uid, dateType, orderType, 1);
            if (page == 1) {
                BigDecimal predictMoney = hongBaoV2CountService.getRewardMoneyByToSearch(uid, dateType, orderType, 1,
                        orderNo, goodsType, startTime, endTime);
                if (predictMoney != null) 
                    validMoney = predictMoney.setScale(2, BigDecimal.ROUND_DOWN).toString();
                
                BigDecimal postSaleMoney = hongBaoV2CountService.getRewardMoneyByDate(uid, dateType, orderType, 2);
                BigDecimal postSaleMoney = hongBaoV2CountService.getRewardMoneyByToSearch(uid, dateType, orderType, 2,
                        orderNo, goodsType, startTime, endTime);
                if (postSaleMoney != null) 
                    invalidMoney = postSaleMoney.setScale(2, BigDecimal.ROUND_DOWN).toString();
                
@@ -167,8 +169,8 @@
            data.put("count", count);
            data.put("result_list", JsonUtil.getApiCommonGson().toJson(list));
            data.put("helpUrl", configService.get("order_list_help"));
            data.put("validMoney", "¥" + validMoney);
            data.put("invalidMoney", "¥" + invalidMoney);
            data.put("validMoney", "¥ " + validMoney);
            data.put("invalidMoney", "¥ " + invalidMoney);
            data.put("findOrderHelpUrl", orderFindUrl);
            out.print(JsonUtil.loadTrueResult(data));
        } catch (CommonOrderException e) {
@@ -318,9 +320,9 @@
            show = hongBaoV2CountService.getHongBaoCount(uid, null) > 0;
        }
        
        BigDecimal selfMoney = hongBaoV2CountService.getRewardMoneyByDate(uid, dateType, 1, null);
        BigDecimal shareMoney = hongBaoV2CountService.getRewardMoneyByDate(uid, dateType, 2, null);
        BigDecimal inviteMoney = hongBaoV2CountService.getRewardMoneyByDate(uid, dateType, 3, null);
        BigDecimal selfMoney = hongBaoV2CountService.getRewardMoneyToCount(uid, dateType, 1);
        BigDecimal shareMoney = hongBaoV2CountService.getRewardMoneyToCount(uid, dateType, 2);
        BigDecimal inviteMoney = hongBaoV2CountService.getRewardMoneyToCount(uid, dateType, 3);
        
        JSONObject data = new JSONObject();
        data.put("show", show);
fanli/src/main/java/com/yeshi/fanli/controller/web/TLJFreeBuyGoodsController.java
New file
@@ -0,0 +1,149 @@
package com.yeshi.fanli.controller.web;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.yeshi.utils.JsonUtil;
import com.google.gson.Gson;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.taobao.TLJFreeBuyGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBriefExtra;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
import com.yeshi.fanli.service.inter.taobao.TLJFreeBuyGoodsService;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailService;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import net.sf.json.JSONArray;
@Controller
@RequestMapping("api/web/v1/tljFreeBuyGoods")
public class TLJFreeBuyGoodsController {
    @Resource
    private TLJFreeBuyGoodsService tljFreeBuyGoodsService;
    @Resource
    private DaTaoKeGoodsDetailService daTaoKeGoodsDetailService;
    @Resource
    private HongBaoManageService hongBaoManageService;
    /**
     * 拉取备选商品
     *
     * @param callback
     * @param acceptData
     * @param kw
     * @param out
     */
    @RequestMapping(value = "listPreGoods", method = RequestMethod.GET)
    public void listPreGoods(String callback, AcceptData acceptData, String kw, Integer page, PrintWriter out) {
        List<TaoBaoGoodsBrief> list = tljFreeBuyGoodsService.listPreGoods(kw, page);
        JSONArray array = new JSONArray();
        Gson gson = new Gson();
        BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
        for (TaoBaoGoodsBrief goods : list) {
            array.add(gson.toJson(TaoBaoUtil.getTaoBaoGoodsBriefExtra(goods, fanLiRate.toString(), null)));
        }
        out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(array)));
    }
    /**
     * 设置免单商品
     *
     * @param callback
     * @param acceptData
     * @param ids
     * @param out
     */
    @RequestMapping(value = "setFreeGoods", method = RequestMethod.GET)
    public void setShareGoods(String callback, AcceptData acceptData, String ids, String day, PrintWriter out) {
        // 大淘客数据,更新
        JSONArray array = JSONArray.fromObject(ids);
        if (StringUtil.isNullOrEmpty(day)) {
            day = TimeUtil.getGernalTime(System.currentTimeMillis() + 1000 * 60 * 60 * 24L, "yyyy-MM-dd");
        }
        int count = 0;
        for (int i = 0; i < array.size(); i++) {
            // 获取商品详情
            TaoBaoGoodsBrief goods = null;
            try {
                goods = TaoKeApiUtil.searchGoodsDetail(array.optLong(i));
            } catch (TaobaoGoodsDownException e) {
                e.printStackTrace();
            }
            if (goods != null && goods.getCouponAmount() != null
                    && goods.getCouponAmount().compareTo(new BigDecimal(0)) > 0) {
                // 券后价  1-2元
                BigDecimal couplePrice = TaoBaoUtil.getAfterUseCouplePrice(goods);
                if (couplePrice.compareTo(new BigDecimal(1.0)) >= 0 && couplePrice.compareTo(new BigDecimal(2.0)) <= 0) {
                    count++;
                    tljFreeBuyGoodsService.addGoods(new TLJFreeBuyGoods(day, goods));
                }
            }
        }
        out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult("设置成功:" + count)));
    }
    /**
     * 获取已经选择的商品
     *
     * @param callback
     * @param acceptData
     * @param day
     * @param out
     */
    @RequestMapping(value = "listSelectedGoods", method = RequestMethod.GET)
    public void listSelectedGoods(String callback, AcceptData acceptData, String day, PrintWriter out) {
        if (StringUtil.isNullOrEmpty(day)) {
            day = TimeUtil.getGernalTime(System.currentTimeMillis() + 1000 * 60 * 60 * 24L, "yyyy-MM-dd");
        }
        // 最多10个商品
        List<TLJFreeBuyGoods> listGoods = tljFreeBuyGoodsService.listByDay(day, 10);
        JSONArray array = new JSONArray();
        BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
        for (TLJFreeBuyGoods sh : listGoods) {
            TaoBaoGoodsBriefExtra item = TaoBaoUtil.getTaoBaoGoodsBriefExtra(sh.getGoods(), fanLiRate.toString(), null);
            if (!StringUtil.isNullOrEmpty(item.getPictUrlWhite()))
                item.setPictUrl(item.getPictUrlWhite());
            item.setAuctionUrl(sh.getId());
            array.add(item);
        }
        out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(array)));
    }
    /**
     * 删除选择的商品
     *
     * @param callback
     * @param acceptData
     * @param ids
     * @param out
     */
    @RequestMapping(value = "deleteSelectedGoods", method = RequestMethod.GET)
    public void deleteSelectedGoods(String callback, AcceptData acceptData, String ids, PrintWriter out) {
        JSONArray array = JSONArray.fromObject(ids);
        for (int i = 0; i < array.size(); i++) {
            String id = array.optString(i);
            tljFreeBuyGoodsService.deleteById(id);
        }
        out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult("")));
    }
}
fanli/src/main/java/com/yeshi/fanli/dao/mongodb/redpack/RedPackWinNewUserDao.java
File was deleted
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/HongBaoV2CountMapper.java
@@ -219,7 +219,7 @@
     * @return
     */
    BigDecimal getRewardMoneyByDate(@Param("uid") Long uid, @Param("day")Integer dateType, 
            @Param("type") Integer hbType, @Param("orderState") Integer orderState);
            @Param("type") Integer hbType, @Param("orderState") Integer orderState,
            @Param("orderNo") String orderNo, @Param("source") Integer source,
            @Param("startTime") String startTime, @Param("endTime") String endTime);
}
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/tlj/UserTaoLiJinNewbiesMapper.java
New file
@@ -0,0 +1,43 @@
package com.yeshi.fanli.dao.mybatis.tlj;
import java.math.BigDecimal;
import org.apache.ibatis.annotations.Param;
import com.yeshi.fanli.dao.BaseMapper;
import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinNewbies;
public interface UserTaoLiJinNewbiesMapper extends BaseMapper<UserTaoLiJinNewbies> {
    /**
     * 减掉用户红包金额
     * @param id
     * @param money
     */
    void subMoney(@Param("id") long id, @Param("money") BigDecimal money);
    /**
     *   增加用户红包金额
     * @param id
     * @param money
     */
    void addMoney(@Param("id") long id, @Param("money") BigDecimal money);
    /**
     * 查询用于更新余额-锁定
     * @param id
     * @return
     */
    UserTaoLiJinNewbies selectForUpdate(long id);
    /**
     * 重置红包
     * @param id
     * @return
     */
    void resetMoney(long id);
}
fanli/src/main/java/com/yeshi/fanli/dao/taobao/TLJFreeBuyGoodsDao.java
New file
@@ -0,0 +1,59 @@
package com.yeshi.fanli.dao.taobao;
import java.util.List;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Repository;
import com.yeshi.fanli.dao.MongodbBaseDao;
import com.yeshi.fanli.entity.taobao.TLJFreeBuyGoods;
@Repository
public class TLJFreeBuyGoodsDao extends MongodbBaseDao<TLJFreeBuyGoods> {
    public List<TLJFreeBuyGoods> listByDay(String day, int page, int pageSize) {
        Query query = new Query();
        Criteria ca = Criteria.where("day").is(day);
        query.addCriteria(ca);
        query.limit(pageSize);
        query.skip((page - 1) * pageSize).with(new Sort(Sort.Direction.DESC, "updateTime"));
        return mongoTemplate.find(query, TLJFreeBuyGoods.class);
    }
    public long countByDay(String day) {
        Query query = new Query();
        Criteria ca = Criteria.where("day").is(day);
        query.addCriteria(ca);
        return mongoTemplate.count(query, TLJFreeBuyGoods.class);
    }
    public List<TLJFreeBuyGoods> listByGoodsId(Long auctionid) {
        Query query = new Query();
        Criteria ca = Criteria.where("goods.auctionId").is(auctionid);
        query.addCriteria(ca);
        return mongoTemplate.find(query, TLJFreeBuyGoods.class);
    }
    public TLJFreeBuyGoods selectByAuctionIdAndDay(Long auctionId, String day) {
        Query query = new Query();
        Criteria ca = Criteria.where("goods.auctionId").is(auctionId).and("day").is(day);
        query.addCriteria(ca);
        return mongoTemplate.findOne(query, TLJFreeBuyGoods.class);
    }
    /**
     * 根据商品ID删除
     *
     * @param auctionId
     */
    public void deleteByGoodsId(Long auctionId) {
        Query query = new Query();
        Criteria ca = Criteria.where("goods.auctionId").is(auctionId);
        query.addCriteria(ca);
        mongoTemplate.findAndRemove(query, TLJFreeBuyGoods.class);
    }
}
fanli/src/main/java/com/yeshi/fanli/entity/bus/tlj/UserTaoLiJinNewbies.java
New file
@@ -0,0 +1,84 @@
package com.yeshi.fanli.entity.bus.tlj;
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_user_taolijin_newbies")
public class UserTaoLiJinNewbies{
    // 用户id
    @Column(name = "wnu_id")
    private Long id;
    // 领取金额
    @Column(name = "wnu_money")
    private BigDecimal money;
    // 领取次数
    @Column(name = "wnu_num")
    private Integer num;
    @Column(name = "wnu_end_time")
    private Date endTime;
    @Column(name = "wnu_create_time")
    private Date createTime;
    @Column(name = "wnu_update_time")
    private Date updateTime;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public BigDecimal getMoney() {
        return money;
    }
    public void setMoney(BigDecimal money) {
        this.money = money;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public Integer getNum() {
        return num;
    }
    public void setNum(Integer num) {
        this.num = num;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public Date getEndTime() {
        return endTime;
    }
    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }
}
fanli/src/main/java/com/yeshi/fanli/entity/redpack/RedPackWinNewUser.java
File was deleted
fanli/src/main/java/com/yeshi/fanli/entity/taobao/TLJFreeBuyGoods.java
New file
@@ -0,0 +1,82 @@
package com.yeshi.fanli.entity.taobao;
import java.util.Date;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
/**
 * 新人免单商品
 *
 * @author Administrator
 *
 */
@Document(collection = "TLJFreeBuyGoods")
public class TLJFreeBuyGoods {
    @Id
    private String id;
    @Field
    private TaoBaoGoodsBrief goods;
    @Field
    private String day;
    @Field
    private Integer weight;
    @Field
    private Date updateTime;
    public TLJFreeBuyGoods() {}
    public TLJFreeBuyGoods(String day, TaoBaoGoodsBrief goods) {
        this.day = day;
        this.goods = goods;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public TaoBaoGoodsBrief getGoods() {
        return goods;
    }
    public void setGoods(TaoBaoGoodsBrief goods) {
        this.goods = goods;
    }
    public String getDay() {
        return day;
    }
    public void setDay(String day) {
        this.day = day;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public Integer getWeight() {
        return weight;
    }
    public void setWeight(Integer weight) {
        this.weight = weight;
    }
}
fanli/src/main/java/com/yeshi/fanli/exception/tlj/UserTaoLiJinNewbiesException.java
New file
@@ -0,0 +1,19 @@
package com.yeshi.fanli.exception.tlj;
import com.yeshi.fanli.exception.BaseException;
public class UserTaoLiJinNewbiesException  extends BaseException {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    public UserTaoLiJinNewbiesException(int code, String msg) {
        super(code, msg);
    }
    public UserTaoLiJinNewbiesException() {
        super();
    }
}
fanli/src/main/java/com/yeshi/fanli/job/TaoLiJinJob.java
@@ -4,28 +4,28 @@
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Random;
import javax.annotation.Resource;
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;
import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig;
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;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinGiveRecordService;
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;
@@ -35,9 +35,6 @@
    @Resource
    private UserTaoLiJinReportService userTaoLiJinReportService;
    @Resource
    private ShareHotGoodsService shareHotGoodsService;
    @Resource
    private TLJBuyGoodsService tljBuyGoodsService;
@@ -54,28 +51,10 @@
    @Resource
    private UserTaoLiJinOriginService userTaoLiJinOriginService;
    /**
     * 每天凌晨过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++;
            }
        }
    }
    @Resource
    private TLJFreeBuyGoodsService tljFreeBuyGoodsService;
    /**
     * 每天凌晨5点过10分钟验证
@@ -169,4 +148,50 @@
        addTLJBuyGoods(list, day);
    }
    /**
     * 每天凌晨23点过1分开始爬取
     */
    @Scheduled(cron = "0 1 23 * * ? ")
    public void autoAddTLJFreeBuyGoods() {
         if (!Constant.IS_TASK)
             return;
        String day = TimeUtil.getGernalTime(System.currentTimeMillis() + 1000 * 60 * 60 * 24L, "yyyy-MM-dd");
        LogHelper.test("免单商品开始选品" + day);
        // 是否已预选
        List<TLJFreeBuyGoods> listSelect = tljFreeBuyGoodsService.listByDay(day);
        if (listSelect != null && listSelect.size() > 0)
            return;
        int count = 0;
        int maxCount = 10;
        for (int page = 1; page <= 10; page ++) {
            List<TaoBaoGoodsBrief> list = tljFreeBuyGoodsService.listPreGoods("", page);
            if (list == null || list.size() == 0)
                break;
            while (list.size() > 0) {
                if (count >= maxCount)
                    break;
                Random random = new Random();
                int n = random.nextInt(list.size());
                TaoBaoGoodsBrief goods = list.get(n);
                if (goods.getCouponAmount() != null && goods.getCouponAmount().compareTo(new BigDecimal(0)) > 0) {
                    BigDecimal couplePrice = TaoBaoUtil.getAfterUseCouplePrice(goods);
                    if (couplePrice.compareTo(new BigDecimal(1.0)) >= 0 && couplePrice.compareTo(new BigDecimal(2.0)) <= 0) {
                        tljFreeBuyGoodsService.addGoods(new TLJFreeBuyGoods(day, goods));
                        count ++;
                    }
                }
                list.remove(n);
            }
            if (count >= maxCount)
                break;
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/mapping/hongbao/HongBaoV2CountMapper.xml
@@ -198,7 +198,7 @@
    </select>
    
    <select id="getHongBaoCount" resultType="Long">
        SELECT IFNULL(count(v2.`hb_id`),0) FROM `yeshi_ec_hongbao_v2` v
        SELECT IFNULL(count(v.`hb_id`),0) FROM `yeshi_ec_hongbao_v2` v
        WHERE v.`hb_uid`=#{uid}
        <if test="type == 1"> <!-- 自购订单 -->
            AND (v.hb_type =1 or v.hb_type =2)
@@ -452,6 +452,7 @@
        <if test="day == 4 and type == 1"> <!-- 上月产生自购 -->
            AND PERIOD_DIFF(DATE_FORMAT(NOW(), '%Y%m'), DATE_FORMAT(co.`co_third_create_time`, '%Y%m')) = 1
        </if>
        <if test="orderState ==  1"> <!-- 有效订单: 整个订单有效 -->
            AND <![CDATA[co.`co_state` <> 3]]>
            AND (co.co_state_whole_order = 1 or co.co_state_whole_order = 2)
@@ -459,6 +460,21 @@
        <if test="orderState ==  2"> <!-- 维权订单 -->
            AND co.co_state = 3
        </if>
        <!-- 订单号查询 -->
        <if test="orderNo != null and orderNo !='' ">AND co.co_order_no = #{orderNo}</if>
        <!-- 来源 -->
        <if test="source != null">AND co.co_source_type = #{source}</if>
        <!-- 时间段筛选 -->
        <if test="startTime != null and startTime != '' ">
            AND <![CDATA[co.co_third_create_time >= #{startTime}]]>
        </if>
        <if test="endTime != null and endTime != '' ">
            AND <![CDATA[co.co_third_create_time <= #{endTime}]]>
        </if>
    </select>
</mapper>
fanli/src/main/java/com/yeshi/fanli/mapping/tlj/UserTaoLiJinNewbiesMapper.xml
New file
@@ -0,0 +1,69 @@
<?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.tlj.UserTaoLiJinNewbiesMapper">
  <resultMap id="BaseResultMap" type="com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinNewbies">
    <id column="wnu_id" property="id" jdbcType="BIGINT"/>
    <result column="wnu_money" property="money" jdbcType="DECIMAL"/>
    <result column="wnu_num" property="num" jdbcType="INTEGER"/>
    <result column="wnu_end_time" property="endTime" jdbcType="TIMESTAMP"/>
    <result column="wnu_create_time" property="createTime" jdbcType="TIMESTAMP"/>
    <result column="wnu_update_time" property="updateTime" jdbcType="TIMESTAMP"/>
  </resultMap>
  <sql id="Base_Column_List">wnu_id,wnu_money,wnu_num,wnu_end_time,wnu_create_time,wnu_update_time</sql>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long">select
    <include refid="Base_Column_List"/>from yeshi_ec_user_taolijin_new_user where wnu_id = #{id,jdbcType=BIGINT}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from yeshi_ec_user_taolijin_new_user where wnu_id = #{id,jdbcType=BIGINT}</delete>
  <insert id="insert" parameterType="com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinNewbies" useGeneratedKeys="true" keyProperty="id">insert into yeshi_ec_user_taolijin_new_user (wnu_id,wnu_money,wnu_num,wnu_end_time,wnu_create_time,wnu_update_time) values (#{id,jdbcType=BIGINT},#{money,jdbcType=DECIMAL},#{num,jdbcType=INTEGER},#{endTime,jdbcType=TIMESTAMP},#{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP})</insert>
  <insert id="insertSelective" parameterType="com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinNewbies" useGeneratedKeys="true" keyProperty="id">insert into yeshi_ec_user_taolijin_new_user
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">wnu_id,</if>
      <if test="money != null">wnu_money,</if>
      <if test="num != null">wnu_num,</if>
      <if test="endTime != null">wnu_end_time,</if>
      <if test="createTime != null">wnu_create_time,</if>
      <if test="updateTime != null">wnu_update_time,</if>
    </trim>values
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">#{id,jdbcType=BIGINT},</if>
      <if test="money != null">#{money,jdbcType=DECIMAL},</if>
      <if test="num != null">#{num,jdbcType=INTEGER},</if>
      <if test="endTime != null">#{endTime,jdbcType=TIMESTAMP},</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.bus.tlj.UserTaoLiJinNewbies">update yeshi_ec_user_taolijin_new_user set wnu_money = #{money,jdbcType=DECIMAL},wnu_num = #{num,jdbcType=INTEGER},wnu_end_time = #{endTime,jdbcType=TIMESTAMP},wnu_create_time = #{createTime,jdbcType=TIMESTAMP},wnu_update_time = #{updateTime,jdbcType=TIMESTAMP} where wnu_id = #{id,jdbcType=BIGINT}</update>
  <update id="updateByPrimaryKeySelective" parameterType="com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinNewbies">update yeshi_ec_user_taolijin_new_user
    <set>
      <if test="money != null">wnu_money=#{money,jdbcType=DECIMAL},</if>
      <if test="num != null">wnu_num=#{num,jdbcType=INTEGER},</if>
      <if test="endTime != null">wnu_end_time=#{endTime,jdbcType=TIMESTAMP},</if>
      <if test="createTime != null">wnu_create_time=#{createTime,jdbcType=TIMESTAMP},</if>
      <if test="updateTime != null">wnu_update_time=#{updateTime,jdbcType=TIMESTAMP},</if>
    </set> where wnu_id = #{id,jdbcType=BIGINT}
  </update>
   <update id="subMoney">
      update yeshi_ec_user_taolijin_new_user SET wnu_money = wnu_money - #{money,jdbcType=DECIMAL},wnu_update_time = NOW()
      WHERE wnu_id = #{id,jdbcType=BIGINT}
  </update>
  <update id="addMoney">
      UPDATE yeshi_ec_user_taolijin_new_user SET wnu_money = wnu_money + #{money,jdbcType=DECIMAL}, wnu_num = wnu_num + 1,wnu_update_time = NOW()
      WHERE wnu_id = #{id,jdbcType=BIGINT}
  </update>
  <update id="resetMoney">
      UPDATE yeshi_ec_user_taolijin_new_user SET wnu_money = 0,wnu_update_time = NOW()
      WHERE wnu_id = #{id,jdbcType=BIGINT}
  </update>
  <select id="selectForUpdate" resultMap="BaseResultMap" parameterType="java.lang.Long">
       SELECT <include refid="Base_Column_List"/> FROM yeshi_ec_user_taolijin_new_user
       WHERE wnu_id = #{id,jdbcType=BIGINT} FOR UPDATE
  </select>
</mapper>
fanli/src/main/java/com/yeshi/fanli/service/impl/count/HongBaoV2CountServiceImpl.java
@@ -8,6 +8,7 @@
import javax.annotation.Resource;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;
import org.yeshi.utils.DateUtil;
@@ -344,8 +345,15 @@
    }
    
    @Override
    public BigDecimal getRewardMoneyByDate(Long uid, Integer dateType, Integer hbType, Integer orderState) {
        return hongBaoV2CountMapper.getRewardMoneyByDate(uid, dateType, hbType, orderState);
    public BigDecimal getRewardMoneyToCount(Long uid, Integer dateType, Integer hbType) {
        return hongBaoV2CountMapper.getRewardMoneyByDate(uid, dateType, hbType, null, null, null, null, null);
    }
    @Override
    public BigDecimal getRewardMoneyByToSearch(Long uid, Integer dateType, Integer hbType, Integer orderState, String orderNo, Integer source, String startTime,  String endTime) {
        return hongBaoV2CountMapper.getRewardMoneyByDate(uid, dateType, hbType, orderState, orderNo, source,
                startTime, endTime);
    }
    
}
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/redpack/RedPackWinNewUserServiceImpl.java
File was deleted
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TLJFreeBuyGoodsServiceImpl.java
New file
@@ -0,0 +1,176 @@
package com.yeshi.fanli.service.impl.taobao;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.stereotype.Service;
import com.yeshi.fanli.dao.taobao.TLJFreeBuyGoodsDao;
import com.yeshi.fanli.dto.dataoke.DaTaoKeGoodsResult;
import com.yeshi.fanli.entity.taobao.TLJFreeBuyGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2;
import com.yeshi.fanli.service.inter.goods.TaoBaoGoodsBriefService;
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
import com.yeshi.fanli.service.inter.taobao.TLJFreeBuyGoodsService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailService;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailV2Service;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TaoBaoConstant;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.dataoke.DaTaoKeApiUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
@Service
public class TLJFreeBuyGoodsServiceImpl implements TLJFreeBuyGoodsService {
    @Resource
    private TLJFreeBuyGoodsDao tljFreeBuyGoodsDao;
    @Resource
    private TaoBaoGoodsBriefService taoBaoGoodsBriefService;
    @Resource
    private TaoBaoGoodsUpdateService taoBaoGoodsUpdateService;
    @Resource
    private DaTaoKeGoodsDetailService daTaoKeGoodsDetailService;
    @Resource
    private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service;
    @Resource
    private HongBaoManageService hongBaoManageService;
    @Resource
    private EhCacheCacheManager ehCacheCacheManager;
    @Override
    public void addGoods(TLJFreeBuyGoods goods) {
        if (goods == null || StringUtil.isNullOrEmpty(goods.getDay()) || goods.getGoods() == null)
            return;
        goods.setId(StringUtil.Md5(goods.getDay() + "#" + goods.getGoods().getAuctionId()));
        if (goods.getWeight() == null)
            goods.setWeight(1);
        if (goods.getUpdateTime() == null)
            goods.setUpdateTime(new Date());
        tljFreeBuyGoodsDao.save(goods);
    }
    @Cacheable(value = "commonContentCache", key = "'tljFreeBuy-listByDay'+#day")
    @Override
    public List<TLJFreeBuyGoods> listByDay(String day) {
        List<TLJFreeBuyGoods> list = listByDay(day, 10);
        if (list != null)
            for (int i = 0; i < list.size(); i++) {
                // 过滤淘礼金大于10块钱的
                BigDecimal hongBao = TaoBaoUtil.getGoodsHongBaoMoney(list.get(i).getGoods(),
                        TaoBaoConstant.OWN_BUY_WITHOUT_FANLI_RATE);
                if (hongBao.compareTo(new BigDecimal(10)) > 0) {
                    list.remove(i--);
                }
            }
        List<TLJFreeBuyGoods> goodsList = new ArrayList<>();
        if (list != null && list.size() > 0)
            goodsList.addAll(list);
        Collections.shuffle(goodsList);
        Comparator<TLJFreeBuyGoods> cm = new Comparator<TLJFreeBuyGoods>() {
            @Override
            public int compare(TLJFreeBuyGoods o1, TLJFreeBuyGoods o2) {
                return o1.getWeight() != null && o2.getWeight() != null ? o2.getWeight() - o1.getWeight() : 0;
            }
        };
        Collections.sort(goodsList, cm);
        return goodsList;
    }
    @Override
    public List<TLJFreeBuyGoods> listByDay(String day, int count) {
        List<TLJFreeBuyGoods> list = tljFreeBuyGoodsDao.listByDay(day, 1, count);
        List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
        if (list != null) {
            for (TLJFreeBuyGoods shg : list)
                goodsList.add(shg.getGoods());
        }
        // 过滤基本商品信息
        goodsList = taoBaoGoodsUpdateService.filterImportantTaoBaoGoods(goodsList);
        // 过滤下线商品
        goodsList = taoBaoGoodsBriefService.filterOffLineGoods(goodsList);
        // 添加大淘客信息
        goodsList = daTaoKeGoodsDetailService.filterTaoBaoGoods(goodsList);
        Map<Long, TaoBaoGoodsBrief> goodsMap = new HashMap<>();
        if (goodsList != null)
            for (TaoBaoGoodsBrief g : goodsList)
                goodsMap.put(g.getAuctionId(), g);
        for (int j = 0; j < list.size(); j++) {
            if (goodsMap.get(list.get(j).getGoods().getAuctionId()) == null) {
                list.remove(j);
                j--;
            }
        }
        // 加入更新队列
        //
        try {
            for (TLJFreeBuyGoods tljGoods : list)
                if (tljGoods != null && tljGoods.getGoods() != null && tljGoods.getGoods().getAuctionId() != null)
                    taoBaoGoodsUpdateService.addUpdateQueueAsync(tljGoods.getGoods().getAuctionId());
        } catch (Exception e) {
        }
        return list;
    }
    @Override
    public void deleteById(String id) {
        tljFreeBuyGoodsDao.delete(id);
    }
    @Override
    public void deleteByGoodsId(Long auctionId) {
        tljFreeBuyGoodsDao.deleteByGoodsId(auctionId);
        // 清除列表缓存
        ehCacheCacheManager.getCache("commonContentCache")
                .evict("TLJFreeBuy-listByDay" + TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd"));
    }
    @Override
    public TLJFreeBuyGoods selectByAuctionIdAndDay(Long auctionId, String day) {
        return tljFreeBuyGoodsDao.selectByAuctionIdAndDay(auctionId, day);
    }
    @Override
    public List<TaoBaoGoodsBrief> listPreGoods(String key ,int page) {
        List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
        // 大淘客筛选: 券后价 1-2区间 、综合排序
        DaTaoKeGoodsResult result = DaTaoKeApiUtil.search(key, null, new BigDecimal(1), new BigDecimal(2), 1, page, 100, 0);
        if (result != null && result.getGoodsList() != null) {
            for (DaTaoKeDetailV2 v2 : result.getGoodsList())
                goodsList.add(TaoBaoUtil.convert(v2));
        }
        return goodsList;
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TLJFreeBuyGoodsUpdateServiceImpl.java
New file
@@ -0,0 +1,87 @@
package com.yeshi.fanli.service.impl.taobao;
import java.math.BigDecimal;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.stereotype.Service;
import com.yeshi.fanli.dao.taobao.TLJFreeBuyGoodsDao;
import com.yeshi.fanli.entity.taobao.TLJFreeBuyGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
import com.yeshi.fanli.service.inter.taobao.TLJFreeBuyGoodsUpdateService;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
@Service
public class TLJFreeBuyGoodsUpdateServiceImpl implements TLJFreeBuyGoodsUpdateService {
    @Resource
    private TLJFreeBuyGoodsDao tljFreeBuyGoodsDao;
    @Resource
    private EhCacheCacheManager ehCacheCacheManager;
    @Resource
    private HongBaoManageService hongBaoManageService;
    @Override
    public void updateGoods(TaoBaoGoodsBrief goods) {
        if (goods == null)
            return;
        List<TLJFreeBuyGoods> list = tljFreeBuyGoodsDao.listByGoodsId(goods.getAuctionId());
        if (list != null) {
            // 计算券后价  1<= n <= 2
            BigDecimal couplePrice = TaoBaoUtil.getAfterUseCouplePrice(goods);
            if (couplePrice.compareTo(new BigDecimal(1.0)) < 0 && couplePrice.compareTo(new BigDecimal(2.0)) > 0) {
                for (TLJFreeBuyGoods tljGoods : list) {
                    tljFreeBuyGoodsDao.delete(tljGoods.getId());
                }
                return;
            }
            for (TLJFreeBuyGoods TLJBuyGoods : list) {
                if (goods.getCouponInfo() == null)
                    goods.setCouponInfo("");
                if (goods.getCouponAmount() == null)
                    goods.setCouponAmount(new BigDecimal(0));
                // 判断 券信息 价格信息 返利比例信息是否改变
                boolean change = false;
                if (goods.getZkPrice().compareTo(TLJBuyGoods.getGoods().getZkPrice()) != 0)
                    change = true;
                if (goods.getCouponAmount().compareTo(TLJBuyGoods.getGoods().getCouponAmount()) != 0)
                    change = true;
                if (!goods.getCouponInfo().equalsIgnoreCase(TLJBuyGoods.getGoods().getCouponInfo()))
                    change = true;
                if (goods.getTkRate().compareTo(TLJBuyGoods.getGoods().getTkRate()) != 0)
                    change = true;
                if (change) {
                    // 清除列表缓存
                    ehCacheCacheManager.getCache("commonContentCache").evict(
                            "TLJFreeBuy-listByDay" + TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd"));
                }
                // 更新券信息 ,价格信息,销量信息
                TLJBuyGoods.getGoods().setZkPrice(goods.getZkPrice());
                TLJBuyGoods.getGoods().setCouponAmount(goods.getCouponAmount());
                TLJBuyGoods.getGoods().setCouponInfo(goods.getCouponInfo());
                TLJBuyGoods.getGoods().setCouponEffectiveEndTime(goods.getCouponEffectiveEndTime());
                TLJBuyGoods.getGoods().setCouponEffectiveStartTime(goods.getCouponEffectiveStartTime());
                TLJBuyGoods.getGoods().setCouponLeftCount(goods.getCouponLeftCount());
                TLJBuyGoods.getGoods().setCouponStartFee(goods.getCouponStartFee());
                TLJBuyGoods.getGoods().setCouponTotalCount(goods.getCouponTotalCount());
                TLJBuyGoods.getGoods().setBiz30day(goods.getBiz30day());
                TLJBuyGoods.getGoods().setTkRate(goods.getTkRate());
                TLJBuyGoods.getGoods().setId(goods.getId());
                TLJBuyGoods.getGoods().setAuctionId(goods.getAuctionId());
                tljFreeBuyGoodsDao.save(TLJBuyGoods);
            }
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoGoodsUpdateServiceImpl.java
@@ -27,6 +27,7 @@
import com.yeshi.fanli.service.inter.lable.QualityFactoryGoodsUpdateService;
import com.yeshi.fanli.service.inter.taobao.ShareHotGoodsService;
import com.yeshi.fanli.service.inter.taobao.TLJBuyGoodsUpdateService;
import com.yeshi.fanli.service.inter.taobao.TLJFreeBuyGoodsUpdateService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService;
import com.yeshi.fanli.util.CMQManager;
import com.yeshi.fanli.util.StringUtil;
@@ -60,6 +61,9 @@
    @Resource
    private TaoBaoGoodsUpdateDao taoBaoGoodsUpdateDao;
    @Resource
    private TLJFreeBuyGoodsUpdateService tljFreeBuyGoodsUpdateService;
    @Override
    public void startUpdate() {
@@ -148,6 +152,9 @@
        // 更新自购立减库商品
        tljBuyGoodsUpdateService.updateGoods(goods);
        // 更新新人免单库商品
        tljFreeBuyGoodsUpdateService.updateGoods(goods);
        // 总要商品更新
        updateImplTBGoods(goods);
fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinNewbiesServiceImpl.java
New file
@@ -0,0 +1,381 @@
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
public class UserTaoLiJinNewbiesServiceImpl implements UserTaoLiJinNewbiesService {
    @Resource
    private UserTaoLiJinNewbiesMapper userTaoLiJinNewbiesMapper;
    @Resource
    private ConfigTaoLiJinService configTaoLiJinService;
    @Resource
    private UserInfoExtraService userInfoExtraService;
    @Resource
    private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
    @Resource
    private DeviceActiveService deviceActiveService;
    @Resource
    private JumpDetailV2Service jumpDetailV2Service;
    @Resource(name = "taskExecutor")
    private TaskExecutor executor;
    @Resource
    private TLJFreeBuyGoodsService tljFreeBuyGoodsService;
    @Resource
    private UserTaoLiJinDetailService userTaoLiJinDetailService;
    @Resource
    private TaoBaoBuyRelationMapService taoBaoBuyRelationMapService;
    @Override
    public boolean verifyHasReward(Long uid, String device) {
        try {
            if (StringUtil.isNullOrEmpty(device) && (uid == null || uid <= 0))
                return false;
            if (uid == null || uid <= 0) {
                DeviceActive deviceActive = deviceActiveService.getFirstActiveInfo(device);
                if (deviceActive == null)
                    return true; // 新设备弹出
                Date nowTime = new Date();
                Date createTime = deviceActive.getCreateTime();
                int days = DateUtil.daysBetween2(createTime, nowTime);
                if (days >= Constant.TLJ_NEW_USER_DAYS) {
                    return false; // 已经超出设置天数
                }
                return true; // 未超过时间
            }
            UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
            if (userInfoExtra == null || userInfoExtra.getFirstLoginTime() == null)
                return false;
            Date nowTime = new Date();
            Date firstLoginTime = userInfoExtra.getFirstLoginTime();
            int days = DateUtil.daysBetween2(firstLoginTime, nowTime);
            if (days >= Constant.TLJ_NEW_USER_DAYS)
                return false; // 已经超出设置天数
            UserTaoLiJinNewbies redPackWin = userTaoLiJinNewbiesMapper.selectByPrimaryKey(uid);
            if (redPackWin != null) {
                if (redPackWin.getMoney().compareTo(Constant.TLJ_NEW_USER_MONEY) >= 0)
                    return false; // 已领取完
                Date updateTime = redPackWin.getUpdateTime();
                int daysNum = DateUtil.daysBetween2(updateTime, nowTime);
                if (daysNum == 0)
                    return false; // 今日已领取
                Integer num = redPackWin.getNum();
                if (num >= Constant.TLJ_NEW_USER_DAYS)
                    return false; // 领取次数超限
            }
            return true;
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
        }
        return false;
    }
    @RequestSerializableByKeyService(key = "#uid")
    @Transactional(rollbackFor = Exception.class)
    @Override
    public TaoLiJinWinDetailVO receiveReward(Long uid) throws Exception {
        if (uid == null || uid <= 0)
            return null; // 未登录弹出
        UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
        if (userInfoExtra == null || userInfoExtra.getFirstLoginTime() == null)
            return null;
        Date nowTime = new Date();
        Date firstLoginTime = userInfoExtra.getFirstLoginTime();
        int days = DateUtil.daysBetween2(firstLoginTime, nowTime);
        if (days >= Constant.TLJ_NEW_USER_DAYS)
            return null; // 已经超出设置天数
        UserTaoLiJinNewbies redPackWin = userTaoLiJinNewbiesMapper.selectForUpdate(uid);
        if (redPackWin != null) {
            if (redPackWin.getMoney().compareTo(Constant.TLJ_NEW_USER_MONEY) >= 0)
                return null; // 已领取完
            Date updateTime = redPackWin.getUpdateTime();
            int daysNum = DateUtil.daysBetween2(updateTime, nowTime);
            if (daysNum == 0)
                return null; // 今日已领取
            Integer num = redPackWin.getNum();
            if (num >= Constant.TLJ_NEW_USER_DAYS)
                return null; // 领取次数超限
        }
        BigDecimal money = null;
        if (redPackWin == null) { // 第一次
            if (days == Constant.TLJ_NEW_USER_DAYS - 1) {  // 最后一天
                money = Constant.TLJ_NEW_USER_MONEY;
            } else { // 计算随机奖励
                double randomNum = Constant.TLJ_NEW_USER_MIN +  Math.random() * (Constant.TLJ_NEW_USER_MAX - Constant.TLJ_NEW_USER_MIN);
                randomNum = randomNum/100;
                BigDecimal rate = new BigDecimal(randomNum).setScale(2, BigDecimal.ROUND_DOWN);
                money = MoneyBigDecimalUtil.mul(Constant.TLJ_NEW_USER_MONEY,rate);
            }
        } else if (days == Constant.TLJ_NEW_USER_DAYS - 1) { // 最后一天
            money = MoneyBigDecimalUtil.sub(Constant.TLJ_NEW_USER_MONEY, redPackWin.getMoney());
        } else { // 计算剩余随机奖励 10%-25%
            double randomNum = 10 +  Math.random() * (20 - 10);
            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);
            redPackWin.setMoney(money);
            redPackWin.setEndTime(endDate);
            redPackWin.setCreateTime(nowTime);
            redPackWin.setUpdateTime(nowTime);
            userTaoLiJinNewbiesMapper.insertSelective(redPackWin);
        } else {
            userTaoLiJinNewbiesMapper.addMoney(uid, money);
            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"));
        TaoLiJinWinDetailVO winDetailVO = new TaoLiJinWinDetailVO();
        winDetailVO.setTitle("新人红包");
        winDetailVO.setBless("恭喜你!已领" + num + "/" + Constant.TLJ_NEW_USER_DAYS + "次");
        winDetailVO.setMoney(money.toString());
        winDetailVO.setDesc("已领取:" + balance + "元");
        winDetailVO.setTips(configTaoLiJinService.getValueByKey("new_user_win_tips"));
        winDetailVO.setParams(map.toString());
        winDetailVO.setJumpDetail(jumpDetailV2Service.getByTypeCache("web"));
        winDetailVO.setLogo(Constant.systemCommonConfig.getDefaultPortrait());
        winDetailVO.setLogoLight(Constant.systemCommonConfig.getDefaultPortrait());
        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/count/HongBaoV2CountService.java
@@ -238,7 +238,7 @@
     * @param hbType
     * @return
     */
    public BigDecimal getRewardMoneyByDate(Long uid, Integer dateType, Integer hbType, Integer orderState);
    public BigDecimal getRewardMoneyToCount(Long uid, Integer dateType, Integer hbType);
    /**
     * 统计红包个数
@@ -246,6 +246,21 @@
     * @param type 红包类型
     * @return
     */
    public long getHongBaoCount(Long uid, Integer type);
    public long getHongBaoCount(Long uid, Integer type);
    /**
     * 筛选结果页顶部统计
     * @param uid
     * @param dateType
     * @param hbType
     * @param orderState
     * @param orderNo
     * @param source
     * @param startTime
     * @param endTime
     * @return
     */
    public BigDecimal getRewardMoneyByToSearch(Long uid, Integer dateType, Integer hbType, Integer orderState, String orderNo,
            Integer source, String startTime, String endTime);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/redpack/RedPackWinNewUserService.java
File was deleted
fanli/src/main/java/com/yeshi/fanli/service/inter/redpack/UserTaoLiJinNewbiesService.java
New file
@@ -0,0 +1,41 @@
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 {
    /**
     * 领取红包
     * @param uid
     * @return
     * @throws Exception
     */
    public TaoLiJinWinDetailVO receiveReward(Long uid) throws Exception;
    /**
     * 验证是否可领取红包
     * @param uid
     * @return
     */
    public boolean verifyHasReward(Long uid, String device);
    /**
     * 查询新人红包
     * @param uid
     * @return
     */
    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/taobao/TLJFreeBuyGoodsService.java
New file
@@ -0,0 +1,72 @@
package com.yeshi.fanli.service.inter.taobao;
import java.util.List;
import com.yeshi.fanli.entity.taobao.TLJFreeBuyGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
/**
 * 红包免单商品
 *
 * @author Administrator
 *
 */
public interface TLJFreeBuyGoodsService {
    /**
     * 添加自购立减商品
     *
     * @param goods
     */
    public void addGoods(TLJFreeBuyGoods goods);
    /**
     * 根据日期查找
     *
     * @param day
     * @return
     */
    public List<TLJFreeBuyGoods> listByDay(String day);
    /**
     * 根据appkey与日期查找
     *
     * @param appKey
     * @param day
     * @param count
     * @return
     */
    public List<TLJFreeBuyGoods> listByDay(String day, int count);
    /**
     * 根据主键删除
     *
     * @param id
     */
    public void deleteById(String id);
    /**
     * 根据商品id删除
     *
     * @param goodsId
     */
    public void deleteByGoodsId(Long goodsId);
    /**
     * 根据商品ID和日期查询
     *
     * @param auctionId
     * @param day
     * @return
     */
    public TLJFreeBuyGoods selectByAuctionIdAndDay(Long auctionId, String day);
    /**
     * 预选商品
     * @param page
     * @return
     */
    public List<TaoBaoGoodsBrief> listPreGoods(String key, int page);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/TLJFreeBuyGoodsUpdateService.java
New file
@@ -0,0 +1,19 @@
package com.yeshi.fanli.service.inter.taobao;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
/**
 * 新人免单商品
 *
 * @author Administrator
 *
 */
public interface TLJFreeBuyGoodsUpdateService {
    /**
     * 更新商品
     *
     * @param goods
     */
    public void updateGoods(TaoBaoGoodsBrief goods);
}
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/util/Constant.java
@@ -152,14 +152,17 @@
    public static final double THREE_STAGE_RANDOM_MAX = 2;
    
    // 新人奖励连续天数
    public static final long RED_PACK_NEW_USER_DAYS = 7;
    public static final long TLJ_NEW_USER_DAYS = 7;
    // 新人奖励最高
    public static final BigDecimal RED_PACK_NEW_USER_MONEY = new BigDecimal("2");
    public static final BigDecimal TLJ_NEW_USER_MONEY = new BigDecimal("2");
    // 新人奖励第一次随机最小
    public static final int RED_PACK_NEW_USER_MIN = 50;
    public static final int TLJ_NEW_USER_MIN = 50;
    // 新人奖励第一次随机最大
    public static final int RED_PACK_NEW_USER_MAX = 60;
    public static final int TLJ_NEW_USER_MAX = 60;
    // 新人红包有效期10天
    public static final int TLJ_NEW_USER_LIMIT = 10;
    // 新人定义: 自完成注册起10天内;
    public static final int TLJ_NEW_USER_DEFINE = 10;
    
    
    public static WXGZConfig wxGZConfig;
fanli/src/main/java/com/yeshi/fanli/util/dataoke/DaTaoKeApiUtil.java
@@ -417,8 +417,11 @@
            cids = cids.substring(0, cids.length() - 1);
        if (!StringUtil.isNullOrEmpty(cids))
            params.put("cids", cids);
        if (StringUtil.isNullOrEmpty(key))
            key = "";
        params.put("keyWords", key);
        if (sort != null)
            params.put("sort", sort + "");
        params.put("sign", getSign(params, app.getAppSecret()));
@@ -437,6 +440,60 @@
        }
        return daTaoKeGoodsResult;
    }
    public static DaTaoKeGoodsResult search(String key, List<Integer> cidList, BigDecimal priceLowerLimit,
            BigDecimal priceUpperLimit, Integer couponPriceLowerLimit, int page, int pageSize, Integer sort) {
        TaoKeAppInfo app = getRandomApp();
        DaTaoKeGoodsResult daTaoKeGoodsResult = new DaTaoKeGoodsResult();
        Map<String, String> params = new TreeMap<>();
        params.put("version", "v2.1.0");
        params.put("appKey", app.getAppKey());
        params.put("pageSize", pageSize + "");
        params.put("pageId", page + "");
        if (priceLowerLimit != null)
            params.put("priceLowerLimit", priceLowerLimit + "");
        if (priceUpperLimit != null)
            params.put("priceUpperLimit", priceUpperLimit + "");
        if (couponPriceLowerLimit != null)
            params.put("couponPriceLowerLimit", couponPriceLowerLimit + "");
        String cids = "";
        if (cidList != null && cidList.size() > 0)
            for (Integer cid : cidList) {
                cids += cid + ",";
            }
        if (cids.endsWith(","))
            cids = cids.substring(0, cids.length() - 1);
        if (!StringUtil.isNullOrEmpty(cids))
            params.put("cids", cids);
        if (StringUtil.isNullOrEmpty(key))
            key = "";
        params.put("keyWords", key);
        if (sort != null)
            params.put("sort", sort + "");
        params.put("sign", getSign(params, app.getAppSecret()));
        String result = requestGet("https://openapi.dataoke.com/api/goods/get-dtk-search-goods", params);
        JSONObject json = JSONObject.fromObject(result);
        JSONObject dataJson = json.optJSONObject("data");
        if (dataJson != null) {
            JSONArray array = dataJson.optJSONArray("list");
            if (array != null) {
                List<DaTaoKeDetailV2> list = parseDaTaoKeDetailV2List(array);
                daTaoKeGoodsResult.setGoodsList(list);
            }
            daTaoKeGoodsResult.setPageId(dataJson.optString("pageId"));
            daTaoKeGoodsResult.setTotalCount(dataJson.optLong("totalNum"));
        }
        return daTaoKeGoodsResult;
    }
    private static String getSign(Map<String, String> map, String secretKey) {
        if (map.size() == 0) {
fanli/src/main/java/com/yeshi/fanli/vo/goods/GoodsDetailExtraVO.java
@@ -6,7 +6,6 @@
import com.google.gson.annotations.Expose;
import com.yeshi.fanli.entity.bus.user.ShamUser;
import com.yeshi.fanli.entity.taobao.ClientTBPid;
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
/**
 * 商品详情额外显示信息
@@ -39,17 +38,13 @@
    // 是否跳转原生APP
    @Expose
    private Boolean isNative;
    // 图文详情链接
    @Expose
    private String detailUrl;
    // 复制链接(右上角)
    @Expose
    private String h5Url;
    // 底部提示语
    @Expose
    private List<ClientTextStyleVO> tip;
    // 淘客参数
    @Expose
@@ -160,14 +155,6 @@
        this.h5Url = h5Url;
    }
    public List<ClientTextStyleVO> getTip() {
        return tip;
    }
    public void setTip(List<ClientTextStyleVO> tip) {
        this.tip = tip;
    }
    public String getUserTLJ() {
        return userTLJ;
    }
@@ -199,4 +186,5 @@
    public void setListCouponUser(List<ShamUser> listCouponUser) {
        this.listCouponUser = listCouponUser;
    }
}
fanli/src/main/java/com/yeshi/fanli/vo/redpack/TaoLiJinWinDetailVO.java
File was renamed from fanli/src/main/java/com/yeshi/fanli/vo/redpack/RedPackWinDetailVO.java
@@ -2,7 +2,7 @@
import com.google.gson.annotations.Expose;
public class RedPackWinDetailVO {
public class TaoLiJinWinDetailVO {
    @Expose
    private String title;
    @Expose
fanli/src/main/java/com/yeshi/fanli/vo/tlj/NewUserHongBao.java
New file
@@ -0,0 +1,15 @@
package com.yeshi.fanli.vo.tlj;
/**
 * 新人红包
 * @author Administrator
 *
 */
public class NewUserHongBao extends ReduceHongBao {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
}
fanli/src/main/resource/ehcache.xml
@@ -274,5 +274,11 @@
        maxElementsOnDisk="10000" eternal="false" timeToIdleSeconds="1800"
        timeToLiveSeconds="1800" overflowToDisk="true"
        memoryStoreEvictionPolicy="LRU" />
    <!-- 会员缓存 -->
    <cache name="vipconfigCache" maxElementsInMemory="1000"
        maxElementsOnDisk="10000" eternal="false" timeToIdleSeconds="1800"
        timeToLiveSeconds="1800" overflowToDisk="true"
        memoryStoreEvictionPolicy="LRU" />
</ehcache>
utils/src/main/java/org/yeshi/utils/DateUtil.java
@@ -422,6 +422,26 @@
        int month = (end.get(Calendar.YEAR) - start.get(Calendar.YEAR)) * 12;
        return Math.abs(month + result);
    }
    public static Date getTodayStartTime() {
        Calendar todayStart = Calendar.getInstance();
        todayStart.set(Calendar.HOUR_OF_DAY,0);
        todayStart.set(Calendar.MINUTE,0);
        todayStart.set(Calendar.SECOND,0);
        todayStart.set(Calendar.MILLISECOND,0);
        return todayStart.getTime();
    }
    public static Date getTodayEndTime() {
        Calendar todayEnd = Calendar.getInstance();
        todayEnd.set(Calendar.HOUR_OF_DAY,23);
        todayEnd.set(Calendar.MINUTE,59);
        todayEnd.set(Calendar.SECOND,59);
        todayEnd.set(Calendar.MILLISECOND,999);
        return todayEnd.getTime();
    }
    public static void main(String[] args) throws ParseException {
        System.out.println(getMonthSpace("2012-02", "2012-02"));