admin
2019-06-06 d0c1f24b2be8e4a547d939710a12888d4f6714c6
新版大淘客数据添加
8个文件已修改
6个文件已添加
1377 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/RecommendController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/MongodbBaseDao.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/goods/taobao/dataoke/DaTaoKeGoodsDetailV2Dao.java 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dto/dataoke/DaTaoKeGoodsResult.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/taobao/TaoKeAppInfo.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/taobao/dataoke/DaTaoKeDetailV2.java 452 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/UpdateDaTaoKeJob.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsDetailV2ServiceImpl.java 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/dataoke/DaTaoKeGoodsDetailV2Service.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/SpringContext.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/dataoke/DaTaoKeApiUtil.java 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/DaTaoKeUtil.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoBaoUtil.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/RecommendController.java
@@ -1941,8 +1941,11 @@
            finalImgList.add(0, tb.getPictUrlWhite());
        // 大淘客商品过滤
        goods = daTaoKeGoodsDetailService.filterTaoBaoGoods(goods);
        try {
            goods = daTaoKeGoodsDetailService.filterTaoBaoGoods(goods);
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
        }
        JSONObject goodsJson = new JSONObject();
        goodsJson.put("auctionId", tb.getAuctionId());
        goodsJson.put("imgList", finalImgList);
