From c04327c1e6271e10c6d4f13ebb53438f6edca50e Mon Sep 17 00:00:00 2001 From: yujian <yujian@123.com> Date: 星期二, 16 七月 2019 09:06:16 +0800 Subject: [PATCH] 细节优化调整 --- fanli/src/main/java/com/yeshi/fanli/controller/client/v2/RecommendControllerV2.java | 444 +++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 347 insertions(+), 97 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/RecommendControllerV2.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/RecommendControllerV2.java index 9aaa35a..c4cb203 100644 --- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/RecommendControllerV2.java +++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/RecommendControllerV2.java @@ -6,13 +6,18 @@ import java.util.Calendar; import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; 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.google.gson.GsonBuilder; @@ -20,11 +25,16 @@ import com.yeshi.fanli.entity.bus.homemodule.SwiperPicture; import com.yeshi.fanli.entity.bus.lable.QualityFactory; import com.yeshi.fanli.entity.common.JumpDetailV2; +import com.yeshi.fanli.entity.taobao.SearchFilter; +import com.yeshi.fanli.entity.taobao.TLJBuyGoods; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; +import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBriefExtra; import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult; +import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.common.JumpDetailV2Service; import com.yeshi.fanli.service.inter.config.ConfigService; +import com.yeshi.fanli.service.inter.goods.recommend.HomeRecommendGoodsService; import com.yeshi.fanli.service.inter.goods.recommend.RecommendGoodsDeleteHistoryService; import com.yeshi.fanli.service.inter.homemodule.DeviceSexService; import com.yeshi.fanli.service.inter.homemodule.SpecialService; @@ -37,11 +47,17 @@ import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.RedisManager; import com.yeshi.fanli.util.StringUtil; +import com.yeshi.fanli.util.TaoBaoConstant; +import com.yeshi.fanli.util.Utils; import com.yeshi.fanli.util.VersionUtil; import com.yeshi.fanli.util.factory.MonitorFactory; import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory; +import com.yeshi.fanli.util.taobao.TaoBaoUtil; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; import com.yeshi.fanli.vo.goods.GoodsDetailVO; +import com.yeshi.fanli.vo.goods.OtherInfo; +import com.yeshi.fanli.vo.msg.ClientTextStyleVO; +import com.yeshi.fanli.vo.tlj.ReduceHongBao; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -58,6 +74,9 @@ @Resource private RedisManager redisManager; + + @Resource + private HomeRecommendGoodsService homeRecommendGoodsService; @Resource private ConfigService configService; @@ -142,97 +161,6 @@ } } - - - - /** - * 鏍规嵁璁惧淇℃伅鑾峰彇鐚滀綘鍠滄鐨勫唴瀹� - * - * @param acceptData - * @param imei - * -Android鐨処MEI淇℃伅 - * @param idfa - * -IOS鐨刬dfa骞垮憡鏍囪瘑淇℃伅 - */ - @RequestMapping(value = "guessLikeByDevice") - public void guessUserLikeByDevice(AcceptData acceptData, String imei, String idfa, int page, - HttpServletRequest request, PrintWriter out) { - int pageSize = Constant.PAGE_SIZE; - JSONArray array = new JSONArray(); - Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create(); - // 浠庢帹鑽愭潵 - if (page <= 1) { - array.clear(); - BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(); - BigDecimal shareRate = hongBaoManageService.getShareRate(); - - if (!StringUtil.isNullOrEmpty(imei) || !StringUtil.isNullOrEmpty(idfa)) { - long startTime = java.lang.System.currentTimeMillis(); - - TaoBaoSearchResult result = TaoKeApiUtil.guessDeviceLike(page, 50, imei, idfa); - - if (result != null && result.getTaoBaoGoodsBriefs() != null) { - // 绛涢�� - List<GoodsDetailVO> goodsList = new ArrayList<GoodsDetailVO>(); - - List<TaoBaoGoodsBrief> gList = recommendGoodsDeleteHistoryService - .filterGoods(acceptData.getDevice(), result.getTaoBaoGoodsBriefs()); - - // filter - try { - gList = daTaoKeGoodsDetailService.filterTaoBaoGoods(gList); - } catch (Exception e) { - } - - // 璁惧鎺ㄨ崘 - if (gList != null) - for (TaoBaoGoodsBrief goods : gList) { - if (!StringUtil.isNullOrEmpty(goods.getCouponInfo()) && goods.getCouponAmount() != null - && goods.getCouponAmount().compareTo(new BigDecimal("5")) >= 0 - && goods.getBiz30day() > 1000 - && !StringUtil.isNullOrEmpty(goods.getPictUrlWhite())) { - - GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(goods, null, fanLiRate, shareRate); - detailVO.setRecommend(true); - goodsList.add(detailVO); - } - } - try { - monitorService.addClientAPIMonitor(MonitorFactory.createClientAPI(request, 0, - (int) (java.lang.System.currentTimeMillis() - startTime), "鎺ㄨ崘鏁伴噺:" + goodsList.size())); - } catch (Exception e) { - e.printStackTrace(); - } - - Collections.shuffle(goodsList); - goodsList = goodsList.size() > 20 ? goodsList.subList(0, 20) : goodsList; - for (GoodsDetailVO goods : goodsList) { - array.add(gson.toJson(goods)); - } - } else { - try { - monitorService.addClientAPIMonitor(MonitorFactory.createClientAPI(request, 0, - (int) (java.lang.System.currentTimeMillis() - startTime), "鏃犳帹鑽�")); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - JSONArray localArray = qualityGoodsService.getRecommendToIndexV2((page - 1) * pageSize, pageSize); - array.addAll(localArray); - } else {// 浠庣簿閫夊簱鏉� - array = qualityGoodsService.getRecommendToIndexV2((page - 1) * pageSize, pageSize); - if (array == null) { - out.print(JsonUtil.loadFalseResult("娌℃湁鏇村浜�")); - return; - } - } - - JSONObject data = new JSONObject(); - data.put("data", array); - data.put("count", 1000); - out.print(JsonUtil.loadTrueResult(data)); - } /** @@ -286,8 +214,8 @@ nextTime.set(Calendar.MILLISECOND, 0); JSONArray array = null; - String timekey = String.format("spikeGoods_hour-%s-%s", acceptData.getPlatform(), acceptData.getVersion()); - String cachekey = String.format("spikeGoodsList-%s-%s", acceptData.getPlatform(), acceptData.getVersion()); + String timekey = String.format("spikeGoods_hour_new-%s-%s", acceptData.getPlatform(), acceptData.getVersion()); + String cachekey = String.format("spikeGoodsList_new-%s-%s", acceptData.getPlatform(), acceptData.getVersion()); String timeValue = redisManager.getCommonString(timekey); if (timeValue == null || !timeValue.equals(hour + "")) { @@ -361,19 +289,341 @@ /** - * 浜笢涓撻 + * 棣栭〉搴曢儴鍟嗗搧鎺ㄨ崘 * @param acceptData * @param out */ - @RequestMapping(value = "getJDSpecial") - public void getJDSpecial(AcceptData acceptData, PrintWriter out) { - JSONObject root = getSpikeGoodsContent(acceptData); + @RequestMapping(value = "getGoodList") + public void getGoodList(AcceptData acceptData, Integer goodsType, Integer page, + HttpServletRequest request, PrintWriter out) { + + if (goodsType == null || page == null) { + out.print(JsonUtil.loadFalseResult("鍙傛暟淇℃伅涓嶆甯�")); + return; + } + + if (goodsType == Constant.SOURCE_TYPE_TAOBAO) { + taoBaoGuessUserLikeByDevice(acceptData, page, request, out); + return; + } + + if (goodsType == Constant.SOURCE_TYPE_JD) { + + } + + if (goodsType == Constant.SOURCE_TYPE_PDD) { + + } + + List<QualityFactory> listQuery = qualityGoodsService.listFreeGoods((page - 1) * 20, 20); + if (listQuery == null) { + listQuery = new ArrayList<QualityFactory>(); + } + + JSONArray array = new JSONArray(); + if (listQuery.size() > 0) { + Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) + .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create(); + + BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(); + BigDecimal shareRate = hongBaoManageService.getShareRate(); + for (QualityFactory qualityFactory : listQuery) { + TaoBaoGoodsBrief goods = qualityFactory.getTaoBaoGoodsBrief(); + if (goods == null) { + continue; + } + array.add(gson.toJson(GoodsDetailVOFactory.convertTaoBao(goods, null, fanLiRate, shareRate))); + } + } + long count = qualityGoodsService.countFreeGoods(); + + JSONObject root = new JSONObject(); + root.put("count", count); + root.put("list", array); out.print(JsonUtil.loadTrueResult(root)); } + /** + * 鏍规嵁璁惧淇℃伅鑾峰彇鐚滀綘鍠滄鐨勫唴瀹� + * + * @param acceptData + * @param imei + * -Android鐨処MEI淇℃伅 + * @param idfa + * -IOS鐨刬dfa骞垮憡鏍囪瘑淇℃伅 + */ + public void taoBaoGuessUserLikeByDevice(AcceptData acceptData, int page, HttpServletRequest request, PrintWriter out) { + int pageSize = Constant.PAGE_SIZE; + JSONArray array = new JSONArray(); + Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create(); + + String idfa = acceptData.getIdfa(); + String imei = acceptData.getImei(); + if (VersionUtil.greaterThan_1_5_70(acceptData.getPlatform(), acceptData.getVersion())) { + List<TaoBaoGoodsBrief> goodsList = homeRecommendGoodsService.listGoodsByPage(null, acceptData.getDevice(), + imei, idfa, page); + + BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(); + BigDecimal shareRate = hongBaoManageService.getShareRate(); + for (TaoBaoGoodsBrief goods : goodsList) { + GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(goods, null, fanLiRate, shareRate); + if (page < 3) + detailVO.setRecommend(true); + + try { + array.add(gson.toJson(detailVO)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + if (page == 1) { + List<TLJBuyGoods> list = homeRecommendGoodsService.getZiGouLiJianHotGoods(acceptData.getDevice()); + if (list != null && list.size() > 0) + for (int i = list.size() - 1; i >= 0; i--) { + TLJBuyGoods goods = list.get(i); + BigDecimal rateBuy = TaoBaoConstant.OWN_BUY_WITHOUT_FANLI_RATE; + GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(goods.getGoods(), null, rateBuy, rateBuy); + + String hongBao = TaoBaoUtil.getGoodsHongBaoInfo(goods.getGoods(),TaoBaoConstant.OWN_BUY_WITHOUT_FANLI_RATE); + + ReduceHongBao reduceHongBao = new ReduceHongBao(); + reduceHongBao.setLeft(goods.getLeftHongBaoCount()); + reduceHongBao.setMoney(hongBao); + reduceHongBao.setName("浠樻绔嬪噺 " + hongBao); + reduceHongBao.setTip(""); + reduceHongBao.setTotal(goods.getTotalHongBaoCount()); + + OtherInfo otherInfo = new OtherInfo(); + otherInfo.setReduceHongBao(reduceHongBao); + + detailVO.setOtherInfo(otherInfo); + detailVO.setPictureTag(new ClientTextStyleVO("绔嬪噺TOP" + (i + 1), "#E5005C", "#FCE431", null)); + detailVO.setRecommend(true); + array.add(0, gson.toJson(detailVO)); + } + } + + JSONObject data = new JSONObject(); + data.put("list", array); + data.put("count", 1000); + out.print(JsonUtil.loadTrueResult(data)); + return; + } + + // 浠庢帹鑽愭潵 + if (page <= 1) { + array.clear(); + if (!StringUtil.isNullOrEmpty(imei) || !StringUtil.isNullOrEmpty(idfa)) { + long startTime = java.lang.System.currentTimeMillis(); + + TaoBaoSearchResult result = TaoKeApiUtil.guessDeviceLike(page, 50, imei, idfa); + + if (result != null && result.getTaoBaoGoodsBriefs() != null) { + // 绛涢�� + List<GoodsDetailVO> goodsList = new ArrayList<>(); + + List<TaoBaoGoodsBrief> gList = recommendGoodsDeleteHistoryService + .filterGoods(acceptData.getDevice(), result.getTaoBaoGoodsBriefs()); + + // filter + try { + gList = daTaoKeGoodsDetailService.filterTaoBaoGoods(gList); + } catch (Exception e) { + } + + // 璁惧鎺ㄨ崘 + if (gList != null) { + BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(); + BigDecimal shareRate = hongBaoManageService.getShareRate(); + + for (TaoBaoGoodsBrief goods : gList) { + if (!StringUtil.isNullOrEmpty(goods.getCouponInfo()) && goods.getCouponAmount() != null + && goods.getCouponAmount().compareTo(new BigDecimal("5")) >= 0 + && goods.getBiz30day() > 1000 + && !StringUtil.isNullOrEmpty(goods.getPictUrlWhite())) { + + GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(goods, null, fanLiRate, shareRate); + detailVO.setRecommend(true); + goodsList.add(detailVO); + } + } + } + + try { + monitorService.addClientAPIMonitor(MonitorFactory.createClientAPI(request, 0, + (int) (java.lang.System.currentTimeMillis() - startTime), "鎺ㄨ崘鏁伴噺:" + goodsList.size())); + } catch (Exception e) { + e.printStackTrace(); + } + + Collections.shuffle(goodsList); + goodsList = goodsList.size() > 20 ? goodsList.subList(0, 20) : goodsList; + for (GoodsDetailVO goods : goodsList) { + array.add(gson.toJson(goods)); + } + } else { + try { + monitorService.addClientAPIMonitor(MonitorFactory.createClientAPI(request, 0, + (int) (java.lang.System.currentTimeMillis() - startTime), "鏃犳帹鑽�")); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + JSONArray localArray = qualityGoodsService.getRecommendToIndexV2((page - 1) * pageSize, pageSize); + array.addAll(localArray); + } else {// 浠庣簿閫夊簱鏉� + array = qualityGoodsService.getRecommendToIndexV2((page - 1) * pageSize, pageSize); + if (array == null) { + out.print(JsonUtil.loadFalseResult("娌℃湁鏇村浜�")); + return; + } + } + + JSONObject data = new JSONObject(); + data.put("list", array); + data.put("count", 1000); + out.print(JsonUtil.loadTrueResult(data)); + } + /** + * 绮樿创鏉夸俊鎭帹鑽� + * + * @param acceptData + * @param url + * 鍟嗗搧閾炬帴 + * @param out + */ + @RequestMapping(value = "getNewGoodsInfo", method = RequestMethod.POST) + public void getNewGoodsInfo(AcceptData acceptData, String text, PrintWriter out) { + if (StringUtil.isNullOrEmpty(text)) { + out.print(JsonUtil.loadFalseResult("鍊间负绌�")); + return; + } + + if (text.length() > 256) { + out.print(JsonUtil.loadFalseResult("鍊艰繃闀�")); + return; + } + + TaoBaoGoodsBrief tb = null; + String URL_REGEX = "(((http|https)://)|(www\\.))[a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6}(:[0-9]{1,4})?(/[a-zA-Z0-9\\&%_\\./-~-]*)?"; + + Pattern p = Pattern.compile(URL_REGEX); + Matcher matcher = p.matcher(text); + if (!matcher.find()) {// 涓嶅寘鍚摼鎺� + // 鍟嗗搧璇︽儏 + // 鍙戠幇 + // 娌℃湁閾炬帴锛屾爣棰樿繃闀夸篃涓嶅鐞� + if (text.startsWith("銆�") && text.contains("銆�")) { + int end = text.indexOf("銆�"); + if (end > 2) + text = text.substring(1, end); + } + + LogHelper.test("鏍规嵁绮樿创鏉挎帹鑽�:"+text); + + if (text.length() > 80) { + out.print(JsonUtil.loadFalseResult("鍊艰繃闀�")); + return; + } + + SearchFilter sf = new SearchFilter(); + sf.setKey(text); + JSONObject root = new JSONObject(); + + TaoBaoSearchResult result = TaoBaoUtil.search(sf); + if (result != null && result.getTaoBaoGoodsBriefs() != null && result.getTaoBaoGoodsBriefs().size() > 0) + for (TaoBaoGoodsBrief goods : result.getTaoBaoGoodsBriefs()) { + // 鏄睘浜庢窐瀹濊仈鐩熷晢鍝� + if (goods.getTitle().equalsIgnoreCase(text)) { + root.put("type", 2); + JSONObject data = new JSONObject(); + data.put("title", goods.getTitle()); + root.put("data", data); + out.print(JsonUtil.loadTrueResult(root)); + return; + } + } + + // 鏌ヨ澶ф窐瀹㈡爣棰� + List<DaTaoKeDetail> list = daTaoKeGoodsDetailService.listByDtitle(text); + if (list != null && list.size() > 0) { + root.put("type", 2); + JSONObject data = new JSONObject(); + data.put("title", list.get(0).getdTitle()); + root.put("data", data); + out.print(JsonUtil.loadTrueResult(root)); + return; + } + + out.print(JsonUtil.loadFalseResult("鏆備笉鏀寔璇ョ被鍨嬶紒")); + return; + } + + text = matcher.group(); + if (text.contains("ju.taobao.com") || text.contains(".juhuasuan.com")) {// 鑱氬垝绠� + int index = text.indexOf("item_id"); + if (index < 0) { + out.println(JsonUtil.loadFalseResult("鏆傛湭鎵惧埌璇ュ晢鍝侊紝璇风◢鍚庡啀璇曪紒")); + return; + } + text = text.substring(index); + int last = text.indexOf("&"); + String id = ""; + if (last > 0) + id = text.substring(text.indexOf("=") + 1, text.indexOf("&")); + else { + id = text.substring(text.indexOf("=" + 1)); + } + tb = TaoBaoUtil.isAlimama(id); + if (tb == null) { + tb = TaoBaoUtil.parsePhoneTmAndTb(id); + } + } else if (text.contains("http://zmnxbc.com")) { // 鎵嬫満绔ぉ鐚獳PP鍒嗕韩 + tb = TaoBaoUtil.parsePhoneShareUrlByTM(text); + } else if (text.contains("h5.m.taobao") || text.contains("detail.m.tmall") || text.contains("item.taobao") + || text.contains("detail.tmall")) { // 鎵嬫満椤甸潰鍜岀數鑴戦〉闈� + Map<String, String> map = Utils.parseURL(text); + String id = ""; + id = map.get("id").replace("}", ""); + tb = TaoBaoUtil.isAlimama(id); + if (tb == null) { + tb = TaoBaoUtil.parsePhoneTmAndTb(id); + } + } else { + tb = TaoBaoUtil.parsePhoneShareUrlByTB(text); + } + + if (tb != null) { + JSONObject data = new JSONObject(); + JSONObject taoBaoGoodsJSON = new JSONObject(); + taoBaoGoodsJSON.put("title", tb.getTitle()); + taoBaoGoodsJSON.put("zkPrice", tb.getZkPrice()); + taoBaoGoodsJSON.put("auctionId", tb.getAuctionId()); + taoBaoGoodsJSON.put("url", "http://item.taobao.com/item.htm?id=" + tb.getAuctionId()); + data.put("taoBaoGoodsBrief", taoBaoGoodsJSON); + if (!StringUtil.isNullOrEmpty(tb.getPictUrl())) { + if (tb.getImgList() == null) + tb.setImgList(new ArrayList<>()); + tb.getImgList().add(0, TbImgUtil.getTBSize220Img(tb.getPictUrl())); + } + data.put("tbImgs", tb.getImgList()); + JSONObject root = new JSONObject(); + root.put("type", 1); + root.put("data", data); + + out.print(JsonUtil.loadTrueResult(root)); + } + + + out.println(JsonUtil.loadFalseResult("鏆傛湭鎵惧埌璇ュ晢鍝侊紝璇风◢鍚庡啀璇曪紒")); + return; + } + } -- Gitblit v1.8.0