admin
2020-05-29 d99f45a1c358282ab0d4333232da25f03560778f
苏宁,唯品会接口修改
30个文件已修改
3个文件已添加
3604 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/CallBackController.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/admin/GoodsEvaluateAdminController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserAccountController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ConsumerControllerV2.java 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java 240 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ShareControllerV2.java 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserMoneyControllerV2.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/h5/H5S618Controller.java 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dto/vip/VIPConvertResultDTO.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/dynamic/SimpleGoods.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/CollectionGoodsV2ServiceImpl.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/ScanHistoryV2ServiceImpl.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/ShareGoodsTextTemplateServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoGoodsUpdateServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/ThreeSaleDetailSerivceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/GiveVIPApplyInfoServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/dynamic/GoodsEvaluateService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/goods/CollectionGoodsV2Service.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/goods/ScanHistoryV2Service.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/goods/ShareGoodsTextTemplateService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/Constant.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/factory/CommonGoodsFactory.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/factory/goods/GoodsDetailVOFactory.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/suning/SuningApiUtil.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/suning/SuningUtil.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeBaseUtil.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeScApiUtil.java 2237 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/vipshop/VipShopApiUtil.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/vo/goods/GoodsDetailVO.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/CallBackController.java
@@ -194,6 +194,21 @@
    public void VIP(PrintWriter out) {
        out.print("success");
    }
    /**
     * 支付宝支付回调
     * @Title: alipay
     * @Description:
     * @param out
     * void 返回类型
     * @throws
     */
    @RequestMapping(value = "alipay")
    public void alipay(PrintWriter out) {
        out.print("success");
    }
    @RequestMapping(value = "banlishop/pay")
    public void banLiShopPay(HttpServletRequest request, PrintWriter out) {
@@ -322,7 +337,7 @@
                } else {
                    imgInfo.setType(ImgEnum.goods);
                    SimpleGoods simpleGoods = new SimpleGoods();
                    simpleGoods.setGoodsId(itemId);
                    simpleGoods.setGoodsId(itemId+"");
                    simpleGoods.setGoodsType(Constant.SOURCE_TYPE_TAOBAO);
                    simpleGoods.setState(CommonGoods.STATE_NORMAL);
                    CouponInfoVO couponInfo = goodsVO.getCouponInfo();
@@ -342,7 +357,7 @@
            ActivityUser user = ruleList.get((int) (ruleList.size() * Math.random())).getActivityUser();
            try {
                goodsEvaluateService.addGoodsEvaluate(itemId, imageList, user, doc, null, null);
                goodsEvaluateService.addGoodsEvaluate(itemId+"", imageList, user, doc, null, null);
            } catch (GoodsEvaluateException e) {
                e.printStackTrace();
            }
fanli/src/main/java/com/yeshi/fanli/controller/admin/GoodsEvaluateAdminController.java
@@ -134,7 +134,7 @@
     * @param out
     */
    @RequestMapping(value = "saveSingleGoods")
    public void saveSingleGoods(String callback, String pid, Long goodsId, Integer goodsType, String videoUrl,
    public void saveSingleGoods(String callback, String pid, String goodsId, Integer goodsType, String videoUrl,
            Integer picNum, String picUrls, HttpServletRequest request, PrintWriter out) {
        try {
            MultipartHttpServletRequest fileRequest = null;
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserAccountController.java
@@ -14,6 +14,7 @@
import org.yeshi.utils.encrypt.DESUtil;
import com.alipay.api.AlipayApiException;
import com.google.gson.Gson;
import com.yeshi.fanli.dto.wx.WXAccountInfoDTO;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.BindingAccount;
@@ -949,6 +950,7 @@
            userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindAlipay, account);
        } catch (AlipayTransferException e1) {
            LogHelper.error("支付宝验证出错:"+new Gson().toJson(e1));
            if (e1.getSubCode().equalsIgnoreCase("PAYEE_NOT_EXIST")) {
                String msg = "系统未能成功转账0.1元,提现账号信息有误,请核对后重新填写。";
                out.print(JsonUtil.loadFalseResult(1, msg));
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ConsumerControllerV2.java
@@ -22,6 +22,8 @@
import com.google.gson.JsonSerializer;
import com.yeshi.fanli.dto.ConfigParamsDTO;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.goods.CollectionGoodsV2;
import com.yeshi.fanli.entity.goods.CommonGoods;
@@ -44,7 +46,10 @@
import com.yeshi.fanli.util.cache.TaoBaoGoodsCacheUtil;
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
import com.yeshi.fanli.util.jd.JDApiUtil;
import com.yeshi.fanli.util.suning.SuningApiUtil;
import com.yeshi.fanli.util.suning.SuningUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.util.vipshop.VipShopApiUtil;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
import net.sf.json.JSONArray;
@@ -95,7 +100,7 @@
     * @param out
     */
    @RequestMapping("collectionGoods")
    public void collectionGoods(AcceptData acceptData, long uid, long id, int type, Integer goodsType,
    public void collectionGoods(AcceptData acceptData, long uid, String id, int type, Integer goodsType,
            PrintWriter out) {
        try {
            if (goodsType == null) {
@@ -103,21 +108,30 @@
            }
            if (type != 1) {
                collectionGoodsV2Service.cancelCollectionByAuctionId(uid, id, goodsType);
                if (goodsType == Constant.SOURCE_TYPE_SUNING) {
                    String[] sts = SuningUtil.getGoodsIdDetail(id);
                    collectionGoodsV2Service.cancelCollectionByAuctionId(uid, Long.parseLong(sts[1]), goodsType);
                } else
                    collectionGoodsV2Service.cancelCollectionByAuctionId(uid, Long.parseLong(id), goodsType);
                out.print(JsonUtil.loadTrueResult("取消收藏成功"));
                return;
            }
            CollectionGoodsV2 find = collectionGoodsV2Service.findByUidAndAuctionId(uid, id, goodsType);
            Long goodsId = null;
            if (goodsType == Constant.SOURCE_TYPE_SUNING) {
                String[] sts = SuningUtil.getGoodsIdDetail(id);
                goodsId = Long.parseLong(sts[1]);
            } else
                goodsId = Long.parseLong(id);
            CollectionGoodsV2 find = collectionGoodsV2Service.findByUidAndAuctionId(uid, goodsId, goodsType);
            if (find != null) {
                out.print(JsonUtil.loadFalseResult(""));
                return;
            }
            if (goodsType == Constant.SOURCE_TYPE_JD) {
                JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(id);
                JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
                if (jdGoods == null) {
                    jdGoods = JDApiUtil.getGoodsDetail(id);
                    jdGoods = JDApiUtil.getGoodsDetail(goodsId);
                }
                if (jdGoods == null) {
                    out.print(JsonUtil.loadFalseResult(1, "商品已下架"));
@@ -125,15 +139,30 @@
                }
                collectionGoodsV2Service.addJDCollection(uid, jdGoods);
            } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
                PDDGoodsDetail pddGoods = pinDuoDuoCacheUtil.getGoodsInfo(id);
                PDDGoodsDetail pddGoods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
                if (pddGoods == null) {
                    out.print(JsonUtil.loadFalseResult(1, "商品已下架"));
                    return;
                }
                collectionGoodsV2Service.addPDDCollection(uid, pddGoods);
            } else if (goodsType == Constant.SOURCE_TYPE_VIP) {
                VIPGoodsInfo vipGoods = VipShopApiUtil.getGoodsDetail(id);
                if (vipGoods == null) {
                    out.print(JsonUtil.loadFalseResult(1, "商品已下架"));
                    return;
                }
                collectionGoodsV2Service.addVIPCollection(uid, vipGoods);
            } else if (goodsType == Constant.SOURCE_TYPE_SUNING) {
                String[] sts = SuningUtil.getGoodsIdDetail(id);
                SuningGoodsInfo suningGoods = SuningApiUtil.getGoodsDetail(sts[1], sts[0]);
                if (suningGoods == null) {
                    out.print(JsonUtil.loadFalseResult(1, "商品已下架"));
                    return;
                }
                collectionGoodsV2Service.addSuningCollection(uid, suningGoods);
            } else {
                try {
                    TaoBaoGoodsBrief taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(id);
                    TaoBaoGoodsBrief taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(goodsId);
                    collectionGoodsV2Service.addCollection(uid, taoBaoGoodsBrief);
                } catch (TaobaoGoodsDownException e) {
                    out.print(JsonUtil.loadFalseResult(1, "商品已下架"));
@@ -207,7 +236,7 @@
        boolean notBackSuVip = false;
        if (!VersionUtil.greaterThan_2_1_2(acceptData.getPlatform(), acceptData.getVersion()))
            notBackSuVip = true;
        List<CollectionGoodsV2> collectionGoodsList = collectionGoodsV2Service.getCollectionGoodsList(uid, page,
                Constant.PAGE_SIZE, goodsType, notBackSuVip);
@@ -337,8 +366,7 @@
        boolean notBackSuVip = false;
        if (!VersionUtil.greaterThan_2_1_2(acceptData.getPlatform(), acceptData.getVersion()))
            notBackSuVip = true;
        List<ScanHistoryV2> list = scanHistoryV2Service.getScanHistoryByDeviceOrUid(uid, acceptData.getDevice(), page,
                20, goodsType, notBackSuVip);
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java
@@ -813,8 +813,8 @@
     * @param out
     */
    @RequestMapping(value = "evaluateShare", method = RequestMethod.POST)
    public void evaluateShare(AcceptData acceptData, Long uid, String id, Integer type, Long goodsId, Integer goodsType,
            PrintWriter out) {
    public void evaluateShare(AcceptData acceptData, Long uid, String id, Integer type, String goodsId,
            Integer goodsType, PrintWriter out) {
        try {
            if (uid == null) {
                out.print(JsonUtil.loadFalseResult("用户未登录"));
@@ -826,7 +826,7 @@
                return;
            }
            if (type == 1 && (goodsId == null || goodsType == null)) {
            if (type == 1 && (StringUtil.isNullOrEmpty(goodsId) || goodsType == null)) {
                out.print(JsonUtil.loadFalseResult("商品参数不能为空"));
                return;
            }
@@ -908,7 +908,7 @@
                    if (type == 1) {
                        for (ImgInfo imgInfo : imgs) {
                            if (imgInfo.getGoodsVO() != null)
                                if (imgInfo.getGoodsVO().getGoodsId().longValue() == goodsId.longValue()
                                if (imgInfo.getGoodsVO().getGoodsId().equalsIgnoreCase(goodsId)
                                        && imgInfo.getGoodsVO().getGoodsType() == goodsType.intValue()) {
                                    String jumpLink = getJumpLink(imgInfo.getGoodsVO(), user, relationId, inviteCode,
                                            imgInfo.getUrl());
@@ -985,7 +985,8 @@
        if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
            TaoBaoLink taoBaoLink = null;
            try {
                taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(user.getId(), goodsVO.getGoodsId(), relationId);
                taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(user.getId(), Long.parseLong(goodsVO.getGoodsId()),
                        relationId);
            } catch (ShareGoodsException e) {
                e.printStackTrace();
            }
@@ -993,7 +994,7 @@
                    configService.get(ConfigKeyEnum.taobaoShareQrcodeText.getKey()), taoBaoLink.getGoods(),
                    TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
        } else if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_JD) {
            JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsVO.getGoodsId());
            JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(Long.parseLong(goodsVO.getGoodsId()));
            if (jdGoods == null) {
                return null;
            }
@@ -1007,8 +1008,8 @@
            jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "",
                    user.getId() + "");
        } else if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_PDD) {
            jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsVO.getGoodsId(), PinDuoDuoApiUtil.PID_SHARE + "",
                    user.getId() + "");
            jumpLink = PinDuoDuoApiUtil.getPromotionUrl(Long.parseLong(goodsVO.getGoodsId()),
                    PinDuoDuoApiUtil.PID_SHARE + "", user.getId() + "");
        }
        FileUploadResult uploadResult = qrCodeService.drawDynamicGoodsPoster(jumpLink, user.getPortrait(), inviteCode,
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java
@@ -25,7 +25,9 @@
import com.yeshi.fanli.dto.pdd.PDDGoodsResult;
import com.yeshi.fanli.dto.pdd.PDDPromotionUrl;
import com.yeshi.fanli.dto.pdd.PDDSearchFilter;
import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
import com.yeshi.fanli.dto.taobao.DaTaoKeFilterResult;
import com.yeshi.fanli.dto.vip.VIPConvertResultDTO;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.ShamUser;
@@ -96,6 +98,8 @@
import com.yeshi.fanli.util.jd.JDUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil;
import com.yeshi.fanli.util.suning.SuningApiUtil;
import com.yeshi.fanli.util.suning.SuningUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.util.user.UserLevelUtil;
@@ -1187,11 +1191,6 @@
        shareInfoVO.setHelpLink(helpLink);
        extraVO.setShare(shareInfoVO);
        // if (convertUrl != null) {
        // extraVO.setCouponJumpLink(convertUrl.getUrl());
        // extraVO.setNativeCouponJumpLink(PinDuoDuoUtil.getAndroidNativeURI(convertUrl.getUrl()));
        // }
        JSONObject object = new JSONObject();
        object.put("extra", JsonUtil.getApiCommonGson().toJson(extraVO));
        object.put("goods", JsonUtil.getApiCommonGson().toJson(goodsDetail));
@@ -1215,6 +1214,137 @@
        });
    }
    @RequestMapping(value = "getDetailSuning", method = RequestMethod.POST)
    public void getDetialSuning(AcceptData acceptData, String id, Long uid, String from, PrintWriter out) {
        // 系统验证
        BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
                acceptData.getPackages());
        if (system == null) {
            out.print(JsonUtil.loadFalseResult(1, "系统不存在"));
            return;
        }
        String[] ids = SuningUtil.getGoodsIdDetail(id);
        SuningGoodsInfo suningGoodsInfo = SuningApiUtil.getGoodsDetail(ids[1], ids[0]);
        if (suningGoodsInfo == null) {
            out.print(JsonUtil.loadFalseResult(2, "商品不存在"));
            return;
        }
        ConfigParamsDTO paramsDTO = getParamsDTO(acceptData.getPlatform(), acceptData.getVersion(), uid);
        paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
        GoodsDetailVO goodsDetail = GoodsDetailVOFactory.convertSuningGoods(suningGoodsInfo, paramsDTO);
        if (goodsDetail != null && goodsDetail.getMoneyInfo() != null && userVIPInfoService.isVIP(uid)) {
            goodsDetail.getMoneyInfo().setFanliMoney(goodsDetail.getMoneyInfo().getMaxMoney());
            goodsDetail.getMoneyInfo().setShareMoney("¥" + SuningUtil.getGoodsFanLiMoney(suningGoodsInfo,
                    hongBaoManageService.getShareRate(UserLevelEnum.superVIP)));
            goodsDetail.getMoneyInfo().setRateInfo(goodsDetail.getMoneyInfo().getMaxRateInfo());
            goodsDetail.getMoneyInfo().setCompositionInfo(goodsDetail.getMoneyInfo().getMaxCompositionInfo());
        }
        goodsDetail.getMoneyInfo()
                .setRateInfoHelpUrl(configService.get(ConfigKeyEnum.goodsDetailFanliRateHelpUrl.getKey()));
        // 附加信息
        OtherInfo otherInfo = new OtherInfo();
        RewardCouponVO rewardCoupon = new RewardCouponVO();
        rewardCoupon.setJumpDetail(jumpDetailV2Service.getByTypeCache("web"));
        JSONObject params1 = new JSONObject();
        params1.put("url", userVipConfigService.getValueByKey("vip_link"));
        rewardCoupon.setMaxMoney(goodsDetail.getMoneyInfo().getMaxMoney());
        rewardCoupon.setDesc("返");
        params1.put("url", userVipConfigService.getValueByKey("vip_link"));
        rewardCoupon.getJumpDetail().setNeedLogin(true);
        rewardCoupon.setParams(params1.toString());
        otherInfo.setRewardCoupon(rewardCoupon);
        if ("ios".equalsIgnoreCase(acceptData.getPlatform())
                && configService.iosOnLining(Integer.parseInt(acceptData.getVersion())))
            otherInfo.setRewardCoupon(null);
        goodsDetail.setOtherInfo(otherInfo);
        ShopInfoVO shopInfo = goodsDetail.getShopInfo();
        if (shopInfo != null) {
            if (shopInfo.getId() == null || shopInfo.getScoreGoods() == null || shopInfo.getScoreLogistics() == null
                    || shopInfo.getScoreSeller() == null) {
                goodsDetail.setShopInfo(null);
            }
        }
        GoodsDetailExtraVO extraVO = new GoodsDetailExtraVO();
        extraVO.setIsNative(false);
        // IOS是否正在上线
        if ("ios".equalsIgnoreCase(acceptData.getPlatform())) {
            String version = acceptData.getVersion();
            extraVO.setIosOnling(configService.iosOnLining(Integer.parseInt(version)));
        }
        // 图文详情
        extraVO.setDetailUrl("http://apph5.banliapp.com/apppage/goods_img_suning.html?id="
                + suningGoodsInfo.getCommodityInfo().getCommodityCode() + "&supplierCode="
                + suningGoodsInfo.getCommodityInfo().getSupplierCode());
        if (uid != null) {
            // 是否加入收藏
            CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(uid,
                    Long.parseLong(suningGoodsInfo.getCommodityInfo().getCommodityCode()), Constant.SOURCE_TYPE_SUNING);
            extraVO.setCollected(collectionGoods != null ? true : false);
            // 是否加入选品库
            extraVO.setStorage(userGoodsStorageService.isExistStorage(uid,
                    Long.parseLong(suningGoodsInfo.getCommodityInfo().getCommodityCode()),
                    Constant.SOURCE_TYPE_SUNING));
        }
        extraVO.setIsNative(true);
        // 分享路径
        String h5Url = String.format("http://%s%s?uid=%s&id=%s", configService.getH5Host(),
                Constant.systemCommonConfig.getShareGoodsPagePathPDD(), "", id + "");
        try {
            extraVO.setH5Url(HttpUtil.getShortLink(h5Url));
        } catch (Exception e) {
            extraVO.setH5Url(h5Url);
        }
        String helpLink = null;
        extraVO.setFanliValid(true);
        extraVO.setShareValid(true);
        if (StringUtil.isNullOrEmpty(helpLink)) {
            helpLink = configService.get(ConfigKeyEnum.noRebateHelpLink.getKey());
        }
        ShareVO shareInfoVO = new ShareVO();
        shareInfoVO.setHelpLink(helpLink);
        extraVO.setShare(shareInfoVO);
        JSONObject object = new JSONObject();
        object.put("extra", JsonUtil.getApiCommonGson().toJson(extraVO));
        object.put("goods", JsonUtil.getApiCommonGson().toJson(goodsDetail));
        out.print(JsonUtil.loadTrueResult(object.toString()));
        ThreadUtil.run(new Runnable() {
            public void run() {
                // 添加浏览记录
                try {
                    scanHistoryV2Service.addSuningScanHistory(uid, acceptData.getDevice(), suningGoodsInfo);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                try {
                    goodsEvaluateService.updateSuningGoods(suningGoodsInfo);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    /**
     * 商品详情推荐(猜你喜欢 + 推荐)
     * 
@@ -1223,7 +1353,7 @@
     * @param out
     */
    @RequestMapping(value = "getRecommendGoods", method = RequestMethod.POST)
    public void getRecommendGoods(AcceptData acceptData, long id, Integer goodsType, PrintWriter out) {
    public void getRecommendGoods(AcceptData acceptData, String id, Integer goodsType, PrintWriter out) {
        if (goodsType == null) {
            goodsType = Constant.SOURCE_TYPE_TAOBAO;
        }
@@ -1235,7 +1365,7 @@
                JSONObject data = new JSONObject();
                data.put("listGuess", JsonUtil.getApiCommonGson().toJson(new ArrayList<GoodsDetailVO>()));
                List<JDGoods> list = JDUtil.getRecommendGoodsById(id);
                List<JDGoods> list = JDUtil.getRecommendGoodsById(Long.parseLong(id));
                if (list == null) {
                    list = new ArrayList<JDGoods>();
                } else if (list.size() > 10) {
@@ -1266,7 +1396,7 @@
                List<GoodsDetailVO> listDetailVO = new ArrayList<GoodsDetailVO>();
                List<Long> goodsIdList = PinDuoDuoUtil.getRecommendGoodsId(id);
                List<Long> goodsIdList = PinDuoDuoUtil.getRecommendGoodsId(Long.parseLong(id));
                if (goodsIdList != null && goodsIdList.size() > 0) {
                    PDDSearchFilter pddfilter = new PDDSearchFilter();
                    pddfilter.setPage(1);
@@ -1301,8 +1431,13 @@
                out.print(JsonUtil.loadTrueResult(data));
                return;
            }
            if (goodsType == Constant.SOURCE_TYPE_SUNING) {
                //猜你喜欢
            }
            List<TaoBaoGoodsBrief> goodsList = TaoKeApiUtil.guessLikeByAuctionId(id, 10);
            List<TaoBaoGoodsBrief> goodsList = TaoKeApiUtil.guessLikeByAuctionId(Long.parseLong(id), 10);
            // 初始化
            if (goodsList == null) {
                goodsList = new ArrayList<TaoBaoGoodsBrief>();
@@ -1508,6 +1643,93 @@
    }
    /**
     * 拼多多购买链接
     *
     * @param acceptData
     * @param uid
     * @param id
     * @param source
     * @param request
     * @param out
     */
    @RequestMapping(value = "getVIPLink")
    public void getVIPLink(AcceptData acceptData, Long uid, Long id, String source, PrintWriter out) {
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
            return;
        }
        if (id == null || id <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "商品ID不能为空"));
            return;
        }
        UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
        if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
            out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
            return;
        }
        VIPGoodsInfo goods = VipShopApiUtil.getGoodsDetail(id + "");
        if (goods == null) {
            out.print(JsonUtil.loadFalseResult(2, "商品已下架"));
            return;
        }
        VIPConvertResultDTO convertUrl = VipShopApiUtil.convertLink(id + "", VipShopUtil.getBuyChanTag(uid));
        JSONObject data = new JSONObject();
        data.put("native", true);
        data.put("jumpLink", convertUrl.getUrl());
        data.put("nativeJumpLink", convertUrl.getDeeplinkUrl());
        out.print(JsonUtil.loadTrueResult(data));
        // 获得金币
        integralGetService.addCouponRebate(uid);
    }
    @RequestMapping(value = "getSuningLink")
    public void getSuningLink(AcceptData acceptData, Long uid, String id, String source, PrintWriter out) {
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
            return;
        }
        if (StringUtil.isNullOrEmpty(id)) {
            out.print(JsonUtil.loadFalseResult(1, "商品ID不能为空"));
            return;
        }
        UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
        if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
            out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
            return;
        }
        String[] sts = SuningUtil.getGoodsIdDetail(id);
        String supplierCode = sts[0];
        String goodsCode = sts[1];
        SuningGoodsInfo goods = SuningApiUtil.getGoodsDetail(goodsCode, supplierCode);
        if (goods == null) {
            out.print(JsonUtil.loadFalseResult(2, "商品已下架"));
            return;
        }
        String quanUrl = null;
        if (!StringUtil.isNullOrEmpty(goods.getCouponInfo().getCouponUrl()))
            quanUrl = goods.getCouponInfo().getCouponUrl();
        String link = SuningApiUtil.convertLink(SuningUtil.getProductUrl(supplierCode, goodsCode),
                quanUrl, SuningApiUtil.PID_BUY, uid + "");
        JSONObject data = new JSONObject();
        data.put("native", false);
        data.put("jumpLink", link);
        out.print(JsonUtil.loadTrueResult(data));
        // 获得金币
        integralGetService.addCouponRebate(uid);
    }
    /**
     * 是否在参与推广
     * 
     * @param goodsId
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ShareControllerV2.java
@@ -27,6 +27,9 @@
import com.yeshi.fanli.dto.jd.JDPingouInfo;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.share.ShareGoodsRecordDTO;
import com.yeshi.fanli.dto.suning.SuningGoodsImg;
import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
import com.yeshi.fanli.dto.vip.VIPConvertResultDTO;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsGroup;
@@ -82,6 +85,8 @@
import com.yeshi.fanli.util.jd.JDUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil;
import com.yeshi.fanli.util.suning.SuningApiUtil;
import com.yeshi.fanli.util.suning.SuningUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.util.taobao.TaoLiJinUtil;
@@ -205,7 +210,7 @@
     * @param out
     */
    @RequestMapping(value = "createShareInfo")
    public void createShareInfo(AcceptData acceptData, Long uid, Long goodsId, String source, Integer totalNum,
    public void createShareInfo(AcceptData acceptData, Long uid, String goodsId, String source, Integer totalNum,
            Integer goodsType, Boolean needGoods, HttpServletRequest request, PrintWriter out) {
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
@@ -228,32 +233,38 @@
            return;
        }
        if (goodsId == null || goodsId <= 0) {
        if (goodsId == null ) {
            out.print(JsonUtil.loadFalseResult(2, "商品ID不能为空"));
            return;
        }
        // 淘宝
        if (goodsType == null || goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            createTaoBaoShare(acceptData, uid, goodsId, totalNum, source, needGoods, request, out);
            createTaoBaoShare(acceptData, uid,Long.parseLong(goodsId), totalNum, source, needGoods, request, out);
            return;
        }
        // 京东
        if (goodsType == Constant.SOURCE_TYPE_JD) {
            createJDShare(acceptData, uid, goodsId, source, needGoods, out);
            createJDShare(acceptData, uid, Long.parseLong(goodsId), source, needGoods, out);
            return;
        }
        // 拼多多
        if (goodsType == Constant.SOURCE_TYPE_PDD) {
            createPDDShare(acceptData, uid, goodsId, source, needGoods, out);
            createPDDShare(acceptData, uid, Long.parseLong(goodsId), source, needGoods, out);
            return;
        }
        // 唯品会
        if (goodsType == Constant.SOURCE_TYPE_VIP) {
            createPDDShare(acceptData, uid, goodsId, source, needGoods, out);
            createVIPShare(acceptData, uid, Long.parseLong(goodsId), source, needGoods, out);
            return;
        }
        // 苏宁
        if (goodsType == Constant.SOURCE_TYPE_SUNING) {
            createSuningShare(acceptData, uid, goodsId, source, needGoods, out);
            return;
        }
@@ -1048,13 +1059,17 @@
    }
    /**
     * 拼多多分享
     *
     * 唯品会分享
     * @Title: createVIPShare
     * @Description:
     * @param acceptData
     * @param uid
     * @param goodsId
     * @param source
     * @param out
     * @param needGoods
     * @param out
     * void 返回类型
     * @throws
     */
    public void createVIPShare(AcceptData acceptData, Long uid, Long goodsId, String source, boolean needGoods,
            PrintWriter out) {
@@ -1064,11 +1079,11 @@
            return;
        }
        String jumpLink = VipShopApiUtil.convertLink(goodsId + "", VipShopUtil.getShareChanTag(uid));
        VIPConvertResultDTO jumpLink = VipShopApiUtil.convertLink(goodsId + "", VipShopUtil.getShareChanTag(uid));
        ShareInfoVO shareInfo = new ShareInfoVO();
        shareInfo.setClickUrl(jumpLink);
        shareInfo.setWxErCode(jumpLink);
        shareInfo.setClickUrl(jumpLink.getUrl());
        shareInfo.setWxErCode(jumpLink.getUrl());
        shareInfo.setCommentTexts(new ArrayList<>());
        shareInfo.setRule(configService.get(ConfigKeyEnum.shareRuleLinkVIP.getKey()));
        shareInfo.setPictUrl(goods.getGoodsThumbUrl());
@@ -1081,7 +1096,7 @@
        }
        String template = shareGoodsTextTemplateService.getTextTemplateByVIP(uid);
        String shareText = shareGoodsTextTemplateService.createContentVIP(template, goods, jumpLink);
        String shareText = shareGoodsTextTemplateService.createContentVIP(template, goods, jumpLink.getUrl());
        shareInfo.setShareText(shareText);
        String descText = shareText.replace(goods.getGoodsName(), "").trim();
@@ -1132,7 +1147,7 @@
        String quickCommentText = configService.get(ConfigKeyEnum.quickSharePDDCommentText.getKey());
        commentText = quickCommentText.replace("[原价]", goods.getMarketPrice());
        commentText = commentText.replace("[链接]", jumpLink);
        commentText = commentText.replace("[链接]", jumpLink.getUrl());
        commentText = commentText.replace("领券抢购", "抢购");
        commentText = commentText.replace("【券后价】[券后价]元", "");
@@ -1163,10 +1178,150 @@
                history.setQuanLink(null);
                history.setGoodsId(goodsId);
                history.setPostPicture(goods.getGoodsThumbUrl());
                history.setShareImg(jumpLink);
                history.setShareImg(jumpLink.getUrl());
                List<String> imgList = goods.getGoodsDetailPictures();
                if (imgList == null) {
                    imgList = new ArrayList<>();
                }
                history.setPictures(JsonUtil.getGson().toJson(imgList));
                shareGoodsService.addShareGoodsHistory(history);
            }
        });
    }
    /**
     * 苏宁易购分享
     * @Title: createSuningShare
     * @Description:
     * @param acceptData
     * @param uid
     * @param goodsId
     * @param source
     * @param needGoods
     * @param out
     * void 返回类型
     * @throws
     */
    public void createSuningShare(AcceptData acceptData, Long uid, String goodsId, String source, boolean needGoods,
            PrintWriter out) {
        String[] sts = SuningUtil.getGoodsIdDetail(goodsId);
        SuningGoodsInfo goods = SuningApiUtil.getGoodsDetail(sts[1], sts[0]);
        if (goods == null) {
            out.print(JsonUtil.loadFalseResult(1, "该商品已下架"));
            return;
        }
        String couponLink = goods.getCouponInfo().getCouponUrl();
        String jumpLink = SuningApiUtil.convertLink(SuningUtil.getProductUrl(sts[0], sts[1]),
                StringUtil.isNullOrEmpty(couponLink) ? null : couponLink, SuningApiUtil.PID_SHARE, uid + "");
        ShareInfoVO shareInfo = new ShareInfoVO();
        shareInfo.setClickUrl(jumpLink);
        shareInfo.setWxErCode(jumpLink);
        shareInfo.setCommentTexts(new ArrayList<>());
        shareInfo.setRule(configService.get(ConfigKeyEnum.shareRuleLinkSuning.getKey()));
        if (goods.getCommodityInfo().getPictureUrl() != null && goods.getCommodityInfo().getPictureUrl().size() > 0)
            shareInfo.setPictUrl(goods.getCommodityInfo().getPictureUrl().get(0).getPicUrl());
        if (needGoods) {
            shareInfo
                    .setGoodsInfo(GoodsDetailVOFactory.convertSuningGoods(goods,
                            new ConfigParamsDTO(hongBaoManageService.getFanLiRate(),
                                    hongBaoManageService.getShareRate(), Constant.MAX_REWARD_RATE,
                                    hongBaoManageService.getFanLiRate(UserLevelEnum.superVIP))));
        }
        String template = shareGoodsTextTemplateService.getTextTemplateByVIP(uid);
        String shareText = shareGoodsTextTemplateService.createContentSuning(template, goods, jumpLink);
        shareInfo.setShareText(shareText);
        String descText = shareText.replace(goods.getCommodityInfo().getCommodityName(), "").trim();
        if (descText.startsWith("\\r\\n")) {
            descText = descText.substring(0);
        }
        shareInfo.setDescText(descText);
        //
        String imgs = configService.getByVersion(ConfigKeyEnum.goodsShareNotifyImgs.getKey(), acceptData.getPlatform(),
                Integer.parseInt(acceptData.getVersion()));
        JSONArray array = JSONArray.fromObject(imgs);
        shareInfo.setNotifyPicture(array.size() > 1 ? array.optString(1) : array.optString(0));
        // 2.0.7版本后的提示图片
        imgs = configService.get(ConfigKeyEnum.goodsShareNotifyImgs207.getKey());
        array = JSONArray.fromObject(imgs);
        shareInfo.setNotifyPictureNew(array.size() > 1 ? array.optString(1) : array.optString(0));
        shareInfo.setNotifyDesc(configService.get(ConfigKeyEnum.goodsShareNotifySuning.getKey()));
        // 添加分享记录
        BigDecimal shareRate = hongBaoManageService.getShareRate();
        BigDecimal shareMoney = SuningUtil.getGoodsFanLiMoney(goods, shareRate);
        shareInfo.setShareMoney("¥" + shareMoney.toString());
        try {
            ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsDetail(uid,
                    Long.parseLong(sts[1]), Constant.SOURCE_TYPE_SUNING, false);
            shareInfo.setShareId(shareRecord.getRedisKey());
        } catch (Exception e) {
            try {
                LogHelper.errorDetailInfo(e);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
        String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
        String commentText = "";
        String recommendText = "";
        String qtemplate = configService.get(ConfigKeyEnum.quickShareGoodsText.getKey());
        recommendText = qtemplate.replace("[商品标题]", goods.getCommodityInfo().getCommodityName());
        recommendText = recommendText.replace("推荐理由:[推荐语]", "");
        String quickCommentText = configService.get(ConfigKeyEnum.quickSharePDDCommentText.getKey());
        commentText = quickCommentText.replace("[原价]", goods.getCommodityInfo().getCommodityPrice());
        commentText = commentText.replace("[链接]", jumpLink);
        commentText = commentText.replace("领券抢购", "抢购");
        commentText = commentText.replace("【券后价】[券后价]元", "");
        recommendText = recommendText.replace("优惠券:[券面额]元", "");
        shareInfo.setRecommendText(deleteBlankLine(recommendText));
        shareInfo.setCommentText(deleteBlankLine(commentText));
        // 设置评论文本选项
        shareInfo.setCommentTextChoiceList(getCommentChoiceList(null, shareInfo.getCommentText(), inviteCode,
                SuningUtil.getGoodsFanLiMoney(goods, hongBaoManageService.getFanLiRate(UserLevelEnum.superVIP))));
        out.print(JsonUtil.loadTrueResult(
                JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create().toJson(shareInfo)));
        // 异步操作
        com.yeshi.fanli.util.ThreadUtil.run(new Runnable() {
            @Override
            public void run() {
                // 异步操作 添加分享记录
                UserShareGoodsHistory history = new UserShareGoodsHistory();
                history.setUser(new UserInfo(uid));
                history.setHongbao(shareMoney);
                history.setCreateTime(new Date());
                history.setGoodsType(Constant.SOURCE_TYPE_VIP);
                history.setTkCode(null);
                history.setLink(null);
                history.setQuanLink(null);
                history.setGoodsId(Long.parseLong(sts[1]));
                if (goods.getCommodityInfo().getPictureUrl() != null
                        && goods.getCommodityInfo().getPictureUrl().size() > 0)
                    history.setPostPicture(goods.getCommodityInfo().getPictureUrl().get(0).getPicUrl());
                history.setShareImg(jumpLink);
                List<SuningGoodsImg> pictureList = goods.getCommodityInfo().getPictureUrl();
                List<String> imgList = new ArrayList<>();
                if (pictureList != null) {
                    for (SuningGoodsImg gi : pictureList)
                        imgList.add(gi.getPicUrl());
                }
                history.setPictures(JsonUtil.getGson().toJson(imgList));
                shareGoodsService.addShareGoodsHistory(history);
@@ -1543,7 +1698,7 @@
        JSONArray array = new JSONArray();
        JSONObject data = new JSONObject();
        boolean notBackSuVip = false;
        if (!VersionUtil.greaterThan_2_1_2(acceptData.getPlatform(), acceptData.getVersion()))
            notBackSuVip = true;
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserMoneyControllerV2.java
@@ -295,6 +295,7 @@
        MoneyPredictVO predictVO = new MoneyPredictVO();
        predictVO.setMineNum(0);
        predictVO.setTeamNum(0);
        predictVO.setTotalNum(0);
        predictVO.setMineMoney(BigDecimal.valueOf(0));
        predictVO.setTeamMoney(BigDecimal.valueOf(0));
        BigDecimal hundred = BigDecimal.valueOf(100);
fanli/src/main/java/com/yeshi/fanli/controller/h5/H5S618Controller.java
New file
@@ -0,0 +1,151 @@
package com.yeshi.fanli.controller.h5;
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.dto.taobao.api.TaoKeOfficialActivityConvertResultDTO;
import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
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.Constant;
import com.yeshi.fanli.util.RedisKeyEnum;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
@Controller
@RequestMapping("api/apph5/v1/618")
public class H5S618Controller {
    @Resource
    private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
    @Resource
    private RedisManager redisManager;
    @Resource
    private ConfigService configService;
    /**
     * 获取超级红包分享口令
     *
     * @param acceptData
     * @param uid
     * @param out
     */
    @RequestMapping(value = "getSuperHongBaoToken")
    public void getSuperHongBaoToken(String sign, Long uid, String callback, PrintWriter out) {
        if (!StringUtil.Md5(uid + "@?,223Hbb88lll").equalsIgnoreCase(sign)) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult(1001, "签名错误")));
            return;
        }
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult(1, "请登录")));
            return;
        }
        UserExtraTaoBaoInfo info = userExtraTaoBaoInfoService.getByUid(uid);
        if (info == null || StringUtil.isNullOrEmpty(info.getRelationId()) || info.getRelationValid() == false) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult(2, "您尚未绑定淘宝,请前往我的->个人信息 绑定淘宝账号")));
            return;
        }
        String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.S11SuperHongBao, info.getRelationId() + "");
        String token = null;
        token = redisManager.getCommonString(key);
        if (StringUtil.isNullOrEmpty(token)) {
            try {
                TaoKeOfficialActivityConvertResultDTO dto = TaoKeApiUtil.officialActivityConvert("19507100253",
                        "20150318019998255", info.getRelationId());
                String link = dto.getClick_url();
                if (!StringUtil.isNullOrEmpty(link)) {
                    token = TaoKeApiUtil.getTKToken("https://gw.alicdn.com/tfs/TB1alz7HYY1gK0jSZTEXXXDQVXa-800-450.jpg", "天猫618活动上亿红包等你来抢",
                            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, "口令生成失败,请稍后重试")));
            return;
        }
        String desc = configService.get(ConfigKeyEnum.superHongBaoShareDesc.getKey());
        desc = desc.replace("[淘口令]", TaoBaoUtil.filterTaoToken(token));
        try {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(StringUtil.getBase64String(desc))));
        } catch (Exception e) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult(1002, "未知错误")));
        }
    }
    @RequestMapping(value = "getYuShouToken")
    public void getYuShouToken(String sign, Long uid, String callback, PrintWriter out) {
        if (!StringUtil.Md5(uid + "@?,223Hbb88lll").equalsIgnoreCase(sign)) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult(1001, "签名错误")));
            return;
        }
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult(1, "请登录")));
            return;
        }
        UserExtraTaoBaoInfo info = userExtraTaoBaoInfoService.getByUid(uid);
        if (info == null || StringUtil.isNullOrEmpty(info.getRelationId()) || info.getRelationValid() == false) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult(2, "您尚未绑定淘宝,请前往我的->个人信息 绑定淘宝账号")));
            return;
        }
        String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.S11YuShou, info.getRelationId() + "");
        String token = null;
        if (Constant.IS_OUTNET)
            token = redisManager.getCommonString(key);
        if (StringUtil.isNullOrEmpty(token)) {
            try {
                TaoKeOfficialActivityConvertResultDTO dto = TaoKeApiUtil.officialActivityConvert("19507100253",
                        "1574926757600", info.getRelationId());
                String link = dto.getShort_click_url();
                if (!StringUtil.isNullOrEmpty(link)) {
                    token = TaoKeApiUtil.getTKToken("http://img.flqapp.com/resource/s11/banner.jpg", "预售商品付定金,得奖金!",
                            link);
                    if (Constant.IS_OUTNET)
                        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, "口令生成失败,请稍后重试")));
            return;
        }
        String desc = configService.get(ConfigKeyEnum.superYuShouShareDesc.getKey());
        desc = desc.replace("[淘口令]", TaoBaoUtil.filterTaoToken(token));
        try {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(StringUtil.getBase64String(desc))));
        } catch (Exception e) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult(1002, "未知错误")));
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java
@@ -29,7 +29,6 @@
import com.yeshi.fanli.dao.MongodbBaseDao;
import com.yeshi.fanli.entity.order.OrderMoneyDailyCount;
import com.yeshi.fanli.entity.order.OrderMoneyDailyCount.SourceTypeEnum;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.vo.order.OrderRankingVO;
@Repository
fanli/src/main/java/com/yeshi/fanli/dto/vip/VIPConvertResultDTO.java
New file
@@ -0,0 +1,108 @@
package com.yeshi.fanli.dto.vip;
//唯品会转链
public class VIPConvertResultDTO {
    private String source;// 链接生成的数据源: 如果targetType为GOODSID,该值商品id,
                            // 如果targetType为URL,该值为唯品会url,
                            // 如果targetType为VIP_SMALL和GENERAL_SAMLL时,该值为空(此类型联盟API暂未开放)
    private String url;// CPS短链接
    private String longUrl;// CPS长连接
    private String ulUrl;// CPS通用连接
    private String deeplinkUrl;// CPS Deeplink链接
    private String traFrom;// 小程序CPS参数:通用小程序跟单参数
    private String noEvokeUrl;// CPS短链接:不唤起快应用
    private String noEvokeLongUrl;// CPS长链接:不唤起快应用
    private String vipWxUrl;// 唯品会小程序链接:仅在根据商品id获取时返回
    private String vipWxCode;// 唯品会小程序码:仅在根据商品id获取时返回,需获取小程序码高级权限
    private String vipQuickAppUrl;// 唯品会快应用链接
    public String getSource() {
        return source;
    }
    public void setSource(String source) {
        this.source = source;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getLongUrl() {
        return longUrl;
    }
    public void setLongUrl(String longUrl) {
        this.longUrl = longUrl;
    }
    public String getUlUrl() {
        return ulUrl;
    }
    public void setUlUrl(String ulUrl) {
        this.ulUrl = ulUrl;
    }
    public String getDeeplinkUrl() {
        return deeplinkUrl;
    }
    public void setDeeplinkUrl(String deeplinkUrl) {
        this.deeplinkUrl = deeplinkUrl;
    }
    public String getTraFrom() {
        return traFrom;
    }
    public void setTraFrom(String traFrom) {
        this.traFrom = traFrom;
    }
    public String getNoEvokeUrl() {
        return noEvokeUrl;
    }
    public void setNoEvokeUrl(String noEvokeUrl) {
        this.noEvokeUrl = noEvokeUrl;
    }
    public String getNoEvokeLongUrl() {
        return noEvokeLongUrl;
    }
    public void setNoEvokeLongUrl(String noEvokeLongUrl) {
        this.noEvokeLongUrl = noEvokeLongUrl;
    }
    public String getVipWxUrl() {
        return vipWxUrl;
    }
    public void setVipWxUrl(String vipWxUrl) {
        this.vipWxUrl = vipWxUrl;
    }
    public String getVipWxCode() {
        return vipWxCode;
    }
    public void setVipWxCode(String vipWxCode) {
        this.vipWxCode = vipWxCode;
    }
    public String getVipQuickAppUrl() {
        return vipQuickAppUrl;
    }
    public void setVipQuickAppUrl(String vipQuickAppUrl) {
        this.vipQuickAppUrl = vipQuickAppUrl;
    }
}
fanli/src/main/java/com/yeshi/fanli/entity/dynamic/SimpleGoods.java
@@ -9,7 +9,7 @@
    private static final long serialVersionUID = 1L;
    // 商品ID
    @Expose
    private Long goodsId;
    private String goodsId;
    // 商品类型 1-淘宝 2-京东 3-拼多多
    @Expose
    private Integer goodsType;
@@ -28,11 +28,11 @@
    private String remarks;
        