fanli/src/main/java/com/yeshi/fanli/dao/MongodbBaseDao.java
New file
@@ -0,0 +1,87 @@
package com.yeshi.fanli.dao;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;
@Repository
public abstract class MongodbBaseDao<T> {
    @Resource
    protected MongoTemplate mongoTemplate;
    /**
     * 插入数据
     *
     * @param bean
     * @return
     */
    public T save(T bean) {
        mongoTemplate.save(bean);
        return bean;
    }
    /**
     * 根据主键更新数据
     *
     * @param query
     * @param update
     */
    public void update(Query query, Update update) {
        mongoTemplate.upsert(query, update, this.getEntityClass());
    }
    /**
     * 查询一个数据
     *
     * @param query
     * @return
     */
    public T findOne(Query query) {
        return (T) mongoTemplate.findOne(query, this.getEntityClass());
    }
    /**
     * 查询多个数据
     *
     * @param query
     * @return
     */
    public List<T> findList(Query query) {
        return mongoTemplate.find(query, this.getEntityClass());
    }
    /**
     * 主键查询
     *
     * @param id
     * @return
     */
    public T get(Object id) {
        return (T) mongoTemplate.findById(id, this.getEntityClass());
    }
    /**
     * 通过主键删除
     *
     * @param id
     */
    public void delete(Object id) {
        Query query = Query.query(Criteria.where("id").is(id));
        mongoTemplate.remove(query, getEntityClass());
    }
    @SuppressWarnings("unchecked")
    protected Class<T> getEntityClass() {
        Class<T> tClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass())
                .getActualTypeArguments()[0];
        return tClass;
    }
}
fanli/src/main/java/com/yeshi/fanli/dao/goods/taobao/dataoke/DaTaoKeGoodsDetailV2Dao.java
New file
@@ -0,0 +1,134 @@
package com.yeshi.fanli.dao.goods.taobao.dataoke;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;
import com.yeshi.fanli.dao.MongodbBaseDao;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2;
@Repository
public class DaTaoKeGoodsDetailV2Dao extends MongodbBaseDao<DaTaoKeDetailV2> {
    public void updateSelective(DaTaoKeDetailV2 v2) {
        DaTaoKeDetailV2 old = get(v2.getId());
        if (old != null) {// 更新
            Query query = new Query();
            query.addCriteria(Criteria.where("id").is(v2.getId()));
            Field[] fields = v2.getClass().getFields();
            Update update = new Update();
            for (Field f : fields) {
                f.setAccessible(true);
                String name = f.getName();
                Object value = null;
                try {
                    value = f.get(v2);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                if (value != null)
                    update.set(name, value);
            }
            update(query, update);
        }
    }
    public DaTaoKeDetailV2 selectLatest() {
        Query query = new Query();
        List<Order> orders = new ArrayList<>();
        orders.add(new Order(Direction.DESC, "createTime"));
        query.with(new Sort(orders));
        query.limit(1);
        List<DaTaoKeDetailV2> list = mongoTemplate.find(query, getEntityClass());
        if (list != null && list.size() > 0)
            return list.get(0);
        else
            return null;
    }
    public List<DaTaoKeDetailV2> listByGoodsIds(List<Long> goodsIdList) {
        if (goodsIdList == null || goodsIdList.size() == 0)
            return null;
        Query query = new Query();
        Criteria[] criterias = new Criteria[goodsIdList.size()];
        for (int i = 0; i < goodsIdList.size(); i++) {
            criterias[i] = Criteria.where("goodsId").is(goodsIdList.get(i));
        }
        query.addCriteria(new Criteria().orOperator(criterias));
        return mongoTemplate.find(query, getEntityClass());
    }
    public List<DaTaoKeDetailV2> listByIds(List<Long> idsList) {
        if (idsList == null || idsList.size() == 0)
            return null;
        Query query = new Query();
        Criteria[] criterias = new Criteria[idsList.size()];
        for (int i = 0; i < idsList.size(); i++) {
            criterias[i] = Criteria.where("id").is(idsList.get(i));
        }
        query.addCriteria(new Criteria().orOperator(criterias));
        return mongoTemplate.find(query, getEntityClass());
    }
    public List<DaTaoKeDetailV2> listByDtitle(String dtitle) {
        Query query = new Query();
        query.addCriteria(Criteria.where("dtitle").is(dtitle));
        return mongoTemplate.find(query, getEntityClass());
    }
    public List<DaTaoKeDetailV2> listSearchByTitleWithCid(String key, Long cid, int start, int count) {
        Pattern pattern = Pattern.compile("^.*" + key + ".*$", Pattern.CASE_INSENSITIVE);
        List<Criteria> criteriasList = new ArrayList<>();
        criteriasList.add(Criteria.where("dtitle").regex(pattern));
        criteriasList.add(Criteria.where("title").regex(pattern));
        Criteria[] criterias = new Criteria[criteriasList.size()];
        Query query = new Query();
        if (cid != null)
            query.addCriteria(new Criteria().andOperator(Criteria.where("cid").is(Integer.parseInt(cid + "")),
                    new Criteria().orOperator(criteriasList.toArray(criterias))));
        else
            query.addCriteria(new Criteria().orOperator(criteriasList.toArray(criterias)));
        query.skip(start);
        query.limit(count);
        return mongoTemplate.find(query, getEntityClass());
    }
    public long countSearchByTitleWithCid(String key, Long cid) {
        Pattern pattern = Pattern.compile("^.*" + key + ".*$", Pattern.CASE_INSENSITIVE);
        List<Criteria> criteriasList = new ArrayList<>();
        criteriasList.add(Criteria.where("dtitle").regex(pattern));
        criteriasList.add(Criteria.where("title").regex(pattern));
        Criteria[] criterias = new Criteria[criteriasList.size()];
        Query query = new Query();
        if (cid != null)
            query.addCriteria(new Criteria().andOperator(Criteria.where("cid").is(Integer.parseInt(cid + "")),
                    new Criteria().orOperator(criteriasList.toArray(criterias))));
        else
            query.addCriteria(new Criteria().orOperator(criteriasList.toArray(criterias)));
        return mongoTemplate.count(query, getEntityClass());
    }
    public List<DaTaoKeDetailV2> getGoodsNotInList(Long cid, List<Long> listId, int count) {
        List<Criteria> criteriasList = new ArrayList<>();
        if (cid != null)
            criteriasList.add(Criteria.where("cid").is(Integer.parseInt(cid + "")));
        for (Long id : listId)
            criteriasList.add(Criteria.where("id").not().is(id));
        Criteria[] criterias = new Criteria[criteriasList.size()];
        Query query = new Query();
        query.addCriteria(new Criteria().andOperator(criteriasList.toArray(criterias)));
        query.limit(count);
        return mongoTemplate.find(query, getEntityClass());
    }
}
fanli/src/main/java/com/yeshi/fanli/dto/dataoke/DaTaoKeGoodsResult.java
New file
@@ -0,0 +1,45 @@
package com.yeshi.fanli.dto.dataoke;
import java.util.List;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2;
public class DaTaoKeGoodsResult {
    private long totalCount;
    private String pageId;
    private List<DaTaoKeDetailV2> goodsList;
    public DaTaoKeGoodsResult() {
    }
    public DaTaoKeGoodsResult(long totalCount, String pageId, List<DaTaoKeDetailV2> goodsList) {
        this.totalCount = totalCount;
        this.pageId = pageId;
        this.goodsList = goodsList;
    }
    public long getTotalCount() {
        return totalCount;
    }
    public void setTotalCount(long totalCount) {
        this.totalCount = totalCount;
    }
    public String getPageId() {
        return pageId;
    }
    public void setPageId(String pageId) {
        this.pageId = pageId;
    }
    public List<DaTaoKeDetailV2> getGoodsList() {
        return goodsList;
    }
    public void setGoodsList(List<DaTaoKeDetailV2> goodsList) {
        this.goodsList = goodsList;
    }
}
fanli/src/main/java/com/yeshi/fanli/entity/taobao/TaoKeAppInfo.java
@@ -9,6 +9,14 @@
public class TaoKeAppInfo {
    private String appKey;
    private String appSecret;
    public TaoKeAppInfo(String appKey, String appSecret) {
        this.appKey = appKey;
        this.appSecret = appSecret;
    }
    public TaoKeAppInfo() {
    }
    private String pid;
    private String adzoneId;
fanli/src/main/java/com/yeshi/fanli/entity/taobao/dataoke/DaTaoKeDetailV2.java
New file
@@ -0,0 +1,452 @@
package com.yeshi.fanli.entity.taobao.dataoke;
import java.math.BigDecimal;
import java.util.Date;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
@Document(collection = "daTaoKeGoods")
public class DaTaoKeDetailV2 {
    @Id
    private Long id;// 商品ID
    @Field
    private Long goodsId;// 淘宝商品ID
    @Field
    private String title;// 标题
    @Field
    private String dtitle;// 大淘客标题
    @Field
    private BigDecimal originalPrice;// 原价
    @Field
    private BigDecimal actualPrice;// 券后价
    @Field
    private Integer shopType;// 店铺类型,1-天猫,0-淘宝
    @Field
    private Integer goldSellers;// 是否金牌卖家,1-金牌卖家,0-非金牌卖家
    @Field
    private Integer monthSales;// 30天销量
    @Field
    private Integer twoHoursSales;// 2小时销量
    @Field
    private Integer dailySales;// 当日销量
    @Field
    private Integer commissionType;// 佣金类型,0-通用,1-定向,2-高佣,3-营销计划
    @Field
    private String desc;// 推广文案
    @Field
    private Integer couponReceiveNum;// 领券量
    @Field
    private String couponLink;// 领券链接
    @Field
    private Date couponEndTime;// 优惠券结束时间
    @Field
    private Date couponStartTime;// 优惠券开始时间
    @Field
    private BigDecimal couponPrice;// 优惠券金额
    @Field
    private String couponConditions;// 优惠券使用条件
    @Field
    private String couponId;// 券ID
    @Field
    private Integer activityType;// 活动类型,1-无活动,2-淘抢购,3-聚划算
    @Field
    private Date createTime;// 商品创建时间
    @Field
    private String mainPic;// 商品主图链接
    @Field
    private String marketingMainPic;// 营销主图链接
    @Field
    private Long sellerId;// 淘宝卖家id
    @Field
    private Integer cid;// 商品在大淘客的分类id
    @Field
    private BigDecimal discounts;// 折扣力度
    @Field
    private BigDecimal commissionRate;// 佣金比例
    @Field
    private Integer couponTotalNum;// 券总量
    @Field
    private Integer haitao;// 是否海淘,1-海淘商品,0-非海淘商品
    @Field
    private String activityStartTime;// 活动开始时间
    @Field
    private String activityEndTime;// 活动结束时间
    @Field
    private String shopName;// 店铺名称
    @Field
    private Integer shopLevel;// 淘宝店铺等级
    @Field
    private BigDecimal descScore;// 描述分
    @Field
    private Integer brand;// 是否是品牌商品
    @Field
    private String brandId;// 品牌id
    @Field
    private String brandName;// 品牌名称
    @Field
    private Integer hotPush;// 热推值
    @Field
    private String teamName;// 放单人名称
    @Field
    private String itemLink;// 商品淘宝链接
    @Field
    private Integer tchaoshi;// 是否天猫超市商品,1-天猫超市商品,0-非天猫超市商品
    @Field
    private Integer tbcid;// 商品在淘宝的二级分类id ,非大淘客的二级分类
    @Field
    private Date updateTime;
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public Long getGoodsId() {
        return goodsId;
    }
    public void setGoodsId(Long goodsId) {
        this.goodsId = goodsId;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getDtitle() {
        return dtitle;
    }
    public void setDtitle(String dtitle) {
        this.dtitle = dtitle;
    }
    public BigDecimal getOriginalPrice() {
        return originalPrice;
    }
    public void setOriginalPrice(BigDecimal originalPrice) {
        this.originalPrice = originalPrice;
    }
    public BigDecimal getActualPrice() {
        return actualPrice;
    }
    public void setActualPrice(BigDecimal actualPrice) {
        this.actualPrice = actualPrice;
    }
    public Integer getShopType() {
        return shopType;
    }
    public void setShopType(Integer shopType) {
        this.shopType = shopType;
    }
    public Integer getGoldSellers() {
        return goldSellers;
    }
    public void setGoldSellers(Integer goldSellers) {
        this.goldSellers = goldSellers;
    }
    public Integer getMonthSales() {
        return monthSales;
    }
    public void setMonthSales(Integer monthSales) {
        this.monthSales = monthSales;
    }
    public Integer getTwoHoursSales() {
        return twoHoursSales;
    }
    public void setTwoHoursSales(Integer twoHoursSales) {
        this.twoHoursSales = twoHoursSales;
    }
    public Integer getDailySales() {
        return dailySales;
    }
    public void setDailySales(Integer dailySales) {
        this.dailySales = dailySales;
    }
    public Integer getCommissionType() {
        return commissionType;
    }
    public void setCommissionType(Integer commissionType) {
        this.commissionType = commissionType;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
    public Integer getCouponReceiveNum() {
        return couponReceiveNum;
    }
    public void setCouponReceiveNum(Integer couponReceiveNum) {
        this.couponReceiveNum = couponReceiveNum;
    }
    public String getCouponLink() {
        return couponLink;
    }
    public void setCouponLink(String couponLink) {
        this.couponLink = couponLink;
    }
    public Date getCouponEndTime() {
        return couponEndTime;
    }
    public void setCouponEndTime(Date couponEndTime) {
        this.couponEndTime = couponEndTime;
    }
    public Date getCouponStartTime() {
        return couponStartTime;
    }
    public void setCouponStartTime(Date couponStartTime) {
        this.couponStartTime = couponStartTime;
    }
    public BigDecimal getCouponPrice() {
        return couponPrice;
    }
    public void setCouponPrice(BigDecimal couponPrice) {
        this.couponPrice = couponPrice;
    }
    public String getCouponConditions() {
        return couponConditions;
    }
    public void setCouponConditions(String couponConditions) {
        this.couponConditions = couponConditions;
    }
    public String getCouponId() {
        return couponId;
    }
    public void setCouponId(String couponId) {
        this.couponId = couponId;
    }
    public Integer getActivityType() {
        return activityType;
    }
    public void setActivityType(Integer activityType) {
        this.activityType = activityType;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public String getMainPic() {
        return mainPic;
    }
    public void setMainPic(String mainPic) {
        this.mainPic = mainPic;
    }
    public String getMarketingMainPic() {
        return marketingMainPic;
    }
    public void setMarketingMainPic(String marketingMainPic) {
        this.marketingMainPic = marketingMainPic;
    }
    public Long getSellerId() {
        return sellerId;
    }
    public void setSellerId(Long sellerId) {
        this.sellerId = sellerId;
    }
    public Integer getCid() {
        return cid;
    }
    public void setCid(Integer cid) {
        this.cid = cid;
    }
    public BigDecimal getDiscounts() {
        return discounts;
    }
    public void setDiscounts(BigDecimal discounts) {
        this.discounts = discounts;
    }
    public BigDecimal getCommissionRate() {
        return commissionRate;
    }
    public void setCommissionRate(BigDecimal commissionRate) {
        this.commissionRate = commissionRate;
    }
    public Integer getCouponTotalNum() {
        return couponTotalNum;
    }
    public void setCouponTotalNum(Integer couponTotalNum) {
        this.couponTotalNum = couponTotalNum;
    }
    public Integer getHaitao() {
        return haitao;
    }
    public void setHaitao(Integer haitao) {
        this.haitao = haitao;
    }
    public String getActivityStartTime() {
        return activityStartTime;
    }
    public void setActivityStartTime(String activityStartTime) {
        this.activityStartTime = activityStartTime;
    }
    public String getActivityEndTime() {
        return activityEndTime;
    }
    public void setActivityEndTime(String activityEndTime) {
        this.activityEndTime = activityEndTime;
    }
    public String getShopName() {
        return shopName;
    }
    public void setShopName(String shopName) {
        this.shopName = shopName;
    }
    public Integer getShopLevel() {
        return shopLevel;
    }
    public void setShopLevel(Integer shopLevel) {
        this.shopLevel = shopLevel;
    }
    public BigDecimal getDescScore() {
        return descScore;
    }
    public void setDescScore(BigDecimal descScore) {
        this.descScore = descScore;
    }
    public Integer getBrand() {
        return brand;
    }
    public void setBrand(Integer brand) {
        this.brand = brand;
    }
    public String getBrandId() {
        return brandId;
    }
    public void setBrandId(String brandId) {
        this.brandId = brandId;
    }
    public String getBrandName() {
        return brandName;
    }
    public void setBrandName(String brandName) {
        this.brandName = brandName;
    }
    public Integer getHotPush() {
        return hotPush;
    }
    public void setHotPush(Integer hotPush) {
        this.hotPush = hotPush;
    }
    public String getTeamName() {
        return teamName;
    }
    public void setTeamName(String teamName) {
        this.teamName = teamName;
    }
    public String getItemLink() {
        return itemLink;
    }
    public void setItemLink(String itemLink) {
        this.itemLink = itemLink;
    }
    public Integer getTchaoshi() {
        return tchaoshi;
    }
    public void setTchaoshi(Integer tchaoshi) {
        this.tchaoshi = tchaoshi;
    }
    public Integer getTbcid() {
        return tbcid;
    }
    public void setTbcid(Integer tbcid) {
        this.tbcid = tbcid;
    }
}
fanli/src/main/java/com/yeshi/fanli/job/UpdateDaTaoKeJob.java
@@ -103,5 +103,24 @@
            LogHelper.errorDetailInfo(e);
        }
    }
    // 每天早上同步一次
    public void doSyncJobNew() {
        if (!Constant.IS_TASK)
            return;
        try {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    daTaoKeGoodsService.startSyncGoods();
                }
            }).start();
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java
@@ -143,18 +143,19 @@
                } else if (!StringUtil.isNullOrEmpty(list.get(0).getRelationId())) {
                    shareOrderMap.put(orderId, list);
                } else {
                    // 通过红包查询
                    CommonOrder commonOrder = commonOrderService
                            .selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, list.get(0).getTradeId());
                    PidUser pidUser = null;// pidUserMapper.selectByPid(pid);
                    if (pidUser != null && pidUser.getType() == PidUser.TYPE_SHARE_GOODS) {// 商品分享订单
                        // List<PidOrder> pidOrderList = new ArrayList<>();
                        // for (TaoBaoOrder order : list) {
                        // pidOrderList.add(TaoBaoOrderUtil.convertToPidOrder(order));
                        // }
                        // sharePidOrderMap.put(orderId, pidOrderList);
                        shareOrderMap.put(orderId, list);
                    } else {// 普通返利订单
                        fanliOrderMap.put(orderId, list);
                    if (commonOrder != null) {
                        HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
                        if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null
                                && hongBaoOrder.getHongBaoV2().getType() == HongBaoV2.TYPE_SHARE_GOODS) {
                            shareOrderMap.put(orderId, list);
                            continue;
                        }
                    }
                    fanliOrderMap.put(orderId, list);
                }
            }
        }
