fanli/src/main/java/com/yeshi/fanli/controller/client/v2/RecommendControllerV2.java
@@ -12,6 +12,7 @@ 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 com.google.gson.Gson; @@ -44,6 +45,7 @@ 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.service.inter.taobao.dataoke.DaTaoKeGoodsService; import com.yeshi.fanli.tag.PageEntity; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.RedisManager; @@ -59,6 +61,7 @@ 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.search.SearchKeyTOPVO; import com.yeshi.fanli.vo.search.SearchKeyVO; import com.yeshi.fanli.vo.tlj.ReduceHongBao; @@ -119,6 +122,9 @@ @Resource private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service; @Resource private DaTaoKeGoodsService daTaoKeGoodsService; /** * 新版推荐专题管理(1.5.3) @@ -166,8 +172,10 @@ root.put("spikeGoods", getSpikeGoodsContent(acceptData)); if (VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion())) root.put("scoreExchange", getScoreExchangeInfo(acceptData)); root.put("searchDiscovery", getSearchDiscoveryInfo(acceptData)); if (VersionUtil.greaterThan_2_0_0(acceptData.getPlatform(), acceptData.getVersion())) root.put("searchDiscovery", getSearchDiscoveryInfo(acceptData)); out.print(JsonUtil.loadTrueResult(root)); } catch (Exception e) { out.print(JsonUtil.loadFalseResult(1, "获取数据失败")); @@ -351,7 +359,7 @@ */ private JSONObject getSearchDiscoveryInfo(AcceptData acceptData) { JSONArray array = new JSONArray(); String keys = configService.get("search_discovery_keys"); String keys = configService.getSearchDiscoveryKeys(); if (!StringUtil.isNullOrEmpty(keys)) { JSONArray arrayKeys = JSONArray.fromObject(keys); for (int i = 0; i < arrayKeys.size(); i++) { @@ -645,4 +653,61 @@ out.print(JsonUtil.loadTrueResult(data)); } /** * 搜索发现列表 * @param acceptData * @param uid * @param page * @param out */ @RequestMapping(value = "getSearchDiscoveryTop", method = RequestMethod.POST) public void getSearchDiscoveryTop(AcceptData acceptData, Long uid, Integer page, PrintWriter out) { int count = 0; List<SearchKeyTOPVO> list = new ArrayList<SearchKeyTOPVO>(); String keys = configService.getSearchDiscoveryKeys(); if (!StringUtil.isNullOrEmpty(keys)) { JSONArray arrayKeys = JSONArray.fromObject(keys); if (arrayKeys != null && arrayKeys.size() > 0) { count = arrayKeys.size(); BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(); BigDecimal shareRate = hongBaoManageService.getShareRate(); int j = 1; for (int i = (page-1) * 3; i < arrayKeys.size(); i++) { if (j > 3) break; String words = arrayKeys.get(i).toString(); List<GoodsDetailVO> listGoods = new ArrayList<GoodsDetailVO>(); List<DaTaoKeDetailV2> listTaoKe = daTaoKeGoodsService.getSearchDiscoveryGoods(words); if (listTaoKe != null && listTaoKe.size() > 0) { for (DaTaoKeDetailV2 daTaoKeDetailV2: listTaoKe) { listGoods.add(GoodsDetailVOFactory.convertTaoBao(TaoBaoUtil.convert(daTaoKeDetailV2), null, fanLiRate, shareRate)); if (listGoods.size() >= 3) break; } } SearchKeyTOPVO keyTOPVO = new SearchKeyTOPVO(); keyTOPVO.setName(words); keyTOPVO.setListGoods(listGoods); list.add(keyTOPVO); j++; } } } GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation(); Gson gson = gsonBuilder.create(); JSONObject data = new JSONObject(); data.put("count", count); data.put("list", gson.toJson(list)); out.print(JsonUtil.loadTrueResult(data)); } } fanli/src/main/java/com/yeshi/fanli/service/impl/config/ConfigServiceImpl.java
@@ -7,6 +7,7 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.yeshi.utils.entity.ProxyIP; @@ -19,6 +20,7 @@ import com.yeshi.fanli.service.inter.config.ConfigService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.dataoke.DaTaoKeApiUtil; import net.sf.json.JSONArray; @@ -192,4 +194,48 @@ } } @Cacheable(value = "config", key = "'getSearchDiscoveryKeys'") @Override public String getSearchDiscoveryKeys() { List<Config> list = configMapper.listByKey("search_discovery_keys"); if (list == null || list.size() == 0) return null; Config config = list.get(0); if (config == null) return null; // 更新 updateSearchDiscoveryKeys(config); String value = config.getValue(); return value; } /** * 更新搜索发现词 * @param config */ @Async private void updateSearchDiscoveryKeys(Config config) { long currentTime = java.lang.System.currentTimeMillis(); String createtime = config.getCreatetime(); if (!StringUtil.isNullOrEmpty(createtime)) { long diff = currentTime - Long.parseLong(createtime); if (diff < 1000 * 60 * 60) return; // 超过一个小时更新 } String hotWords = DaTaoKeApiUtil.getHotWords(); if (StringUtil.isNullOrEmpty(hotWords)) return ; config.setValue(hotWords); config.setCreatetime(currentTime + ""); configMapper.updateByPrimaryKeySelective(config); } } fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/DynamicInfoServiceImpl.java
@@ -272,6 +272,9 @@ if (StringUtil.isNullOrEmpty(shopLink)) { taoBaoShop.setShopLink(TaoBaoUtil.getShopLink(taoBaoShop.getId())); } if(StringUtil.isNullOrEmpty(taoBaoShop.getShopIcon())) taoBaoShop.setShopIcon(dynamicShopInfo.getShopIcon()); DynamicInfo dynamicVO = new DynamicInfo(); dynamicVO.setId(brandId); fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsServiceImpl.java
@@ -1,6 +1,8 @@ package com.yeshi.fanli.service.impl.taobao.dataoke; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -11,11 +13,14 @@ import org.springframework.stereotype.Service; import com.yeshi.fanli.dao.mybatis.taobao.dataoke.DaTaoKeDetailMapper; import com.yeshi.fanli.dto.dataoke.DaTaoKeGoodsResult; 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.taobao.dataoke.DaTaoKeGoodsDetailService; import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsService; import com.yeshi.fanli.util.RedisManager; import com.yeshi.fanli.util.dataoke.DaTaoKeApiUtil; import com.yeshi.fanli.util.taobao.DaTaoKeUtil; @Service @@ -117,4 +122,40 @@ return daTaoKeDetailMapper.listBySellerId(start, count, sellerId); } @Override public List<DaTaoKeDetailV2> getSearchDiscoveryGoods(String keyWords){ String key = "dataoke-goods-searchdiscovery-"+ keyWords; List<DaTaoKeDetailV2> list = redisManager.getObjList(DaTaoKeDetailV2.class, key); if ( list == null || list.size() == 0) { DaTaoKeGoodsResult search = DaTaoKeApiUtil.search(keyWords, null, null, null, 1, 10, 0); if (search != null) { list = search.getGoodsList(); if (list != null && list.size() > 0) { Comparator<DaTaoKeDetailV2> cm = new Comparator<DaTaoKeDetailV2>() { @Override public int compare(DaTaoKeDetailV2 o1, DaTaoKeDetailV2 o2) { int diff = o1.getHotPush() - o2.getHotPush(); if (diff > 0) { return -1; } else if (diff < 0) { return 1; } return 0; } }; Collections.sort(list, cm); if (list.size() > 3) list = list.subList(0, 3); // 缓存 20分钟 redisManager.saveObjList(list, key, 1000 * 60 * 20); } return list; } } return list; } } fanli/src/main/java/com/yeshi/fanli/service/inter/config/ConfigService.java
@@ -104,4 +104,10 @@ * @return */ public ProxyIP getTaoBaoProxyIP(); /** * 搜索发现词 * @return */ public String getSearchDiscoveryKeys(); } fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/dataoke/DaTaoKeGoodsService.java
@@ -3,6 +3,7 @@ import java.util.List; import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail; import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2; /** * 大淘客商品服务 @@ -44,4 +45,13 @@ */ public List<DaTaoKeDetail> listBySellerId(long start, int count, Long sellerId); /** * 搜索发现商品 * @param page * @param count * @param keyWords * @return */ public List<DaTaoKeDetailV2> getSearchDiscoveryGoods(String keyWords); } fanli/src/main/java/com/yeshi/fanli/util/VersionUtil.java
@@ -50,6 +50,14 @@ else return false; } public static boolean greaterThan_2_0_0(String platform, String versionCode) { if ((("android".equalsIgnoreCase(platform) && Integer.parseInt(versionCode) >= 48)) || (("ios".equalsIgnoreCase(platform) && Integer.parseInt(versionCode) >= 66))) return true; else return false; } public static boolean greaterThan_2_0(String platform, String versionCode) { fanli/src/main/java/com/yeshi/fanli/util/dataoke/DaTaoKeApiUtil.java
@@ -189,6 +189,7 @@ taoBaoShopDTO.setSellerId(item.optLong("seller_id")); taoBaoShopDTO.setBrandId(item.optString("brand_id")); taoBaoShopDTO.setBrandDes(item.optString("brand_des")); taoBaoShopDTO.setShopIcon(item.optString("brand_logo")); taoBaoShopDTO.setUserType(0); // 商品信息 @@ -542,6 +543,39 @@ return detail; } /** * 各大榜单 * * @param type * @return */ public static String getHotWords() { TaoKeAppInfo app = getRandomApp(); Map<String, String> params = new TreeMap<>(); params.put("version", "v1.0.1"); params.put("appKey", app.getAppKey()); params.put("sign", getSign(params, app.getAppSecret())); String result = null; try { result = HttpUtil.get("https://openapi.dataoke.com/api/category/get-top100", params, new HashMap<>()); } catch (Exception e) { result = HttpUtil.get("https://openapi.dataoke.com/api/category/get-top100", params, new HashMap<>()); } String hotWords = null; JSONObject json = JSONObject.fromObject(result); if (json != null) { json = json.getJSONObject("data"); if (json != null) { hotWords = json.optString("hotWords"); } } return hotWords; } class DaTaoKeResult { Date updateTime; List<DaTaoKeDetail> dataList; @@ -555,5 +589,4 @@ } } } fanli/src/main/java/com/yeshi/fanli/vo/search/SearchKeyTOPVO.java
New file @@ -0,0 +1,35 @@ package com.yeshi.fanli.vo.search; import java.io.Serializable; import java.util.List; import com.google.gson.annotations.Expose; import com.yeshi.fanli.vo.goods.GoodsDetailVO; public class SearchKeyTOPVO implements Serializable { private static final long serialVersionUID = 1L; // 搜索词 @Expose private String name; // 跳转参数 @Expose private List<GoodsDetailVO> listGoods; public String getName() { return name; } public void setName(String name) { this.name = name; } public List<GoodsDetailVO> getListGoods() { return listGoods; } public void setListGoods(List<GoodsDetailVO> listGoods) { this.listGoods = listGoods; } }