admin
2022-09-16 70ebe043e6b62756be9e257fe954c747d46568b9
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ShareControllerV2.java
@@ -1,7 +1,9 @@
package com.yeshi.fanli.controller.client.v2;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
@@ -11,13 +13,17 @@
import javax.servlet.http.HttpServletRequest;
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.entity.SystemFunction;
import com.yeshi.fanli.entity.SystemPIDInfo;
import com.yeshi.fanli.exception.taobao.TaoBaoConvertLinkException;
import com.yeshi.fanli.service.inter.pdd.PDDAuthService;
import com.yeshi.fanli.service.inter.user.*;
import com.yeshi.fanli.service.manger.PIDManager;
import com.yeshi.fanli.service.manger.goods.TaoBaoLinkManager;
import com.yeshi.fanli.util.*;
import com.yeshi.fanli.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -63,10 +69,6 @@
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
import com.yeshi.fanli.service.inter.tlj.ConfigTaoLiJinService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinRecordService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserShareGoodsGroupService;
import com.yeshi.fanli.service.inter.user.UserShareGoodsRecordService;
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
@@ -93,6 +95,9 @@
@Controller
@RequestMapping("api/v2/share")
public class ShareControllerV2 {
    Logger logger = LoggerFactory.getLogger(ShareControllerV2.class);
    @Resource
    private ShareGoodsService shareGoodsService;
@@ -153,6 +158,9 @@
    @Resource
    private PIDManager pidManager;
    @Resource
    private UserFunctionsLimitService userFunctionsLimitService;
    private List<ShareGoodsCommentChoiceInfo> getCommentChoiceList(String token, String link, String inviteCode,
                                                                   BigDecimal fanliMoney) {
@@ -217,9 +225,14 @@
            return;
        }
        if (userFunctionsLimitService.isLimit(uid, SystemFunction.share, new Date())) {
            out.print(JsonUtil.loadFalseResult(1, "该功能限制使用"));
            return;
        }
        // 淘宝
        if (goodsType == null || goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            createTaoBaoShare(acceptData, uid, Long.parseLong(goodsId), totalNum, source, needGoods, request, out);
            createTaoBaoShare(acceptData, uid, goodsId, totalNum, source, needGoods, request, out);
            return;
        }
@@ -250,8 +263,25 @@
    }
    public static String getERCodeContentNew(String template, TaoBaoGoodsBrief goods, String token) {
        String tempToken = "";
        String[] sts = token.split(" ");
        if (sts.length > 1) {
            for (int i = 0; i < sts.length - 1; i++) {
                tempToken += sts[i] + " ";
            }
        } else {
            tempToken = token;
        }
        tempToken = tempToken.trim();
        try {
            tempToken = URLEncoder.encode(tempToken, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        String commentText = template.replace("[原价]", goods.getZkPrice().toString());
        commentText = commentText.replace("[淘口令]", token);
        commentText = commentText.replace("[淘口令]", tempToken);
        if (StringUtil.isNullOrEmpty(goods.getCouponInfo())) {
            commentText = commentText.replace("领券抢购", "抢购");
            commentText = commentText.replace("【券后价】[券后价]元", "");
@@ -281,7 +311,7 @@
     * @param request
     * @param out
     */
    public void createTaoBaoShare(AcceptData acceptData, Long uid, Long goodsId, Integer totalNum, String source,
    public void createTaoBaoShare(AcceptData acceptData, Long uid, String goodsId, Integer totalNum, String source,
                                  Boolean needGoods, HttpServletRequest request, PrintWriter out) {
        if (needGoods == null)
            needGoods = false;
@@ -328,7 +358,7 @@
     * @param request
     * @param out
     */
    public void createTaoLijin(Long uid, Long auctionId, int totalNum, String relationId, AcceptData acceptData, HttpServletRequest request,
    public void createTaoLijin(Long uid, String auctionId, int totalNum, String relationId, AcceptData acceptData, HttpServletRequest request,
                               PrintWriter out) {
        try {
            TaoBaoGoodsBrief goods = null;
@@ -499,7 +529,7 @@
        }
    }
    public void createCommonTaoBaoShare(String platform, String version, Long goodsId, String inviteCode, Long uid,
    public void createCommonTaoBaoShare(String platform, String version, String goodsId, String inviteCode, Long uid,
                                        boolean needGoods, String relationId, AcceptData acceptData, PrintWriter out) {
        SystemEnum system = SystemInfoUtil.getSystem(acceptData);
@@ -744,9 +774,18 @@
        }
        String materialId = "https://item.jd.com/" + goodsId + ".html";
        String pid = pidManager.getPidCache(acceptData.getSystem(), Constant.SOURCE_TYPE_JD, SystemPIDInfo.PidType.share);
        String jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, null, pid, uid + "");
        String jumpLink = null;
        try {
            jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, null, pid, uid + "");
        } catch (Exception e) {
            logger.warn(String.format("京东转链出错:materialId-%s  couponUrl-%s", materialId, couponUrl), e);
        }
        if (StringUtil.isNullOrEmpty(jumpLink)) {
            jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, null, null, pid, uid + "");
            try {
                jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, null, null, pid, uid + "");
            } catch (Exception e) {
                logger.warn(String.format("京东转链出错:materialId-%s  couponUrl-%s", materialId, couponUrl), e);
            }
        }
        ShareInfoVO shareInfo = new ShareInfoVO();
@@ -793,7 +832,7 @@
        BigDecimal shareMoney = JDUtil.getGoodsFanLiMoney(jdGoods, shareRate);
        shareInfo.setShareMoney("¥" + shareMoney.toString());
        try {
            ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsDetail(uid, goodsId,
            ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsDetail(uid, goodsId+"",
                    Constant.SOURCE_TYPE_JD, false);
            shareInfo.setShareId(shareRecord.getRedisKey());
        } catch (Exception e) {
@@ -869,7 +908,7 @@
                history.setTkCode(null);
                history.setLink(null);
                history.setQuanLink(null);
                history.setGoodsId(goodsId);
                history.setGoodsId(goodsId+"");
                history.setPostPicture(goods.getPicUrl());
                history.setShareImg(jumpLinkNew);
@@ -928,7 +967,7 @@
        // AESUtil.encrypt(uid + "", Constant.UIDAESKEY),
        // goodsId + "");
        String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goods.getGoodsSign(), pid, uid + "");
        String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goods.getGoodsSign(), pid, pddAuthService.getFanliCustomParams(uid) + "");
        SystemEnum system = SystemInfoUtil.getSystem(acceptData);
@@ -983,7 +1022,7 @@
        shareInfo.setShareMoney("¥" + shareMoney.toString());
        try {
            ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsDetail(uid, goodsId,
            ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsDetail(uid, goodsId+"",
                    Constant.SOURCE_TYPE_PDD, false);
            shareInfo.setShareId(shareRecord.getRedisKey());
        } catch (Exception e) {
@@ -1058,7 +1097,7 @@
                history.setTkCode(null);
                history.setLink(null);
                history.setQuanLink(null);
                history.setGoodsId(goodsId);
                history.setGoodsId(goodsId+"");
                history.setPostPicture(goods.getGoodsImageUrl());
                history.setShareImg(jumpLink);
                List<String> imgList = null;
@@ -1138,7 +1177,7 @@
        shareInfo.setShareMoney("¥" + shareMoney.toString());
        try {
            ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsDetail(uid, goodsId,
            ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsDetail(uid, goodsId+"",
                    Constant.SOURCE_TYPE_VIP, false);
            shareInfo.setShareId(shareRecord.getRedisKey());
        } catch (Exception e) {
@@ -1187,7 +1226,7 @@
                history.setTkCode(null);
                history.setLink(null);
                history.setQuanLink(null);
                history.setGoodsId(goodsId);
                history.setGoodsId(goodsId+"");
                history.setPostPicture(goods.getGoodsThumbUrl());
                history.setShareImg(jumpLink.getUrl());
                List<String> imgList = goods.getGoodsDetailPictures();
@@ -1282,7 +1321,7 @@
        try {
            ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsDetail(uid,
                    Long.parseLong(sts[1]), Constant.SOURCE_TYPE_SUNING, false);
                    Long.parseLong(sts[1])+"", Constant.SOURCE_TYPE_SUNING, false);
            shareInfo.setShareId(shareRecord.getRedisKey());
        } catch (Exception e) {
            try {
@@ -1368,7 +1407,7 @@
                history.setTkCode(null);
                history.setLink(null);
                history.setQuanLink(null);
                history.setGoodsId(Long.parseLong(sts[1]));
                history.setGoodsId(Long.parseLong(sts[1])+"");
                if (goods.getCommodityInfo().getPictureUrl() != null
                        && goods.getCommodityInfo().getPictureUrl().size() > 0)
                    history.setPostPicture(goods.getCommodityInfo().getPictureUrl().get(0).getPicUrl());
@@ -1409,7 +1448,7 @@
        }
        if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            createTaoBaoViewText(acceptData.getSystem(), goodsType, uid, template, Long.parseLong(goodsId), tljId, hasCoupon, out);
            createTaoBaoViewText(acceptData.getSystem(), goodsType, uid, template, goodsId, tljId, hasCoupon, out);
            return;
        }
@@ -1445,7 +1484,7 @@
     * @param hasCoupon
     * @param out
     */
    private void createTaoBaoViewText(SystemEnum system, Integer goodsType, Long uid, String template, Long goodsId, Long tljId,
    private void createTaoBaoViewText(SystemEnum system, Integer goodsType, Long uid, String template, String goodsId, Long tljId,
                                      Boolean hasCoupon, PrintWriter out) {
        TaoBaoGoodsBrief goods = taoBaoGoodsCacheUtil.getCommonTaoBaoGoodsInfo(goodsId);
        if (goods == null)
@@ -1534,8 +1573,13 @@
            couponUrl = couponInfo.getLink();
        }
        String materialId = "https://item.jd.com/" + goodsId + ".html";
        String shortLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, null, pidManager.getPidCache(system, Constant.SOURCE_TYPE_JD, SystemPIDInfo.PidType.share),
                uid + "");
        String shortLink = null;
        try {
            shortLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, null, pidManager.getPidCache(system, Constant.SOURCE_TYPE_JD, SystemPIDInfo.PidType.share),
                    uid + "");
        } catch (Exception e) {
            logger.warn(String.format("京东转链出错:materialId-%s  couponUrl-%s", materialId, couponUrl), e);
        }
        String content = shareGoodsTextTemplateService.createContentJD(template, goods, shortLink, hasCoupon);
        JSONObject data = new JSONObject();
@@ -1849,7 +1893,7 @@
        // API网络接口验证是否在售
        List<TaoBaoGoodsBrief> listTaoKeGoods = null;
        List<Long> listGid = new ArrayList<Long>();
        List<String> listGid = new ArrayList<>();
        for (UserShareGoodsGroup goodsGroup : list) {
            CommonGoods commonGoods = goodsGroup.getCommonGoods();
            Integer goodsType = commonGoods.getGoodsType();
@@ -1888,10 +1932,10 @@
            if (listTaoKeGoods != null && listTaoKeGoods.size() > 0 && goodsType != null
                    && goodsType == Constant.SOURCE_TYPE_TAOBAO) {
                int state = 1; // 默认停售
                Long goodsId = commonGoods.getGoodsId();
                String goodsId = commonGoods.getGoodsId();
                for (TaoBaoGoodsBrief taoKeGoods : listTaoKeGoods) {
                    Long auctionId = taoKeGoods.getAuctionId();
                    if (goodsId == auctionId || goodsId.equals(auctionId)) {
                    String auctionId = taoKeGoods.getAuctionId();
                    if (TaoBaoUtil.isEqual(goodsId , auctionId)) {
                        state = 0; // 在售
                        break;
                    }
@@ -1913,6 +1957,7 @@
            dataObject.put("totalMoney", "¥" + goodsGroup.getTotalMoney());
            GoodsDetailVO detailVO = GoodsDetailVOFactory.convertCommonGoods(commonGoods, paramsDTO);
            detailVO.setCreatetime(null);
            detailVO.setId(commonGoods.getId());
            dataObject.put("goods", gson.toJson(detailVO));
            array.add(dataObject);
@@ -1948,10 +1993,10 @@
        paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(acceptData.getSystem()));
        if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            TaoBaoGoodsBrief goods = taoBaoGoodsCacheUtil.getCommonTaoBaoGoodsInfo(Long.parseLong(goodsId));
            TaoBaoGoodsBrief goods = taoBaoGoodsCacheUtil.getCommonTaoBaoGoodsInfo(goodsId);
            if (goods == null) {
                try {
                    goods = redisManager.getTaoBaoGoodsBrief(Long.parseLong(goodsId));
                    goods = redisManager.getTaoBaoGoodsBrief(goodsId);
                } catch (TaobaoGoodsDownException e) {
                    goods = null;
                }