From 98b1a0affd69bbe63223c21fdd2c404e8bedfccb Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期三, 20 五月 2020 17:25:08 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/div' into 2.1.2 --- fanli/src/main/java/com/yeshi/fanli/controller/h5/H5RecommendController.java | 247 ++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 220 insertions(+), 27 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 ea63ae3..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,38 +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.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.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; @@ -90,10 +103,12 @@ @Resource private UserShareGoodsGroupService userShareGoodsGroupService; - + @Resource private UserTaoLiJinRecordService userTaoLiJinRecordService; - + + @Resource + private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; /** * @@ -162,11 +177,11 @@ out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("鍟嗗搧淇℃伅鑾峰彇澶辫触"))); return; } - + Long auctionId = record.getGoodsId(); String tljLink = record.getSendUrl(); - BigDecimal tljMoney= record.getPerFace(); - + BigDecimal tljMoney = record.getPerFace(); + TaoBaoGoodsBrief goods = null; try { goods = redisManager.getTaoBaoGoodsBrief(auctionId); @@ -199,7 +214,7 @@ data.put("quanPrice", afterCouponPrice); data.put("zkPrice", goods.getZkPrice()); data.put("shareContent", "闀挎寜澶嶅埗鏈鏂囧瓧锛屾墦寮�銆愭墜鏈烘窐瀹濄�戝嵆鍙鍙栥�愮壒鍒紭鎯犲埜銆戣喘涔颁笅鍗曪紝"); - data.put("token", link.getTaoToken()); + 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())) { @@ -208,9 +223,9 @@ } else { data.put("coupon", false); } - + data.put("tljMoney", tljMoney); - + out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data))); } @@ -229,6 +244,12 @@ @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")); @@ -272,22 +293,14 @@ } } else {// 娌℃湁鍒嗕韩璁板綍锛岄渶瑕佺洿鎺ュ垎浜� - List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService - .getConfigByTypeCache(PidUser.TYPE_SHARE_GOODS); - String pid = null; - ClientTBPid tbPid = tbPidService.getSharePid(); - 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) { @@ -300,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); } } @@ -362,7 +378,7 @@ data.put("quanPrice", afterCouponPrice); data.put("zkPrice", goods.getZkPrice()); data.put("shareContent", "闀挎寜澶嶅埗鏈鏂囧瓧锛屾墦寮�銆愭墜鏈烘窐瀹濄�戝嵆鍙鍙栥�愮壒鍒紭鎯犲埜銆戣喘涔颁笅鍗曪紝"); - data.put("token", link.getTaoToken()); + 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())) { @@ -375,7 +391,7 @@ // 鑰佺増鏈吋瀹� data.put("quan", true); } - + out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data))); final String tempUid = uid; @@ -395,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