admin
2025-02-25 30d8e227e8d823b6c38c3b9c90ac2df03b63befe
fanli/src/main/java/com/yeshi/fanli/service/impl/lable/QualityGoodsServiceImpl.java
@@ -1,403 +1,453 @@
package com.yeshi.fanli.service.impl.lable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.taobao.TbImgUtil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.yeshi.fanli.dao.mybatis.TaoBaoClassRelationMapper;
import com.yeshi.fanli.dao.mybatis.lable.LabelGoodsMapper;
import com.yeshi.fanli.dao.mybatis.lable.QualityFactoryMapper;
import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoGoodsBriefMapper;
import com.yeshi.fanli.entity.bus.lable.Label;
import com.yeshi.fanli.entity.bus.lable.LabelGoods;
import com.yeshi.fanli.entity.bus.lable.QualityFactory;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.service.inter.goods.TaoBaoGoodsBriefService;
import com.yeshi.fanli.service.inter.lable.LabelService;
import com.yeshi.fanli.service.inter.lable.QualityGoodsService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailService;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import net.sf.json.JSONArray;
@Service
public class QualityGoodsServiceImpl implements QualityGoodsService {
   @Resource
   private RedisManager redisManager;
   @Resource
   private QualityFactoryMapper qualityFactoryMapper;
   @Resource
   private TaoBaoGoodsBriefService taoBaoGoodsBriefService;
   @Resource
   private LabelGoodsMapper labelGoodsMapper;
   @Resource
   private LabelService labelService;
   @Resource
   private TaoBaoGoodsBriefMapper taoBaoGoodsBriefMapper;
   @Resource
   private TaoBaoUnionConfigService taoBaoUnionConfigService;
   @Resource
   private TaoBaoClassRelationMapper taoBaoClassRelationMapper;
   @Resource
   private DaTaoKeGoodsDetailService daTaoKeGoodsDetailService;
   @Override
   @Cacheable(value = "qualityCache", key = "'listQueryByCouponAmount-'+#start+'-'+#key+'-'+#endAmount+'-'+#startPropor")
   public List<QualityFactory> listQueryByCouponAmount(long start, int count, Integer key, Integer endAmount,
         Integer startPropor) {
      return qualityFactoryMapper.listQueryByCouponAmount(start, count, key, endAmount, startPropor);
   }
   @Override
   @Cacheable(value = "qualityCache", key = "'countQueryByCouponAmount-'+#key+'-'+#endAmount+'-'+#startPropor")
   public long countQueryByCouponAmount(Integer key, Integer endAmount, Integer startPropor) {
      return qualityFactoryMapper.countQueryByCouponAmount(key, endAmount, startPropor);
   }
   @Override
   @Cacheable(value = "qualityCache", key = "'listQueryByFlashSale-'+#start")
   public List<QualityFactory> listQueryByFlashSale(long start, int count) {
      return qualityFactoryMapper.listQueryByFlashSale(start, count);
   }
   @Override
   // @Cacheable(value = "qualityCache",key="'countQueryByFlashSale-'")
   public long countQueryByFlashSale() {
      return qualityFactoryMapper.countQueryByFlashSale();
   }
   @Override
   public List<QualityFactory> listFlashSaleRandGoods() {
      return qualityFactoryMapper.listFlashSaleRandGoods();
   }
   /**
    * 小金额查询:9.9/19.9/29.9/49.9
    *
    * @param start
    * @param count
    * @param key
    * @param classId
    *            分类id
    * @param labId
    *            标签id
    * @return
    */
   @Override
   @Cacheable(value = "quality9K9Cache", key = "'get9k9ClassGoods-'+#start+'-'+#biz30day+'-'+#zkPrice+'-'+#minQuanPrice+'-'+#maxQuanPrice+'-'+#cids")
   public List<QualityFactory> get9k9ClassGoods(long start, int count, Integer biz30day, BigDecimal zkPrice,
         BigDecimal minQuanPrice, BigDecimal maxQuanPrice, String cids) {
      return qualityFactoryMapper.get9k9ClassGoods(start, count, biz30day, zkPrice, minQuanPrice, maxQuanPrice, cids);
   }
   /**
    * 对应小金额查询:9.9/19.9/29.9/49.9
    */
   @Override
   @Cacheable(value = "quality9K9Cache", key = "'count9k9ClassGoods-'+#biz30day+'-'+#zkPrice+'-'+#minQuanPrice+'-'+#maxQuanPrice+'-'+#cids")
   public long count9k9ClassGoods(Integer biz30day, BigDecimal zkPrice, BigDecimal minQuanPrice,
         BigDecimal maxQuanPrice, String cids) {
      return qualityFactoryMapper.count9k9ClassGoods(biz30day, zkPrice, minQuanPrice, maxQuanPrice, cids);
   }
   /**
    * 查询标签
    *
    * @param start
    * @param count
    * @param key
    * @param labId
    * @return
    */
   public List<QualityFactory> listQueryByKeyAndlabIDs(long start, int count, String key, List<Long> listId,
         Integer sort, Long systemCid, Integer hasQuan, Integer userType, Integer biz30day, Integer startprice,
         Integer endprice) {
      return qualityFactoryMapper.listQueryByKeyAndlabIDs(start, count, key, listId, sort, systemCid, hasQuan,
            userType, biz30day, startprice, endprice);
   }
   public long countQueryKeyAndlabIDs(String key, List<Long> listId, Long systemCid, Integer hasQuan, Integer userType,
         Integer biz30day, Integer startprice, Integer endprice) {
      return qualityFactoryMapper.countQueryKeyAndlabIDs(key, listId, systemCid, hasQuan, userType, biz30day,
            startprice, endprice);
   }
   /**
    * 关键词搜索
    *
    * @param start
    * @param count
    * @param key
    * @param labId
    * @return
    */
   @Override
   public List<QualityFactory> listQueryByKey(long start, int count, String key, Integer sort, Long systemCid,
         Integer hasQuan, Integer userType, Integer biz30day, Integer startprice, Integer endprice) {
      return qualityFactoryMapper.listQueryByKey(start, count, key, sort, systemCid, hasQuan, userType, biz30day,
            startprice, endprice);
   }
   public long countQueryByKey(String key, Long systemCid, Integer hasQuan, Integer userType, Integer biz30day,
         Integer startprice, Integer endprice) {
      return qualityFactoryMapper.countQueryByKey(key, systemCid, hasQuan, userType, biz30day, startprice, endprice);
   }
   /**
    * 一级分类查询精选库数据
    *
    * @param start
    * @param count
    * @param key
    * @param labId
    * @return
    */
   @Override
   @Cacheable(value = "qualityCache", key = "'listQueryByClassId-'+#start+'-'+#cid")
   public List<QualityFactory> listQueryByClassId(long start, int count, Long cid) {
      List<QualityFactory> list = qualityFactoryMapper.listQuery(start, count, null, cid, null, null, 1);
      List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
      for (QualityFactory qf : list)
         goodsList.add(qf.getTaoBaoGoodsBrief());
      goodsList = daTaoKeGoodsDetailService.filterTaoBaoGoods(goodsList);// 过滤大淘客标题
      for (int i = 0; i < list.size(); i++) {
         if (i < goodsList.size())
            list.get(i).setTaoBaoGoodsBrief(goodsList.get(i));
      }
      return list;
   }
   @Override
   @Cacheable(value = "qualityCache", key = "'countQueryClassId-'+#cid")
   public long countQueryClassId(Long cid) {
      return qualityFactoryMapper.countQuery(null, cid, null, null, 1);
   }
   @Override
   @Cacheable(value = "qualityCache", key = "'listQueryByRebateAmount-'+#start+'-'+#proportion+'-'+#endAmount+'-'+#endAmount+'-'+#tkRate")
   public List<QualityFactory> listQueryByRebateAmount(long start, int count, String proportion, Integer startAmount,
         Integer endAmount, double tkRate) {
      return qualityFactoryMapper.listQueryByRebateAmount(start, count, proportion, startAmount, endAmount, tkRate);
   }
   @Override
   @Cacheable(value = "qualityCache", key = "'countQueryByRebateAmount-'+#proportion+'-'+#endAmount+'-'+#endAmount+'-'+#tkRate")
   public long countQueryByRebateAmount(String proportion, Integer startAmount, Integer endAmount, double tkRate) {
      return qualityFactoryMapper.countQueryByRebateAmount(proportion, startAmount, endAmount, tkRate);
   }
   @Override
   // @Cacheable(value = "qualityCache",key="'queryToCouponColumn-'+#start")
   @Cacheable(value = "taoBaoCouponCache", key = "'queryToCouponColumn'+#start")
   public List<QualityFactory> queryToCouponColumn(long start, int count) {
      return qualityFactoryMapper.queryToCouponColumn(start, count);
   }
   @Override
   // @Cacheable(value = "qualityCache",key="'countQueryToCouponColumn'")
   @Cacheable(value = "taoBaoCouponCache", key = "'countQueryToCouponColumn'")
   public long countQueryToCouponColumn() {
      return qualityFactoryMapper.countQueryToCouponColumn();
   }
   /**
    * 首页最底部@商品信息流
    */
   @Override
   public List<QualityFactory> listRecommend(long start, int count, Double proportion, Integer commision,
         Integer couponAmount, double tkRate, Double couponRatio) {
      return qualityFactoryMapper.listRecommendToIndex(start, count, proportion, commision, couponAmount, tkRate,
            couponRatio);
   }
   @Override
   public long countRecommend(Double proportion, Integer commision, Integer couponAmount, double tkRate,
         Double couponRatio) {
      return qualityFactoryMapper.countRecommendToIndex(proportion, commision, couponAmount, tkRate, couponRatio);
   }
   @Override
   public List<QualityFactory> listRecommendBykey(long start, int count, String key, Integer hasQuan, Integer userType,
         Double startprice, Double endprice, Double startTkRate, Double endTkRate, Integer sort) {
      return qualityFactoryMapper.listRecommendBykey(start, count, key, hasQuan, userType, startprice, endprice,
            startTkRate, endTkRate, sort);
   }
   @Override
   public long countRecommendBykey(String key, Integer hasQuan, Integer userType, Double startprice, Double endprice,
         Double startTkRate, Double endTkRate) {
      return qualityFactoryMapper.countRecommendBykey(key, hasQuan, userType, startprice, endprice, startTkRate,
            endTkRate);
   }
   /**
    * 首页最底部@商品信息流
    */
   @Override
   @Cacheable(value = "qualityCache", key = "'listQueryToRecommend-'+#start+'-'+#proportion")
   public JSONArray getRecommendToIndex(long start, int count, String proportion) {
      // 返利金额2元以上;
      Integer commision = 2;
      // 优惠券面额高于5元以上
      Integer couponAmount = 5;
      // 佣金比例高的:5%以上;
      double tkRate = 5.0;
      // 优惠率高于10%以上(优惠率=优惠券面额/商品在售价*100%)
      Double couponRatio = 10.0;
      Double pop = 50.0;
      if (!StringUtil.isNullOrEmpty(proportion)) {
         pop = Double.parseDouble(proportion);
      }
      List<QualityFactory> listQuery = listRecommend(start, count, pop, commision, couponAmount, tkRate, couponRatio);
      if (listQuery == null || listQuery.size() == 0) {
         return null;
      }
      JSONArray array = new JSONArray();
      Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create();
      // 遍历列表数据
      //
      List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
      for (QualityFactory quality : listQuery) {
         if (quality.getTaoBaoGoodsBrief() != null)
            goodsList.add(quality.getTaoBaoGoodsBrief());
      }
      try {
         goodsList = daTaoKeGoodsDetailService.filterTaoBaoGoods(goodsList);
      } catch (Exception e) {
      }
      for (TaoBaoGoodsBrief taoBaoGoodsBrief : goodsList) {
         int biz30day = taoBaoGoodsBrief.getBiz30day();
         if (biz30day >= 10000) {
            double sales = biz30day;
            String salesCountMidea = String.format("%.1f", sales / 10000);
            taoBaoGoodsBrief.setSalesCount(salesCountMidea + "万");
         } else {
            taoBaoGoodsBrief.setSalesCount(biz30day + "");
         }
         // 改变图片尺寸
         String pictUrl = taoBaoGoodsBrief.getPictUrl();
         if (!StringUtil.isNullOrEmpty(pictUrl) && !pictUrl.contains("320x320")) {
            taoBaoGoodsBrief.setPictUrl(TbImgUtil.getTBSize320Img(pictUrl));
         }
         array.add(gson.toJson(TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion, null)));
      }
      return array;
   }
   @Override
   @Cacheable(value = "qualityCache", key = "'countRecommendToIndex-'+#proportion")
   public long countRecommendToIndex(String proportion) {
      // 返利金额2元以上;
      Integer commision = 2;
      // 优惠券面额高于5元以上
      Integer couponAmount = 5;
      // 佣金比例高的:5%以上;
      double tkRate = 5.0;
      // 优惠率高于10%以上(优惠率=优惠券面额/商品在售价*100%)
      Double couponRatio = 10.0;
      Double pop = 50.0;
      if (!StringUtil.isNullOrEmpty(proportion)) {
         pop = Double.parseDouble(proportion);
      }
      return countRecommend(pop, commision, couponAmount, tkRate, couponRatio);
   }
   @Override
   public List<QualityFactory> recommendByAuctionId(Long auctionId) {
      List<Long> list = new ArrayList<Long>();
      list.add(auctionId);
      List<QualityFactory> listTaoBaoGoods = qualityFactoryMapper.listQueryByAuctionId(list);
      if (listTaoBaoGoods == null || listTaoBaoGoods.size() == 0) {
         return null;
      }
      QualityFactory qualityFactory = listTaoBaoGoods.get(0);
      TaoBaoGoodsBrief goodsBrief = qualityFactory.getTaoBaoGoodsBrief();
      if (goodsBrief == null) {
         return null;
      }
      List<LabelGoods> listLab = labelGoodsMapper.queryByGoodsId(0, 200, goodsBrief.getId());
      if (listLab == null || listLab.size() == 0) {
         return null;
      }
      // 标签id
      List<Long> listId = new ArrayList<Long>();
      for (LabelGoods labelGoods : listLab) {
         Label label = labelGoods.getLabel();
         if (label != null) {
            listId.add(label.getId());
         }
      }
      if (listId.size() == 0) {
         return null;
      }
      return qualityFactoryMapper.listQueryBylabIDs(0, 10, listId, goodsBrief.getId(), qualityFactory.getSystemCid());
   }
   @Override
   public List<QualityFactory> listFreeGoods(long start, int count) {
      return qualityFactoryMapper.listFreeGoods(start, count);
   }
   @Override
   public long countFreeGoods() {
      return qualityFactoryMapper.countFreeGoods();
   }
   @Override
   public List<QualityFactory> listByShopId(long start, int count, Long shopId) {
      return qualityFactoryMapper.listByShopId(start, count, shopId);
   }
   @Override
   public long countByShopId(Long shopId) {
      return qualityFactoryMapper.countByShopId(shopId);
   }
   @Override
   public List<QualityFactory> listQueryEverydayRob(long start, int count, BigDecimal zkPrice, BigDecimal minQuanPrice,
         BigDecimal maxQuanPrice) {
      return qualityFactoryMapper.listQueryEverydayRob(start, count, zkPrice, minQuanPrice, maxQuanPrice);
   }
   @Override
   public long countQueryEverydayRob(BigDecimal zkPrice, BigDecimal minQuanPrice, BigDecimal maxQuanPrice) {
      return qualityFactoryMapper.countQueryEverydayRob(zkPrice, minQuanPrice, maxQuanPrice);
   }
}
package com.yeshi.fanli.service.impl.lable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import com.yeshi.fanli.entity.SystemEnum;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.taobao.TbImgUtil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.yeshi.fanli.dao.mybatis.lable.LabelGoodsMapper;
import com.yeshi.fanli.dao.mybatis.lable.QualityFactoryMapper;
import com.yeshi.fanli.dto.GoodsMoneyConfigParamsDTO;
import com.yeshi.fanli.entity.bus.lable.Label;
import com.yeshi.fanli.entity.bus.lable.LabelGoods;
import com.yeshi.fanli.entity.bus.lable.QualityFactory;
import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.service.inter.lable.QualityGoodsService;
import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService;
import com.yeshi.goods.facade.service.DaTaoKeGoodsDetailV2Service;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
import net.sf.json.JSONArray;
@Service
public class QualityGoodsServiceImpl implements QualityGoodsService {
   @Resource
   private QualityFactoryMapper qualityFactoryMapper;
   @Resource
   private LabelGoodsMapper labelGoodsMapper;
   @Resource
   private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service;
   @Resource
   private HongBaoManageService hongBaoManageService;
   @Resource
   private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
   @Resource
   private TaoBaoGoodsUpdateService taoBaoGoodsUpdateService;
   @Override
   @Cacheable(value = "qualityCache", key = "'listQueryByCouponAmount-'+#start+'-'+#key+'-'+#endAmount+'-'+#startPropor")
   public List<QualityFactory> listQueryByCouponAmount(long start, int count, Integer key, Integer endAmount,
         Integer startPropor) {
      return qualityFactoryMapper.listQueryByCouponAmount(start, count, key, endAmount, startPropor);
   }
   @Override
   @Cacheable(value = "qualityCache", key = "'countQueryByCouponAmount-'+#key+'-'+#endAmount+'-'+#startPropor")
   public long countQueryByCouponAmount(Integer key, Integer endAmount, Integer startPropor) {
      return qualityFactoryMapper.countQueryByCouponAmount(key, endAmount, startPropor);
   }
   @Override
   @Cacheable(value = "qualityCache", key = "'listQueryByFlashSale-'+#start")
   public List<QualityFactory> listQueryByFlashSale(long start, int count) {
      return qualityFactoryMapper.listQueryByFlashSale(start, count);
   }
   @Override
   // @Cacheable(value = "qualityCache",key="'countQueryByFlashSale-'")
   public long countQueryByFlashSale() {
      return qualityFactoryMapper.countQueryByFlashSale();
   }
   @Override
   public List<QualityFactory> listFlashSaleRandGoods() {
      return qualityFactoryMapper.listFlashSaleRandGoods();
   }
   /**
    * 小金额查询:9.9/19.9/29.9/49.9
    *
    * @param start
    * @param count
    *            标签id
    * @return
    */
   @Override
   @Cacheable(value = "quality9K9Cache", key = "'get9k9ClassGoods-'+#start+'-'+#biz30day+'-'+#zkPrice+'-'+#minQuanPrice+'-'+#maxQuanPrice+'-'+#cids")
   public List<QualityFactory> get9k9ClassGoods(long start, int count, Integer biz30day, BigDecimal zkPrice,
         BigDecimal minQuanPrice, BigDecimal maxQuanPrice, String cids) {
      return qualityFactoryMapper.get9k9ClassGoods(start, count, biz30day, zkPrice, minQuanPrice, maxQuanPrice, cids);
   }
   /**
    * 对应小金额查询:9.9/19.9/29.9/49.9
    */
   @Override
   @Cacheable(value = "quality9K9Cache", key = "'count9k9ClassGoods-'+#biz30day+'-'+#zkPrice+'-'+#minQuanPrice+'-'+#maxQuanPrice+'-'+#cids")
   public long count9k9ClassGoods(Integer biz30day, BigDecimal zkPrice, BigDecimal minQuanPrice,
         BigDecimal maxQuanPrice, String cids) {
      return qualityFactoryMapper.count9k9ClassGoods(biz30day, zkPrice, minQuanPrice, maxQuanPrice, cids);
   }
   /**
    * 查询标签
    *
    * @param start
    * @param count
    * @param key
    * @return
    */
   public List<QualityFactory> listQueryByKeyAndlabIDs(long start, int count, String key, List<Long> listId,
         Integer sort, Long systemCid, Integer hasQuan, Integer userType, Integer biz30day, Integer startprice,
         Integer endprice) {
      return qualityFactoryMapper.listQueryByKeyAndlabIDs(start, count, key, listId, sort, systemCid, hasQuan,
            userType, biz30day, startprice, endprice);
   }
   public long countQueryKeyAndlabIDs(String key, List<Long> listId, Long systemCid, Integer hasQuan, Integer userType,
         Integer biz30day, Integer startprice, Integer endprice) {
      return qualityFactoryMapper.countQueryKeyAndlabIDs(key, listId, systemCid, hasQuan, userType, biz30day,
            startprice, endprice);
   }
   /**
    * 关键词搜索
    *
    * @param start
    * @param count
    * @param key
    * @return
    */
   @Override
   public List<QualityFactory> listQueryByKey(long start, int count, String key, Integer sort, Long systemCid,
         Integer hasQuan, Integer userType, Integer biz30day, Integer startprice, Integer endprice) {
      return qualityFactoryMapper.listQueryByKey(start, count, key, sort, systemCid, hasQuan, userType, biz30day,
            startprice, endprice);
   }
   public long countQueryByKey(String key, Long systemCid, Integer hasQuan, Integer userType, Integer biz30day,
         Integer startprice, Integer endprice) {
      return qualityFactoryMapper.countQueryByKey(key, systemCid, hasQuan, userType, biz30day, startprice, endprice);
   }
   /**
    * 一级分类查询精选库数据
    *
    * @param start
    * @param count
    * @return
    */
   @Override
   @Cacheable(value = "qualityCache", key = "'listQueryByClassId-'+#start+'-'+#cid")
   public List<QualityFactory> listQueryByClassId(long start, int count, Long cid) {
      List<QualityFactory> list = qualityFactoryMapper.listQuery(start, count, null, cid, null, null, 1);
      if (list == null) {
         list = new ArrayList<QualityFactory>();
      }
      List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
      for (QualityFactory qf : list)
         goodsList.add(qf.getTaoBaoGoodsBrief());
      // 过滤商品信息
      goodsList = taoBaoGoodsUpdateService.filterImportantTaoBaoGoods(goodsList);
      goodsList = daTaoKeGoodsDetailV2Service.filterTaoBaoGoods(goodsList);// 过滤大淘客标题
      for (int i = 0; i < list.size(); i++) {
         if (i < goodsList.size())
            list.get(i).setTaoBaoGoodsBrief(goodsList.get(i));
      }
      return list;
   }
   @Override
   @Cacheable(value = "qualityCache", key = "'countQueryClassId-'+#cid")
   public long countQueryClassId(Long cid) {
      return qualityFactoryMapper.countQuery(null, cid, null, null, 1);
   }
   @Override
   @Cacheable(value = "qualityCache", key = "'listQueryByRebateAmount-'+#start+'-'+#proportion+'-'+#endAmount+'-'+#endAmount+'-'+#tkRate")
   public List<QualityFactory> listQueryByRebateAmount(long start, int count, String proportion, Integer startAmount,
         Integer endAmount, double tkRate) {
      return qualityFactoryMapper.listQueryByRebateAmount(start, count, proportion, startAmount, endAmount, tkRate);
   }
   @Override
   @Cacheable(value = "qualityCache", key = "'countQueryByRebateAmount-'+#proportion+'-'+#endAmount+'-'+#endAmount+'-'+#tkRate")
   public long countQueryByRebateAmount(String proportion, Integer startAmount, Integer endAmount, double tkRate) {
      return qualityFactoryMapper.countQueryByRebateAmount(proportion, startAmount, endAmount, tkRate);
   }
   @Override
   // @Cacheable(value = "qualityCache",key="'queryToCouponColumn-'+#start")
   @Cacheable(value = "taoBaoCouponCache", key = "'queryToCouponColumn'+#start")
   public List<QualityFactory> queryToCouponColumn(long start, int count) {
      return qualityFactoryMapper.queryToCouponColumn(start, count);
   }
   @Override
   // @Cacheable(value = "qualityCache",key="'countQueryToCouponColumn'")
   @Cacheable(value = "taoBaoCouponCache", key = "'countQueryToCouponColumn'")
   public long countQueryToCouponColumn() {
      return qualityFactoryMapper.countQueryToCouponColumn();
   }
   /**
    * 首页最底部@商品信息流
    */
   @Override
   public List<QualityFactory> listRecommend(long start, int count, Double proportion, Integer commision,
         Integer couponAmount, double tkRate, Double couponRatio) {
      return qualityFactoryMapper.listRecommendToIndex(start, count, proportion, commision, couponAmount, tkRate,
            couponRatio);
   }
   @Override
   public long countRecommend(Double proportion, Integer commision, Integer couponAmount, double tkRate,
         Double couponRatio) {
      return qualityFactoryMapper.countRecommendToIndex(proportion, commision, couponAmount, tkRate, couponRatio);
   }
   @Override
   public List<QualityFactory> listRecommendBykey(long start, int count, String key, Integer hasQuan, Integer userType,
         Double startprice, Double endprice, Double startTkRate, Double endTkRate, Integer sort) {
      return qualityFactoryMapper.listRecommendBykey(start, count, key, hasQuan, userType, startprice, endprice,
            startTkRate, endTkRate, sort);
   }
   @Override
   public long countRecommendBykey(String key, Integer hasQuan, Integer userType, Double startprice, Double endprice,
         Double startTkRate, Double endTkRate) {
      return qualityFactoryMapper.countRecommendBykey(key, hasQuan, userType, startprice, endprice, startTkRate,
            endTkRate);
   }
   /**
    * 首页最底部@商品信息流
    */
   @Override
   @Cacheable(value = "qualityCache", key = "'listQueryToRecommend-'+#start+'-'+#proportion")
   public JSONArray getRecommendToIndex(long start, int count, String proportion) {
      // 返利金额2元以上;
      Integer commision = 2;
      // 优惠券面额高于5元以上
      Integer couponAmount = 5;
      // 佣金比例高的:5%以上;
      double tkRate = 5.0;
      // 优惠率高于10%以上(优惠率=优惠券面额/商品在售价*100%)
      Double couponRatio = 10.0;
      Double pop = 50.0;
      if (!StringUtil.isNullOrEmpty(proportion)) {
         pop = Double.parseDouble(proportion);
      }
      List<QualityFactory> listQuery = listRecommend(start, count, pop, commision, couponAmount, tkRate, couponRatio);
      if (listQuery == null || listQuery.size() == 0) {
         return null;
      }
      JSONArray array = new JSONArray();
      Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create();
      // 遍历列表数据
      //
      List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
      for (QualityFactory quality : listQuery) {
         if (quality.getTaoBaoGoodsBrief() != null)
            goodsList.add(quality.getTaoBaoGoodsBrief());
      }
      try {
         goodsList = daTaoKeGoodsDetailV2Service.filterTaoBaoGoods(goodsList);
      } catch (Exception e) {
      }
      for (TaoBaoGoodsBrief taoBaoGoodsBrief : goodsList) {
         int biz30day = taoBaoGoodsBrief.getBiz30day();
         if (biz30day >= 10000) {
            double sales = biz30day;
            String salesCountMidea = String.format("%.1f", sales / 10000);
            taoBaoGoodsBrief.setSalesCount(salesCountMidea + "万");
         } else {
            taoBaoGoodsBrief.setSalesCount(biz30day + "");
         }
         // 改变图片尺寸
         String pictUrl = taoBaoGoodsBrief.getPictUrl();
         if (!StringUtil.isNullOrEmpty(pictUrl) && !pictUrl.contains("320x320")) {
            taoBaoGoodsBrief.setPictUrl(TbImgUtil.getTBSize320Img(pictUrl));
         }
         array.add(gson.toJson(TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion, null)));
      }
      return array;
   }
   /**
    * 首页最底部@商品信息流
    */
   @Override
   @Cacheable(value = "qualityCache", key = "'getRecommendToIndexV2-'+#start+'-'+#platform+'-'+#version+'-'+#system")
   public List<GoodsDetailVO> getRecommendToIndexV2(long start, int count, String platform, String version, SystemEnum system) {
      // 返利金额2元以上;
      Integer commision = 2;
      // 优惠券面额高于5元以上
      Integer couponAmount = 5;
      // 佣金比例高的:5%以上;
      double tkRate = 5.0;
      // 优惠率高于10%以上(优惠率=优惠券面额/商品在售价*100%)
      Double couponRatio = 10.0;
      BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(system);
      Double pop = 50.0;
      if (fanLiRate != null) {
         pop = Double.parseDouble(fanLiRate.toString());
      }
      List<QualityFactory> listQuery = listRecommend(start, count, pop, commision, couponAmount, tkRate, couponRatio);
      if (listQuery == null || listQuery.size() == 0) {
         return null;
      }
      List<GoodsDetailVO> voList=new ArrayList<>();
      Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create();
      // 遍历列表数据
      //
      List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
      for (QualityFactory quality : listQuery) {
         if (quality.getTaoBaoGoodsBrief() != null)
            goodsList.add(quality.getTaoBaoGoodsBrief());
      }
      try {
         goodsList = daTaoKeGoodsDetailV2Service.filterTaoBaoGoods(goodsList);
      } catch (Exception e) {
      }
      GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(platform, version,system);
      for (TaoBaoGoodsBrief taoBaoGoodsBrief : goodsList) {
         GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(taoBaoGoodsBrief, paramsDTO);
         voList.add(detailVO);
      }
      return voList;
   }
   @Override
   @Cacheable(value = "qualityCache", key = "'countRecommendToIndex-'+#proportion")
   public long countRecommendToIndex(String proportion) {
      // 返利金额2元以上;
      Integer commision = 2;
      // 优惠券面额高于5元以上
      Integer couponAmount = 5;
      // 佣金比例高的:5%以上;
      double tkRate = 5.0;
      // 优惠率高于10%以上(优惠率=优惠券面额/商品在售价*100%)
      Double couponRatio = 10.0;
      Double pop = 50.0;
      if (!StringUtil.isNullOrEmpty(proportion)) {
         pop = Double.parseDouble(proportion);
      }
      return countRecommend(pop, commision, couponAmount, tkRate, couponRatio);
   }
   @Override
   public List<QualityFactory> recommendByAuctionId(String auctionId) {
      List<String> list = new ArrayList<>();
      list.add(auctionId);
      List<QualityFactory> listTaoBaoGoods = qualityFactoryMapper.listQueryByAuctionId(list);
      if (listTaoBaoGoods == null || listTaoBaoGoods.size() == 0) {
         return null;
      }
      QualityFactory qualityFactory = listTaoBaoGoods.get(0);
      TaoBaoGoodsBrief goodsBrief = qualityFactory.getTaoBaoGoodsBrief();
      if (goodsBrief == null) {
         return null;
      }
      List<LabelGoods> listLab = labelGoodsMapper.queryByGoodsId(0, 200, goodsBrief.getAuctionId());
      if (listLab == null || listLab.size() == 0) {
         return null;
      }
      // 标签id
      List<Long> listId = new ArrayList<Long>();
      for (LabelGoods labelGoods : listLab) {
         Label label = labelGoods.getLabel();
         if (label != null) {
            listId.add(label.getId());
         }
      }
      if (listId.size() == 0) {
         return null;
      }
      return qualityFactoryMapper.listQueryBylabIDs(0, 10, listId, goodsBrief.getId(), qualityFactory.getSystemCid());
   }
   @Override
   public List<QualityFactory> listFreeGoods(long start, int count) {
      return qualityFactoryMapper.listFreeGoods(start, count);
   }
   @Override
   public long countFreeGoods() {
      return qualityFactoryMapper.countFreeGoods();
   }
   @Override
   public List<QualityFactory> listByShopId(long start, int count, Long shopId) {
      return qualityFactoryMapper.listByShopId(start, count, shopId);
   }
   @Override
   public long countByShopId(Long shopId) {
      return qualityFactoryMapper.countByShopId(shopId);
   }
   @Override
   public List<QualityFactory> listQueryEverydayRob(long start, int count, BigDecimal zkPrice, BigDecimal minQuanPrice,
         BigDecimal maxQuanPrice) {
      return qualityFactoryMapper.listQueryEverydayRob(start, count, zkPrice, minQuanPrice, maxQuanPrice);
   }
   @Override
   public long countQueryEverydayRob(BigDecimal zkPrice, BigDecimal minQuanPrice, BigDecimal maxQuanPrice) {
      return qualityFactoryMapper.countQueryEverydayRob(zkPrice, minQuanPrice, maxQuanPrice);
   }
}