admin
2020-05-20 98b1a0affd69bbe63223c21fdd2c404e8bedfccb
fanli/src/main/java/com/yeshi/fanli/controller/admin/TaoBaoGoodsBriefAdminController.java
@@ -3,22 +3,23 @@
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.yeshi.utils.JsonUtil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.yeshi.fanli.entity.bus.clazz.GoodsClass;
import com.yeshi.fanli.entity.bus.lable.QualityFactory;
import com.yeshi.fanli.entity.common.AdminUser;
import com.yeshi.fanli.entity.taobao.PidUser;
import com.yeshi.fanli.entity.taobao.SearchFilter;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
@@ -26,21 +27,17 @@
import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult;
import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig;
import com.yeshi.fanli.entity.taobao.TaobaoMeterial;
import com.yeshi.fanli.exception.ExistObjectException;
import com.yeshi.fanli.exception.NotExistObjectException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2;
import com.yeshi.fanli.service.inter.goods.GoodsClassService;
import com.yeshi.fanli.service.inter.goods.TaoBaoClassService;
import com.yeshi.fanli.service.inter.goods.TaoBaoGoodsBriefRecordService;
import com.yeshi.fanli.service.inter.goods.TaoBaoGoodsBriefService;
import com.yeshi.fanli.service.inter.lable.QualityFactoryService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
import com.yeshi.fanli.service.inter.taobao.TaobaoMeterialService;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailV2Service;
import com.yeshi.fanli.tag.PageEntity;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.GsonUtil;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
@@ -53,13 +50,10 @@
   @Resource
   private TaoBaoGoodsBriefService taoBaoGoodsBriefService;
   @Resource
   private TaoBaoGoodsBriefRecordService taoBaoGoodsBriefRecordService;
   @Resource
   private RedisManager redisManager;
   @Resource
   private QualityFactoryService selectionGoodsService;
   private QualityFactoryService qualityFactoryService;
   @Resource
   private TaoBaoUnionConfigService taoBaoUnionConfigService;
