admin
2019-09-09 61c21f17b1ad94e4b0018c7e385195bab21b0b5c
Merge remote-tracking branch 'origin/div' into div
8个文件已修改
1个文件已添加
255 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/RecommendControllerV2.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/config/ConfigServiceImpl.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/DynamicInfoServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsServiceImpl.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/config/ConfigService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/dataoke/DaTaoKeGoodsService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/VersionUtil.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/dataoke/DaTaoKeApiUtil.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/vo/search/SearchKeyTOPVO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
    }
}