@@ -923,6 +924,20 @@
            }
            // 尚未找到和PID对应的用户
            if (uid == null) {
                // 通过红包查询
                CommonOrder commonOrder = commonOrderService.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO,
                        orderList.get(0).getTradeId());
                if (commonOrder != null) {
                    HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
                    if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null
                            && hongBaoOrder.getHongBaoV2().getType() == HongBaoV2.TYPE_SHARE_GOODS) {
                        uid = hongBaoOrder.getHongBaoV2().getUserInfo().getId();
                    }
                }
            }
            if (uid == null)
                return;
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsDetailV2ServiceImpl.java
New file
@@ -0,0 +1,189 @@
package com.yeshi.fanli.service.impl.taobao.dataoke;
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 org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.yeshi.fanli.dao.goods.taobao.dataoke.DaTaoKeGoodsDetailV2Dao;
import com.yeshi.fanli.dto.dataoke.DaTaoKeGoodsResult;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailV2Service;
import com.yeshi.fanli.util.RedisManager;
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.DaTaoKeUtil;
@Service
public class DaTaoKeGoodsDetailV2ServiceImpl implements DaTaoKeGoodsDetailV2Service {
    @Resource
    private DaTaoKeGoodsDetailV2Dao daTaoKeGoodsDetailV2Dao;
    @Resource
    private RedisManager redisManager;
    @Override
    public void startSyncGoods() {
        LogHelper.test("大淘客同步开始");
        DaTaoKeGoodsResult result = DaTaoKeApiUtil.listAll(null);
        while (!StringUtil.isNullOrEmpty(result.getPageId())) {
            for (DaTaoKeDetailV2 v2 : result.getGoodsList())
                daTaoKeGoodsDetailV2Dao.save(v2);
            result = DaTaoKeApiUtil.listAll(result.getPageId());
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    @Override
    public void updateData() {
        DaTaoKeGoodsResult result = DaTaoKeApiUtil.getUpdateGoodsList(null, null, null);
        while (!StringUtil.isNullOrEmpty(result.getPageId())) {
            for (DaTaoKeDetailV2 v2 : result.getGoodsList()) {
                v2.setUpdateTime(new Date());
                daTaoKeGoodsDetailV2Dao.updateSelective(v2);
            }
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            result = DaTaoKeApiUtil.getUpdateGoodsList(result.getPageId(), null, null);
        }
    }
    @Override
    public void deleteInvalid() {
        String startTime = null;
        DaTaoKeDetailV2 latest = daTaoKeGoodsDetailV2Dao.selectLatest();
        if (latest != null) {
            startTime = TimeUtil.getGernalTime(latest.getCreateTime().getTime(), "yyyy-MM-dd HH:mm:ss");
        }
        DaTaoKeGoodsResult result = DaTaoKeApiUtil.getInvalidGoodsList(null, startTime, null);
        while (!StringUtil.isNullOrEmpty(result.getPageId())) {
            for (DaTaoKeDetailV2 v2 : result.getGoodsList()) {
                v2.setUpdateTime(new Date());
                daTaoKeGoodsDetailV2Dao.delete(v2.getId());
            }
            result = DaTaoKeApiUtil.getInvalidGoodsList(result.getPageId(), startTime, null);
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    @Override
    public void updateNewGoods() {
        String startTime = null;
        DaTaoKeDetailV2 latest = daTaoKeGoodsDetailV2Dao.selectLatest();
        if (latest != null) {
            startTime = TimeUtil.getGernalTime(latest.getCreateTime().getTime(), "yyyy-MM-dd HH:mm:ss");
        }
        DaTaoKeGoodsResult result = DaTaoKeApiUtil.getNewGoodsList(null, startTime, null);
        while (!StringUtil.isNullOrEmpty(result.getPageId())) {
            for (DaTaoKeDetailV2 v2 : result.getGoodsList()) {
                v2.setUpdateTime(new Date());
                daTaoKeGoodsDetailV2Dao.save(v2);
            }
            result = DaTaoKeApiUtil.getNewGoodsList(result.getPageId(), startTime, null);
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    @Transactional
    private void addGoodsList(List<DaTaoKeDetailV2> goodsList) {
        for (DaTaoKeDetailV2 goods : goodsList) {
            goods.setUpdateTime(new Date());
            daTaoKeGoodsDetailV2Dao.save(goods);
        }
    }
    @Override
    public List<DaTaoKeDetailV2> listByGoodsIds(List<Long> goodsIdList) {
        if (goodsIdList == null || goodsIdList.size() == 0)
            return null;
        List<DaTaoKeDetailV2> goodsList = daTaoKeGoodsDetailV2Dao.listByGoodsIds(goodsIdList);
        return goodsList;
    }
    @Override
    public List<TaoBaoGoodsBrief> filterTaoBaoGoods(List<TaoBaoGoodsBrief> goodsList) {
        List<Long> goodsIdList = new ArrayList<>();
        for (TaoBaoGoodsBrief goods : goodsList)
            goodsIdList.add(goods.getAuctionId());
        List<DaTaoKeDetailV2> dtList = listByGoodsIds(goodsIdList);
        Map<Long, DaTaoKeDetailV2> map = new HashMap<>();
        for (DaTaoKeDetailV2 goods : dtList)
            map.put(goods.getGoodsId(), goods);
        for (TaoBaoGoodsBrief goods : goodsList) {
            DaTaoKeDetailV2 detail = map.get(goods.getAuctionId());
            goods = DaTaoKeUtil.filterTaoBaoGoods(goods, detail);
        }
        return goodsList;
    }
    @Override
    public TaoBaoGoodsBrief filterTaoBaoGoods(TaoBaoGoodsBrief goods) {
        List<Long> goodsIdList = new ArrayList<>();
        goodsIdList.add(goods.getAuctionId());
        List<DaTaoKeDetailV2> daTaoKeList = listByGoodsIds(goodsIdList);
        if (daTaoKeList == null || daTaoKeList.size() == 0)
            return goods;
        // 重新设置标题与券价格
        goods = DaTaoKeUtil.filterTaoBaoGoods(goods, daTaoKeList.get(0));
        return goods;
    }
    @Override
    public List<DaTaoKeDetailV2> listByIds(List<Long> idsList) {
        return daTaoKeGoodsDetailV2Dao.listByIds(idsList);
    }
    @Override
    public List<DaTaoKeDetailV2> listByDtitle(String dtitle) {
        return daTaoKeGoodsDetailV2Dao.listByDtitle(dtitle.trim());
    }
    @Override
    public List<DaTaoKeDetailV2> listSearchByTitleWithCid(String title, Long cid, int page, int pageSize) {
        return daTaoKeGoodsDetailV2Dao.listSearchByTitleWithCid(title, (cid == null || cid == 0 ? null : cid),
                (page - 1) * pageSize, pageSize);
    }
    @Override
    public Long countSearchByTitleWithCid(String title, Long cid) {
        return daTaoKeGoodsDetailV2Dao.countSearchByTitleWithCid(title, (cid == null || cid == 0 ? null : cid));
    }
    @Override
    public List<DaTaoKeDetailV2> getGoodsNotInList(Long cid, List<Long> listId, int count) {
        return daTaoKeGoodsDetailV2Dao.getGoodsNotInList(cid, listId, count);
    }
}
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/dataoke/DaTaoKeGoodsDetailV2Service.java
New file
@@ -0,0 +1,108 @@
package com.yeshi.fanli.service.inter.taobao.dataoke;
import java.util.List;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2;
/**
 * 大淘客商品详情服务
 *
 * @author Administrator
 *
 */
public interface DaTaoKeGoodsDetailV2Service {
    /**
     * 启动商品同步服务
     */
    public void startSyncGoods();
    /**
     * 更新数据
     */
    public void updateData();
    /**
     * 删除无效的
     */
    public void deleteInvalid();
    /**
     * 增量更新
     */
    public void updateNewGoods();
    /**
     * 根据商品ID查询
     *
     * @param goodsIdList
     * @return
     */
    public List<DaTaoKeDetailV2> listByGoodsIds(List<Long> goodsIdList);
    /**
     * 过滤淘宝商品信息
     *
     * @param goodsList
     * @return
     */
    public List<TaoBaoGoodsBrief> filterTaoBaoGoods(List<TaoBaoGoodsBrief> goodsList);
    /**
     * 过滤淘宝商品信息
     *
     * @param goods
     * @return
     */
    public TaoBaoGoodsBrief filterTaoBaoGoods(TaoBaoGoodsBrief goods);
    /**
     * 根据主键查询
     *
     * @param idList
     * @return
     */
    public List<DaTaoKeDetailV2> listByIds(List<Long> idList);
    /**
     * 查询一类全部
     *
     * @param cid
     * @param listId
     * @param count
     * @return
     */
    public List<DaTaoKeDetailV2> getGoodsNotInList(Long cid, List<Long> listId, int count);
    /*
     * 根据标题查询
     *
     * @param dtitle
     *
     * @return
     */
    public List<DaTaoKeDetailV2> listByDtitle(String dtitle);
    /**
     * 根据标题类型搜索
     *
     * @param title
     *            -标题
     * @param cid
     *            -分类ID
     * @param page
     * @param pageSize
     * @return
     */
    public List<DaTaoKeDetailV2> listSearchByTitleWithCid(String title, Long cid, int page, int pageSize);
    /**
     * 获取搜索到的数量
     *
     * @param title
     * @param cid
     * @return
     */
    public Long countSearchByTitleWithCid(String title, Long cid);
}
fanli/src/main/java/com/yeshi/fanli/util/SpringContext.java
@@ -369,7 +369,7 @@
                            }
                        }
                    } catch (Exception e) {
                        LogHelper.errorDetailInfo(e);
                    }
                }
            }
fanli/src/main/java/com/yeshi/fanli/util/dataoke/DaTaoKeApiUtil.java
@@ -1,10 +1,16 @@
package com.yeshi.fanli.util.dataoke;
import java.io.IOException;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
@@ -13,11 +19,16 @@
import org.yeshi.utils.HttpUtil;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.yeshi.fanli.dto.dataoke.DaTaoKeApiResult;
import com.yeshi.fanli.dto.dataoke.DaTaoKeGoodsResult;
import com.yeshi.fanli.dto.taobao.TaoBaoShopDTO;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoKeAppInfo;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.StringUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
@@ -25,6 +36,28 @@
public class DaTaoKeApiUtil {
    final static String API_KEY = "a083abb893";
    final static String API_KEY_2 = "b7a5ea2cd9";
    final static String APP_KEY = "5cf764636d373";
    final static String APP_KEY_SECRET = "5ea3c24900743f3aa531fb264f9824f2";
    final static String APP_KEY_2 = "5cf75b0f2c0e4";
    final static String APP_KEY_SECRET_2 = "b14f1fa115129a447937ca998b311d1e";
    // 排序值
    final public static int SORT_DEFAULT = 0;
    final public static int SORT_CREATETIME = 1;
    final public static int SORT_SALES = 2;
    final public static int SORT_COUPON_NUM = 3;
    final public static int SORT_COMMISSION = 4;
    final public static int SORT_PRICE_HIGH_TO_LOW = 5;
    final public static int SORT_PRICE_LOW_TO_HIGH = 6;
    final static TaoKeAppInfo[] APP_KEYS = new TaoKeAppInfo[] { new TaoKeAppInfo(APP_KEY, APP_KEY_SECRET),
            new TaoKeAppInfo(APP_KEY_2, APP_KEY_SECRET_2) };
    final static String[] APP_SECRETS = new String[] { APP_KEY_SECRET, APP_KEY_SECRET_2 };
    static Gson gson = new Gson();
    public static DaTaoKeApiResult goodsList(int page) {
@@ -97,7 +130,218 @@
            e.printStackTrace();
        }
        return taoBaoShopDTO;
    }
    private static TaoKeAppInfo getRandomApp() {
        int pos = (int) (Math.random() * APP_KEYS.length);
        return APP_KEYS[pos];
    }
    public static DaTaoKeGoodsResult listAll(String pageId) {
        TaoKeAppInfo app = getRandomApp();
        DaTaoKeGoodsResult daTaoKeGoodsResult = new DaTaoKeGoodsResult();
        Map<String, String> params = new TreeMap<>();
        params.put("version", "v1.0.0");
        params.put("appKey", app.getAppKey());
        params.put("pageSize", 200 + "");
        if (!StringUtil.isNullOrEmpty(pageId)) {
            params.put("pageId", pageId);
        }
        params.put("sign", getSign(params, app.getAppSecret()));
        String result = HttpUtil.get("https://openapi.dataoke.com/api/goods/get-goods-list", params, new HashMap<>());
        JSONObject json = JSONObject.fromObject(result);
        JSONObject dataJson = json.optJSONObject("data");
        if (dataJson != null) {
            JSONArray array = dataJson.optJSONArray("list");
            if (array != null) {
                String data = array.toString();
                Type type = new TypeToken<List<DaTaoKeDetailV2>>() {
                }.getType();
                List<DaTaoKeDetailV2> list = gson.fromJson(data, type);
                daTaoKeGoodsResult.setGoodsList(list);
            }
            daTaoKeGoodsResult.setPageId(dataJson.optString("pageId"));
            daTaoKeGoodsResult.setTotalCount(dataJson.optLong("totalNum"));
        }
        return daTaoKeGoodsResult;
    }
    /**
     * 失效商品
     *
     * @param pageId
     * @return
     */
    public static DaTaoKeGoodsResult getInvalidGoodsList(String pageId, String startTime, String endTime) {
        TaoKeAppInfo app = getRandomApp();
        DaTaoKeGoodsResult daTaoKeGoodsResult = new DaTaoKeGoodsResult();
        Map<String, String> params = new TreeMap<>();
        params.put("version", "v1.0.0");
        params.put("appKey", app.getAppKey());
        params.put("pageSize", 200 + "");
        if (!StringUtil.isNullOrEmpty(startTime))
            params.put("startTime", startTime);
        if (!StringUtil.isNullOrEmpty(endTime))
            params.put("endTime", endTime);
        if (!StringUtil.isNullOrEmpty(pageId))
            params.put("pageId", pageId);
        params.put("sign", getSign(params, app.getAppSecret()));
        String result = HttpUtil.get("https://openapi.dataoke.com/api/goods/get-stale-goods-by-time", params,
                new HashMap<>());
        JSONObject json = JSONObject.fromObject(result);
        JSONObject dataJson = json.optJSONObject("data");
        if (dataJson != null) {
            JSONArray array = dataJson.optJSONArray("list");
            if (array != null) {
                String data = array.toString();
                Type type = new TypeToken<List<DaTaoKeDetailV2>>() {
                }.getType();
                List<DaTaoKeDetailV2> list = gson.fromJson(data, type);
                daTaoKeGoodsResult.setGoodsList(list);
            }
            daTaoKeGoodsResult.setPageId(dataJson.optString("pageId"));
            daTaoKeGoodsResult.setTotalCount(dataJson.optLong("totalNum"));
        }
        return daTaoKeGoodsResult;
    }
    public static DaTaoKeGoodsResult getNewGoodsList(String pageId, String startTime, String endTime) {
        TaoKeAppInfo app = getRandomApp();
        DaTaoKeGoodsResult daTaoKeGoodsResult = new DaTaoKeGoodsResult();
        Map<String, String> params = new TreeMap<>();
        params.put("version", "v1.0.0");
        params.put("appKey", app.getAppKey());
        params.put("pageSize", 200 + "");
        if (!StringUtil.isNullOrEmpty(startTime))
            params.put("startTime", startTime);
        if (!StringUtil.isNullOrEmpty(endTime))
            params.put("endTime", endTime);
        if (!StringUtil.isNullOrEmpty(pageId))
            params.put("pageId", pageId);
        params.put("sign", getSign(params, app.getAppSecret()));
        String result = HttpUtil.get("https://openapi.dataoke.com/api/goods/pull-goods-by-time", params,
                new HashMap<>());
        JSONObject json = JSONObject.fromObject(result);
        JSONObject dataJson = json.optJSONObject("data");
        if (dataJson != null) {
            JSONArray array = dataJson.optJSONArray("list");
            if (array != null) {
                String data = array.toString();
                Type type = new TypeToken<List<DaTaoKeDetailV2>>() {
                }.getType();
                List<DaTaoKeDetailV2> list = gson.fromJson(data, type);
                daTaoKeGoodsResult.setGoodsList(list);
            }
            daTaoKeGoodsResult.setPageId(dataJson.optString("pageId"));
            daTaoKeGoodsResult.setTotalCount(dataJson.optLong("totalNum"));
        }
        return daTaoKeGoodsResult;
    }
    public static DaTaoKeGoodsResult getUpdateGoodsList(String pageId, String startTime, String endTime) {
        TaoKeAppInfo app = getRandomApp();
        DaTaoKeGoodsResult daTaoKeGoodsResult = new DaTaoKeGoodsResult();
        Map<String, String> params = new TreeMap<>();
        params.put("version", "v1.0.0");
        params.put("appKey", app.getAppKey());
        params.put("pageSize", 200 + "");
        if (!StringUtil.isNullOrEmpty(startTime))
            params.put("startTime", startTime);
        if (!StringUtil.isNullOrEmpty(endTime))
            params.put("endTime", endTime);
        if (!StringUtil.isNullOrEmpty(pageId))
            params.put("pageId", pageId);
        params.put("sign", getSign(params, app.getAppSecret()));
        String result = HttpUtil.get("https://openapi.dataoke.com/api/goods/get-newest-goods", params, new HashMap<>());
        JSONObject json = JSONObject.fromObject(result);
        JSONObject dataJson = json.optJSONObject("data");
        if (dataJson != null) {
            JSONArray array = dataJson.optJSONArray("list");
            if (array != null) {
                String data = array.toString();
                Type type = new TypeToken<List<DaTaoKeDetailV2>>() {
                }.getType();
                List<DaTaoKeDetailV2> list = gson.fromJson(data, type);
                daTaoKeGoodsResult.setGoodsList(list);
            }
            daTaoKeGoodsResult.setPageId(dataJson.optString("pageId"));
            daTaoKeGoodsResult.setTotalCount(dataJson.optLong("totalNum"));
        }
        return daTaoKeGoodsResult;
    }
    public static DaTaoKeGoodsResult search(String key, List<Integer> cidList, int page, int pageSize, int sort) {
        TaoKeAppInfo app = getRandomApp();
        DaTaoKeGoodsResult daTaoKeGoodsResult = new DaTaoKeGoodsResult();
        Map<String, String> params = new TreeMap<>();
        params.put("version", "v1.0.0");
        params.put("appKey", app.getAppKey());
        params.put("pageSize", 200 + "");
        params.put("pageId", page + "");
        String cids = "";
        if (cidList != null && cidList.size() > 0)
            for (Integer cid : cidList) {
                cids += cid + ",";
            }
        if (cids.endsWith(","))
            cids = cids.substring(0, cids.length() - 1);
        if (!StringUtil.isNullOrEmpty(cids))
            params.put("cids", cids);
        params.put("keyWords", key);
        params.put("sort", sort + "");
        params.put("sign", getSign(params, app.getAppSecret()));
        String result = HttpUtil.get("https://openapi.dataoke.com/api/goods/get-dtk-search-goods", params,
                new HashMap<>());
        JSONObject json = JSONObject.fromObject(result);
        JSONObject dataJson = json.optJSONObject("data");
        if (dataJson != null) {
            JSONArray array = dataJson.optJSONArray("list");
            if (array != null) {
                String data = array.toString();
                Type type = new TypeToken<List<DaTaoKeDetailV2>>() {
                }.getType();
                List<DaTaoKeDetailV2> list = gson.fromJson(data, type);
                daTaoKeGoodsResult.setGoodsList(list);
            }
            daTaoKeGoodsResult.setPageId(dataJson.optString("pageId"));
            daTaoKeGoodsResult.setTotalCount(dataJson.optLong("totalNum"));
        }
        return daTaoKeGoodsResult;
    }
    private static String getSign(Map<String, String> map, String secretKey) {
        if (map.size() == 0) {
            return "";
        }
        StringBuffer sb = new StringBuffer("");
        Set<String> keySet = map.keySet();
        Iterator<String> iter = keySet.iterator();
        while (iter.hasNext()) {
            String key = iter.next();
            sb.append("&" + key + "=" + map.get(key));
        }
        sb.deleteCharAt(0);
        String signStr = "";
        signStr = sb.toString() + "&key=" + secretKey;
        return StringUtil.Md5(signStr).toUpperCase();
    }
    public static TaoBaoShopDTO convertTaoBaoShopDTO(JSONObject data) {
fanli/src/main/java/com/yeshi/fanli/util/taobao/DaTaoKeUtil.java
@@ -5,8 +5,6 @@
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.jsoup.Jsoup;
@@ -20,10 +18,10 @@
import com.yeshi.fanli.entity.taobao.TaoBaoHead;
import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2;
import com.yeshi.fanli.tag.PageEntity;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
@@ -534,4 +532,19 @@
        return goods;
    }
    public static TaoBaoGoodsBrief filterTaoBaoGoods(TaoBaoGoodsBrief goods, DaTaoKeDetailV2 detail) {
        if (detail != null) {
            // 重新设置标题与券价格
            goods.setTitle(detail.getDtitle());
            goods.setCouponAmount(detail.getCouponPrice());
            goods.setZkPrice(detail.getOriginalPrice());
            if (new BigDecimal(detail.getCouponConditions()).compareTo(new BigDecimal(0)) > 0)
                goods.setCouponInfo(String.format("满%s元减%s元", detail.getCouponConditions(),
                        MoneyBigDecimalUtil.getWithNoZera(detail.getCouponPrice()).toString()));
            else
                goods.setCouponInfo(String.format("%s元无条件券", detail.getCouponPrice()));
        }
        return goods;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoBaoUtil.java
@@ -53,6 +53,7 @@
import com.yeshi.fanli.entity.taobao.TaoBaoShop;
import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.goods.TaoBaoLinkService;
@@ -64,7 +65,6 @@
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TaoBaoHttpUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
@@ -1698,6 +1698,32 @@
        return taoBaoGoods;
    }
    public static TaoBaoGoodsBrief convert(DaTaoKeDetailV2 detail) {
        TaoBaoGoodsBrief taoBaoGoods = new TaoBaoGoodsBrief();
        taoBaoGoods.setAuctionId(detail.getGoodsId());
        taoBaoGoods.setBiz30day(detail.getMonthSales());
        taoBaoGoods.setCouponAmount(detail.getCouponPrice());
        taoBaoGoods.setCouponInfo(String.format("满%s元减%s元", detail.getCouponConditions(),
                MoneyBigDecimalUtil.getWithNoZera(detail.getCouponPrice())));
        if (detail.getCouponTotalNum() != null && detail.getCouponReceiveNum() != null)
            taoBaoGoods.setCouponLeftCount(detail.getCouponTotalNum() - detail.getCouponReceiveNum());
        else
            taoBaoGoods.setCouponLeftCount(0);
        taoBaoGoods.setCouponStartFee(new BigDecimal(detail.getCouponConditions()));
        taoBaoGoods.setCouponTotalCount(detail.getCouponTotalNum());
        taoBaoGoods.setPictUrl(detail.getMainPic());
        taoBaoGoods.setPictUrlWhite(detail.getMainPic());
        taoBaoGoods.setSellerId(detail.getSellerId());
        taoBaoGoods.setShopTitle(detail.getShopName());
        taoBaoGoods.setTitle(detail.getDtitle());
        taoBaoGoods.setUserType(detail.getShopType());
        taoBaoGoods.setZkPrice(detail.getOriginalPrice());
        taoBaoGoods.setTkRate(detail.getCommissionRate());
        taoBaoGoods.setTkCommFee(new BigDecimal("0"));
        taoBaoGoods.setState(0);
        return taoBaoGoods;
    }
    /**
     * 获取淘宝联盟的授权链接
     *