    public Long getGoodsId() {
    public String getGoodsId() {
        return goodsId;
    }
    public void setGoodsId(Long goodsId) {
    public void setGoodsId(String goodsId) {
        this.goodsId = goodsId;
    }
fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java
@@ -20,6 +20,7 @@
    shareRuleLinkJD("share_rule_link_jd", "京东分享规则(帮助中心)"),
    shareRuleLinkPDD("share_rule_link_pdd", "拼多多分享规则(帮助中心)"),
    shareRuleLinkVIP("share_rule_link_vip", "唯品会分享规则(帮助中心)"),
    shareRuleLinkSuning("share_rule_link_suning", "苏宁分享规则(帮助中心)"),
    shareSingleGoodsRule("share_single_goods_rule", "单品分享规则"),
    shareGoodsTemplateRules("share_goods_template_rules", "分享模板规则"), // 存在2个相同
                                                                        // 内容不同、版本但一样
@@ -31,6 +32,9 @@
    goodsShareNotify("goods_share_notify", "单个商品分享提醒"),
    goodsShareNotifyJD("goods_share_notify_jd", "京东分享提醒"),
    goodsShareNotifyPDD("goods_share_notify_pdd", "拼多多分享提醒"),
    goodsShareNotifyVIP("goods_share_notify_vip", "拼多多分享提醒"),
    goodsShareNotifySuning("goods_share_notify_Suning", "拼多多分享提醒"),
    goodsShareTextCoupon("goods_share_text_coupon", "单个商品分享文案(有券)"),
    goodsShareTextCouponJD("goods_share_text_coupon_jd", "京东单个商品分享模板-有券"),
    goodsShareTextCouponPDD("goods_share_text_coupon_pdd", "拼多多单个商品分享模板-有券"),
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java
@@ -31,6 +31,7 @@
import com.yeshi.fanli.dto.ConfigParamsDTO;
import com.yeshi.fanli.dto.jd.JDCouponInfo;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.bus.activity.ActivityUser;
import com.yeshi.fanli.entity.bus.clazz.GoodsClass;
@@ -300,7 +301,7 @@
    }
    @Override
    public String saveSingleGoods(String pid, Long goodsId, Integer goodsType, String videoUrl, Integer picNum,
    public String saveSingleGoods(String pid, String goodsId, Integer goodsType, String videoUrl, Integer picNum,
            String picUrls, MultipartHttpServletRequest fileRequest) throws GoodsEvaluateException, Exception {
        if (StringUtil.isNullOrEmpty(pid)) {
            throw new GoodsEvaluateException(1, "请保存第一部分信息");
@@ -421,16 +422,16 @@
        params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
        if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            try {
                TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(goodsId);
                TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(Long.parseLong(goodsId));
                goodsDetailVO = GoodsDetailVOFactory.convertTaoBao(goodsBrief, params);
            } catch (TaobaoGoodsDownException e) {
                throw new GoodsEvaluateException(1, "商品已下架");
            }
        } else if (goodsType == Constant.SOURCE_TYPE_JD) {
            jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
            jdGoods = jdGoodsCacheUtil.getGoodsInfo(Long.parseLong(goodsId));
            goodsDetailVO = GoodsDetailVOFactory.convertJDGoods(jdGoods, params);
        } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            pddGoods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
            pddGoods = pinDuoDuoCacheUtil.getGoodsInfo(Long.parseLong(goodsId));
            goodsDetailVO = GoodsDetailVOFactory.convertPDDGoods(pddGoods, params);
        }
@@ -518,7 +519,7 @@
        if (comments != null && comments.size() > 0) {
            for (CommentInfo commentInfo : comments) {
                if (commentInfo.getTypeEnum() == CommentInfoEnum.goodsCoupon) {
                    if (oldGoodsVO != null && oldGoodsVO.getGoodsId().longValue() == goodsId.longValue()
                    if (oldGoodsVO != null && oldGoodsVO.getGoodsId().equalsIgnoreCase(goodsId)
                            && oldGoodsVO.getGoodsType() == goodsType) {
                        addComment = false;
                    }
@@ -537,7 +538,7 @@
        String commentText = "";
        if (addComment) {
            if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
                TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, goodsId, "0");
                TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, Long.parseLong(goodsId), "0");
                String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
                commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
            } else if (goodsType == Constant.SOURCE_TYPE_JD) {
@@ -555,7 +556,7 @@
                }
                commentText = template.replace("[链接]", jumpLink);
            } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
                String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsId, PinDuoDuoApiUtil.PID_SHARE + "", "1");
                String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(Long.parseLong(goodsId), PinDuoDuoApiUtil.PID_SHARE + "", "1");
                if (jumpLink == null) {
                    throw new GoodsEvaluateException(1, "该商品转链失败");
                }
@@ -603,13 +604,13 @@
    private String createTokenAndLink(GoodsDetailVO goodsDetailVO) throws Exception {
        String commentText = "";
        if (goodsDetailVO.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
            TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, goodsDetailVO.getGoodsId(), "0");
            TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L,Long.parseLong(goodsDetailVO.getGoodsId()), "0");
            String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
            commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
        } else if (goodsDetailVO.getGoodsType() == Constant.SOURCE_TYPE_JD) {
            String couponUrl = null;
            JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsDetailVO.getGoodsId());
            JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(Long.parseLong(goodsDetailVO.getGoodsId()));
            JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(jdGoods);
            if (couponInfo != null) {
                couponUrl = couponInfo.getLink();
@@ -620,7 +621,7 @@
            String template = configService.get(ConfigKeyEnum.quickShareJDCommentText.getKey());
            commentText = template.replace("[链接]", jumpLink);
        } else if (goodsDetailVO.getGoodsType() == Constant.SOURCE_TYPE_PDD) {
            String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsDetailVO.getGoodsId(),
            String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(Long.parseLong(goodsDetailVO.getGoodsId()),
                    PinDuoDuoApiUtil.PID_SHARE + "", "1");
            String template = configService.get(ConfigKeyEnum.quickSharePDDCommentText.getKey());
            commentText = template.replace("[链接]", jumpLink);
@@ -800,7 +801,7 @@
                }
                boolean del = false;
                long oldGoodsId = old.getGoods().getGoodsId().longValue();
                String oldGoodsId = old.getGoods().getGoodsId();
                int oldGoodsType = old.getGoods().getGoodsType().intValue();
                for (ImgInfo newInfo : listImg) {
                    ImgEnum type2 = old.getType();
@@ -808,7 +809,7 @@
                        continue;
                    }
                    if (oldGoodsId == newInfo.getGoods().getGoodsId().longValue()
                    if (oldGoodsId .equalsIgnoreCase(newInfo.getGoods().getGoodsId())
                            && oldGoodsType == newInfo.getGoods().getGoodsType().intValue()) {
                        String url = newInfo.getUrl();
                        if (url.equals(old.getUrl())) {
@@ -1887,12 +1888,12 @@
        }
    }
    private GoodsDetailVO getGoodsNewInfo(Long goodsId, int goodsType, ConfigParamsDTO paramsDTO) {
    private GoodsDetailVO getGoodsNewInfo(String goodsId, int goodsType, ConfigParamsDTO paramsDTO) {
        GoodsDetailVO vo = null;
        if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            TaoBaoGoodsBrief goods;
            try {
                goods = redisManager.getTaoBaoGoodsBrief(goodsId);
                goods = redisManager.getTaoBaoGoodsBrief(Long.parseLong(goodsId));
                if (goods != null) {
                    vo = GoodsDetailVOFactory.convertTaoBao(goods, paramsDTO);
                }
@@ -1901,12 +1902,12 @@
            }
        } else if (goodsType == Constant.SOURCE_TYPE_JD) {
            JDGoods goodsInfo = jdGoodsCacheUtil.getGoodsInfo(goodsId);
            JDGoods goodsInfo = jdGoodsCacheUtil.getGoodsInfo(Long.parseLong(goodsId));
            if (goodsInfo != null) {
                vo = GoodsDetailVOFactory.convertJDGoods(goodsInfo, paramsDTO);
            }
        } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            PDDGoodsDetail goodsInfo = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
            PDDGoodsDetail goodsInfo = pinDuoDuoCacheUtil.getGoodsInfo(Long.parseLong(goodsId));
            if (goodsInfo != null)
                vo = GoodsDetailVOFactory.convertPDDGoods(goodsInfo, paramsDTO);
        }
@@ -1914,19 +1915,19 @@
    }
    @Override
    public void addGoodsEvaluate(Long goodsId, List<ImgInfo> imgList, ActivityUser user, String title, String comment,
    public void addGoodsEvaluate(String goodsId, List<ImgInfo> imgList, ActivityUser user, String title, String comment,
            Date startTime) throws GoodsEvaluateException {
        if (goodsId == null || user == null || StringUtil.isNullOrEmpty(title)) {
            throw new GoodsEvaluateException(1, "相关参数不能为空");
        }
        List<GoodsEvaluate> evaluateList = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_TAOBAO, goodsId);
        List<GoodsEvaluate> evaluateList = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_TAOBAO, Long.parseLong(goodsId));
        if (evaluateList != null && evaluateList.size() > 0)
            return;
        TaoBaoGoodsBrief goodsBrief = null;
        try {
            goodsBrief = redisManager.getTaoBaoGoodsBrief(goodsId);
            goodsBrief = redisManager.getTaoBaoGoodsBrief(Long.parseLong(goodsId));
        } catch (TaobaoGoodsDownException e) {
            throw new GoodsEvaluateException(1, "商品已下架");
        }
@@ -2056,7 +2057,7 @@
            for (GoodsEvaluate goodsEvaluate : listExist) {
                GoodsDetailVO goods = goodsEvaluate.getGoods();
                if (goods != null && goods.getGoodsType() == 1) {
                    listId.add(goods.getGoodsId());
                    listId.add(Long.parseLong(goods.getGoodsId()));
                }
            }
        }
@@ -2375,12 +2376,29 @@
        updateGoods(queryExist, goodsNew);
    }
    @Override
    public void updateSuningGoods(SuningGoodsInfo goods) {
        if (goods == null) {
            return;
        }
        List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_SUNING,
                Long.parseLong(goods.getCommodityInfo().getCommodityCode()));
        if (queryExist == null || queryExist.size() == 0) {
            return;
        }
        ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
        paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
        GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertSuningGoods(goods, paramsDTO);
        updateGoods(queryExist, goodsNew);
    }
    private void updateGoods(List<GoodsEvaluate> listExist, GoodsDetailVO goodsNew) {
        long goodsId = goodsNew.getGoodsId();
        String goodsId = goodsNew.getGoodsId();
        int goodsType = goodsNew.getGoodsType();
        for (GoodsEvaluate goodsEvaluate : listExist) {
            GoodsDetailVO goodsDetailVO = goodsEvaluate.getGoods();
            if (goodsDetailVO != null && goodsDetailVO.getGoodsId() != null && goodsDetailVO.getGoodsId() == goodsId
            if (goodsDetailVO != null && goodsDetailVO.getGoodsId() != null && goodsDetailVO.getGoodsId().equalsIgnoreCase(goodsId)
                    && goodsDetailVO.getGoodsType() == goodsType) {
                goodsEvaluate.setGoods(goodsNew);
            }
@@ -2393,7 +2411,7 @@
            for (ImgInfo imgInfo : imgList) {
                SimpleGoods simpleGoods = imgInfo.getGoods();
                if (simpleGoods == null || simpleGoods.getGoodsId() != goodsId
                if (simpleGoods == null || !simpleGoods.getGoodsId().equalsIgnoreCase(goodsId)
                        || goodsType != simpleGoods.getGoodsType()) {
                    continue;
                }
@@ -2419,12 +2437,12 @@
    }
    @Override
    public void offlineTaoBaoGoods(Long goodsId) {
    public void offlineTaoBaoGoods(String goodsId) {
        try {
            if (goodsId == null) {
                return;
            }
            List<GoodsEvaluate> list = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_TAOBAO, goodsId);
            List<GoodsEvaluate> list = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_TAOBAO,Long.parseLong(goodsId));
            if (list == null || list.size() == 0) {
                return;
            }
@@ -2437,7 +2455,7 @@
    }
    @CacheEvict(value = "dynamicCache", allEntries = true)
    private void offlineGoods(List<GoodsEvaluate> list, int goodsType, Long goodsId) {
    private void offlineGoods(List<GoodsEvaluate> list, int goodsType, String goodsId) {
        for (GoodsEvaluate goodsEvaluate : list) {
            // 商品下架
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/CollectionGoodsV2ServiceImpl.java
@@ -11,6 +11,8 @@
import com.yeshi.fanli.dao.mybatis.goods.CollectionGoodsV2Mapper;
import com.yeshi.fanli.dao.mybatis.goods.CommonGoodsMapper;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.goods.CollectionGoodsV2;
import com.yeshi.fanli.entity.goods.CommonGoods;
@@ -34,99 +36,75 @@
    @Resource
    private CommonGoodsService commonGoodsService;
    @Transactional(rollbackFor=Exception.class)
    private void addCollection(Long uid, CommonGoods commonGoods) throws CollectionGoodsException {
        if (commonGoods == null)
            throw new CollectionGoodsException(2, "商品信息获取失败");
        // 判断商品是否存在
        try {
            commonGoods = commonGoodsService.addOrUpdateCommonGoods(commonGoods);
        } catch (CommonGoodsException e) {
            commonGoods = null;
        }
        if (commonGoods == null || commonGoods.getId() == null)
            throw new CollectionGoodsException(3, "商品信息添加失败");
        CollectionGoodsV2 collectionGoodsV2 = collectionGoodsV2Mapper.selectByUidAndCommonGoodsId(uid,
                commonGoods.getId());
        if (collectionGoodsV2 != null)
            throw new CollectionGoodsException(4, "商品已被收藏");
        collectionGoodsV2 = new CollectionGoodsV2();
        collectionGoodsV2.setCommonGoods(commonGoods);
        collectionGoodsV2.setCreateTime(new Date());
        collectionGoodsV2.setUpdateTime(new Date());
        collectionGoodsV2.setUserInfo(new UserInfo(uid));
        collectionGoodsV2Mapper.insertSelective(collectionGoodsV2);
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void addCollection(Long uid, TaoBaoGoodsBrief goods) throws CollectionGoodsException {
        if (uid == null || uid == 0)
            throw new CollectionGoodsException(1, "无用户ID");
        CommonGoods commonGoods = CommonGoodsFactory.create(goods);
        if (commonGoods == null)
            throw new CollectionGoodsException(2, "商品信息获取失败");
        // 判断商品是否存在
        try {
            commonGoods = commonGoodsService.addOrUpdateCommonGoods(commonGoods);
        } catch (CommonGoodsException e) {
            commonGoods = null;
        }
        if (commonGoods == null || commonGoods.getId() == null)
            throw new CollectionGoodsException(3, "商品信息添加失败");
        CollectionGoodsV2 collectionGoodsV2 = collectionGoodsV2Mapper.selectByUidAndCommonGoodsId(uid,
                commonGoods.getId());
        if (collectionGoodsV2 != null)
            throw new CollectionGoodsException(4, "商品已被收藏");
        collectionGoodsV2 = new CollectionGoodsV2();
        collectionGoodsV2.setCommonGoods(commonGoods);
        collectionGoodsV2.setCreateTime(new Date());
        collectionGoodsV2.setUpdateTime(new Date());
        collectionGoodsV2.setUserInfo(new UserInfo(uid));
        collectionGoodsV2Mapper.insertSelective(collectionGoodsV2);
        addCollection(uid,commonGoods);
    }
    @Transactional(rollbackFor=Exception.class)
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void addJDCollection(Long uid, JDGoods jdGoods) throws CollectionGoodsException {
        if (uid == null || uid == 0)
            throw new CollectionGoodsException(1, "无用户ID");
        CommonGoods commonGoods = CommonGoodsFactory.create(jdGoods);
        if (commonGoods == null)
            throw new CollectionGoodsException(2, "商品信息获取失败");
        // 判断商品是否存在
        try {
            commonGoods = commonGoodsService.addOrUpdateCommonGoods(commonGoods);
        } catch (CommonGoodsException e) {
            commonGoods = null;
        }
        if (commonGoods == null || commonGoods.getId() == null)
            throw new CollectionGoodsException(3, "商品信息添加失败");
        CollectionGoodsV2 collectionGoodsV2 = collectionGoodsV2Mapper.selectByUidAndCommonGoodsId(uid,
                commonGoods.getId());
        if (collectionGoodsV2 != null)
            throw new CollectionGoodsException(4, "商品已被收藏");
        collectionGoodsV2 = new CollectionGoodsV2();
        collectionGoodsV2.setCommonGoods(commonGoods);
        collectionGoodsV2.setCreateTime(new Date());
        collectionGoodsV2.setUpdateTime(new Date());
        collectionGoodsV2.setUserInfo(new UserInfo(uid));
        collectionGoodsV2Mapper.insertSelective(collectionGoodsV2);
        addCollection(uid,commonGoods);
    }
    @Transactional(rollbackFor=Exception.class)
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void addPDDCollection(Long uid, PDDGoodsDetail goods) throws CollectionGoodsException {
        if (uid == null || uid == 0)
            throw new CollectionGoodsException(1, "无用户ID");
        CommonGoods commonGoods = CommonGoodsFactory.create(goods);
        if (commonGoods == null)
            throw new CollectionGoodsException(2, "商品信息获取失败");
        // 判断商品是否存在
        try {
            commonGoods = commonGoodsService.addOrUpdateCommonGoods(commonGoods);
        } catch (CommonGoodsException e) {
            commonGoods = null;
        }
        if (commonGoods == null || commonGoods.getId() == null)
            throw new CollectionGoodsException(3, "商品信息添加失败");
        CollectionGoodsV2 collectionGoodsV2 = collectionGoodsV2Mapper.selectByUidAndCommonGoodsId(uid,
                commonGoods.getId());
        if (collectionGoodsV2 != null)
            throw new CollectionGoodsException(4, "商品已被收藏");
        collectionGoodsV2 = new CollectionGoodsV2();
        collectionGoodsV2.setCommonGoods(commonGoods);
        collectionGoodsV2.setCreateTime(new Date());
        collectionGoodsV2.setUpdateTime(new Date());
        collectionGoodsV2.setUserInfo(new UserInfo(uid));
        collectionGoodsV2Mapper.insertSelective(collectionGoodsV2);
        addCollection(uid,commonGoods);
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void addVIPCollection(Long uid, VIPGoodsInfo goods) throws CollectionGoodsException {
        if (uid == null || uid == 0)
            throw new CollectionGoodsException(1, "无用户ID");
        CommonGoods commonGoods = CommonGoodsFactory.create(goods);
        addCollection(uid,commonGoods);
    }
    @Override
    public void addSuningCollection(Long uid, SuningGoodsInfo goods) throws CollectionGoodsException {
        if (uid == null || uid == 0)
            throw new CollectionGoodsException(1, "无用户ID");
        CommonGoods commonGoods = CommonGoodsFactory.create(goods);
        addCollection(uid,commonGoods);
    }
    @Override
    public void addCollection(CollectionGoodsV2 goods) throws CollectionGoodsException {
        if (goods.getUserInfo() == null || goods.getCommonGoods() == null)
@@ -148,7 +126,7 @@
        collectionGoodsV2Mapper.insertSelective(goods);
    }
    @Transactional(rollbackFor=Exception.class)
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void cancelCollection(Long uid, Long id) throws CollectionGoodsException {
        if (uid == null || uid == 0)
@@ -166,8 +144,10 @@
    }
    @Override
    public List<CollectionGoodsV2> getCollectionGoodsList(Long uid, int page, int pageSize, Integer source, boolean notBackSuVip) {
        return collectionGoodsV2Mapper.selectByUidOrderByCreateTimeDesc(uid, (page - 1) * pageSize, pageSize, source, notBackSuVip);
    public List<CollectionGoodsV2> getCollectionGoodsList(Long uid, int page, int pageSize, Integer source,
            boolean notBackSuVip) {
        return collectionGoodsV2Mapper.selectByUidOrderByCreateTimeDesc(uid, (page - 1) * pageSize, pageSize, source,
                notBackSuVip);
    }
    @Override
@@ -176,7 +156,8 @@
    }
    @Override
    public void cancelCollectionByAuctionId(Long uid, Long auctionId, Integer goodsType) throws CollectionGoodsException {
    public void cancelCollectionByAuctionId(Long uid, Long auctionId, Integer goodsType)
            throws CollectionGoodsException {
        CollectionGoodsV2 goodsV2 = collectionGoodsV2Mapper.selectByUidAndGoodsType(uid, auctionId, goodsType);
        if (goodsV2 == null)
            throw new CollectionGoodsException(1, "无收藏");
@@ -193,12 +174,12 @@
        CollectionGoodsV2 v2 = collectionGoodsV2Mapper.selectByUidAndGoodsType(uid, actionId, goodsType);
        return v2;
    }
    @Override
    public void deteleBYByUidAndCommonId(Long uid, Long commonId) {
        List<CollectionGoodsV2> list = collectionGoodsV2Mapper.getByUidAndCommonId(uid, commonId);
        if (list != null && list.size() > 0) {
            for (CollectionGoodsV2 v2: list) {
            for (CollectionGoodsV2 v2 : list) {
                collectionGoodsV2Mapper.deleteByPrimaryKey(v2.getId());
            }
        }
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/ScanHistoryV2ServiceImpl.java
@@ -9,6 +9,7 @@
import com.yeshi.fanli.dao.mybatis.goods.ScanHistoryV2Mapper;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.goods.CommonGoods;
@@ -39,6 +40,21 @@
            throw new ScanHistoryException(1, "设备或用户信息缺失");
        CommonGoods commonGoods = CommonGoodsFactory.create(goods);
        addScanHistory(commonGoods, device, uid);
    }
    @Override
    public void addSuningScanHistory(Long uid, String device, SuningGoodsInfo suningGoods)
            throws CommonGoodsException, ScanHistoryException {
        if (uid == null && StringUtil.isNullOrEmpty(device))
            throw new ScanHistoryException(1, "设备或用户信息缺失");
        CommonGoods commonGoods = CommonGoodsFactory.create(suningGoods);
        addScanHistory(commonGoods, device, uid);
    }
    private void addScanHistory(CommonGoods commonGoods, String device, Long uid)
            throws CommonGoodsException, ScanHistoryException {
        commonGoods = commonGoodsService.addOrUpdateCommonGoods(commonGoods);
        if (commonGoods == null)
            throw new CommonGoodsException(2, "商品信息不完整");
@@ -87,21 +103,7 @@
            throw new ScanHistoryException(1, "设备或用户信息缺失");
        CommonGoods commonGoods = CommonGoodsFactory.create(goods);
        commonGoods = commonGoodsService.addOrUpdateCommonGoods(commonGoods);
        if (commonGoods == null)
            throw new CommonGoodsException(2, "商品信息不完整");
        // 添加浏览记录
        ScanHistoryV2 scanHistoryV2 = new ScanHistoryV2();
        scanHistoryV2.setCommonGoods(commonGoods);
        scanHistoryV2.setCreateTime(new Date());
        scanHistoryV2.setDevice(device);
        if (uid != null)
            scanHistoryV2.setUserInfo(new UserInfo(uid));
        scanHistoryV2.setUpdateTime(new Date());
        scanHistoryV2Mapper.insertSelective(scanHistoryV2);
        addScanHistory(commonGoods, device, uid);
    }
    @Override
@@ -111,21 +113,7 @@
            throw new ScanHistoryException(1, "设备或用户信息缺失");
        CommonGoods commonGoods = CommonGoodsFactory.create(pddGoods);
        commonGoods = commonGoodsService.addOrUpdateCommonGoods(commonGoods);
        if (commonGoods == null)
            throw new CommonGoodsException(2, "商品信息不完整");
        // 添加浏览记录
        ScanHistoryV2 scanHistoryV2 = new ScanHistoryV2();
        scanHistoryV2.setCommonGoods(commonGoods);
        scanHistoryV2.setCreateTime(new Date());
        scanHistoryV2.setDevice(device);
        if (uid != null)
            scanHistoryV2.setUserInfo(new UserInfo(uid));
        scanHistoryV2.setUpdateTime(new Date());
        scanHistoryV2Mapper.insertSelective(scanHistoryV2);
        addScanHistory(commonGoods, device, uid);
    }
    @Override
@@ -147,7 +135,8 @@
            Integer source, boolean notBackSuVip) {
        if (uid == null && StringUtil.isNullOrEmpty(device))
            return null;
        return scanHistoryV2Mapper.selectByDeviceOrUid(uid, device, (page - 1) * pageSize, pageSize, source, notBackSuVip);
        return scanHistoryV2Mapper.selectByDeviceOrUid(uid, device, (page - 1) * pageSize, pageSize, source,
                notBackSuVip);
    }
    @Override
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/ShareGoodsTextTemplateServiceImpl.java
@@ -12,6 +12,7 @@
import com.yeshi.fanli.dao.mybatis.goods.ShareGoodsTextTemplateMapper;
import com.yeshi.fanli.dto.jd.JDPingouInfo;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.goods.ShareGoodsTextTemplate;
import com.yeshi.fanli.entity.jd.JDGoods;
@@ -288,6 +289,17 @@
        }
        return template;
    }
    @Override
    public String createContentSuning(String template, SuningGoodsInfo goods, String jumpLink) {
        String commentText = template.replace("{原价}", goods.getCommodityInfo().getCommodityPrice());
        commentText = commentText.replace("{链接}", jumpLink);
        commentText = commentText.replace("领券抢购", "抢购");
        commentText = commentText.replace("【券后价】{券后价}元", "");
        return deleteBlankLine(commentText);
    }
    @Override
@@ -704,4 +716,6 @@
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoGoodsUpdateServiceImpl.java
@@ -123,7 +123,7 @@
        // 分享爆款数据删除
        shareHotGoodsService.deleteByGoodsId(auctionId);
        
        goodsEvaluateService.offlineTaoBaoGoods(auctionId);
        goodsEvaluateService.offlineTaoBaoGoods(auctionId+"");
    }
    @Transactional(rollbackFor = Exception.class)
fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/ThreeSaleDetailSerivceImpl.java
@@ -34,8 +34,8 @@
        detail.setId(id);
        // 根据主键查询
        ThreeSaleDetail old = threeSaleDetailDao.get(id);
        if (old == null)
            threeSaleDetailDao.save(detail);
        // if (old == null)
        threeSaleDetailDao.save(detail);
    }
    @Override
@@ -61,18 +61,22 @@
    @Override
    public void addByWorkerUid(Long workerUid) {
        List<ThreeSale> list = threeSaleSerivce.getMyBossDeepList(workerUid, 100);
        LogHelper.teamInfo(String.format("邀请详细信息: 用户ID:%s  上级数量:%s",workerUid+"",list.size()));
        LogHelper.teamInfo(String.format("邀请详细信息: 用户ID:%s  上级数量:%s", workerUid + "", list.size()));
        int level = 0;
        long createTime = 0L;
        if (list.size() > 0) {
            if (list.get(0).getSucceedTime() != null)
                createTime = list.get(0).getSucceedTime();
            else
                createTime = list.get(0).getCreateTime();
        }
        for (ThreeSale tts : list) {
            level++;
            ThreeSaleDetail detail = new ThreeSaleDetail();
            detail.setBossUid(tts.getBoss().getId());
            detail.setLevel(level);
            detail.setWorkerUid(workerUid);
            if (tts.getSucceedTime() != null)
                detail.setCreateTime(new Date(tts.getSucceedTime()));
            else
                detail.setCreateTime(new Date(tts.getCreateTime()));
            detail.setCreateTime(new Date(createTime));
            try {
                if (tts.getState())
                    addThreeSaleDetail(detail);
fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/GiveVIPApplyInfoServiceImpl.java
@@ -184,7 +184,7 @@
        userAccountMsgNotificationService
                .artificialVipUpgradeReject(uid,
                        preInfo == null ? UserLevelEnum.daRen.getName()
                                : UserLevelUtil.getByLevel(preInfo.getProcess()).getName(),
                                :UserLevelUtil.getShowLevel(UserLevelUtil.getByLevel(preInfo.getProcess())).getName(),
                        info.getLevel().getName(), reason);
    }
fanli/src/main/java/com/yeshi/fanli/service/inter/dynamic/GoodsEvaluateService.java
@@ -7,6 +7,7 @@
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.bus.activity.ActivityUser;
import com.yeshi.fanli.entity.dynamic.CommentInfo;
@@ -80,7 +81,7 @@
     * @throws GoodsEvaluateException
     * @throws Exception
     */
    public String saveSingleGoods(String pid, Long goodsId, Integer goodsType, String videoUrl, Integer picNum, String picUrls,
    public String saveSingleGoods(String pid, String goodsId, Integer goodsType, String videoUrl, Integer picNum, String picUrls,
            MultipartHttpServletRequest fileRequest) throws GoodsEvaluateException, Exception;
    /**
@@ -157,6 +158,8 @@
    
    
    public void updateVIPGoods(VIPGoodsInfo goods);
    public void updateSuningGoods(SuningGoodsInfo goods);
    public void addRanDomShareCount();
@@ -168,14 +171,14 @@
     * @param title 标题    必传
     * @param comment
     */
    public void addGoodsEvaluate(Long goodsId,List<ImgInfo> imgList, ActivityUser user, String title,String comment,Date startTime) throws GoodsEvaluateException;
    public void addGoodsEvaluate(String goodsId,List<ImgInfo> imgList, ActivityUser user, String title,String comment,Date startTime) throws GoodsEvaluateException;
    
    /**
     * 下架商品
     * @param goodsId
     */
    public void offlineTaoBaoGoods(Long goodsId);
    public void offlineTaoBaoGoods(String goodsId);
    /**
     * 状态切换
fanli/src/main/java/com/yeshi/fanli/service/inter/goods/CollectionGoodsV2Service.java
@@ -3,6 +3,8 @@
import java.util.List;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.goods.CollectionGoodsV2;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
@@ -49,7 +51,8 @@
     *            -商品ID
     * @throws CollectionGoodsException
     */
    public void cancelCollectionByAuctionId(Long uid, Long auctionId, Integer goodsType) throws CollectionGoodsException;
    public void cancelCollectionByAuctionId(Long uid, Long auctionId, Integer goodsType)
            throws CollectionGoodsException;
    /**
     * 取消收藏
@@ -67,7 +70,8 @@
     * @param pageSize
     * @return
     */
    public List<CollectionGoodsV2> getCollectionGoodsList(Long uid, int page, int pageSize, Integer source, boolean notBackSuVip);
    public List<CollectionGoodsV2> getCollectionGoodsList(Long uid, int page, int pageSize, Integer source,
            boolean notBackSuVip);
    /**
     * 获取收藏数量
@@ -103,6 +107,30 @@
    public void addPDDCollection(Long uid, PDDGoodsDetail goods) throws CollectionGoodsException;
    /**
     * 唯品会收藏
     * @Title: addVIPCollection
     * @Description:
     * @param uid
     * @param goods
     * @throws CollectionGoodsException
     * void 返回类型
     * @throws
     */
    public void addVIPCollection(Long uid, VIPGoodsInfo goods) throws CollectionGoodsException;
    /**
     * 苏宁收藏
     * @Title: addSuningCollection
     * @Description:
     * @param uid
     * @param goods
     * @throws CollectionGoodsException
     * void 返回类型
     * @throws
     */
    public void addSuningCollection(Long uid, SuningGoodsInfo goods) throws CollectionGoodsException;
    /**
     * 根据简版商品ID删除
     * @param uid
     * @param commonId
fanli/src/main/java/com/yeshi/fanli/service/inter/goods/ScanHistoryV2Service.java
@@ -3,6 +3,7 @@
import java.util.List;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.goods.ScanHistoryV2;
import com.yeshi.fanli.entity.jd.JDGoods;
@@ -104,6 +105,22 @@
     */
    public void addVIPScanHistory(Long uid, String device, VIPGoodsInfo pddGoods)
            throws CommonGoodsException, ScanHistoryException;
    /**
     * 苏宁浏览记录
     * @Title: addSuningScanHistory
     * @Description:
     * @param uid
     * @param device
     * @param suningGoods
     * @throws CommonGoodsException
     * @throws ScanHistoryException
     * void 返回类型
     * @throws
     */
    public void addSuningScanHistory(Long uid, String device, SuningGoodsInfo suningGoods)
            throws CommonGoodsException, ScanHistoryException;
    /**
     * 根据简版商品ID删除
fanli/src/main/java/com/yeshi/fanli/service/inter/goods/ShareGoodsTextTemplateService.java
@@ -1,6 +1,7 @@
package com.yeshi.fanli.service.inter.goods;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.goods.ShareGoodsTextTemplate;
import com.yeshi.fanli.entity.jd.JDGoods;
@@ -211,6 +212,8 @@
    public String createContentPDD(String template, PDDGoodsDetail goods, String jumpLink, boolean coupon);
    
    public String createContentVIP(String template, VIPGoodsInfo goods, String jumpLink);
    public String createContentSuning(String template, SuningGoodsInfo goods, String jumpLink);
    public String getTextTemplateByJD(Long uid);
fanli/src/main/java/com/yeshi/fanli/util/Constant.java
@@ -24,7 +24,7 @@
    public static boolean IS_TEST = true;
    public static boolean ENABLE_MQ = false;
    public static boolean ENABLE_MQ = true;
    public static int PAGE_SIZE = 20;
    
fanli/src/main/java/com/yeshi/fanli/util/factory/CommonGoodsFactory.java
@@ -269,7 +269,9 @@
        categoryInfo.setCid1(goods.getCategoryId());
        categoryInfo.setCid1Name(goods.getCategoryName());
        cg.setCategoryInfo(JSONObject.toJSON(categoryInfo).toString());
        //存放折扣价
        cg.setCouponStartPrice(new BigDecimal(goods.getVipPrice()));
        cg.setCouponInfo(MoneyBigDecimalUtil.getWithNoZera(MoneyBigDecimalUtil.mul(new BigDecimal(goods.getDiscount()), new BigDecimal(10))) + "折");
        return cg;
    }
fanli/src/main/java/com/yeshi/fanli/util/factory/goods/GoodsDetailVOFactory.java
@@ -65,7 +65,7 @@
     */
    public static GoodsDetailVO convertCommonGoods(CommonGoods goods, ConfigParamsDTO params) {
        GoodsDetailVO goodsInfo = new GoodsDetailVO();
        goodsInfo.setGoodsId(goods.getGoodsId());
        goodsInfo.setGoodsId(goods.getGoodsId() + "");
        goodsInfo.setTitle(goods.getTitle());
        Integer shopType = goods.getShopType();
@@ -136,9 +136,18 @@
            goodsInfo.setSalesType(4); // 总销量
            goodsInfo.setPriceName("拼团价");
            goodsInfo.setBaoyou(true);
        } else if (goodsType == Constant.SOURCE_TYPE_SUNING) {
            goodsInfo.setGoodsId(SuningUtil.getConcatGoodsIId(SuningUtil.getFullSupplierCode(goods.getSellerId() + ""),
                    goods.getGoodsId() + ""));
        } else {
            goodsInfo.setSalesType(1); // 月销量
            goodsInfo.setBaoyou(true);
        }
        if (goodsType == Constant.SOURCE_TYPE_VIP) {
            goodsInfo.setDiscount(goods.getCouponInfo());
            goodsInfo.setPriceName("折后价");
            goodsInfo.setCouponPrice(goods.getCouponStartPrice());
        }
        goodsInfo.setGoodsType(goodsType);
@@ -225,6 +234,10 @@
            goodsInfo.setShopInfo(shop);
        }
        if (goodsType == Constant.SOURCE_TYPE_VIP) {
            goodsInfo.setShopInfo(null);
        }
        // if (Constant.IS_TEST) {
        // // 添加标签
        // List<ClientTextStyleVO> labels = goodsInfo.getLabels();
@@ -254,7 +267,7 @@
        GoodsDetailVO goodsInfo = new GoodsDetailVO();
        goodsInfo.setBaoyou(true);
        goodsInfo.setGoodsType(Constant.SOURCE_TYPE_TAOBAO);
        goodsInfo.setGoodsId(goods.getAuctionId());
        goodsInfo.setGoodsId(goods.getAuctionId() + "");
        goodsInfo.setTitle(goods.getTitle());
        goodsInfo.setSalesType(1); // 默认月销量
        goodsInfo.setZkPrice(goods.getZkPrice());
@@ -367,7 +380,7 @@
        GoodsDetailVO goodsInfo = new GoodsDetailVO();
        goodsInfo.setBaoyou(true);
        goodsInfo.setGoodsType(Constant.SOURCE_TYPE_TAOBAO);
        goodsInfo.setGoodsId(goods.getAuctionId());
        goodsInfo.setGoodsId(goods.getAuctionId() + "");
        goodsInfo.setTitle(goods.getTitle());
        goodsInfo.setSalesType(1); // 默认月销量
        goodsInfo.setZkPrice(goods.getZkPrice());
@@ -590,7 +603,7 @@
    public static GoodsDetailVO convertJDGoods(JDGoods goods, ConfigParamsDTO params) {
        GoodsDetailVO goodsInfo = new GoodsDetailVO();
        goodsInfo.setGoodsType(Constant.SOURCE_TYPE_JD);
        goodsInfo.setGoodsId(goods.getSkuId());
        goodsInfo.setGoodsId(goods.getSkuId() + "");
        goodsInfo.setTitle(goods.getSkuName());
        goodsInfo.setSalesType(1); // 默认月销量
        goodsInfo.setPicUrl(goods.getPicUrl());
@@ -746,7 +759,7 @@
        GoodsDetailVO goodsInfo = new GoodsDetailVO();
        goodsInfo.setBaoyou(true);
        goodsInfo.setGoodsType(Constant.SOURCE_TYPE_PDD);
        goodsInfo.setGoodsId(goods.getGoodsId());
        goodsInfo.setGoodsId(goods.getGoodsId() + "");
        goodsInfo.setTitle(goods.getGoodsName());
        goodsInfo.setSalesType(4); // 总销量
        goodsInfo.setPriceName("拼团价");
@@ -879,12 +892,13 @@
        GoodsDetailVO goodsInfo = new GoodsDetailVO();
        goodsInfo.setBaoyou(true);
        goodsInfo.setGoodsType(Constant.SOURCE_TYPE_VIP);
        goodsInfo.setGoodsId(Long.parseLong(goods.getGoodsId()));
        goodsInfo.setGoodsId(Long.parseLong(goods.getGoodsId()) + "");
        goodsInfo.setTitle(goods.getGoodsName());
        goodsInfo.setSalesType(5); // 无销量
        goodsInfo.setPriceName("拼团价");
        goodsInfo.setPriceName("原价");
        goodsInfo.setPicUrl(goods.getGoodsThumbUrl()); // 缩略图
        goodsInfo.setZkPrice(MoneyBigDecimalUtil.getWithNoZera(new BigDecimal(goods.getVipPrice())));
        goodsInfo.setZkPrice(MoneyBigDecimalUtil.getWithNoZera(new BigDecimal(goods.getMarketPrice())));
        goodsInfo.setCouponPrice(MoneyBigDecimalUtil.getWithNoZera(new BigDecimal(goods.getVipPrice())));
        goodsInfo.setShopType(CommonGoods.SHOP_TYPE_VIP);
        goodsInfo.setImgList(goods.getGoodsDetailPictures());
@@ -936,7 +950,7 @@
        // 店铺信息
        String mallName = goods.getBrandName();
        if (!StringUtil.isMobile(mallName)) {
        if (!StringUtil.isNullOrEmpty(mallName)) {
            ShopInfoVO shop = new ShopInfoVO();
            shop.setShopName(mallName);
            if (goods.getBrandId() != null) {
@@ -946,6 +960,10 @@
            goodsInfo.setShopInfo(shop);
        }
        // 折扣信息
        goodsInfo.setDiscount(MoneyBigDecimalUtil
                .getWithNoZera(MoneyBigDecimalUtil.mul(new BigDecimal(goods.getDiscount()), new BigDecimal(10))) + "折");
        goodsInfo.setShopInfo(null);
        return goodsInfo;
    }
@@ -953,9 +971,10 @@
        GoodsDetailVO goodsInfo = new GoodsDetailVO();
        goodsInfo.setBaoyou(true);
        goodsInfo.setGoodsType(Constant.SOURCE_TYPE_SUNING);
        goodsInfo.setGoodsId(Long.parseLong(goods.getCommodityInfo().getCommodityCode()));
        goodsInfo.setGoodsId(SuningUtil.getConcatGoodsIId(goods.getCommodityInfo().getSupplierCode(),
                goods.getCommodityInfo().getCommodityCode()));
        goodsInfo.setTitle(goods.getCommodityInfo().getCommodityName());
        goodsInfo.setSalesType(5); // 无销量
        goodsInfo.setSalesType(1); // 月销
        goodsInfo.setPriceName("原价");
        if (goods.getCommodityInfo().getPictureUrl().size() > 0)
            goodsInfo.setPicUrl(goods.getCommodityInfo().getPictureUrl().get(0).getPicUrl()); // 缩略图
@@ -970,7 +989,17 @@
        goodsInfo.setImgList(imgList);
        goodsInfo.setState(0);
        goodsInfo.setSalesCount(goods.getCommodityInfo().getMonthSales());
        String salesCountMidea = "";
        Integer count = Integer.parseInt(goods.getCommodityInfo().getMonthSales());
        if (count < 10000) {
            salesCountMidea = count + "";
        } else {
            double sales = count;
            salesCountMidea = String.format("%.1f", sales / 10000);
            salesCountMidea = salesCountMidea + "万";
        }
        goodsInfo.setSalesCount(salesCountMidea);
        // 券信息
        if (goods.getCouponInfo() != null && !StringUtil.isNullOrEmpty(goods.getCouponInfo().getCouponUrl())) {// 有券
@@ -994,6 +1023,11 @@
            goodsInfo.setHasCoupon(true);
            goodsInfo.setCouponInfo(coupon);
            if (goodsInfo.getZkPrice().compareTo(coupon.getStartFee()) >= 0) {
                goodsInfo.setCouponPrice(goodsInfo.getZkPrice().subtract(coupon.getAmount()));
            }
        } else {
            goodsInfo.setHasCoupon(false);
        }
fanli/src/main/java/com/yeshi/fanli/util/suning/SuningApiUtil.java
@@ -2,6 +2,7 @@
import java.io.IOException;
import java.lang.reflect.Type;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
@@ -210,7 +211,7 @@
                JSONObject data = array.optJSONObject(i);
                JSONArray itemArray = data.optJSONArray("orderDetail");
                List<SuningOrderInfo> tempList = gson.fromJson(itemArray.toString(), type);
                for(SuningOrderInfo info:tempList){
                for (SuningOrderInfo info : tempList) {
                    info.setOrderCode(data.optString("orderCode"));
                    orderList.add(info);
                }
@@ -222,4 +223,29 @@
        return null;
    }
    /**
     * 常规转链
     * @Title: convertCommonLink
     * @Description:
     * @param url
     * @param pid
     * @param subUser
     * @return
     * String 返回类型
     * @throws
     */
    public static String convertCommonLink(String url, String pid, String subUser) {
        JSONObject model = new JSONObject();
        model.put("adBookId", pid);
        model.put("visitUrl", url);
        model.put("subUser", subUser);
        String key = "queryCustompromotionurl";
        String result = baseRequest("suning.netalliance.custompromotionurl.query", key, model);
        JSONObject resultJSON = JSONObject.fromObject(result);
        resultJSON = resultJSON.optJSONObject("sn_responseContent");
        String shortUrl = resultJSON.optJSONObject("sn_body").optJSONObject("queryCustompromotionurl").optString("shortUrl");
        return URLDecoder.decode(shortUrl);
    }
}
fanli/src/main/java/com/yeshi/fanli/util/suning/SuningUtil.java
@@ -26,4 +26,53 @@
        BigDecimal money = MoneyBigDecimalUtil.mul(afterUseCouponPrice, rate);
        return BigDecimalUtil.getWithNoZera(money).setScale(2);
    }
    /**
     * 获取拼接的商品ID
     * @Title: getConcatGoodsIId
     * @Description:
     * @param supplierCode
     * @param goodsId
     * @return
     * String 返回类型
     * @throws
     */
    public static String getConcatGoodsIId(String supplierCode, String goodsId) {
        return supplierCode + "-" + goodsId;
    }
    public static String getFullSupplierCode(String supplierCode){
        for (int i = 0; i < 10; i++) {
            if (supplierCode.length() < 10)
                supplierCode = "0" + supplierCode;
        }
        return supplierCode;
    }
    /**
     * 通过拼接的商品ID解析出来正确的商品ID
     * @Title: getGoodsIdDetail
     * @Description:
     * @param concatGoodsId
     * @return
     * String[] 返回类型
     * @throws
     */
    public static String[] getGoodsIdDetail(String concatGoodsId) {
        String[] sts = concatGoodsId.split("-");
        String supplierCode = sts[0];
        for (int i = 0; i < 10; i++) {
            if (supplierCode.length() < 10)
                supplierCode = "0" + supplierCode;
        }
        return new String[] { supplierCode, sts[1] };
    }
    public static String getProductUrl(String supplierCode, String goodsId) {
        return String.format("https://product.suning.com/%s/%s.html", supplierCode, goodsId);
    }
}
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeBaseUtil.java
@@ -69,6 +69,63 @@
        reValid(app.getAppKey());
        return data;
    }
    /**
     * 服务商请求
     * @Title: baseScRequest
     * @Description:
     * @param param
     * @param session
     * @return
     * @throws TaoKeApiException
     * JSONObject 返回类型
     * @throws
     */
    public static JSONObject baseScRequest(Map<String, String> param,TaoKeAppInfo app, String session,String targetAppKey) throws TaoKeApiException {
        // 复制params
        Map<String, String> params = new HashMap<>();
        if (param != null) {
            Iterator<String> its = param.keySet().iterator();
            while (its.hasNext()) {
                String key = its.next();
                params.put(key, param.get(key));
            }
        }
        if (app == null)
            throw new TaoKeApiException(TaoKeApiException.CODE_NO_USE, "无appkey可用");
        // 签名
        params.put("app_key", app.getAppKey());
        params.put("sign_method", "md5");
        params.put("v", "2.0");
        params.put("timestamp", TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
        params.put("format", "json");
        params.put("session", session);
//        params.put("target_app_key", targetAppKey);
        params.put("sign", getSign(params, "md5", app).toUpperCase());
        String result = TaoBaoHttpUtil.taoKeGet(params);
        JSONObject data = JSONObject.fromObject(result);
        if (data != null) {
            if (data.optJSONObject("error_response") != null && data.optJSONObject("error_response").optInt("code") == 7
                    && "accesscontrol.limited-by-app-access-count"
                            .equalsIgnoreCase(data.optJSONObject("error_response").optString("sub_code"))) {
                reportAppInvalid(app.getAppKey());
                TaoKeLogHelper.error(params, result);
                try {
                    EmergencyUtil.baoJin("monitor-error-tb-app-limit-" + params.get("app_key"),
                            "淘宝APPKey请求限制【" + params.get("app_key") + "】", new String[] { "18581318252" });
                } catch (Exception e1) {
                }
                throw new TaoKeApiException(TaoKeApiException.CODE_APPKEY_LIMIT, "淘宝请求限制:" + result, params);
            } else if (data.optJSONObject("error_response") != null) {
                throw new TaoKeApiException(TaoKeApiException.CODE_API_ERROR, result, params);
            }
        } else
            throw new TaoKeApiException(TaoKeApiException.CODE_OTHER, ":" + result, params);
//        reValid(app.getAppKey());
        return data;
    }
    public static JSONObject baseRequest(Map<String, String> param, TaoKeAppInfo app) throws TaoKeApiException {
        // 复制params
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeScApiUtil.java
New file
@@ -0,0 +1,2237 @@
package com.yeshi.fanli.util.taobao;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.taobao.TbImgUtil;
import com.yeshi.fanli.dto.taobao.TaoBaoShopInfoDTO;
import com.yeshi.fanli.dto.taobao.TaoLiJinDTO;
import com.yeshi.fanli.dto.taobao.api.TaoKeOfficialActivityConvertResultDTO;
import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinReport;
import com.yeshi.fanli.entity.taobao.SearchFilter;
import com.yeshi.fanli.entity.taobao.SearchShopFilter;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoBaoHead;
import com.yeshi.fanli.entity.taobao.TaoBaoProvince;
import com.yeshi.fanli.entity.taobao.TaoBaoSearchNav;
import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult;
import com.yeshi.fanli.entity.taobao.TaoBaoShopInfo;
import com.yeshi.fanli.entity.taobao.TaoKeAppInfo;
import com.yeshi.fanli.exception.taobao.TaoBaoAuthException;
import com.yeshi.fanli.exception.taobao.TaoBaoTokenParseException;
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.log.LogHelper;
import com.yeshi.fanli.log.TLJLogHelper;
import com.yeshi.fanli.log.TaoKeLogHelper;
import com.yeshi.fanli.tag.PageEntity;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TaoBaoConstant;
import com.yeshi.fanli.util.TimeUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
//淘宝客API接口
public class TaoKeScApiUtil {
    // 解析券的内容
    private static TaoBaoSearchResult parseCoupleContent(String content) {
        TaoBaoSearchResult result = new TaoBaoSearchResult();
        JSONObject root = JSONObject.fromObject(content);
        root = root.optJSONObject("tbk_dg_item_coupon_get_response");
        if (root.optJSONObject("results") == null)
            return null;
        JSONArray array = root.optJSONObject("results").optJSONArray("tbk_coupon");
        if (array != null) {
            List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
            for (int i = 0; i < array.size(); i++) {
                JSONObject item = array.optJSONObject(i);
                TaoBaoGoodsBrief goods = new TaoBaoGoodsBrief();
                goods.setPictUrl(item.optString("pict_url"));
                goods.setAuctionId(item.optLong("num_iid"));
                goods.setAuctionUrl(item.optString("item_url"));
                goods.setBiz30day(item.optInt("volume"));
                goods.setCouponInfo(item.optString("coupon_info"));
                List<BigDecimal> quanInfo = TaoBaoCouponUtil.getCouponInfo(goods.getCouponInfo());
                goods.setCouponAmount(quanInfo.get(1));
                goods.setCouponEffectiveEndTime(item.optString("coupon_end_time"));
                goods.setCouponEffectiveStartTime(item.optString("coupon_start_time"));
                goods.setCouponStartFee(quanInfo.get(0));
                goods.setCouponLeftCount(item.optInt("coupon_remain_count"));
                goods.setCouponLink(item.optString("coupon_click_url"));
                goods.setCouponTotalCount(item.optInt("coupon_total_count"));
                goods.setDayLeft(-1);
                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.setSellerId(item.optLong("seller_id"));
                goods.setShopTitle(item.optString("shop_title"));
                goods.setTitle(item.optString("title"));
                goods.setTkRate(new BigDecimal(item.optString("commission_rate")));
                goods.setTotalNum(1000);
                goods.setUserType(item.optInt("user_type"));
                goods.setUserTypeName("");
                goods.setZkPrice(new BigDecimal(item.optString("zk_final_price")));
                if (goods.getZkPrice().compareTo(goods.getCouponStartFee()) >= 0
                        && goods.getZkPrice().compareTo(goods.getCouponAmount()) > 0) {
                    BigDecimal finalPrice = goods.getZkPrice().subtract(goods.getCouponAmount());
                    goods.setTkCommFee(finalPrice.multiply(goods.getTkRate()).divide(new BigDecimal(100)));
                } else
                    goods.setTkCommFee(new BigDecimal(0));
                goodsList.add(goods);
            }
            result.setTaoBaoGoodsBriefs(goodsList);
            int totalCount = 1000;// root.optInt("total_results");
            PageEntity pe = new PageEntity(0, 0, totalCount);
            result.setPageEntity(pe);
        }
        result.setNavList(new ArrayList<>());
        TaoBaoHead taoBaoHead = new TaoBaoHead();
        taoBaoHead.setDocsfound((int) result.getPageEntity().getTotalCount());
        result.setTaoBaoHead(taoBaoHead);
        return result;
    }
    /**
     * 获取商品详情,简版
     *
     * @param id
     *            -商品AuctionId
     * @return
     */
    public static TaoBaoGoodsBrief getSimpleGoodsInfo(Long id) throws TaobaoGoodsDownException {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.item.info.get");
        map.put("num_iids", id + "");
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        System.out.println(resultStr);
        JSONObject data = JSONObject.fromObject(resultStr);
        // 商品下架
        if (data.optJSONObject("error_response") != null && data.optJSONObject("error_response").optInt("code") == 15
                && data.optJSONObject("error_response").optInt("sub_code") == 50001) {
            throw new TaobaoGoodsDownException(data.optJSONObject("error_response").optInt("code"), "商品下架");
        }
        if (data.optJSONObject("tbk_item_info_get_response") == null)
            return null;
        JSONArray array = data.optJSONObject("tbk_item_info_get_response").optJSONObject("results")
                .optJSONArray("n_tbk_item");
        if (array != null && array.size() > 0) {
            JSONObject item = array.optJSONObject(0);
            return parseSimpleGoodsInfo(item);
        }
        return null;
    }
    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"));
        goods.setRootCategoryName(item.optString("cat_name"));
        goods.setLeafName(item.optString("cat_leaf_name"));
        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.setRootCategoryName(item.optString("cat_name"));
        goods.setLeafName(item.optString("cat_leaf_name"));
        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)
            throws TaoKeApiException, TaobaoGoodsDownException {
        if (listId == null || listId.size() == 0) {
            throw new TaobaoGoodsDownException(1, "淘宝商品ID不能为空");
        }
        if (listId.size() > 40) {
            throw new TaobaoGoodsDownException(1, "淘宝商品ID不能超过40个");
        }
        StringBuffer ids = new StringBuffer();
        for (Long id : listId) {
            ids.append(id + ",");
        }
        return getBatchGoodsInfos(ids.substring(0, ids.length() - 1));
    }
    /**
     * 获取商品详情,简版
     *
     * @param id
     * @return
     */
    public static List<TaoBaoGoodsBrief> getBatchGoodsInfos(String ids) throws TaobaoGoodsDownException {
        List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.item.info.get");
        map.put("num_iids", ids + "");
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        JSONObject data = JSONObject.fromObject(resultStr);
        // 商品下架
        if (data.optJSONObject("error_response") != null && data.optJSONObject("error_response").optInt("code") == 15
                && data.optJSONObject("error_response").optInt("sub_code") == 50001) {
            throw new TaobaoGoodsDownException(data.optJSONObject("error_response").optInt("code"), "商品下架");
        }
        if (data.optJSONObject("tbk_item_info_get_response") == null)
            return null;
        JSONArray array = data.optJSONObject("tbk_item_info_get_response").optJSONObject("results")
                .optJSONArray("n_tbk_item");
        if (array != null && array.size() > 0) {
            for (int i = 0; i < array.size(); i++) {
                JSONObject item = array.optJSONObject(i);
                goodsList.add(parseSimpleGoodsInfo(item));
            }
        }
        return goodsList;
    }
    /**
     * 搜索商品详情-详细
     *
     * @param id
     * @return
     * @throws TaobaoGoodsDownException
     */
    public static TaoBaoGoodsBrief searchGoodsDetail(Long id) throws TaobaoGoodsDownException {
        TaoBaoGoodsBrief goods = getSimpleGoodsInfo(id);
        if (goods == null)
            return null;
        SearchFilter filter = new SearchFilter();
        filter.setKey(goods.getTitle());
        filter.setPage(1);
        filter.setPageSize(50);
        TaoBaoSearchResult result = searchWuLiaoForDetail(goods.getTitle(), goods.getZkPrice(), goods.getProvcity(),
                goods.getUserType());
        if (result != null && result.getTaoBaoGoodsBriefs() != null)
            for (TaoBaoGoodsBrief g : result.getTaoBaoGoodsBriefs()) {
                System.out.println(goods.getAuctionId() + ":" + g.getAuctionId());
                if (goods.getAuctionId().longValue() == g.getAuctionId()) {
                    g.setId(goods.getAuctionId());
                    g.setCreatetime(new Date());
                    g.setMaterialLibType(goods.getMaterialLibType());
                    g.setProvcity(goods.getProvcity());
                    return g;
                }
            }
        // 从转链搜索
        TaoBaoGoodsBrief newGoods = specialConvertCoupon(goods.getAuctionId(),
                new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET,
                        TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT));
        if (newGoods != null) {
            goods.setTkRate(newGoods.getTkRate());
            if (!StringUtil.isNullOrEmpty(newGoods.getCouponInfo())) {
                List<BigDecimal> couponInfo = TaoBaoCouponUtil.getCouponInfo(newGoods.getCouponInfo());
                if (couponInfo != null && couponInfo.size() > 1) {
                    goods.setCouponStartFee(couponInfo.get(0));
                    goods.setCouponAmount(couponInfo.get(1));
                    goods.setCouponEffectiveStartTime(newGoods.getCouponEffectiveStartTime());
                    goods.setCouponEffectiveEndTime(newGoods.getCouponEffectiveEndTime());
                    goods.setCouponLeftCount(newGoods.getCouponLeftCount());
                    goods.setCouponTotalCount(newGoods.getCouponTotalCount());
                    goods.setCouponInfo(newGoods.getCouponInfo());
                }
            }
            return goods;
        } else {
            goods.setCouponAmount(new BigDecimal("0"));
            goods.setTkMktStatus("1");
            goods.setTkRate(new BigDecimal("0"));
            goods.setReservePrice(new BigDecimal(0));
            goods.setTkCommFee(new BigDecimal(0));
            return goods;
        }
    }
    /**
     * 搜索商品详情-详细
     *
     * @param id
     * @return
     * @throws TaobaoGoodsDownException
     */
    public static TaoBaoGoodsBrief searchGoodsDetail(Long id, TaoKeAppInfo app) throws TaobaoGoodsDownException {
        TaoBaoGoodsBrief goods = getSimpleGoodsInfo(id);
        if (goods == null)
            return null;
        SearchFilter filter = new SearchFilter();
        filter.setKey(goods.getTitle());
        filter.setPage(1);
        filter.setPageSize(50);
        TaoBaoSearchResult result = searchWuLiaoForDetail(goods.getTitle(), goods.getZkPrice(), goods.getProvcity(),
                goods.getUserType(), app);
        if (result != null && result.getTaoBaoGoodsBriefs() != null)
            for (TaoBaoGoodsBrief g : result.getTaoBaoGoodsBriefs()) {
                if (goods.getAuctionId().longValue() == g.getAuctionId()) {
                    g.setId(goods.getAuctionId());
                    // 判断是否有优惠券
                    if (!StringUtil.isNullOrEmpty(g.getCouponActivityId())) {
                        // 获取优惠券详情
                        QuanInfo quanInfo = getQuanInfo(g.getAuctionId(), g.getCouponActivityId());
                        if (quanInfo != null) {
                            g.setCouponAmount(quanInfo.coupon_amount);
                            g.setCouponEffectiveEndTime(quanInfo.coupon_end_time);
                            g.setCouponEffectiveStartTime(quanInfo.coupon_start_time);
                            g.setCouponLeftCount(quanInfo.coupon_remain_count);
                            g.setCouponStartFee(quanInfo.coupon_start_fee);
                            g.setCouponTotalCount(quanInfo.coupon_total_count);
                        }
                    } else {
                        g.setCouponAmount(new BigDecimal(0));
                        g.setCouponStartFee(new BigDecimal(0));
                    }
                    g.setCreatetime(new Date());
                    g.setMaterialLibType(goods.getMaterialLibType());
                    g.setProvcity(goods.getProvcity());
                    return g;
                }
            }
        // 从转链搜索
        TaoBaoGoodsBrief newGoods = specialConvertCoupon(goods.getAuctionId(),
                new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET,
                        TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT));
        if (newGoods != null) {
            goods.setTkRate(newGoods.getTkRate());
            if (!StringUtil.isNullOrEmpty(newGoods.getCouponInfo())) {
                List<BigDecimal> couponInfo = TaoBaoCouponUtil.getCouponInfo(newGoods.getCouponInfo());
                if (couponInfo != null && couponInfo.size() > 1) {
                    goods.setCouponStartFee(couponInfo.get(0));
                    goods.setCouponAmount(couponInfo.get(1));
                    goods.setCouponEffectiveStartTime(newGoods.getCouponEffectiveStartTime());
                    goods.setCouponEffectiveEndTime(newGoods.getCouponEffectiveEndTime());
                    goods.setCouponLeftCount(newGoods.getCouponLeftCount());
                    goods.setCouponTotalCount(newGoods.getCouponTotalCount());
                    goods.setCouponInfo(newGoods.getCouponInfo());
                }
            }
            return goods;
        } else {
            goods.setCouponAmount(new BigDecimal("0"));
            goods.setTkMktStatus("1");
            goods.setTkRate(new BigDecimal("0"));
            goods.setReservePrice(new BigDecimal(0));
            goods.setTkCommFee(new BigDecimal(0));
            return goods;
        }
    }
    /**
     * 物料转链
     *
     * @param id
     * @param app
     * @return
     * @throws TaobaoGoodsDownException
     */
    public static TaoBaoGoodsBrief searchGoodsDetailForConvert(Long id, TaoKeAppInfo app)
            throws TaobaoGoodsDownException {
        TaoBaoGoodsBrief goods = getSimpleGoodsInfo(id);
        if (goods == null)
            return null;
        SearchFilter filter = new SearchFilter();
        filter.setKey(goods.getTitle());
        filter.setPage(1);
        filter.setPageSize(50);
        TaoBaoSearchResult result = searchWuLiaoForDetail(goods.getTitle(), goods.getZkPrice(), goods.getProvcity(),
                goods.getUserType(), app);
        if (result != null && result.getTaoBaoGoodsBriefs() != null)
            for (TaoBaoGoodsBrief g : result.getTaoBaoGoodsBriefs()) {
                if (goods.getAuctionId().longValue() == g.getAuctionId()) {
                    g.setId(goods.getAuctionId());
                    g.setCreatetime(new Date());
                    return g;
                }
            }
        TaoKeLogHelper.error(null, "没有搜索到详情:" + id);
        goods.setCouponAmount(new BigDecimal("0"));
        goods.setTkMktStatus("1");
        goods.setTkRate(new BigDecimal("0"));
        goods.setReservePrice(new BigDecimal(0));
        goods.setTkCommFee(new BigDecimal(0));
        return goods;
    }
    public static List<TaoBaoGoodsBrief> searchBatchGoodsDetail(String ids) throws TaobaoGoodsDownException {
        List<TaoBaoGoodsBrief> goodsBriefList = getBatchGoodsInfos(ids);
        if (goodsBriefList == null || goodsBriefList.size() == 0) {
            return null;
        }
        // System.out.println("---------goodsBriefList--------------:"+
        // goodsBriefList.size());
        List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
        for (TaoBaoGoodsBrief goods : goodsBriefList) {
            boolean pross = false;
            SearchFilter filter = new SearchFilter();
            filter.setKey(goods.getTitle());
            filter.setPage(1);
            filter.setPageSize(50);
            TaoBaoSearchResult result = searchWuLiaoForDetail(goods.getTitle(), goods.getZkPrice(), goods.getProvcity(),
                    goods.getUserType());
            if (result != null && result.getTaoBaoGoodsBriefs() != null)
                for (TaoBaoGoodsBrief g : result.getTaoBaoGoodsBriefs()) {
                    if (goods.getAuctionId().longValue() == g.getAuctionId()) {
                        g.setId(goods.getAuctionId());
                        g.setAuctionUrl(goods.getAuctionUrl());
                        g.setShopTitle(goods.getShopTitle());
                        // 判断是否有优惠券
                        if (!StringUtil.isNullOrEmpty(g.getCouponActivityId())) {
                            // 获取优惠券详情
                            QuanInfo quanInfo = getQuanInfo(g.getAuctionId(), g.getCouponActivityId());
                            if (quanInfo != null) {
                                g.setCouponAmount(quanInfo.coupon_amount);
                                g.setCouponEffectiveEndTime(quanInfo.coupon_end_time);
                                g.setCouponEffectiveStartTime(quanInfo.coupon_start_time);
                                g.setCouponLeftCount(quanInfo.coupon_remain_count);
                                g.setCouponStartFee(quanInfo.coupon_start_fee);
                                g.setCouponTotalCount(quanInfo.coupon_total_count);
                            }
                        } else {
                            g.setCouponAmount(new BigDecimal(0));
                            g.setCouponStartFee(new BigDecimal(0));
                        }
                        g.setCreatetime(new Date());
                        goodsList.add(g);
                        pross = true;
                        break;
                    }
                }
            if (pross)
                continue;
            // 再从淘宝联盟网页搜索
            filter.setKey(goods.getAuctionUrl());
            TaoBaoSearchResult searchResult = TaoBaoUtil.searchFromAlimamaWeb(filter, null);
            if (searchResult != null && searchResult.getTaoBaoGoodsBriefs() != null
                    && searchResult.getTaoBaoGoodsBriefs().size() > 0) {
                for (TaoBaoGoodsBrief g : searchResult.getTaoBaoGoodsBriefs()) {
                    if (g.getAuctionId().longValue() == goods.getAuctionId()) {
                        g.setImgList(goods.getImgList());
                        g.setId(goods.getAuctionId());
                        g.setAuctionUrl(goods.getAuctionUrl());
                        g.setShopTitle(goods.getShopTitle());
                        goods = g;
                        if ("无".equalsIgnoreCase(goods.getCouponInfo()))
                            goods.setCouponInfo(null);
                        goodsList.add(goods);
                        pross = true;
                        break;
                    }
                }
            }
            if (pross)
                continue;
            goods.setCouponAmount(new BigDecimal("0"));
            goods.setTkMktStatus("1");
            goods.setTkRate(new BigDecimal("0"));
            goods.setReservePrice(new BigDecimal(0));
            goods.setTkCommFee(new BigDecimal(0));
            goodsList.add(goods);
        }
        return goodsList;
    }
    /**
     * 商品物料搜索
     *
     * @param filter
     * @return
     */
    public static TaoBaoSearchResult searchWuLiao(SearchFilter filter, String session, TaoKeAppInfo app,
            String targetAppKey) {
        if (filter.getKey() != null && filter.getKey().trim().equalsIgnoreCase(""))
            return null;
        if (filter.getKey() != null && filter.getKey().length() > 100)
            return null;
        PageEntity pageEntity = new PageEntity();
        TaoBaoSearchResult taoBaoSearchResult = new TaoBaoSearchResult();
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.sc.material.optional");
        map.put("page_size", filter.getPageSize() == 0 ? "20" : filter.getPageSize() + "");
        map.put("page_no", (filter.getPage() <= 0 ? 1 : filter.getPage()) + "");
        // map.put("material_id", "3756");
        map.put("site_id", app.getPid().split("_")[2]);
        pageEntity.setPageIndex(filter.getPage());
        pageEntity.setPageSize(filter.getPageSize() == 0 ? 20 : filter.getPageSize());
        // 包含了地区筛选
        if (filter.getProvinceId() > 0) {
            List<TaoBaoProvince> provinceList = TaoBaoUtil.getTaoBaoProvinceList();
            for (TaoBaoProvince province : provinceList) {
                if (Integer.parseInt(province.getId()) == filter.getProvinceId()) {
                    map.put("itemloc", province.getName());
                    break;
                }
            }
        }
        if (filter.getMaterialId() != null)
            map.put("material_id", filter.getMaterialId());
        if (filter.getStartPrice() != null)
            map.put("start_price", filter.getStartPrice() + "");
        if (filter.getEndPrice() != null)
            map.put("end_price", filter.getEndPrice() + "");
        if (filter.getStartTkRate() > 0)
            map.put("start_tk_rate", filter.getStartTkRate() + "");
        if (filter.getEndTkRate() > 0)
            map.put("end_tk_rate", filter.getEndTkRate() + "");
        if (filter.getStartKaTkRate() > 0)
            map.put("start_ka_tk_rate", filter.getStartKaTkRate() + "");
        if (filter.getEndKaTkRate() > 0)
            map.put("end_ka_tk_rate", filter.getEndKaTkRate() + "");
        if (filter.isTmall())
            map.put("is_tmall", filter.isTmall() + "");
        if (filter.isOverseas())
            map.put("is_overseas", filter.isOverseas() + "");
        if (filter.isBaoYou())
            map.put("need_free_shipment", filter.isBaoYou() + "");
        if (filter.isNeedPrepay())
            map.put("need_prepay", filter.isNeedPrepay() + "");
        if (filter.isIncludePayRate30())
            map.put("include_pay_rate_30", filter.isIncludePayRate30() + "");
        if (filter.isIncludeGoodRate())
            map.put("include_good_rate", filter.isIncludeGoodRate() + "");
        if (filter.isIncludeRfdRate())
            map.put("include_rfd_rate", filter.isIncludeRfdRate() + "");
        if (filter.getStartDsr() > 0)
            map.put("start_dsr", filter.getStartDsr() + "");
        if (filter.getNpxLevel() > 0)
            map.put("npx_level", filter.getNpxLevel() + "");
        if (!StringUtil.isNullOrEmpty(filter.getCateIds()))
            map.put("cat", filter.getCateIds());
        if (!StringUtil.isNullOrEmpty(filter.getKey()))
            map.put("q", filter.getKey());
        if (filter.getQuan() > 0)
            map.put("has_coupon", true + "");
        if (!StringUtil.isNullOrEmpty(filter.getIp()))
            map.put("ip", filter.getIp());
        if (filter.getSort() > 0) {
            if (filter.getSort() == TaoBaoUtil.SORT_SALE_HIGH_TO_LOW) {
                map.put("sort", "total_sales_des"); // 销量从高到低
            } else if (filter.getSort() == TaoBaoUtil.SORT_SALE_LOW_TO_HIGH) {
                map.put("sort", "total_sales_asc"); // 销量从低到高
            } else if (filter.getSort() == TaoBaoUtil.SORT_PRICE_HIGH_TO_LOW) {
                map.put("sort", "price_des"); // 价格从高到低
            } else if (filter.getSort() == TaoBaoUtil.SORT_PRICE_LOW_TO_HIGH) {
                map.put("sort", "price_asc"); // 价格从低到高
            } else if (filter.getSort() == TaoBaoUtil.SORT_TKRATE_HIGH_TO_LOW) {
                map.put("sort", "tk_rate_des"); // 淘客佣金比率高到低
            } else if (filter.getSort() == TaoBaoUtil.SORT_TKRATE_LOW_TO_HIGH) {
                map.put("sort", "tk_rate_asc"); // 淘客佣金比率低到高
            } else if (filter.getSort() == TaoBaoUtil.SORT_TOTAL_COMMI_HIGH_TO_LOW) {
                map.put("sort", "tk_total_commi_des"); // 总支出佣金高到低
            } else if (filter.getSort() == TaoBaoUtil.SORT_TOTAL_COMMI_LOW_TO_HIGH) {
                map.put("sort", "tk_total_commi_asc"); // 总支出佣金低到高
            } else if (filter.getSort() == TaoBaoUtil.SORT_TOTAL_SALES_HIGH_TO_LOW) {
                map.put("sort", "tk_total_sales_des"); // 累计推广量高到低
            } else if (filter.getSort() == TaoBaoUtil.SORT_TOTAL_SALES_LOW_TO_HIGH) {
                map.put("sort", "tk_total_sales_asc"); // 累计推广量低到高
            }
        }
        map.put("adzone_id", app.getPid().split("_")[3]);
        JSONObject data = null;
        try {
            data = TaoKeBaseUtil.baseScRequest(map, app, session, targetAppKey);
        } catch (TaoKeApiException e) {
            e.printStackTrace();
        }
        System.out.println(data);
        if (data.optJSONObject("tbk_dg_material_optional_response") != null
                && data.optJSONObject("tbk_dg_material_optional_response").optJSONObject("result_list") != null) {
            JSONArray array = data.optJSONObject("tbk_dg_material_optional_response").optJSONObject("result_list")
                    .optJSONArray("map_data");
            List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
            if (array != null) {
                for (int i = 0; i < array.size(); i++) {
                    TaoBaoGoodsBrief goods = parseWuLiaoItem(array.optJSONObject(i));
                    if (goods != null)
                        goodsList.add(goods);
                }
            }
            taoBaoSearchResult.setTaoBaoGoodsBriefs(goodsList);
            JSONObject optJSONObject = data.optJSONObject("tbk_dg_material_optional_response");
            int totalResults = optJSONObject.getInt("total_results");
            int totalPage = totalResults % pageEntity.getPageSize() == 0 ? totalResults / pageEntity.getPageSize()
                    : totalResults / pageEntity.getPageSize() + 1;
            pageEntity.setTotalCount(totalResults);
            pageEntity.setTotalPage(totalPage);
        }
        List<TaoBaoSearchNav> navList = new ArrayList<>();
        TaoBaoHead taoBaoHead = new TaoBaoHead();
        taoBaoHead.setDocsfound((int) pageEntity.getTotalCount());
        taoBaoSearchResult.setTaoBaoHead(taoBaoHead);
        taoBaoSearchResult.setPageEntity(pageEntity);
        // filter.get
        // 设置发货地址
        TaoBaoSearchNav nav = new TaoBaoSearchNav();
        nav.setName("发货地选择");
        nav.setFlag("address");
        nav.setId(11110);
        nav.setType("fahuodi");
        List<TaoBaoSearchNav> childNavList = new ArrayList<>();
        List<TaoBaoProvince> provinceList = TaoBaoUtil.getTaoBaoProvinceList();
        for (TaoBaoProvince province : provinceList) {
            TaoBaoSearchNav childNav = new TaoBaoSearchNav();
            childNav.setName(province.getName());
            childNav.setId(Integer.parseInt(province.getId()));
            childNav.setType("fahuodi-child");
            if (Integer.parseInt(province.getId()) == filter.getProvinceId())
                childNav.setSelector(1);
            childNavList.add(childNav);
        }
        nav.setSubIds(childNavList);
        navList.add(nav);
        // 测试
        taoBaoSearchResult.setNavList(navList);
        return taoBaoSearchResult;
    }
    public static String tpwdConvert(Long item_id, String session, TaoKeAppInfo app) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.privilege.get");
        map.put("item_id", item_id+"");
        map.put("site_id", app.getPid().split("_")[2]);
        map.put("adzone_id", app.getPid().split("_")[3]);
        JSONObject data = null;
        try {
            data = TaoKeBaseUtil.baseScRequest(map, app, session, "");
        } catch (TaoKeApiException e) {
            e.printStackTrace();
        }
        System.out.println(data);
        return data + "";
    }
    /**
     * 商品物料搜索
     *
     * @param filter
     * @return
     */
    public static TaoBaoSearchResult searchWuLiaoForDetail(String title, BigDecimal zkPrice, String provcity,
            int userType) {
        if (provcity.trim().contains(" "))
            provcity = provcity.split(" ")[provcity.split(" ").length - 1];
        TaoBaoSearchResult taoBaoSearchResult = new TaoBaoSearchResult();
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.dg.material.optional");
        map.put("page_size", 50 + "");
        map.put("page_no", 1 + "");
        map.put("start_price", (int) zkPrice.subtract(new BigDecimal(1)).doubleValue() + "");
        map.put("end_price", (int) zkPrice.add(new BigDecimal(1)).doubleValue() + "");
        map.put("is_tmall", (userType == 1) + "");
        map.put("q", title);
        map.put("itemloc", provcity);
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        System.out.println(resultStr);
        JSONObject data = JSONObject.fromObject(resultStr);
        if (data.optJSONObject("tbk_dg_material_optional_response") != null
                && data.optJSONObject("tbk_dg_material_optional_response").optJSONObject("result_list") != null) {
            JSONArray array = data.optJSONObject("tbk_dg_material_optional_response").optJSONObject("result_list")
                    .optJSONArray("map_data");
            List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
            if (array != null) {
                for (int i = 0; i < array.size(); i++) {
                    TaoBaoGoodsBrief goods = parseWuLiaoItem(array.optJSONObject(i));
                    if (goods != null)
                        goodsList.add(goods);
                }
            }
            taoBaoSearchResult.setTaoBaoGoodsBriefs(goodsList);
        }
        List<TaoBaoSearchNav> navList = new ArrayList<>();
        TaoBaoHead taoBaoHead = new TaoBaoHead();
        taoBaoHead.setDocsfound(1000);
        taoBaoSearchResult.setTaoBaoHead(taoBaoHead);
        taoBaoSearchResult.setPageEntity(new PageEntity());
        taoBaoSearchResult.setNavList(navList);
        return taoBaoSearchResult;
    }
    /**
     * 商品物料搜索
     *
     * @param filter
     * @return
     */
    public static TaoBaoSearchResult searchWuLiaoForDetail(String title, BigDecimal zkPrice, String provcity,
            int userType, TaoKeAppInfo app) {
        if (provcity.trim().contains(" "))
            provcity = provcity.split(" ")[provcity.split(" ").length - 1];
        TaoBaoSearchResult taoBaoSearchResult = new TaoBaoSearchResult();
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.dg.material.optional");
        map.put("page_size", 50 + "");
        map.put("page_no", 1 + "");
        map.put("start_price", (int) zkPrice.subtract(new BigDecimal(1)).doubleValue() + "");
        map.put("end_price", (int) zkPrice.add(new BigDecimal(1)).doubleValue() + "");
        map.put("is_tmall", (userType == 1) + "");
        map.put("q", title);
        map.put("itemloc", provcity);
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, app);
        JSONObject data = JSONObject.fromObject(resultStr);
        if (data.optJSONObject("tbk_dg_material_optional_response") != null
                && data.optJSONObject("tbk_dg_material_optional_response").optJSONObject("result_list") != null) {
            JSONArray array = data.optJSONObject("tbk_dg_material_optional_response").optJSONObject("result_list")
                    .optJSONArray("map_data");
            List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
            if (array != null) {
                for (int i = 0; i < array.size(); i++) {
                    TaoBaoGoodsBrief goods = parseWuLiaoItem(array.optJSONObject(i));
                    if (goods != null)
                        goodsList.add(goods);
                }
            }
            taoBaoSearchResult.setTaoBaoGoodsBriefs(goodsList);
        }
        List<TaoBaoSearchNav> navList = new ArrayList<>();
        TaoBaoHead taoBaoHead = new TaoBaoHead();
        taoBaoHead.setDocsfound(1000);
        taoBaoSearchResult.setTaoBaoHead(taoBaoHead);
        taoBaoSearchResult.setPageEntity(new PageEntity());
        taoBaoSearchResult.setNavList(navList);
        return taoBaoSearchResult;
    }
    // 解析物料
    private static TaoBaoGoodsBrief parseWuLiaoItem(JSONObject item) {
        TaoBaoGoodsBrief goods = new TaoBaoGoodsBrief();
        goods.setPictUrl(item.optString("pict_url"));
        if (!StringUtil.isNullOrEmpty(item.optString("white_image"))) {
            goods.setPictUrlWhite(item.optString("white_image"));
        }
        goods.setAuctionId(item.optLong("num_iid"));
        goods.setAuctionUrl("https:" + item.optString("url"));
        goods.setBiz30day(item.optInt("volume"));
        goods.setCouponInfo(item.optString("coupon_info"));
        if (goods.getCouponInfo() != null)
            goods.setCouponInfo(goods.getCouponInfo().replace(".00", ""));
        if (!StringUtil.isNullOrEmpty(goods.getCouponInfo())) {
            List<BigDecimal> quanInfo = TaoBaoCouponUtil.getCouponInfo(goods.getCouponInfo());
            goods.setCouponAmount(quanInfo.get(1));
            goods.setCouponEffectiveEndTime(item.optString("coupon_end_time"));
            goods.setCouponEffectiveStartTime(item.optString("coupon_start_time"));
            goods.setCouponStartFee(new BigDecimal(item.optString("coupon_start_fee")));
            goods.setCouponLeftCount(item.optInt("coupon_remain_count"));
            goods.setCouponLink("https:" + item.optString("coupon_share_url"));
            goods.setCouponTotalCount(item.optInt("coupon_total_count"));
            goods.setCouponActivityId(item.optString("coupon_id"));
        } else {
            goods.setCouponAmount(new BigDecimal(0));
        }
        goods.setDayLeft(-1);
        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);
            }
        }
        if (item.optBoolean("include_mkt"))
            goods.setTkMktStatus("1");
        else
            goods.setTkMktStatus("0");
        if (item.optBoolean("include_dxjh"))
            goods.setIncludeDxjh(1);
        goods.setSellerId(item.optLong("seller_id"));
        goods.setShopTitle(item.optString("shop_title"));
        goods.setTitle(item.optString("title"));
        goods.setProvcity(item.optString("provcity"));
        if (!StringUtil.isNullOrEmpty(item.optString("level_one_category_id"))) {
            goods.setRootCatId(item.optInt("level_one_category_id"));
        }
        goods.setRootCategoryName(item.optString("level_one_category_name"));
        if (!StringUtil.isNullOrEmpty(item.optString("category_id"))) {
            goods.setLeafCatId(item.optInt("category_id"));
        }
        goods.setLeafName(item.optString("category_name"));
        goods.setTkRate(new BigDecimal(item.optString("commission_rate")).divide(new BigDecimal(100)));
        goods.setTotalNum(1000);
        goods.setUserType(item.optInt("user_type"));
        goods.setUserTypeName("");
        goods.setZkPrice(new BigDecimal(item.optString("zk_final_price")));
        if (item.optBoolean("include_dxjh")) {
            goods.setDxjhInfo(item.optString("info_dxjh"));
        }
        if (StringUtil.isNullOrEmpty(goods.getCouponInfo())) {// 无券
            goods.setTkCommFee(goods.getZkPrice().multiply(goods.getTkRate()).divide(new BigDecimal(100)));
        } else if (goods.getZkPrice().compareTo(goods.getCouponStartFee()) >= 0// 有券
                && goods.getZkPrice().compareTo(goods.getCouponAmount()) >= 0) {
            BigDecimal finalPrice = goods.getZkPrice().subtract(goods.getCouponAmount());
            goods.setTkCommFee(finalPrice.multiply(goods.getTkRate()).divide(new BigDecimal(100)));
        } else {
            goods.setTkCommFee(new BigDecimal(0));
        }
        if (!StringUtil.isNullOrEmpty(item.optString("reserve_price")))
            goods.setReservePrice(new BigDecimal(item.optString("reserve_price")));
        goods.setTotalFee(new BigDecimal("0"));
        // 推荐语
        goods.setDescription(item.optString("item_description"));
        goods = loadYuShouInfo(goods, item);
        return goods;
    }
    /**
     * 获取淘口令
     *
     * @param logo
     *            -图标
     * @param text
     *            -文字
     * @param url
     *            -简介
     * @return
     */
    public static String getTKToken(String logo, String text, String url) {
        if (text == null)
            return null;
        if (text.length() < 5)
            text = "好货:" + text;
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.tpwd.create");
        map.put("url", url);
        map.put("text", text);
        map.put("logo", logo);
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        JSONObject data = JSONObject.fromObject(resultStr);
        if (data.optJSONObject("tbk_tpwd_create_response").optJSONObject("data") != null)
            return data.optJSONObject("tbk_tpwd_create_response").optJSONObject("data").optString("model");
        return null;
    }
    /**
     * 获取券详细信息
     *
     * @param auctionId
     * @param activityId
     * @return
     */
    public static QuanInfo getQuanInfo(Long auctionId, String activityId) {
        QuanInfo info = new QuanInfo();
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.coupon.get");
        map.put("item_id", auctionId + "");
        map.put("activity_id", activityId);
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        JSONObject data = JSONObject.fromObject(resultStr);
        if (data.optJSONObject("tbk_coupon_get_response") != null) {
            data = data.optJSONObject("tbk_coupon_get_response").optJSONObject("data");
            info.coupon_start_time = data.optString("coupon_start_time");
            info.coupon_end_time = data.optString("coupon_end_time");
            info.coupon_amount = new BigDecimal(data.optString("coupon_amount"));
            info.coupon_total_count = data.optInt("coupon_total_count");
            info.coupon_remain_count = data.optInt("coupon_remain_count");
            info.coupon_start_fee = new BigDecimal(data.optString("coupon_start_fee"));
        } else
            return null;
        return info;
    }
    public static void taoQiangGou() {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.ju.tqg.get");
        map.put("fields",
                "click_url,pic_url,reserve_price,zk_final_price,total_amount,sold_num,title,category_name,start_time,end_time");
        map.put("start_time", "2018-06-11 08:00:00");
        map.put("end_time", "2018-06-12 12:00:00");
        map.put("page_no", "1");
        map.put("page_size", "96");
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        System.out.println(resultStr);
    }
    public static TaoBaoSearchResult taoQiangGou(int page, int pageSize, String startTime, String endTime) {
        List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.ju.tqg.get");
        map.put("fields",
                "click_url,pic_url,reserve_price,zk_final_price,total_amount,sold_num,title,category_name,start_time,end_time");
        map.put("start_time", startTime);
        map.put("end_time", endTime);
        map.put("page_no", page + "");
        map.put("page_size", pageSize + "");
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        JSONObject resultJSON = JSONObject.fromObject(resultStr);
        JSONObject response = resultJSON.optJSONObject("tbk_ju_tqg_get_response");
        if (response != null && response.optJSONObject("results") != null) {
            JSONArray array = response.optJSONObject("results").optJSONArray("results");
            if (array != null) {
                for (int i = 0; i < array.size(); i++) {
                    JSONObject item = array.optJSONObject(i);
                    String url = item.optString("click_url");
                    // 排除 非淘客商品
                    if (url.contains("s.click.taobao.com/t?e=m")) {
                        TaoBaoGoodsBrief goods;
                        try {
                            goods = searchGoodsDetail(item.optLong("num_iid"));
                            if (goods != null)
                                goodsList.add(goods);
                        } catch (TaobaoGoodsDownException e) {
                            e.printStackTrace();
                        }
                    }
                }
                pageSize = array.size();
            }
        }
        TaoBaoSearchResult result = new TaoBaoSearchResult();
        result.setTaoBaoGoodsBriefs(goodsList);
        int totalResults = response.getInt("total_results");
        PageEntity pe = new PageEntity(page, pageSize, totalResults);
        result.setPageEntity(pe);
        result.setNavList(new ArrayList<>());
        TaoBaoHead taoBaoHead = new TaoBaoHead();
        taoBaoHead.setDocsfound((int) result.getPageEntity().getTotalCount());
        result.setTaoBaoHead(taoBaoHead);
        return result;
    }
    /*
     * TODO 获取分类列表
     */
    public static void getTaoBaoCategoryList() {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.itemcats.get");
        map.put("parent_cid", "0");
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        System.out.println(resultStr);
    }
    /**
     * 店铺搜索
     *
     * @param key
     *            -店铺名称
     * @param page
     *            -页码
     * @return
     */
    public static List<TaoBaoShopInfo> searchShop(String key, int page) {
        if (StringUtil.isNullOrEmpty(key))
            return new ArrayList<>();
        List<TaoBaoShopInfo> list = new ArrayList<>();
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.shop.get");
        map.put("fields", "user_id,shop_title,shop_type,seller_nick,pict_url,shop_url");
        map.put("q", key);
        map.put("page_size", "95");
        map.put("page_no", page + "");
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        JSONObject resultDate = JSONObject.fromObject(resultStr);
        if (resultDate.optJSONObject("tbk_shop_get_response") != null
                && resultDate.optJSONObject("tbk_shop_get_response").optJSONObject("results") != null) {
            JSONArray array = resultDate.optJSONObject("tbk_shop_get_response").optJSONObject("results")
                    .optJSONArray("n_tbk_shop");
            if (array != null)
                for (int i = 0; i < array.size(); i++) {
                    JSONObject item = array.optJSONObject(i);
                    TaoBaoShopInfo info = new TaoBaoShopInfo();
                    info.setPictureUrl(item.optString("pict_url"));
                    info.setSellerNick(item.optString("seller_nick"));
                    info.setShopTitle(item.optString("shop_title"));
                    info.setShopType(item.optString("shop_type"));
                    info.setShopUrl(item.optString("shop_url"));
                    info.setUserId(item.optLong("user_id"));
                    list.add(info);
                }
        }
        return list;
    }
    /**
     * 店铺搜索
     *
     * @param key
     *            -店铺名称
     * @param page
     *            -页码
     * @return
     */
    public static TaoBaoShopInfoDTO searchShop(String key, int page, int pageSize) {
        TaoBaoShopInfoDTO dto = new TaoBaoShopInfoDTO();
        if (StringUtil.isNullOrEmpty(key))
            return dto;
        PageEntity pageEntity = new PageEntity();
        List<TaoBaoShopInfo> list = new ArrayList<>();
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.shop.get");
        map.put("fields", "user_id,shop_title,shop_type,seller_nick,pict_url,shop_url");
        map.put("q", key);
        map.put("page_size", pageSize + "");
        map.put("page_no", page + "");
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        JSONObject resultDate = JSONObject.fromObject(resultStr);
        if (resultDate.optJSONObject("tbk_shop_get_response") != null
                && resultDate.optJSONObject("tbk_shop_get_response").optJSONObject("results") != null) {
            JSONArray array = resultDate.optJSONObject("tbk_shop_get_response").optJSONObject("results")
                    .optJSONArray("n_tbk_shop");
            if (array != null) {
                for (int i = 0; i < array.size(); i++) {
                    JSONObject item = array.optJSONObject(i);
                    TaoBaoShopInfo info = new TaoBaoShopInfo();
                    info.setPictureUrl(item.optString("pict_url"));
                    info.setSellerNick(item.optString("seller_nick"));
                    info.setShopTitle(item.optString("shop_title"));
                    info.setShopType(item.optString("shop_type"));
                    info.setShopUrl(item.optString("shop_url"));
                    info.setUserId(item.optLong("user_id"));
                    list.add(info);
                }
            }
            JSONObject optJSONObject = resultDate.optJSONObject("tbk_shop_get_response");
            int totalResults = optJSONObject.getInt("total_results");
            int totalPage = totalResults % pageSize == 0 ? totalResults / pageSize : totalResults / pageSize + 1;
            pageEntity.setTotalCount(totalResults);
            pageEntity.setTotalPage(totalPage);
        }
        pageEntity.setPageIndex(page);
        pageEntity.setPageSize(pageSize);
        dto.setListInfo(list);
        dto.setPage(pageEntity);
        return dto;
    }
    /**
     * 店铺搜索
     *
     * @param key
     *            -店铺名称
     * @param page
     *            -页码
     * @return
     */
    public static List<TaoBaoShopInfo> searchShop(SearchShopFilter filter) {
        if (StringUtil.isNullOrEmpty(filter.getKey()))
            return new ArrayList<>();
        List<TaoBaoShopInfo> list = new ArrayList<>();
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.shop.get");
        map.put("fields", "user_id,shop_title,shop_type,seller_nick,pict_url,shop_url");
        map.put("q", filter.getKey());
        map.put("page_size", filter.getPageSize() + "");
        map.put("page_no", filter.getPage() + "");
        if (!StringUtil.isNullOrEmpty(filter.getSort()))
            map.put("sort", filter.getSort());
        if (filter.getTmall() != null)
            map.put("is_tmall", filter.getTmall() + "");
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        JSONObject resultDate = JSONObject.fromObject(resultStr);
        if (resultDate.optJSONObject("tbk_shop_get_response") != null
                && resultDate.optJSONObject("tbk_shop_get_response").optJSONObject("results") != null) {
            JSONArray array = resultDate.optJSONObject("tbk_shop_get_response").optJSONObject("results")
                    .optJSONArray("n_tbk_shop");
            if (array != null)
                for (int i = 0; i < array.size(); i++) {
                    JSONObject item = array.optJSONObject(i);
                    TaoBaoShopInfo info = new TaoBaoShopInfo();
                    info.setPictureUrl(item.optString("pict_url"));
                    info.setSellerNick(item.optString("seller_nick"));
                    info.setShopTitle(item.optString("shop_title"));
                    info.setShopType(item.optString("shop_type"));
                    info.setShopUrl(item.optString("shop_url"));
                    info.setUserId(item.optLong("user_id"));
                    list.add(info);
                }
        }
        return list;
    }
    /**
     * 品牌券获取
     *
     * @param pageNo
     * @param pageSize
     */
    public static void pingPaiCoupon(int pageNo, int pageSize) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.sc.coupon.brand.recommend");
        map.put("page_no", pageNo + "");
        map.put("page_size", pageSize + "");
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        System.out.println(resultStr);
    }
    public static void getOrder(String order) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "alibaba.mos.order.get");
        map.put("order_number", order);
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        System.out.println(resultStr);
    }
    public static void getTAEGoodsDetail(Long auctionId) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tae.items.list");
        map.put("fields", "title,nick,pic_url,location,cid,price,post_fee,promoted_service,ju,shop_name");
        map.put("num_iids", auctionId + "");
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        System.out.println(resultStr);
    }
    // taobao.ju.items.search
    public static void searchJuHuaSuan() {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.ju.items.search");
        map.put("current_page", "1");
        map.put("page_size", 20 + "");
        map.put("pid", "mm_124933865_43788020_381938426");
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, false);
        System.out.println(resultStr);
    }
    /**
     * 通过物料ID获取商品信息
     *
     * @param materialId
     *            -物料ID
     * @param page
     *            -页码
     * @param pageSize
     *            -每页数量
     * @return
     */
    public static TaoBaoSearchResult getMaterialByMaterialId(int materialId, int page, int pageSize) {
        List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.dg.optimus.material");
        map.put("page_no", page + "");
        map.put("page_size", pageSize + "");
        map.put("material_id", materialId + "");
        // map.put("content_id", "561388751621");
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        System.out.println(resultStr);
        JSONObject resultJSON = JSONObject.fromObject(resultStr);
        JSONObject response = resultJSON.optJSONObject("tbk_dg_optimus_material_response");
        if (response != null && response.optJSONObject("result_list") != null) {
            JSONArray array = response.optJSONObject("result_list").optJSONArray("map_data");
            if (array != null) {
                for (int i = 0; i < array.size(); i++) {
                    JSONObject item = array.optJSONObject(i);
                    TaoBaoGoodsBrief goods = parseWuLiaoItemFromMaterialId(item);
                    if (goods != null)
                        goodsList.add(goods);
                }
                pageSize = array.size();
            }
        }
        TaoBaoSearchResult result = new TaoBaoSearchResult();
        result.setTaoBaoGoodsBriefs(goodsList);
        int totalCount = 1000;// root.optInt("total_results");
        PageEntity pe = new PageEntity(page, pageSize, totalCount);
        result.setPageEntity(pe);
        result.setNavList(new ArrayList<>());
        TaoBaoHead taoBaoHead = new TaoBaoHead();
        taoBaoHead.setDocsfound((int) result.getPageEntity().getTotalCount());
        result.setTaoBaoHead(taoBaoHead);
        return result;
    }
    public static TaoBaoSearchResult getQTZMaterialByMaterialId(int materialId, int page, int pageSize) {
        List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.sc.optimus.material");
        map.put("page_no", page + "");
        map.put("page_size", pageSize + "");
        map.put("material_id", materialId + "");
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        JSONObject resultJSON = JSONObject.fromObject(resultStr);
        JSONObject response = resultJSON.optJSONObject("tbk_dg_optimus_material_response");
        if (response != null && response.optJSONObject("result_list") != null) {
            JSONArray array = response.optJSONObject("result_list").optJSONArray("map_data");
            if (array != null) {
                for (int i = 0; i < array.size(); i++) {
                    JSONObject item = array.optJSONObject(i);
                    TaoBaoGoodsBrief goods = parseWuLiaoItemFromMaterialId(item);
                    if (goods != null)
                        goodsList.add(goods);
                }
                pageSize = array.size();
            }
        }
        TaoBaoSearchResult result = new TaoBaoSearchResult();
        result.setTaoBaoGoodsBriefs(goodsList);
        int totalCount = 1000;// root.optInt("total_results");
        PageEntity pe = new PageEntity(page, pageSize, totalCount);
        result.setPageEntity(pe);
        result.setNavList(new ArrayList<>());
        TaoBaoHead taoBaoHead = new TaoBaoHead();
        taoBaoHead.setDocsfound((int) result.getPageEntity().getTotalCount());
        result.setTaoBaoHead(taoBaoHead);
        return result;
    }
    /**
     * 根据设备猜你喜欢
     *
     * @param page
     * @param pageSize
     * @param imei
     * @param idfa
     * @return
     */
    public static TaoBaoSearchResult guessDeviceLike(int page, int pageSize, String imei, String idfa, String utdid) {
        List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.dg.optimus.material");
        map.put("page_no", page + "");
        map.put("page_size", pageSize + "");
        map.put("material_id", "6708");
        if (StringUtil.isNullOrEmpty(imei) && StringUtil.isNullOrEmpty(idfa) && StringUtil.isNullOrEmpty(utdid))
            return null;
        if (!StringUtil.isNullOrEmpty(imei)) {
            map.put("device_encrypt", "MD5");
            map.put("device_value", StringUtil.Md5(imei));
            map.put("device_type", "IMEI");
        } else if (!StringUtil.isNullOrEmpty(idfa)) {
            map.put("device_encrypt", "MD5");
            map.put("device_value", StringUtil.Md5(idfa));
            map.put("device_type", "IDFA");
        } else if (!StringUtil.isNullOrEmpty(utdid)) {
            map.put("device_value", utdid);
            map.put("device_type", "UTDID");
        }
        JSONObject resultJSON = null;
        try {
            resultJSON = TaoKeBaseUtil.baseRequest(map, true);
        } catch (TaoKeApiException e) {
            e.printStackTrace();
        }
        if (resultJSON == null)
            return null;
        // JSONObject resultJSON = JSONObject.fromObject(resultStr);
        JSONObject response = resultJSON.optJSONObject("tbk_dg_optimus_material_response");
        if (response != null && response.optJSONObject("result_list") != null) {
            JSONArray array = response.optJSONObject("result_list").optJSONArray("map_data");
            if (array != null) {
                for (int i = 0; i < array.size(); i++) {
                    JSONObject item = array.optJSONObject(i);
                    TaoBaoGoodsBrief goods = parseWuLiaoItemFromMaterialId(item);
                    if (goods != null)
                        goodsList.add(goods);
                }
                pageSize = array.size();
            }
        }
        TaoBaoSearchResult result = new TaoBaoSearchResult();
        result.setTaoBaoGoodsBriefs(goodsList);
        int totalCount = 1000;// root.optInt("total_results");
        PageEntity pe = new PageEntity(page, pageSize, totalCount);
        result.setPageEntity(pe);
        result.setNavList(new ArrayList<>());
        TaoBaoHead taoBaoHead = new TaoBaoHead();
        taoBaoHead.setDocsfound((int) result.getPageEntity().getTotalCount());
        result.setTaoBaoHead(taoBaoHead);
        return result;
    }
    /**
     * 从淘宝链接中解析商品ID(高级接口)
     *
     * @param link
     * @return
     */
    public static String parseAuctionIdFromLink(String link) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.item.click.extract");
        map.put("click_url", link + "");
        TaoKeAppInfo app = new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET,
                TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID);
        JSONObject resultJSON = null;
        try {
            resultJSON = TaoKeBaseUtil.baseRequest(map, app);
            System.out.println(resultJSON);
        } catch (TaoKeApiException e) {
            e.printStackTrace();
        }
        if (resultJSON == null)
            return null;
        return null;
    }
    public static String getAccessToken(String code, String appKey, String appSecret) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.top.auth.token.create");
        map.put("code", code);
        TaoKeAppInfo app = new TaoKeAppInfo();
        app.setAppKey(appKey);
        app.setAppSecret(appSecret);
        try {
            JSONObject json = TaoKeBaseUtil.baseRequest(map, app);
            if (json != null)
                return json.toString();
        } catch (TaoKeApiException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 渠道邀请码
     *
     * @param relationId
     * @return
     */
    public static String getInviteCode(Long relationId, String accessToken, String appKey, String appSecret) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.sc.invitecode.get");
        map.put("session", accessToken);
        map.put("code_type", "1");
        map.put("relation_app", "common");
        JSONObject resultJSON = null;
        try {
            TaoKeAppInfo app = new TaoKeAppInfo();
            app.setAppKey(appKey);
            app.setAppSecret(appSecret);
            resultJSON = TaoKeBaseUtil.baseRequest(map, app);
        } catch (TaoKeApiException e) {
            e.printStackTrace();
        }
        if (resultJSON == null)
            return null;
        return null;
    }
    /**
     * 获取渠道邀请码
     *
     * @param accessToken
     * @param appKey
     * @param appSecret
     * @return
     */
    public static String getRootRelationInviteCode(String accessToken, String appKey, String appSecret) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.sc.invitecode.get");
        map.put("session", accessToken);
        map.put("code_type", "1");
        map.put("relation_app", "common");
        JSONObject resultJSON = null;
        try {
            TaoKeAppInfo app = new TaoKeAppInfo();
            app.setAppKey(appKey);
            app.setAppSecret(appSecret);
            resultJSON = TaoKeBaseUtil.baseRequest(map, app);
        } catch (TaoKeApiException e) {
            e.printStackTrace();
        }
        if (resultJSON == null)
            return null;
        return null;
    }
    public static String getRootSpecialInviteCode(String accessToken, String appKey, String appSecret) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.sc.invitecode.get");
        map.put("session", accessToken);
        map.put("code_type", "3");
        map.put("relation_app", "common");
        JSONObject resultJSON = null;
        try {
            TaoKeAppInfo app = new TaoKeAppInfo();
            app.setAppKey(appKey);
            app.setAppSecret(appSecret);
            resultJSON = TaoKeBaseUtil.baseRequest(map, app);
            return resultJSON.optJSONObject("tbk_sc_invitecode_get_response").optJSONObject("data")
                    .optString("inviter_code");
        } catch (TaoKeApiException e) {
            e.printStackTrace();
        }
        if (resultJSON == null)
            return null;
        return null;
    }
    public static String getRelationId(String accessToken, String appKey, String appSecret) throws TaoBaoAuthException {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.sc.publisher.info.save");
        map.put("session", accessToken);
        map.put("inviter_code", "A2QnGL");
        map.put("info_type", "1");
        map.put("online_scene", "1");
        JSONObject resultJSON = null;
        try {
            TaoKeAppInfo app = new TaoKeAppInfo();
            app.setAppKey(appKey);
            app.setAppSecret(appSecret);
            resultJSON = TaoKeBaseUtil.baseRequest(map, app);
            System.out.println(resultJSON.toString());
            return resultJSON.optJSONObject("tbk_sc_publisher_info_save_response").optJSONObject("data")
                    .optString("relation_id");
        } catch (TaoKeApiException e) {
            JSONObject errorJSON = JSONObject.fromObject(e.getMsg()).optJSONObject("error_response");
            if (errorJSON.optInt("code") == 15 && errorJSON.optInt("sub_code") == 1)// 未实名
            {
                throw new TaoBaoAuthException(TaoBaoAuthException.CODE_NOT_REAL_NAME, errorJSON.optString("sub_msg"));
            } else {
                e.printStackTrace();
                LogHelper.error("渠道ID申请出错:" + e.getMsg());
                throw new TaoBaoAuthException(TaoBaoAuthException.CODE_OTHER, errorJSON.optString("sub_msg"));
            }
        } catch (Exception e) {
            LogHelper.error("渠道ID申请出错:" + (resultJSON != null ? resultJSON.toString() : "未知错误"));
        }
        return null;
    }
    public static String getSpecialId(String accessToken, String appKey, String appSecret) throws TaoBaoAuthException {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.sc.publisher.info.save");
        map.put("session", accessToken);
        map.put("inviter_code", "AA5ISJ");
        map.put("info_type", "1");
        map.put("online_scene", "1");
        JSONObject resultJSON = null;
        try {
            TaoKeAppInfo app = new TaoKeAppInfo();
            app.setAppKey(appKey);
            app.setAppSecret(appSecret);
            resultJSON = TaoKeBaseUtil.baseRequest(map, app);
            return resultJSON.optJSONObject("tbk_sc_publisher_info_save_response").optJSONObject("data")
                    .optString("special_id");
        } catch (TaoKeApiException e) {
            JSONObject errorJSON = JSONObject.fromObject(e.getMsg()).optJSONObject("error_response");
            if (errorJSON.optInt("code") == 15 && errorJSON.optInt("sub_code") == 1)// 未实名
            {
                throw new TaoBaoAuthException(TaoBaoAuthException.CODE_NOT_REAL_NAME, errorJSON.optString("sub_msg"));
            } else {
                e.printStackTrace();
                LogHelper.error("会员运营ID申请出错:" + e.getMsg());
                throw new TaoBaoAuthException(TaoBaoAuthException.CODE_OTHER, errorJSON.optString("sub_msg"));
            }
        } catch (Exception e) {
            LogHelper.error("会员运营ID申请出错:" + (resultJSON != null ? resultJSON.toString() : "未知错误"));
        }
        return null;
    }
    public static void specialConvertItem(Long auctionId, TaoKeAppInfo app) {
        String pid = app.getPid();
        String[] sts = pid.split("_");
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.item.convert");
        map.put("num_iids", auctionId + "");
        map.put("fields", "num_iid,click_url");
        map.put("adzone_id", sts[3]);
        map.put("platform", "2");
        try {
            JSONObject json = TaoKeBaseUtil.baseRequest(map, app);
            System.out.println(json.toString());
        } catch (TaoKeApiException e) {
            e.printStackTrace();
        }
    }
    public static TaoBaoGoodsBrief specialConvertCoupon(Long auctionId, TaoKeAppInfo app) {
        String pid = app.getPid();
        String[] sts = pid.split("_");
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.coupon.convert");
        map.put("item_id", auctionId + "");
        map.put("adzone_id", sts[3]);
        try {
            String result = TaoKeBaseUtil.baseRequestForThreeTimes(map, app);
            System.out.println(result);
            JSONObject json = JSONObject.fromObject(result);
            JSONObject resultJSON = json.optJSONObject("tbk_coupon_convert_response").optJSONObject("result")
                    .optJSONObject("results");
            String couponLink = resultJSON.optString("coupon_click_url");
            String itemLink = resultJSON.optString("item_url");
            TaoBaoGoodsBrief goods = new TaoBaoGoodsBrief();
            goods.setAuctionUrl(itemLink);
            if (!StringUtil.isNullOrEmpty(resultJSON.optString("coupon_info"))) {
                goods.setCouponLink(couponLink);
                goods.setCouponInfo(resultJSON.optString("coupon_info"));
                if (!StringUtil.isNullOrEmpty(resultJSON.optString("coupon_total_count"))) {
                    goods.setCouponTotalCount(Integer.parseInt(resultJSON.optString("coupon_total_count")));
                }
                if (!StringUtil.isNullOrEmpty(resultJSON.optString("coupon_remain_count"))) {
                    goods.setCouponLeftCount(Integer.parseInt(resultJSON.optString("coupon_remain_count")));
                }
                goods.setCouponEffectiveStartTime(resultJSON.optString("coupon_start_time"));
                goods.setCouponEffectiveEndTime(resultJSON.optString("coupon_end_time"));
            }
            String tkRate = resultJSON.optString("max_commission_rate");
            if (!StringUtil.isNullOrEmpty(tkRate)) {
                goods.setTkRate(new BigDecimal(tkRate));
            }
            goods = loadYuShouInfo(goods, resultJSON);
            return goods;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public static void juHuaSuan() {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.ju.items.search");
        map.put("current_page", 1 + "");
        map.put("page_size", 100 + "");
        map.put("pid", "mm_124933865_43788020_381938426");
        TaoKeAppInfo app = new TaoKeAppInfo();
        app.setAppKey("24838852");
        app.setAppSecret("bc8265e2bf8d8115329d652f9d3d4cd8");
        try {
            JSONObject json = TaoKeBaseUtil.baseRequest(map, app);
            System.out.println(json);
        } catch (TaoKeApiException e) {
            e.printStackTrace();
        }
    }
    public static void taoKeContent() {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.content.get");
        map.put("adzone_id", TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT.split("_")[3]);
        map.put("type", "1");
        map.put("count", "100");
        TaoKeAppInfo app = new TaoKeAppInfo();
        app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
        app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
        try {
            JSONObject json = TaoKeBaseUtil.baseRequest(map, app);
            System.out.println(json);
        } catch (TaoKeApiException e) {
            e.printStackTrace();
        }
    }
    public static void taoKeContentSource(String contentId, String source) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.dg.optimus.material");
        map.put("adzone_id", TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT.split("_")[3]);
        map.put("page_size", "10");
        map.put("page_no", "1");
        map.put("content_id", contentId);
        map.put("content_source", source);
        map.put("material_id", "1");
        TaoKeAppInfo app = new TaoKeAppInfo();
        app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
        app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
        try {
            JSONObject json = TaoKeBaseUtil.baseRequest(map, app);
            System.out.println(json);
        } catch (TaoKeApiException e) {
            e.printStackTrace();
        }
    }
    // AA5ISJ
    private static TaoBaoGoodsBrief parseWuLiaoItemFromMaterialId(JSONObject item) {
        TaoBaoGoodsBrief goods = new TaoBaoGoodsBrief();
        // 设置成320*320的图片尺寸
        goods.setPictUrl(TbImgUtil.getTBSize320Img("https:" + item.optString("pict_url")));
        goods.setAuctionId(item.optLong("item_id"));
        goods.setAuctionUrl("https://item.taobao.com/item.htm?id=" + goods.getAuctionId());
        goods.setBiz30day(item.optInt("volume"));
        if (!StringUtil.isNullOrEmpty(item.optString("coupon_amount"))) {
            goods.setCouponEffectiveEndTime(TimeUtil.getGernalTime(item.optLong("coupon_end_time"), "yyyy-MM-dd"));
            goods.setCouponEffectiveStartTime(TimeUtil.getGernalTime(item.optLong("coupon_start_time"), "yyyy-MM-dd"));
            goods.setCouponStartFee(new BigDecimal(item.optString("coupon_start_fee")));
            goods.setCouponLeftCount(item.optInt("coupon_remain_count"));
            goods.setCouponLink(null);
            goods.setCouponAmount(new BigDecimal(item.optString("coupon_amount")));
            goods.setCouponTotalCount(item.optInt("coupon_total_count"));
            goods.setCouponActivityId(item.optString("coupon_id"));
            if (goods.getCouponStartFee().compareTo(new BigDecimal(0)) > 0)
                goods.setCouponInfo(String.format("满%s元减%s元",
                        MoneyBigDecimalUtil.getWithNoZera(goods.getCouponStartFee()).toString(),
                        MoneyBigDecimalUtil.getWithNoZera(goods.getCouponAmount()).toString()));
            else
                goods.setCouponInfo(String.format("%s元无条件券",
                        MoneyBigDecimalUtil.getWithNoZera(goods.getCouponAmount()).toString()));
            if (goods.getCouponStartFee().compareTo(new BigDecimal(0)) <= 0) {
                goods.setCouponStartFee(goods.getCouponAmount());
            }
        } else {
            goods.setCouponAmount(new BigDecimal(0));
        }
        goods.setDayLeft(-1);
        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.setTkMktStatus("0");
        goods.setIncludeDxjh(0);
        goods.setSellerId(item.optLong("seller_id"));
        goods.setShopTitle(item.optString("nick"));
        goods.setTitle(item.optString("title"));
        goods.setProvcity(item.optString("provcity"));
        if (!StringUtil.isNullOrEmpty(item.optString("level_one_category_id"))) {
            goods.setRootCatId(item.optInt("level_one_category_id"));
        }
        goods.setRootCategoryName(item.optString("level_one_category_name"));
        if (!StringUtil.isNullOrEmpty(item.optString("category_id"))) {
            goods.setLeafCatId(item.optInt("category_id"));
        }
        goods.setLeafName(item.optString("category_name"));
        goods.setTotalNum(1000);
        goods.setUserType(item.optInt("user_type"));
        goods.setUserTypeName("");
        if (!StringUtil.isNullOrEmpty(item.optString("commission_rate"))) {
            goods.setTkRate(new BigDecimal(item.optString("commission_rate")));
        } else {
            goods.setTkRate(new BigDecimal(0));
        }
        if (!StringUtil.isNullOrEmpty(item.optString("zk_final_price"))) {
            goods.setZkPrice(new BigDecimal(item.optString("zk_final_price")));
        } else {
            goods.setZkPrice(new BigDecimal(0));
        }
        if (StringUtil.isNullOrEmpty(goods.getCouponInfo())) {// 无券
            goods.setTkCommFee(goods.getZkPrice().multiply(goods.getTkRate()).divide(new BigDecimal(100)));
        } else if (goods.getZkPrice().compareTo(goods.getCouponStartFee()) >= 0// 有券
                && goods.getZkPrice().compareTo(goods.getCouponAmount()) >= 0) {
            BigDecimal finalPrice = goods.getZkPrice().subtract(goods.getCouponAmount());
            goods.setTkCommFee(finalPrice.multiply(goods.getTkRate()).divide(new BigDecimal(100)));
        } else {
            goods.setTkCommFee(new BigDecimal(0));
        }
        goods.setReservePrice(new BigDecimal(0));
        goods.setTotalFee(new BigDecimal("0"));
        goods.setPictUrlWhite(item.optString("white_image"));
        goods = loadYuShouInfo(goods, item);
        return goods;
    }
    public static void getShopGoodsList(Long shopId) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "tmall.omni.pc.iteminfo.getbyshopid");
        map.put("shop_id", shopId + "");
        TaoKeAppInfo app = new TaoKeAppInfo();
        app.setAppKey("24838852");
        app.setAppSecret("bc8265e2bf8d8115329d652f9d3d4cd8");
        try {
            JSONObject json = TaoKeBaseUtil.baseRequest(map, app);
            System.out.println(json);
        } catch (TaoKeApiException e) {
            e.printStackTrace();
        }
    }
    public static void getTaoKeContentEffective() {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.dg.optimus.material");
        map.put("adzone_id", TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID.split("_")[3]);
        map.put("page_no", "1");
        map.put("page_size", "20");
        map.put("content_id", "8872035");
        TaoKeAppInfo app = new TaoKeAppInfo();
        app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
        app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
        try {
            JSONObject json = TaoKeBaseUtil.baseRequest(map, app);
            System.out.println(json);
        } catch (TaoKeApiException e) {
            e.printStackTrace();
        }
    }
    public static void getTaoKeContent() {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.content.get");
        map.put("adzone_id", TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID.split("_")[3]);
        map.put("type", "1");
        TaoKeAppInfo app = new TaoKeAppInfo();
        app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
        app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
        try {
            JSONObject json = TaoKeBaseUtil.baseRequest(map, app);
            System.out.println(json);
        } catch (TaoKeApiException e) {
            e.printStackTrace();
        }
    }
    /**
     * 淘口令转商品ID
     *
     * @param token
     * @return
     */
    public static Long tokenConvertAuctionId(String token) throws TaoBaoTokenParseException {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.tpwd.convert");
        map.put("password_content", token);
        map.put("adzone_id", TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT.split("_")[3]);
        TaoKeAppInfo app = new TaoKeAppInfo();
        app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
        app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
        try {
            JSONObject json = TaoKeBaseUtil.baseRequest(map, app);
            try {
                return json.optJSONObject("tbk_tpwd_convert_response").optJSONObject("data").optLong("num_iid");
            } catch (Exception e) {
                return null;
            }
        } catch (TaoKeApiException e) {
            JSONObject msg = null;
            try {
                msg = JSONObject.fromObject(e.getMsg());
            } catch (Exception e2) {
            }
            if (msg != null && msg.optJSONObject("error_response") != null) {
                throw new TaoBaoTokenParseException(msg.optJSONObject("error_response").optInt("sub_code"),
                        msg.optJSONObject("error_response").optString("sub_msg"));
            }
        }
        return null;
    }
    // 淘礼金创建
    public static TaoLiJinDTO createTaoLiJin(Long auctionId, String name, BigDecimal perface, int totalNum,
            Date sendStartTime, Date sendEndTime, Date useStartTime, Date useEndTime, TaoKeAppInfo app)
            throws TaoLiJinCreateException, TaoKeApiException {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.dg.vegas.tlj.create");
        map.put("adzone_id", app.getPid().split("_")[3]);
        map.put("item_id", auctionId + "");
        map.put("total_num", totalNum + "");
        map.put("name", name);
        map.put("user_total_win_num_limit", "1");
        map.put("security_switch", "false");
        map.put("per_face", perface.toString());
        map.put("send_start_time", TimeUtil.getGernalTime(sendStartTime.getTime(), "yyyy-MM-dd HH:mm:ss"));
        if (sendEndTime != null)
            map.put("send_end_time", TimeUtil.getGernalTime(sendEndTime.getTime(), "yyyy-MM-dd HH:mm:ss"));
        if (useEndTime != null) {
            map.put("use_end_time", TimeUtil.getGernalTime(useEndTime.getTime(), "yyyy-MM-dd"));
            map.put("use_end_time_mode", "2");
        }
        if (useStartTime != null)
            map.put("use_start_time", TimeUtil.getGernalTime(useStartTime.getTime(), "yyyy-MM-dd"));
        try {
            String result = TaoKeBaseUtil.baseRequestForThreeTimes(map, app);
            JSONObject json = JSONObject.fromObject(result);
            System.out.println(json);
            JSONObject root = json.optJSONObject("tbk_dg_vegas_tlj_create_response");
            if (root != null && root.optJSONObject("result") != null) {
                if (root.optJSONObject("result").optBoolean("success")) {
                    JSONObject modelJson = root.optJSONObject("result").optJSONObject("model");
                    TaoLiJinDTO dto = new TaoLiJinDTO();
                    dto.setRightsId(modelJson.optString("rights_id"));
                    dto.setSendUrl(modelJson.optString("send_url"));
                    return dto;
                } else {
                    LogHelper.error(json);
                }
                // 接口返回异常
                String msgCode = root.optJSONObject("result").optString("msg_code");
                if (!StringUtil.isNullOrEmpty(msgCode)) {
                    TLJLogHelper.info(auctionId, root.toString());// 淘礼金异常信息记录
                    switch (msgCode) {
                    case "FAIL_BIZ_ITEM_FORBIDDEN":
                        throw new TaoLiJinCreateException(TaoLiJinCreateException.CODE_TLJ_FORBIDDEN, "该商品不支持创建淘礼金红包");
                    case "FAIL_BIZ_ACCOUNT_UN_PAID":
                    case "PRE_FREEZE_ASSET_ACCOUNT_ERROR":
                        throw new TaoLiJinCreateException(TaoLiJinCreateException.CODE_TLJ_NO_MONEY, "官方玩法钱包余额不足");
                    default:
                        throw new TaoKeApiException(Integer.parseInt(msgCode), root.toString());
                    }
                }
            }
        } catch (TaoKeApiException e) {
            throw e;
        }
        return null;
    }
    // 淘礼金报告
    public static UserTaoLiJinReport getTaoLiJinEffective(String rightsId) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.dg.vegas.tlj.instance.report");
        map.put("rights_id", rightsId);
        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);
            System.out.println(json);
            JSONObject root = json.optJSONObject("tbk_dg_vegas_tlj_instance_report_response");
            if (root != null && root.optJSONObject("result") != null) {
                if (root.optJSONObject("result").optBoolean("success")) {
                    JSONObject modelJson = root.optJSONObject("result").optJSONObject("model");
                    if (modelJson != null && modelJson.size() > 0) {
                        UserTaoLiJinReport report = new UserTaoLiJinReport();
                        report.setId(rightsId);
                        report.setUnfreezeAmount(new BigDecimal(modelJson.optString("unfreeze_amount")));
                        report.setUnfreezeNum(modelJson.optInt("unfreeze_num"));
                        report.setRefundAmount(new BigDecimal(modelJson.optString("refund_amount")));
                        report.setRefundNum(modelJson.optInt("refund_num"));
                        report.setAlipayAmount(new BigDecimal(modelJson.optString("alipay_amount")));
                        report.setUseAmount(new BigDecimal(modelJson.optString("use_amount")));
                        report.setUseNum(modelJson.optInt("use_num"));
                        report.setWinAmount(new BigDecimal(modelJson.optString("win_amount")));
                        report.setWinNum(modelJson.optInt("win_num"));
                        report.setPreCommissionAmount(new BigDecimal(modelJson.optString("pre_commission_amount")));
                        return report;
                    }
                }
            }
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
        }
        return null;
    }
    public static void getCouponByAuctionId(Long auctionId) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.itemid.coupon.get");
        map.put("platform", 2 + "");
        map.put("pid", TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID);
        map.put("num_iids", auctionId + "");
        TaoKeAppInfo app = new TaoKeAppInfo();
        app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
        app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
        try {
            JSONObject json = TaoKeBaseUtil.baseRequest(map, app);
            System.out.print(json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 获取淘宝系统时间
     *
     * @return
     */
    public static Date getTaoBaoSystemTime() {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.time.get");
        try {
            JSONObject json = TaoKeBaseUtil.baseRequest(map, false);
            String time = json.optJSONObject("time_get_response").optString("time");
            return new Date(TimeUtil.convertToTimeTemp(time, "yyyy-MM-dd HH:mm:ss"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 官方活动推广
     *
     * @param adZoneId
     *            -广告位
     * @param promotionSceneId-活动ID
     * @param relationId
     *            -渠道ID
     * @return
     */
    public static TaoKeOfficialActivityConvertResultDTO officialActivityConvert(String adZoneId,
            String promotionSceneId, String relationId) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.activity.info.get");
        map.put("adzone_id", adZoneId);
        map.put("activity_material_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);
            System.out.println(result);
            JSONObject json = JSONObject.fromObject(result);
            if (json != null) {
                json = json.optJSONObject("tbk_activity_info_get_response");
                if (json.optJSONObject("data") != null) {
                    return JsonUtil.getSimpleGson().fromJson(json.optJSONObject("data").toString(),
                            TaoKeOfficialActivityConvertResultDTO.class);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public static List<TaoBaoGoodsBrief> guessLikeByAuctionId(Long auctionId, int count) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.dg.optimus.material");
        map.put("item_id", auctionId + "");
        map.put("page_size", count + "");
        map.put("page_no", 1 + "");
        map.put("material_id", 13256 + "");
        List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
        JSONObject resultJSON = null;
        try {
            resultJSON = TaoKeBaseUtil.baseRequest(map, true);
            JSONObject response = resultJSON.optJSONObject("tbk_dg_optimus_material_response");
            if (response != null && response.optJSONObject("result_list") != null) {
                JSONArray array = response.optJSONObject("result_list").optJSONArray("map_data");
                if (array != null) {
                    for (int i = 0; i < array.size(); i++) {
                        JSONObject item = array.optJSONObject(i);
                        TaoBaoGoodsBrief goods = parseWuLiaoItemFromMaterialId(item);
                        if (goods != null)
                            goodsList.add(goods);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return goodsList;
    }
    public static List<TaoBaoGoodsBrief> getCouponListByItemId(Long auctionId) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.itemid.coupon.get");
        map.put("platform", auctionId + "");
        map.put("num_iids", auctionId + "");
        map.put("pid", TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT);
        List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
        JSONObject resultJSON = null;
        try {
            resultJSON = TaoKeBaseUtil.baseRequest(map, new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY,
                    TaoBaoConstant.TAOBAO_AUTH_APPSECRET, TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT));
            JSONObject response = resultJSON.optJSONObject("tbk_dg_optimus_material_response");
            if (response != null && response.optJSONObject("result_list") != null) {
                JSONArray array = response.optJSONObject("result_list").optJSONArray("map_data");
                if (array != null) {
                    for (int i = 0; i < array.size(); i++) {
                        JSONObject item = array.optJSONObject(i);
                        TaoBaoGoodsBrief goods = parseWuLiaoItemFromMaterialId(item);
                        if (goods != null)
                            goodsList.add(goods);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return goodsList;
    }
    /**
     * 淘宝客-推广者-官方活动信息获取
     * @Title: getActivityInfo
     * @Description:
     * @param activityMaterialId
     * @param pid
     * @param relationId
     * @return
     * String 返回类型
     * @throws
     */
    public static String getActivityInfo(String activityMaterialId, String pid, String relationId) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.activity.info.get");
        map.put("activity_material_id", activityMaterialId);
        map.put("adzone_id", pid.split("_")[3] + "");
        map.put("relation_id", relationId);
        JSONObject resultJSON = null;
        try {
            resultJSON = TaoKeBaseUtil.baseRequest(map,
                    new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET, pid));
            JSONObject response = resultJSON.optJSONObject("tbk_activity_info_get_response");
            if (response != null && response.optJSONObject("data") != null) {
                return response.optJSONObject("data").optString("click_url");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/vipshop/VipShopApiUtil.java
@@ -19,6 +19,7 @@
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.yeshi.fanli.dto.vip.VIPConvertResultDTO;
import com.yeshi.fanli.dto.vip.VIPSearchFilter;
import com.yeshi.fanli.dto.vip.VIPSearchResult;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
@@ -170,7 +171,7 @@
     * 
     * @param goodsId
     */
    public static String convertLink(String goodsId, String tag) {
    public static VIPConvertResultDTO convertLink(String goodsId, String tag) {
        JSONObject taskParams = new JSONObject();
        JSONArray goodsIdArray = new JSONArray();
        goodsIdArray.add(goodsId);
@@ -182,7 +183,8 @@
        System.out.println(result);
        JSONObject resultJSON = JSONObject.fromObject(result);
        if (resultJSON.optInt("returnCode") == 0) {
            return resultJSON.optJSONObject("result").optJSONArray("urlInfoList").optJSONObject(0).optString("url");
            String re = resultJSON.optJSONObject("result").optJSONArray("urlInfoList").optJSONObject(0).toString();
            return new Gson().fromJson(re, VIPConvertResultDTO.class);
        }
        return null;
    }
fanli/src/main/java/com/yeshi/fanli/vo/goods/GoodsDetailVO.java
@@ -24,7 +24,7 @@
    @Expose
    private Long id;// 系统ID
    @Expose
    private Long goodsId;// 商品ID
    private String goodsId;// 商品ID
    @Expose
    private int goodsType;// 商品类型 1-淘宝 2-京东 3-拼多多
    @Expose
@@ -74,6 +74,16 @@
    private String provcity; // 商品所在地
    @Expose
    private String description;//推荐语
    @Expose
    private String discount;//折扣信息
    public String getDiscount() {
        return discount;
    }
    public void setDiscount(String discount) {
        this.discount = discount;
    }
    public String getDescription() {
        return description;
@@ -83,11 +93,11 @@
        this.description = description;
    }
    public Long getGoodsId() {
    public String getGoodsId() {
        return goodsId;
    }
    public void setGoodsId(Long goodsId) {
    public void setGoodsId(String goodsId) {
        this.goodsId = goodsId;
    }