admin
2019-05-08 d36d1adfd749fed26923f7e3664a36d405b0acfe
大淘客数据修改,热销推广商品接口修改
6个文件已修改
306 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/HotSellController.java 119 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsServiceImpl.java 69 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/dataoke/DaTaoKeGoodsService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/RedisManager.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/DaTaoKeUtil.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/src/main/java/org/yeshi/utils/JsonUtil.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/HotSellController.java
@@ -13,19 +13,21 @@
import org.yeshi.utils.JsonUtil;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.bus.clazz.GoodsClass;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBriefExtra;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail;
import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
import com.yeshi.fanli.service.inter.goods.TaoBaoGoodsBriefService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsService;
import com.yeshi.fanli.util.taobao.DaTaoKeUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.vo.dynamic.DynamicClassVO;
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
import net.sf.json.JSONObject;
/**
 * 热销榜
 *
 * @author Administrator
 *
 */
@@ -35,55 +37,35 @@
    @Resource
    private HongBaoManageService hongBaoManageService;
    @Resource
    private TaoBaoGoodsBriefService taoBaoGoodsBriefService;
    @Resource
    private JumpDetailV2Service jumpDetailV2Service;
    @Resource
    private DaTaoKeGoodsService daTaoKeGoodsService;
    /**
     * 查询分类
     *
     * @param acceptData
     * @param cid  2实时 3今日 1热销
     * @param cid
     *            2实时 3今日 1热销
     * @param out
     */
    @RequestMapping(value = "getClass", method = RequestMethod.POST)
    public void getClass(AcceptData acceptData, Integer cid, PrintWriter out) {
        try {
            List<DynamicClassVO> list = new ArrayList<DynamicClassVO>();
            DynamicClassVO c0 = new DynamicClassVO();
            c0.setId(0L);
            c0.setName("全部");
            DynamicClassVO c1 = new DynamicClassVO();
            c1.setId(1L);
            c1.setName("男装");
            DynamicClassVO c2 = new DynamicClassVO();
            c2.setId(2L);
            c2.setName("居家日用");
            DynamicClassVO c3 = new DynamicClassVO();
            c3.setId(3L);
            c3.setName("美食");
            DynamicClassVO c4 = new DynamicClassVO();
            c4.setId(4L);
            c4.setName("母婴");
            DynamicClassVO c5= new DynamicClassVO();
            c5.setId(5L);
            c5.setName("数码");
            list.add(c0);
            list.add(c1);
            list.add(c2);
            list.add(c3);
            list.add(c4);
            list.add(c5);
            List<GoodsClass> list = new ArrayList<GoodsClass>();
            if (cid == 2 || cid == 3) {
                GoodsClass c0 = new GoodsClass();
                c0.setId(0L);
                c0.setName("全部");
                list.addAll(DaTaoKeUtil.goodsClasses);
                list.add(0, c0);
            }
            JSONObject data = new JSONObject();
            data.put("count", 1);
            data.put("list", JsonUtil.getApiCommonGson().toJson(list));
@@ -94,44 +76,53 @@
        }
    }
    /**
     * 获取动态列表
     *
     * @param acceptData
     * @param page
     * @param cid 主分类
     * @param subId 子分类id
     * @param cid
     *            主分类(实时-2 今日-3 热销-1)
     * @param subId
     *            子分类id
     * @param out
     */
    @RequestMapping(value = "getList", method = RequestMethod.POST)
    public void getList(AcceptData acceptData, Integer page, Integer cid,  Integer subId, PrintWriter out) {
    public void getList(AcceptData acceptData, Integer page, Integer cid, Integer subId, PrintWriter out) {
        try {
            // 全部
            if (subId != null && subId == 0)
                subId = null;
            TaoBaoGoodsBriefExtra goods = null;
            List<TaoBaoGoodsBrief> listgoods = taoBaoGoodsBriefService.queryByAuctionId(584995369742L);
            if (listgoods != null && listgoods.size() > 0) {
                BigDecimal proportion = hongBaoManageService.getFanLiRate();
                goods = TaoBaoUtil.getTaoBaoGoodsBriefExtra( listgoods.get(0), proportion.toString(), null);
            List<DaTaoKeDetail> detailList = null;
            if (cid == 1) {
                detailList = daTaoKeGoodsService.getCurrentHotSalesRankGoodsList();
            } else if (cid == 2) {
                detailList = daTaoKeGoodsService.getCurrentSalesRankGoodsList(subId);
            } else {
                detailList = daTaoKeGoodsService.getCurrentDaySalesRankGoodsList(subId);
            }
            goods.setSalesType(cid);
            // 标签
            List<ClientTextStyleVO> labels = new ArrayList<ClientTextStyleVO>();
            ClientTextStyleVO textVO1 = new  ClientTextStyleVO();
            textVO1.setColor("#FE0014");
            textVO1.setContent("公益宝贝");
            ClientTextStyleVO textVO2 = new  ClientTextStyleVO();
            textVO2.setColor("#FF9600");
            textVO2.setContent("夏季爆款");
            labels.add(textVO1);
            labels.add(textVO2);
            goods.setLabels(labels);
            List<TaoBaoGoodsBriefExtra> list = new ArrayList<TaoBaoGoodsBriefExtra>();
            list.add(goods);
            if (detailList == null)
                detailList = new ArrayList<>();
            List<TaoBaoGoodsBriefExtra> list = new ArrayList<TaoBaoGoodsBriefExtra>();
            BigDecimal proportion = hongBaoManageService.getFanLiRate();
            if (detailList != null)
                for (DaTaoKeDetail detail : detailList) {
                    goods = TaoBaoUtil.getTaoBaoGoodsBriefExtra(TaoBaoUtil.convert(detail), proportion.toString(),
                            null);
                    if (cid == 2)
                        goods.setSalesType(2);
                    else if (cid == 3)
                        goods.setSalesType(3);
                    else
                        goods.setSalesType(1);
                    list.add(goods);
                }
            JSONObject data = new JSONObject();
            data.put("count", 1);
            data.put("count", detailList.size());
            data.put("list", JsonUtil.getApiCommonGson().toJson(list));
            out.print(JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
@@ -139,5 +130,5 @@
            e.printStackTrace();
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsServiceImpl.java
@@ -1,7 +1,10 @@
package com.yeshi.fanli.service.impl.taobao.dataoke;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
@@ -10,6 +13,7 @@
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail;
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.taobao.DaTaoKeUtil;
@Service
@@ -18,34 +22,83 @@
    @Resource
    private DaTaoKeGoodsDetailService daTaoKeGoodsDetailService;
    @Resource
    private RedisManager redisManager;
    private List<DaTaoKeDetail> reSearchDetails(List<DaTaoKeDetail> list) {
        Map<Long, DaTaoKeDetail> map = new HashMap<>();
        List<Long> idList = new ArrayList<>();
        if (list != null) {
            for (DaTaoKeDetail detail : list) {
                idList.add(detail.getId());
                map.put(detail.getId(), detail);
            }
            List<DaTaoKeDetail> detailList = daTaoKeGoodsDetailService.listByIds(idList);
            if (detailList != null)
                for (DaTaoKeDetail dk : detailList) {
                    dk.setUpdateTime(new Date());// 增加更新时间
                    dk.setSalesNum(map.get(dk.getId()).getSalesNum());// 更改销量);
                }
            return detailList;
        } else
            return null;
    }
    @Override
    public List<DaTaoKeDetail> getCurrentSalesRankGoodsList(Long cid) {
        List<DaTaoKeDetail> list = DaTaoKeUtil.getCurrentSalesRank(cid);
        return reSearchDetails(list);
    public List<DaTaoKeDetail> getCurrentSalesRankGoodsList(Integer cid) {
        // 缓存
        String key = "dataoke-goods-shishirexiao-" + cid;
        List<DaTaoKeDetail> list = redisManager.getObjList(DaTaoKeDetail.class, key);
        if ((list != null && list.size() > 0
                && System.currentTimeMillis() - list.get(0).getUpdateTime().getTime() > 1000 * 60 * 20) || list == null
                || list.size() == 0)// 超过20分钟未更新
        {
            list = DaTaoKeUtil.getCurrentSalesRank(cid);
            list = reSearchDetails(list);
            if (list != null && list.size() > 0)
                redisManager.saveObjList(list, key, null);// 长期缓存
            return list;
        } else
            return list;
    }
    @Override
    public List<DaTaoKeDetail> getCurrentDaySalesRankGoodsList(Long cid) {
        List<DaTaoKeDetail> list = DaTaoKeUtil.getCurrentDaySalesRank(cid);
        return reSearchDetails(list);
    public List<DaTaoKeDetail> getCurrentDaySalesRankGoodsList(Integer cid) {
        // 缓存
        String key = "dataoke-goods-jinrirexiao-" + cid;
        List<DaTaoKeDetail> list = redisManager.getObjList(DaTaoKeDetail.class, key);
        if ((list != null && list.size() > 0
                && System.currentTimeMillis() - list.get(0).getUpdateTime().getTime() > 1000 * 60 * 20) || list == null
                || list.size() == 0)// 超过20分钟未更新
        {
            list = DaTaoKeUtil.getCurrentDaySalesRank(cid);
            list = reSearchDetails(list);
            if (list != null && list.size() > 0)
                redisManager.saveObjList(list, key, null);// 长期缓存
            return list;
        } else
            return list;
    }
    @Override
    public List<DaTaoKeDetail> getCurrentHotSalesRankGoodsList() {
        List<DaTaoKeDetail> list = DaTaoKeUtil.getCurrentHotSalesRank();
        return reSearchDetails(list);
        // 缓存
        String key = "dataoke-goods-rexiao";
        List<DaTaoKeDetail> list = redisManager.getObjList(DaTaoKeDetail.class, key);
        if ((list != null && list.size() > 0
                && System.currentTimeMillis() - list.get(0).getUpdateTime().getTime() > 1000 * 60 * 20) || list == null
                || list.size() == 0)// 超过20分钟未更新
        {
            list = DaTaoKeUtil.getCurrentHotSalesRank();
            list = reSearchDetails(list);
            if (list != null && list.size() > 0)
                redisManager.saveObjList(list, key, null);// 长期缓存
            return list;
        } else
            return list;
    }
}
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/dataoke/DaTaoKeGoodsService.java
@@ -12,7 +12,7 @@
 */
public interface DaTaoKeGoodsService {
    public List<DaTaoKeDetail> getCurrentSalesRankGoodsList(Long cid);
    public List<DaTaoKeDetail> getCurrentSalesRankGoodsList(Integer cid);
    /**
     * 全天销量榜
@@ -20,7 +20,7 @@
     * @param cid
     * @return
     */
    public List<DaTaoKeDetail> getCurrentDaySalesRankGoodsList(Long cid);
    public List<DaTaoKeDetail> getCurrentDaySalesRankGoodsList(Integer cid);
    /**
     * 获取热推榜
fanli/src/main/java/com/yeshi/fanli/util/RedisManager.java
@@ -5,7 +5,6 @@
import javax.annotation.Resource;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.stereotype.Component;
import org.yeshi.utils.JsonUtil;
@@ -517,7 +516,7 @@
     * @param key
     * @param seconds
     */
    public void save(Class<?> clazz, String key, Integer seconds) {
    public void saveObj(Class<?> clazz, String key, Integer seconds) {
        if (clazz == null)
            return;
        String value = new Gson().toJson(clazz);
@@ -527,29 +526,46 @@
            cacheCommonString(key, value);
    }
    public void saveList(List<Class<?>> clazzList, String key, Integer seconds) {
    /**
     * 保存列表
     *
     * @param clazzList
     * @param key
     * @param seconds
     */
    public <T> T saveObjList(List<T> clazzList, String key, Integer seconds) {
        if (clazzList == null)
            return;
            return null;
        String value = new Gson().toJson(clazzList);
        if (seconds != null)
            cacheCommonString(key, value, seconds);
        else
            cacheCommonString(key, value);
        return null;
    }
    /**
     * 获取对象
     *
     * @param clazz
     * @param key
     * @return
     */
    public Class<?> getObj(Class<?> clazz, String key) {
        String value = getCommonString(key);
        return new Gson().fromJson(value, clazz);
    }
    public List<T> getObjList(Class<T> clazz, String key) {
        List<T> list = new ArrayList<>();
    /**
     * 获取列表
     *
     * @param clazz
     * @param key
     * @return
     */
    public <T> List<T> getObjList(Class<T> clazz, String key) {
        String value = getCommonString(key);
        JSONArray array = JSONArray.fromObject(value);
        for (int i = 0; i < array.size(); i++) {
            list.add(new Gson().fromJson(array.optJSONObject(i).toString(), clazz));
        }
        return list;
        return JsonUtil.jsonToList(value, clazz);
    }
}
fanli/src/main/java/com/yeshi/fanli/util/taobao/DaTaoKeUtil.java
@@ -456,6 +456,8 @@
    }
    private static List<DaTaoKeDetail> parseCurrent(String url) {
        List<DaTaoKeDetail> list=new ArrayList<>();
        try {
            Document doc = Jsoup.connect(url)
                    .userAgent(
@@ -469,6 +471,10 @@
                        .getElementsByTag("b").get(0).text();
                System.out.println(id + "-" + currentSale);
                DaTaoKeDetail detail=new DaTaoKeDetail();
                detail.setId(id);
                detail.setSalesNum(Integer.parseInt(currentSale));
                list.add(detail);
            }
@@ -477,7 +483,7 @@
        }
        // TODO 需要返回值
        return null;
        return list;
    }
    // 获取实时榜单
@@ -487,7 +493,7 @@
     * @param cid
     * @return
     */
    public static List<DaTaoKeDetail> getCurrentSalesRank(Long cid) {
    public static List<DaTaoKeDetail> getCurrentSalesRank(Integer cid) {
        String url = null;
        if (cid == null)
            url = "http://www.dataoke.com/top_sell";
@@ -502,7 +508,7 @@
     * @param cid
     * @return
     */
    public static List<DaTaoKeDetail> getCurrentDaySalesRank(Long cid) {
    public static List<DaTaoKeDetail> getCurrentDaySalesRank(Integer cid) {
        String url = null;
        if (cid == null)
            url = "http://www.dataoke.com/top_all";
utils/src/main/java/org/yeshi/utils/JsonUtil.java
@@ -5,12 +5,16 @@
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.google.gson.ExclusionStrategy;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
@@ -22,9 +26,13 @@
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JsonUtil {
    static Gson baseGson = new Gson();
    public static String loadTrueResult(Object result) {
        JSONObject object = new JSONObject();
        object.put("code", 0);
@@ -214,4 +222,58 @@
        return map;
    }
    /**
     * 将对象转换成json字符串。
     * <p>
     * Title: pojoToJson
     * </p>
     * <p>
     * Description:
     * </p>
     *
     * @param data
     * @return
     */
    public static String objectToJson(Object data) {
        String string = baseGson.toJson(data);
        return string;
    }
    /**
     * 将json结果集转化为对象
     *
     * @param jsonData
     *            json数据
     * @param clazz
     *            对象中的object类型
     * @return
     */
    public static <T> T jsonToObject(String jsonData, Class<T> beanType) {
        return baseGson.fromJson(jsonData, beanType);
    }
    /**
     * 将json数据转换成pojo对象list
     * <p>
     * Title: jsonToList
     * </p>
     * <p>
     * Description:
     * </p>
     *
     * @param jsonData
     * @param beanType
     * @return
     */
    public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) {
        if (StringUtil.isNullOrEmpty(jsonData))
            return null;
        List<T> list = new ArrayList<>();
        JSONArray array = JSONArray.fromObject(jsonData);
        for (int i = 0; i < array.size(); i++) {
            list.add(baseGson.fromJson(array.optJSONObject(i).toString(), beanType));
        }
        return list;
    }
}