admin
2019-10-19 43362240e4f061f137729a7fb8cf4d1b0e899241
淘宝双11预售商品添加修改
7个文件已修改
2个文件已添加
651 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ConfigControllerV2.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/S11Controller.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/taobao/TaoBaoGoodsBrief.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/taobao/TaoBaoGoodsYuShouInfo.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/ShareGoodsServiceImpl.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/VersionUtil.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/factory/goods/GoodsDetailVOFactory.java 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoBaoUtil.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeApiUtil.java 252 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ConfigControllerV2.java
@@ -25,6 +25,7 @@
import com.yeshi.fanli.service.inter.user.TBPidService;
import com.yeshi.fanli.service.inter.user.UserActiveLogService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.util.AESUtil;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TaoBaoConstant;
@@ -237,10 +238,26 @@
            data.put("baichuan", false);// 不需要采用阿里百川的方式加载webview
            data.put("goodsDetail", false);// 不需要拦截商品详情
        }
        if (VersionUtil.greaterThan_2_0_2(acceptData.getPlatform(), acceptData.getVersion())) {
            JSONObject js = new JSONObject();
            String jsStr = configService.get("url_extract_id");
            String md5 = StringUtil.Md5(jsStr);
            js.put("md5", md5);
            data.put("js", js);
        }
        out.print(JsonUtil.loadTrueResult(data));
    }
    @RequestMapping(value = "getWebJS", method = RequestMethod.POST)
    public void getWebJS(AcceptData acceptData, PrintWriter out) {
        JSONObject data = new JSONObject();
        String urlIdJS = configService.get("url_extract_id");
        data.put("urlIdJSMD5", StringUtil.Md5(urlIdJS));
        data.put("urlIdJS", AESUtil.encrypt(urlIdJS, Constant.UIDAESKEY));
        out.print(JsonUtil.loadTrueResult(data));
    }
    /**
     * 获取账号绑定中的配置信息
     * 
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/S11Controller.java
New file
@@ -0,0 +1,92 @@
package com.yeshi.fanli.controller.client.v2;
import java.io.PrintWriter;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.yeshi.utils.JsonUtil;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
@Controller("s11Controller3")
@RequestMapping("api/v2/s11")
public class S11Controller {
    @Resource
    private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
    @Resource
    private RedisManager redisManager;
    @Resource
    private ConfigService configService;
    /**
     * 获取超级红包分享口令
     *
     * @param acceptData
     * @param uid
     * @param out
     */
    @RequestMapping(value = "getSuperHongBaoToken")
    public void getSuperHongBaoToken(AcceptData acceptData, Long uid, String callback, PrintWriter out) {
        if (uid == null || uid <= 0) {
            if (!StringUtil.isNullOrEmpty(callback))
                out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult(1, "请登录")));
            else
                out.print(JsonUtil.loadFalseResult(1, "请登录"));
            return;
        }
        UserExtraTaoBaoInfo info = userExtraTaoBaoInfoService.getByUid(uid);
        if (info == null || StringUtil.isNullOrEmpty(info.getRelationId()) || info.getRelationValid() == false) {
            if (!StringUtil.isNullOrEmpty(callback))
                out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult(2, "您尚未绑定淘宝,请前往我的->个人信息 绑定淘宝账号")));
            else
                out.print(JsonUtil.loadFalseResult(2, "您尚未绑定淘宝,请前往\"我的->个人信息\"绑定淘宝账号"));
            return;
        }
        String key = "s11-superhongbao-" + info.getRelationId();
        String token = redisManager.getCommonString(key);
        if (StringUtil.isNullOrEmpty(token)) {
            try {
                String link = TaoKeApiUtil.officialActivityConvert("19507100253", "1539329391766",
                        info.getRelationId());
                if (!StringUtil.isNullOrEmpty(link)) {
                    token = TaoKeApiUtil.getTKToken("http://img.flqapp.com/resource/s11/banner.jpg", "【天猫双11】上亿红包等你来拆!---板栗快省", link);
                    if (!StringUtil.isNullOrEmpty(token))
                        redisManager.cacheCommonString(key, token, 60 * 60 * 24);// 缓存1天
                }
            } catch (Exception e) {
                LogHelper.errorDetailInfo(e);
            }
        }
        if (StringUtil.isNullOrEmpty(token)) {
            if (!StringUtil.isNullOrEmpty(callback))
                out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult(1, "口令生成失败,请稍后重试")));
            else
                out.print(JsonUtil.loadFalseResult(1, "口令生成失败,请稍后重试"));
            return;
        }
        String desc = configService.get("super-hongbao-share-desc");
        desc = desc.replace("[淘口令]", token);
        if (!StringUtil.isNullOrEmpty(callback))
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(desc)));
        else
            out.print(JsonUtil.loadTrueResult(desc));
        return;
    }
}
fanli/src/main/java/com/yeshi/fanli/entity/taobao/TaoBaoGoodsBrief.java
@@ -24,7 +24,7 @@
 */
