admin
2021-04-23 d297d57c6e460e44b123bd6aa8608745a4d5d037
淘礼金兼容
3个文件已修改
28个文件已添加
3080 ■■■■■ 已修改文件
src/main/java/com/yeshi/buwan/controller/ECGoodsController.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/api/TaoBaoController.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dao/base/MongodbBaseDao.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dao/tb/YouZhiHaoHuoGoodsDao.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/domain/tb/YouZhiHaoHuoGoods.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dto/tb/TLJBuyHongBaoVO.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dto/tb/TaoBaoCouponCache.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dto/tb/TaoBaoGoodsBrief.java 898 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dto/tb/TaoBaoGoodsBriefExtra.java 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dto/tb/TaoBaoGoodsYuShouInfo.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dto/tb/TaoBaoHead.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dto/tb/TaoBaoHongBaoInfo.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dto/tb/TaoBaoQuanInfo.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dto/tb/TaoKeAppInfo.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dto/tb/TaoLiJinDTO.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/exception/BaseException.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/exception/taobao/TaoBaoAuthException.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/exception/taobao/TaoBaoBuyRelationMapException.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/exception/taobao/TaoBaoConvertLinkException.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/exception/taobao/TaoBaoTokenException.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/exception/taobao/TaoBaoTokenParseException.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/exception/taobao/TaoKeApiException.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/exception/taobao/TaoLiJinCreateException.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/exception/taobao/TaoLiJinException.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/exception/taobao/TaobaoGoodsDownException.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/exception/taobao/TaobaoGoodsUpdateException.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/tb/TaoBaoHttpUtil.java 324 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/tb/TaoKeApiUtil.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/tb/TaoKeBaseUtil.java 335 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/GeneralTest.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/hxh/spring/test/PPTVTest.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/controller/ECGoodsController.java
New file
@@ -0,0 +1,52 @@
package com.yeshi.buwan.controller;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.yeshi.buwan.dao.tb.YouZhiHaoHuoGoodsDao;
import com.yeshi.buwan.domain.tb.YouZhiHaoHuoGoods;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Controller
@RequestMapping("ecgoods")
public class ECGoodsController {
    @Resource
    private YouZhiHaoHuoGoodsDao youZhiHaoHuoGoodsDao;
    @ResponseBody
    @RequestMapping("tb/youzhihaohuo")
    public String youZhiHaoHuo(String data, HttpServletResponse response) {
        //删除1小时以前的数据
        delete();
        Type type = new TypeToken<List<YouZhiHaoHuoGoods>>() {
        }.getType();
        List<YouZhiHaoHuoGoods> list = new Gson().fromJson(data, type);
        for (YouZhiHaoHuoGoods goods : list) {
            goods.setCreateTime(new Date());
            goods.setPromotionPriceInt(goods.getPromotionPrice().multiply(new BigDecimal(100)).intValue());
            youZhiHaoHuoGoodsDao.save(goods);
        }
        return "";
    }
    private void delete() {
        Query query = new Query();
        query.addCriteria(Criteria.where("createTime").lt(new Date(System.currentTimeMillis() - 1000 * 60 * 60)));
        youZhiHaoHuoGoodsDao.delete(query);
    }
}
src/main/java/com/yeshi/buwan/controller/api/TaoBaoController.java
New file
@@ -0,0 +1,127 @@
package com.yeshi.buwan.controller.api;
import com.google.gson.Gson;
import com.yeshi.buwan.dao.tb.YouZhiHaoHuoGoodsDao;
import com.yeshi.buwan.domain.tb.YouZhiHaoHuoGoods;
import com.yeshi.buwan.dto.tb.TaoKeAppInfo;
import com.yeshi.buwan.dto.tb.TaoLiJinDTO;
import com.yeshi.buwan.exception.taobao.TaoKeApiException;
import com.yeshi.buwan.exception.taobao.TaoLiJinCreateException;
import com.yeshi.buwan.util.*;
import com.yeshi.buwan.util.tb.TaoKeApiUtil;
import com.yeshi.buwan.vo.AcceptData;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Controller
@RequestMapping("api/v2/tb")
public class TaoBaoController {
    Logger logger = LoggerFactory.getLogger(TaoBaoController.class);
    @Resource
    private YouZhiHaoHuoGoodsDao youZhiHaoHuoGoodsDao;
    @Resource
    private RedisManager redisManager;
    @RequestMapping("getYouZhiGoodsList")
    @ResponseBody
    public String getYouZhiGoodsList(AcceptData acceptData, int page) {
        Query query = new Query();
        query.with(new Sort(new Sort.Order(Sort.Direction.ASC, "promotionPriceInt")));
        query.skip((page - 1) * Constant.pageCount);
        query.limit(Constant.pageCount);
        List<YouZhiHaoHuoGoods> list = youZhiHaoHuoGoodsDao.findList(query);
        for (YouZhiHaoHuoGoods goods : list) {
            BigDecimal money = goods.getPromotionPrice().subtract(new BigDecimal("1.8"));
            money = money.compareTo(new BigDecimal(0)) < 0 ? new BigDecimal(0) : money;
            goods.setPromotionPrice(money);
        }
        long count = youZhiHaoHuoGoodsDao.count(query);
        JSONObject data = new JSONObject();
        data.put("list", list);
        data.put("count", count);
        return JsonUtil.loadTrueJson(data.toString());
    }
    @RequestMapping("getYouZhiGoodsDetail")
    @ResponseBody
    public String getYouZhiGoodsDetail(AcceptData acceptData, String id) {
        YouZhiHaoHuoGoods goods = youZhiHaoHuoGoodsDao.get(id);
        JSONObject data = new JSONObject();
        data.put("goods", new Gson().toJson(goods));
        data.put("token", "8(TIh2X2LmQgv)/");
        data.put("url", "https://m.tb.cn/h.4qbqpt4 ");
        return JsonUtil.loadTrueJson(new Gson().toJson(data));
    }
    public static final String TAOBAO_AUTH_APPKEY = "24980167";
    public static final String TAOBAO_AUTH_APPSECRET = "e0a2e05deabf5ce039b52e5b492d5382";
    @RequestMapping("createLiJin")
    @ResponseBody
    public String createLiJin(AcceptData acceptData, String id) {
        YouZhiHaoHuoGoods goods = youZhiHaoHuoGoodsDao.get(id);
        if (goods == null) {
            return JsonUtil.loadFalseJson("商品已下架");
        }
        String identify = StringUtil.isNullOrEmpty(acceptData.getUtdId()) ? acceptData.getDevice() : acceptData.getUtdId();
        String userKey = "tb-yzsp-" + StringUtil.Md5(identify);
        String countStr = redisManager.getCommonString(userKey);
        if (!StringUtil.isNullOrEmpty(countStr) && Integer.parseInt(countStr) > 20) {
            return JsonUtil.loadFalseJson("只能创建20次礼金");
        }
        Date startDate = new Date();
        Date endDate = new Date(TimeUtil.convertGernalTime(TimeUtil.getGernalTime(startDate.getTime() + 1000 * 60 * 60 * 24L, "yyyyMMdd"), "yyyyMMdd"));
        Long auctionId = Long.parseLong(goods.getItemId());
        String name = "影视大全礼金红包";
        BigDecimal perface = new BigDecimal(1);
        int totalNum = 1;
        java.util.Date sendStartTime = startDate;
        Date sendEndTime = endDate;
        java.util.Date useStartTime = startDate;
        java.util.Date useEndTime = endDate;
        TaoKeAppInfo app = new TaoKeAppInfo(TAOBAO_AUTH_APPKEY, TAOBAO_AUTH_APPSECRET, "mm_124933865_56750082_19509850444");
        try {
            TaoLiJinDTO dto = TaoKeApiUtil.createTaoLiJin(auctionId, name, perface, totalNum, sendStartTime, sendEndTime, useStartTime, useEndTime, app);
            redisManager.increase(userKey, (int) ((endDate.getTime() - startDate.getTime()) / 1000));
            String token = TaoKeApiUtil.getTKToken(goods.getPic(), goods.getItemName(), dto.getSendUrl());
            JSONObject data = new JSONObject();
            data.put("token", token);
            data.put("url", dto.getSendUrl());
            return JsonUtil.loadTrueJson(data.toString());
        } catch (TaoLiJinCreateException e) {
            e.printStackTrace();
            return JsonUtil.loadFalseJson("礼金创建失败");
        } catch (TaoKeApiException e) {
            e.printStackTrace();
            return JsonUtil.loadFalseJson("礼金创建失败");
        }
    }
}
src/main/java/com/yeshi/buwan/dao/base/MongodbBaseDao.java
@@ -88,6 +88,10 @@
        mongoTemplate.remove(query, getEntityClass());
    }
    public void delete(Query query) {
        mongoTemplate.remove(query, getEntityClass());
    }
    public void deleteByPrimaryKey(Object id) {
        Query query = Query.query(Criteria.where("_id").is(id));
        mongoTemplate.remove(query, getEntityClass());
src/main/java/com/yeshi/buwan/dao/tb/YouZhiHaoHuoGoodsDao.java
New file
@@ -0,0 +1,37 @@
package com.yeshi.buwan.dao.tb;
import com.yeshi.buwan.domain.tb.YouZhiHaoHuoGoods;
import com.yeshi.buwan.dao.base.MongodbBaseDao;
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 java.util.Date;
@Repository
public class YouZhiHaoHuoGoodsDao extends MongodbBaseDao<YouZhiHaoHuoGoods>{
  public void updateSelective(YouZhiHaoHuoGoods bean) {
        Query query = new Query();
        Update update=new Update();
        query.addCriteria(Criteria.where("itemId").is(bean.getItemId()));
        if(bean.getItemName() != null) {
            update.set("itemName", bean.getItemName());
        }
        if(bean.getPic() != null) {
            update.set("pic", bean.getPic());
        }
        if(bean.getPromotionPrice() != null) {
            update.set("promotionPrice", bean.getPromotionPrice());
        }
        if(bean.getPrice() != null) {
            update.set("price", bean.getPrice());
        }
        if(bean.getSellerNickName() != null) {
            update.set("sellerNickName", bean.getSellerNickName());
        }
        update.set("updateTime", new Date());
        update(query, update);
  }
}
src/main/java/com/yeshi/buwan/domain/tb/YouZhiHaoHuoGoods.java
New file
@@ -0,0 +1,97 @@
package com.yeshi.buwan.domain.tb;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Document(collection = "tbYouZhiHaoHuoGoods")
public class YouZhiHaoHuoGoods {
    @Id
    private String itemId;
    private String itemName;
    private String pic;
    private BigDecimal promotionPrice;
    private BigDecimal price;
    private String sellerNickName;
    private Date createTime;
    private Integer promotionPriceInt;
    private List<String> smallImage;
    public Integer getPromotionPriceInt() {
        return promotionPriceInt;
    }
    public void setPromotionPriceInt(Integer promotionPriceInt) {
        this.promotionPriceInt = promotionPriceInt;
    }
    public List<String> getSmallImage() {
        return smallImage;
    }
    public void setSmallImage(List<String> smallImage) {
        this.smallImage = smallImage;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public String getItemId() {
        return itemId;
    }
    public void setItemId(String itemId) {
        this.itemId = itemId;
    }
    public String getItemName() {
        return itemName;
    }
    public void setItemName(String itemName) {
        this.itemName = itemName;
    }
    public String getPic() {
        return pic;
    }
    public void setPic(String pic) {
        this.pic = pic;
    }
    public BigDecimal getPromotionPrice() {
        return promotionPrice;
    }
    public void setPromotionPrice(BigDecimal promotionPrice) {
        this.promotionPrice = promotionPrice;
    }
    public BigDecimal getPrice() {
        return price;
    }
    public void setPrice(BigDecimal price) {
        this.price = price;
    }
    public String getSellerNickName() {
        return sellerNickName;
    }
    public void setSellerNickName(String sellerNickName) {
        this.sellerNickName = sellerNickName;
    }
}
src/main/java/com/yeshi/buwan/dto/tb/TLJBuyHongBaoVO.java
New file
@@ -0,0 +1,57 @@
package com.yeshi.buwan.dto.tb;
import com.google.gson.annotations.Expose;
public class TLJBuyHongBaoVO {
    @Expose
    private String tagName;
    @Expose
    private int total;
    @Expose
    private int left;
    @Expose
    private String money;
    @Expose
    private String tip;
    public String getTagName() {
        return tagName;
    }
    public void setTagName(String tagName) {
        this.tagName = tagName;
    }
    public int getTotal() {
        return total;
    }
    public void setTotal(int total) {
        this.total = total;
    }
    public int getLeft() {
        return left;
    }
    public void setLeft(int left) {
        this.left = left;
    }
    public String getMoney() {
        return money;
    }
    public void setMoney(String money) {
        this.money = money;
    }
    public String getTip() {
        return tip;
    }
    public void setTip(String tip) {
        this.tip = tip;
    }
}
src/main/java/com/yeshi/buwan/dto/tb/TaoBaoCouponCache.java
New file
@@ -0,0 +1,116 @@
package com.yeshi.buwan.dto.tb;
import org.springframework.data.mongodb.core.mapping.Document;
import org.yeshi.utils.StringUtil;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@Document(collection = "taoBaoCouponCache")
public class TaoBaoCouponCache implements Serializable {
    private String id;//主键
    private Long auctionId;//商品Id
    private String activityId;//券ID
    private BigDecimal couponAmount;//券面额
    private BigDecimal couponStartPrice;//使用券的最小价格
    private Date startTime;//券开始时间
    private Date endTime;//券结束时间
    private String pid;//推广位ID
    private String couponLink;//券链接
    private Date createTime;//创建时间
    private Date updateTime;//更新时间
    public String createId() {
        return StringUtil.Md5(this.auctionId + "-" + this.activityId + "-" + this.pid);
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public Long getAuctionId() {
        return auctionId;
    }
    public void setAuctionId(Long auctionId) {
        this.auctionId = auctionId;
    }
    public String getActivityId() {
        return activityId;
    }
    public void setActivityId(String activityId) {
        this.activityId = activityId;
    }
    public BigDecimal getCouponAmount() {
        return couponAmount;
    }
    public void setCouponAmount(BigDecimal couponAmount) {
        this.couponAmount = couponAmount;
    }
    public BigDecimal getCouponStartPrice() {
        return couponStartPrice;
    }
    public void setCouponStartPrice(BigDecimal couponStartPrice) {
        this.couponStartPrice = couponStartPrice;
    }
    public Date getStartTime() {
        return startTime;
    }
    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }
    public Date getEndTime() {
        return endTime;
    }
    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }
    public String getPid() {
        return pid;
    }
    public void setPid(String pid) {
        this.pid = pid;
    }
    public String getCouponLink() {
        return couponLink;
    }
    public void setCouponLink(String couponLink) {
        this.couponLink = couponLink;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}
src/main/java/com/yeshi/buwan/dto/tb/TaoBaoGoodsBrief.java
New file
@@ -0,0 +1,898 @@
package com.yeshi.buwan.dto.tb;
import com.google.gson.annotations.Expose;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
 * 淘宝商品信息
 *
 * @author Administrator
 *
 */
public class TaoBaoGoodsBrief extends TaoBaoGoodsYuShouInfo implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    //@org.yeshi.utils.mybatis.Column(name = "id")
    @Expose
    private Long id;
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "rootCatId")
    private Integer rootCatId;// 0,  一级类目ID
    //@org.yeshi.utils.mybatis.Column(name = "eventCreatorId")
    private Integer eventCreatorId;// 0,
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "leafCatId")
    private Integer leafCatId;// 50011277, 子类目id
    //@org.yeshi.utils.mybatis.Column(name = "debugInfo")
    private String debugInfo;// null,
    //@org.yeshi.utils.mybatis.Column(name = "rootCatScore")
    private Integer rootCatScore;// 0,
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "sellerId")
    private Long sellerId;// 卖家Id
    @Field
    @Expose
    //@org.yeshi.utils.mybatis.Column(name = "userType")
    private Integer userType;// 0,
    @Field
    @Expose
    //@org.yeshi.utils.mybatis.Column(name = "shopTitle")
    private String shopTitle;// 店铺名称
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "pictUrl")
    @Expose
    private String pictUrl;// 主图链接
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "pictUrlWhite")
    @Expose
    private String pictUrlWhite;// 白底色图片链接
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "title")
    @Expose
    private String title;// 商品标题
    @Field
    @Indexed
    //@org.yeshi.utils.mybatis.Column(name = "auctionId")
    @Expose
    private Long auctionId;// 商品ID
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "couponLink")
    @Expose
    private String couponLink;// 优惠券链�?
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "couponLinkTaoToken")
    @Expose
    private String couponLinkTaoToken;//
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "couponActivityId")
    @Expose
    private String couponActivityId;//
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "biz30day")
    @Expose
    private Integer biz30day;// 月销量
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "tkRate")
    @Expose
    private BigDecimal tkRate;// 佣金比例 �?��100
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "nick")
    @Expose
    private String nick;// "yoyo_808611", 店铺名称
    //@org.yeshi.utils.mybatis.Column(name = "includeDxjh")
    @Expose
    private Integer includeDxjh;// 1:定向计划
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "reservePrice")
    @Expose
    private BigDecimal reservePrice;// 588,
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "tkCommFee")
    @Expose
    private BigDecimal tkCommFee;// 32.04,
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "totalFee")
    @Expose
    private BigDecimal totalFee;// 4814.43,
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "totalNum")
    @Expose
    private Integer totalNum;// 229, 库存数量
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "zkPrice")
    @Expose
    private BigDecimal zkPrice;// 无线价格,在售价
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "dayLeft")
    @Expose
    private Integer dayLeft;// -17228,
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "tk3rdRate")
    @Expose
    private String tk3rdRate;// null,
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "auctionUrl")
    @Expose
    private String auctionUrl;// 商品链接
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "rlRate")
    @Expose
    private Double rlRate;// 69.72,
    //@org.yeshi.utils.mybatis.Column(name = "hasRecommended")
    @Expose
    private Integer hasRecommended;// 0,
    //@org.yeshi.utils.mybatis.Column(name = "hasSame")
    @Expose
    private Integer hasSame;// 0,
    //@org.yeshi.utils.mybatis.Column(name = "sameItemPid")
    @Expose
    private Long sameItemPid;// "-232381821",
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "couponTotalCount")
    @Expose
    private Integer couponTotalCount;// 优惠券�?�?
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "couponLeftCount")
    @Expose
    private Integer couponLeftCount;// 优惠券剩余数�?
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "couponAmount")
    @Expose
    private BigDecimal couponAmount;// 优惠金额
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "eventRate")
    @Expose
    private String eventRate;// null,
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "couponShortLink")
    @Expose
    private String couponShortLink;// 优惠券短�?
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "couponInfo")
    @Expose
    private String couponInfo;// 优惠券信�?
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "couponStartFee")
    @Expose
    private BigDecimal couponStartFee;// 优惠券起始优�?
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "couponEffectiveStartTime")
    @Expose
    private String couponEffectiveStartTime;// "2017-02-04",优惠券开始时�?
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "couponEffectiveEndTime")
    @Expose
    private String couponEffectiveEndTime;// 优惠券结束时�?
    //@org.yeshi.utils.mybatis.Column(name = "hasUmpBonus")
    @Expose
    private String hasUmpBonus;// null,
    //@org.yeshi.utils.mybatis.Column(name = "isBizActivity")
    @Expose
    private String isBizActivity;// null,
    //@org.yeshi.utils.mybatis.Column(name = "umpBonus")
    @Expose
    private String umpBonus;// null,
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "rootCategoryName")
    @Expose
    private String rootCategoryName;//  一级分类名称
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "couponOriLink")
    @Expose
    private String couponOriLink;// 优惠券原始链�?
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "userTypeName")
    @Expose
    private String userTypeName;// 用户类型
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "tkMktStatus")
    @Expose
    private String tkMktStatus; // 1:营销返利
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "totalSales")
    @Expose
    private Integer totalSales;// 229, 淘客30天月推广量
    // 入库时间
    //@org.yeshi.utils.mybatis.Column(name = "createtime")
    @Expose
    private Date createtime;
    // 更新时间
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "updatetime")
    @Expose
    private Date updatetime;
    //@org.yeshi.utils.mybatis.Column(name = "state")
    @Expose
    private Integer state;// 0-正常 1-商品下架
    @Field
    //@org.yeshi.utils.mybatis.Column(name = "material_lib_type")
    private Integer materialLibType;//物料库类型
    private String description;//推荐语
    private boolean shopCoupon;//是否为店铺券
    /* 新增字段 2018-7-16 ; 由于数据未从淘宝获取成功,暂不启用 */
    public boolean isShopCoupon() {
        return shopCoupon;
    }
    public void setShopCoupon(boolean shopCoupon) {
        this.shopCoupon = shopCoupon;
    }
    public Integer getMaterialLibType() {
        return materialLibType;
    }
    public void setMaterialLibType(Integer materialLibType) {
        this.materialLibType = materialLibType;
    }
    // //@org.yeshi.utils.mybatis.Column(name = "catLeafName")
    private String leafName; // 子类目名称
    // //@org.yeshi.utils.mybatis.Column(name = "isPrepay")
    private Integer isPrepay; // 是否加入消费者保障 1:是 0 否
    // //@org.yeshi.utils.mybatis.Column(name = "shopDsr")
    private Integer shopDsr; // 店铺评分
    // //@org.yeshi.utils.mybatis.Column(name = "ratesum")
    private Integer ratesum; // 卖家等级
    // //@org.yeshi.utils.mybatis.Column(name = "rfdRate")
    private Integer rfdRate; // 退款率是否低于行业均值
    // //@org.yeshi.utils.mybatis.Column(name = "goodRate")
    private Integer goodRate; // 好评率是否高于行业均值
    // //@org.yeshi.utils.mybatis.Column(name = "payRate30")
    private Integer payRate30; // 成交转化是否高于行业均值
    // //@org.yeshi.utils.mybatis.Column(name = "freeShipment")
    private Integer freeShipment; // 是否包邮
    @Expose
    private String salesCount;
    @Expose
    private List<String> imgList;
    private String dxjhInfo;
    private String provcity;
    private BigDecimal minTkRate;//最小返利比例
    public BigDecimal getMinTkRate() {
        return minTkRate;
    }
    public void setMinTkRate(BigDecimal minTkRate) {
        this.minTkRate = minTkRate;
    }
    public Date getUpdatetime() {
        return updatetime;
    }
    public void setUpdatetime(Date updatetime) {
        this.updatetime = updatetime;
    }
    public Integer getState() {
        return state;
    }
    public void setState(Integer state) {
        this.state = state;
    }
    public String getProvcity() {
        return provcity;
    }
    public void setProvcity(String provcity) {
        this.provcity = provcity;
    }
    public String getDxjhInfo() {
        return dxjhInfo;
    }
    public void setDxjhInfo(String dxjhInfo) {
        this.dxjhInfo = dxjhInfo;
    }
    public Date getCreatetime() {
        return createtime;
    }
    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }
    public TaoBaoGoodsBrief() {
        this.eventCreatorId = 0;
        this.hasRecommended = 0;
        this.hasSame = 0;
        this.rootCatId = 0;
        this.rootCatScore = 0;
        this.sameItemPid = 0L;
        this.totalFee = new BigDecimal(0);
        this.couponStartFee = new BigDecimal(0);
        this.couponTotalCount = 0;
        this.dayLeft = 0;
        this.leafCatId = 0;
        this.couponAmount = new BigDecimal(0);
        this.rlRate = 0.0;
        this.couponLeftCount = 0;
        this.includeDxjh = 0;
    }
    public TaoBaoGoodsBrief(Long id) {
        super();
        this.id = id;
    }
    public TaoBaoGoodsBrief(String shopTitle) {
        super();
        this.shopTitle = shopTitle;
    }
    public List<String> getImgList() {
        return imgList;
    }
    public void setImgList(List<String> imgList) {
        this.imgList = imgList;
    }
    public Integer getRootCatId() {
        return rootCatId;
    }
    public void setRootCatId(Integer rootCatId) {
        this.rootCatId = rootCatId;
    }
    public Integer getEventCreatorId() {
        return eventCreatorId;
    }
    public void setEventCreatorId(Integer eventCreatorId) {
        this.eventCreatorId = eventCreatorId;
    }
    public Integer getLeafCatId() {
        return leafCatId;
    }
    public void setLeafCatId(Integer leafCatId) {
        this.leafCatId = leafCatId;
    }
    public String getDebugInfo() {
        return debugInfo;
    }
    public void setDebugInfo(String debugInfo) {
        this.debugInfo = debugInfo;
    }
    public Integer getRootCatScore() {
        return rootCatScore;
    }
    public void setRootCatScore(Integer rootCatScore) {
        this.rootCatScore = rootCatScore;
    }
    public Long getSellerId() {
        return sellerId;
    }
    public void setSellerId(Long sellerId) {
        this.sellerId = sellerId;
    }
    public Integer getUserType() {
        return userType;
    }
    public void setUserType(Integer userType) {
        this.userType = userType;
    }
    public String getShopTitle() {
        return shopTitle;
    }
    public void setShopTitle(String shopTitle) {
        this.shopTitle = shopTitle;
    }
    public String getPictUrl() {
        return pictUrl;
    }
    public void setPictUrl(String pictUrl) {
        this.pictUrl = pictUrl;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public Long getAuctionId() {
        return auctionId;
    }
    public void setAuctionId(Long auctionId) {
        this.auctionId = auctionId;
    }
    public String getCouponLink() {
        return couponLink;
    }
    public void setCouponLink(String couponLink) {
        this.couponLink = couponLink;
    }
    public String getCouponLinkTaoToken() {
        return couponLinkTaoToken;
    }
    public void setCouponLinkTaoToken(String couponLinkTaoToken) {
        this.couponLinkTaoToken = couponLinkTaoToken;
    }
    public String getCouponActivityId() {
        return couponActivityId;
    }
    public void setCouponActivityId(String couponActivityId) {
        this.couponActivityId = couponActivityId;
    }
    public Integer getBiz30day() {
        return biz30day;
    }
    public void setBiz30day(Integer biz30day) {
        this.biz30day = biz30day;
    }
    public BigDecimal getTkRate() {
        return tkRate;
    }
    public void setTkRate(BigDecimal tkRate) {
        this.tkRate = tkRate;
    }
    public String getNick() {
        return nick;
    }
    public void setNick(String nick) {
        this.nick = nick;
    }
    public Integer getIncludeDxjh() {
        return includeDxjh;
    }
    public void setIncludeDxjh(Integer includeDxjh) {
        this.includeDxjh = includeDxjh;
    }
    public BigDecimal getTkCommFee() {
        return tkCommFee;
    }
    public BigDecimal getReservePrice() {
        return reservePrice;
    }
    public void setReservePrice(BigDecimal reservePrice) {
        this.reservePrice = reservePrice;
    }
    public BigDecimal getTotalFee() {
        return totalFee;
    }
    public void setTotalFee(BigDecimal totalFee) {
        this.totalFee = totalFee;
    }
    public void setTkCommFee(BigDecimal tkCommFee) {
        this.tkCommFee = tkCommFee;
    }
    public Integer getTotalNum() {
        return totalNum;
    }
    public void setTotalNum(Integer totalNum) {
        this.totalNum = totalNum;
    }
    public BigDecimal getZkPrice() {
        return zkPrice;
    }
    public void setZkPrice(BigDecimal zkPrice) {
        this.zkPrice = zkPrice;
    }
    public Integer getDayLeft() {
        return dayLeft;
    }
    public void setDayLeft(Integer dayLeft) {
        this.dayLeft = dayLeft;
    }
    public String getTk3rdRate() {
        return tk3rdRate;
    }
    public void setTk3rdRate(String tk3rdRate) {
        this.tk3rdRate = tk3rdRate;
    }
    public String getAuctionUrl() {
        return auctionUrl;
    }
    public void setAuctionUrl(String auctionUrl) {
        this.auctionUrl = auctionUrl;
    }
    public Double getRlRate() {
        return rlRate;
    }
    public void setRlRate(Double rlRate) {
        this.rlRate = rlRate;
    }
    public Integer getHasRecommended() {
        return hasRecommended;
    }
    public void setHasRecommended(Integer hasRecommended) {
        this.hasRecommended = hasRecommended;
    }
    public Integer getHasSame() {
        return hasSame;
    }
    public void setHasSame(Integer hasSame) {
        this.hasSame = hasSame;
    }
    public Long getSameItemPid() {
        return sameItemPid;
    }
    public void setSameItemPid(Long sameItemPid) {
        this.sameItemPid = sameItemPid;
    }
    public Integer getCouponTotalCount() {
        return couponTotalCount;
    }
    public void setCouponTotalCount(Integer couponTotalCount) {
        this.couponTotalCount = couponTotalCount;
    }
    public Integer getCouponLeftCount() {
        return couponLeftCount;
    }
    public void setCouponLeftCount(Integer couponLeftCount) {
        this.couponLeftCount = couponLeftCount;
    }
    public BigDecimal getCouponAmount() {
        return couponAmount;
    }
    public void setCouponAmount(BigDecimal couponAmount) {
        this.couponAmount = couponAmount;
    }
    public String getEventRate() {
        return eventRate;
    }
    public void setEventRate(String eventRate) {
        this.eventRate = eventRate;
    }
    public String getCouponShortLink() {
        return couponShortLink;
    }
    public void setCouponShortLink(String couponShortLink) {
        this.couponShortLink = couponShortLink;
    }
    public String getCouponInfo() {
        return couponInfo;
    }
    public void setCouponInfo(String couponInfo) {
        this.couponInfo = couponInfo;
    }
    public BigDecimal getCouponStartFee() {
        return couponStartFee;
    }
    public void setCouponStartFee(BigDecimal couponStartFee) {
        this.couponStartFee = couponStartFee;
    }
    public String getCouponEffectiveStartTime() {
        return couponEffectiveStartTime;
    }
    public void setCouponEffectiveStartTime(String couponEffectiveStartTime) {
        this.couponEffectiveStartTime = couponEffectiveStartTime;
    }
    public String getCouponEffectiveEndTime() {
        return couponEffectiveEndTime;
    }
    public void setCouponEffectiveEndTime(String couponEffectiveEndTime) {
        this.couponEffectiveEndTime = couponEffectiveEndTime;
    }
    public String getHasUmpBonus() {
        return hasUmpBonus;
    }
    public void setHasUmpBonus(String hasUmpBonus) {
        this.hasUmpBonus = hasUmpBonus;
    }
    public String getIsBizActivity() {
        return isBizActivity;
    }
    public void setIsBizActivity(String isBizActivity) {
        this.isBizActivity = isBizActivity;
    }
    public String getUmpBonus() {
        return umpBonus;
    }
    public void setUmpBonus(String umpBonus) {
        this.umpBonus = umpBonus;
    }
    public String getRootCategoryName() {
        return rootCategoryName;
    }
    public void setRootCategoryName(String rootCategoryName) {
        this.rootCategoryName = rootCategoryName;
    }
    public String getCouponOriLink() {
        return couponOriLink;
    }
    public void setCouponOriLink(String couponOriLink) {
        this.couponOriLink = couponOriLink;
    }
    public String getUserTypeName() {
        return userTypeName;
    }
    public void setUserTypeName(String userTypeName) {
        this.userTypeName = userTypeName;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getTkMktStatus() {
        return tkMktStatus;
    }
    public void setTkMktStatus(String tkMktStatus) {
        this.tkMktStatus = tkMktStatus;
    }
    public String getSalesCount() {
        return salesCount;
    }
    public void setSalesCount(String salesCount) {
        this.salesCount = salesCount;
    }
    public Integer getIsPrepay() {
        return isPrepay;
    }
    public void setIsPrepay(Integer isPrepay) {
        this.isPrepay = isPrepay;
    }
    public Integer getShopDsr() {
        return shopDsr;
    }
    public void setShopDsr(Integer shopDsr) {
        this.shopDsr = shopDsr;
    }
    public Integer getRatesum() {
        return ratesum;
    }
    public void setRatesum(Integer ratesum) {
        this.ratesum = ratesum;
    }
    public Integer getRfdRate() {
        return rfdRate;
    }
    public void setRfdRate(Integer rfdRate) {
        this.rfdRate = rfdRate;
    }
    public Integer getGoodRate() {
        return goodRate;
    }
    public void setGoodRate(Integer goodRate) {
        this.goodRate = goodRate;
    }
    public Integer getPayRate30() {
        return payRate30;
    }
    public void setPayRate30(Integer payRate30) {
        this.payRate30 = payRate30;
    }
    public Integer getFreeShipment() {
        return freeShipment;
    }
    public void setFreeShipment(Integer freeShipment) {
        this.freeShipment = freeShipment;
    }
    public String getLeafName() {
        return leafName;
    }
    public void setLeafName(String leafName) {
        this.leafName = leafName;
    }
    public Integer getTotalSales() {
        return totalSales;
    }
    public void setTotalSales(Integer totalSales) {
        this.totalSales = totalSales;
    }
    public String getPictUrlWhite() {
        return pictUrlWhite;
    }
    public void setPictUrlWhite(String pictUrlWhite) {
        this.pictUrlWhite = pictUrlWhite;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
}
src/main/java/com/yeshi/buwan/dto/tb/TaoBaoGoodsBriefExtra.java
New file
@@ -0,0 +1,166 @@
package com.yeshi.buwan.dto.tb;
import com.google.gson.annotations.Expose;
import java.math.BigDecimal;
public class TaoBaoGoodsBriefExtra extends TaoBaoGoodsBrief {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    @Expose
    private boolean baoyou;
    @Expose
    private int shopType;// 0-无 1-淘宝 2-天猫
    @Expose
    private TaoBaoQuanInfo taoBaoQuanInfo;
    @Expose
    private TaoBaoHongBaoInfo taoBaoHongBaoInfo;
    @Expose
    private int showType;// 0-没有红包与券 1-只有券 2-只有红包 3-有券和红包
    @Expose
    private BigDecimal quanPrice; // 券后价
    @Expose
    private String tbToken;
    @Expose
    private int collected; // 0-没有收藏 1-已收藏
    @Expose
    private int moneyType;// 资金类型 1-返  2-奖
    @Expose
    private int salesType;//销量类型:1-月销量  2-2小时销量  3-今日销量
    @Expose
    private boolean coupon; // 是否有券
    @Expose
    private boolean recommend; // 是否推荐
    @Expose
    private String spreadMoney;// 推广红包
    @Expose
    private TLJBuyHongBaoVO tljBuyHongBao;
    public TLJBuyHongBaoVO getTljBuyHongBao() {
        return tljBuyHongBao;
    }
    public void setTljBuyHongBao(TLJBuyHongBaoVO tljBuyHongBao) {
        this.tljBuyHongBao = tljBuyHongBao;
    }
    public int getMoneyType() {
        return moneyType;
    }
    public void setMoneyType(int moneyType) {
        this.moneyType = moneyType;
    }
    public int getSalesType() {
        return salesType;
    }
    public void setSalesType(int salesType) {
        this.salesType = salesType;
    }
    public String getTbToken() {
        return tbToken;
    }
    public void setTbToken(String tbToken) {
        this.tbToken = tbToken;
    }
    public BigDecimal getQuanPrice() {
        return quanPrice;
    }
    public void setQuanPrice(BigDecimal quanPrice) {
        this.quanPrice = quanPrice;
    }
    public int getShowType() {
        return showType;
    }
    public void setShowType(int showType) {
        this.showType = showType;
    }
    public boolean isBaoyou() {
        return baoyou;
    }
    public void setBaoyou(boolean baoyou) {
        this.baoyou = baoyou;
    }
    public int getShopType() {
        return shopType;
    }
    public void setShopType(int shopType) {
        this.shopType = shopType;
    }
    public TaoBaoQuanInfo getTaoBaoQuanInfo() {
        return taoBaoQuanInfo;
    }
    public void setTaoBaoQuanInfo(TaoBaoQuanInfo taoBaoQuanInfo) {
        this.taoBaoQuanInfo = taoBaoQuanInfo;
    }
    public TaoBaoHongBaoInfo getTaoBaoHongBaoInfo() {
        return taoBaoHongBaoInfo;
    }
    public void setTaoBaoHongBaoInfo(TaoBaoHongBaoInfo taoBaoHongBaoInfo) {
        this.taoBaoHongBaoInfo = taoBaoHongBaoInfo;
    }
    public int getCollected() {
        return collected;
    }
    public void setCollected(int collected) {
        this.collected = collected;
    }
    public boolean isCoupon() {
        return coupon;
    }
    public void setCoupon(boolean coupon) {
        this.coupon = coupon;
    }
    public boolean isRecommend() {
        return recommend;
    }
    public void setRecommend(boolean recommend) {
        this.recommend = recommend;
    }
    public String getSpreadMoney() {
        return spreadMoney;
    }
    public void setSpreadMoney(String spreadMoney) {
        this.spreadMoney = spreadMoney;
    }
}
src/main/java/com/yeshi/buwan/dto/tb/TaoBaoGoodsYuShouInfo.java
New file
@@ -0,0 +1,122 @@
package com.yeshi.buwan.dto.tb;
import java.math.BigDecimal;
/**
 * 淘宝预售信息
 *
 * @author Administrator
 *
 */
public class TaoBaoGoodsYuShouInfo {
    private String ysylClickUrl;// 预售有礼-推广链接
    private String ysylTljFace;// 预售有礼-预估淘礼金(元)
    private String ysylTljSendTime;// 预售有礼-淘礼金发放时间
    private String ysylTljUseEndTime;// 淘礼金使用结束时间
    private String ysylTljUseStartTime;// 淘礼金使用开始时间
    private BigDecimal ysylCommissionRate;// 预售有礼-佣金比例(%)
    private String presaleDiscountFeeText;// 预售商品-优惠信息
    private String presaleTailEndTime;// 预售商品-付尾款结束时间(毫秒)
    private String presaleTailStartTime;// 预售商品-付尾款开始时间(毫秒)
    private String presaleEndTime;// 预售商品-付定金结束时间(毫秒)
    private String presaleStartTime;// 预售商品-付定金开始时间(毫秒)
    private String presaleDeposit;// 预售商品-定金(元)
    public String getPresaleTailEndTime() {
        return presaleTailEndTime;
    }
    public void setPresaleTailEndTime(String presaleTailEndTime) {
        this.presaleTailEndTime = presaleTailEndTime;
    }
    public String getPresaleTailStartTime() {
        return presaleTailStartTime;
    }
    public void setPresaleTailStartTime(String presaleTailStartTime) {
        this.presaleTailStartTime = presaleTailStartTime;
    }
    public String getPresaleEndTime() {
        return presaleEndTime;
    }
    public void setPresaleEndTime(String presaleEndTime) {
        this.presaleEndTime = presaleEndTime;
    }
    public String getPresaleStartTime() {
        return presaleStartTime;
    }
    public void setPresaleStartTime(String presaleStartTime) {
        this.presaleStartTime = presaleStartTime;
    }
    public String getPresaleDeposit() {
        return presaleDeposit;
    }
    public void setPresaleDeposit(String presaleDeposit) {
        this.presaleDeposit = presaleDeposit;
    }
    public String getYsylClickUrl() {
        return ysylClickUrl;
    }
    public void setYsylClickUrl(String ysylClickUrl) {
        this.ysylClickUrl = ysylClickUrl;
    }
    public String getYsylTljFace() {
        return ysylTljFace;
    }
    public void setYsylTljFace(String ysylTljFace) {
        this.ysylTljFace = ysylTljFace;
    }
    public String getYsylTljSendTime() {
        return ysylTljSendTime;
    }
    public void setYsylTljSendTime(String ysylTljSendTime) {
        this.ysylTljSendTime = ysylTljSendTime;
    }
    public String getYsylTljUseEndTime() {
        return ysylTljUseEndTime;
    }
    public void setYsylTljUseEndTime(String ysylTljUseEndTime) {
        this.ysylTljUseEndTime = ysylTljUseEndTime;
    }
    public String getYsylTljUseStartTime() {
        return ysylTljUseStartTime;
    }
    public void setYsylTljUseStartTime(String ysylTljUseStartTime) {
        this.ysylTljUseStartTime = ysylTljUseStartTime;
    }
    public BigDecimal getYsylCommissionRate() {
        return ysylCommissionRate;
    }
    public void setYsylCommissionRate(BigDecimal ysylCommissionRate) {
        this.ysylCommissionRate = ysylCommissionRate;
    }
    public String getPresaleDiscountFeeText() {
        return presaleDiscountFeeText;
    }
    public void setPresaleDiscountFeeText(String presaleDiscountFeeText) {
        this.presaleDiscountFeeText = presaleDiscountFeeText;
    }
}
src/main/java/com/yeshi/buwan/dto/tb/TaoBaoHead.java
New file
@@ -0,0 +1,15 @@
package com.yeshi.buwan.dto.tb;
public class TaoBaoHead {
    private int docsfound;
    public int getDocsfound() {
        return docsfound;
    }
    public void setDocsfound(int docsfound) {
        this.docsfound = docsfound;
    }
}
src/main/java/com/yeshi/buwan/dto/tb/TaoBaoHongBaoInfo.java
New file
@@ -0,0 +1,45 @@
package com.yeshi.buwan.dto.tb;
import com.google.gson.annotations.Expose;
import java.math.BigDecimal;
//密朵红包信息
public class TaoBaoHongBaoInfo {
    @Expose
    private BigDecimal hongbao;
    @Expose
    private String rate;
    /**
     * 0:红包 1:比率
     */
    @Expose
    private int type;
    public BigDecimal getHongbao() {
        return hongbao;
    }
    public void setHongbao(BigDecimal hongbao) {
        this.hongbao = hongbao;
    }
    public String getRate() {
        return rate;
    }
    public void setRate(String rate) {
        this.rate = rate;
    }
    public int getType() {
        return type;
    }
    public void setType(int type) {
        this.type = type;
    }
}
src/main/java/com/yeshi/buwan/dto/tb/TaoBaoQuanInfo.java
New file
@@ -0,0 +1,102 @@
package com.yeshi.buwan.dto.tb;
import com.google.gson.annotations.Expose;
import java.math.BigDecimal;
//淘宝优惠券信息
public class TaoBaoQuanInfo {
    @Expose
    private int couponTotalCount;// 优惠券总数
    @Expose
    private int couponLeftCount;// 优惠券剩余数量
    @Expose
    private BigDecimal couponAmount;// 优惠金额
    @Expose
    private String couponInfo;// 优惠券信息
    @Expose
    private BigDecimal couponStartFee;// 优惠券起始优惠
    @Expose
    private String couponEffectiveStartTime;
    @Expose
    private String couponEffectiveEndTime;
    @Expose
    private BigDecimal couponPrice;// 券后价
    @Expose
    private String couponLink;// 券的链接
    public String getCouponLink() {
        return couponLink;
    }
    public void setCouponLink(String couponLink) {
        this.couponLink = couponLink;
    }
    public int getCouponTotalCount() {
        return couponTotalCount;
    }
    public void setCouponTotalCount(int couponTotalCount) {
        this.couponTotalCount = couponTotalCount;
    }
    public int getCouponLeftCount() {
        return couponLeftCount;
    }
    public void setCouponLeftCount(int couponLeftCount) {
        this.couponLeftCount = couponLeftCount;
    }
    public String getCouponInfo() {
        return couponInfo;
    }
    public void setCouponInfo(String couponInfo) {
        this.couponInfo = couponInfo;
    }
    public String getCouponEffectiveStartTime() {
        return couponEffectiveStartTime;
    }
    public void setCouponEffectiveStartTime(String couponEffectiveStartTime) {
        this.couponEffectiveStartTime = couponEffectiveStartTime;
    }
    public String getCouponEffectiveEndTime() {
        return couponEffectiveEndTime;
    }
    public void setCouponEffectiveEndTime(String couponEffectiveEndTime) {
        this.couponEffectiveEndTime = couponEffectiveEndTime;
    }
    public BigDecimal getCouponAmount() {
        return couponAmount;
    }
    public void setCouponAmount(BigDecimal couponAmount) {
        this.couponAmount = couponAmount;
    }
    public BigDecimal getCouponStartFee() {
        return couponStartFee;
    }
    public void setCouponStartFee(BigDecimal couponStartFee) {
        this.couponStartFee = couponStartFee;
    }
    public BigDecimal getCouponPrice() {
        return couponPrice;
    }
    public void setCouponPrice(BigDecimal couponPrice) {
        this.couponPrice = couponPrice;
    }
}
src/main/java/com/yeshi/buwan/dto/tb/TaoKeAppInfo.java
New file
@@ -0,0 +1,62 @@
package com.yeshi.buwan.dto.tb;
/**
 * 淘客的app信息
 *
 * @author Administrator
 *
 */
public class TaoKeAppInfo {
    private String appKey;
    private String appSecret;
    public TaoKeAppInfo(String appKey, String appSecret) {
        this.appKey = appKey;
        this.appSecret = appSecret;
    }
    public TaoKeAppInfo(String appKey, String appSecret, String pid) {
        this.appKey = appKey;
        this.appSecret = appSecret;
        this.pid = pid;
    }
    public TaoKeAppInfo() {
    }
    private String pid;
    private String adzoneId;
    public String getAdzoneId() {
        return adzoneId;
    }
    public void setAdzoneId(String adzoneId) {
        this.adzoneId = adzoneId;
    }
    public String getAppKey() {
        return appKey;
    }
    public void setAppKey(String appKey) {
        this.appKey = appKey;
    }
    public String getAppSecret() {
        return appSecret;
    }
    public void setAppSecret(String appSecret) {
        this.appSecret = appSecret;
    }
    public String getPid() {
        return pid;
    }
    public void setPid(String pid) {
        this.pid = pid;
    }
}
src/main/java/com/yeshi/buwan/dto/tb/TaoLiJinDTO.java
New file
@@ -0,0 +1,22 @@
package com.yeshi.buwan.dto.tb;
public class TaoLiJinDTO {
    private String rightsId;
    private String sendUrl;
    public String getRightsId() {
        return rightsId;
    }
    public void setRightsId(String rightsId) {
        this.rightsId = rightsId;
    }
    public String getSendUrl() {
        return sendUrl;
    }
    public void setSendUrl(String sendUrl) {
        this.sendUrl = sendUrl;
    }
}
src/main/java/com/yeshi/buwan/exception/BaseException.java
New file
@@ -0,0 +1,32 @@
package com.yeshi.buwan.exception;
public class BaseException extends Exception {
    private static final long serialVersionUID = 1L;
    private int code;
    private String msg;
    public int getCode() {
        return code;
    }
    public String getMsg() {
        return msg;
    }
    public BaseException(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    public BaseException(String msg) {
        this.msg = msg;
    }
    public BaseException() {
    }
    @Override
    public String getMessage() {
        return this.msg;
    }
}
src/main/java/com/yeshi/buwan/exception/taobao/TaoBaoAuthException.java
New file
@@ -0,0 +1,21 @@
package com.yeshi.buwan.exception.taobao;
import com.yeshi.buwan.exception.BaseException;
//淘宝商品下架
public class TaoBaoAuthException extends BaseException {
    public static int CODE_NOT_REAL_NAME = 1;// 未实名
    public static int CODE_OUT_OF_RULE = 2;// 违规
    public static int CODE_OTHER = 3;// 其他错误
    private static final long serialVersionUID = 1L;
    public TaoBaoAuthException(int code, String msg) {
        super(code, msg);
    }
    public TaoBaoAuthException() {
        super();
    }
}
src/main/java/com/yeshi/buwan/exception/taobao/TaoBaoBuyRelationMapException.java
New file
@@ -0,0 +1,17 @@
package com.yeshi.buwan.exception.taobao;
import com.yeshi.buwan.exception.BaseException;
//淘宝商品下架
public class TaoBaoBuyRelationMapException extends BaseException {
    private static final long serialVersionUID = 1L;
    public TaoBaoBuyRelationMapException(int code, String msg) {
        super(code, msg);
    }
    public TaoBaoBuyRelationMapException() {
        super();
    }
}
src/main/java/com/yeshi/buwan/exception/taobao/TaoBaoConvertLinkException.java
New file
@@ -0,0 +1,18 @@
package com.yeshi.buwan.exception.taobao;
import com.yeshi.buwan.exception.BaseException;
//淘宝转链异常
public class TaoBaoConvertLinkException extends BaseException {
    private static final long serialVersionUID = 1L;
    public TaoBaoConvertLinkException(int code, String msg) {
        super(code, msg);
    }
    public TaoBaoConvertLinkException() {
        super();
    }
}
src/main/java/com/yeshi/buwan/exception/taobao/TaoBaoTokenException.java
New file
@@ -0,0 +1,61 @@
package com.yeshi.buwan.exception.taobao;
import java.util.Map;
/**
 * 淘客API异常
 *
 * @author Administrator
 *
 */
public class TaoBaoTokenException extends Exception {
    private int code;
    private String msg;
    private Map<String, String> params;
    public Map<String, String> getParams() {
        return params;
    }
    public void setParams(Map<String, String> params) {
        this.params = params;
    }
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public TaoBaoTokenException() {
    }
    public TaoBaoTokenException(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    public TaoBaoTokenException(int code, String msg, Map<String, String> params) {
        this.code = code;
        this.msg = msg;
        this.params = params;
    }
    @Override
    public String getMessage() {
        return String.format("错误码为:%s  错误信息为:%s", code + "", msg);
    }
}
src/main/java/com/yeshi/buwan/exception/taobao/TaoBaoTokenParseException.java
New file
@@ -0,0 +1,21 @@
package com.yeshi.buwan.exception.taobao;
import com.yeshi.buwan.exception.BaseException;
public class TaoBaoTokenParseException extends BaseException {
    // 商品已下架
    public static int CODE_GOODS_OFFLINE = 10000;
    // 解析结果为空
    public static int CODE_NULL = 20011;
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    public TaoBaoTokenParseException(int code, String msg) {
        super(code, msg);
    }
}
src/main/java/com/yeshi/buwan/exception/taobao/TaoKeApiException.java
New file
@@ -0,0 +1,73 @@
package com.yeshi.buwan.exception.taobao;
import java.util.Map;
/**
 * 淘客API异常
 *
 * @author Administrator
 *
 */
public class TaoKeApiException extends Exception {
    // 淘宝APPkey的请求限制
    public static final int CODE_APPKEY_LIMIT = 1;
    // 无可用app
    public static final int CODE_NO_USE = 2;
    // api请求错误
    public static final int CODE_API_ERROR = 3;
    // 其他错误
    public static final int CODE_OTHER = 4;
    private int code;
    private String msg;
    private Map<String, String> params;
    public Map<String, String> getParams() {
        return params;
    }
    public void setParams(Map<String, String> params) {
        this.params = params;
    }
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public TaoKeApiException() {
    }
    public TaoKeApiException(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    public TaoKeApiException(int code, String msg, Map<String, String> params) {
        this.code = code;
        this.msg = msg;
        this.params = params;
    }
    @Override
    public String getMessage() {
        return String.format("错误码为:%s  错误信息为:%s", code + "", msg);
    }
}
src/main/java/com/yeshi/buwan/exception/taobao/TaoLiJinCreateException.java
New file
@@ -0,0 +1,25 @@
package com.yeshi.buwan.exception.taobao;
import com.yeshi.buwan.exception.BaseException;
/**
 * 淘礼金创建异常
 *
 * @author Administrator
 */
public class TaoLiJinCreateException extends BaseException {
    public TaoLiJinCreateException(int code, String msg) {
        super(code, msg);
    }
    public TaoLiJinCreateException() {
        super();
    }
    // 商品支持创建红包
    public static final int CODE_TLJ_FORBIDDEN = 101;
    // 官方账户余额不足
    public static final int CODE_TLJ_NO_MONEY = 102;
}
src/main/java/com/yeshi/buwan/exception/taobao/TaoLiJinException.java
New file
@@ -0,0 +1,29 @@
package com.yeshi.buwan.exception.taobao;
import com.yeshi.buwan.exception.BaseException;
//淘客异常
//{"result":{"msg_code":"FAIL_CHECK_ITEM_DAILY_SEND_NUM_CHECK_ERROR","msg_info":"今日该商品淘礼金创建数已超上限,请您明日再试","success":false},"request_id":"10p30v02qadkq"}
//{"result":{"msg_code":"ASSET_ACCOUNT_BALANCE_NOT_ENOUGH","msg_info":"账户预算不足","success":false},"request_id":"5caz9izr7jqp"}
public class TaoLiJinException extends BaseException {
    //今日该商品淘礼金创建数已超上限
    public final static String CODE_FAIL_CHECK_ITEM_DAILY_SEND_NUM_CHECK_ERROR = "FAIL_CHECK_ITEM_DAILY_SEND_NUM_CHECK_ERROR";
    //账户预算不足
    public final static String CODE_ASSET_ACCOUNT_BALANCE_NOT_ENOUGH = "ASSET_ACCOUNT_BALANCE_NOT_ENOUGH";
    public static int CODE_NOT_REAL_NAME = 1;// 未实名
    public static int CODE_OUT_OF_RULE = 2;// 违规
    public static int CODE_OTHER = 3;// 其他错误
    private static final long serialVersionUID = 1L;
    public TaoLiJinException(int code, String msg) {
        super(code, msg);
    }
    public TaoLiJinException() {
        super();
    }
}
src/main/java/com/yeshi/buwan/exception/taobao/TaobaoGoodsDownException.java
New file
@@ -0,0 +1,17 @@
package com.yeshi.buwan.exception.taobao;
import com.yeshi.buwan.exception.BaseException;
//淘宝商品下架
public class TaobaoGoodsDownException extends BaseException {
    private static final long serialVersionUID = 1L;
    public TaobaoGoodsDownException(int code, String msg) {
        super(code, msg);
    }
    public TaobaoGoodsDownException() {
        super();
    }
}
src/main/java/com/yeshi/buwan/exception/taobao/TaobaoGoodsUpdateException.java
New file
@@ -0,0 +1,17 @@
package com.yeshi.buwan.exception.taobao;
import com.yeshi.buwan.exception.BaseException;
//淘宝商品更新异常
public class TaobaoGoodsUpdateException extends BaseException {
    private static final long serialVersionUID = 1L;
    public TaobaoGoodsUpdateException(int code, String msg) {
        super(code, msg);
    }
    public TaobaoGoodsUpdateException() {
        super();
    }
}
src/main/java/com/yeshi/buwan/util/tb/TaoBaoHttpUtil.java
New file
@@ -0,0 +1,324 @@
package com.yeshi.buwan.util.tb;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.httpclient.methods.multipart.StringPart;
import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.*;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class TaoBaoHttpUtil {
    public static String get(String url) {
        return get(url, true);
    }
    public static String get(String url, boolean isProxy) {
        HttpClient client = new HttpClient();
        GetMethod method = new GetMethod(url);
        try {
            client.executeMethod(method);
            return convertInputStreamToString(method.getResponseBodyAsStream());
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
    public static String get(String url, Map<String, String> params, boolean proxy) {
        HttpClient client = new HttpClient();
        // client.getHostConfiguration().setProxy("192.168.1.122", 8888);
        try {
            Iterator<String> keys = params.keySet().iterator();
            url += "?";
            while (keys.hasNext()) {
                String key = keys.next();
                url += String.format("%s=%s&", key, URLEncoder.encode(params.get(key), "UTF-8"));
            }
            // System.out.println("url"+url);
            GetMethod method = new GetMethod(url);
            // 3S的响应超时
            HttpConnectionManagerParams hparams = new HttpConnectionManagerParams();
            hparams.setConnectionTimeout(3000);
            client.getHttpConnectionManager().setParams(hparams);
            /*
             * if(proxy){ Address address = ProxyUtil.getAddressProxy();
             * if(address != null){ HttpConnectionManagerParams hparams = new
             * HttpConnectionManagerParams();
             * hparams.setConnectionTimeout(3500);
             * client.getHttpConnectionManager().setParams(hparams);
             * client.getHostConfiguration().setProxy(address.getIp(),address.
             * getPort()); } }
             */
            // client.getHostConfiguration().setProxy("192.168.1.122",8888);
            client.executeMethod(method);
            String result = method.getResponseBodyAsString();
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
    public static String get(String url, Map<String, String> params, Map<String, String> headers, boolean proxy) {
        HttpClient client = new HttpClient();
        try {
            Iterator<String> keys = params.keySet().iterator();
            url += "?";
            while (keys.hasNext()) {
                String key = keys.next();
                url += String.format("%s=%s&", key, URLEncoder.encode(params.get(key), "UTF-8"));
            }
            System.out.println(url);
            GetMethod method = new GetMethod(url);
            if (headers != null) {
                keys = headers.keySet().iterator();
                while (keys.hasNext()) {
                    String key = keys.next();
                    headers.get(key);
                    method.setRequestHeader(key, headers.get(key));
                }
            }
            /*
             * if(proxy){ Address address = ProxyUtil.getAddressProxy();
             * if(address != null){ HttpConnectionManagerParams hparams = new
             * HttpConnectionManagerParams();
             * hparams.setConnectionTimeout(3500);
             * client.getHttpConnectionManager().setParams(hparams);
             * client.getHostConfiguration().setProxy(address.getIp(),address.
             * getPort()); } }
             */
            // client.getHostConfiguration().setProxy("120.92.118.64", 10000);
            client.executeMethod(method);
            String result = method.getResponseBodyAsString();
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
    public static String taoKeGet(Map<String, String> params) {
        // 聚石塔服务器环境 118.178.179.189
        // result = get("http://118.178.179.189/taoke/", params, false);
        // if (StringUtil.isNullOrEmpty(result))
        //https://eco.taobao.com/router/rest
        //http://gw.api.taobao.com/router/rest
        String result = get("https://eco.taobao.com/router/rest", params, false);
        return result;
    }
    public static String get(String url, Map<String, String> params) {
        // TODO 淘宝的所有请求需要走聚石塔
        // http://118.178.179.189/taoke/
        return get(url, params, false);
    }
    public static String get(String url, String charset) {
        HttpClient client = new HttpClient();
        GetMethod method = new GetMethod(url);
        try {
            client.executeMethod(method);
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(method.getResponseBodyAsStream(), "ISO-8859-1"));
            String tmp = null;
            String htmlRet = "";
            while ((tmp = reader.readLine()) != null) {
                htmlRet += tmp + "\r\n";
            }
            return new String(htmlRet.getBytes(charset), "UTF-8");
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
    public static InputStream getAsInputStream(String url) {
        HttpClient client = new HttpClient();
        GetMethod method = new GetMethod(url);
        try {
            client.executeMethod(method);
            return method.getResponseBodyAsStream();
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    public static InputStream getImage(String url) {
        HttpClient client = new HttpClient();
        GetMethod method = new GetMethod(url);
        try {
            method.setRequestHeader("Content-Type", "image/jpeg");
            client.executeMethod(method);
            return method.getResponseBodyAsStream();
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    public static String post(String url) {
        HttpClient client = new HttpClient();
        PostMethod method = new PostMethod(url);
        method.addRequestHeader("Content-Type", "text/html;charset=UTF-8");
        method.setRequestHeader("Content-Type", "text/html;charset=UTF-8");
        try {
            client.executeMethod(method);
            return convertInputStreamToString(method.getResponseBodyAsStream());
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
    public static String post(String url, Map<String, String> map) {
        Iterator<String> its = map.keySet().iterator();
        NameValuePair[] params = new NameValuePair[map.keySet().size()];
        int p = 0;
        while (its.hasNext()) {
            String key = its.next();
            NameValuePair np = new NameValuePair(key, map.get(key));
            params[p] = np;
            p++;
        }
        HttpClient client = new HttpClient();
        PostMethod method = new PostMethod(url);
        method.addRequestHeader("Content-Type", "text/html;charset=UTF-8");
        method.setRequestHeader("Content-Type", "text/html;charset=UTF-8");
        method.setRequestBody(params);
        try {
            client.executeMethod(method);
            return convertInputStreamToString(method.getResponseBodyAsStream());
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
    public static String post(String url, Map<String, String> map, Map<String, String> headers) {
        org.apache.http.client.HttpClient client = new DefaultHttpClient();
        HttpPost httpRequst = new HttpPost(url);// 创建HttpPost对象
        List<org.apache.http.NameValuePair> params = new ArrayList<org.apache.http.NameValuePair>();
        Iterator<String> its = map.keySet().iterator();
        while (its.hasNext()) {
            String key = its.next();
            params.add(new BasicNameValuePair(key, map.get(key)));
        }
        try {
            HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
            httpRequst.setEntity(entity);
            HttpResponse httpResponse = client.execute(httpRequst);
            if (httpResponse.getStatusLine().getStatusCode() == 200) {
                HttpEntity httpEntity = httpResponse.getEntity();
                String result = EntityUtils.toString(httpEntity, "UTF-8");// 取出应答字符�?
                return result;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
        // Iterator<String> its = map.keySet().iterator();
    }
    private static String convertInputStreamToString(InputStream inputStream) {
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
        StringBuffer stringBuffer = new StringBuffer();
        String str = "";
        try {
            while ((str = br.readLine()) != null) {
                stringBuffer.append(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return stringBuffer.toString();
    }
    @SuppressWarnings("deprecation")
    public static String post(String url, String entity) {
        HttpClient client = new HttpClient();
        PostMethod method = new PostMethod(url);
        method.addRequestHeader("Content-Type", "text/html;charset=UTF-8");
        method.setRequestHeader("Content-Type", "text/html;charset=UTF-8");
        method.setRequestBody(entity);
        try {
            client.executeMethod(method);
            return convertInputStreamToString(method.getResponseBodyAsStream());
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
    public static String postInputStream(String url, File file) throws FileNotFoundException {
        HttpClient client = new HttpClient();
        PostMethod postMethod = new PostMethod(url);
        /*
         * postMethod.addRequestHeader("Content-Type",
         * "text/html;charset=UTF-8");
         * postMethod.setRequestHeader("Content-Type",
         * "text/html;charset=UTF-8");
         */
        Part[] parts = { new StringPart("filename", file.getName()), new StringPart("filelength", file.length() + ""),
                new StringPart("content-type", "image/jpg"), new FilePart("file", file) };
        postMethod.setRequestEntity(new MultipartRequestEntity(parts, postMethod.getParams()));
        try {
            client.executeMethod(postMethod);
            return convertInputStreamToString(postMethod.getResponseBodyAsStream());
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
}
src/main/java/com/yeshi/buwan/util/tb/TaoKeApiUtil.java
New file
@@ -0,0 +1,124 @@
package com.yeshi.buwan.util.tb;
import com.yeshi.buwan.dto.tb.TaoKeAppInfo;
import com.yeshi.buwan.dto.tb.TaoLiJinDTO;
import com.yeshi.buwan.exception.taobao.TaoKeApiException;
import com.yeshi.buwan.exception.taobao.TaoLiJinCreateException;
import net.sf.json.JSONObject;
import org.yeshi.utils.StringUtil;
import org.yeshi.utils.TimeUtil;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
//淘宝客API接口
public class TaoKeApiUtil {
    public static String getTKToken(String logo, String text, String url) {
        if (text == null)
            return null;
        if (text.length() < 5)
            text = "好货:" + text;
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.tpwd.create");
        map.put("url", url);
        map.put("text", text);
        map.put("logo", logo);
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        JSONObject data = JSONObject.fromObject(resultStr);
        if (data.optJSONObject("tbk_tpwd_create_response").optJSONObject("data") != null)
            return data.optJSONObject("tbk_tpwd_create_response").optJSONObject("data").optString("model");
        return null;
    }
    // 淘礼金创建
    //{"result":{"msg_code":"FAIL_CHECK_ITEM_DAILY_SEND_NUM_CHECK_ERROR","msg_info":"今日该商品淘礼金创建数已超上限,请您明日再试","success":false},"request_id":"10p30v02qadkq"}
    //{"result":{"msg_code":"ASSET_ACCOUNT_BALANCE_NOT_ENOUGH","msg_info":"账户预算不足","success":false},"request_id":"5caz9izr7jqp"}
    public static TaoLiJinDTO createTaoLiJin(Long auctionId, String name, BigDecimal perface, int totalNum,
                                             Date sendStartTime, Date sendEndTime, Date useStartTime, Date useEndTime, TaoKeAppInfo app)
            throws TaoLiJinCreateException, TaoKeApiException {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.dg.vegas.tlj.create");
        map.put("adzone_id", app.getPid().split("_")[3]);
        map.put("item_id", auctionId + "");
        map.put("total_num", totalNum + "");
        map.put("name", name);
        map.put("user_total_win_num_limit", "1");
        map.put("security_switch", "false");
        map.put("per_face", perface.toString());
        map.put("send_start_time", TimeUtil.getGernalTime(sendStartTime.getTime(), "yyyy-MM-dd HH:mm:ss"));
        if (sendEndTime != null)
            map.put("send_end_time", TimeUtil.getGernalTime(sendEndTime.getTime(), "yyyy-MM-dd HH:mm:ss"));
        if (useEndTime != null) {
            map.put("use_end_time", TimeUtil.getGernalTime(useEndTime.getTime(), "yyyy-MM-dd"));
            map.put("use_end_time_mode", "2");
        }
        if (useStartTime != null)
            map.put("use_start_time", TimeUtil.getGernalTime(useStartTime.getTime(), "yyyy-MM-dd"));
        try {
            String result = TaoKeBaseUtil.baseRequestForThreeTimes(map, app);
            JSONObject json = JSONObject.fromObject(result);
            System.out.println(json);
            JSONObject root = json.optJSONObject("tbk_dg_vegas_tlj_create_response");
            if (root != null && root.optJSONObject("result") != null) {
                if (root.optJSONObject("result").optBoolean("success")) {
                    JSONObject modelJson = root.optJSONObject("result").optJSONObject("model");
                    TaoLiJinDTO dto = new TaoLiJinDTO();
                    dto.setRightsId(modelJson.optString("rights_id"));
                    dto.setSendUrl(modelJson.optString("send_url"));
                    return dto;
                } else {
                }
                // 接口返回异常
                String msgCode = root.optJSONObject("result").optString("msg_code");
                if (!StringUtil.isNullOrEmpty(msgCode)) {
                    switch (msgCode) {
                        case "FAIL_BIZ_ITEM_FORBIDDEN":
                            throw new TaoLiJinCreateException(TaoLiJinCreateException.CODE_TLJ_FORBIDDEN, "该商品不支持创建淘礼金红包");
                        case "FAIL_BIZ_ACCOUNT_UN_PAID":
                        case "PRE_FREEZE_ASSET_ACCOUNT_ERROR":
                            throw new TaoLiJinCreateException(TaoLiJinCreateException.CODE_TLJ_NO_MONEY, "官方玩法钱包余额不足");
                        default:
                            throw new TaoKeApiException(Integer.parseInt(msgCode), root.toString());
                    }
                }
            }
        } catch (TaoKeApiException e) {
            throw e;
        }
        return null;
    }
    /**
     * 获取淘宝系统时间
     *
     * @return
     */
    public static Date getTaoBaoSystemTime() {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.time.get");
        try {
            JSONObject json = TaoKeBaseUtil.baseRequest(map, false);
            String time = json.optJSONObject("time_get_response").optString("time");
            return new Date(TimeUtil.convertToTimeTemp(time, "yyyy-MM-dd HH:mm:ss"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
src/main/java/com/yeshi/buwan/util/tb/TaoKeBaseUtil.java
New file
@@ -0,0 +1,335 @@
package com.yeshi.buwan.util.tb;
import com.show.api.util.StringUtils;
import com.yeshi.buwan.dto.tb.TaoKeAppInfo;
import com.yeshi.buwan.exception.taobao.TaoKeApiException;
import net.sf.json.JSONObject;
import org.yeshi.utils.HttpUtil;
import org.yeshi.utils.StringUtil;
import org.yeshi.utils.TimeUtil;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class TaoKeBaseUtil {
    private static TaoKeAppInfo taoKeAppInfo = null;
    private static long lastTime = 0;
    public static JSONObject baseRequest(Map<String, String> param, boolean needAdzoneId) throws TaoKeApiException {
        // 复制params
        Map<String, String> params = new HashMap<>();
        if (param != null) {
            Iterator<String> its = param.keySet().iterator();
            while (its.hasNext()) {
                String key = its.next();
                params.put(key, param.get(key));
            }
        }
        // 获取有效的APPKey
        TaoKeAppInfo app = getAvailableTaoKeAppInfo();
        if (app == null)
            throw new TaoKeApiException(TaoKeApiException.CODE_NO_USE, "无appkey可用");
        // 签名
        params.put("app_key", app.getAppKey());
        params.put("sign_method", "md5");
        params.put("v", "2.0");
        params.put("timestamp", TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
        params.put("format", "json");
        if (needAdzoneId)
            params.put("adzone_id", app.getAdzoneId());
        params.put("sign", getSign(params, "md5", app).toUpperCase());
        String result = TaoBaoHttpUtil.taoKeGet(params);
        JSONObject data = JSONObject.fromObject(result);
        if (data != null) {
            if (data.optJSONObject("error_response") != null && data.optJSONObject("error_response").optInt("code") == 7
                    && "accesscontrol.limited-by-app-access-count"
                    .equalsIgnoreCase(data.optJSONObject("error_response").optString("sub_code"))) {
                reportAppInvalid(app.getAppKey());
                throw new TaoKeApiException(TaoKeApiException.CODE_APPKEY_LIMIT, "淘宝请求限制:" + result, params);
            } else if (data.optJSONObject("error_response") != null) {
                throw new TaoKeApiException(TaoKeApiException.CODE_API_ERROR, result, params);
            }
        } else
            throw new TaoKeApiException(TaoKeApiException.CODE_OTHER, ":" + result, params);
        reValid(app.getAppKey());
        return data;
    }
    /**
     * 服务商请求
     *
     * @param param
     * @param session
     * @return
     * @throws TaoKeApiException JSONObject 返回类型
     * @throws
     * @Title: baseScRequest
     * @Description:
     */
    public static JSONObject baseScRequest(Map<String, String> param, TaoKeAppInfo app, String session, String targetAppKey) throws TaoKeApiException {
        // 复制params
        Map<String, String> params = new HashMap<>();
        if (param != null) {
            Iterator<String> its = param.keySet().iterator();
            while (its.hasNext()) {
                String key = its.next();
                params.put(key, param.get(key));
            }
        }
        if (app == null)
            throw new TaoKeApiException(TaoKeApiException.CODE_NO_USE, "无appkey可用");
        // 签名
        params.put("app_key", app.getAppKey());
        params.put("sign_method", "md5");
        params.put("v", "2.0");
        params.put("timestamp", TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
        params.put("format", "json");
        params.put("session", session);
//        params.put("target_app_key", targetAppKey);
        params.put("sign", getSign(params, "md5", app).toUpperCase());
        String result = TaoBaoHttpUtil.taoKeGet(params);
        JSONObject data = JSONObject.fromObject(result);
        if (data != null) {
            if (data.optJSONObject("error_response") != null && data.optJSONObject("error_response").optInt("code") == 7
                    && "accesscontrol.limited-by-app-access-count"
                    .equalsIgnoreCase(data.optJSONObject("error_response").optString("sub_code"))) {
                reportAppInvalid(app.getAppKey());
                throw new TaoKeApiException(TaoKeApiException.CODE_APPKEY_LIMIT, "淘宝请求限制:" + result, params);
            } else if (data.optJSONObject("error_response") != null) {
                throw new TaoKeApiException(TaoKeApiException.CODE_API_ERROR, result, params);
            }
        } else
            throw new TaoKeApiException(TaoKeApiException.CODE_OTHER, ":" + result, params);
//        reValid(app.getAppKey());
        return data;
    }
    public static JSONObject baseRequest(Map<String, String> param, TaoKeAppInfo app) throws TaoKeApiException {
        // 复制params
        Map<String, String> params = new HashMap<>();
        if (param != null) {
            Iterator<String> its = param.keySet().iterator();
            while (its.hasNext()) {
                String key = its.next();
                params.put(key, param.get(key));
            }
        }
        // 获取有效的APPKey
        if (app == null)
            throw new TaoKeApiException(TaoKeApiException.CODE_NO_USE, "无appkey可用");
        // 签名
        params.put("app_key", app.getAppKey());
        params.put("sign_method", "md5");
        params.put("v", "2.0");
        params.put("timestamp", TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
        params.put("format", "json");
        if (!StringUtil.isNullOrEmpty(app.getAdzoneId()))
            params.put("adzone_id", app.getAdzoneId());
        params.put("sign", getSign(params, "md5", app).toUpperCase());
        String result = TaoBaoHttpUtil.taoKeGet(params);
        JSONObject data = JSONObject.fromObject(result);
        if (data != null) {
            if (data.optJSONObject("error_response") != null && data.optJSONObject("error_response").optInt("code") == 7
                    && "accesscontrol.limited-by-app-access-count"
                    .equalsIgnoreCase(data.optJSONObject("error_response").optString("sub_code"))) {
                reportAppInvalid(app.getAppKey());
                throw new TaoKeApiException(TaoKeApiException.CODE_APPKEY_LIMIT, "淘宝请求限制:" + result, params);
            } else if (data.optJSONObject("error_response") != null) {
                throw new TaoKeApiException(TaoKeApiException.CODE_API_ERROR, result, params);
            }
        } else
            throw new TaoKeApiException(TaoKeApiException.CODE_OTHER, ":" + result, params);
        reValid(app.getAppKey());
        return data;
    }
    /**
     * 重复3次请求,降低出错概率
     *
     * @param params
     * @return
     */
    public static String baseRequestForThreeTimes(Map<String, String> params, boolean needAdzoneId) {
        JSONObject data = null;
        int count = 0;
        String result = null;
        while (data == null && count < 2) {
            count++;
            try {
                data = baseRequest(params, needAdzoneId);
            } catch (TaoKeApiException e) {
                // 记录现场
                if (e.getCode() == TaoKeApiException.CODE_API_ERROR) {
                    result = e.getMsg();
                }
            }
        }
        if (!StringUtil.isNullOrEmpty(result)) {
            try {
                data = JSONObject.fromObject(result);
            } catch (Exception e) {
            }
        }
        if (data != null)
            return data.toString();
        else
            return new JSONObject().toString();
    }
    public static String baseRequestForThreeTimes(Map<String, String> params, TaoKeAppInfo app) {
        JSONObject data = null;
        int count = 0;
        while (data == null && count < 3) {
            count++;
            try {
                data = baseRequest(params, app);
            } catch (TaoKeApiException e) {
            }
        }
        if (data != null)
            return data.toString();
        else
            return new JSONObject().toString();
    }
    /**
     * 获取签名参数
     *
     * @param params
     * @param signMethod
     * @param app
     * @return
     */
    public static String getSign(Map<String, String> params, String signMethod, TaoKeAppInfo app) {
        // 第一步:检查参数是否已经排序
        String[] keys = params.keySet().toArray(new String[0]);
        Arrays.sort(keys);
        // 第二步:把所有参数名和参数值串在一起
        StringBuilder query = new StringBuilder();
        if ("md5".equals(signMethod)) {
            query.append(app.getAppSecret());
        }
        for (String key : keys) {
            String value = params.get(key);
            if (StringUtils.areNotEmpty(key, value)) {
                query.append(key).append(value);
            }
        }
        query.append(app.getAppSecret());
        return StringUtil.Md5(query.toString());
    }
    static TaoKeAppInfo getAvailableTaoKeAppInfo() {
        if (System.currentTimeMillis() - lastTime > 1000 * 20L)
            taoKeAppInfo = null;
        if (taoKeAppInfo == null) {
            System.out.println("请求。。。。。");
            String result = null;
            try {
                result = HttpUtil.get("http://193.112.35.168:8091/tb/taoke/getcanuseapp");
            } catch (Exception e) {
            }
            // 接口请求失败,默认设置成影视大全IOS的媒体信息
            if (StringUtil.isNullOrEmpty(result)) {
                taoKeAppInfo = new TaoKeAppInfo();
                taoKeAppInfo.setAdzoneId("381938426");
                taoKeAppInfo.setAppKey("24838852");
                taoKeAppInfo.setAppSecret("bc8265e2bf8d8115329d652f9d3d4cd8");
                taoKeAppInfo.setPid("mm_124933865_43788020_381938426");
                lastTime = System.currentTimeMillis();
                return taoKeAppInfo;
            }
            JSONObject data = JSONObject.fromObject(result);
            if (data.optInt("code") == 0) {
                TaoKeAppInfo info = new TaoKeAppInfo();
                info.setAppKey(data.optJSONObject("data").optString("appkey"));
                info.setAppSecret(data.optJSONObject("data").optString("appsecret"));
                info.setPid(data.optJSONObject("data").optString("pid"));
                String[] sts = info.getPid().split("_");
                info.setAdzoneId(sts[sts.length - 1]);
                taoKeAppInfo = info;
                lastTime = System.currentTimeMillis();
            } else {// 防止所有的失效
                taoKeAppInfo = new TaoKeAppInfo();
                taoKeAppInfo.setAdzoneId("381938426");
                taoKeAppInfo.setAppKey("24838852");
                taoKeAppInfo.setAppSecret("bc8265e2bf8d8115329d652f9d3d4cd8");
                taoKeAppInfo.setPid("mm_124933865_43788020_381938426");
                return taoKeAppInfo;
            }
        }
        return taoKeAppInfo;
    }
    static void filterTaoKeResponse(String result, TaoKeAppInfo app) {
        if (!StringUtil.isNullOrEmpty(result)) {
            try {
                JSONObject data = JSONObject.fromObject(result);
                if (data != null) {
                    if (data.optJSONObject("error_response") != null
                            && data.optJSONObject("error_response").optInt("code") == 7) {
                        reportAppInvalid(app.getAppKey());
                    }
                } else {
                }
            } catch (Exception e) {
            }
        }
    }
    static Map<String, Integer> invalidMap = new HashMap<>();
    /**
     * 报告该APPKey不能用
     *
     * @param appkey
     */
    static void reportAppInvalid(String appkey) {
        if (invalidMap == null)
            return;
        // 错误三次后再真正上报
        if (invalidMap.get(appkey) == null)
            invalidMap.put(appkey, 1);
        else
            invalidMap.put(appkey, invalidMap.get(appkey) + 1);
        if (invalidMap.get(appkey) < 4)
            return;
        invalidMap.put(appkey, 0);
        HttpUtil.get("http://193.112.35.168:8091/tb/taoke/reportappcannotuse?appkey=" + appkey);
        lastTime = 0;
    }
    /**
     * APPKey恢复可用
     *
     * @param appKey
     */
    static void reValid(String appKey) {
        if (invalidMap == null)
            return;
        Integer count = invalidMap.get(appKey);
        if (count != null && count > 0)
            invalidMap.put(appKey, count - 1);
    }
    public static void setAppValid() {
        HttpUtil.get("http://193.112.35.168:8091/tb/taoke/setappcanuse");
    }
}
src/test/java/com/hxh/spring/test/GeneralTest.java
@@ -5,6 +5,7 @@
import com.yeshi.buwan.dao.video.VideoResourceVersionMapDao;
import com.yeshi.buwan.domain.goldcorn.GoldCornTaskActionDetail;
import com.yeshi.buwan.domain.pptv.PPTVPlayProcessRecord;
import com.yeshi.buwan.domain.tb.YouZhiHaoHuoGoods;
import com.yeshi.buwan.domain.video.VideoResourceVersionMap;
import com.yeshi.buwan.domain.vip.VideoBuyRecord;
import com.yeshi.buwan.service.inter.video.VideoResourceVersionMapService;
@@ -17,7 +18,7 @@
    @org.junit.Test
    public void createDao() {
        try {
            SpringComponentGenerater.createMongoDao(new MongoDBDaoData.Builder().setBaseDaoClass(MongodbBaseDao.class).setDaoPackageName("com.yeshi.buwan.dao.pptv").setEntityClass(PPTVPlayProcessRecord.class).create(), "D:\\workspace\\BuWan\\src\\main\\java\\com\\yeshi\\buwan\\dao\\pptv\\");
            SpringComponentGenerater.createMongoDao(new MongoDBDaoData.Builder().setBaseDaoClass(MongodbBaseDao.class).setDaoPackageName("com.yeshi.buwan.dao.tb").setEntityClass(YouZhiHaoHuoGoods.class).create(), "D:\\workspace\\BuWan\\src\\main\\java\\com\\yeshi\\buwan\\dao\\tb\\");
        } catch (Exception e) {
            e.printStackTrace();
        }
src/test/java/com/hxh/spring/test/PPTVTest.java
@@ -1,12 +1,16 @@
package com.hxh.spring.test;
import com.google.gson.Gson;
import com.yeshi.buwan.dao.juhe.pptv.PPTVProgramDao;
import com.yeshi.buwan.dao.juhe.pptv.PPTVSeriesDao;
import com.yeshi.buwan.dao.juhe.pptv.PPTVSeriesProgramMapDao;
import com.yeshi.buwan.dao.juhe.pptv.VideoPPTVMapDao;
import com.yeshi.buwan.job.video.PPTVVideoUpdate;
import com.yeshi.buwan.pptv.PPTVApiUtil;
import com.yeshi.buwan.pptv.PPTVUtil;
import com.yeshi.buwan.pptv.entity.PPTVSeries;
import com.yeshi.buwan.pptv.entity.PPTVSeriesProgramMap;
import com.yeshi.buwan.pptv.entity.VideoPPTVMap;
import com.yeshi.buwan.service.inter.LoginUserService;
import com.yeshi.buwan.service.inter.juhe.PPTVService;
import com.yeshi.buwan.util.StringUtil;
@@ -45,8 +49,15 @@
    @Resource
    private PPTVSeriesDao pptvSeriesDao;
    @Resource
    private PPTVProgramDao pptvProgramDao;
    @Resource
    private PPTVSeriesProgramMapDao pptvSeriesProgramMapDao;
    @Resource
    private VideoPPTVMapDao videoPPTVMapDao;
    @Resource
@@ -69,8 +80,34 @@
//                continue;
//            }
//            System.out.println(s.getName() + ":" + s.getInfoID());
            PPTVSeries series = pptvService.getSeriesDetail("381096");
            pptvService.addToVideoInfo(series);
        Query query = new Query();
        query.addCriteria(new Criteria().orOperator(Criteria.where("programType").regex("电影"), Criteria.where("programType2").regex("电影")));
        List<String> list = new ArrayList<>();
        List<PPTVSeries> seriesList = pptvSeriesDao.findList(query);
        for (PPTVSeries series : seriesList) {
            VideoPPTVMap map = pptvService.selectVideoPPTVMapByPPInfo(series.getInfoID(), null);
            if (map != null && map.getProgramCode() == null) {
                series = pptvService.getSeriesDetail(series.getInfoID());
                map.setSeriesCode(series.getSeriesCode());
                map.setProgramCode(series.getSeries().get(0).getProgramCode());
                videoPPTVMapDao.save(map);
            } else {
                if (map == null) {
                    list.add(series.getInfoID());
//                    series = PPTVApiUtil.getDetail(series.getSeriesCode());
                    series = pptvService.getSeriesDetail(series.getInfoID());
                    pptvService.addToVideoInfo(series);
                }
            }
        }
        System.out.println(new Gson().toJson(list));
//        }
    }