admin
2021-09-13 8ce7c720e4e7a604b0ff770349b5556f39d37759
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java
@@ -13,16 +13,39 @@
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.annotation.Resource;
import com.ks.lib.common.exception.ParamsException;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.entity.SystemFunction;
import com.yeshi.fanli.entity.SystemPIDInfo;
import com.yeshi.fanli.exception.pdd.PDDAuthException;
import com.yeshi.fanli.exception.pdd.PDDGoodsException;
import com.yeshi.fanli.exception.taobao.TaoBaoConvertLinkException;
import com.yeshi.fanli.exception.taobao.TaoBaoTokenParseException;
import com.yeshi.fanli.service.inter.pdd.PDDAuthService;
import com.yeshi.fanli.service.manger.ClipboardContentType;
import com.yeshi.fanli.service.manger.PIDManager;
import com.yeshi.fanli.service.manger.goods.TaoBaoLinkManager;
import com.yeshi.fanli.service.manger.goods.jd.JDConvertLinkManager;
import com.yeshi.fanli.service.manger.goods.pdd.PDDConvertLinkManager;
import com.yeshi.fanli.service.manger.goods.suning.SuningConvertLinkManager;
import com.yeshi.fanli.service.manger.goods.tb.TBConvertLinkManager;
import com.yeshi.fanli.service.manger.goods.vipshop.VipShopConvertLinkManager;
import com.yeshi.fanli.util.*;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.exception.ExceptionConstant;
import com.yeshi.fanli.util.goods.GoodsJumpUtil;
import com.yeshi.fanli.util.goods.GoodsTextUtil;
import com.yeshi.fanli.util.suning.SuningUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.util.vipshop.VipShopUtil;
import com.yeshi.fanli.vo.goods.ConvertLinkJumpVO;
import com.yeshi.fanli.vo.pdd.PDDConvertLinkResultVO;
import org.apache.commons.beanutils.PropertyUtils;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Controller;
@@ -143,7 +166,19 @@
    private ConvertLinkManager convertLinkManager;
    @Resource
    private ShareGoodsService shareGoodsService;
    private TBConvertLinkManager tbConvertLinkManager;
    @Resource
    private JDConvertLinkManager jdConvertLinkManager;
    @Resource
    private PDDConvertLinkManager pddConvertLinkManager;
    @Resource
    private SuningConvertLinkManager suningConvertLinkManager;
    @Resource
    private VipShopConvertLinkManager vipShopConvertLinkManager;
    @Resource
    private DailyCountMomentsService dailyCountMomentsService;
@@ -152,7 +187,11 @@
    private CommonShareInfoService commonShareInfoService;
    @Resource
    private UserCloudService userCloudService;
    private PDDAuthService pddAuthService;
    @Resource
    private PIDManager pidManager;
    @Resource(name = "taskExecutor")
    private TaskExecutor executor;