@org.yeshi.utils.mybatis.Table("yeshi_ec_taobao_goods")
@Document(collection="taoBaoGoodsCache")
public class TaoBaoGoodsBrief implements Serializable {
public class TaoBaoGoodsBrief extends TaoBaoGoodsYuShouInfo implements Serializable {
    
    
    /**
fanli/src/main/java/com/yeshi/fanli/entity/taobao/TaoBaoGoodsYuShouInfo.java
New file
@@ -0,0 +1,122 @@
package com.yeshi.fanli.entity.taobao;
import java.math.BigDecimal;
/**
 * 淘宝预售信息
 *
 * @author Administrator
 *
 */
public class TaoBaoGoodsYuShouInfo {
    private String ysylClickUrl;// 预售有礼-推广链接
    private String ysylTljFace;// 预售有礼-预估淘礼金(元)
    private String ysylTljSendTime;// 预售有礼-淘礼金发放时间
    private String ysylTljUseEndTime;// 淘礼金使用结束时间
    private String ysylTljUseStartTime;// 淘礼金使用开始时间
    private BigDecimal ysylCommissionRate;// 预售有礼-佣金比例(%)
    private String presaleDiscountFeeText;// 预售商品-优惠信息
    private String presaleTailEndTime;// 预售商品-付尾款结束时间(毫秒)
    private String presaleTailStartTime;// 预售商品-付尾款开始时间(毫秒)
    private String presaleEndTime;// 预售商品-付定金结束时间(毫秒)
    private String presaleStartTime;// 预售商品-付定金开始时间(毫秒)
    private String presaleDeposit;// 预售商品-定金(元)
    public String getPresaleTailEndTime() {
        return presaleTailEndTime;
    }
    public void setPresaleTailEndTime(String presaleTailEndTime) {
        this.presaleTailEndTime = presaleTailEndTime;
    }
    public String getPresaleTailStartTime() {
        return presaleTailStartTime;
    }
    public void setPresaleTailStartTime(String presaleTailStartTime) {
        this.presaleTailStartTime = presaleTailStartTime;
    }
    public String getPresaleEndTime() {
        return presaleEndTime;
    }
    public void setPresaleEndTime(String presaleEndTime) {
        this.presaleEndTime = presaleEndTime;
    }
    public String getPresaleStartTime() {
        return presaleStartTime;
    }
    public void setPresaleStartTime(String presaleStartTime) {
        this.presaleStartTime = presaleStartTime;
    }
    public String getPresaleDeposit() {
        return presaleDeposit;
    }
    public void setPresaleDeposit(String presaleDeposit) {
        this.presaleDeposit = presaleDeposit;
    }
    public String getYsylClickUrl() {
        return ysylClickUrl;
    }
    public void setYsylClickUrl(String ysylClickUrl) {
        this.ysylClickUrl = ysylClickUrl;
    }
    public String getYsylTljFace() {
        return ysylTljFace;
    }
    public void setYsylTljFace(String ysylTljFace) {
        this.ysylTljFace = ysylTljFace;
    }
    public String getYsylTljSendTime() {
        return ysylTljSendTime;
    }
    public void setYsylTljSendTime(String ysylTljSendTime) {
        this.ysylTljSendTime = ysylTljSendTime;
    }
    public String getYsylTljUseEndTime() {
        return ysylTljUseEndTime;
    }
    public void setYsylTljUseEndTime(String ysylTljUseEndTime) {
        this.ysylTljUseEndTime = ysylTljUseEndTime;
    }
    public String getYsylTljUseStartTime() {
        return ysylTljUseStartTime;
    }
    public void setYsylTljUseStartTime(String ysylTljUseStartTime) {
        this.ysylTljUseStartTime = ysylTljUseStartTime;
    }
    public BigDecimal getYsylCommissionRate() {
        return ysylCommissionRate;
    }
    public void setYsylCommissionRate(BigDecimal ysylCommissionRate) {
        this.ysylCommissionRate = ysylCommissionRate;
    }
    public String getPresaleDiscountFeeText() {
        return presaleDiscountFeeText;
    }
    public void setPresaleDiscountFeeText(String presaleDiscountFeeText) {
        this.presaleDiscountFeeText = presaleDiscountFeeText;
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/ShareGoodsServiceImpl.java
@@ -571,8 +571,9 @@
        taoBaoLink.setAuctionId(auctionId);
        taoBaoLink.setClickUrl(goods.getAuctionUrl());
        taoBaoLink.setCouponLink(goods.getCouponLink());
        if (!StringUtil.isNullOrEmpty(goods.getYsylClickUrl()))
            taoBaoLink.setCouponLink(goods.getYsylClickUrl());
        taoBaoLink.setGoods(goods);
        return taoBaoLink;
    }
@@ -649,6 +650,8 @@
        tbLink.setAuctionId(goods.getAuctionId());
        tbLink.setClickUrl(goods.getAuctionUrl());
        tbLink.setCouponLink(goods.getCouponLink());
        if (!StringUtil.isNullOrEmpty(goods.getYsylClickUrl()))
            tbLink.setCouponLink(goods.getYsylClickUrl());
        if (!StringUtil.isNullOrEmpty(tbLink.getCouponLink())) {// 通过立即推广方式获取淘口令成功
            String quanToken = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), tbLink.getCouponLink());
fanli/src/main/java/com/yeshi/fanli/util/VersionUtil.java
@@ -69,6 +69,14 @@
        else
            return false;
    }
    public static boolean greaterThan_2_0_2(String platform, String versionCode) {
        if ((("android".equalsIgnoreCase(platform) && Integer.parseInt(versionCode) >= 51))
                || (("ios".equalsIgnoreCase(platform) && Integer.parseInt(versionCode) >= 68)))
            return true;
        else
            return false;
    }
    public static boolean smallerThan_1_5_1(String platform, String versionCode) {
fanli/src/main/java/com/yeshi/fanli/util/factory/goods/GoodsDetailVOFactory.java
@@ -47,9 +47,11 @@
    /**
     * 淘宝商品组织
     * 
     * @param goods     淘宝商品
     * @param goods
     *            淘宝商品
     * @param pid
     * @param fanLiRate 返利比例
     * @param fanLiRate
     *            返利比例
     * @return
     */
    public static GoodsDetailVO convertCommonGoods(CommonGoods goods, String pid, BigDecimal fanLiRate,
@@ -87,12 +89,12 @@
        if (goodsType == Constant.SOURCE_TYPE_JD) {
            // 月销量
            goodsInfo.setSalesType(1);
            Integer isFreeShipping = otherDTO.getIsFreeShipping();
            if (isFreeShipping != null && isFreeShipping == 1) {
                goodsInfo.setBaoyou(true);
            }
            List<ClientTextStyleVO> labels = goodsInfo.getLabels();
            // 自营
            String owner = otherDTO.getOwner();
@@ -110,7 +112,7 @@
            if (pinGouInfo != null) {
                goods.setPrice(pinGouInfo.getPingouPrice());
                goodsInfo.setPriceName("拼购价");
                if (labels == null) {
                    labels = new ArrayList<ClientTextStyleVO>();
                }
@@ -160,7 +162,7 @@
        goodsInfo.setMoneyInfo(moneyInfoVO);
        // 券信息
        if (goods.getCouponAmount()!=null&&goods.getCouponAmount().compareTo(BigDecimal.valueOf(0)) > 0) {
        if (goods.getCouponAmount() != null && goods.getCouponAmount().compareTo(BigDecimal.valueOf(0)) > 0) {
            // 计算券后价
            BigDecimal sub = goods.getPrice().subtract(goods.getCouponStartPrice());
            if (sub.compareTo(BigDecimal.valueOf(0)) >= 0) {
@@ -195,9 +197,11 @@
    /**
     * 淘宝商品组织
     * 
     * @param goods     淘宝商品
     * @param goods
     *            淘宝商品
     * @param pid
     * @param fanLiRate 返利比例
     * @param fanLiRate
     *            返利比例
     * @return
     */
    public static GoodsDetailVO convertTaoBaoGoodsBriefExtra(TaoBaoGoodsBriefExtra goods, BigDecimal fanLiRate,
@@ -273,9 +277,11 @@
    /**
     * 淘宝商品组织
     * 
     * @param goods     淘宝商品
     * @param goods
     *            淘宝商品
     * @param pid
     * @param fanLiRate 返利比例
     * @param fanLiRate
     *            返利比例
     * @return
     */
    public static GoodsDetailVO convertTaoBao(TaoBaoGoodsBrief goods, String pid, BigDecimal fanLiRate,
@@ -287,13 +293,13 @@
        goodsInfo.setTitle(goods.getTitle());
        goodsInfo.setSalesType(1); // 默认月销量
        goodsInfo.setZkPrice(goods.getZkPrice());
        String provcity = goods.getProvcity();
        if (!StringUtil.isNullOrEmpty(provcity)) {
            String [] arr = provcity.split("\\s+");
            goodsInfo.setProvcity(arr[arr.length-1]);
            String[] arr = provcity.split("\\s+");
            goodsInfo.setProvcity(arr[arr.length - 1]);
        }
        List<String> imgList = goods.getImgList();
        if (imgList != null) {
            goodsInfo.setImgList(imgList);
@@ -312,7 +318,8 @@
        goodsInfo.setSalesCount(TaoBaoUtil.getSaleCount(goods.getBiz30day()));
        //白底图可能有错误  https://img.alicdn.com/bao/uploaded/TB1LVqmVZbpK1RjSZFyXXX_qFXa.png
        // 白底图可能有错误
        // https://img.alicdn.com/bao/uploaded/TB1LVqmVZbpK1RjSZFyXXX_qFXa.png
        if (!StringUtil.isNullOrEmpty(goods.getPictUrlWhite())) {
            goodsInfo.setPicUrl(TbImgUtil.getTBSize320Img(goods.getPictUrlWhite()));
        } else {
@@ -373,15 +380,49 @@
            goodsInfo.setShopInfo(shop);
        }
        if (TaoBaoUtil.isYUShou(goods)) {// 预售商品
            goodsInfo = loadYuShouInfo(goodsInfo, goods, pid, fanLiRate, shareRate);
        }
        return goodsInfo;
    }
    private static GoodsDetailVO loadYuShouInfo(GoodsDetailVO goodsInfo, TaoBaoGoodsBrief goods, String pid,
            BigDecimal fanLiRate, BigDecimal shareRate) {
        if (goodsInfo != null && goods != null) {
            // 资金信息
            MoneyInfoVO moneyInfoVO = new MoneyInfoVO();
            moneyInfoVO.setMoneyType(1); // 默认显示:返 ¥6.6
            moneyInfoVO.setFanliMoney(TaoBaoUtil.getGoodsHongBaoInfo(goods, fanLiRate));
            moneyInfoVO.setShareMoney(TaoBaoUtil.getGoodsHongBaoInfo(goods, shareRate));
            goodsInfo.setMoneyInfo(moneyInfoVO);
            // 设置券后价为定金价格
            if (goods.getCouponAmount().compareTo(BigDecimal.valueOf(0)) > 0) {
                goodsInfo.setCouponPrice(new BigDecimal(goods.getPresaleDeposit()));
            }
            goodsInfo.setZkPrice(new BigDecimal(goods.getPresaleDeposit()));
            // 添加标签
            if (goodsInfo.getLabels() == null)
                goodsInfo.setLabels(new ArrayList<>());
            goodsInfo.getLabels().add(new ClientTextStyleVO("预售", "#FF2B4E"));
            // 在标题添加优惠信息
            if (!StringUtil.isNullOrEmpty(goods.getPresaleDiscountFeeText())) {
                goodsInfo.setTitle(String.format("【%s】", goods.getPresaleDiscountFeeText()) + goodsInfo.getTitle());
            }
        }
        return goodsInfo;
    }
    /**
     * 淘宝商品组织
     * 
     * @param goods     淘宝商品
     * @param goods
     *            淘宝商品
     * @param pid
     * @param fanLiRate 返利比例
     * @param fanLiRate
     *            返利比例
     * @return
     */
    public static GoodsDetailVO convertJDGoods(JDGoods goods, BigDecimal fanLiRate, BigDecimal shareRate) {
@@ -405,7 +446,6 @@
        }
        goodsInfo.setSalesCount(salesCountMidea);
        // 资金信息
        MoneyInfoVO moneyInfoVO = new MoneyInfoVO();
        moneyInfoVO.setMoneyType(1); // 默认显示:返 ¥6.6
@@ -424,7 +464,7 @@
            coupon.setAmount(discount);
            coupon.setLink(couponInfo.getLink());
            coupon.setStartFee(couponInfo.getQuota());
            if (couponInfo.getGetStartTime() != null) {
                coupon.setStartTime(sdf.format(new Date(couponInfo.getGetStartTime())));
            }
@@ -432,8 +472,7 @@
            if (couponInfo.getGetEndTime() != null) {
                coupon.setEndTime(sdf.format(new Date(couponInfo.getGetEndTime())));
            }
            goodsInfo.setHasCoupon(true);
            goodsInfo.setCouponInfo(coupon);
        }
@@ -454,12 +493,11 @@
            goodsInfo.setShopType(20); // 京东
        }
        JDPingouInfo pinGouInfo = goods.getPinGouInfo();
        if (pinGouInfo != null) {
            goodsInfo.setZkPrice(pinGouInfo.getPingouPrice());
            goodsInfo.setPriceName("拼购价");
            if (labels == null) {
                labels = new ArrayList<ClientTextStyleVO>();
            }
@@ -472,7 +510,7 @@
            goodsInfo.setPriceName("京东价");
        }
        goodsInfo.setLabels(labels);
        // 店铺信息
        JDShopInfo shopInfo = goods.getShopInfo();
        if (shopInfo != null && !StringUtil.isNullOrEmpty(shopInfo.getShopName())) {
@@ -486,7 +524,7 @@
            }
            goodsInfo.setShopInfo(shop);
        }
        // 是否包邮
        Integer isFreeShipping = goods.getIsFreeShipping();
        if (isFreeShipping != null && isFreeShipping == 1) {
@@ -498,9 +536,11 @@
    /**
     * 拼多多商品
     * 
     * @param goods     拼多多商品
     * @param goods
     *            拼多多商品
     * @param pid
     * @param fanLiRate 返利比例
     * @param fanLiRate
     *            返利比例
     * @return
     */
    public static GoodsDetailVO convertPDDGoods(PDDGoodsDetail goods, BigDecimal fanLiRate, BigDecimal shareRate) {
@@ -562,7 +602,7 @@
            CouponInfoVO coupon = new CouponInfoVO();
            coupon.setAmount(amount);
            coupon.setStartFee(startFree);
            if (goods.getCouponStartTime() != null) {
                coupon.setStartTime(sdf.format(new Date(goods.getCouponStartTime() * 1000)));
            }
@@ -570,7 +610,7 @@
            if (goods.getCouponEndTime() != null) {
                coupon.setEndTime(sdf.format(new Date(goods.getCouponEndTime() * 1000)));
            }
            if (goods.getCouponTotalQuantity() != null)
                coupon.setTotalCount(Integer.parseInt(goods.getCouponTotalQuantity().toString()));
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoBaoUtil.java
@@ -72,6 +72,7 @@
import com.yeshi.fanli.util.TaoBaoConstant;
import com.yeshi.fanli.util.TaoBaoHttpUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
@@ -782,7 +783,44 @@
        // labels.add(new ClientTextStyleVO("标签内容", "#00FF00"));
        // tg.setLabels(labels);
        // }
        return tg;
        return loadYuShouInfo(tg, tb);
    }
    private static TaoBaoGoodsBriefExtra loadYuShouInfo(TaoBaoGoodsBriefExtra extra, TaoBaoGoodsBrief goods) {
        if (goods != null && extra != null) {
            if (isYUShou(goods)) {// 预售商品
                extra.setZkPrice(new BigDecimal(goods.getPresaleDeposit()));
                // 预售
                if (extra.getLabels() == null)
                    extra.setLabels(new ArrayList<>());
                extra.getLabels().add(new ClientTextStyleVO("预售", "#FF2B4E"));
                if (!StringUtil.isNullOrEmpty(goods.getPresaleDiscountFeeText())) {// 在标题添加优惠信息
                    extra.setTitle(String.format("【%s】", goods.getPresaleDiscountFeeText()) + extra.getTitle());
                }
            }
        }
        return extra;
    }
    /**
     * 是否为预售商品
     *
     * @param goods
     * @return
     */
    public static boolean isYUShou(TaoBaoGoodsBrief goods) {
        if (!StringUtil.isNullOrEmpty(goods.getPresaleDeposit())
                && !StringUtil.isNullOrEmpty(goods.getPresaleStartTime())
                && !StringUtil.isNullOrEmpty(goods.getPresaleEndTime())) {
            long startTime = Long.parseLong(goods.getPresaleStartTime());
            long endTime = Long.parseLong(goods.getPresaleEndTime());
            long now = System.currentTimeMillis();
            if (now >= startTime && now < endTime) {
                return true;
            }
        }
        return false;
    }
    /**
@@ -1399,6 +1437,21 @@
    public static BigDecimal getGoodsHongBaoMoney(TaoBaoGoodsBrief goodsBrief, BigDecimal rate) {
        BigDecimal money = null;
        // 预售商品
        if (isYUShou(goodsBrief)) {
            if (goodsBrief.getYsylCommissionRate() != null)
                money = MoneyBigDecimalUtil.mul(
                        MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.mul(new BigDecimal(goodsBrief.getPresaleDeposit()),
                                goodsBrief.getYsylCommissionRate()), new BigDecimal("0.01")),
                        MoneyBigDecimalUtil.div(rate, new BigDecimal(100)));
            else
                money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.mul(
                        MoneyBigDecimalUtil.mul(goodsBrief.getZkPrice(), goodsBrief.getTkRate()),
                        new BigDecimal("0.01")), MoneyBigDecimalUtil.div(rate, new BigDecimal(100)));
            return money;
        }
        if (StringUtil.isNullOrEmpty(goodsBrief.getCouponInfo())
                || goodsBrief.getCouponInfo().trim().equalsIgnoreCase("无")) {
            money = MoneyBigDecimalUtil.mul(
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeApiUtil.java
@@ -141,77 +141,97 @@
                .optJSONArray("n_tbk_item");
        if (array != null && array.size() > 0) {
            JSONObject item = array.optJSONObject(0);
            TaoBaoGoodsBrief goods = new TaoBaoGoodsBrief();
            goods.setAuctionId(item.optLong("num_iid"));
            goods.setAuctionUrl(item.optString("item_url"));
            goods.setBiz30day(item.optInt("volume"));
            if (item.optJSONObject("small_images") != null) {
                JSONArray imgArray = item.optJSONObject("small_images").optJSONArray("string");
                if (imgArray != null) {
                    List<String> imgList = new ArrayList<>();
                    for (int n = 0; n < imgArray.size(); n++) {
                        imgList.add(imgArray.optString(n));
                    }
                    goods.setImgList(imgList);
                }
            }
            goods.setTitle(item.optString("title"));
            goods.setUserType(item.optInt("user_type"));
            goods.setZkPrice(new BigDecimal(item.optString("zk_final_price")));
            goods.setReservePrice(new BigDecimal(item.optString("zk_final_price")));
            goods.setAuctionUrl(item.optString("item_url"));
            goods.setProvcity(item.optString("provcity"));
            goods.setPictUrl(item.optString("pict_url"));
            goods.setShopTitle(item.optString("nick"));
            goods.setSellerId(item.optLong("seller_id"));
            String optString = item.optString("shop_dsr");
            if (!StringUtil.isNullOrEmpty(optString)) {
                goods.setShopDsr(new Integer(optString));
            }
            String ratesum = item.optString("ratesum");
            if (!StringUtil.isNullOrEmpty(ratesum)) {
                goods.setRatesum(new Integer(ratesum));
            }
            if (item.optBoolean("is_prepay"))
                goods.setIsPrepay(1);
            if (item.optBoolean("i_rfd_rate"))
                goods.setRfdRate(1);
            if (item.optBoolean("h_good_rate"))
                goods.setGoodRate(1);
            if (item.optBoolean("h_pay_rate30"))
                goods.setPayRate30(1);
            if (item.optBoolean("free_shipment"))
                goods.setFreeShipment(1);
            if (!StringUtil.isNullOrEmpty(item.optString("material_lib_type"))) {
                try {
                    String materialLibType = item.optString("material_lib_type");
                    goods.setMaterialLibType(Integer.parseInt(materialLibType.split(",")[0]));
                } catch (Exception e) {
                    goods.setMaterialLibType(0);
                }
            } else
                goods.setMaterialLibType(0);
            return goods;
            return parseSimpleGoodsInfo(item);
        }
        return null;
    }
    public String convertSpecialGoodsLink(Long auctionId, TaoKeAppInfo app) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.coupon.convert");
        map.put("item_id", auctionId + "");
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, app);
        return resultStr;
    private static TaoBaoGoodsBrief parseSimpleGoodsInfo(JSONObject item) {
        TaoBaoGoodsBrief goods = new TaoBaoGoodsBrief();
        goods.setAuctionId(item.optLong("num_iid"));
        goods.setAuctionUrl(item.optString("item_url"));
        goods.setBiz30day(item.optInt("volume"));
        if (item.optJSONObject("small_images") != null) {
            JSONArray imgArray = item.optJSONObject("small_images").optJSONArray("string");
            if (imgArray != null) {
                List<String> imgList = new ArrayList<>();
                for (int n = 0; n < imgArray.size(); n++) {
                    imgList.add(imgArray.optString(n));
                }
                goods.setImgList(imgList);
            }
        }
        goods.setTitle(item.optString("title"));
        goods.setUserType(item.optInt("user_type"));
        goods.setZkPrice(new BigDecimal(item.optString("zk_final_price")));
        goods.setReservePrice(new BigDecimal(item.optString("zk_final_price")));
        goods.setAuctionUrl(item.optString("item_url"));
        goods.setProvcity(item.optString("provcity"));
        goods.setPictUrl(item.optString("pict_url"));
        goods.setShopTitle(item.optString("nick"));
        goods.setSellerId(item.optLong("seller_id"));
        String optString = item.optString("shop_dsr");
        if (!StringUtil.isNullOrEmpty(optString)) {
            goods.setShopDsr(new Integer(optString));
        }
        String ratesum = item.optString("ratesum");
        if (!StringUtil.isNullOrEmpty(ratesum)) {
            goods.setRatesum(new Integer(ratesum));
        }
        if (item.optBoolean("is_prepay"))
            goods.setIsPrepay(1);
        if (item.optBoolean("i_rfd_rate"))
            goods.setRfdRate(1);
        if (item.optBoolean("h_good_rate"))
            goods.setGoodRate(1);
        if (item.optBoolean("h_pay_rate30"))
            goods.setPayRate30(1);
        if (item.optBoolean("free_shipment"))
            goods.setFreeShipment(1);
        if (!StringUtil.isNullOrEmpty(item.optString("material_lib_type"))) {
            try {
                String materialLibType = item.optString("material_lib_type");
                goods.setMaterialLibType(Integer.parseInt(materialLibType.split(",")[0]));
            } catch (Exception e) {
                goods.setMaterialLibType(0);
            }
        } else
            goods.setMaterialLibType(0);
        goods = loadYuShouInfo(goods, item);
        return goods;
    }
    private static TaoBaoGoodsBrief loadYuShouInfo(TaoBaoGoodsBrief goods, JSONObject item) {
        if (goods != null && item != null) {
            // 预售相关解析
            goods.setYsylClickUrl(item.optString("ysyl_click_url"));
            if (!StringUtil.isNullOrEmpty(item.optString("ysyl_commission_rate")))
                goods.setYsylCommissionRate(new BigDecimal(item.optString("ysyl_commission_rate")));
            goods.setYsylTljFace(item.optString("ysyl_tlj_face"));
            goods.setYsylTljSendTime(item.optString("ysyl_tlj_send_time"));
            goods.setYsylTljUseEndTime(item.optString("ysyl_tlj_use_end_time"));
            goods.setYsylTljUseStartTime(item.optString("ysyl_tlj_use_start_time"));
            goods.setPresaleDeposit(item.optString("presale_deposit"));
            goods.setPresaleDiscountFeeText(item.optString("presale_discount_fee_text"));
            goods.setPresaleEndTime(item.optString("presale_end_time"));
            goods.setPresaleStartTime(item.optString("presale_start_time"));
            goods.setPresaleTailEndTime(item.optString("presale_tail_end_time"));
            goods.setPresaleTailStartTime(item.optString("presale_tail_start_time"));
            return goods;
        }
        return goods;
    }
    public static List<TaoBaoGoodsBrief> getBatchGoodsInfo(List<Long> listId)
@@ -260,67 +280,10 @@
        if (array != null && array.size() > 0) {
            for (int i = 0; i < array.size(); i++) {
                TaoBaoGoodsBrief goods = new TaoBaoGoodsBrief();
                JSONObject item = array.optJSONObject(i);
                goods.setAuctionId(item.optLong("num_iid"));
                goods.setAuctionUrl(item.optString("item_url"));
                goods.setBiz30day(item.optInt("volume"));
                if (item.optJSONObject("small_images") != null) {
                    JSONArray imgArray = item.optJSONObject("small_images").optJSONArray("string");
                    if (imgArray != null) {
                        List<String> imgList = new ArrayList<>();
                        for (int n = 0; n < imgArray.size(); n++) {
                            imgList.add(imgArray.optString(n));
                        }
                        goods.setImgList(imgList);
                    }
                }
                goods.setTitle(item.optString("title"));
                goods.setUserType(item.optInt("user_type"));
                goods.setZkPrice(new BigDecimal(item.optString("zk_final_price")));
                goods.setReservePrice(new BigDecimal(item.optString("zk_final_price")));
                goods.setAuctionUrl(item.optString("item_url"));
                goods.setProvcity(item.optString("provcity"));
                goods.setPictUrl(item.optString("pict_url"));
                goods.setShopTitle(item.optString("nick"));
                String optString = item.optString("shop_dsr");
                if (!StringUtil.isNullOrEmpty(optString)) {
                    goods.setShopDsr(new Integer(optString));
                }
                String ratesum = item.optString("ratesum");
                if (!StringUtil.isNullOrEmpty(ratesum)) {
                    goods.setRatesum(new Integer(ratesum));
                }
                if (item.optBoolean("is_prepay"))
                    goods.setIsPrepay(1);
                if (item.optBoolean("i_rfd_rate"))
                    goods.setRfdRate(1);
                if (item.optBoolean("h_good_rate"))
                    goods.setGoodRate(1);
                if (item.optBoolean("h_pay_rate30"))
                    goods.setPayRate30(1);
                if (item.optBoolean("free_shipment"))
                    goods.setFreeShipment(1);
                if ("1".equalsIgnoreCase(item.optString("material_lib_type")))
                    goods.setMaterialLibType(1);
                else
                    goods.setMaterialLibType(0);
                goodsList.add(goods);
                goodsList.add(parseSimpleGoodsInfo(item));
            }
        }
        return goodsList;
    }
@@ -953,6 +916,7 @@
        if (!StringUtil.isNullOrEmpty(item.optString("reserve_price")))
            goods.setReservePrice(new BigDecimal(item.optString("reserve_price")));
        goods.setTotalFee(new BigDecimal("0"));
        goods = loadYuShouInfo(goods, item);
        return goods;
    }
@@ -1723,6 +1687,7 @@
            if (!StringUtil.isNullOrEmpty(tkRate)) {
                goods.setTkRate(new BigDecimal(tkRate));
            }
            goods = loadYuShouInfo(goods, resultJSON);
            return goods;
        } catch (Exception e) {
            e.printStackTrace();
@@ -1882,6 +1847,7 @@
        goods.setReservePrice(new BigDecimal(0));
        goods.setTotalFee(new BigDecimal("0"));
        goods.setPictUrlWhite(item.optString("white_image"));
        goods = loadYuShouInfo(goods, item);
        return goods;
    }
@@ -2108,6 +2074,42 @@
        }
        return null;
    }
    /**
     * 官方活动推广
     *
     * @param adZoneId
     *            -广告位
     * @param promotionSceneId-活动ID
     * @param relationId
     *            -渠道ID
     * @return
     */
    public static String officialActivityConvert(String adZoneId, String promotionSceneId, String relationId) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.activitylink.get");
        map.put("adzone_id", adZoneId);
        map.put("promotion_scene_id", promotionSceneId);
        if (relationId != null)
            map.put("relation_id", relationId);
        TaoKeAppInfo app = new TaoKeAppInfo();
        app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
        app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
        try {
            String result = TaoKeBaseUtil.baseRequestForThreeTimes(map, app);
            JSONObject json = JSONObject.fromObject(result);
            if (json != null) {
                json = json.optJSONObject("tbk_activitylink_get_response");
                if (json.optInt("result_code") == 200) {
                    return json.optString("data");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
class QuanInfo {