admin
2020-05-20 b7ba001c2a17b592abc026a8cb81c3ef6ea6ef71
粘贴板兼容,唯品商品相关完善
8个文件已修改
1个文件已添加
330 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/dto/vip/VIPSearchFilter.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dto/vip/goods/VIPGoodsInfo.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/goods/CommonGoods.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/manger/ClipboardAnalysisManager.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/Constant.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/factory/CommonGoodsFactory.java 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/factory/goods/GoodsDetailVOFactory.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/vipshop/VipShopApiUtil.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/vipshop/VipShopUtil.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dto/vip/VIPSearchFilter.java
New file
@@ -0,0 +1,82 @@
package com.yeshi.fanli.dto.vip;
/**
 * 订单搜索
 * @author Administrator
 *
 */
public class VIPSearchFilter {
    private String keyword;// 搜索关键词
    private String fieldName;// 排序字段: price-价格 discount-折扣
    private Integer order;// 0-正序 1-逆序
    private Integer page;// 页码
    private Integer pageSize;// 每页大小
    private String requestId;// 请求ID
    private String priceStart;// 起始价格
    private String priceEnd;// 结束价格
    public String getKeyword() {
        return keyword;
    }
    public void setKeyword(String keyword) {
        this.keyword = keyword;
    }
    public String getFieldName() {
        return fieldName;
    }
    public void setFieldName(String fieldName) {
        this.fieldName = fieldName;
    }
    public Integer getOrder() {
        return order;
    }
    public void setOrder(Integer order) {
        this.order = order;
    }
    public Integer getPage() {
        return page;
    }
    public void setPage(Integer page) {
        this.page = page;
    }
    public Integer getPageSize() {
        return pageSize;
    }
    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }
    public String getRequestId() {
        return requestId;
    }
    public void setRequestId(String requestId) {
        this.requestId = requestId;
    }
    public String getPriceStart() {
        return priceStart;
    }
    public void setPriceStart(String priceStart) {
        this.priceStart = priceStart;
    }
    public String getPriceEnd() {
        return priceEnd;
    }
    public void setPriceEnd(String priceEnd) {
        this.priceEnd = priceEnd;
    }
}
fanli/src/main/java/com/yeshi/fanli/dto/vip/goods/VIPGoodsInfo.java
@@ -41,6 +41,17 @@
    private VIPStoreServiceCapability storeServiceCapability;// 商品所属店铺服务能力评价:预留字段
    private Long brandId;// 商品所属档期(专场)id
    private Long schemeStartTime;// 商品所属推广方案开始时间:时间戳,单位:毫秒
    private Integer status;//状态 0-下架  1-上架
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public String getGoodsId() {
        return goodsId;
fanli/src/main/java/com/yeshi/fanli/entity/goods/CommonGoods.java
@@ -11,12 +11,16 @@
    public static int GOODS_TYPE_TB = 1;// 淘宝天猫
    public static int GOODS_TYPE_JD = 2;// 京东
    public static int GOODS_TYPE_PDD = 3;// 拼多多
    public static int GOODS_TYPE_VIP = 4;// 唯品会
    public static int GOODS_TYPE_SUNING = 5;// 苏宁
    public static int SHOP_TYPE_TB = 1;// 淘宝
    public static int SHOP_TYPE_TM = 2;// 天猫
    public static int SHOP_TYPE_JD = 20;// 京东
    public static int SHOP_TYPE_JD_SELF = 21;// 京东自营
    public static int SHOP_TYPE_PDD = 30;// 拼多多
    public static int SHOP_TYPE_VIP = 40;//唯品会自营
    public static int STATE_NORMAL = 0;// 正常
    public static int STATE_OFFLINE = 1;// 下线
@@ -67,7 +71,7 @@
    private String otherInfo; // 商品其他信息-json字符串
    @Column(name = "cg_category_info")
    private String categoryInfo; // 商品分类信息
    @Column(name = "cg_createtime")
    private Date createTime;
    @Column(name = "cg_updatetime")
@@ -279,5 +283,5 @@
    public void setCategoryInfo(String categoryInfo) {
        this.categoryInfo = categoryInfo;
    }
}
fanli/src/main/java/com/yeshi/fanli/service/manger/ClipboardAnalysisManager.java
@@ -205,7 +205,6 @@
                    link = urlList.get(0);
                else// 第一个口令在第一个链接前面
                    token = tokenList.get(0);
            } else if (typeSet.contains(ClipboardContentType.link) && typeSet.contains(ClipboardContentType.text)) {// 链接+文本
                link = urlList.get(0);
@@ -216,7 +215,17 @@
            if (!StringUtil.isNullOrEmpty(link)) {
                CommonGoods goods = parseLink(urlList.get(0));
                if (goods == null || goods.getGoodsId() == null) {
                    if (urlList.size() > 1)
                    if (tokenList.size() == 0 && urlList.size() == 2
                            && urlList.get(0).indexOf("://uland.taobao.com") > -1
                            && urlList.get(1).indexOf("?id=") > -1) {// 有2个链接的文案,第一个是店铺券链接,其中二个是淘宝商品详情
                        CommonGoods goods1 = parseLink(urlList.get(1));
                        if (goods1 != null && goods1.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
                            resultListener.onResult(goods1);
                        } else {
                            resultListener.onResult(new GoodsDocParseResultVO(text, urlList.get(0)));
                        }
                    } else if (urlList.size() > 1)
                        resultListener.onResult(new GoodsDocParseResultVO(text, urlList.get(0)));
                    else {// 单链接
                            // 判断是否包含可转链的链接
@@ -469,7 +478,7 @@
            tb = TaoBaoUtil.parsePhoneShareUrlByTM(link);
            if (tb != null)
                auctionId = tb.getAuctionId() + "";
        } else if (link.contains("h5.m.taobao") || link.contains("detail.m.tmall")|| link.contains("item.taobao")
        } else if (link.contains("h5.m.taobao") || link.contains("detail.m.tmall") || link.contains("item.taobao")
                || link.contains("detail.tmall")) { // 手机页面和电脑页面
            Map<String, String> map = Utils.parseURL(link);
            String id = "";
fanli/src/main/java/com/yeshi/fanli/util/Constant.java
@@ -108,7 +108,7 @@
    // 来源-拼多多
    public static final int SOURCE_TYPE_PDD = 3;
    // 来源-唯品会
    public static final int SOURCE_TYPE_WPH = 4;
    public static final int SOURCE_TYPE_VIP = 4;
    // 来源-苏宁
    public static final int SOURCE_TYPE_SUNING = 5;
    // 来源-饿了么
@@ -332,7 +332,7 @@
            return "京东";
        case SOURCE_TYPE_PDD:
            return "拼多多";
        case SOURCE_TYPE_WPH:
        case SOURCE_TYPE_VIP:
            return "唯品会";
        case SOURCE_TYPE_SUNING:
            return "苏宁";
fanli/src/main/java/com/yeshi/fanli/util/factory/CommonGoodsFactory.java
@@ -10,6 +10,7 @@
import com.yeshi.fanli.dto.jd.JDCouponInfo;
import com.yeshi.fanli.dto.jd.JDShopInfo;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
@@ -55,8 +56,7 @@
        cg.setVideoUrl(null);
        cg.setState(goods.getState());
        cg.setMaterialLibType(goods.getMaterialLibType());
        // 分类信息
        CategoryInfoDTO categoryInfo = new CategoryInfoDTO();
        Integer rootCatId = goods.getRootCatId();
@@ -64,18 +64,17 @@
            categoryInfo.setCid1(Long.parseLong(rootCatId.toString()));
        }
        categoryInfo.setCid1Name(goods.getRootCategoryName());
        Integer leafCatId = goods.getLeafCatId();
        if (leafCatId != null) {
            categoryInfo.setCid2(Long.parseLong(leafCatId.toString()));
        }
        categoryInfo.setCid2Name(goods.getLeafName());
        cg.setCategoryInfo(JSONObject.toJSON(categoryInfo).toString());
        return cg;
    }
    /**
     * 淘宝商品构造
     * 
@@ -103,44 +102,43 @@
            cg.setCouponLeftCount(1);
            cg.setCouponTotalCount(1);
        }
        JDCommissionInfo commissionInfo = goods.getCommissionInfo();
        if (commissionInfo != null) {
            cg.setRate(commissionInfo.getCommissionShare());
        } else {
            cg.setRate(new BigDecimal(0));
        }
        JDShopInfo shopInfo = goods.getShopInfo();
        if (shopInfo != null) {
            cg.setSellerId(Long.parseLong(shopInfo.getShopId().toString()));
            cg.setSellerName(shopInfo.getShopName()== null? "" : shopInfo.getShopName());
            cg.setSellerName(shopInfo.getShopName() == null ? "" : shopInfo.getShopName());
        }
        cg.setGoodsId(goods.getSkuId());
        cg.setTitle(goods.getSkuName());
        cg.setGoodsType(CommonGoods.GOODS_TYPE_JD);
        cg.setPicture(goods.getPicUrl());
        cg.setPrice(goods.getPrice());
        cg.setSales(Integer.parseInt(goods.getInOrderCount30Days().toString()));
        String owner = goods.getOwner();
        if (StringUtil.isNullOrEmpty(owner) && "g".equalsIgnoreCase(owner)) {
            cg.setShopType(CommonGoods.SHOP_TYPE_JD_SELF); // 京东自营
        } else {
            cg.setShopType(CommonGoods.SHOP_TYPE_JD); // 京东
        }
        cg.setState(CommonGoods.STATE_NORMAL);
        // 其他信息
        GoodsOtherInfoDTO other = new GoodsOtherInfoDTO();
        other.setOwner(owner); // 是否自营
        other.setPinGouInfo( goods.getPinGouInfo());  // 拼购信息
        other.setPinGouInfo(goods.getPinGouInfo()); // 拼购信息
        other.setIsFreeShipping(goods.getIsFreeShipping()); // 是否包邮
        cg.setOtherInfo(JSONObject.toJSON(other).toString());
        // 分类信息
        JDCategoryInfo categoryJD = goods.getCategoryInfo();
        if (categoryJD != null) {
@@ -153,14 +151,13 @@
            categoryInfo.setCid3Name(categoryJD.getCid3Name());
            cg.setCategoryInfo(JSONObject.toJSON(categoryInfo).toString());
        }
        // 保留字段
        cg.setVideoCover(null);
        cg.setVideoUrl(null);
        return cg;
    }
    public static CommonGoods create(PDDGoodsDetail goods) {
        if (goods == null)
            return null;
@@ -193,7 +190,7 @@
        cg.setPicture(goods.getGoodsThumbnailUrl());
        cg.setPictureWhite(null);
        cg.setPrice(MoneyBigDecimalUtil.div(new BigDecimal(goods.getMinGroupPrice()), new BigDecimal(100)));
        String salesTip = goods.getSalesTip();
        if (StringUtil.isNullOrEmpty(salesTip)) {
            salesTip = "0";
@@ -203,11 +200,11 @@
                salesTip = salesTip.substring(0, indexOf);
            }
        }
        int totalSales = 0;
        if (salesTip.contains("万")) {
            salesTip = salesTip.substring(0, salesTip.indexOf("万"));
            totalSales= (int) (Float.parseFloat(salesTip) * 10000);
            totalSales = (int) (Float.parseFloat(salesTip) * 10000);
        } else {
            totalSales = Integer.parseInt(salesTip);
        }
@@ -223,14 +220,55 @@
        cg.setVideoUrl(null);
        cg.setState(goods.getState());
        cg.setMaterialLibType(1);
        // 分类信息
        CategoryInfoDTO categoryInfo = new CategoryInfoDTO();
        categoryInfo.setCid1(goods.getCategoryId());
        categoryInfo.setCid1Name(goods.getCategoryName());
        cg.setCategoryInfo(JSONObject.toJSON(categoryInfo).toString());
        return cg;
    }
    public static CommonGoods create(VIPGoodsInfo goods) {
        if (goods == null)
            return null;
        CommonGoods cg = new CommonGoods();
        // 折扣信息
        cg.setCouponInfo(new BigDecimal(goods.getDiscount()) + "");
        cg.setCouponLeftCount(0);
        cg.setCouponStartPrice(new BigDecimal(0));
        cg.setCouponAmount(new BigDecimal(0));
        cg.setCouponTotalCount(0);
        cg.setGoodsId(Long.parseLong(goods.getGoodsId()));
        cg.setGoodsType(CommonGoods.GOODS_TYPE_PDD);
        cg.setPicture(goods.getGoodsThumbUrl());
        cg.setPictureWhite(null);
        cg.setPrice(new BigDecimal(goods.getMarketPrice()));
        int totalSales = 0;
        cg.setSales(totalSales);
        cg.setRate(new BigDecimal(goods.getCommissionRate()));
        cg.setSellerId(goods.getBrandId());
        cg.setSellerName(goods.getBrandName());
        cg.setShopType(CommonGoods.SHOP_TYPE_PDD);
        cg.setState(CommonGoods.STATE_NORMAL);
        cg.setTitle(goods.getGoodsName());
        // 保留字段
        cg.setVideoCover(null);
        cg.setVideoUrl(null);
        cg.setState(goods.getStatus() == 1 ? CommonGoods.STATE_NORMAL : CommonGoods.STATE_OFFLINE);
        cg.setMaterialLibType(1);
        // 分类信息
        CategoryInfoDTO categoryInfo = new CategoryInfoDTO();
        categoryInfo.setCid1(goods.getCategoryId());
        categoryInfo.setCid1Name(goods.getCategoryName());
        cg.setCategoryInfo(JSONObject.toJSON(categoryInfo).toString());
        return cg;
    }
fanli/src/main/java/com/yeshi/fanli/util/factory/goods/GoodsDetailVOFactory.java
@@ -17,6 +17,7 @@
import com.yeshi.fanli.dto.jd.JDPingouInfo;
import com.yeshi.fanli.dto.jd.JDShopInfo;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
@@ -32,6 +33,7 @@
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil;
import com.yeshi.fanli.util.taobao.TaoBaoCouponUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.vipshop.VipShopUtil;
import com.yeshi.fanli.vo.goods.CouponInfoVO;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
import com.yeshi.fanli.vo.goods.MoneyInfoVO;
@@ -870,4 +872,78 @@
        return goodsInfo;
    }
    public static GoodsDetailVO convertVIPGoods(VIPGoodsInfo goods, ConfigParamsDTO params) {
        GoodsDetailVO goodsInfo = new GoodsDetailVO();
        goodsInfo.setBaoyou(true);
        goodsInfo.setGoodsType(Constant.SOURCE_TYPE_VIP);
        goodsInfo.setGoodsId(Long.parseLong(goods.getGoodsId()));
        goodsInfo.setTitle(goods.getGoodsName());
        goodsInfo.setSalesType(5); // 无销量
        goodsInfo.setPriceName("拼团价");
        goodsInfo.setPicUrl(goods.getGoodsThumbUrl()); // 缩略图
        goodsInfo.setZkPrice(MoneyBigDecimalUtil.getWithNoZera(new BigDecimal(goods.getVipPrice())));
        goodsInfo.setShopType(CommonGoods.SHOP_TYPE_VIP);
        goodsInfo.setImgList(goods.getGoodsDetailPictures());
        Integer state = goods.getStatus();
        if (state == null) {
            goodsInfo.setState(0);
        } else {
            goodsInfo.setState(goods.getStatus() == 1 ? CommonGoods.STATE_OFFLINE : CommonGoods.STATE_NORMAL);
        }
        goodsInfo.setSalesCount("");
        // 资金信息
        MoneyInfoVO moneyInfoVO = new MoneyInfoVO();
        moneyInfoVO.setMoneyType(1); // 默认显示:返 ¥6.6
        BigDecimal commission = VipShopUtil.getGoodsFanLiMoney(goods, params.getFanLiRate());
        moneyInfoVO.setFanliMoney("¥" + commission);
        moneyInfoVO.setShareMoney("¥" + commission);
        BigDecimal baseCommisstion = null;
        if (params.getBaseFanliRate() != null)
            baseCommisstion = VipShopUtil.getGoodsFanLiMoney(goods, params.getBaseFanliRate());
        if (params.getMaxRewardRate() != null)
            moneyInfoVO
                    .setMaxMoney("¥" + commission.add(MoneyBigDecimalUtil.mul(commission, params.getMaxRewardRate())));
        else {
            BigDecimal price = new BigDecimal(goods.getVipPrice());
            BigDecimal rate = MoneyBigDecimalUtil.div(commission.multiply(new BigDecimal(100)), price);
            moneyInfoVO.setRateInfo("返利比 " + rate + "%");
            BigDecimal maxCommission = VipShopUtil.getGoodsFanLiMoney(goods, params.getVipFanLiRate());
            BigDecimal maxRate = MoneyBigDecimalUtil.div(maxCommission.multiply(new BigDecimal(100)), price);
            moneyInfoVO.setMaxRateInfo("返利比 " + maxRate + "%");
            moneyInfoVO.setMaxMoney("¥" + maxCommission);
            if (baseCommisstion != null) {
                String desc = String.format("佣金¥ %s+平台补贴¥ %s", baseCommisstion.setScale(2).toString(),
                        commission.subtract(baseCommisstion).setScale(2).toString());
                String maxDesc = String.format("佣金¥ %s+平台补贴¥ %s", baseCommisstion.setScale(2).toString(),
                        maxCommission.subtract(baseCommisstion).setScale(2).toString());
                moneyInfoVO.setCompositionInfo(desc);
                moneyInfoVO.setMaxCompositionInfo(maxDesc);
            }
        }
        goodsInfo.setMoneyInfo(moneyInfoVO);
        // 店铺信息
        String mallName = goods.getBrandName();
        if (!StringUtil.isMobile(mallName)) {
            ShopInfoVO shop = new ShopInfoVO();
            shop.setShopName(mallName);
            if (goods.getBrandId() != null) {
                shop.setId(goods.getBrandId().toString());
            }
            shop.setUserType(30);
            goodsInfo.setShopInfo(shop);
        }
        return goodsInfo;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/vipshop/VipShopApiUtil.java
@@ -17,6 +17,7 @@
import org.yeshi.utils.StringUtil;
import com.google.gson.Gson;
import com.yeshi.fanli.dto.vip.VIPSearchFilter;
import com.yeshi.fanli.dto.vip.VIPSearchResult;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
@@ -113,14 +114,31 @@
        return null;
    }
    public static VIPSearchResult search() {
    /**
     * 搜索
     * @Title: search
     * @Description:
     * @param searchFilter
     * @return
     * VIPSearchResult 返回类型
     * @throws
     */
    public static VIPSearchResult search(VIPSearchFilter searchFilter) {
        Map<String, String> taskParams = new HashMap<>();
        taskParams.put("keyword", "夹克 男士 带帽");
        taskParams.put("page", "1");
        taskParams.put("pageSize", "20");
        taskParams.put("requestId", UUID.randomUUID() + "");
        // taskParams.put("priceStart", "");
        // taskParams.put("priceEnd", "");
        taskParams.put("keyword", searchFilter.getKeyword());
        taskParams.put("page", searchFilter.getPage() + "");
        taskParams.put("pageSize", searchFilter.getPageSize() + "");
        taskParams.put("requestId", System.currentTimeMillis() + "_" + UUID.randomUUID());
        if (searchFilter.getPriceStart() != null)
            taskParams.put("priceStart", searchFilter.getPriceStart());
        if (searchFilter.getPriceEnd() != null)
            taskParams.put("priceEnd", searchFilter.getPriceEnd());
        if (searchFilter.getOrder() != null)
            taskParams.put("order", searchFilter.getOrder() + "");
        if (searchFilter.getFieldName() != null)
            taskParams.put("fieldName", searchFilter.getFieldName() + "");
        JSONObject root = new JSONObject();
        root.put("request", JSONObject.fromObject(taskParams));
        String result = baseRequest("com.vip.adp.api.open.service.UnionGoodsService", "query", root);
@@ -153,7 +171,7 @@
        goodsIdArray.add(goodsId);
        taskParams.put("goodsIdList", goodsIdArray);
        taskParams.put("chanTag", tag);
        taskParams.put("requestId", UUID.randomUUID() + "");
        taskParams.put("requestId", System.currentTimeMillis() + "_" + UUID.randomUUID());
        String result = baseRequest("com.vip.adp.api.open.service.UnionUrlService", "genByGoodsId",
                JSONObject.fromObject(taskParams));
        System.out.println(result);
fanli/src/main/java/com/yeshi/fanli/util/vipshop/VipShopUtil.java
@@ -1,5 +1,14 @@
package com.yeshi.fanli.util.vipshop;
import java.math.BigDecimal;
import org.yeshi.utils.BigDecimalUtil;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil;
public class VipShopUtil {
    /**
@@ -38,4 +47,11 @@
        return tag.split("#")[0];
    }
    public static BigDecimal getGoodsFanLiMoney(VIPGoodsInfo goods, BigDecimal rate) {
        BigDecimal money = null;
        BigDecimal hundred = new BigDecimal(100);
        rate = MoneyBigDecimalUtil.div(rate, hundred);
        money = MoneyBigDecimalUtil.mul(new BigDecimal(goods.getCommission()), rate);
        return BigDecimalUtil.getWithNoZera(money).setScale(2);
    }
}