@@ -643,6 +682,9 @@
                }
                for (GoodsEvaluate goodsEvaluate : list) {
                    if (goodsEvaluate.getGoods() != null) {
                        goodsEvaluate.getGoods().setCreatetime(null);
                    }
                    GoodsEvaluate evaluateNew = new GoodsEvaluate();
                    try {
                        PropertyUtils.copyProperties(evaluateNew, goodsEvaluate);
@@ -677,8 +719,16 @@
                        List<ImgInfo> listInfoNew = new ArrayList<ImgInfo>();
                        for (ImgInfo imgInfo : goodsEvaluate.getImgList()) {
                            if (acceptData.getSystem() == SystemEnum.yhqjx||acceptData.getSystem() == SystemEnum.hsb) {
                                imgInfo.setGoods(null);
                                imgInfo.setGoodsVO(null);
                            }
                            if (imgInfo.getType() != ImgEnum.activity) {
                                listInfoNew.add(imgInfo);
                                continue;
                            }
                            ImgInfo infoNew = new ImgInfo();
@@ -812,6 +862,124 @@
            LogHelper.errorDetailInfo(e);
        }
    }
    /**
     * 转链
     *
     * @param acceptData
     * @param uid
     * @param link
     * @param out
     */
    @RequestMapping(value = "convertLink", method = RequestMethod.POST)
    public void convertLink(AcceptData acceptData, Long uid, String link, PrintWriter out) {
        if (StringUtil.isNullOrEmpty(link)) {
            out.print(JsonUtil.loadFalseResult("链接为空"));
            return;
        }
        ConvertLinkJumpVO convertLinkJumpVO = null;
        //判断result是否为淘口令
        List<String> urlList = UrlUtils.parseUrlsFromText(link);
        if (urlList.size() > 0) {
            //只处理京东/拼多多链接
            String url = urlList.get(0);
            if (JDUtil.isJDLink(url)) {
                try {
                    url = jdConvertLinkManager.convertShortUrl(url, uid, acceptData.getSystem(), uid == null ? SystemPIDInfo.PidType.coupon : SystemPIDInfo.PidType.fanli);
                } catch (ParamsException e) {
                    e.printStackTrace();
                }
                convertLinkJumpVO = new ConvertLinkJumpVO(GoodsJumpUtil.getJDJumpInfo(url), Constant.SOURCE_TYPE_JD);
                outPrintConvertResult(convertLinkJumpVO, out);
                return;
            }
            if (PinDuoDuoUtil.isPDDLink(url)) {
                String pddGoodsId = PinDuoDuoUtil.getPDDGoodsId(url);
                String customParams = pddAuthService.getFanliCustomParams(uid);
                PDDConvertLinkResultVO convertLinkResult = null;
                try {
                    convertLinkResult = pddConvertLinkManager.convertGoods(Long.parseLong(pddGoodsId), acceptData.getSystem(), customParams, uid == null ? SystemPIDInfo.PidType.coupon : SystemPIDInfo.PidType.fanli);
                    convertLinkJumpVO = new ConvertLinkJumpVO(GoodsJumpUtil.getPDDJumpInfo(convertLinkResult), Constant.SOURCE_TYPE_PDD);
                    outPrintConvertResult(convertLinkJumpVO, out);
                    return;
                } catch (PDDGoodsException e) {
                    e.printStackTrace();
                    //商品下线
                    out.print(JsonUtil.loadFalseResult(ExceptionConstant.CODE_GOODS_OFFLINE, "商品已下线"));
                    return;
                } catch (PDDAuthException e) {
                    e.printStackTrace();
                    //拼多多未授权
                    out.print(JsonUtil.loadFalseResult(ExceptionConstant.CODE_AUTH_PDD_NO_AUTH, "拼多多尚未授权,请授权"));
                    return;
                }
            }
            return;
        }
        List<String> tokenList = TaoBaoUtil.getTokenListFromTextWithKuoHao(link);
        if (tokenList.size() > 0) {
            //还原口令
            try {
                TaoKeApiUtil.TokenConvertResult convertResult = TaoKeApiUtil.tokenConvert(tokenList.get(0));
                if (convertResult != null) {
                    String originUrl = convertResult.getOrigin_url();
                    long goodsId = convertResult.getNum_iid();
                    TaoBaoLink taoBaoLink = tbConvertLinkManager.convertGoods(goodsId, uid, acceptData.getSystem(), uid == null ? SystemPIDInfo.PidType.coupon : SystemPIDInfo.PidType.fanli);
                    convertLinkJumpVO = new ConvertLinkJumpVO(GoodsJumpUtil.getTBJumpInfo(taoBaoLink), Constant.SOURCE_TYPE_TAOBAO);
                    outPrintConvertResult(convertLinkJumpVO, out);
                    return;
                } else {
                    throw new Exception("转链失败");
                }
            } catch (Exception e) {
                e.printStackTrace();
                //输出原来的淘口令
                JSONObject root = new JSONObject();
                root.put("data", new Gson().toJson(new ConvertLinkJumpVO(null, Constant.SOURCE_TYPE_TAOBAO)));
                root.put("code", ExceptionConstant.CODE_JUMP_NO_SUPPORT);
                out.print(root.toString());
                return;
            }
        }
        out.print(JsonUtil.loadFalseResult("不支持的类型"));
    }
    private void outPrintConvertResult(ConvertLinkJumpVO vo, PrintWriter out) {
        out.print(JsonUtil.loadTrueResult(new Gson().toJson(vo)));
    }
    /**
     * 复制推荐语
     *
     * @param acceptData
     * @param uid
     * @param id
     * @param type
     * @param goodsId
     * @param goodsType
     * @param out
     */
    @RequestMapping(value = "evaluateCopyRecommend", method = RequestMethod.POST)
    public void evaluateCopyRecommend(AcceptData acceptData, Long uid, String id, PrintWriter out) {
        GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(id);
        if (goodsEvaluate == null) {
            out.print(JsonUtil.loadFalseResult("该内容已不存在"));
            return;
        }
        JSONObject data = new JSONObject();
        String result = GoodsTextUtil.decodeAppHtmlText(goodsEvaluate.getTitle());
        data.put("content", result);
        out.print(JsonUtil.loadTrueResult(data));
    }
    /**
@@ -998,7 +1166,7 @@
        if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
            TaoBaoLink taoBaoLink = null;
            try {
                taoBaoLink = taoBaoLinkManager.getTaoBaoLinkForShare(user.getId(), Long.parseLong(goodsVO.getGoodsId()),
                taoBaoLink = taoBaoLinkManager.getTaoBaoLinkForShare(system, user.getId(), Long.parseLong(goodsVO.getGoodsId()),
                        relationId, null);
            } catch (TaoBaoConvertLinkException e) {
                e.printStackTrace();
@@ -1018,7 +1186,7 @@
                couponUrl = couponInfo.getLink();
            }
            String materialId = "https://item.jd.com/" + goodsVO.getGoodsId() + ".html";
            jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, null, JDApiUtil.POSITION_SHARE + "",
            jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, null, pidManager.getPidCache(system, Constant.SOURCE_TYPE_JD, SystemPIDInfo.PidType.share),
                    user.getId() + "");
        } else if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_PDD) {
            PDDGoodsDetail pddGoodsDetail = PinDuoDuoApiUtil.getGoodsDetail(Long.parseLong(goodsVO.getGoodsId()));
@@ -1026,8 +1194,7 @@
                return null;
            }
            jumpLink = PinDuoDuoApiUtil.getPromotionUrl(pddGoodsDetail.getGoodsSign(),
                    PinDuoDuoApiUtil.PID_SHARE + "", user.getId() + "");
            jumpLink = PinDuoDuoApiUtil.getPromotionUrl(pddGoodsDetail.getGoodsSign(), pidManager.getPidCache(system, Constant.SOURCE_TYPE_PDD, SystemPIDInfo.PidType.share), user.getId() + "");
        }
        FileUploadResult uploadResult = qrCodeService.drawDynamicGoodsPoster(jumpLink, user.getPortrait(), inviteCode,
@@ -1095,9 +1262,21 @@
        }
        String newText = text; // 非通用券需要验证
        //特价只需要复制文字,不需要转链
        if (acceptData.getSystem() == SystemEnum.yhqjx||acceptData.getSystem() == SystemEnum.hsb) {
            newText = GoodsTextUtil.decodeAppHtmlText(newText);
            //只复制文字
            JSONObject data = new JSONObject();
            data.put("text", newText);
            out.print(JsonUtil.loadTrueResult(data));
            return;
        }
        if (comment != null && (comment.getNeedSpin() == null || comment.getNeedSpin())) {
            try {
                newText = convertLinkManager.convertLinkFromText(text, uid, true, true);
                newText = convertLinkManager.convertLinkFromText(acceptData.getSystem(), text, uid, true, true);
            } catch (ConvertLinkExceptionException e) {
                if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
                    out.print(JsonUtil.loadFalseResult("评论生成失败"));
@@ -1181,7 +1360,7 @@
        String newText = text;
        if (shareInfo.getNeedSpin() != null && shareInfo.getNeedSpin()) {
            try {
                newText = convertLinkManager.convertLinkFromText(text, uid, true, true);
                newText = convertLinkManager.convertLinkFromText(acceptData.getSystem(), text, uid, true, true);
            } catch (ConvertLinkExceptionException e) {
                if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
                    out.print(JsonUtil.loadFalseResult("评论生成失败"));
@@ -1251,7 +1430,7 @@
            int platformCode = Constant.getPlatformCode(acceptData.getPlatform());
            jumpDetail = jumpDetailV2Service.getByTypeCache("web", platformCode,
                    Integer.parseInt(acceptData.getVersion()));
                    Integer.parseInt(acceptData.getVersion()),acceptData.getSystem());
            JSONObject inner = new JSONObject();
            inner.put("url", jumpLink);
            params = inner.toString();
@@ -1376,7 +1555,7 @@
        String newText = text;
        if (shareInfo.getNeedSpin() != null && shareInfo.getNeedSpin()) {
            try {
                newText = convertLinkManager.convertLinkFromText(text, uid, true, true);
                newText = convertLinkManager.convertLinkFromText(acceptData.getSystem(), text, uid, true, true);
            } catch (ConvertLinkExceptionException e) {
                if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
                    JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
@@ -1508,7 +1687,7 @@
        if (shareInfo.getNeedSpin() != null && shareInfo.getNeedSpin()) {
            try {
                String erCodeContent = "";
                newText = convertLinkManager.convertLinkFromText(text, uid, true, true);
                newText = convertLinkManager.convertLinkFromText(acceptData.getSystem(), text, uid, true, true);
                // 获取口令
                List<String> tokenList = TaoBaoUtil.getTokenListFromTextWithKuoHao(newText);
                if (tokenList != null && tokenList.size() > 0) {
@@ -1605,7 +1784,7 @@
        String newText = text; // 非通用券需要验证
        if (comment != null && (comment.getNeedSpin() == null || comment.getNeedSpin())) {
            try {
                newText = convertLinkManager.convertLinkFromText(text, uid, true, true);
                newText = convertLinkManager.convertLinkFromText(acceptData.getSystem(), text, uid, true, true);
            } catch (ConvertLinkExceptionException e) {
                if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
                    JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));