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; } }