@@ -70,160 +64,9 @@
   @Resource
   private TaoBaoClassService taoBaoClassService;
   @RequestMapping(value = "getTBGoodsList", method = RequestMethod.POST)
   public void getTaoBaoGoodsBriefList(int pageIndex, String key, PrintWriter out) {
      List<TaoBaoGoodsBrief> taoBaoGoodsBriefList = taoBaoGoodsBriefService.getTBList(pageIndex - 1, key);
      int count = taoBaoGoodsBriefService.getCount(key);
      int totalPage = count % Constant.PAGE_SIZE == 0 ? count / Constant.PAGE_SIZE : count / Constant.PAGE_SIZE + 1;
      PageEntity pe = new PageEntity(pageIndex, Constant.PAGE_SIZE, count, totalPage);
      Map<String, String> map = new HashMap<String, String>();
      map.put("key", key);
      pe.setParams(map);
      JSONObject data = new JSONObject();
      data.put("pe", pe);
      data.put("taoBaoGoodsBriefList", GsonUtil.toDFJson(taoBaoGoodsBriefList));
      out.print(JsonUtil.loadTrueResult(data));
   }
   @RequestMapping(value = "getInvalidTaoBaoGoods", method = RequestMethod.POST)
   public void getInvalidTaoBaoGoods(int pageIndex, PrintWriter out) {
      List<TaoBaoGoodsBrief> taoBaoGoodsBriefList = taoBaoGoodsBriefService.getInvalidTB(pageIndex);
      int count = taoBaoGoodsBriefService.getInvalidCount();
      int totalPage = count % Constant.PAGE_SIZE == 0 ? count / Constant.PAGE_SIZE : count / Constant.PAGE_SIZE + 1;
      PageEntity pe = new PageEntity(pageIndex, Constant.PAGE_SIZE, count, totalPage);
      JSONObject data = new JSONObject();
      data.put("pe", pe);
      data.put("taoBaoGoodsBriefList", GsonUtil.toDFJson(taoBaoGoodsBriefList));
      out.print(JsonUtil.loadTrueResult(data));
   }
   @RequestMapping(value = "getTaobaoGoods", method = RequestMethod.POST)
   public void getTaoBaoGoodsBrief(long id, PrintWriter out) {
      TaoBaoGoodsBrief taobao = taoBaoGoodsBriefService.getTaoBao(id);
      if (taobao == null) {
         out.append(JsonUtil.loadFalseResult("不存在该商品"));
         return;
      }
      JSONObject data = new JSONObject();
      data.put("taobao", GsonUtil.toDFJson(taobao));
      List<String> list = new ArrayList<String>();
      list = TaoBaoUtil.getTbImg(taobao.getAuctionId() + "");
      data.put("imgList", list);
      out.append(JsonUtil.loadTrueResult(data));
   }
   @RequestMapping(value = "updateTaoBaoGoodsBrief", method = RequestMethod.POST)
   public void updateTaoBaoGoodsBrief(TaoBaoGoodsBrief tb, PrintWriter out) {
      try {
         taoBaoGoodsBriefService.updateTBGoods(tb);
      } catch (NotExistObjectException e) {
         out.append(JsonUtil.loadFalseResult(e.getMessage()));
         return;
      }
      out.append(JsonUtil.loadTrueResult("修改成功"));
   }
   @RequestMapping(value = "deleteTaoBaoGoods", method = RequestMethod.POST)
   public void deleteTaoBaoGoods(long[] ids, PrintWriter out) {
      for (long id : ids) {
         taoBaoGoodsBriefService.deleteTaoBaoGoods(id);
      }
      out.append(JsonUtil.loadTrueResult("删除成功"));
   }
   @RequestMapping(value = "addTaoBaoGoodsBrief", method = RequestMethod.POST)
   public void addTaoBaoGoodsBrief(String[] ids, PrintWriter out) {
      List<JSONObject> list = new ArrayList<JSONObject>();
      JSONObject data = null;
      for (String id : ids) {
         data = new JSONObject();
         TaoBaoGoodsBrief taoBaoGoodsBrief = null;
         try {
            taoBaoGoodsBrief = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id));
            taoBaoGoodsBrief.setUpdatetime(new Date());
            taoBaoGoodsBrief.setCreatetime(new Date());
         } catch (NumberFormatException e1) {
            e1.printStackTrace();
         } catch (TaobaoGoodsDownException e1) {
            e1.printStackTrace();
         }
         try {
            taoBaoGoodsBriefService.insertSelective(taoBaoGoodsBrief);
            // taoBaoGoodsBriefService.save(taoBaoGoodsBrief);
            data.put("id", id);
            data.put("msg", "添加成功");
         } catch (Exception e) {
            data.put("id", id);
            data.put("msg", e.getMessage());
         }
         list.add(data);
      }
      JSONObject dataAll = new JSONObject();
      dataAll.put("list", list);
      out.print(JsonUtil.loadTrueResult(dataAll));
   }
   @RequestMapping(value = "addRecommendSectionGoods", method = RequestMethod.POST)
   public void addRecommendSectionGoods(long rsid, String tbids, PrintWriter out) {
      String[] tbidStrArr = tbids.split(",");
      long[] tbidArr = StringUtil.parseLong(tbidStrArr);
      List<JSONObject> list = new ArrayList<JSONObject>();
      JSONObject data = null;
      for (long tbid : tbidArr) {
         data = new JSONObject();
         try {
            taoBaoGoodsBriefService.addRecommendSectionGoods(rsid, tbid);
            data.put("id", tbid);
            data.put("msg", "添加成功");
         } catch (NotExistObjectException e) {
            data.put("id", tbid);
            data.put("msg", e.getMessage());
         } catch (ExistObjectException e) {
            data.put("id", tbid);
            data.put("msg", e.getMessage());
         }
         list.add(data);
      }
      JSONObject dataAll = new JSONObject();
      dataAll.put("list", list);
      out.print(JsonUtil.loadTrueResult(dataAll));
   }
   @RequestMapping(value = "addClassRecommendGoods", method = RequestMethod.POST)
   public void addClassRecommendGoods(long gcid, String tbids, PrintWriter out) {
      String[] tbidStrArr = tbids.split(",");
      long[] tbidArr = StringUtil.parseLong(tbidStrArr);
      List<JSONObject> list = new ArrayList<JSONObject>();
      JSONObject data = null;
      for (long tbid : tbidArr) {
         data = new JSONObject();
         try {
            taoBaoGoodsBriefService.addClassRecommendGoods(gcid, tbid);
            data.put("id", tbid);
            data.put("msg", "添加成功");
         } catch (NotExistObjectException e) {
            data.put("id", tbid);
            data.put("msg", e.getMessage());
         } catch (ExistObjectException e) {
            data.put("id", tbid);
            data.put("msg", e.getMessage());
         }
         list.add(data);
      }
      JSONObject dataAll = new JSONObject();
      dataAll.put("list", list);
      out.print(JsonUtil.loadTrueResult(dataAll));
   }
   @RequestMapping(value = "updateAllTaoBaoGoods", method = RequestMethod.POST)
   public void updateAllTaoBaoGoods(PrintWriter out) {
      taoBaoGoodsBriefService.getUpdateTaoBao();
      out.print(JsonUtil.loadTrueResult("更新完成"));
   }
   @Resource
   private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service;
   /**
    * 
@@ -247,179 +90,38 @@
   public void queryOnSale(String callback, Integer pageIndex, Integer pageSize, String key, Long tbClassId,
         Integer startPrice, Integer endPrice, String startTkRate, String endTkRate, Integer sort, Integer istmall,
         Integer hasCoupon, Integer baoYou, Integer startDsr, Integer overseas, Integer needPrepay,
         Integer includePayRate30, Integer includeGoodRate, Integer includeRfdRate, Integer npxLevel,
         Integer includePayRate30, Integer includeGoodRate, Integer includeRfdRate, Integer npxLevel, String cid,
         PrintWriter out) {
      try {
         // 查询物料
         TaoBaoSearchResult result = getGoodsByWuLiao(pageIndex, pageSize, key, tbClassId, startPrice, endPrice,
               startTkRate, endTkRate, sort, istmall, hasCoupon, baoYou, startDsr, overseas, needPrepay,
               includePayRate30, includeGoodRate, includeRfdRate, npxLevel,cid);
         SearchFilter filter = new SearchFilter();
         // 页大小,默认20,1~100
         if (pageSize == null || pageSize < 1)
            pageSize = Constant.PAGE_SIZE;
         filter.setPageSize(pageSize);
         // 第几页,默认:1
         if (pageIndex == null || pageIndex < 1)
            pageIndex = 1;
         filter.setPage(pageIndex);
         // 查询词 key------ 不能为空---------
         if (!StringUtil.isNullOrEmpty(key))
            filter.setKey(key);
         if (tbClassId != null) {
            GoodsClass rb = goodsClassService.getGoodsClass(tbClassId);
            if (rb == null) {
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该类型已不存在,请刷新重试"));
               return;
            } else {
               // 淘宝类目id
               String taoBaoCatIds = taoBaoClassService.getTaoBaoCatIds(tbClassId);
               if (StringUtil.isNullOrEmpty(taoBaoCatIds)) {
                  JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该类型淘宝id为空,请通知相关人员进行维护"));
                  return;
               } else {
                  filter.setCateIds(taoBaoCatIds);
               }
            }
         if (result == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("未获取到淘宝商品信息"));
            return;
         }
         // 查询条件和类目id不能同时为空
         if (StringUtil.isNullOrEmpty(key) && tbClassId == null) {
            filter.setKey("女装");
         }
         // 折扣价范围下限
         if (startPrice != null)
            filter.setStartPrice(new BigDecimal(startPrice));
         // 折扣价范围上限
         if (endPrice != null && endPrice > 0)
            filter.setEndPrice(new BigDecimal(endPrice));
         // 淘客佣金比率下限 如:1234表示12.34%
         if (!StringUtil.isNullOrEmpty(startTkRate)) {
            int tkRate = (int) (Float.parseFloat(startTkRate) * 100);
            filter.setStartTkRate(tkRate);
         }
         // 淘客佣金比率上限 如:1234表示12.34%
         if (!StringUtil.isNullOrEmpty(endTkRate)) {
            int tkRate = (int) (Float.parseFloat(endTkRate) * 100);
            filter.setEndTkRate(tkRate);
         }
         // 排序字段
         // 销量(total_sales)淘客佣金比率(tk_rate)累计推广量(tk_total_sales)总支出佣金(tk_total_commi)
         if (sort != null)
            filter.setSort(sort);
         // 查询天猫 1 true
         if (istmall != null && istmall == 1)
            filter.setTmall(true);
         // 是否有券 1 true
         if (hasCoupon != null && hasCoupon == 1)
            filter.setQuan(1);
         // 是否包邮,true表示包邮,空或false表示不限
         if (baoYou != null && baoYou == 1) {
            filter.setBaoYou(true);
            // filter.setIp("113.251.22.10");// 重庆
            filter.setIp("218.72.111.105");// 杭州
         }
         // 店铺dsr评分
         if (startDsr != null && startDsr >= 0 && startDsr <= 50000)
            filter.setStartDsr(startDsr);
         // 是否海外商品
         if (overseas != null && overseas == 1)
            filter.setOverseas(true);
         // 是否加入消费者保障,
         if (needPrepay != null && needPrepay == 1)
            filter.setNeedPrepay(true);
         // 成交转化是否高于行业均值
         if (includePayRate30 != null && includePayRate30 == 1)
            filter.setIncludePayRate30(true);
         // 好评率是否高于行业均值
         if (includeGoodRate != null && includeGoodRate == 1)
            filter.setIncludeGoodRate(true);
         // 退款率是否低于行业均值
         if (includeRfdRate != null && includeRfdRate == 1)
            filter.setIncludeRfdRate(true);
         // 牛皮癣程度,取值:1:不限,2:无,3:轻微
         if (npxLevel != null && npxLevel > 0 && npxLevel < 4)
            filter.setNpxLevel(npxLevel);
         boolean islink = false;
         Long auctionId = null;
         /* 判断是否是商品链接搜索 */
         if (key != null && key.contains("//") && key.contains("&")) {
            String[] keyArray = key.split("\\?")[1].split("&");
            if (keyArray != null && keyArray.length > 0) {
               String id = keyArray[0].replace("id=", "").trim();
               if (!StringUtil.isNullOrEmpty(id)) {
                  auctionId = Long.parseLong(id);
                  islink = true;
               }
            }
         }
         TaoBaoSearchResult result = null;
         List<TaoBaoGoodsBrief> taoBaoGoodsBriefs = null;
         if (!islink) {
            /* 淘宝物料搜索 */
            result = TaoKeApiUtil.searchWuLiao(filter);
            if (result == null) {
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("未获取到淘宝商品信息"));
               return;
            } else {
               taoBaoGoodsBriefs = result.getTaoBaoGoodsBriefs();
            }
         } else {
            /* 商品链接搜索 */
            TaoBaoGoodsBrief searchGoodsDetail = TaoKeApiUtil.searchGoodsDetail(auctionId);
            if (searchGoodsDetail == null) {
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("未获取到淘宝商品信息"));
               return;
            } else {
               taoBaoGoodsBriefs = new ArrayList<>();
               taoBaoGoodsBriefs.add(searchGoodsDetail);
               result = new TaoBaoSearchResult();
               result.setTaoBaoGoodsBriefs(taoBaoGoodsBriefs);
               PageEntity pageEntity = new PageEntity(pageIndex, pageSize, 0, 0);
               result.setPageEntity(pageEntity);
            }
         }
         if (taoBaoGoodsBriefs == null || taoBaoGoodsBriefs.size() == 0) {
         List<TaoBaoGoodsBrief> listTaoBaoGoods = result.getTaoBaoGoodsBriefs();
         if (listTaoBaoGoods == null || listTaoBaoGoods.size() == 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("未查询到淘宝商品信息"));
            return;
         }
         // 插入商品集合
         List<Long> listAuctionId = new ArrayList<Long>();
         for (TaoBaoGoodsBrief goodsBrief : taoBaoGoodsBriefs) {
         for (TaoBaoGoodsBrief goodsBrief : listTaoBaoGoods) {
            listAuctionId.add(goodsBrief.getAuctionId());
         }
         // 验证是否存在数据库
         List<QualityFactory> listHas = selectionGoodsService.listQueryByAuctionId(listAuctionId);
         List<QualityFactory> listHas = qualityFactoryService.listQueryByAuctionId(listAuctionId);
         List<Map<String, Object>> listmap = new ArrayList<Map<String, Object>>();
         for (TaoBaoGoodsBrief taoBaoGoodsBrief : taoBaoGoodsBriefs) {
         for (TaoBaoGoodsBrief taoBaoGoodsBrief : listTaoBaoGoods) {
            taoBaoGoodsBrief.setId(null);
@@ -514,14 +216,261 @@
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
         // 插入本地数据-淘宝数据记录
         taoBaoGoodsBriefRecordService.insertBatch(taoBaoGoodsBriefs);
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("查询异常"));
         e.printStackTrace();
      }
   }
   /**
    * 加入精选库商品
    *
    * @param callback
    * @param pageIndex
    * @param key
    *            关键词
    * @param startPrice
    *            价格小值
    * @param endPrice
    *            价格大值
    * @param startTkRate
    *            佣金小值
    * @param endTkRate
    *            佣金大值
    * @param sort
    *            排序
    * @param out
    */
   @RequestMapping(value = "addTBGoodsFactory")
   public void addTBGoodsFactory(String callback, Integer pageIndex, Integer pageSize, String key, Long tbClassId,
         Integer startPrice, Integer endPrice, String startTkRate, String endTkRate, Integer sort, Integer istmall,
         Integer hasCoupon, Integer baoYou, Integer startDsr, Integer overseas, Integer needPrepay,
         Integer includePayRate30, Integer includeGoodRate, Integer includeRfdRate, Integer npxLevel,
         String auctionIds, String lableNames, HttpServletRequest request, PrintWriter out) {
      try {
         if (StringUtil.isNullOrEmpty(auctionIds)) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("请选择正确的商品入库")));
            return;
         }
         Gson gson2 = new Gson();
         List<Long> listTaoBaoId = gson2.fromJson(auctionIds, new TypeToken<ArrayList<Long>>() {
         }.getType());
         if (listTaoBaoId == null || listTaoBaoId.size() == 0) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("请选择正确的商品入库")));
            return;
         }
         // 查询物料
         TaoBaoSearchResult result = getGoodsByWuLiao(pageIndex, pageSize, key, tbClassId, startPrice, endPrice,
               startTkRate, endTkRate, sort, istmall, hasCoupon, baoYou, startDsr, overseas, needPrepay,
               includePayRate30, includeGoodRate, includeRfdRate, npxLevel,null);
         if (result == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("未获取到淘宝商品信息"));
            return;
         }
         List<TaoBaoGoodsBrief> listTaoBaoGoods = result.getTaoBaoGoodsBriefs();
         if (listTaoBaoGoods == null || listTaoBaoGoods.size() == 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("未查询到淘宝商品信息"));
            return;
         }
         List<TaoBaoGoodsBrief> listAddGoods = new ArrayList<TaoBaoGoodsBrief>();
         for (TaoBaoGoodsBrief taoBaoGoodsBrief : listTaoBaoGoods) {
            Long auctionId = taoBaoGoodsBrief.getAuctionId();
            if (listTaoBaoId.contains(auctionId)) {
               listAddGoods.add(taoBaoGoodsBrief);
               listTaoBaoId.remove(auctionId);
            }
         }
         if (listTaoBaoId != null && listTaoBaoId.size() > 0) {
            for (Long auctionId : listTaoBaoId) {
               /* 根据auctionId 获取淘宝商品 */
               TaoBaoGoodsBrief goodsBrief = TaoKeApiUtil.searchGoodsDetail(auctionId);
               if (goodsBrief != null) {
                  listAddGoods.add(goodsBrief);
               }
            }
         }
         AdminUser admin = (AdminUser) request.getSession().getAttribute(Constant.SESSION_ADMIN);
         // 插入精选库
         qualityFactoryService.addBatchTaoBaoGoods(listAddGoods, lableNames, admin);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("加入成功"));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, e.getMessage()));
         e.printStackTrace();
      }
   }
   /**
    * 根据条件淘宝商品查询
    *
    * @param pageIndex
    * @param pageSize
    * @param key
    * @param tbClassId
    * @param startPrice
    * @param endPrice
    * @param startTkRate
    * @param endTkRate
    * @param sort
    * @param istmall
    * @param hasCoupon
    * @param baoYou
    * @param startDsr
    * @param overseas
    * @param needPrepay
    * @param includePayRate30
    * @param includeGoodRate
    * @param includeRfdRate
    * @param npxLevel
    * @throws Exception
    */
   public TaoBaoSearchResult getGoodsByWuLiao(Integer pageIndex, Integer pageSize, String key, Long tbClassId,
         Integer startPrice, Integer endPrice, String startTkRate, String endTkRate, Integer sort, Integer istmall,
         Integer hasCoupon, Integer baoYou, Integer startDsr, Integer overseas, Integer needPrepay,
         Integer includePayRate30, Integer includeGoodRate, Integer includeRfdRate, Integer npxLevel, String cids)
         throws Exception {
      SearchFilter filter = new SearchFilter();
      filter.setPageSize(pageSize);
      filter.setPage(pageIndex);
      // 查询词 key------ 不能为空---------
      if (!StringUtil.isNullOrEmpty(key))
         filter.setKey(key);
      if (tbClassId != null) {
         GoodsClass rb = goodsClassService.getGoodsClass(tbClassId);
         if (rb == null) {
            throw new Exception("该类型已不存在,请刷新重试");
         }
         // 淘宝类目id
         String taoBaoCatIds = taoBaoClassService.getTaoBaoCatIds(tbClassId);
         if (StringUtil.isNullOrEmpty(taoBaoCatIds)) {
            throw new Exception("该类型淘宝id为空,请通知相关人员进行维护");
         } else {
            filter.setCateIds(taoBaoCatIds);
         }
      }
      if (!StringUtil.isNullOrEmpty(cids))
         filter.setCateIds(cids);
      // 查询条件和类目id不能同时为空
      if (StringUtil.isNullOrEmpty(key) && tbClassId == null) {
         filter.setKey("女装");
      }
      // 折扣价范围下限
      if (startPrice != null) {
         filter.setStartPrice(new BigDecimal(startPrice));
      }
      // 折扣价范围上限
      if (endPrice != null && endPrice > 0) {
         filter.setEndPrice(new BigDecimal(endPrice));
      }
      // 淘客佣金比率下限 如:1234表示12.34%
      if (!StringUtil.isNullOrEmpty(startTkRate)) {
         int tkRate = (int) (Float.parseFloat(startTkRate) * 100);
         filter.setStartTkRate(tkRate);
      }
      // 淘客佣金比率上限 如:1234表示12.34%
      if (!StringUtil.isNullOrEmpty(endTkRate)) {
         int tkRate = (int) (Float.parseFloat(endTkRate) * 100);
         filter.setEndTkRate(tkRate);
      }
      // 排序字段
      // 销量(total_sales)淘客佣金比率(tk_rate)累计推广量(tk_total_sales)总支出佣金(tk_total_commi)
      if (sort != null) {
         filter.setSort(sort);
      }
      // 查询天猫 1 true
      if (istmall != null && istmall == 1) {
         filter.setTmall(true);
      }
      // 是否有券 1 true
      if (hasCoupon != null && hasCoupon == 1) {
         filter.setQuan(1);
      }
      // 是否包邮,true表示包邮,空或false表示不限
      if (baoYou != null && baoYou == 1) {
         filter.setBaoYou(true);
         // filter.setIp("113.251.22.10");// 重庆
         filter.setIp("218.72.111.105");// 杭州
      }
      // 店铺dsr评分
      if (startDsr != null && startDsr >= 0 && startDsr <= 50000) {
         filter.setStartDsr(startDsr);
      }
      // 是否海外商品
      if (overseas != null && overseas == 1) {
         filter.setOverseas(true);
      }
      // 是否加入消费者保障,
      if (needPrepay != null && needPrepay == 1) {
         filter.setNeedPrepay(true);
      }
      // 成交转化是否高于行业均值
      if (includePayRate30 != null && includePayRate30 == 1) {
         filter.setIncludePayRate30(true);
      }
      // 好评率是否高于行业均值
      if (includeGoodRate != null && includeGoodRate == 1) {
         filter.setIncludeGoodRate(true);
      }
      // 退款率是否低于行业均值
      if (includeRfdRate != null && includeRfdRate == 1) {
         filter.setIncludeRfdRate(true);
      }
      // 牛皮癣程度,取值:1:不限,2:无,3:轻微
      if (npxLevel != null && npxLevel > 0 && npxLevel < 4) {
         filter.setNpxLevel(npxLevel);
      }
      boolean islink = false;
      Long auctionId = null;
      /* 判断是否是商品链接搜索 */
      if (key != null && key.contains("//") && key.contains("&")) {
         String[] keyArray = key.split("\\?")[1].split("&");
         if (keyArray != null && keyArray.length > 0) {
            String id = keyArray[0].replace("id=", "").trim();
            if (!StringUtil.isNullOrEmpty(id)) {
               auctionId = Long.parseLong(id);
               islink = true;
            }
         }
      }
      TaoBaoSearchResult result = null;
      if (!islink) {
         /* 淘宝物料搜索 */
         result = TaoKeApiUtil.searchWuLiao(filter);
      } else {
         /* 商品链接搜索 */
         TaoBaoGoodsBrief searchGoodsDetail = TaoKeApiUtil.searchGoodsDetail(auctionId);
         if (searchGoodsDetail != null) {
            List<TaoBaoGoodsBrief> listGoods = new ArrayList<>();
            listGoods.add(searchGoodsDetail);
            result = new TaoBaoSearchResult();
            result.setTaoBaoGoodsBriefs(listGoods);
            PageEntity pageEntity = new PageEntity(pageIndex, pageSize, 1, 1);
            result.setPageEntity(pageEntity);
         }
      }
      return result;
   }
   /**
@@ -721,7 +670,7 @@
                     if (goodsBrief != null) {
                        Long id = goodsBrief.getId();
                        // 查询精选库
                        Long has = selectionGoodsService.queryCountByGoodsId(id);
                        Long has = qualityFactoryService.queryCountByGoodsId(id);
                        if (has != null && has > 0l) {
                           existence = 1; // 存在商品中
@@ -746,9 +695,6 @@
            data.put("listGoods", gson.toJson(listmap));
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
            // 插入本地数据-淘宝数据记录
            taoBaoGoodsBriefRecordService.insertBatch(taoBaoGoodsBriefs);
         }
      } catch (Exception e) {
@@ -878,7 +824,7 @@
         }
         // 验证是否存在数据库
         List<QualityFactory> listHas = selectionGoodsService.listQueryByAuctionId(listAuctionId);
         List<QualityFactory> listHas = qualityFactoryService.listQueryByAuctionId(listAuctionId);
         List<Map<String, Object>> listmap = new ArrayList<Map<String, Object>>();
@@ -949,14 +895,117 @@
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
         // 插入本地数据-淘宝数据记录
         taoBaoGoodsBriefRecordService.insertBatch(taoBaoGoodsBriefs);
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("查询异常"));
         e.printStackTrace();
      }
   }
   private List<Map<String, Object>> filterTaoBaoGoodsWithQulity(List<TaoBaoGoodsBrief> goodsList) {
      // 插入商品集合
      List<Long> listAuctionId = new ArrayList<Long>();
      for (TaoBaoGoodsBrief goodsBrief : goodsList) {
         listAuctionId.add(goodsBrief.getAuctionId());
      }
      // 验证是否存在数据库
      List<QualityFactory> listHas = qualityFactoryService.listQueryByAuctionId(listAuctionId);
      List<Map<String, Object>> listmap = new ArrayList<Map<String, Object>>();
      for (TaoBaoGoodsBrief taoBaoGoodsBrief : goodsList) {
         taoBaoGoodsBrief.setId(null);
         Map<String, Object> map = new HashMap<String, Object>();
         map.put("pictUrl", taoBaoGoodsBrief.getPictUrl());
         map.put("title", taoBaoGoodsBrief.getTitle());
         map.put("auctionId", taoBaoGoodsBrief.getAuctionId());
         map.put("auctionUrl", taoBaoGoodsBrief.getAuctionUrl());
         map.put("zkPrice", taoBaoGoodsBrief.getZkPrice());
         map.put("biz30day", taoBaoGoodsBrief.getBiz30day());
         map.put("couponInfo", taoBaoGoodsBrief.getCouponInfo());
         map.put("couponTotalCount", taoBaoGoodsBrief.getCouponTotalCount());
         map.put("couponLeftCount", taoBaoGoodsBrief.getCouponLeftCount());
         map.put("couponEffectiveEndTime", taoBaoGoodsBrief.getCouponEffectiveEndTime());
         map.put("tkRate", taoBaoGoodsBrief.getTkRate());
         // 来源 0 无 1淘宝 2 京东
         map.put("goodsSource", 1);
         /* 券后价--计算 */
         BigDecimal couponPrice = TaoBaoUtil.getAfterUseCouplePrice(taoBaoGoodsBrief);
         map.put("couponPrice", couponPrice);
         /* 预计收益: 公司、用户 */
         BigDecimal tkRate = taoBaoGoodsBrief.getTkRate();
         BigDecimal zkPrice = taoBaoGoodsBrief.getZkPrice();
         BigDecimal profit = MoneyBigDecimalUtil.mul(tkRate, zkPrice);
         // 计算结果
         BigDecimal estimateProfit = MoneyBigDecimalUtil.div(profit, new BigDecimal("100"));
         // 预计收益
         map.put("estimateProfit", estimateProfit);
         int existence = 0;
         /* 查询商品是否已存在商品精选库中 */
         Long localAuctionId = taoBaoGoodsBrief.getAuctionId();
         if (localAuctionId != null) {
            if (listHas != null && listHas.size() > 0) {
               for (QualityFactory selectionGoods : listHas) {
                  TaoBaoGoodsBrief hasgoodsBrief = selectionGoods.getTaoBaoGoodsBrief();
                  Long hasId = hasgoodsBrief.getAuctionId();
                  if (localAuctionId.equals(hasId) || localAuctionId == hasId) {
                     existence = 1; // 存在商品中
                  }
               }
            }
         }
         map.put("isExistence", existence);
         listmap.add(map);
      }
      return listmap;
   }
   @RequestMapping(value = "searchDaTaoKe")
   public void searchDaTaoKe(String callback, Integer pageIndex, Integer pageSize, String key, Long cid,
         PrintWriter out) {
      try {
         key = StringUtil.isNullOrEmpty(key) ? "" : key;
         List<DaTaoKeDetailV2> list = daTaoKeGoodsDetailV2Service.listSearchByTitleWithCid(key, cid, pageIndex,
               pageSize);
         long count = daTaoKeGoodsDetailV2Service.countSearchByTitleWithCid(key, cid);
         List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
         for (DaTaoKeDetailV2 detail : list) {
            goodsList.add(TaoBaoUtil.convert(detail));
         }
         List<Map<String, Object>> listmap = filterTaoBaoGoodsWithQulity(goodsList);
         PageEntity pe = new PageEntity(pageIndex, pageSize, (int) count,(int)(count%pageSize==0?count/pageSize:count/pageSize+1));
         JSONObject data = new JSONObject();
         GsonBuilder gsonBuilder = new GsonBuilder();
         gsonBuilder.serializeNulls(); // 重点
         Gson gson = gsonBuilder.setDateFormat("yyyy-MM-dd").create();
         data.put("pe", pe);
         data.put("listGoods", gson.toJson(listmap));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("查询异常"));
         e.printStackTrace();
      }
   }
   @RequestMapping(value = "getQiangGou")
@@ -994,7 +1043,7 @@
         }
         // 验证是否存在数据库
         List<QualityFactory> listHas = selectionGoodsService.listQueryByAuctionId(listAuctionId);
         List<QualityFactory> listHas = qualityFactoryService.listQueryByAuctionId(listAuctionId);
         List<Map<String, Object>> listmap = new ArrayList<Map<String, Object>>();
@@ -1049,7 +1098,6 @@
            }
            map.put("isExistence", existence);
            listmap.add(map);
         }
@@ -1064,10 +1112,6 @@
         data.put("listGoods", gson.toJson(listmap));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
         // // 插入本地数据-淘宝数据记录
         taoBaoGoodsBriefRecordService.insertBatch(taoBaoGoodsBriefs);
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("查询异常"));
         e.printStackTrace();