| | |
| | | package com.yeshi.fanli.service.impl.jd;
|
| | |
|
| | | import java.util.ArrayList;
|
| | | import java.util.Collections;
|
| | | import java.util.HashMap;
|
| | | import java.util.List;
|
| | | import java.util.Map;
|
| | |
|
| | | import javax.annotation.Resource;
|
| | |
|
| | | import org.springframework.cache.annotation.Cacheable;
|
| | | import org.springframework.stereotype.Service;
|
| | | import org.springframework.transaction.annotation.Transactional;
|
| | |
|
| | | import com.yeshi.fanli.dto.jd.JDFilter;
|
| | | import com.yeshi.fanli.dto.jd.JDSearchFilter;
|
| | | import com.yeshi.fanli.dto.jd.JDSearchResult;
|
| | | import com.yeshi.fanli.entity.bus.clazz.GoodsClass;
|
| | | import com.yeshi.fanli.entity.jd.JDGoods;
|
| | | import com.yeshi.fanli.entity.system.ConfigKeyEnum;
|
| | | import com.yeshi.fanli.exception.jd.JDGoodsException;
|
| | | import com.yeshi.fanli.service.inter.config.ConfigService;
|
| | | import com.yeshi.fanli.service.inter.jd.JDGoodsService;
|
| | | import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
|
| | | import com.yeshi.fanli.tag.PageEntity;
|
| | | import com.yeshi.fanli.util.Constant;
|
| | | import com.yeshi.fanli.util.StringUtil;
|
| | | import com.yeshi.fanli.util.jd.JDApiUtil;
|
| | | import com.yeshi.fanli.util.jd.JDUtil;
|
| | |
|
| | | @Service
|
| | | public class JDGoodsServiceImpl implements JDGoodsService {
|
| | |
|
| | | @Resource
|
| | | private ConfigService configService;
|
| | |
|
| | | @Resource
|
| | | private HongBaoManageService hongBaoManageService;
|
| | |
|
| | | private Map<String, Long> countMap = new HashMap<String, Long>();
|
| | | private static final Map<Long, String> cidMap = new HashMap<Long, String>();
|
| | |
|
| | | static {
|
| | | cidMap.put(1L, "2,16,1,3");// 精选
|
| | | cidMap.put(2L, "737");// 电器: 家用电器
|
| | | cidMap.put(3L, "652,670");// 数码: 数码/电脑、办公
|
| | | cidMap.put(4L, "9987");// 手机:手机通讯
|
| | | cidMap.put(5L, "12218");// 生鲜
|
| | | cidMap.put(6L, "1315");// 服饰: 服饰内衣
|
| | | cidMap.put(7L, "1319,6233");// 母婴: 母婴/玩具乐器
|
| | | cidMap.put(8L, "1713");// 图书
|
| | | cidMap.put(9L, "6196");// 厨具
|
| | | cidMap.put(10L, "1320");// 食品: 食品饮料
|
| | | cidMap.put(11L, "1316,16750");// 美妆: 美妆护肤/个人护理
|
| | | cidMap.put(12L, "15901,1620,1672,12259,9192");// 百货:家庭清洁、纸品/居家日用/礼品/酒类/医药保健
|
| | | cidMap.put(13L, "11729");// 鞋靴
|
| | | cidMap.put(14L, "1318");// 运动:运动户外
|
| | | cidMap.put(15L, "17329");// 箱包: 箱包皮具
|
| | | cidMap.put(16L, "6994");// 宠物: 宠物生活
|
| | | cidMap.put(17L, "9855,9847,15248");// 家居: 家装建材/家具/家纺
|
| | | cidMap.put(18L, "6728");// 汽车:汽车用品
|
| | | }
|
| | |
|
| | | @Override
|
| | | public List<GoodsClass> getSpecialClass() {
|
| | | List<GoodsClass> list = new ArrayList<GoodsClass>();
|
| | | list.add(new GoodsClass(1L, "精选"));
|
| | | list.add(new GoodsClass(2L, "电器"));
|
| | | list.add(new GoodsClass(3L, "数码"));
|
| | | list.add(new GoodsClass(4L, "手机"));
|
| | | list.add(new GoodsClass(5L, "生鲜"));
|
| | | list.add(new GoodsClass(6L, "服饰"));
|
| | | list.add(new GoodsClass(7L, "母婴"));
|
| | | list.add(new GoodsClass(8L, "图书"));
|
| | | list.add(new GoodsClass(9L, "厨具"));
|
| | | list.add(new GoodsClass(10L, "食品"));
|
| | | list.add(new GoodsClass(11L, "美妆"));
|
| | | list.add(new GoodsClass(12L, "百货"));
|
| | | list.add(new GoodsClass(13L, "鞋靴"));
|
| | | list.add(new GoodsClass(14L, "运动"));
|
| | | list.add(new GoodsClass(15L, "箱包"));
|
| | | list.add(new GoodsClass(16L, "宠物"));
|
| | | list.add(new GoodsClass(17L, "家居"));
|
| | | list.add(new GoodsClass(18L, "汽车"));
|
| | | return list;
|
| | | }
|
| | |
|
| | | @Cacheable(value = "jdSpecialCache", key = "'specialSearch-'+#page+'-'+#cid")
|
| | | @Override
|
| | | @Transactional(rollbackFor=Exception.class)
|
| | | public List<JDGoods> specialSearch(Integer page, Long cid) throws JDGoodsException {
|
| | | if (cid == null) {
|
| | | throw new JDGoodsException(1, "分类id为空");
|
| | | }
|
| | |
|
| | | String jdcid = cidMap.get(cid);
|
| | | if (StringUtil.isNullOrEmpty(jdcid)) {
|
| | | throw new JDGoodsException(1, "分类id不存在");
|
| | | }
|
| | |
|
| | | // 精选
|
| | | if (cid == 1) {
|
| | | Integer categoryId = null;
|
| | | int pageTemp = 0;
|
| | | long addCount = 0;
|
| | | long totalCount = (long) (page * Constant.PAGE_SIZE);
|
| | | String[] arrayId = jdcid.split(",");
|
| | | for (int i = 0; i < arrayId.length; i++) {
|
| | | String id = arrayId[i];
|
| | | Long count = countMap.get(cid + "-" + id);
|
| | | if (count != null) {
|
| | | addCount += count;
|
| | | }
|
| | |
|
| | | if (count != null && totalCount > addCount) {
|
| | | pageTemp = (int) (addCount / Constant.PAGE_SIZE);
|
| | | continue; // 当前分类商品不足
|
| | | } else {
|
| | | page = page - pageTemp;
|
| | | categoryId = Integer.parseInt(id);
|
| | | 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(cid + "-" + categoryId, mcount);
|
| | |
|
| | | if (result == null) {
|
| | | return null;
|
| | | } else {
|
| | | return filterJDGoods(result.getGoodsList());
|
| | | }
|
| | | }
|
| | |
|
| | | if (!jdcid.contains(",")) {
|
| | | return search(page, Constant.PAGE_SIZE, jdcid);
|
| | | }
|
| | |
|
| | | // 多个分类id处理
|
| | | List<JDGoods> list = new ArrayList<JDGoods>();
|
| | | String[] arrayId = jdcid.split(",");
|
| | | for (int i = 0; i < arrayId.length; i++) {
|
| | | if (i >= 3) {
|
| | | break;
|
| | | }
|
| | | List<JDGoods> listGoods = search(page, 10, arrayId[i]);
|
| | | if (listGoods != null && listGoods.size() > 0) {
|
| | | list.addAll(listGoods);
|
| | | }
|
| | | }
|
| | | return filterJDGoods(list);
|
| | | }
|
| | |
|
| | | /**
|
| | | * 过滤商品
|
| | | * |
| | | * @param goodsList
|
| | | * @return
|
| | | */
|
| | | private List<JDGoods> filterJDGoods(List<JDGoods> goodsList) {
|
| | | List<Long> skuIds = new ArrayList<>();
|
| | | for (JDGoods goods : goodsList) {
|
| | | skuIds.add(goods.getSkuId());
|
| | | }
|
| | | List<JDGoods> newGoodsList = JDApiUtil.listGoodsDetail(skuIds);
|
| | | if (newGoodsList != null && newGoodsList.size() > 0)
|
| | | return newGoodsList;
|
| | | return goodsList;
|
| | | }
|
| | |
|
| | | private List<JDGoods> search(int page, int pageSize, String jdcid) {
|
| | | JDSearchResult result = null;
|
| | | String way = configService.get(ConfigKeyEnum.jdApiSearchKey.getKey());
|
| | | if ("1".equals(way)) { // API搜索
|
| | | JDFilter filterAPI = new JDFilter();
|
| | | filterAPI.setPageIndex(page);
|
| | | filterAPI.setPageSize(pageSize);
|
| | | filterAPI.setCid1(Long.parseLong(jdcid));
|
| | | result = JDApiUtil.queryByKey(filterAPI);
|
| | | } else { // 网页爬取
|
| | | JDSearchFilter jdfilter = new JDSearchFilter();
|
| | | jdfilter.setPageNo(page);
|
| | | jdfilter.setPageSize(pageSize);
|
| | | jdfilter.setCategoryId(Integer.parseInt(jdcid));
|
| | | result = JDUtil.searchByKey(jdfilter);
|
| | | }
|
| | |
|
| | | if (result == null) {
|
| | | return null;
|
| | | } else {
|
| | | return result.getGoodsList();
|
| | | }
|
| | | }
|
| | |
|
| | | @Cacheable(value = "jdCache", key = "'getIndexJDGoods-'+#page")
|
| | | @Override
|
| | | public JDSearchResult getIndexJDGoods(int page) {
|
| | | JDSearchResult result = null;
|
| | | String way = configService.get(ConfigKeyEnum.jdApiSearchKey.getKey());
|
| | | // TODO 需要调整规则
|
| | | way = "0";
|
| | | if ("1".equals(way)) {
|
| | | JDFilter filterAPI = new JDFilter();
|
| | | filterAPI.setPageIndex(page);
|
| | | filterAPI.setPageSize(20);
|
| | | result = JDApiUtil.queryByKey(filterAPI);
|
| | | } else {
|
| | | // 网页爬取
|
| | | JDSearchFilter jdfilter = new JDSearchFilter();
|
| | | jdfilter.setPageNo(page);
|
| | | jdfilter.setPageSize(Constant.PAGE_SIZE);
|
| | | result =JDApiUtil.getJingFenGoods(page,15); //JDUtil.searchByKey(jdfilter);
|
| | | }
|
| | | if (result != null && result.getGoodsList() != null)
|
| | | Collections.shuffle(result.getGoodsList());
|
| | |
|
| | | return result;
|
| | | }
|
| | |
|
| | | }
|
| | | package com.yeshi.fanli.service.impl.jd; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | import com.yeshi.fanli.entity.SystemEnum; |
| | | import org.springframework.cache.annotation.Cacheable; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import com.yeshi.fanli.dto.jd.JDFilter; |
| | | import com.yeshi.fanli.dto.jd.JDSearchFilter; |
| | | import com.yeshi.fanli.dto.jd.JDSearchResult; |
| | | import com.yeshi.fanli.entity.bus.clazz.GoodsClass; |
| | | import com.yeshi.fanli.entity.jd.JDGoods; |
| | | import com.yeshi.fanli.entity.system.ConfigKeyEnum; |
| | | import com.yeshi.fanli.exception.jd.JDGoodsException; |
| | | import com.yeshi.fanli.service.inter.config.ConfigService; |
| | | import com.yeshi.fanli.service.inter.jd.JDGoodsService; |
| | | import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; |
| | | import com.yeshi.common.entity.PageEntity; |
| | | import com.yeshi.fanli.util.Constant; |
| | | import com.yeshi.fanli.util.StringUtil; |
| | | import com.yeshi.fanli.util.jd.JDApiUtil; |
| | | import com.yeshi.fanli.util.jd.JDUtil; |
| | | |
| | | @Service |
| | | public class JDGoodsServiceImpl implements JDGoodsService { |
| | | |
| | | @Resource |
| | | private ConfigService configService; |
| | | |
| | | @Resource |
| | | private HongBaoManageService hongBaoManageService; |
| | | |
| | | private Map<String, Long> countMap = new HashMap<String, Long>(); |
| | | private static final Map<Long, String> cidMap = new HashMap<Long, String>(); |
| | | |
| | | static { |
| | | cidMap.put(1L, "2,16,1,3");// 精选 |
| | | cidMap.put(2L, "737");// 电器: 家用电器 |
| | | cidMap.put(3L, "652,670");// 数码: 数码/电脑、办公 |
| | | cidMap.put(4L, "9987");// 手机:手机通讯 |
| | | cidMap.put(5L, "12218");// 生鲜 |
| | | cidMap.put(6L, "1315");// 服饰: 服饰内衣 |
| | | cidMap.put(7L, "1319,6233");// 母婴: 母婴/玩具乐器 |
| | | cidMap.put(8L, "1713");// 图书 |
| | | cidMap.put(9L, "6196");// 厨具 |
| | | cidMap.put(10L, "1320");// 食品: 食品饮料 |
| | | cidMap.put(11L, "1316,16750");// 美妆: 美妆护肤/个人护理 |
| | | cidMap.put(12L, "15901,1620,1672,12259,9192");// 百货:家庭清洁、纸品/居家日用/礼品/酒类/医药保健 |
| | | cidMap.put(13L, "11729");// 鞋靴 |
| | | cidMap.put(14L, "1318");// 运动:运动户外 |
| | | cidMap.put(15L, "17329");// 箱包: 箱包皮具 |
| | | cidMap.put(16L, "6994");// 宠物: 宠物生活 |
| | | cidMap.put(17L, "9855,9847,15248");// 家居: 家装建材/家具/家纺 |
| | | cidMap.put(18L, "6728");// 汽车:汽车用品 |
| | | } |
| | | |
| | | @Override |
| | | public List<GoodsClass> getSpecialClass() { |
| | | List<GoodsClass> list = new ArrayList<GoodsClass>(); |
| | | list.add(new GoodsClass(1L, "精选")); |
| | | list.add(new GoodsClass(2L, "电器")); |
| | | list.add(new GoodsClass(3L, "数码")); |
| | | list.add(new GoodsClass(4L, "手机")); |
| | | list.add(new GoodsClass(5L, "生鲜")); |
| | | list.add(new GoodsClass(6L, "服饰")); |
| | | list.add(new GoodsClass(7L, "母婴")); |
| | | list.add(new GoodsClass(8L, "图书")); |
| | | list.add(new GoodsClass(9L, "厨具")); |
| | | list.add(new GoodsClass(10L, "食品")); |
| | | list.add(new GoodsClass(11L, "美妆")); |
| | | list.add(new GoodsClass(12L, "百货")); |
| | | list.add(new GoodsClass(13L, "鞋靴")); |
| | | list.add(new GoodsClass(14L, "运动")); |
| | | list.add(new GoodsClass(15L, "箱包")); |
| | | list.add(new GoodsClass(16L, "宠物")); |
| | | list.add(new GoodsClass(17L, "家居")); |
| | | list.add(new GoodsClass(18L, "汽车")); |
| | | return list; |
| | | } |
| | | |
| | | @Cacheable(value = "jdSpecialCache", key = "'specialSearch-'+#page+'-'+#cid") |
| | | @Override |
| | | @Transactional(rollbackFor=Exception.class) |
| | | public List<JDGoods> specialSearch(Integer page, Long cid,SystemEnum system) throws JDGoodsException { |
| | | if (cid == null) { |
| | | throw new JDGoodsException(1, "分类id为空"); |
| | | } |
| | | |
| | | String jdcid = cidMap.get(cid); |
| | | if (StringUtil.isNullOrEmpty(jdcid)) { |
| | | throw new JDGoodsException(1, "分类id不存在"); |
| | | } |
| | | |
| | | // 精选 |
| | | if (cid == 1) { |
| | | Integer categoryId = null; |
| | | int pageTemp = 0; |
| | | long addCount = 0; |
| | | long totalCount = (long) (page * Constant.PAGE_SIZE); |
| | | String[] arrayId = jdcid.split(","); |
| | | for (int i = 0; i < arrayId.length; i++) { |
| | | String id = arrayId[i]; |
| | | Long count = countMap.get(cid + "-" + id); |
| | | if (count != null) { |
| | | addCount += count; |
| | | } |
| | | |
| | | if (count != null && totalCount > addCount) { |
| | | pageTemp = (int) (addCount / Constant.PAGE_SIZE); |
| | | continue; // 当前分类商品不足 |
| | | } else { |
| | | page = page - pageTemp; |
| | | categoryId = Integer.parseInt(id); |
| | | 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(cid + "-" + categoryId, mcount); |
| | | |
| | | if (result == null) { |
| | | return null; |
| | | } else { |
| | | return filterJDGoods(result.getGoodsList()); |
| | | } |
| | | } |
| | | |
| | | if (!jdcid.contains(",")) { |
| | | return search(page, Constant.PAGE_SIZE, jdcid,system); |
| | | } |
| | | |
| | | // 多个分类id处理 |
| | | List<JDGoods> list = new ArrayList<JDGoods>(); |
| | | String[] arrayId = jdcid.split(","); |
| | | for (int i = 0; i < arrayId.length; i++) { |
| | | if (i >= 3) { |
| | | break; |
| | | } |
| | | List<JDGoods> listGoods = search(page, 10, arrayId[i],system); |
| | | if (listGoods != null && listGoods.size() > 0) { |
| | | list.addAll(listGoods); |
| | | } |
| | | } |
| | | return filterJDGoods(list); |
| | | } |
| | | |
| | | /** |
| | | * 过滤商品 |
| | | * |
| | | * @param goodsList |
| | | * @return |
| | | */ |
| | | private List<JDGoods> filterJDGoods(List<JDGoods> goodsList) { |
| | | List<String> skuIds = new ArrayList<>(); |
| | | for (JDGoods goods : goodsList) { |
| | | skuIds.add(goods.getItemId()); |
| | | } |
| | | List<JDGoods> newGoodsList = JDApiUtil.listGoodsDetail(skuIds); |
| | | if (newGoodsList != null && newGoodsList.size() > 0) |
| | | return newGoodsList; |
| | | return goodsList; |
| | | } |
| | | |
| | | private List<JDGoods> search(int page, int pageSize, String jdcid, SystemEnum system) { |
| | | JDSearchResult result = null; |
| | | String way = configService.getValue(ConfigKeyEnum.jdApiSearchKey.getKey(),system); |
| | | if ("1".equals(way)) { // API搜索 |
| | | JDFilter filterAPI = new JDFilter(); |
| | | filterAPI.setPageIndex(page); |
| | | filterAPI.setPageSize(pageSize); |
| | | filterAPI.setCid1(Long.parseLong(jdcid)); |
| | | result = JDApiUtil.queryByKey(filterAPI); |
| | | } else { // 网页爬取 |
| | | JDSearchFilter jdfilter = new JDSearchFilter(); |
| | | jdfilter.setPageNo(page); |
| | | jdfilter.setPageSize(pageSize); |
| | | jdfilter.setCategoryId(Integer.parseInt(jdcid)); |
| | | result = JDUtil.searchByKey(jdfilter); |
| | | } |
| | | |
| | | if (result == null) { |
| | | return null; |
| | | } else { |
| | | return result.getGoodsList(); |
| | | } |
| | | } |
| | | |
| | | @Cacheable(value = "jdCache", key = "'getIndexJDGoods-'+#page") |
| | | @Override |
| | | public JDSearchResult getIndexJDGoods(int page,SystemEnum system) { |
| | | JDSearchResult result = null; |
| | | String way = configService.getValue(ConfigKeyEnum.jdApiSearchKey.getKey(),system); |
| | | // TODO 需要调整规则 |
| | | way = "0"; |
| | | if ("1".equals(way)) { |
| | | JDFilter filterAPI = new JDFilter(); |
| | | filterAPI.setPageIndex(page); |
| | | filterAPI.setPageSize(20); |
| | | result = JDApiUtil.queryByKey(filterAPI); |
| | | } else { |
| | | // 网页爬取 |
| | | JDSearchFilter jdfilter = new JDSearchFilter(); |
| | | jdfilter.setPageNo(page); |
| | | jdfilter.setPageSize(Constant.PAGE_SIZE); |
| | | result =JDApiUtil.getJingFenGoods(page,125); //JDUtil.searchByKey(jdfilter); |
| | | } |
| | | if (result != null && result.getGoodsList() != null) |
| | | Collections.shuffle(result.getGoodsList()); |
| | | |
| | | return result; |
| | | } |
| | | |
| | | } |