From d1dccd08a249b830a95eeeb04af25f87d5c056be Mon Sep 17 00:00:00 2001 From: yujian <yujian@123.com> Date: 星期二, 03 九月 2019 11:13:04 +0800 Subject: [PATCH] 金币明细bug --- fanli/src/main/java/com/yeshi/fanli/controller/client/v2/RecommendControllerV2.java | 382 +++++++++++++++++++++++++++++++++++------------------ 1 files changed, 251 insertions(+), 131 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 65a9148..8424964 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,30 +6,27 @@ 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; +import com.yeshi.fanli.dto.jd.JDSearchResult; +import com.yeshi.fanli.dto.pdd.PDDGoodsDetail; +import com.yeshi.fanli.dto.pdd.PDDGoodsResult; import com.yeshi.fanli.entity.accept.AcceptData; 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.jd.JDGoods; import com.yeshi.fanli.entity.taobao.TLJBuyGoods; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult; -import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail; +import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.common.JumpDetailV2Service; import com.yeshi.fanli.service.inter.config.ConfigService; @@ -39,18 +36,24 @@ import com.yeshi.fanli.service.inter.homemodule.SpecialService; import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService; import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService; +import com.yeshi.fanli.service.inter.jd.JDGoodsService; import com.yeshi.fanli.service.inter.lable.QualityFlashSaleService; import com.yeshi.fanli.service.inter.lable.QualityGoodsService; import com.yeshi.fanli.service.inter.monitor.MonitorService; +import com.yeshi.fanli.service.inter.pdd.PDDGoodsService; +import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService; import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailService; +import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailV2Service; +import com.yeshi.fanli.tag.PageEntity; 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.TimeUtil; 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.DaTaoKeUtil; import com.yeshi.fanli.util.taobao.TaoBaoUtil; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; import com.yeshi.fanli.vo.goods.GoodsDetailVO; @@ -73,13 +76,13 @@ @Resource private RedisManager redisManager; - + @Resource private HomeRecommendGoodsService homeRecommendGoodsService; - + @Resource private ConfigService configService; - + @Resource private MonitorService monitorService; @@ -91,20 +94,31 @@ @Resource private RecommendGoodsDeleteHistoryService recommendGoodsDeleteHistoryService; - + @Resource private JumpDetailV2Service jumpDetailV2Service; - + @Resource private DeviceSexService deviceSexService; - + @Resource private SpecialService specialService; @Resource private SwiperPictureService swiperPictureService; - - + + @Resource + private JDGoodsService jdGoodsService; + + @Resource + private PDDGoodsService pddGoodsService; + + @Resource + private TaoBaoGoodsUpdateService taoBaoGoodsUpdateService; + + @Resource + private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service; + /** * 鏂扮増鎺ㄨ崘涓撻绠$悊(1.5.3) * @@ -121,10 +135,16 @@ JSONObject root = specialService.listCacheSpecialToIndex(acceptData, deviceSex); // 2銆侀《閮ㄨ疆鎾浘 - List<SwiperPicture> topPicList = swiperPictureService.getByBannerCard("index_top"); - if (topPicList == null) { - topPicList = new ArrayList<SwiperPicture>(); + List<SwiperPicture> oldtopPicList = swiperPictureService.getByBannerCard("index_top"); + List<SwiperPicture> topPicList = new ArrayList<>(); + if (oldtopPicList != null && oldtopPicList.size() > 0) + topPicList.addAll(oldtopPicList); + if ("ios".equalsIgnoreCase(acceptData.getPlatform())) { + SwiperPicture notifyReName = swiperPictureService.selectByPrimaryKey(162L); + if (notifyReName != null) + topPicList.add(0, notifyReName); } + root.put("topPicList", JsonUtil.getApiCommonGson().toJson(topPicList)); // 3銆侀個璇锋湁濂� @@ -148,6 +168,8 @@ } root.put("spikeGoods", getSpikeGoodsContent(acceptData)); + if (VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion())) + root.put("scoreExchange", getScoreExchangeInfo(acceptData)); out.print(JsonUtil.loadTrueResult(root)); } catch (Exception e) { @@ -159,9 +181,7 @@ } } } - - /** * 闄愭椂绉掓潃 1.5.3 * @@ -173,48 +193,35 @@ JSONObject root = getSpikeGoodsContent(acceptData); out.print(JsonUtil.loadTrueResult(root)); } - - private JSONObject getSpikeGoodsContent(AcceptData acceptData) { - // 涓嬩竴娆″�掕鏃剁殑鏃堕棿 - int type = qualityFlashSaleService.getNowType() + 1; - int hour = 0; - switch (type) { - case 1: - hour = 0; - break; - case 2: - hour = 9; - break; - case 3: - hour = 12; - break; - case 4: - hour = 14; - break; - case 5: - hour = 16; - break; - case 6: - hour = 20; - break; - case 7: - hour = 22; - break; - default: - break; + List<String> dtoList = DaTaoKeUtil.getDingDongQiangTime(); + long nowTime = System.currentTimeMillis(); + int dateNum = Integer.parseInt(TimeUtil.getGernalTime(nowTime, "ddHH")); + String timeStr = null; + int nextPos = 0; + for (int i = 0; i < dtoList.size() - 1; i++) { + if (dateNum >= Integer.parseInt(dtoList.get(i)) && dateNum < Integer.parseInt(dtoList.get(i + 1))) { + timeStr = dtoList.get(i); + nextPos = i + 1; + break; + } } + if (timeStr == null) + timeStr = dtoList.get(dtoList.size() - 1); - Calendar nextTime = Calendar.getInstance(); - nextTime.set(Calendar.HOUR_OF_DAY, hour); - nextTime.set(Calendar.MINUTE, 0); - nextTime.set(Calendar.SECOND, 0); - nextTime.set(Calendar.MILLISECOND, 0); + long nextTime = nowTime + 1000 * 60 * 60L;// 榛樿涓�1灏忔椂 + if (nextPos < dtoList.size()) { + nextTime = TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(nowTime, "yyyyMM") + dtoList.get(nextPos), + "yyyyMMddHH"); + } JSONArray array = null; 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()); + Calendar nowCalendar = Calendar.getInstance(); + nowCalendar.setTimeInMillis(nowTime); + int hour = nowCalendar.get(Calendar.HOUR_OF_DAY); String timeValue = redisManager.getCommonString(timekey); if (timeValue == null || !timeValue.equals(hour + "")) { @@ -225,34 +232,39 @@ array = JSONArray.fromObject(cacheValue); } } + JumpDetailV2 jumpDetail = jumpDetailV2Service.getByTypeCache("web"); if (array == null) { array = new JSONArray(); BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(); BigDecimal shareRate = hongBaoManageService.getShareRate(); - + Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create(); // 缂撳瓨涓笉瀛樺湪 - List<QualityFactory> listGoods = qualityGoodsService.listFlashSaleRandGoods(); + List<DaTaoKeDetailV2> listGoods = daTaoKeGoodsDetailV2Service.getDingDongQiangData(timeStr); if (listGoods == null) { - listGoods = new ArrayList<QualityFactory>(); + listGoods = new ArrayList<>(); } + + if (listGoods != null && listGoods.size() > 3) + listGoods = listGoods.subList(0, 3); /* 閬嶅巻鍒楄〃鏁版嵁 */ - for (QualityFactory qualityFactory : listGoods) { - TaoBaoGoodsBrief taoBaoGoodsBrief = qualityFactory.getTaoBaoGoodsBrief(); + for (DaTaoKeDetailV2 detail : listGoods) { + TaoBaoGoodsBrief taoBaoGoodsBrief = TaoBaoUtil.convert(detail); if (taoBaoGoodsBrief == null) { continue; } - GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(taoBaoGoodsBrief, null, fanLiRate, shareRate); - + GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(taoBaoGoodsBrief, null, fanLiRate, + shareRate); + JSONObject params = new JSONObject(); params.put("url", configService.get("spike_goods_link") + "?id=" + taoBaoGoodsBrief.getAuctionId()); - + JSONObject goods = new JSONObject(); goods.put("goods", gson.toJson(detailVO)); goods.put("params", params); @@ -269,81 +281,110 @@ // 缂撳瓨鍗婁釜灏忔椂 redisManager.cacheCommonString(cachekey, array.toString(), 60 * 30); } - Long endTime = nextTime.getTimeInMillis() - java.lang.System.currentTimeMillis(); + + // 鑾峰彇浠婂ぉ鐨勬暟鎹� + + Long endTime = nextTime - nowTime; JSONObject root = new JSONObject(); - root.put("time", nextTime.getTimeInMillis()); + + if (VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion())) { + root.put("time", nextTime); + root.put("endTime", endTime > 0 ? endTime : 0); + JSONArray imgArray = new JSONArray(); + if (array != null) + for (int i = 0; i < array.size(); i++) { + imgArray.add(array.optJSONObject(i).optJSONObject("goods").optString("picUrl")); + } + root.put("imgList", imgArray); + JSONObject params = new JSONObject(); + params.put("url", configService.get("spike_goods_link")); + root.put("params", params); + root.put("jumpDetail", jumpDetail); + root.put("name", "闄愭椂绉掓潃"); + root.put("desc", "鏁寸偣鏇存柊锛屽ソ鐗╂姠璐�"); + } else { + root.put("time", nextTime); + root.put("endTime", endTime > 0 ? endTime : 0); + root.put("listgoods", array); + JSONObject params = new JSONObject(); + params.put("url", configService.get("spike_goods_link")); + root.put("params", params); + root.put("jumpDetail", jumpDetail); + } + + root.put("time", nextTime); root.put("endTime", endTime > 0 ? endTime : 0); root.put("listgoods", array); - JSONObject params = new JSONObject(); - params.put("url", configService.get("spike_goods_link")); - - root.put("params", params); - root.put("jumpDetail", jumpDetail); - return root; } - - - + + /** + * 閲戝竵鍏戞崲淇℃伅 + * + * @param acceptData + * @return + */ + private JSONObject getScoreExchangeInfo(AcceptData acceptData) { + + JSONObject root = new JSONObject(); + JSONArray array = new JSONArray(); + array.add("http://img.flqapp.com/resource/integral/integral_home_icon_2.png"); + array.add("http://img.flqapp.com/resource/integral/integral_home_icon_1.png"); + root.put("imgList", array); + JSONObject params = new JSONObject(); + params.put("balanceMore", true); + root.put("params", params); + root.put("jumpDetail", jumpDetailV2Service.getByTypeCache("integralExchange", + Constant.getPlatformCode(acceptData.getPlatform()), Integer.parseInt(acceptData.getVersion()))); + + root.put("name", "閲戝竵鍏戞崲"); + root.put("desc", "姣忔棩绛惧埌锛屾儕鍠滀笉鍋�"); + root.put("tagImg", "http://img.flqapp.com/resource/score_exchange_tag.png"); + return root; + } + /** * 棣栭〉搴曢儴鍟嗗搧鎺ㄨ崘 + * * @param acceptData * @param out */ @RequestMapping(value = "getGoodList") - public void getGoodList(AcceptData acceptData, Integer goodsType, Integer page, - HttpServletRequest request, PrintWriter out) { - + 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))); + try { + if (goodsType == Constant.SOURCE_TYPE_TAOBAO) { + taoBaoGuessUserLikeByDevice(acceptData, page, request, out); + return; } + + if (goodsType == Constant.SOURCE_TYPE_JD) { + getIndexJDGoods(acceptData, page, out); + return; + } + + if (goodsType == Constant.SOURCE_TYPE_PDD) { + getIndexPDDGoods(acceptData, page, out); + return; + } + out.print(JsonUtil.loadFalseResult("鍟嗗搧绫诲瀷閿欒")); + } catch (Exception e) { + LogHelper.errorDetailInfo(e); + JSONObject data = new JSONObject(); + data.put("list", new JSONArray()); + data.put("count", 0); + out.print(JsonUtil.loadTrueResult(data)); } - long count = qualityGoodsService.countFreeGoods(); - - JSONObject root = new JSONObject(); - root.put("count", count); - root.put("list", array); - out.print(JsonUtil.loadTrueResult(root)); } - - - + /** * 鏍规嵁璁惧淇℃伅鑾峰彇鐚滀綘鍠滄鐨勫唴瀹� * @@ -353,16 +394,24 @@ * @param idfa * -IOS鐨刬dfa骞垮憡鏍囪瘑淇℃伅 */ - public void taoBaoGuessUserLikeByDevice(AcceptData acceptData, int page, HttpServletRequest request, PrintWriter out) { + 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); + + if (page < 4) {// 鍓嶄笁椤靛姞鍏ユ洿鏂� + try { + taoBaoGoodsUpdateService.addUpdateQueueAsync(goodsList); + } catch (Exception e) { + } + } BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(); BigDecimal shareRate = hongBaoManageService.getShareRate(); @@ -384,20 +433,22 @@ 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); - + 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("浠樻绔嬪噺 "); 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); @@ -437,20 +488,21 @@ 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); + + 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())); @@ -487,5 +539,73 @@ data.put("count", 1000); out.print(JsonUtil.loadTrueResult(data)); } - + + /** + * 浜笢棣栭〉鍟嗗搧 + * + * @param acceptData + * @param page + * @param out + */ + private void getIndexJDGoods(AcceptData acceptData, int page, PrintWriter out) { + JDSearchResult result = jdGoodsService.getIndexJDGoods(page); + long count = 0; + JSONObject data = new JSONObject(); + JSONArray array = new JSONArray(); + if (result != null) { + PageEntity pageEntity = result.getPageEntity(); + if (pageEntity != null) { + count = pageEntity.getTotalCount(); + } + + List<JDGoods> goodsList = result.getGoodsList(); + if (goodsList != null && goodsList.size() > 0) { + BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(); + BigDecimal shareRate = hongBaoManageService.getShareRate(); + Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) + .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create(); + for (JDGoods goods : goodsList) { + GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertJDGoods(goods, fanLiRate, shareRate); + array.add(gson.toJson(goodsDetailVO)); + } + } + } + + data.put("list", array); + data.put("count", count); + out.print(JsonUtil.loadTrueResult(data)); + } + + /** + * 鐖嗘鎺掕鍟嗗搧-瀹炴椂鐑攢姒� + * + * @param acceptData + * @param page + * @param out + */ + private void getIndexPDDGoods(AcceptData acceptData, int page, PrintWriter out) { + PDDGoodsResult result = pddGoodsService.getTopGoodsList(page, 1); + int count = 0; + JSONArray array = new JSONArray(); + if (result != null) { + count = result.getTotalCount(); + Gson gson = JsonUtil.getApiCommonGson(); + List<PDDGoodsDetail> goodsList = result.getGoodsList(); + if (goodsList != null && goodsList.size() > 0) { + BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(); + BigDecimal shareRate = hongBaoManageService.getShareRate(); + + for (PDDGoodsDetail goods : goodsList) { + GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertPDDGoods(goods, fanLiRate, shareRate); + array.add(gson.toJson(goodsDetailVO)); + } + } + } + + JSONObject data = new JSONObject(); + data.put("list", array); + data.put("count", count); + out.print(JsonUtil.loadTrueResult(data)); + } + } -- Gitblit v1.8.0