yujian
2019-07-23 83eff153c7bdddf739e0e8882854a87eb6f3ef54
京东拼多多分享h5接口
5个文件已修改
326 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/apph5/AppH5ShareController.java 224 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/h5/H5RecommendController.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserShareGoodsRecordServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserShareGoodsRecordService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoApiUtil.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/apph5/AppH5ShareController.java
@@ -1,16 +1,36 @@
package com.yeshi.fanli.controller.apph5;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import net.sf.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.yeshi.utils.JsonUtil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.yeshi.fanli.dto.jd.JDFilter;
import com.yeshi.fanli.dto.jd.JDSearchResult;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.pdd.PDDGoodsResult;
import com.yeshi.fanli.dto.pdd.PDDSearchFilter;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsGroup;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsRecord;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
import com.yeshi.fanli.service.inter.user.UserShareGoodsRecordService;
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
import com.yeshi.fanli.util.jd.JDApiUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
@Controller
@RequestMapping("api/apph5/v1/share")
@@ -18,9 +38,13 @@
    @Resource
    private UserShareGoodsRecordService userShareGoodsRecordService;
    @Resource
    private HongBaoManageService hongBaoManageService;
    /**
     * 分享商品详情
     *
     * @param callback
     * @param shareId  分享id
     * @param source   来源
@@ -28,22 +52,208 @@
     */
    @RequestMapping(value = "getDetail")
    public void getDetail(String callback, Long shareId, String source, String fingerprint, PrintWriter out) {
        try {
            if (shareId == null) {
                JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("传递参数不正确"));
                return;
            }
            // 获取商品信息
            JSONObject data = userShareGoodsRecordService.getGoodsGroupDetail(shareId);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("获取失败"));
            e.printStackTrace();
        }
    }
    /**
     * 分享商品详情
     *
     * @param callback
     * @param shareId  分享id
     * @param source   来源
     * @param out
     */
    @RequestMapping(value = "getListJD")
    public void getListJD(String callback, Long shareId, PrintWriter out) {
        try {
            if (shareId == null) {
                JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("传递参数不正确"));
                return;
            }
            JSONArray array = new JSONArray();
            List<UserShareGoodsGroup> list = userShareGoodsRecordService.listByRecordId(shareId);
            if (list != null && list.size() > 0) {
                List<Long> listGid = new ArrayList<Long>();
                for (int i = 0; i < list.size(); i++) {
                    CommonGoods commonGoods = list.get(i).getCommonGoods();
                    if (commonGoods == null) {
                        continue;
                    }
                    listGid.add(commonGoods.getGoodsId());
                }
                // API网络接口验证是否在售
                List<JDGoods> listGoods = null;
                try {
                    JDFilter filter = new JDFilter();
                    filter.setListId(listGid);
                    filter.setPageIndex(1);
                    filter.setPageSize(100);
                    JDSearchResult  result = JDApiUtil.queryByKey(filter);
                    if (result != null) {
                        listGoods = result.getGoodsList();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
                        .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
                BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
                BigDecimal shareRate = hongBaoManageService.getShareRate();
                for (UserShareGoodsGroup goodsGroup : list) {
                    CommonGoods commonGoods = goodsGroup.getCommonGoods();
                    if (commonGoods == null) {
                        continue;
                    }
                    if (listGoods != null && listGoods.size() > 0) {
                        int state = 1; // 默认停售
                        Long commonGid = commonGoods.getGoodsId();
                        for (JDGoods goodsDetail : listGoods) {
                            Long goodsId =goodsDetail.getSkuId();
                            if (goodsId == commonGid || goodsId.equals(commonGid)) {
                                state = 0; // 在售
                                break;
                            }
                        }
                        commonGoods.setState(state);
                    }
                    GoodsDetailVO detailVO = GoodsDetailVOFactory.convertCommonGoods(commonGoods, null, fanLiRate, shareRate);
                    if (!detailVO.isHasCoupon()) {
                        detailVO.setState(1);; // 已抢光
                    }
                    array.add(gson.toJson(detailVO));
                }
            }
            String title = "";
            UserShareGoodsRecord userShareGoodsRecord = userShareGoodsRecordService.selectByPrimaryKey(shareId);
            if (userShareGoodsRecord != null) {
                title = userShareGoodsRecord.getTitle();
            }
            JSONObject data = new JSONObject();
            data.put("title", title);
            data.put("count", list.size());
            data.put("result_list", array);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("获取失败"));
            e.printStackTrace();
        }
    }
    
    /**
     * 分享商品详情
     *
     * @param callback
     * @param shareId  分享id
     * @param source   来源
     * @param out
     */
    @RequestMapping(value = "getListPDD")
    public void getListPDD(String callback, Long shareId, PrintWriter out) {
        try {
            if (shareId == null) {
                JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("传递参数不正确"));
                return;
            }
            JSONArray array = new JSONArray();
            List<UserShareGoodsGroup> list = userShareGoodsRecordService.listByRecordId(shareId);
            if (list != null && list.size() > 0) {
                Long[] listGid = new Long[list.size()];
                for (int i = 0; i < list.size(); i++) {
                    CommonGoods commonGoods = list.get(i).getCommonGoods();
                    if (commonGoods == null) {
                        continue;
                    }
                    listGid[i] = commonGoods.getGoodsId();
                }
                // API网络接口验证是否在售
                List<PDDGoodsDetail> listGoods = null;
                try {
                    PDDSearchFilter sf = new PDDSearchFilter();
                    sf.setPage(1);
                    sf.setPageSize(100);
                    sf.setGoodsIdList(listGid);
                    PDDGoodsResult  result = PinDuoDuoApiUtil.searchGoods(sf);
                    if (result != null) {
                        listGoods = result.getGoodsList();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
                        .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
                BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
                BigDecimal shareRate = hongBaoManageService.getShareRate();
                for (UserShareGoodsGroup goodsGroup : list) {
                    CommonGoods commonGoods = goodsGroup.getCommonGoods();
                    if (commonGoods == null) {
                        continue;
                    }
                    if (listGoods != null && listGoods.size() > 0) {
                        int state = 1; // 默认停售
                        Long commonGid = commonGoods.getGoodsId();
                        for (PDDGoodsDetail goodsDetail : listGoods) {
                            Long goodsId =goodsDetail.getGoodsId();
                            if (goodsId == commonGid || goodsId.equals(commonGid)) {
                                state = 0; // 在售
                                break;
                            }
                        }
                        commonGoods.setState(state);
                    }
                    GoodsDetailVO detailVO = GoodsDetailVOFactory.convertCommonGoods(commonGoods, null, fanLiRate, shareRate);
                    if (!detailVO.isHasCoupon()) {
                        detailVO.setState(1);; // 已抢光
                    }
                    array.add(gson.toJson(detailVO));
                }
            }
            String title = "";
            UserShareGoodsRecord userShareGoodsRecord = userShareGoodsRecordService.selectByPrimaryKey(shareId);
            if (userShareGoodsRecord != null) {
                title = userShareGoodsRecord.getTitle();
            }
            JSONObject data = new JSONObject();
            data.put("title", title);
            data.put("count", list.size());
            data.put("result_list", array);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("获取失败"));
            e.printStackTrace();
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/h5/H5RecommendController.java
@@ -3,6 +3,7 @@
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.annotation.Resource;
@@ -15,6 +16,7 @@
import com.google.gson.Gson;
import com.yeshi.fanli.dto.jd.JDCouponInfo;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.recommend.RecommendBanner;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsHistory;
@@ -50,6 +52,8 @@
import com.yeshi.fanli.util.ThreadUtil;
import com.yeshi.fanli.util.jd.JDApiUtil;
import com.yeshi.fanli.util.jd.JDUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
@@ -448,10 +452,17 @@
            couponUrl = couponInfo.getLink();
        }
        
        boolean jdzy = false;
        String owner = jdGoods.getOwner();
        if (!StringUtil.isNullOrEmpty(owner) && "g".equalsIgnoreCase(owner)) {
            jdzy = true;
        }
        String materialId = "https://item.jd.com/" + id + ".html";
        String jumpLink = JDApiUtil.convertLink(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "", uid);
        
        JSONObject data = new JSONObject();
        data.put("jdzy", jdzy);
        data.put("imgs", imageList);
        data.put("title", jdGoods.getSkuName());
        data.put("zkPrice", jdGoods.getPrice());
@@ -478,4 +489,83 @@
        });
        return;
    }
    /**
     * 拼多多分享商品详情
     * @param acceptData
     * @param id
     * @param uid
     * @param callback
     * @param out
     */
    @RequestMapping(value = "getPDDGoodsDetail")
    public void getPDDGoodsDetail(final AcceptData acceptData, final Long id,  String uid, String callback,
            PrintWriter out) {
        if (id == null) {
            out.print(JsonUtil.loadFalseResult(1, "请上传id"));
            return;
        }
        if (!StringUtil.isNullOrEmpty(uid)) {
            uid = AESUtil.decrypt(uid, Constant.UIDAESKEY);
        }
        PDDGoodsDetail pddGoods = PinDuoDuoApiUtil.getGoodsDetail(id);
        if (pddGoods == null) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("商品信息获取失败")));
            return;
        }
        List<String> imageList = null;
        String[] goodsGalleryUrls = pddGoods.getGoodsGalleryUrls();
        if (goodsGalleryUrls != null) {
            imageList = Arrays.asList(goodsGalleryUrls);
        }
        if (imageList == null) {
            imageList = new ArrayList<>();
            String goodsImageUrl = pddGoods.getGoodsImageUrl();
            if (!StringUtil.isNullOrEmpty(goodsImageUrl)) {
                imageList.add(goodsImageUrl);
            }
        }
        BigDecimal hundred = new BigDecimal(100);
        Boolean hasCoupon = pddGoods.getHasCoupon();
        BigDecimal amount = new BigDecimal(0);
        if (hasCoupon != null && hasCoupon) {
            amount = MoneyBigDecimalUtil.div(new BigDecimal(pddGoods.getCouponDiscount()), hundred).setScale(2);
        } else {
            hasCoupon = false;
        }
        String jumpLink = PinDuoDuoApiUtil.convert(id, PinDuoDuoApiUtil.PID_SHARE + "", uid);
        JSONObject data = new JSONObject();
        data.put("imgs", imageList);
        data.put("title", pddGoods.getGoodsName());
        data.put("zkPrice", MoneyBigDecimalUtil.div(new BigDecimal(pddGoods.getMinGroupPrice()), hundred).setScale(2));
        data.put("coupon", hasCoupon);
        data.put("couponAmount", amount);
        data.put("couponPrice", PinDuoDuoUtil.getQuanPrice(pddGoods));
        data.put("helpLink", configService.get("pdd_share_h5_help_link"));
        data.put("jumpLink", jumpLink);
        JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
        final String tempUid = uid;
        ThreadUtil.run(new Runnable() {
            @Override
            public void run() {
                try {
                    if (!StringUtil.isNullOrEmpty(tempUid))
                        userShareGoodsGroupService.updateBrowseNum(Long.parseLong(tempUid), id, Constant.SOURCE_TYPE_PDD);
                } catch (NumberFormatException e) {
                    e.printStackTrace();
                } catch (UserShareGoodsRecordException e) {
                    e.printStackTrace();
                }
            }
        });
        return;
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserShareGoodsRecordServiceImpl.java
@@ -120,6 +120,11 @@
    public long countQueryByUid(Long uid, String source) {
        return userShareGoodsRecordMapper.countQueryByUid(uid, source);
    }
    @Override
    public List<UserShareGoodsGroup> listByRecordId(Long shareId) {
        return  userShareGoodsGroupService.listByRecordId(shareId);
    }
    @Override
    public List<UserShareGoodsRecord> listCountRecord(List<Long> list) {
fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserShareGoodsRecordService.java
@@ -3,6 +3,7 @@
import java.util.List;
import com.yeshi.fanli.dto.share.ShareGoodsRecordDTO;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsGroup;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsRecord;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.exception.share.UserShareGoodsRecordException;
@@ -139,5 +140,7 @@
     */
    public ShareGoodsRecordDTO addRecordDynamic(Long uid, List<TaoBaoGoodsBrief> listGoodsBrief)
            throws UserShareGoodsRecordException;
    public List<UserShareGoodsGroup> listByRecordId(Long shareId);
    
}
fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoApiUtil.java
@@ -85,6 +85,10 @@
            map.put("cat_id", sf.getCatId() + "");
        if (sf.getKw() != null)
            map.put("keyword", sf.getKw());
        if (sf.getGoodsIdList() != null)
            map.put("goods_id_list", sf.getGoodsIdList().toString());
        map.put("pid", PID_FANLI);
        String result = baseRequest(map);