From 744594ef1a2f530fc3e86ea9dc48b62247f79420 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 19 五月 2020 17:13:23 +0800 Subject: [PATCH] 饿了么绘图,添加口碑 --- fanli/src/main/java/com/yeshi/fanli/controller/h5/H5RecommendController.java | 337 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 315 insertions(+), 22 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 a825b29..06c96ed 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 @@ -3,6 +3,7 @@ import java.io.PrintWriter; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import javax.annotation.Resource; @@ -14,35 +15,50 @@ 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.fanli.entity.taobao.TBPid; 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.ShareGoodsException; +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.hongbao.HongBaoManageService; +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; @@ -88,6 +104,12 @@ @Resource private UserShareGoodsGroupService userShareGoodsGroupService; + @Resource + private UserTaoLiJinRecordService userTaoLiJinRecordService; + + @Resource + private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; + /** * * 鏂规硶璇存槑: 鎺ㄨ崘杞挱鍟嗗搧淇℃伅 @@ -99,7 +121,8 @@ @RequestMapping(value = "getRecommenBanner", method = RequestMethod.GET) public void getRecommendBanner(AcceptData acceptData, String callback, PrintWriter out) { - BusinessSystem system = businessSystemService.getBusinessSystem("WEB", Constant.systemCommonConfig.getH5PackageName()); + BusinessSystem system = businessSystemService.getBusinessSystem("WEB", + Constant.systemCommonConfig.getH5PackageName()); JSONObject json = new JSONObject(); if (system == null) { out.print(JsonUtil.loadFalseResult(1, H5ControllerUtil.NOSYSTEM)); @@ -140,6 +163,71 @@ 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", 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))); + } /** * @@ -154,15 +242,29 @@ @SuppressWarnings("unused") @RequestMapping(value = "getGoodsDetail", method = RequestMethod.GET) - public void getGoodsDetail(final AcceptData acceptData, final String id, String uid, String callback, + 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; @@ -191,22 +293,14 @@ } } else {// 娌℃湁鍒嗕韩璁板綍锛岄渶瑕佺洿鎺ュ垎浜� - List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService - .getConfigByTypeCache(PidUser.TYPE_SHARE_GOODS); - String pid = null; - TBPid tbPid = tbPidService.getTBPid(Long.parseLong(uid), PidUser.TYPE_SHARE_GOODS); - if (tbPid != null) - pid = tbPid.getPid(); - else { - pid = configList.get(0).getDefaultPid(); - } - + LogHelper.test("娌℃湁鍒嗕韩璁板綍:uid:" + uid + " actionid:" + id); // 鑾峰彇 TaoKeAppInfo app = new TaoKeAppInfo(); - app.setAdzoneId(pid.split("_")[3]); - app.setAppKey(configList.get(0).getAppKey()); - app.setAppSecret(configList.get(0).getAppSecret()); - app.setPid(pid); + 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) { @@ -219,6 +313,9 @@ 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); } } @@ -226,7 +323,7 @@ } else { List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService .getConfigByTypeCache(PidUser.TYPE_SHARE_GOODS); - String pid = configList.get(0).getDefaultPid(); + String pid = tbPidService.getSharePid().getPid(); TaoKeAppInfo app = new TaoKeAppInfo(); app.setAdzoneId(pid.split("_")[3]); app.setAppKey(configList.get(0).getAppKey()); @@ -244,6 +341,13 @@ 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); } } @@ -269,13 +373,25 @@ 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("quan", !StringUtil.isNullOrEmpty(goods.getCouponInfo())); + 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; @@ -295,4 +411,181 @@ }); 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 = 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 = JDApiUtil.convertLinkWithSubUnionId(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; + } } -- Gitblit v1.8.0