package com.yeshi.fanli.service.impl.goods;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import org.springframework.cache.annotation.Cacheable;
|
import org.springframework.stereotype.Service;
|
|
import com.yeshi.fanli.dto.common.JDCommonContentTypeEnum;
|
import com.yeshi.fanli.dto.jd.JDSearchResult;
|
import com.yeshi.fanli.entity.jd.JDGoods;
|
import com.yeshi.fanli.service.inter.goods.JDCommonTemplateContentService;
|
import com.yeshi.fanli.tag.PageEntity;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.jd.JDApiUtil;
|
|
@Service
|
public class JDCommonTemplateContentServiceImpl implements JDCommonTemplateContentService {
|
|
private Map<String, Long> countMap = new HashMap<String, Long>();
|
|
@Cacheable(value = "jdCommonContentCache", key = "#type+'-'+#cid+'-'+#page+'-'+#pageSize")
|
@Override
|
public JDSearchResult getContentList(JDCommonContentTypeEnum type, String cid, int page, int pageSize) {
|
if (type == JDCommonContentTypeEnum._9k9) {
|
return get9K9Content(cid, page, pageSize);
|
} else if (type == JDCommonContentTypeEnum.jdPeiSong) {
|
return getJDPeiSongContent(cid, page, pageSize);
|
} else if (type == JDCommonContentTypeEnum.jiaDian) {
|
return getJiaDianContent(cid, page, pageSize);
|
} else if (type == JDCommonContentTypeEnum.baiHuo) {
|
return getBaiHuoContent(cid, page, pageSize);
|
} else if (type == JDCommonContentTypeEnum.juJia) {
|
return getJuJiaContent(cid, page, pageSize);
|
}
|
return null;
|
}
|
|
private JDSearchResult get9K9Content(String cid, int page, int pageSize) {
|
int[] arrayId = { 10, 17 };
|
JDSearchResult result = getJingFenGoods(page, pageSize, "9k9-", arrayId);
|
|
return filterGoods(result);
|
}
|
|
private JDSearchResult filterGoods(JDSearchResult result) {
|
List<Long> skuIds = new ArrayList<>();
|
if (result != null && result.getGoodsList() != null && result.getGoodsList().size() > 0) {
|
for (JDGoods goods : result.getGoodsList()) {
|
skuIds.add(goods.getSkuId());
|
}
|
List<JDGoods> goodsList = JDApiUtil.listGoodsDetail(skuIds);
|
result.setGoodsList(goodsList);
|
}
|
return result;
|
}
|
|
private JDSearchResult getJDPeiSongContent(String cid, int page, int pageSize) {
|
int[] arrayId = { 15, 18 };
|
JDSearchResult result = getJingFenGoods(page, pageSize, "peisong-", arrayId);
|
return filterGoods(result);
|
}
|
|
private JDSearchResult getJiaDianContent(String cid, int page, int pageSize) {
|
int[] arrayId = { 5, 2 };
|
JDSearchResult result = getJingFenGoods(page, pageSize, "jiadian-", arrayId);
|
return filterGoods(result);
|
}
|
|
private JDSearchResult getBaiHuoContent(String cid, int page, int pageSize) {
|
int[] arrayId = { 6, 3 };
|
JDSearchResult result = getJingFenGoods(page, pageSize, "baihuo-", arrayId);
|
return filterGoods(result);
|
}
|
|
private JDSearchResult getJuJiaContent(String cid, int page, int pageSize) {
|
int[] arrayId = { 7, 4 };
|
JDSearchResult result = getJingFenGoods(page, pageSize, "jujia-", arrayId);
|
return filterGoods(result);
|
}
|
|
/**
|
* 9快9包邮
|
*
|
* @param cid
|
* @param page
|
* @param pageSize
|
* @return
|
*/
|
private JDSearchResult getJingFenGoods(int page, int pageSize, String mapKey, int[] arrayId) {
|
int pageTemp = 0;
|
long addCount = 0;
|
Integer categoryId = null;
|
long totalCount = (long) (page * Constant.PAGE_SIZE);
|
for (int i = 0; i < arrayId.length; i++) {
|
Long count = countMap.get(mapKey + arrayId[i]);
|
if (count != null) {
|
addCount += count;
|
}
|
|
if (count != null && totalCount > addCount) {
|
pageTemp = (int) (addCount / Constant.PAGE_SIZE);
|
continue; // 当前分类商品不足
|
} else {
|
page = page - pageTemp;
|
categoryId = arrayId[i];
|
break;
|
}
|
}
|
|
if (categoryId == null) {
|
return null;
|
}
|
|
JDSearchResult result = JDApiUtil.getJingFenGoods(page, categoryId);
|
long count = 0;
|
if (result != null) {
|
PageEntity pageEntity = result.getPageEntity();
|
if (pageEntity != null) {
|
count = pageEntity.getTotalCount();
|
}
|
}
|
|
long mcount = (count / Constant.PAGE_SIZE) * Constant.PAGE_SIZE;
|
if (mcount == 0) {
|
mcount = 20;
|
}
|
countMap.put(mapKey + categoryId, mcount);
|
return result;
|
}
|
|
}
|