From 30d8e227e8d823b6c38c3b9c90ac2df03b63befe Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 25 二月 2025 16:41:22 +0800 Subject: [PATCH] 淘宝转链接口更新 --- fanli/src/main/java/com/yeshi/fanli/controller/h5/H5RecommendController.java | 1186 +++++++++++++++++++++++++++++----------------------------- 1 files changed, 599 insertions(+), 587 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/h5/H5RecommendController.java b/fanli/src/main/java/com/yeshi/fanli/controller/h5/H5RecommendController.java index 662ca6c..cee1bcd 100644 --- a/fanli/src/main/java/com/yeshi/fanli/controller/h5/H5RecommendController.java +++ b/fanli/src/main/java/com/yeshi/fanli/controller/h5/H5RecommendController.java @@ -1,587 +1,599 @@ -package com.yeshi.fanli.controller.h5; - -import java.io.PrintWriter; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.annotation.Resource; - -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.yeshi.utils.JsonUtil; -import org.yeshi.utils.taobao.TbImgUtil; - -import com.google.gson.Gson; -import com.yeshi.fanli.dto.jd.JDCouponInfo; -import com.yeshi.fanli.dto.jd.JDPingouInfo; -import com.yeshi.fanli.dto.pdd.PDDGoodsDetail; -import com.yeshi.fanli.entity.accept.AcceptData; -import com.yeshi.fanli.entity.bus.recommend.RecommendBanner; -import com.yeshi.fanli.entity.bus.share.UserShareGoodsHistory; -import com.yeshi.fanli.entity.bus.su.recommend.SuperRecommendBanner; -import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinRecord; -import com.yeshi.fanli.entity.jd.JDGoods; -import com.yeshi.fanli.entity.system.BusinessSystem; -import com.yeshi.fanli.entity.taobao.ClientTBPid; -import com.yeshi.fanli.entity.taobao.PidUser; -import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; -import com.yeshi.fanli.entity.taobao.TaoBaoLink; -import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig; -import com.yeshi.fanli.entity.taobao.TaoKeAppInfo; -import com.yeshi.fanli.exception.share.ShareGoodsException; -import com.yeshi.fanli.exception.share.UserShareGoodsRecordException; -import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException; -import com.yeshi.fanli.log.LogHelper; -import com.yeshi.fanli.service.inter.config.BusinessSystemService; -import com.yeshi.fanli.service.inter.config.ConfigService; -import com.yeshi.fanli.service.inter.config.SystemConfigService; -import com.yeshi.fanli.service.inter.goods.ShareGoodsService; -import com.yeshi.fanli.service.inter.goods.SuperRecommendBannerService; -import com.yeshi.fanli.service.inter.goods.TaoBaoGoodsBriefService; -import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; -import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService; -import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinRecordService; -import com.yeshi.fanli.service.inter.user.TBPidService; -import com.yeshi.fanli.service.inter.user.UserShareGoodsGroupService; -import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService; -import com.yeshi.fanli.util.AESUtil; -import com.yeshi.fanli.util.Constant; -import com.yeshi.fanli.util.MoneyBigDecimalUtil; -import com.yeshi.fanli.util.RedisManager; -import com.yeshi.fanli.util.StringUtil; -import com.yeshi.fanli.util.TaoBaoConstant; -import com.yeshi.fanli.util.ThreadUtil; -import com.yeshi.fanli.util.jd.JDApiUtil; -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.taobao.TaoBaoUtil; -import com.yeshi.fanli.util.taobao.TaoKeApiUtil; - -import net.sf.json.JSONObject; - -@Controller -@RequestMapping("api/h5/v1/webRecommend") -public class H5RecommendController { - - @Resource - private H5ControllerUtil h5ControllerUtil; - - @Resource - private SuperRecommendBannerService superRecommendBannerService; - - @Resource - private HongBaoManageService hongBaoManageService; - - @Resource - private RedisManager redisManager; - - @Resource - private BusinessSystemService businessSystemService; - - @Resource - private ConfigService configService; - - @Resource - private SystemConfigService systemConfigService; - - @Resource - private TaoBaoGoodsBriefService taoBaoGoodsBriefService; - - @Resource - private TBPidService tbPidService; - - @Resource - private ShareGoodsService shareGoodsService; - - @Resource - private TaoBaoUnionConfigService taoBaoUnionConfigService; - - @Resource - private UserShareGoodsGroupService userShareGoodsGroupService; - - @Resource - private UserTaoLiJinRecordService userTaoLiJinRecordService; - - @Resource - private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; - - /** - * - * 鏂规硶璇存槑: 鎺ㄨ崘杞挱鍟嗗搧淇℃伅 - * - * @author mawurui createTime 2018骞�5鏈�11鏃� 涓婂崍11:13:47 - * @param acceptData - * @param out - */ - @RequestMapping(value = "getRecommenBanner", method = RequestMethod.GET) - public void getRecommendBanner(AcceptData acceptData, String callback, PrintWriter out) { - - BusinessSystem system = businessSystemService.getBusinessSystem("WEB", - Constant.systemCommonConfig.getH5PackageName()); - JSONObject json = new JSONObject(); - if (system == null) { - out.print(JsonUtil.loadFalseResult(1, H5ControllerUtil.NOSYSTEM)); - return; - } - List<SuperRecommendBanner> superRecommendBanners = superRecommendBannerService - .getSuperRecommendBannersBySystem(system); - List<RecommendBanner> list = null; - for (SuperRecommendBanner superRecommendBanner : superRecommendBanners) { - if (list == null) { - list = new ArrayList<RecommendBanner>(); - } - RecommendBanner recommendBanner = superRecommendBanner.getRecommendBanner(); - // 娣樼壒浠锋殏鏃朵慨鏀� - if (system.getId() == 7) { - recommendBanner.getJumpDetail().setActivity(recommendBanner.getJumpDetail().getActivity() - .replace("com.yeshi.ec.rebate.myapplication", "com.yeshi.ec.taospecial")); - } - - list.add(recommendBanner); - } - - if (list == null) { - json.put("code", "1"); - json.put("msg", H5ControllerUtil.NODATA); - out.print(json); - java.lang.System.out.println("json-" + json); - return; - } - json.put("code", 0); - JSONObject data = new JSONObject(); - data.put("count", list.size()); - Gson gson = new Gson(); - data.put("data", gson.toJson(list)); - json.put("data", data); - // jsonp鏂瑰紡杩斿洖 - out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(json))); - return; - } - - /** - * 澶勭悊鏉′欢 - * - * @param uid - * @param tid - * @param out - */ - private void doTaoLiJin(String callback, Long uid, Long tid, PrintWriter out) { - // 鏌ヨ鍟嗗搧娣樼ぜ閲� - UserTaoLiJinRecord record = userTaoLiJinRecordService.selectByPrimaryKey(tid); - if (record == null) { - out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("鍟嗗搧淇℃伅鑾峰彇澶辫触"))); - return; - } - - Long auctionId = record.getGoodsId(); - String tljLink = record.getSendUrl(); - BigDecimal tljMoney = record.getPerFace(); - - TaoBaoGoodsBrief goods = null; - try { - goods = redisManager.getTaoBaoGoodsBrief(auctionId); - } catch (TaobaoGoodsDownException e) { - } - - if (goods == null) {// 宸茬粡涓嬬嚎 - out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("鍟嗗搧淇℃伅鑾峰彇澶辫触"))); - return; - } - - String token = redisManager.getTLJToken(tljLink); - if (StringUtil.isNullOrEmpty(token)) { - token = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), tljLink); - } - - // 鍒稿悗浠� - BigDecimal afterCouponPrice = TaoBaoUtil.getAfterUseCouplePrice(goods); - TaoBaoLink link = new TaoBaoLink(); - link.setTaoToken(token); - - JSONObject data = new JSONObject(); - data.put("title", goods.getTitle()); - if (goods.getImgList() == null) - goods.setImgList(new ArrayList<>()); - goods.getImgList().add(0, TbImgUtil.getTBSizeImg(goods.getPictUrl(), 300)); - data.put("imgs", goods.getImgList()); - data.put("couponPrice", afterCouponPrice); - // 鑰佺増鏈吋瀹� - data.put("quanPrice", afterCouponPrice); - data.put("zkPrice", goods.getZkPrice()); - data.put("shareContent", "闀挎寜澶嶅埗鏈鏂囧瓧锛屾墦寮�銆愭墜鏈烘窐瀹濄�戝嵆鍙鍙栥�愮壒鍒紭鎯犲埜銆戣喘涔颁笅鍗曪紝"); - data.put("token", link.getTaoToken()); - data.put("reservePrice", goods.getReservePrice()); - data.put("shopType", goods.getUserType() == 1 ? 2 : 1); - if (!StringUtil.isNullOrEmpty(goods.getCouponInfo()) && !"鏃�".equalsIgnoreCase(goods.getCouponInfo())) { - data.put("couponAmount", MoneyBigDecimalUtil.getWithNoZera(goods.getCouponAmount())); - data.put("coupon", true); - } else { - data.put("coupon", false); - } - - data.put("tljMoney", tljMoney); - - out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data))); - } - - /** - * - * 鏂规硶璇存槑: 鑾峰彇鍟嗗搧璇︽儏 - * - * @author mawurui createTime 2018骞�5鏈�11鏃� 涓婂崍11:37:02 - * @param acceptData - * @param id - * @param uid - * @param out - */ - - @SuppressWarnings("unused") - @RequestMapping(value = "getGoodsDetail", method = RequestMethod.GET) - public void getGoodsDetail(final AcceptData acceptData, final String id, String tid, String uid, String callback, - PrintWriter out) { - if (!StringUtil.isNullOrEmpty(uid)) - uid = uid.replace(" ", "+"); - - LogHelper.shareGoods("鍒嗕韩鍑哄幓鐨凥5璁块棶: uid:" + uid + " id:" + id); - long begin = java.lang.System.currentTimeMillis(); - if (StringUtil.isNullOrEmpty(id)) { - out.print(JsonUtil.loadFalseResult(1, "璇蜂笂浼爄d")); - return; - } - - if (!StringUtil.isNullOrEmpty(uid)) { - uid = AESUtil.decrypt(uid, Constant.UIDAESKEY); - } - - if (!StringUtil.isNullOrEmpty(tid)) { - tid = AESUtil.decrypt(tid, Constant.UIDAESKEY); - doTaoLiJin(callback, StringUtil.isNullOrEmpty(uid) || Long.parseLong(uid) == 0 ? null : Long.parseLong(uid), - Long.parseLong(tid), out); - return; - } - - TaoBaoGoodsBrief goods = null; - String token = null; - if (!StringUtil.isNullOrEmpty(uid)) { - // 鏌ヨ鏄惁鏈夊垎浜褰� - UserShareGoodsHistory shareHistory = null; - try { - shareHistory = shareGoodsService.getShareGoodsHistoryDetail(Long.parseLong(uid), Long.parseLong(id)); - } catch (NumberFormatException e) { - e.printStackTrace(); - } catch (ShareGoodsException e) { - e.printStackTrace(); - } - - if (shareHistory != null) {// 鏈夊垎浜褰� - token = shareHistory.getTkCode(); - goods = redisManager.getTaoBaoGoodsTemp(Long.parseLong(id)); - if (goods == null) - try { - goods = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id)); - } catch (NumberFormatException e) { - e.printStackTrace(); - } catch (TaobaoGoodsDownException e) { - e.printStackTrace(); - } - - } else {// 娌℃湁鍒嗕韩璁板綍锛岄渶瑕佺洿鎺ュ垎浜� - LogHelper.test("娌℃湁鍒嗕韩璁板綍:uid:" + uid + " actionid:" + id); - // 鑾峰彇 - TaoKeAppInfo app = new TaoKeAppInfo(); - app.setPid(TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT); - app.setAdzoneId(app.getPid().split("_")[3]); - app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY); - app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET); - - try { - goods = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id), app); - } catch (NumberFormatException e) { - e.printStackTrace(); - } catch (TaobaoGoodsDownException e) { - e.printStackTrace(); - } - if (goods != null) { - String url = goods.getAuctionUrl(); - if (!StringUtil.isNullOrEmpty(goods.getCouponLink())) { - url = goods.getCouponLink(); - } - String relationId = userExtraTaoBaoInfoService.getRelationIdByUid(Long.parseLong(uid)); - if (!StringUtil.isNullOrEmpty(relationId)) - url += "&relationId=" + relationId; - token = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), url); - } - } - - } else { - List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService - .getConfigByTypeCache(PidUser.TYPE_SHARE_GOODS); - String pid = tbPidService.getSharePid().getPid(); - TaoKeAppInfo app = new TaoKeAppInfo(); - app.setAdzoneId(pid.split("_")[3]); - app.setAppKey(configList.get(0).getAppKey()); - app.setAppSecret(configList.get(0).getAppSecret()); - app.setPid(pid); - try { - goods = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id), app); - } catch (NumberFormatException e) { - e.printStackTrace(); - } catch (TaobaoGoodsDownException e) { - e.printStackTrace(); - } - if (goods != null) { - String url = goods.getAuctionUrl(); - if (!StringUtil.isNullOrEmpty(goods.getCouponLink())) { - url = goods.getCouponLink(); - } - if (!url.contains("uland.taobao.com") && !url.contains("s.click.taobao.com")) { - TaoBaoGoodsBrief linkInfo = TaoKeApiUtil.specialConvertCoupon(Long.parseLong(id), app); - url = linkInfo.getCouponLink(); - if (StringUtil.isNullOrEmpty(url)) - url = linkInfo.getAuctionUrl(); - } - - token = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), url); - } - } - - if (goods == null) { - out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("鍟嗗搧淇℃伅鑾峰彇澶辫触"))); - return; - } - - if (StringUtil.isNullOrEmpty(token)) { - out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("鍙d护鐢熸垚澶辫触"))); - return; - } - - // 鍒稿悗浠� - BigDecimal afterCouponPrice = TaoBaoUtil.getAfterUseCouplePrice(goods); - TaoBaoLink link = new TaoBaoLink(); - link.setTaoToken(token); - - JSONObject data = new JSONObject(); - data.put("title", goods.getTitle()); - if (goods.getImgList() == null) - goods.setImgList(new ArrayList<>()); - goods.getImgList().add(0, TbImgUtil.getTBSizeImg(goods.getPictUrl(), 300)); - data.put("imgs", goods.getImgList()); - data.put("couponPrice", afterCouponPrice); - // 鑰佺増鏈吋瀹� - data.put("quanPrice", afterCouponPrice); - data.put("zkPrice", goods.getZkPrice()); - data.put("shareContent", "闀挎寜澶嶅埗鏈鏂囧瓧锛屾墦寮�銆愭墜鏈烘窐瀹濄�戝嵆鍙鍙栥�愮壒鍒紭鎯犲埜銆戣喘涔颁笅鍗曪紝"); - data.put("token", link.getTaoToken()); - data.put("reservePrice", goods.getReservePrice()); - data.put("shopType", goods.getUserType() == 1 ? 2 : 1); - if (!StringUtil.isNullOrEmpty(goods.getCouponInfo()) && !"鏃�".equalsIgnoreCase(goods.getCouponInfo())) { - data.put("couponAmount", MoneyBigDecimalUtil.getWithNoZera(goods.getCouponAmount())); - data.put("coupon", true); - // 鑰佺増鏈吋瀹� - data.put("quan", true); - } else { - data.put("coupon", false); - // 鑰佺増鏈吋瀹� - data.put("quan", true); - } - - out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data))); - - final String tempUid = uid; - ThreadUtil.run(new Runnable() { - - @Override - public void run() { - try { - if (!StringUtil.isNullOrEmpty(tempUid)) - userShareGoodsGroupService.updateBrowseRecord(Long.parseLong(tempUid), Long.parseLong(id), 1); - } catch (NumberFormatException e) { - e.printStackTrace(); - } catch (UserShareGoodsRecordException e) { - e.printStackTrace(); - } - } - }); - return; - } - - /** - * 浜笢鍒嗕韩鍟嗗搧淇℃伅 - * - * @param acceptData - * @param id - * @param uid - * @param callback - * @param out - */ - @RequestMapping(value = "getJDGoodsDetail") - public void getJDGoodsDetail(final AcceptData acceptData, final Long id, String uid, String callback, - PrintWriter out) { - if (id == null) { - out.print(JsonUtil.loadFalseResult(1, "璇蜂笂浼爄d")); - return; - } - - if (!StringUtil.isNullOrEmpty(uid)) { - uid = AESUtil.decrypt(uid, Constant.UIDAESKEY); - } - - JDGoods jdGoods = JDApiUtil.queryGoodsDetail(id); - if (jdGoods == null) { - jdGoods = JDApiUtil.getGoodsDetail(id); - } - - if (jdGoods == null) { - out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("鍟嗗搧淇℃伅鑾峰彇澶辫触"))); - return; - } - - List<String> imageList = jdGoods.getImageList(); - if (imageList == null) { - imageList = new ArrayList<>(); - imageList.add(jdGoods.getPicUrl()); - } - - boolean hasCoupon = false; - String couponUrl = null; - BigDecimal discount = new BigDecimal(0); - JDCouponInfo couponInfo = jdGoods.getCouponInfo(); - if (couponInfo != null) { - hasCoupon = true; - discount = couponInfo.getDiscount(); - couponUrl = couponInfo.getLink(); - } - - boolean jdzy = false; - String owner = jdGoods.getOwner(); - if (!StringUtil.isNullOrEmpty(owner) && "g".equalsIgnoreCase(owner)) { - jdzy = true; - } - - String materialId = "https://item.jd.com/" + id + ".html"; - String jumpLink = JDApiUtil.convertShortLink(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "", uid); - - int priceType = 1; - BigDecimal price = jdGoods.getPrice(); - ; - JDPingouInfo pinGouInfo = jdGoods.getPinGouInfo(); - if (pinGouInfo != null) { - priceType = 2; // 鎷艰喘浠� - price = pinGouInfo.getPingouPrice(); - } - - JSONObject data = new JSONObject(); - data.put("jdzy", jdzy); - data.put("imgs", imageList); - data.put("title", jdGoods.getSkuName()); - data.put("zkPrice", price); - data.put("priceType", priceType); - data.put("coupon", hasCoupon); - data.put("couponAmount", discount); - data.put("couponPrice", JDUtil.getQuanPrice(jdGoods)); - data.put("helpLink", configService.get("jd_share_h5_help_link")); - data.put("jumpLink", jumpLink); - JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data)); - - final String tempUid = uid; - ThreadUtil.run(new Runnable() { - @Override - public void run() { - try { - if (!StringUtil.isNullOrEmpty(tempUid)) - userShareGoodsGroupService.updateBrowseNum(Long.parseLong(tempUid), id, - Constant.SOURCE_TYPE_JD); - } catch (NumberFormatException e) { - e.printStackTrace(); - } catch (UserShareGoodsRecordException e) { - e.printStackTrace(); - } - } - }); - return; - } - - /** - * 鎷煎澶氬垎浜晢鍝佽鎯� - * - * @param acceptData - * @param id - * @param uid - * @param callback - * @param out - */ - @RequestMapping(value = "getPDDGoodsDetail") - public void getPDDGoodsDetail(final AcceptData acceptData, final Long id, String uid, String callback, - PrintWriter out) { - if (id == null) { - out.print(JsonUtil.loadFalseResult(1, "璇蜂笂浼爄d")); - return; - } - - if (!StringUtil.isNullOrEmpty(uid)) { - uid = AESUtil.decrypt(uid, Constant.UIDAESKEY); - } - - PDDGoodsDetail pddGoods = PinDuoDuoApiUtil.getGoodsDetail(id); - if (pddGoods == null) { - out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("鍟嗗搧淇℃伅鑾峰彇澶辫触"))); - return; - } - - List<String> imageList = null; - String[] goodsGalleryUrls = pddGoods.getGoodsGalleryUrls(); - if (goodsGalleryUrls != null) { - imageList = Arrays.asList(goodsGalleryUrls); - } - if (imageList == null) { - imageList = new ArrayList<>(); - String goodsImageUrl = pddGoods.getGoodsImageUrl(); - if (!StringUtil.isNullOrEmpty(goodsImageUrl)) { - imageList.add(goodsImageUrl); - } - } - - BigDecimal hundred = new BigDecimal(100); - Boolean hasCoupon = pddGoods.getHasCoupon(); - BigDecimal amount = new BigDecimal(0); - if (hasCoupon != null && hasCoupon) { - amount = MoneyBigDecimalUtil.div(new BigDecimal(pddGoods.getCouponDiscount()), hundred).setScale(2); - } else { - hasCoupon = false; - } - - String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(id, PinDuoDuoApiUtil.PID_SHARE + "", uid); - - JSONObject data = new JSONObject(); - data.put("imgs", imageList); - data.put("title", pddGoods.getGoodsName()); - data.put("zkPrice", MoneyBigDecimalUtil.div(new BigDecimal(pddGoods.getMinGroupPrice()), hundred).setScale(2)); - data.put("coupon", hasCoupon); - data.put("couponAmount", amount); - data.put("couponPrice", PinDuoDuoUtil.getQuanPrice(pddGoods)); - data.put("helpLink", configService.get("pdd_share_h5_help_link")); - data.put("jumpLink", jumpLink); - JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data)); - - final String tempUid = uid; - ThreadUtil.run(new Runnable() { - @Override - public void run() { - try { - if (!StringUtil.isNullOrEmpty(tempUid)) - userShareGoodsGroupService.updateBrowseNum(Long.parseLong(tempUid), id, - Constant.SOURCE_TYPE_PDD); - } catch (NumberFormatException e) { - e.printStackTrace(); - } catch (UserShareGoodsRecordException e) { - e.printStackTrace(); - } - } - }); - return; - } -} +package com.yeshi.fanli.controller.h5; + +import java.io.PrintWriter; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.annotation.Resource; + +import com.yeshi.fanli.entity.SystemPIDInfo; +import com.yeshi.fanli.entity.config.SystemConfigKeyEnum; +import com.yeshi.fanli.service.manger.PIDManager; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.yeshi.utils.JsonUtil; +import org.yeshi.utils.taobao.TbImgUtil; + +import com.google.gson.Gson; +import com.yeshi.fanli.dto.jd.JDCouponInfo; +import com.yeshi.fanli.dto.jd.JDPingouInfo; +import com.yeshi.fanli.dto.pdd.PDDGoodsDetail; +import com.yeshi.fanli.entity.accept.AcceptData; +import com.yeshi.fanli.entity.bus.recommend.RecommendBanner; +import com.yeshi.fanli.entity.bus.share.UserShareGoodsHistory; +import com.yeshi.fanli.entity.bus.su.recommend.SuperRecommendBanner; +import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinRecord; +import com.yeshi.fanli.entity.jd.JDGoods; +import com.yeshi.fanli.entity.system.BusinessSystem; +import com.yeshi.fanli.entity.taobao.PidUser; +import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief; +import com.yeshi.fanli.entity.taobao.TaoBaoLink; +import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig; +import com.yeshi.common.entity.taobao.TaoKeAppInfo; +import com.yeshi.fanli.exception.share.ShareGoodsException; +import com.yeshi.fanli.exception.share.UserShareGoodsRecordException; +import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException; +import com.yeshi.fanli.log.LogHelper; +import com.yeshi.fanli.log.LogManager; +import com.yeshi.fanli.log.LogType; +import com.yeshi.fanli.service.inter.config.BusinessSystemService; +import com.yeshi.fanli.service.inter.config.ConfigService; +import com.yeshi.fanli.service.inter.config.SystemConfigService; +import com.yeshi.fanli.service.inter.goods.ShareGoodsService; +import com.yeshi.fanli.service.inter.goods.SuperRecommendBannerService; +import com.yeshi.fanli.service.inter.goods.TaoBaoGoodsBriefService; +import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; +import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService; +import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinRecordService; +import com.yeshi.fanli.service.inter.user.TBPidService; +import com.yeshi.fanli.service.inter.user.UserShareGoodsGroupService; +import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService; +import com.yeshi.fanli.util.AESUtil; +import com.yeshi.fanli.util.Constant; +import org.yeshi.utils.MoneyBigDecimalUtil; +import com.yeshi.fanli.util.RedisManager; +import com.yeshi.fanli.util.StringUtil; +import com.yeshi.fanli.util.TaoBaoConstant; +import com.yeshi.fanli.util.ThreadUtil; +import com.yeshi.fanli.util.jd.JDApiUtil; +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.taobao.TaoBaoUtil; +import com.yeshi.fanli.util.taobao.TaoKeApiUtil; + +import net.sf.json.JSONObject; + +@Controller +@RequestMapping("api/h5/v1/webRecommend") +public class H5RecommendController { + + @Resource + private H5ControllerUtil h5ControllerUtil; + + @Resource + private SuperRecommendBannerService superRecommendBannerService; + + @Resource + private HongBaoManageService hongBaoManageService; + + @Resource + private RedisManager redisManager; + + @Resource + private BusinessSystemService businessSystemService; + + @Resource + private ConfigService configService; + + @Resource + private SystemConfigService systemConfigService; + + @Resource + private TaoBaoGoodsBriefService taoBaoGoodsBriefService; + + @Resource + private TBPidService tbPidService; + + @Resource + private ShareGoodsService shareGoodsService; + + @Resource + private TaoBaoUnionConfigService taoBaoUnionConfigService; + + @Resource + private UserShareGoodsGroupService userShareGoodsGroupService; + + @Resource + private UserTaoLiJinRecordService userTaoLiJinRecordService; + + @Resource + private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; + + @Resource + private PIDManager pidManager; + + /** + * 鏂规硶璇存槑: 鎺ㄨ崘杞挱鍟嗗搧淇℃伅 + * + * @param acceptData + * @param out + * @author mawurui createTime 2018骞�5鏈�11鏃� 涓婂崍11:13:47 + */ + @RequestMapping(value = "getRecommenBanner", method = RequestMethod.GET) + public void getRecommendBanner(AcceptData acceptData, String callback, PrintWriter out) { + + BusinessSystem system = businessSystemService.getBusinessSystem("WEB", + systemConfigService.getValueCache(SystemConfigKeyEnum.h5PackageName,acceptData.getSystem()), acceptData.getSystem()); + JSONObject json = new JSONObject(); + if (system == null) { + out.print(JsonUtil.loadFalseResult(1, H5ControllerUtil.NOSYSTEM)); + return; + } + List<SuperRecommendBanner> superRecommendBanners = superRecommendBannerService + .getSuperRecommendBannersBySystem(system); + List<RecommendBanner> list = null; + for (SuperRecommendBanner superRecommendBanner : superRecommendBanners) { + if (list == null) { + list = new ArrayList<RecommendBanner>(); + } + RecommendBanner recommendBanner = superRecommendBanner.getRecommendBanner(); + // 娣樼壒浠锋殏鏃朵慨鏀� + if (system.getId() == 7) { + recommendBanner.getJumpDetail().setActivity(recommendBanner.getJumpDetail().getActivity() + .replace("com.yeshi.ec.rebate.myapplication", "com.yeshi.ec.taospecial")); + } + + list.add(recommendBanner); + } + + if (list == null) { + json.put("code", "1"); + json.put("msg", H5ControllerUtil.NODATA); + out.print(json); + java.lang.System.out.println("json-" + json); + return; + } + json.put("code", 0); + JSONObject data = new JSONObject(); + data.put("count", list.size()); + Gson gson = new Gson(); + data.put("data", gson.toJson(list)); + json.put("data", data); + // jsonp鏂瑰紡杩斿洖 + out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(json))); + return; + } + + /** + * 澶勭悊鏉′欢 + * + * @param uid + * @param tid + * @param out + */ + private void doTaoLiJin(String callback, Long uid, Long tid, PrintWriter out) { + // 鏌ヨ鍟嗗搧娣樼ぜ閲� + UserTaoLiJinRecord record = userTaoLiJinRecordService.selectByPrimaryKey(tid); + if (record == null) { + out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("鍟嗗搧淇℃伅鑾峰彇澶辫触"))); + return; + } + + String auctionId = record.getGoodsId(); + String tljLink = record.getSendUrl(); + BigDecimal tljMoney = record.getPerFace(); + + TaoBaoGoodsBrief goods = null; + try { + goods = redisManager.getTaoBaoGoodsBrief(auctionId); + } catch (TaobaoGoodsDownException e) { + } + + if (goods == null) {// 宸茬粡涓嬬嚎 + out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("鍟嗗搧淇℃伅鑾峰彇澶辫触"))); + return; + } + + String token = redisManager.getTLJToken(tljLink); + if (StringUtil.isNullOrEmpty(token)) { + token = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), tljLink); + } + + // 鍒稿悗浠� + BigDecimal afterCouponPrice = TaoBaoUtil.getCouponPrice(goods); + TaoBaoLink link = new TaoBaoLink(); + link.setTaoToken(token); + + JSONObject data = new JSONObject(); + data.put("title", goods.getTitle()); + if (goods.getImgList() == null) + goods.setImgList(new ArrayList<>()); + goods.getImgList().add(0, TbImgUtil.getTBSizeImg(goods.getPictUrl(), 300)); + data.put("imgs", goods.getImgList()); + data.put("couponPrice", afterCouponPrice); + // 鑰佺増鏈吋瀹� + data.put("quanPrice", afterCouponPrice); + data.put("zkPrice", goods.getZkPrice()); + data.put("shareContent", "闀挎寜澶嶅埗鏈鏂囧瓧锛屾墦寮�銆愭墜鏈烘窐瀹濄�戝嵆鍙鍙栥�愮壒鍒紭鎯犲埜銆戣喘涔颁笅鍗曪紝"); + data.put("token", TaoBaoUtil.filterTaoToken(link.getTaoToken())); + data.put("reservePrice", goods.getReservePrice()); + data.put("shopType", goods.getUserType() == 1 ? 2 : 1); + if (!StringUtil.isNullOrEmpty(goods.getCouponInfo()) && !"鏃�".equalsIgnoreCase(goods.getCouponInfo())) { + data.put("couponAmount", MoneyBigDecimalUtil.getWithNoZera(goods.getCouponAmount())); + data.put("coupon", true); + } else { + data.put("coupon", false); + } + + data.put("tljMoney", tljMoney); + + out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data))); + } + + /** + * 鏂规硶璇存槑: 鑾峰彇鍟嗗搧璇︽儏 + * + * @param acceptData + * @param id + * @param uid + * @param out + * @author mawurui createTime 2018骞�5鏈�11鏃� 涓婂崍11:37:02 + */ + + @SuppressWarnings("unused") + @RequestMapping(value = "getGoodsDetail", method = RequestMethod.GET) + public void getGoodsDetail(final AcceptData acceptData, final String id, String tid, String uid, String callback, + PrintWriter out) { + if (!StringUtil.isNullOrEmpty(uid)) + uid = uid.replace(" ", "+"); + + LogManager.getLogger(LogType.taobaoTrade) + .info(String.format("娣樺疂鍒嗕韩鍟嗗搧H5璁块棶:\n 鍟嗗搧ID:%s \n 鍘熷鐢ㄦ埛ID:%s \n", id, uid)); + + long begin = java.lang.System.currentTimeMillis(); + if (StringUtil.isNullOrEmpty(id)) { + out.print(JsonUtil.loadFalseResult(1, "璇蜂笂浼爄d")); + return; + } + + if (!StringUtil.isNullOrEmpty(uid)) { + uid = AESUtil.decrypt(uid, Constant.UIDAESKEY); + } + + if (!StringUtil.isNullOrEmpty(tid)) { + tid = AESUtil.decrypt(tid, Constant.UIDAESKEY); + doTaoLiJin(callback, StringUtil.isNullOrEmpty(uid) || Long.parseLong(uid) == 0 ? null : Long.parseLong(uid), + Long.parseLong(tid), out); + return; + } + + TaoBaoGoodsBrief goods = null; + String token = null; + if (!StringUtil.isNullOrEmpty(uid)) { + // 鏌ヨ鏄惁鏈夊垎浜褰� + UserShareGoodsHistory shareHistory = null; + try { + shareHistory = shareGoodsService.getShareGoodsHistoryDetail(Long.parseLong(uid), id); + } catch (NumberFormatException e) { + e.printStackTrace(); + } catch (ShareGoodsException e) { + e.printStackTrace(); + } + + if (shareHistory != null) {// 鏈夊垎浜褰� + token = shareHistory.getTkCode(); + goods = redisManager.getTaoBaoGoodsTemp(id); + if (goods == null) + try { + goods = TaoKeApiUtil.searchGoodsDetail(id); + } catch (NumberFormatException e) { + e.printStackTrace(); + } catch (TaobaoGoodsDownException e) { + e.printStackTrace(); + } + + } else {// 娌℃湁鍒嗕韩璁板綍锛岄渶瑕佺洿鎺ュ垎浜� + LogHelper.test("娌℃湁鍒嗕韩璁板綍:uid:" + uid + " actionid:" + id); + // 鑾峰彇 + TaoKeAppInfo app = new TaoKeAppInfo(); + app.setPid(pidManager.getPidCache(acceptData.getSystem(), Constant.SOURCE_TYPE_TAOBAO, SystemPIDInfo.PidType.share)); + app.setAdzoneId(app.getPid().split("_")[3]); + app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY); + app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET); + + try { + goods = TaoKeApiUtil.searchGoodsDetail(id, app); + } catch (NumberFormatException e) { + e.printStackTrace(); + } catch (TaobaoGoodsDownException e) { + e.printStackTrace(); + } + if (goods != null) { + String url = goods.getAuctionUrl(); + if (!StringUtil.isNullOrEmpty(goods.getCouponLink())) { + url = goods.getCouponLink(); + } + String relationId = userExtraTaoBaoInfoService.getRelationIdByUid(Long.parseLong(uid)); + if (!StringUtil.isNullOrEmpty(relationId)) + url += "&relationId=" + relationId; + token = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), url); + } + } + + } else { + List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService + .getConfigByTypeCache(PidUser.TYPE_SHARE_GOODS); + String pid = tbPidService.getSharePid(acceptData.getSystem()).getPid(); + TaoKeAppInfo app = new TaoKeAppInfo(); + app.setAdzoneId(pid.split("_")[3]); + app.setAppKey(configList.get(0).getAppKey()); + app.setAppSecret(configList.get(0).getAppSecret()); + app.setPid(pid); + try { + goods = TaoKeApiUtil.searchGoodsDetail(id, app); + } catch (NumberFormatException e) { + e.printStackTrace(); + } catch (TaobaoGoodsDownException e) { + e.printStackTrace(); + } + if (goods != null) { + String url = goods.getAuctionUrl(); + if (!StringUtil.isNullOrEmpty(goods.getCouponLink())) { + url = goods.getCouponLink(); + } + if (!url.contains("uland.taobao.com") && !url.contains("s.click.taobao.com")) { + TaoBaoGoodsBrief linkInfo = TaoKeApiUtil.specialConvertCouponV2(id, app, null, null); + url = linkInfo.getCouponLink(); + if (StringUtil.isNullOrEmpty(url)) + url = linkInfo.getAuctionUrl(); + } + + token = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), url); + } + } + + if (goods == null) { + out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("鍟嗗搧淇℃伅鑾峰彇澶辫触"))); + return; + } + + if (StringUtil.isNullOrEmpty(token)) { + out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("鍙d护鐢熸垚澶辫触"))); + return; + } + + // 鍒稿悗浠� + BigDecimal afterCouponPrice = TaoBaoUtil.getCouponPrice(goods); + TaoBaoLink link = new TaoBaoLink(); + link.setTaoToken(token); + + JSONObject data = new JSONObject(); + data.put("title", goods.getTitle()); + if (goods.getImgList() == null) + goods.setImgList(new ArrayList<>()); + goods.getImgList().add(0, TbImgUtil.getTBSizeImg(goods.getPictUrl(), 300)); + data.put("imgs", goods.getImgList()); + data.put("couponPrice", afterCouponPrice); + // 鑰佺増鏈吋瀹� + data.put("quanPrice", afterCouponPrice); + data.put("zkPrice", goods.getZkPrice()); + data.put("shareContent", "闀挎寜澶嶅埗鏈鏂囧瓧锛屾墦寮�銆愭墜鏈烘窐瀹濄�戝嵆鍙鍙栥�愮壒鍒紭鎯犲埜銆戣喘涔颁笅鍗曪紝"); + data.put("token", TaoBaoUtil.filterTaoToken(link.getTaoToken())); + data.put("reservePrice", goods.getReservePrice()); + data.put("shopType", goods.getUserType() == 1 ? 2 : 1); + if (!StringUtil.isNullOrEmpty(goods.getCouponInfo()) && !"鏃�".equalsIgnoreCase(goods.getCouponInfo())) { + data.put("couponAmount", MoneyBigDecimalUtil.getWithNoZera(goods.getCouponAmount())); + data.put("coupon", true); + // 鑰佺増鏈吋瀹� + data.put("quan", true); + } else { + data.put("coupon", false); + // 鑰佺増鏈吋瀹� + data.put("quan", true); + } + + out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data))); + + final String tempUid = uid; + ThreadUtil.run(new Runnable() { + + @Override + public void run() { + try { + if (!StringUtil.isNullOrEmpty(tempUid)) + userShareGoodsGroupService.updateBrowseRecord(Long.parseLong(tempUid), id, 1); + } catch (NumberFormatException e) { + e.printStackTrace(); + } catch (UserShareGoodsRecordException e) { + e.printStackTrace(); + } + } + }); + return; + } + + /** + * 浜笢鍒嗕韩鍟嗗搧淇℃伅 + * + * @param acceptData + * @param id + * @param uid + * @param callback + * @param out + */ + @RequestMapping(value = "getJDGoodsDetail") + public void getJDGoodsDetail(final AcceptData acceptData, final String id, String uid, String callback, + PrintWriter out) { + if (id == null) { + out.print(JsonUtil.loadFalseResult(1, "璇蜂笂浼爄d")); + return; + } + + if (!StringUtil.isNullOrEmpty(uid)) { + uid = AESUtil.decrypt(uid, Constant.UIDAESKEY); + } + + JDGoods jdGoods = JDApiUtil.queryGoodsDetail(id); + if (jdGoods == null) { + jdGoods = JDApiUtil.getGoodsDetail(id); + } + + if (jdGoods == null) { + out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("鍟嗗搧淇℃伅鑾峰彇澶辫触"))); + return; + } + + List<String> imageList = jdGoods.getImageList(); + if (imageList == null) { + imageList = new ArrayList<>(); + imageList.add(jdGoods.getPicUrl()); + } + + boolean hasCoupon = false; + String couponUrl = null; + BigDecimal discount = new BigDecimal(0); + JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(jdGoods); + if (couponInfo != null) { + hasCoupon = true; + discount = couponInfo.getDiscount(); + couponUrl = couponInfo.getLink(); + } + + boolean jdzy = false; + String owner = jdGoods.getOwner(); + if (!StringUtil.isNullOrEmpty(owner) && "g".equalsIgnoreCase(owner)) { + jdzy = true; + } + + String materialId = "https://item.jd.com/" + id + ".html"; + String jumpLink = null; + try { + jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, null, pidManager.getPidCache(acceptData.getSystem(), Constant.SOURCE_TYPE_JD, SystemPIDInfo.PidType.share), + uid); + } catch (Exception e) { + e.printStackTrace(); + } + + int priceType = 1; + BigDecimal price = jdGoods.getPrice(); + JDPingouInfo pinGouInfo = jdGoods.getPinGouInfo(); + if (pinGouInfo != null) { + priceType = 2; // 鎷艰喘浠� + price = pinGouInfo.getPingouPrice(); + } + + JSONObject data = new JSONObject(); + data.put("jdzy", jdzy); + data.put("imgs", imageList); + data.put("title", jdGoods.getSkuName()); + data.put("zkPrice", price); + data.put("priceType", priceType); + data.put("coupon", hasCoupon); + data.put("couponAmount", discount); + data.put("couponPrice", JDUtil.getCouponPrice(jdGoods)); + data.put("helpLink", configService.getValue("jd_share_h5_help_link", acceptData.getSystem())); + data.put("jumpLink", jumpLink); + JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data)); + + final String tempUid = uid; + ThreadUtil.run(new Runnable() { + @Override + public void run() { + try { + if (!StringUtil.isNullOrEmpty(tempUid)) + userShareGoodsGroupService.updateBrowseNum(Long.parseLong(tempUid), id+"", + Constant.SOURCE_TYPE_JD); + } catch (NumberFormatException e) { + e.printStackTrace(); + } catch (UserShareGoodsRecordException e) { + e.printStackTrace(); + } + } + }); + return; + } + + /** + * 鎷煎澶氬垎浜晢鍝佽鎯� + * + * @param acceptData + * @param id + * @param uid + * @param callback + * @param out + */ + @RequestMapping(value = "getPDDGoodsDetail") + public void getPDDGoodsDetail(final AcceptData acceptData, final String id, String uid, String callback, + PrintWriter out) { + if (id == null) { + out.print(JsonUtil.loadFalseResult(1, "璇蜂笂浼爄d")); + return; + } + + if (!StringUtil.isNullOrEmpty(uid)) { + uid = AESUtil.decrypt(uid, Constant.UIDAESKEY); + } + + PDDGoodsDetail pddGoods = PinDuoDuoApiUtil.getGoodsDetail(id); + if (pddGoods == null) { + out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("鍟嗗搧淇℃伅鑾峰彇澶辫触"))); + return; + } + + List<String> imageList = null; + String[] goodsGalleryUrls = pddGoods.getGoodsGalleryUrls(); + if (goodsGalleryUrls != null) { + imageList = Arrays.asList(goodsGalleryUrls); + } + if (imageList == null) { + imageList = new ArrayList<>(); + String goodsImageUrl = pddGoods.getGoodsImageUrl(); + if (!StringUtil.isNullOrEmpty(goodsImageUrl)) { + imageList.add(goodsImageUrl); + } + } + + BigDecimal hundred = new BigDecimal(100); + Boolean hasCoupon = pddGoods.getHasCoupon(); + BigDecimal amount = new BigDecimal(0); + if (hasCoupon != null && hasCoupon) { + amount = MoneyBigDecimalUtil.div(new BigDecimal(pddGoods.getCouponDiscount()), hundred).setScale(2); + } else { + hasCoupon = false; + } + + String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(pddGoods.getGoodsSign(), pidManager.getPidCache(acceptData.getSystem(), Constant.SOURCE_TYPE_PDD, SystemPIDInfo.PidType.share), uid); + + JSONObject data = new JSONObject(); + data.put("imgs", imageList); + data.put("title", pddGoods.getGoodsName()); + data.put("zkPrice", MoneyBigDecimalUtil.div(new BigDecimal(pddGoods.getMinGroupPrice()), hundred).setScale(2)); + data.put("coupon", hasCoupon); + data.put("couponAmount", amount); + data.put("couponPrice", PinDuoDuoUtil.getCouponPrice(pddGoods)); + data.put("helpLink", configService.getValue("pdd_share_h5_help_link", acceptData.getSystem())); + data.put("jumpLink", jumpLink); + JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data)); + + final String tempUid = uid; + ThreadUtil.run(new Runnable() { + @Override + public void run() { + try { + if (!StringUtil.isNullOrEmpty(tempUid)) + userShareGoodsGroupService.updateBrowseNum(Long.parseLong(tempUid), id+"", + Constant.SOURCE_TYPE_PDD); + } catch (NumberFormatException e) { + e.printStackTrace(); + } catch (UserShareGoodsRecordException e) { + e.printStackTrace(); + } + } + }); + return; + } +} -- Gitblit v1.8.0