package com.yeshi.fanli.service.impl.goods.recommend;
|
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.concurrent.ConcurrentHashMap;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.cache.Cache;
|
import org.springframework.cache.Cache.ValueWrapper;
|
import org.springframework.cache.ehcache.EhCacheCacheManager;
|
import org.springframework.stereotype.Service;
|
|
import com.yeshi.fanli.dto.dataoke.DaTaoKeGoodsResult;
|
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.DaTaoKeDetailV2;
|
import com.yeshi.fanli.service.inter.goods.recommend.HomeRecommendGoodsService;
|
import com.yeshi.fanli.service.inter.goods.recommend.RecommendGoodsDeleteHistoryService;
|
import com.yeshi.fanli.service.inter.taobao.TLJBuyGoodsService;
|
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailService;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.StringUtil;
|
import com.yeshi.fanli.util.TimeUtil;
|
import com.yeshi.fanli.util.dataoke.DaTaoKeApiUtil;
|
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
|
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
|
|
@Service
|
public class HomeRecommendGoodsServiceImpl implements HomeRecommendGoodsService {
|
|
@Resource
|
private RecommendGoodsDeleteHistoryService recommendGoodsDeleteHistoryService;
|
|
@Resource
|
private DaTaoKeGoodsDetailService daTaoKeGoodsDetailService;
|
|
@Resource
|
private EhCacheCacheManager ehCacheCacheManager;
|
|
@Resource
|
private TLJBuyGoodsService tljBuyGoodsService;
|
|
@Override
|
public List<TaoBaoGoodsBrief> listGoodsByPage(Long uid, String device, String imei, String idfa, int page) {
|
List<TaoBaoGoodsBrief> finalList = new ArrayList<>();
|
if (page == 1) {
|
List<TaoBaoGoodsBrief> tempList = listDTKTimeRankGoods(device, StringUtil.Md5(device));
|
if (tempList != null && tempList.size() > 0)
|
finalList.addAll(tempList);
|
tempList = guessDeviceLike(device, imei, idfa);
|
if (tempList != null && tempList.size() > 0)
|
finalList.addAll(tempList);
|
tempList = listDTKHotRankGoods(device, StringUtil.Md5(device));
|
if (tempList != null && tempList.size() > 0)
|
finalList.addAll(tempList);
|
} else if (page == 2) {
|
List<TaoBaoGoodsBrief> tempList = listDTKDayRankGoods(device);
|
if (tempList != null && tempList.size() > 0)
|
finalList.addAll(tempList);
|
} else if (page >= 3) {
|
List<TaoBaoGoodsBrief> tempList = taoKeGoodsCouponList(page - 2);
|
if (tempList != null && tempList.size() > 0)
|
finalList.addAll(tempList);
|
}
|
return finalList;
|
}
|
|
// 大淘客实时热销
|
public List<TaoBaoGoodsBrief> listDTKTimeRankGoods(String device, String deviceMd5) {
|
String name = "recommendUserCache";
|
String key = "listDTKTimeRankGoods-" + StringUtil.Md5(device);
|
List<TaoBaoGoodsBrief> fList = getCacheObjList(name, key, TaoBaoGoodsBrief.class);
|
if (fList != null && fList.size() > 0)
|
return fList;
|
List<TaoBaoGoodsBrief> list = listRankGoods(DaTaoKeApiUtil.RANK_TYPE_TIME);
|
list = recommendGoodsDeleteHistoryService.filterGoods(device, list);
|
List<TaoBaoGoodsBrief> randomList = new ArrayList<>();
|
randomList.addAll(list);
|
Collections.shuffle(randomList);
|
fList = randomList.size() < 5 ? randomList : randomList.subList(0, 5);
|
if (fList != null && fList.size() > 0)
|
saveObjList(fList, name, key);
|
return fList;
|
}
|
|
// 大淘客热推榜
|
public List<TaoBaoGoodsBrief> listDTKHotRankGoods(String device, String deviceMd5) {
|
String name = "recommendUserCache";
|
String key = "listDTKHotRankGoods-" + StringUtil.Md5(device);
|
List<TaoBaoGoodsBrief> fList = getCacheObjList(name, key, TaoBaoGoodsBrief.class);
|
if (fList != null && fList.size() > 0)
|
return fList;
|
List<TaoBaoGoodsBrief> list = listRankGoods(DaTaoKeApiUtil.RANK_TYPE_HOT);
|
list = recommendGoodsDeleteHistoryService.filterGoods(device, list);
|
List<TaoBaoGoodsBrief> randomList = new ArrayList<>();
|
randomList.addAll(list);
|
Collections.shuffle(randomList);
|
fList = randomList.size() < 5 ? randomList : randomList.subList(0, 5);
|
if (fList != null && fList.size() > 0)
|
saveObjList(fList, name, key);
|
return fList;
|
}
|
|
// 大淘客全天热榜
|
public List<TaoBaoGoodsBrief> listDTKDayRankGoods(String device) {
|
String name = "recommendUserCache";
|
String key = "listDTKDayRankGoods-" + StringUtil.Md5(device);
|
List<TaoBaoGoodsBrief> fList = getCacheObjList(name, key, TaoBaoGoodsBrief.class);
|
if (fList != null && fList.size() > 0)
|
return fList;
|
|
List<TaoBaoGoodsBrief> list = listRankGoods(DaTaoKeApiUtil.RANK_TYPE_DAY);
|
list = recommendGoodsDeleteHistoryService.filterGoods(device, list);
|
List<TaoBaoGoodsBrief> randomList = new ArrayList<>();
|
randomList.addAll(list);
|
Collections.shuffle(randomList);
|
fList = randomList.size() < 20 ? randomList : randomList.subList(0, 20);
|
if (fList != null && fList.size() > 0)
|
saveObjList(fList, name, key);
|
return fList;
|
}
|
|
// 设备猜你喜欢
|
public List<TaoBaoGoodsBrief> guessDeviceLike(String device, String imei, String idfa) {
|
|
String name = "recommendUserCache";
|
String key = "guessDeviceLike-" + StringUtil.Md5(device);
|
List<TaoBaoGoodsBrief> fList = getCacheObjList(name, key, TaoBaoGoodsBrief.class);
|
if (fList != null && fList.size() > 0)
|
return fList;
|
|
TaoBaoSearchResult result = TaoKeApiUtil.guessDeviceLike(1, 50, imei, idfa);
|
List<TaoBaoGoodsBrief> finalList = new ArrayList<>();
|
|
if (result != null && result.getTaoBaoGoodsBriefs() != null) {
|
List<TaoBaoGoodsBrief> list = result.getTaoBaoGoodsBriefs();
|
// 设备推荐
|
if (list != null)
|
for (TaoBaoGoodsBrief goods : list) {
|
if (!StringUtil.isNullOrEmpty(goods.getCouponInfo()) && goods.getCouponAmount() != null
|
&& goods.getCouponAmount().compareTo(new BigDecimal("5")) >= 0 && goods.getBiz30day() > 1000
|
&& !StringUtil.isNullOrEmpty(goods.getPictUrlWhite())) {
|
finalList.add(goods);
|
}
|
}
|
}
|
finalList = recommendGoodsDeleteHistoryService.filterGoods(device, finalList);
|
Collections.shuffle(finalList);
|
fList = finalList.size() < 5 ? finalList : finalList.subList(0, 5);
|
if (fList != null && fList.size() > 0)
|
saveObjList(fList, name, key);
|
return fList;
|
}
|
|
/**
|
* 获取大淘客的商品厂库
|
*
|
* @return
|
*/
|
public List<TaoBaoGoodsBrief> listRankGoods(int type) {
|
|
String name = "recommendLibraryCache";
|
String key = "listRankGoods-" + type;
|
List<TaoBaoGoodsBrief> fList = getCacheObjList(name, key, TaoBaoGoodsBrief.class);
|
if (fList != null && fList.size() > 0)
|
return fList;
|
|
DaTaoKeGoodsResult result = DaTaoKeApiUtil.getRankingList(type, null);
|
List<DaTaoKeDetailV2> list = result.getGoodsList();
|
List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
|
if (list != null)
|
for (DaTaoKeDetailV2 v2 : list)
|
goodsList.add(TaoBaoUtil.convert(v2));
|
if (goodsList == null || goodsList.size() == 0) {
|
if (1 / 0 > 0)
|
return null;
|
}
|
if (goodsList != null && goodsList.size() > 0)
|
saveObjList(goodsList, name, key);
|
|
return goodsList;
|
}
|
|
/**
|
* 淘客好券直播
|
*
|
* @param page
|
* @return
|
*/
|
public List<TaoBaoGoodsBrief> taoKeGoodsCouponList(int page) {
|
String name = "recommendLibraryCache";
|
String key = "taoKeGoodsCouponList-" + page;
|
List<TaoBaoGoodsBrief> list = getCacheObjList(name, key, TaoBaoGoodsBrief.class);
|
if (list != null && list.size() > 0)
|
return list;
|
|
TaoBaoSearchResult result = TaoKeApiUtil.getMaterialByMaterialId(3756, page, Constant.PAGE_SIZE);
|
if (result != null) {
|
list = daTaoKeGoodsDetailService.filterTaoBaoGoods(result.getTaoBaoGoodsBriefs());
|
saveObjList(list, name, key);
|
return list;
|
}
|
return null;
|
}
|
|
@SuppressWarnings("unchecked")
|
private <T> List<T> getCacheObjList(String name, String key, Class<T> clazz) {
|
Cache cache = ehCacheCacheManager.getCache(name);
|
ValueWrapper vw = cache.get(key);
|
if (vw != null)
|
return (List<T>) vw.get();
|
return null;
|
}
|
|
private <T> T saveObjList(List<T> clazzList, String name, String key) {
|
if (clazzList == null)
|
return null;
|
List<T> tList = new ArrayList<>();
|
for (T t : clazzList)
|
tList.add(t);
|
Cache cache = ehCacheCacheManager.getCache(name);
|
cache.put(key, tList);
|
return null;
|
}
|
|
@Override
|
public List<TLJBuyGoods> getZiGouLiJianHotGoods(String device) {
|
|
String name = "recommendUserCache";
|
String key = "getZiGouLiJianHotGoods-" + StringUtil.Md5(device);
|
List<TLJBuyGoods> fList = getCacheObjList(name, key, TLJBuyGoods.class);
|
if (fList != null && fList.size() > 0)
|
return fList;
|
|
List<TLJBuyGoods> list = tljBuyGoodsService
|
.listByDay(TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd"));
|
List<TaoBaoGoodsBrief> finalList = new ArrayList<>();
|
Map<Long, TLJBuyGoods> map = new ConcurrentHashMap<>();
|
if (list != null)
|
for (TLJBuyGoods goods : list) {
|
map.put(goods.getGoods().getAuctionId(), goods);
|
finalList.add(goods.getGoods());
|
}
|
|
finalList = recommendGoodsDeleteHistoryService.filterGoods(device, finalList);
|
|
if (finalList != null && finalList.size() > 0) {
|
Collections.shuffle(finalList);
|
if (finalList.size() >= 3)
|
finalList = finalList.subList(0, 3);
|
list = new ArrayList<>();
|
for (TaoBaoGoodsBrief goods : finalList) {
|
list.add(map.get(goods.getAuctionId()));
|
}
|
// 缓存
|
if (list.size() > 0) {
|
saveObjList(list, name, key);
|
}
|
return list;
|
}
|
|
return null;
|
}
|
|
}
|