admin
2020-02-27 be05279bfbc10defc002d7718f46a49f3c96d05e
Merge remote-tracking branch 'origin/div' into div

Conflicts:
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ShareControllerV2.java
fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java
4个文件已修改
3668 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ShareControllerV2.java 3272 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java 384 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoBaoUtil.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/test/java/org/fanli/TaoKeTest.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ShareControllerV2.java
@@ -1,1555 +1,1717 @@
package com.yeshi.fanli.controller.client.v2;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.yeshi.utils.DateUtil;
import org.yeshi.utils.HttpUtil;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.taobao.TbImgUtil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.yeshi.fanli.dto.ConfigParamsDTO;
import com.yeshi.fanli.dto.jd.JDCouponInfo;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.share.ShareGoodsRecordDTO;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsGroup;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsHistory;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsRecord;
import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinRecord;
import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.goods.ShareGoodsTextTemplate;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoBaoLink;
import com.yeshi.fanli.entity.taobao.TaoKeAppInfo;
import com.yeshi.fanli.exception.goods.ShareGoodsTextTemplateException;
import com.yeshi.fanli.exception.share.ShareGoodsException;
import com.yeshi.fanli.exception.taobao.TaoKeApiException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.exception.tlj.UserTaoLiJinRecordException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.config.SystemClientParamsService;
import com.yeshi.fanli.service.inter.dynamic.DynamicInfoService;
import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
import com.yeshi.fanli.service.inter.goods.ShareGoodsService;
import com.yeshi.fanli.service.inter.goods.ShareGoodsTextTemplateService;
import com.yeshi.fanli.service.inter.monitor.BusinessEmergent110Service;
import com.yeshi.fanli.service.inter.monitor.MonitorService;
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.SpreadUserImgService;
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.AESUtil;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TaoBaoConstant;
import com.yeshi.fanli.util.VersionUtil;
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
import com.yeshi.fanli.util.cache.TaoBaoGoodsCacheUtil;
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
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;
import com.yeshi.fanli.util.taobao.TaoLiJinUtil;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
import com.yeshi.fanli.vo.goods.ShareGoodsCommentChoiceInfo;
import com.yeshi.fanli.vo.goods.ShareInfoVO;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
@Controller
@RequestMapping("api/v2/share")
public class ShareControllerV2 {
    @Resource(name = "taskExecutor")
    private TaskExecutor executor;
    @Resource
    private ShareGoodsService shareGoodsService;
    @Resource
    private ConfigService configService;
    @Resource
    private HongBaoManageService hongBaoManageService;
    @Resource
    private MonitorService monitorService;
    @Resource
    private UserShareGoodsRecordService userShareGoodsRecordService;
    @Resource
    private UserShareGoodsGroupService userShareGoodsGroupService;
    @Resource
    private CommonGoodsService commonGoodsService;
    @Resource
    private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
    @Resource
    private UserInfoService userInfoService;
    @Resource
    private TaoBaoGoodsCacheUtil taoBaoGoodsCacheUtil;
    @Resource
    private JDGoodsCacheUtil jdGoodsCacheUtil;
    @Resource
    private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
    @Resource
    private RedisManager redisManager;
    @Resource
    private ShareGoodsTextTemplateService shareGoodsTextTemplateService;
    @Resource
    private SystemClientParamsService systemClientParamsService;
    @Resource
    private DynamicInfoService dynamicInfoService;
    @Resource
    private UserInfoExtraService userInfoExtraService;
    @Resource
    private SpreadUserImgService spreadUserImgService;
    @Resource
    private BusinessEmergent110Service businessEmergent110Service;
    @Resource
    private ConfigTaoLiJinService configTaoLiJinService;
    @Resource
    private UserTaoLiJinRecordService userTaoLiJinRecordService;
    private List<ShareGoodsCommentChoiceInfo> getCommentChoiceList(String token, String link, String inviteCode,
            BigDecimal fanliMoney) {
        List<ShareGoodsCommentChoiceInfo> list = new ArrayList<>();
        if (!StringUtil.isNullOrEmpty(token))
            list.add(new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_TOKEN, "淘口令",
                    String.format("復製这条%s\n进入【Tao宝】即可抢购", token), true, false));
        if (!StringUtil.isNullOrEmpty(link)) {
            list.add(new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_LINK, "链接", link, true, false));
        }
        if (!StringUtil.isNullOrEmpty(inviteCode)) {
            list.add(new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_INVITE_CODE, "邀请码",
                    "邀请码:" + inviteCode, false, true));
        }
        list.add(new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_DOWNLOAD_LINK, "下载链接",
                "下载链接:" + Constant.YINGYONGBAO_LINK, false, true));
        list.add(new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_FANLI_MONEY, "返利金额",
                "返利金额:¥ " + fanliMoney, false, true));
        return list;
    }
    /**
     *
     * @param acceptData
     * @param uid
     *            -用户ID
     * @param goodsId-商品ID
     * @param source
     * @param totalNum
     * @param goodsType
     * @param needGoods
     *            -是否需要商品信息
     * @param request
     * @param out
     */
    @RequestMapping(value = "createShareInfo")
    public void createShareInfo(AcceptData acceptData, Long uid, Long goodsId, String source, Integer totalNum,
            Integer goodsType, Boolean needGoods, HttpServletRequest request, PrintWriter out) {
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
            return;
        }
        if (needGoods == null)
            needGoods = false;
        try {
            // 日志记录
            String info = String.format("type=share&uid=%s&goodsId=%s&source=%s&goodsType=%s", uid, goodsId, source,
                    goodsType);
            LogHelper.orderInfo(info);
        } catch (Exception e) {
        }
        UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
        if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
            out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
            return;
        }
        if (goodsId == null || goodsId <= 0) {
            out.print(JsonUtil.loadFalseResult(2, "商品ID不能为空"));
            return;
        }
        // 淘宝
        if (goodsType == null || goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            createTaoBaoShare(acceptData, uid, goodsId, totalNum, source, needGoods, request, out);
            return;
        }
        // 京东
        if (goodsType == Constant.SOURCE_TYPE_JD) {
            createJDShare(acceptData, uid, goodsId, source, needGoods, out);
            return;
        }
        // 拼多多
        if (goodsType == Constant.SOURCE_TYPE_PDD) {
            createPDDShare(acceptData, uid, goodsId, source, needGoods, out);
            return;
        }
    }
    public static String getERCodeContent(String template, TaoBaoGoodsBrief goods, String token) {
        return template.replace("[淘口令]", token);
    }
    /**
     * 创建淘宝分享信息
     *
     * @param acceptData
     * @param uid
     * @param goodsId
     * @param totalNum
     * @param source
     * @param request
     * @param out
     */
    public void createTaoBaoShare(AcceptData acceptData, Long uid, Long goodsId, Integer totalNum, String source,
            Boolean needGoods, HttpServletRequest request, PrintWriter out) {
        if (needGoods == null)
            needGoods = false;
        UserExtraTaoBaoInfo extraInfo = userExtraTaoBaoInfoService.getByUid(uid);
        UserInfoExtra userExtraInfo = userInfoExtraService.getUserInfoExtra(uid);
        String inviteCode = null;
        if (userExtraInfo != null) {
            if (!StringUtil.isNullOrEmpty(userExtraInfo.getInviteCodeVip())) {
                inviteCode = userExtraInfo.getInviteCodeVip();
            } else {
                inviteCode = userExtraInfo.getInviteCode();
            }
        }
        String relationId = null;
        if (extraInfo != null && extraInfo.getRelationId() != null && extraInfo.getRelationValid() != null
                && extraInfo.getRelationValid() == true)
            relationId = extraInfo.getRelationId();
        if (StringUtil.isNullOrEmpty(relationId)) {
            out.print(JsonUtil.loadFalseResult(3, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
            return;
        }
        // 淘礼金创建分享
        if (source != null && "taolijin".equals(source)) {// 淘礼金分享创建
            createTaoLijin(uid, goodsId, totalNum, relationId, request, out);
            return;
        } else {// 普通分享创建
            createCommonTaoBaoShare(acceptData.getPlatform(), acceptData.getVersion(), goodsId, inviteCode, uid,
                    needGoods, relationId, out);
            return;
        }
    }
    /**
     * 淘礼金创建分享
     *
     * @param uid
     * @param auctionId
     * @param totalNum
     * @param relationId
     * @param request
     * @param out
     */
    public void createTaoLijin(Long uid, Long auctionId, int totalNum, String relationId, HttpServletRequest request,
            PrintWriter out) {
        try {
            TaoBaoGoodsBrief goods = null;
            try {
                goods = TaoKeApiUtil.searchGoodsDetail(auctionId);
            } catch (TaobaoGoodsDownException e2) {
                e2.printStackTrace();
            }
            if (goods == null) {
                out.print(JsonUtil.loadFalseResult("商品已下架"));
                return;
            }
            if (goods.getTkRate() == null || goods.getTkRate().compareTo(new BigDecimal(0)) <= 0) {
                // TaoKeApiUtil.specialConvertCoupon(auctionId, app);
            }
            // 计算推广红包
            String warningRate = configTaoLiJinService.getValueByKey("warning_value", new Date());
            LogHelper.error("推广红包比例:" + warningRate);
            BigDecimal spreadMoney = TaoLiJinUtil.getSpreadMoney(warningRate, goods);
            LogHelper.error("推广红包:" + spreadMoney);
            // 推广红包 不能小于1
            if (spreadMoney.compareTo(new BigDecimal(1.1)) < 0) {
                out.print(JsonUtil.loadFalseResult(1, "该商品淘礼金不足"));
                return;
            }
            ShareInfoVO shareInfo = new ShareInfoVO();
            shareInfo.setSpreadMoney(" ¥" + spreadMoney.toString());
            String taoLiJinLink = null;
            Long tljId = null;
            try {
                UserTaoLiJinRecord record = userTaoLiJinRecordService.createShareTaoLiJin(uid, totalNum, goods);
                tljId = record.getId();
                taoLiJinLink = record.getSendUrl();
                shareInfo.setTljId(tljId.toString());
                shareInfo.setSurplusMoney(record.getSurplusMoney().toString());
            } catch (UserTaoLiJinRecordException e) {
                out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
                return;
            }
            String url = String.format("http://%s%s?uid=%s&id=%s&appType=flq&tid=%s", configService.getH5Host(),
                    Constant.systemCommonConfig.getShareGoodsPagePath(), AESUtil.encrypt(uid + "", Constant.UIDAESKEY),
                    auctionId + "", AESUtil.encrypt(tljId + "", Constant.UIDAESKEY));
            String shortLink = HttpUtil.getShortLink(url);
            if (!StringUtil.isNullOrEmpty(shortLink)) {
                url = shortLink;
            }
            shareInfo.setClickUrl(url);
            TaoBaoLink taoBaoLink = new TaoBaoLink();
            taoBaoLink.setCouponLink(taoLiJinLink);
            taoBaoLink.setClickUrl(taoLiJinLink);
            // 创建淘口令
            if (!StringUtil.isNullOrEmpty(taoLiJinLink)) {// 通过立即推广方式获取淘口令成功
                String quanToken = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), taoLiJinLink);
                if (!StringUtil.isNullOrEmpty(quanToken)) {
                    taoBaoLink.setTaoToken(quanToken);
                }
            }
            shareInfo.setToken(TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
            shareInfo.setRule(configService.get(ConfigKeyEnum.shareSingleGoodsRule.getKey()));
            shareInfo.setPictUrl(TbImgUtil.getTBSizeImg(goods.getPictUrl(), 500));
            // 无券
            String shopType = goods.getUserType() == 0 ? TaoBaoConstant.SHARE_PRICE_TAOBAO
                    : TaoBaoConstant.SHARE_PRICE_TM;
            String shareText = "";
            if (StringUtil.isNullOrEmpty(goods.getCouponInfo())) {
                String text = shareGoodsTextTemplateService.getCommonTemplate(uid);
                if (StringUtil.isNullOrEmpty(text))
                    text = configService.get(ConfigKeyEnum.goodsShareTextNoCoupon.getKey());
                shareText = text.replace("{标题}", goods.getTitle()).replace("{商品原价}",
                        MoneyBigDecimalUtil.getWithNoZera(goods.getZkPrice()) + "");
            } else// 有券
            {
                String text = shareGoodsTextTemplateService.getTaoLiJinTemplate(uid);
                if (StringUtil.isNullOrEmpty(text))
                    text = configTaoLiJinService.getValueByKey("goods_share_text", new Date());
                shareText = text.replace("{标题}", goods.getTitle())
                        .replace("{商品原价}", MoneyBigDecimalUtil.getWithNoZera(goods.getZkPrice()) + "")
                        .replace("{优惠券面额}", MoneyBigDecimalUtil.getWithNoZera(goods.getCouponAmount()).toString())
                        .replace("{淘礼金面额}", MoneyBigDecimalUtil.getWithNoZera(spreadMoney).toString())
                        .replace("{优惠券价}", TaoBaoUtil.getAfterUseCouplePrice(goods) + "");
            }
            shareText = shareText.replace("{店铺类型}", shopType)
                    .replace("{月销量}", TaoBaoUtil.getSaleCount(goods.getBiz30day())).replace("{领券短链}", shortLink)
                    .replace("{淘口令}", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
            shareInfo.setShareText(shareText);
            String descText = shareText.replace(goods.getTitle(), "").trim();
            if (descText.startsWith("\\r\\n"))
                descText = descText.substring(0);
            shareInfo.setDescText(descText);
            String imgs = configService.get(ConfigKeyEnum.goodsShareNotifyImgs.getKey());
            JSONArray array = JSONArray.fromObject(imgs);
            shareInfo.setNotifyPicture(array.optString(0));
            // 2.0.7版本后的提示图片
            imgs = configService.get(ConfigKeyEnum.goodsShareNotifyImgs207.getKey());
            array = JSONArray.fromObject(imgs);
            shareInfo.setNotifyPictureNew(array.optString(0));
            shareInfo.setNotifyDesc(configService.get(ConfigKeyEnum.goodsShareNotify.getKey()));
            // 添加分享记录
            BigDecimal rate = hongBaoManageService.getShareRate();
            BigDecimal shareMoney = TaoBaoUtil.getShareGoodsHongBaoInfo(goods, rate);
            shareInfo.setShareMoney("¥" + shareMoney.toString());
            try {
                ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsDetail(uid, auctionId,
                        Constant.SOURCE_TYPE_TAOBAO, true);
                shareInfo.setShareId(shareRecord.getRedisKey());
            } catch (Exception e) {
                try {
                    LogHelper.errorDetailInfo(e);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
            out.print(JsonUtil.loadTrueResult(JsonUtil.getSimpleGson().toJson(shareInfo)));
            final TaoBaoLink taobaoLink = taoBaoLink;
            final TaoBaoGoodsBrief finalGoods = goods;
            // 异步操作
            com.yeshi.fanli.util.ThreadUtil.run(new Runnable() {
                @Override
                public void run() {
                    // 异步操作 添加分享记录
                    UserShareGoodsHistory history = new UserShareGoodsHistory();
                    history.setUser(new UserInfo(uid));
                    history.setHongbao(shareMoney);
                    history.setCreateTime(new Date());
                    history.setGoodsType(UserShareGoodsHistory.TYPE_TAOBAO);
                    history.setTkCode(TaoBaoUtil.filterTaoToken(taobaoLink.getTaoToken()));
                    history.setLink(taobaoLink.getClickUrl());
                    history.setQuanLink(taobaoLink.getCouponLink());
                    history.setGoodsId(finalGoods.getAuctionId());
                    history.setPostPicture(finalGoods.getPictUrl());
                    history.setShareImg(taobaoLink.getClickUrl());
                    List<String> imgList = finalGoods.getImgList();
                    if (imgList == null) {
                        imgList = new ArrayList<>();
                    }
                    history.setPictures(JsonUtil.getGson().toJson(imgList));
                    shareGoodsService.addShareGoodsHistory(history);
                }
            });
            return;
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e, "分享出错:uid:" + uid + "auctionId:" + auctionId, "");
            out.print(JsonUtil.loadFalseResult("创建分享出错"));
            businessEmergent110Service.shareTaoBaoGoodsError(StringUtil.Md5(auctionId + ""));
        }
    }
    public void createCommonTaoBaoShare(String platform, String version, Long goodsId, String inviteCode, Long uid,
            boolean needGoods, String relationId, PrintWriter out) {
        try {
            ShareInfoVO shareInfo = new ShareInfoVO();
            TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(uid, goodsId, relationId);
            if (taoBaoLink != null && taoBaoLink.getGoods() != null && needGoods) {
                ConfigParamsDTO dto = hongBaoManageService.getShowComputeRate(platform, version);
                GoodsDetailVO goodsInfo = GoodsDetailVOFactory.convertTaoBao(taoBaoLink.getGoods(), dto);
                shareInfo.setGoodsInfo(goodsInfo);
            }
            String url = String.format("http://%s%s?uid=%s&id=%s&appType=flq", configService.getH5Host(),
                    Constant.systemCommonConfig.getShareGoodsPagePath(), AESUtil.encrypt(uid + "", Constant.UIDAESKEY),
                    goodsId + "");
            String shortLink = HttpUtil.getShortLink(url);
            if (!StringUtil.isNullOrEmpty(shortLink)) {
                url = shortLink;
            }
            shareInfo.setClickUrl(url);
            shareInfo.setToken(TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
            shareInfo.setRule(configService.get(ConfigKeyEnum.shareSingleGoodsRule.getKey()));
            shareInfo.setPictUrl(TbImgUtil.getTBSizeImg(taoBaoLink.getGoods().getPictUrl(), 500));
            String commentTextStr = configService.get(ConfigKeyEnum.shareSingleGoodsCommentText.getKey());
            List<String> commentTexts = new ArrayList<>();
            if (!StringUtil.isNullOrEmpty(commentTextStr)) {
                JSONArray array = JSONArray.fromObject(commentTextStr);
                for (int i = 0; i < array.size(); i++) {
                    if (StringUtil.isNullOrEmpty(inviteCode)) {
                        if (array.optString(i).contains("[邀请码]")) {
                            continue;
                        }
                    }
                    if (StringUtil.isNullOrEmpty(inviteCode))
                        commentTexts.add(array.optString(i).replace("[下载链接]", Constant.YINGYONGBAO_LINK)
                                .replace("[淘口令]", shareInfo.getToken()));
                    else
                        commentTexts.add(array.optString(i).replace("[下载链接]", Constant.YINGYONGBAO_LINK)
                                .replace("[邀请码]", inviteCode).replace("[淘口令]", shareInfo.getToken()));
                }
            }
            shareInfo.setCommentTexts(commentTexts);
            String shareText = "";
            // 无券
            String shopType = taoBaoLink.getGoods().getUserType() == 0 ? TaoBaoConstant.SHARE_PRICE_TAOBAO
                    : TaoBaoConstant.SHARE_PRICE_TM;
            if (StringUtil.isNullOrEmpty(taoBaoLink.getGoods().getCouponInfo())) {
                String text = shareGoodsTextTemplateService.getCommonTemplate(uid);
                if (StringUtil.isNullOrEmpty(text))
                    text = configService.get(ConfigKeyEnum.goodsShareTextNoCoupon.getKey());
                shareText = text.replace("{标题}", taoBaoLink.getGoods().getTitle()).replace("{商品原价}",
                        MoneyBigDecimalUtil.getWithNoZera(taoBaoLink.getGoods().getZkPrice()) + "");
            } else// 有券
            {
                String text = shareGoodsTextTemplateService.geteCouponTemplate(uid);
                if (StringUtil.isNullOrEmpty(text))
                    text = configService.get(ConfigKeyEnum.goodsShareTextCoupon.getKey());
                shareText = text.replace("{标题}", taoBaoLink.getGoods().getTitle())
                        .replace("{商品原价}", MoneyBigDecimalUtil.getWithNoZera(taoBaoLink.getGoods().getZkPrice()) + "")
                        .replace("{优惠券面额}",
                                MoneyBigDecimalUtil.getWithNoZera(taoBaoLink.getGoods().getCouponAmount()).toString())
                        .replace("{优惠券价}", TaoBaoUtil.getAfterUseCouplePrice(taoBaoLink.getGoods()) + "");
            }
            shareText = shareText.replace("{店铺类型}", shopType)
                    .replace("{月销量}", TaoBaoUtil.getSaleCount(taoBaoLink.getGoods().getBiz30day()))
                    .replace("{领券短链}", shortLink).replace("{淘口令}", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
            shareInfo.setShareText(shareText);
            String descText = shareText.replace(taoBaoLink.getGoods().getTitle(), "").trim();
            if (descText.startsWith("\\r\\n")) {
                descText = descText.substring(0);
            }
            shareInfo.setDescText(descText);
            // 测试
            // 2.0.2之前
            if (!VersionUtil.greaterThan_2_0_2(platform, version))
                shareInfo.setClickUrl(getERCodeContent(configService.get(ConfigKeyEnum.taobaoShareQrcodeText.getKey()),
                        taoBaoLink.getGoods(), shareInfo.getToken()));
            shareInfo.setWxErCode(getERCodeContent(configService.get(ConfigKeyEnum.taobaoShareQrcodeText.getKey()),
                    taoBaoLink.getGoods(), shareInfo.getToken()));
            // 提示图文内容
            String imgs = configService.get(ConfigKeyEnum.goodsShareNotifyImgs.getKey());
            JSONArray array = JSONArray.fromObject(imgs);
            shareInfo.setNotifyPicture(array.optString(0));
            // 2.0.7版本后的提示图片
            imgs = configService.get(ConfigKeyEnum.goodsShareNotifyImgs207.getKey());
            array = JSONArray.fromObject(imgs);
            shareInfo.setNotifyPictureNew(array.optString(0));
            shareInfo.setNotifyDesc(configService.get(ConfigKeyEnum.goodsShareNotify.getKey()));
            // 分享金额
            BigDecimal rate = hongBaoManageService.getShareRate();
            BigDecimal shareMoney = TaoBaoUtil.getShareGoodsHongBaoInfo(taoBaoLink.getGoods(), rate);
            shareInfo.setShareMoney("¥" + shareMoney.toString());
            // 分享id
            try {
                ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsDetail(uid, goodsId,
                        Constant.SOURCE_TYPE_TAOBAO, false);
                shareInfo.setShareId(shareRecord.getRedisKey());
            } catch (Exception e) {
                try {
                    LogHelper.errorDetailInfo(e);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
            // 设置评论文本选项
            shareInfo.setCommentTextChoiceList(getCommentChoiceList(shareInfo.getShareText(), null, inviteCode,
                    TaoBaoUtil.getGoodsHongBaoMoney(taoBaoLink.getGoods(), hongBaoManageService.getFanLiRate())));
            shareInfo.setCommentText(shareInfo.getShareText());
            if (VersionUtil.greaterThan_2_0_7(platform, version)) {
                String recommend = taoBaoLink.getGoods().getTitle();
                if (!StringUtil.isNullOrEmpty(taoBaoLink.getGoods().getDescription()))
                    recommend += "\n\r" + taoBaoLink.getGoods().getDescription();
                shareInfo.setRecommendText(recommend);
            } else
                shareInfo.setRecommendText(shareInfo.getDescText());
            out.print(JsonUtil.loadTrueResult(
                    JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create().toJson(shareInfo)));
            final TaoBaoLink taobaoLink = taoBaoLink;
            // 异步操作
            com.yeshi.fanli.util.ThreadUtil.run(new Runnable() {
                @Override
                public void run() {
                    // 异步操作 添加分享记录
                    UserShareGoodsHistory history = new UserShareGoodsHistory();
                    history.setUser(new UserInfo(uid));
                    history.setHongbao(shareMoney);
                    history.setCreateTime(new Date());
                    history.setGoodsType(UserShareGoodsHistory.TYPE_TAOBAO);
                    history.setTkCode(TaoBaoUtil.filterTaoToken(taobaoLink.getTaoToken()));
                    history.setLink(taobaoLink.getClickUrl());
                    history.setQuanLink(taobaoLink.getCouponLink());
                    history.setGoodsId(taobaoLink.getGoods().getAuctionId());
                    history.setPostPicture(taobaoLink.getGoods().getPictUrl());
                    List<String> imgList = taobaoLink.getGoods().getImgList();
                    if (imgList == null) {
                        imgList = new ArrayList<>();
                    }
                    history.setPictures(JsonUtil.getGson().toJson(imgList));
                    shareGoodsService.addShareGoodsHistory(history);
                }
            });
            return;
        } catch (ShareGoodsException e) {
            LogHelper.errorDetailInfo(e, "分享出错:uid:" + uid + " goodsId:" + goodsId, "");
            out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMessage()));
            businessEmergent110Service.shareTaoBaoGoodsError(StringUtil.Md5(goodsId + ""));
        }
    }
    /**
     * 京东创建分享
     *
     * @param acceptData
     * @param uid
     * @param goodsId
     * @param source
     * @param goodsType
     * @param request
     * @param out
     */
    public void createJDShare(AcceptData acceptData, Long uid, Long goodsId, String source, boolean needGoods,
            PrintWriter out) {
        JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
        if (jdGoods == null) {
            out.print(JsonUtil.loadFalseResult(1, "该商品已下架"));
            return;
        }
        // String url = String.format("http://%s%s?uid=%s&id=%s",
        // configService.getH5Host(),
        // Constant.systemCommonConfig.getShareGoodsPagePathJD(),
        // AESUtil.encrypt(uid + "", Constant.UIDAESKEY),
        // goodsId + "");
        String couponUrl = null;
        JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(jdGoods);
        if (couponInfo != null) {
            couponUrl = couponInfo.getLink();
        }
        String materialId = "https://item.jd.com/" + goodsId + ".html";
        String jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "",
                uid + "");
        ShareInfoVO shareInfo = new ShareInfoVO();
        shareInfo.setClickUrl(jumpLink);
        shareInfo.setWxErCode(jumpLink);
        shareInfo.setRule(configService.get(ConfigKeyEnum.shareRuleLinkJD.getKey()));
        shareInfo.setPictUrl(jdGoods.getPicUrl());
        shareInfo.setCommentTexts(new ArrayList<>());
        if (needGoods)
            shareInfo.setGoodsInfo(GoodsDetailVOFactory.convertJDGoods(jdGoods,
                    hongBaoManageService.getShowComputeRate(acceptData.getPlatform(), acceptData.getVersion())));
        String shareText = "";
        boolean hasCoupon = false;
        // 分享模板
        ShareGoodsTextTemplate textTemplate = shareGoodsTextTemplateService.getShareGoodsTextTemplate(uid);
        if (couponInfo == null) { // 无券模板
            if (textTemplate != null)
                shareText = textTemplate.getShareJDTextTemplate();
            if (StringUtil.isNullOrEmpty(shareText))
                shareText = configService.get(ConfigKeyEnum.goodsShareTextNoCouponJD.getKey());
        } else { // 有券模板
            hasCoupon = true;
            if (textTemplate != null)
                shareText = textTemplate.getShareJDTextTemplateCoupon();
            if (StringUtil.isNullOrEmpty(shareText))
                shareText = configService.get(ConfigKeyEnum.goodsShareTextCouponJD.getKey());
        }
        shareText = shareGoodsTextTemplateService.createContentByTemplateJD(shareText, uid, jdGoods, jumpLink,
                hasCoupon);
        shareInfo.setShareText(shareText);
        String descText = shareText.replace(jdGoods.getSkuName(), "").trim();
        if (descText.startsWith("\\r\\n")) {
            descText = descText.substring(0);
        }
        shareInfo.setDescText(descText);
        String imgs = configService.getByVersion(ConfigKeyEnum.goodsShareNotifyImgs.getKey(), acceptData.getPlatform(),
                Integer.parseInt(acceptData.getVersion()));
        JSONArray array = JSONArray.fromObject(imgs);
        shareInfo.setNotifyPicture(array.size() > 1 ? array.optString(1) : array.optString(0));
        // 2.0.7版本后的提示图片
        imgs = configService.get(ConfigKeyEnum.goodsShareNotifyImgs207.getKey());
        array = JSONArray.fromObject(imgs);
        shareInfo.setNotifyPictureNew(array.size() > 1 ? array.optString(1) : array.optString(0));
        shareInfo.setNotifyDesc(configService.get(ConfigKeyEnum.goodsShareNotifyJD.getKey()));
        // 添加分享记录
        BigDecimal shareRate = hongBaoManageService.getShareRate();
        BigDecimal shareMoney = JDUtil.getGoodsFanLiMoney(jdGoods, shareRate);
        shareInfo.setShareMoney("¥" + shareMoney.toString());
        try {
            ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsDetail(uid, goodsId,
                    Constant.SOURCE_TYPE_JD, false);
            shareInfo.setShareId(shareRecord.getRedisKey());
        } catch (Exception e) {
            try {
                LogHelper.errorDetailInfo(e);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
        String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
        // 设置评论文本选项
        shareInfo.setCommentTextChoiceList(getCommentChoiceList(null, shareInfo.getShareText(), inviteCode,
                JDUtil.getGoodsFanLiMoney(jdGoods, hongBaoManageService.getFanLiRate())));
        shareInfo.setCommentText(shareInfo.getShareText());
        if (VersionUtil.greaterThan_2_0_7(acceptData.getPlatform(), acceptData.getVersion()))
            shareInfo.setRecommendText(jdGoods.getSkuName());
        else
            shareInfo.setRecommendText(shareInfo.getDescText());
        out.print(JsonUtil.loadTrueResult(
                JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create().toJson(shareInfo)));
        // 异步操作
        final JDGoods goods = jdGoods;
        com.yeshi.fanli.util.ThreadUtil.run(new Runnable() {
            @Override
            public void run() {
                // 异步操作 添加分享记录
                UserShareGoodsHistory history = new UserShareGoodsHistory();
                history.setUser(new UserInfo(uid));
                history.setHongbao(shareMoney);
                history.setCreateTime(new Date());
                history.setGoodsType(Constant.SOURCE_TYPE_JD);
                history.setTkCode(null);
                history.setLink(null);
                history.setQuanLink(null);
                history.setGoodsId(goodsId);
                history.setPostPicture(goods.getPicUrl());
                history.setShareImg(jumpLink);
                List<String> imgList = goods.getImageList();
                if (imgList == null) {
                    imgList = new ArrayList<>();
                }
                history.setPictures(JsonUtil.getGson().toJson(imgList));
                shareGoodsService.addShareGoodsHistory(history);
            }
        });
    }
    /**
     * 拼多多分享
     *
     * @param acceptData
     * @param uid
     * @param goodsId
     * @param source
     * @param out
     */
    public void createPDDShare(AcceptData acceptData, Long uid, Long goodsId, String source, boolean needGoods,
            PrintWriter out) {
        PDDGoodsDetail goods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
        if (goods == null) {
            out.print(JsonUtil.loadFalseResult(1, "该商品已下架"));
            return;
        }
        // String url = String.format("http://%s%s?uid=%s&id=%s",
        // configService.getH5Host(),
        // Constant.systemCommonConfig.getShareGoodsPagePathPDD(),
        // AESUtil.encrypt(uid + "", Constant.UIDAESKEY),
        // goodsId + "");
        String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsId, PinDuoDuoApiUtil.PID_SHARE + "", uid + "");
        ShareInfoVO shareInfo = new ShareInfoVO();
        shareInfo.setClickUrl(jumpLink);
        shareInfo.setWxErCode(jumpLink);
        shareInfo.setCommentTexts(new ArrayList<>());
        shareInfo.setRule(configService.get(ConfigKeyEnum.shareRuleLinkPDD.getKey()));
        shareInfo.setPictUrl(goods.getGoodsImageUrl());
        if (needGoods) {
            shareInfo
                    .setGoodsInfo(GoodsDetailVOFactory.convertPDDGoods(goods,
                            new ConfigParamsDTO(hongBaoManageService.getFanLiRate(),
                                    hongBaoManageService.getShareRate(), Constant.MAX_REWARD_RATE,
                                    hongBaoManageService.getVIPFanLiRate())));
        }
        String template = "";
        boolean hasCoupon = false;
        ShareGoodsTextTemplate textTemplate = shareGoodsTextTemplateService.getShareGoodsTextTemplate(uid);
        if (goods.getHasCoupon() == null || !goods.getHasCoupon()) {
            if (textTemplate != null)
                template = textTemplate.getSharePDDTextTemplate();
            if (StringUtil.isNullOrEmpty(template))
                template = configService.get(ConfigKeyEnum.goodsShareTextNocouponPDD.getKey());
        } else {
            hasCoupon = true;
            if (textTemplate != null)
                template = textTemplate.getSharePDDTextTemplateCoupon();
            if (StringUtil.isNullOrEmpty(template))
                template = configService.get(ConfigKeyEnum.goodsShareTextCouponPDD.getKey());
        }
        // 创建口令
        String token = PinDuoDuoApiUtil.createGenerate(goodsId);
        // 生成分享内容
        String shareText = shareGoodsTextTemplateService.createContentByTemplatePDD(template, uid, goods, jumpLink,
                hasCoupon, token);
        shareInfo.setShareText(shareText);
        String descText = shareText.replace(goods.getGoodsName(), "").trim();
        if (descText.startsWith("\\r\\n")) {
            descText = descText.substring(0);
        }
        shareInfo.setDescText(descText);
        //
        String imgs = configService.getByVersion(ConfigKeyEnum.goodsShareNotifyImgs.getKey(), acceptData.getPlatform(),
                Integer.parseInt(acceptData.getVersion()));
        JSONArray array = JSONArray.fromObject(imgs);
        shareInfo.setNotifyPicture(array.size() > 1 ? array.optString(1) : array.optString(0));
        // 2.0.7版本后的提示图片
        imgs = configService.get(ConfigKeyEnum.goodsShareNotifyImgs207.getKey());
        array = JSONArray.fromObject(imgs);
        shareInfo.setNotifyPictureNew(array.size() > 1 ? array.optString(1) : array.optString(0));
        shareInfo.setNotifyDesc(configService.get(ConfigKeyEnum.goodsShareNotifyPDD.getKey()));
        // 添加分享记录
        BigDecimal shareRate = hongBaoManageService.getShareRate();
        BigDecimal shareMoney = PinDuoDuoUtil.getGoodsFanLiMoney(goods, shareRate);
        shareInfo.setShareMoney("¥" + shareMoney.toString());
        try {
            ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsDetail(uid, goodsId,
                    Constant.SOURCE_TYPE_PDD, false);
            shareInfo.setShareId(shareRecord.getRedisKey());
        } catch (Exception e) {
            try {
                LogHelper.errorDetailInfo(e);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
        String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
        // 设置评论文本选项
        shareInfo.setCommentTextChoiceList(getCommentChoiceList(null, shareInfo.getShareText(), inviteCode,
                PinDuoDuoUtil.getGoodsFanLiMoney(goods, hongBaoManageService.getFanLiRate())));
        shareInfo.setCommentText(shareInfo.getShareText());
        if (VersionUtil.greaterThan_2_0_7(acceptData.getPlatform(), acceptData.getVersion()))
            shareInfo.setRecommendText(goods.getGoodsName());
        else
            shareInfo.setRecommendText(shareInfo.getDescText());
        out.print(JsonUtil.loadTrueResult(
                JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create().toJson(shareInfo)));
        // 异步操作
        com.yeshi.fanli.util.ThreadUtil.run(new Runnable() {
            @Override
            public void run() {
                // 异步操作 添加分享记录
                UserShareGoodsHistory history = new UserShareGoodsHistory();
                history.setUser(new UserInfo(uid));
                history.setHongbao(shareMoney);
                history.setCreateTime(new Date());
                history.setGoodsType(Constant.SOURCE_TYPE_PDD);
                history.setTkCode(null);
                history.setLink(null);
                history.setQuanLink(null);
                history.setGoodsId(goodsId);
                history.setPostPicture(goods.getGoodsImageUrl());
                history.setShareImg(jumpLink);
                List<String> imgList = null;
                String[] goodsGalleryUrls = goods.getGoodsGalleryUrls();
                if (goodsGalleryUrls != null) {
                    imgList = Arrays.asList(goodsGalleryUrls);
                }
                if (imgList == null) {
                    imgList = new ArrayList<>();
                }
                history.setPictures(JsonUtil.getGson().toJson(imgList));
                shareGoodsService.addShareGoodsHistory(history);
            }
        });
    }
    /**
     * 预览分享模板
     *
     * @param acceptData
     * @param uid
     * @param template
     * @param goodsId
     * @param hasCoupon
     * @param out
     */
    @RequestMapping(value = "viewShareTextTemplate", method = RequestMethod.POST)
    public void viewShareTextTemplate(AcceptData acceptData, Long uid, String template, Integer goodsType, Long goodsId,
            Long tljId, Boolean hasCoupon, PrintWriter out) {
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
            return;
        }
        if (goodsId == null) {
            out.print(JsonUtil.loadFalseResult(3, "商品ID不能为空"));
            return;
        }
        if (goodsType == null || goodsType > 3 || goodsType < 1) {
            out.print(JsonUtil.loadFalseResult(3, "平台类型不正确"));
            return;
        }
        if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            createTaoBaoViewText(goodsType, uid, template, goodsId, tljId, hasCoupon, out);
            return;
        }
        if (goodsType == Constant.SOURCE_TYPE_JD) {
            createJDViewText(goodsType, uid, template, goodsId, hasCoupon, out);
            return;
        }
        if (goodsType == Constant.SOURCE_TYPE_PDD) {
            createPDDViewText(goodsType, uid, template, goodsId, hasCoupon, out);
            return;
        }
    }
    /**
     * 创建淘宝分享模板
     *
     * @param uid
     * @param template
     * @param goodsType
     * @param goodsId
     * @param tljId
     * @param hasCoupon
     * @param out
     */
    public void createTaoBaoViewText(Integer goodsType, Long uid, String template, Long goodsId, Long tljId,
            Boolean hasCoupon, PrintWriter out) {
        TaoBaoGoodsBrief goods = taoBaoGoodsCacheUtil.getCommonTaoBaoGoodsInfo(goodsId);
        if (goods == null)
            try {
                goods = redisManager.getTaoBaoGoodsBrief(goodsId);
            } catch (TaobaoGoodsDownException e) {
                goods = null;
            }
        if (goods == null) {
            out.print(JsonUtil.loadFalseResult(4, "商品已下架"));
            return;
        }
        if (StringUtil.isNullOrEmpty(template)) {
            template = getShareTemplate(goodsType, uid, hasCoupon, tljId);
        }
        // 校验券模板是否正确
        if (hasCoupon) {
            // 有券商品
            if (tljId != null) {
                try {
                    shareGoodsTextTemplateService.isTaoLiJinTemplateRight(template);
                } catch (ShareGoodsTextTemplateException e) {
                    out.print(JsonUtil.loadFalseResult(5, e.getMsg()));
                    return;
                }
            } else {
                try {
                    shareGoodsTextTemplateService.isCouponTemplateRight(template);
                } catch (ShareGoodsTextTemplateException e) {
                    out.print(JsonUtil.loadFalseResult(5, e.getMsg()));
                    return;
                }
            }
        } else {
            // 普通商品
            try {
                shareGoodsTextTemplateService.isCommonTemplateRight(template);
            } catch (ShareGoodsTextTemplateException e) {
                out.print(JsonUtil.loadFalseResult(5, e.getMsg()));
                return;
            }
        }
        String url = null;
        if (tljId != null) {
            UserTaoLiJinRecord userTaoLiJinRecord = userTaoLiJinRecordService.selectByPrimaryKey(tljId);
            if (userTaoLiJinRecord == null) {
                out.print(JsonUtil.loadFalseResult(5, "淘礼金领取链接不存在"));
                return;
            }
            url = userTaoLiJinRecord.getSendUrl();
        } else {
            url = String.format("http://%s%s?uid=%s&id=%s&appType=flq", configService.getH5Host(),
                    Constant.systemCommonConfig.getShareGoodsPagePath(), AESUtil.encrypt(uid + "", Constant.UIDAESKEY),
                    goods.getAuctionId() + "");
        }
        String shortLink = HttpUtil.getShortLink(url);
        // 查询是否有分享
        UserShareGoodsHistory userShareHistory = shareGoodsService.getShareGoodsHistory(uid, goods.getAuctionId());
        String token = "";
        if (userShareHistory != null) {
            token = userShareHistory.getTkCode();
        }
        if (StringUtil.isNullOrEmpty(token)) {
            TaoKeAppInfo app = new TaoKeAppInfo();
            app.setAdzoneId(TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT.split("_")[3]);
            app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
            app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
            app.setPid(TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT);
            TaoBaoGoodsBrief goodsLink = TaoKeApiUtil.specialConvertCoupon(goods.getAuctionId(), app);
            if (goodsLink != null)
                token = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(),
                        StringUtil.isNullOrEmpty(goodsLink.getCouponLink()) ? goodsLink.getAuctionUrl()
                                : goodsLink.getCouponLink());
        }
        String content = shareGoodsTextTemplateService.createContentByTemplate(template, uid, goods, token, shortLink,
                hasCoupon, tljId);
        JSONObject data = new JSONObject();
        data.put("content", content);
        out.print(JsonUtil.loadTrueResult(data));
    }
    /**
     * 创建京东分享模板
     *
     * @param uid
     * @param template
     * @param goodsType
     * @param goodsId
     * @param tljId
     * @param hasCoupon
     * @param out
     */
    public void createJDViewText(Integer goodsType, Long uid, String template, Long goodsId, Boolean hasCoupon,
            PrintWriter out) {
        JDGoods goods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
        if (goods == null) {
            out.print(JsonUtil.loadFalseResult(4, "商品已下架"));
            return;
        }
        if (StringUtil.isNullOrEmpty(template)) {
            template = getShareTemplate(goodsType, uid, hasCoupon, null);
        }
        // 校验券模板是否正确
        if (hasCoupon) {
            // 有券商品
            try {
                shareGoodsTextTemplateService.isCouponTemplateRightJD(template);
            } catch (ShareGoodsTextTemplateException e) {
                out.print(JsonUtil.loadFalseResult(5, e.getMsg()));
                return;
            }
        } else {
            // 普通商品
            try {
                shareGoodsTextTemplateService.isCommonTemplateRightJD(template);
            } catch (ShareGoodsTextTemplateException e) {
                out.print(JsonUtil.loadFalseResult(5, e.getMsg()));
                return;
            }
        }
        String couponUrl = null;
        JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(goods);
        if (couponInfo != null) {
            couponUrl = couponInfo.getLink();
        }
        String materialId = "https://item.jd.com/" + goodsId + ".html";
        String shortLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "",
                uid + "");
        String content = shareGoodsTextTemplateService.createContentByTemplateJD(template, uid, goods, shortLink,
                hasCoupon);
        JSONObject data = new JSONObject();
        data.put("content", content);
        out.print(JsonUtil.loadTrueResult(data));
    }
    /**
     * 创建拼多多分享模板
     *
     * @param uid
     * @param template
     * @param goodsType
     * @param goodsId
     * @param tljId
     * @param hasCoupon
     * @param out
     */
    public void createPDDViewText(Integer goodsType, Long uid, String template, Long goodsId, Boolean hasCoupon,
            PrintWriter out) {
        PDDGoodsDetail goods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
        if (goods == null) {
            out.print(JsonUtil.loadFalseResult(4, "商品已下架"));
            return;
        }
        if (StringUtil.isNullOrEmpty(template)) {
            template = getShareTemplate(goodsType, uid, hasCoupon, null);
        }
        // 校验券模板是否正确
        if (hasCoupon) {
            // 有券商品
            try {
                shareGoodsTextTemplateService.isCouponTemplateRightPDD(template);
            } catch (ShareGoodsTextTemplateException e) {
                out.print(JsonUtil.loadFalseResult(5, e.getMsg()));
                return;
            }
        } else {
            // 普通商品
            try {
                shareGoodsTextTemplateService.isCommonTemplateRightPDD(template);
            } catch (ShareGoodsTextTemplateException e) {
                out.print(JsonUtil.loadFalseResult(5, e.getMsg()));
                return;
            }
        }
        // // 创建h5连接
        // String url = String.format("http://%s%s?uid=%s&id=%s&appType=flq",
        // configService.getH5Host(),
        // Constant.systemCommonConfig.getShareGoodsPagePath(),
        // AESUtil.encrypt(uid + "", Constant.UIDAESKEY),
        // goodsId + "");
        // String shortLink = HttpUtil.getShortLink(url);
        String shortLink = PinDuoDuoApiUtil.getPromotionUrl(goodsId, PinDuoDuoApiUtil.PID_SHARE + "", uid + "");
        // 创建口令
        String token = PinDuoDuoApiUtil.createGenerate(goodsId);
        // 生成分享内容
        String content = shareGoodsTextTemplateService.createContentByTemplatePDD(template, uid, goods, shortLink,
                hasCoupon, token);
        JSONObject data = new JSONObject();
        data.put("content", content);
        out.print(JsonUtil.loadTrueResult(data));
    }
    /**
     * 获取分享模板
     *
     * @param uid
     * @param hasCoupon
     * @param tljId
     * @return
     */
    private String getShareTemplate(int goodsType, Long uid, boolean hasCoupon, Long tljId) {
        String template = "";
        if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            if (hasCoupon) {
                if (tljId != null) {
                    template = shareGoodsTextTemplateService.getTaoLiJinTemplate(uid);
                    if (StringUtil.isNullOrEmpty(template))
                        template = configTaoLiJinService.getValueByKey("goods_share_text", new Date());
                } else {
                    template = shareGoodsTextTemplateService.geteCouponTemplate(uid);
                    if (StringUtil.isNullOrEmpty(template))
                        template = configService.get(ConfigKeyEnum.goodsShareTextCoupon.getKey());
                }
            } else {
                template = shareGoodsTextTemplateService.getCommonTemplate(uid);
                if (StringUtil.isNullOrEmpty(template))
                    template = configService.get(ConfigKeyEnum.goodsShareTextNoCoupon.getKey());
            }
        } else if (goodsType == Constant.SOURCE_TYPE_JD) {
            ShareGoodsTextTemplate textTemplate = shareGoodsTextTemplateService.getShareGoodsTextTemplate(uid);
            if (hasCoupon) {
                if (textTemplate != null) {
                    template = textTemplate.getShareJDTextTemplateCoupon();
                }
                if (StringUtil.isNullOrEmpty(template)) {
                    template = configService.get(ConfigKeyEnum.goodsShareTextCouponJD.getKey());
                }
            } else {
                if (textTemplate != null) {
                    template = textTemplate.getShareJDTextTemplate();
                }
                if (StringUtil.isNullOrEmpty(template)) {
                    template = configService.get(ConfigKeyEnum.goodsShareTextNoCouponJD.getKey());
                }
            }
        } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            ShareGoodsTextTemplate textTemplate = shareGoodsTextTemplateService.getShareGoodsTextTemplate(uid);
            if (hasCoupon) {
                if (textTemplate != null) {
                    template = textTemplate.getSharePDDTextTemplateCoupon();
                }
                if (StringUtil.isNullOrEmpty(template)) {
                    template = configService.get(ConfigKeyEnum.goodsShareTextCouponPDD.getKey());
                }
            } else {
                if (textTemplate != null) {
                    template = textTemplate.getSharePDDTextTemplate();
                }
                if (StringUtil.isNullOrEmpty(template)) {
                    template = configService.get(ConfigKeyEnum.goodsShareTextNocouponPDD.getKey());
                }
            }
        }
        return template;
    }
    /**
     * 获取分享模板
     *
     * @param acceptData
     * @param uid
     * @param hasCoupon
     * @param out
     */
    @RequestMapping(value = "getShareTextTemplate", method = RequestMethod.POST)
    public void getShareTextTemplate(AcceptData acceptData, Integer goodsType, Long uid, Long tljId, Boolean hasCoupon,
            PrintWriter out) {
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
            return;
        }
        if (hasCoupon == null) {
            out.print(JsonUtil.loadFalseResult(1, "是否有券字段为空"));
            return;
        }
        JSONObject data = new JSONObject();
        data.put("template", getShareTemplate(goodsType, uid, hasCoupon, tljId));
        out.print(JsonUtil.loadTrueResult(data));
    }
    /**
     * 获取分享模板编辑规则
     *
     * @param acceptData
     * @param out
     */
    @RequestMapping(value = "getShareTextTemplateRules", method = RequestMethod.POST)
    public void getShareTextTemplateRules(AcceptData acceptData, Integer goodsType, Long tljId, PrintWriter out) {
        if (goodsType == null || goodsType > 3 || goodsType < 1) {
            out.print(JsonUtil.loadFalseResult(3, "平台类型不正确"));
            return;
        }
        if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            if (tljId != null) {
                out.print(
                        JsonUtil.loadTrueResult(configTaoLiJinService.getValueByKey("share_goods_rules", new Date())));
            } else {
                out.print(JsonUtil.loadTrueResult(configService.get(ConfigKeyEnum.shareGoodsTemplateRules.getKey())));
            }
        } else if (goodsType == Constant.SOURCE_TYPE_JD) {
            out.print(JsonUtil.loadTrueResult(configService.get(ConfigKeyEnum.shareGoodsTemplateRulesJD.getKey())));
        } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            out.print(JsonUtil.loadTrueResult(configService.get(ConfigKeyEnum.shareGoodsTemplateRulesPDD.getKey())));
        }
    }
    /**
     * 保存模板
     *
     * @param acceptData
     * @param uid
     * @param hasCoupon
     * @param template
     * @param out
     */
    @RequestMapping(value = "saveShareTextTemplate", method = RequestMethod.POST)
    public void saveShareTextTemplate(AcceptData acceptData, Integer goodsType, Long uid, Long tljId, Boolean hasCoupon,
            String template, PrintWriter out) {
        if (StringUtil.isNullOrEmpty(template)) {
            out.print(JsonUtil.loadFalseResult(1, "分享模板为空"));
            return;
        }
        if (goodsType == null || goodsType > 3 || goodsType < 1) {
            out.print(JsonUtil.loadFalseResult(3, "平台类型不正确"));
            return;
        }
        try {
            if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
                // 校验券模板是否正确
                if (hasCoupon) {
                    // 有券商品
                    if (tljId != null) {
                        shareGoodsTextTemplateService.isTaoLiJinTemplateRight(template);
                        shareGoodsTextTemplateService.saveTaoLiJinTemplate(uid, template);
                    } else {
                        shareGoodsTextTemplateService.isCouponTemplateRight(template);
                        shareGoodsTextTemplateService.saveCouponTemplate(uid, template);
                    }
                } else {
                    // 普通商品
                    shareGoodsTextTemplateService.isCommonTemplateRight(template);
                    shareGoodsTextTemplateService.saveCommonTemplate(uid, template);
                }
            } else if (goodsType == Constant.SOURCE_TYPE_JD) {
                if (hasCoupon) {
                    shareGoodsTextTemplateService.isCouponTemplateRightJD(template);
                    shareGoodsTextTemplateService.saveCouponTemplateJD(uid, template);
                } else {
                    shareGoodsTextTemplateService.isCommonTemplateRightJD(template);
                    shareGoodsTextTemplateService.saveCommonTemplateJD(uid, template);
                    out.print(JsonUtil.loadTrueResult(""));
                }
            } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
                if (hasCoupon) {
                    shareGoodsTextTemplateService.isCouponTemplateRightPDD(template);
                    shareGoodsTextTemplateService.saveCouponTemplatePDD(uid, template);
                } else {
                    shareGoodsTextTemplateService.isCommonTemplateRightPDD(template);
                    shareGoodsTextTemplateService.saveCommonTemplatePDD(uid, template);
                    out.print(JsonUtil.loadTrueResult(""));
                }
            }
        } catch (ShareGoodsTextTemplateException e) {
            out.print(JsonUtil.loadFalseResult(5, e.getMsg()));
            return;
        }
        out.print(JsonUtil.loadTrueResult(""));
    }
    /**
     * 还原模板
     *
     * @param acceptData
     * @param uid
     * @param hasCoupon
     *            -是否有券
     * @param out
     */
    @RequestMapping(value = "resetShareTextTemplate", method = RequestMethod.POST)
    public void resetShareTextTemplate(AcceptData acceptData, Long uid, Long goodsId, Long tljId, Boolean hasCoupon,
            Integer goodsType, PrintWriter out) {
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
            return;
        }
        if (goodsType == null || goodsType > 3 || goodsType < 1) {
            out.print(JsonUtil.loadFalseResult(3, "平台类型不正确"));
            return;
        }
        if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            if (hasCoupon) {
                if (tljId != null) {
                    shareGoodsTextTemplateService.resetTaoLijinTemplate(uid);
                } else {
                    shareGoodsTextTemplateService.resetCouponTemplate(uid);
                }
            } else {
                shareGoodsTextTemplateService.resetCommonTemplate(uid);
            }
        } else if (goodsType == Constant.SOURCE_TYPE_JD) {
            if (hasCoupon) {
                shareGoodsTextTemplateService.resetCouponTemplateJD(uid);
            } else {
                shareGoodsTextTemplateService.resetCommonTemplateJD(uid);
            }
        } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            if (hasCoupon) {
                shareGoodsTextTemplateService.resetCouponTemplatePDD(uid);
            } else {
                shareGoodsTextTemplateService.resetCommonTemplatePDD(uid);
            }
        }
        if (goodsId != null) {
            viewShareTextTemplate(acceptData, uid, null, goodsType, goodsId, tljId, hasCoupon, out);
            return;
        }
        out.print(JsonUtil.loadTrueResult(""));
    }
    /**
     * 获取分享记录中的商品 分享信息
     *
     * @param acceptData
     * @param recordId
     * @param out
     */
    @RequestMapping(value = "getShareGoods")
    public void getShareGoods(AcceptData acceptData, Long recordId, PrintWriter out) {
        if (recordId == null) {
            out.print(JsonUtil.loadFalseResult("参数不正确"));
            return;
        }
        JSONArray array = new JSONArray();
        JSONObject data = new JSONObject();
        List<UserShareGoodsGroup> list = userShareGoodsGroupService.listByRecordId(recordId);
        if (list == null || list.size() == 0) {
            data.put("title", "分享商品");
            data.put("count", 0);
            data.put("result_list", array);
            out.print(JsonUtil.loadTrueResult(data));
            return;
        }
        // API网络接口验证是否在售
        List<TaoBaoGoodsBrief> listTaoKeGoods = null;
        List<Long> listGid = new ArrayList<Long>();
        for (UserShareGoodsGroup goodsGroup : list) {
            CommonGoods commonGoods = goodsGroup.getCommonGoods();
            Integer goodsType = commonGoods.getGoodsType();
            if (commonGoods == null || goodsType == null || goodsType != Constant.SOURCE_TYPE_TAOBAO) {
                continue;
            }
            listGid.add(commonGoods.getGoodsId());
        }
        if (listGid.size() > 0) {
            try {
                listTaoKeGoods = TaoKeApiUtil.getBatchGoodsInfo(listGid);
            } catch (TaoKeApiException e) {
                e.printStackTrace();
            } catch (TaobaoGoodsDownException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate(acceptData.getPlatform(),
                acceptData.getVersion());
        Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
                .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
        for (UserShareGoodsGroup goodsGroup : list) {
            CommonGoods commonGoods = goodsGroup.getCommonGoods();
            if (commonGoods == null) {
                continue;
            }
            // 验证淘宝商品是否在售
            Integer goodsType = commonGoods.getGoodsType();
            if (listTaoKeGoods != null && listTaoKeGoods.size() > 0 && goodsType != null
                    && goodsType == Constant.SOURCE_TYPE_TAOBAO) {
                int state = 1; // 默认停售
                Long goodsId = commonGoods.getGoodsId();
                for (TaoBaoGoodsBrief taoKeGoods : listTaoKeGoods) {
                    Long auctionId = taoKeGoods.getAuctionId();
                    if (goodsId == auctionId || goodsId.equals(auctionId)) {
                        state = 0; // 在售
                        break;
                    }
                }
                commonGoods.setState(state);
            }
            // 今日浏览记录处理
            Date date = new Date();
            Date browseTime = goodsGroup.getBrowseTime();
            if (!DateUtil.isSameDay(browseTime, date)) {
                goodsGroup.setTodayBrowse(0); // 不是同一天浏览记录设置0
            }
            JSONObject dataObject = new JSONObject();
            dataObject.put("todayBrowse", goodsGroup.getTodayBrowse());
            dataObject.put("totalBrowse", goodsGroup.getTotalBrowse());
            dataObject.put("totalOrder", goodsGroup.getTotalOrder());
            dataObject.put("totalMoney", "¥" + goodsGroup.getTotalMoney());
            GoodsDetailVO detailVO = GoodsDetailVOFactory.convertCommonGoods(commonGoods, paramsDTO);
            detailVO.setId(commonGoods.getId());
            dataObject.put("goods", gson.toJson(detailVO));
            array.add(dataObject);
        }
        String title = "";
        UserShareGoodsRecord userShareGoodsRecord = userShareGoodsRecordService.selectByPrimaryKey(recordId);
        if (userShareGoodsRecord != null) {
            title = userShareGoodsRecord.getTitle();
        }
        data.put("title", title);
        data.put("count", list.size());
        data.put("result_list", array);
        out.print(JsonUtil.loadTrueResult(data));
    }
}
package com.yeshi.fanli.controller.client.v2;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.yeshi.utils.BigDecimalUtil;
import org.yeshi.utils.DateUtil;
import org.yeshi.utils.HttpUtil;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.taobao.TbImgUtil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.yeshi.fanli.dto.ConfigParamsDTO;
import com.yeshi.fanli.dto.jd.JDCouponInfo;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.share.ShareGoodsRecordDTO;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsGroup;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsHistory;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsRecord;
import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinRecord;
import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.goods.ShareGoodsTextTemplate;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoBaoLink;
import com.yeshi.fanli.entity.taobao.TaoKeAppInfo;
import com.yeshi.fanli.exception.goods.ShareGoodsTextTemplateException;
import com.yeshi.fanli.exception.share.ShareGoodsException;
import com.yeshi.fanli.exception.taobao.TaoKeApiException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.exception.tlj.UserTaoLiJinRecordException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.config.SystemClientParamsService;
import com.yeshi.fanli.service.inter.dynamic.DynamicInfoService;
import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
import com.yeshi.fanli.service.inter.goods.ShareGoodsService;
import com.yeshi.fanli.service.inter.goods.ShareGoodsTextTemplateService;
import com.yeshi.fanli.service.inter.monitor.BusinessEmergent110Service;
import com.yeshi.fanli.service.inter.monitor.MonitorService;
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.SpreadUserImgService;
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.AESUtil;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TaoBaoConstant;
import com.yeshi.fanli.util.VersionUtil;
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
import com.yeshi.fanli.util.cache.TaoBaoGoodsCacheUtil;
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
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;
import com.yeshi.fanli.util.taobao.TaoLiJinUtil;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
import com.yeshi.fanli.vo.goods.ShareGoodsCommentChoiceInfo;
import com.yeshi.fanli.vo.goods.ShareInfoVO;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
@Controller
@RequestMapping("api/v2/share")
public class ShareControllerV2 {
    @Resource(name = "taskExecutor")
    private TaskExecutor executor;
    @Resource
    private ShareGoodsService shareGoodsService;
    @Resource
    private ConfigService configService;
    @Resource
    private HongBaoManageService hongBaoManageService;
    @Resource
    private MonitorService monitorService;
    @Resource
    private UserShareGoodsRecordService userShareGoodsRecordService;
    @Resource
    private UserShareGoodsGroupService userShareGoodsGroupService;
    @Resource
    private CommonGoodsService commonGoodsService;
    @Resource
    private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
    @Resource
    private UserInfoService userInfoService;
    @Resource
    private TaoBaoGoodsCacheUtil taoBaoGoodsCacheUtil;
    @Resource
    private JDGoodsCacheUtil jdGoodsCacheUtil;
    @Resource
    private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
    @Resource
    private RedisManager redisManager;
    @Resource
    private ShareGoodsTextTemplateService shareGoodsTextTemplateService;
    @Resource
    private SystemClientParamsService systemClientParamsService;
    @Resource
    private DynamicInfoService dynamicInfoService;
    @Resource
    private UserInfoExtraService userInfoExtraService;
    @Resource
    private SpreadUserImgService spreadUserImgService;
    @Resource
    private BusinessEmergent110Service businessEmergent110Service;
    @Resource
    private ConfigTaoLiJinService configTaoLiJinService;
    @Resource
    private UserTaoLiJinRecordService userTaoLiJinRecordService;
    private List<ShareGoodsCommentChoiceInfo> getCommentChoiceList(String token, String link, String inviteCode,
            BigDecimal fanliMoney) {
        List<ShareGoodsCommentChoiceInfo> list = new ArrayList<>();
        if (!StringUtil.isNullOrEmpty(token))
            list.add(
                    new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_TOKEN, "淘口令", token, true, false));
        if (!StringUtil.isNullOrEmpty(link)) {
            list.add(new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_LINK, "链接", link, true, false));
        }
        if (!StringUtil.isNullOrEmpty(inviteCode)) {
            list.add(new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_INVITE_CODE, "邀请码",
                    "邀请码:" + inviteCode, false, true));
        }
        list.add(new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_DOWNLOAD_LINK, "下载链接",
                "下载链接:" + Constant.YINGYONGBAO_LINK, false, true));
        list.add(new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_FANLI_MONEY, "返利金额",
                "返利金额:¥ " + fanliMoney, false, true));
        return list;
    }
    /**
     *
     * @param acceptData
     * @param uid
     *            -用户ID
     * @param goodsId-商品ID
     * @param source
     * @param totalNum
     * @param goodsType
     * @param needGoods
     *            -是否需要商品信息
     * @param request
     * @param out
     */
    @RequestMapping(value = "createShareInfo")
    public void createShareInfo(AcceptData acceptData, Long uid, Long goodsId, String source, Integer totalNum,
            Integer goodsType, Boolean needGoods, HttpServletRequest request, PrintWriter out) {
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
            return;
        }
        if (needGoods == null)
            needGoods = false;
        try {
            // 日志记录
            String info = String.format("type=share&uid=%s&goodsId=%s&source=%s&goodsType=%s", uid, goodsId, source,
                    goodsType);
            LogHelper.orderInfo(info);
        } catch (Exception e) {
        }
        UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
        if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
            out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
            return;
        }
        if (goodsId == null || goodsId <= 0) {
            out.print(JsonUtil.loadFalseResult(2, "商品ID不能为空"));
            return;
        }
        // 淘宝
        if (goodsType == null || goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            createTaoBaoShare(acceptData, uid, goodsId, totalNum, source, needGoods, request, out);
            return;
        }
        // 京东
        if (goodsType == Constant.SOURCE_TYPE_JD) {
            createJDShare(acceptData, uid, goodsId, source, needGoods, out);
            return;
        }
        // 拼多多
        if (goodsType == Constant.SOURCE_TYPE_PDD) {
            createPDDShare(acceptData, uid, goodsId, source, needGoods, out);
            return;
        }
    }
    public static String getERCodeContent(String template, TaoBaoGoodsBrief goods, String token) {
        // return template.replace("[淘口令]", token);
        String commentText = template.replace("[原价]", goods.getZkPrice().toString());
        commentText = commentText.replace("[口令]", token);
        if (StringUtil.isNullOrEmpty(goods.getCouponInfo())) {
            commentText = commentText.replace("领券抢购", "抢购");
            commentText = commentText.replace("【券后价】[券后价]元", "");
        } else {
            commentText = commentText.replace("[券后价]", TaoBaoUtil.getAfterUseCouplePrice(goods) + "");
        }
        return commentText;
    }
    /**
     * 创建淘宝分享信息
     *
     * @param acceptData
     * @param uid
     * @param goodsId
     * @param totalNum
     * @param source
     * @param request
     * @param out
     */
    public void createTaoBaoShare(AcceptData acceptData, Long uid, Long goodsId, Integer totalNum, String source,
            Boolean needGoods, HttpServletRequest request, PrintWriter out) {
        if (needGoods == null)
            needGoods = false;
        UserExtraTaoBaoInfo extraInfo = userExtraTaoBaoInfoService.getByUid(uid);
        UserInfoExtra userExtraInfo = userInfoExtraService.getUserInfoExtra(uid);
        String inviteCode = null;
        if (userExtraInfo != null) {
            if (!StringUtil.isNullOrEmpty(userExtraInfo.getInviteCodeVip())) {
                inviteCode = userExtraInfo.getInviteCodeVip();
            } else {
                inviteCode = userExtraInfo.getInviteCode();
            }
        }
        String relationId = null;
        if (extraInfo != null && extraInfo.getRelationId() != null && extraInfo.getRelationValid() != null
                && extraInfo.getRelationValid() == true)
            relationId = extraInfo.getRelationId();
        if (StringUtil.isNullOrEmpty(relationId)) {
            out.print(JsonUtil.loadFalseResult(3, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
            return;
        }
        // 淘礼金创建分享
        if (source != null && "taolijin".equals(source)) {// 淘礼金分享创建
            createTaoLijin(uid, goodsId, totalNum, relationId, request, out);
            return;
        } else {// 普通分享创建
            createCommonTaoBaoShare(acceptData.getPlatform(), acceptData.getVersion(), goodsId, inviteCode, uid,
                    needGoods, relationId, out);
            return;
        }
    }
    /**
     * 淘礼金创建分享
     *
     * @param uid
     * @param auctionId
     * @param totalNum
     * @param relationId
     * @param request
     * @param out
     */
    public void createTaoLijin(Long uid, Long auctionId, int totalNum, String relationId, HttpServletRequest request,
            PrintWriter out) {
        try {
            TaoBaoGoodsBrief goods = null;
            try {
                goods = TaoKeApiUtil.searchGoodsDetail(auctionId);
            } catch (TaobaoGoodsDownException e2) {
                e2.printStackTrace();
            }
            if (goods == null) {
                out.print(JsonUtil.loadFalseResult("商品已下架"));
                return;
            }
            if (goods.getTkRate() == null || goods.getTkRate().compareTo(new BigDecimal(0)) <= 0) {
                // TaoKeApiUtil.specialConvertCoupon(auctionId, app);
            }
            // 计算推广红包
            String warningRate = configTaoLiJinService.getValueByKey("warning_value", new Date());
            LogHelper.error("推广红包比例:" + warningRate);
            BigDecimal spreadMoney = TaoLiJinUtil.getSpreadMoney(warningRate, goods);
            LogHelper.error("推广红包:" + spreadMoney);
            // 推广红包 不能小于1
            if (spreadMoney.compareTo(new BigDecimal(1.1)) < 0) {
                out.print(JsonUtil.loadFalseResult(1, "该商品淘礼金不足"));
                return;
            }
            ShareInfoVO shareInfo = new ShareInfoVO();
            shareInfo.setSpreadMoney(" ¥" + spreadMoney.toString());
            String taoLiJinLink = null;
            Long tljId = null;
            try {
                UserTaoLiJinRecord record = userTaoLiJinRecordService.createShareTaoLiJin(uid, totalNum, goods);
                tljId = record.getId();
                taoLiJinLink = record.getSendUrl();
                shareInfo.setTljId(tljId.toString());
                shareInfo.setSurplusMoney(record.getSurplusMoney().toString());
            } catch (UserTaoLiJinRecordException e) {
                out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
                return;
            }
            String url = String.format("http://%s%s?uid=%s&id=%s&appType=flq&tid=%s", configService.getH5Host(),
                    Constant.systemCommonConfig.getShareGoodsPagePath(), AESUtil.encrypt(uid + "", Constant.UIDAESKEY),
                    auctionId + "", AESUtil.encrypt(tljId + "", Constant.UIDAESKEY));
            String shortLink = HttpUtil.getShortLink(url);
            if (!StringUtil.isNullOrEmpty(shortLink)) {
                url = shortLink;
            }
            shareInfo.setClickUrl(url);
            TaoBaoLink taoBaoLink = new TaoBaoLink();
            taoBaoLink.setCouponLink(taoLiJinLink);
            taoBaoLink.setClickUrl(taoLiJinLink);
            // 创建淘口令
            if (!StringUtil.isNullOrEmpty(taoLiJinLink)) {// 通过立即推广方式获取淘口令成功
                String quanToken = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), taoLiJinLink);
                if (!StringUtil.isNullOrEmpty(quanToken)) {
                    taoBaoLink.setTaoToken(quanToken);
                }
            }
            shareInfo.setToken(TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
            shareInfo.setRule(configService.get(ConfigKeyEnum.shareSingleGoodsRule.getKey()));
            shareInfo.setPictUrl(TbImgUtil.getTBSizeImg(goods.getPictUrl(), 500));
            // 无券
            String shopType = goods.getUserType() == 0 ? TaoBaoConstant.SHARE_PRICE_TAOBAO
                    : TaoBaoConstant.SHARE_PRICE_TM;
            String shareText = "";
            if (StringUtil.isNullOrEmpty(goods.getCouponInfo())) {
                String text = shareGoodsTextTemplateService.getCommonTemplate(uid);
                if (StringUtil.isNullOrEmpty(text))
                    text = configService.get(ConfigKeyEnum.goodsShareTextNoCoupon.getKey());
                shareText = text.replace("{标题}", goods.getTitle()).replace("{商品原价}",
                        MoneyBigDecimalUtil.getWithNoZera(goods.getZkPrice()) + "");
            } else// 有券
            {
                String text = shareGoodsTextTemplateService.getTaoLiJinTemplate(uid);
                if (StringUtil.isNullOrEmpty(text))
                    text = configTaoLiJinService.getValueByKey("goods_share_text", new Date());
                shareText = text.replace("{标题}", goods.getTitle())
                        .replace("{商品原价}", MoneyBigDecimalUtil.getWithNoZera(goods.getZkPrice()) + "")
                        .replace("{优惠券面额}", MoneyBigDecimalUtil.getWithNoZera(goods.getCouponAmount()).toString())
                        .replace("{淘礼金面额}", MoneyBigDecimalUtil.getWithNoZera(spreadMoney).toString())
                        .replace("{优惠券价}", TaoBaoUtil.getAfterUseCouplePrice(goods) + "");
            }
            shareText = shareText.replace("{店铺类型}", shopType)
                    .replace("{月销量}", TaoBaoUtil.getSaleCount(goods.getBiz30day())).replace("{领券短链}", shortLink)
                    .replace("{淘口令}", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
            shareInfo.setShareText(shareText);
            String descText = shareText.replace(goods.getTitle(), "").trim();
            if (descText.startsWith("\\r\\n"))
                descText = descText.substring(0);
            shareInfo.setDescText(descText);
            String imgs = configService.get(ConfigKeyEnum.goodsShareNotifyImgs.getKey());
            JSONArray array = JSONArray.fromObject(imgs);
            shareInfo.setNotifyPicture(array.optString(0));
            // 2.0.7版本后的提示图片
            imgs = configService.get(ConfigKeyEnum.goodsShareNotifyImgs207.getKey());
            array = JSONArray.fromObject(imgs);
            shareInfo.setNotifyPictureNew(array.optString(0));
            shareInfo.setNotifyDesc(configService.get(ConfigKeyEnum.goodsShareNotify.getKey()));
            // 添加分享记录
            BigDecimal rate = hongBaoManageService.getShareRate();
            BigDecimal shareMoney = TaoBaoUtil.getShareGoodsHongBaoInfo(goods, rate);
            shareInfo.setShareMoney("¥" + shareMoney.toString());
            try {
                ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsDetail(uid, auctionId,
                        Constant.SOURCE_TYPE_TAOBAO, true);
                shareInfo.setShareId(shareRecord.getRedisKey());
            } catch (Exception e) {
                try {
                    LogHelper.errorDetailInfo(e);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
            out.print(JsonUtil.loadTrueResult(JsonUtil.getSimpleGson().toJson(shareInfo)));
            final TaoBaoLink taobaoLink = taoBaoLink;
            final TaoBaoGoodsBrief finalGoods = goods;
            // 异步操作
            com.yeshi.fanli.util.ThreadUtil.run(new Runnable() {
                @Override
                public void run() {
                    // 异步操作 添加分享记录
                    UserShareGoodsHistory history = new UserShareGoodsHistory();
                    history.setUser(new UserInfo(uid));
                    history.setHongbao(shareMoney);
                    history.setCreateTime(new Date());
                    history.setGoodsType(UserShareGoodsHistory.TYPE_TAOBAO);
                    history.setTkCode(TaoBaoUtil.filterTaoToken(taobaoLink.getTaoToken()));
                    history.setLink(taobaoLink.getClickUrl());
                    history.setQuanLink(taobaoLink.getCouponLink());
                    history.setGoodsId(finalGoods.getAuctionId());
                    history.setPostPicture(finalGoods.getPictUrl());
                    history.setShareImg(taobaoLink.getClickUrl());
                    List<String> imgList = finalGoods.getImgList();
                    if (imgList == null) {
                        imgList = new ArrayList<>();
                    }
                    history.setPictures(JsonUtil.getGson().toJson(imgList));
                    shareGoodsService.addShareGoodsHistory(history);
                }
            });
            return;
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e, "分享出错:uid:" + uid + "auctionId:" + auctionId, "");
            out.print(JsonUtil.loadFalseResult("创建分享出错"));
            businessEmergent110Service.shareTaoBaoGoodsError(StringUtil.Md5(auctionId + ""));
        }
    }
    public void createCommonTaoBaoShare(String platform, String version, Long goodsId, String inviteCode, Long uid,
            boolean needGoods, String relationId, PrintWriter out) {
        try {
            ShareInfoVO shareInfo = new ShareInfoVO();
            TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(uid, goodsId, relationId);
            if (taoBaoLink != null && taoBaoLink.getGoods() != null && needGoods) {
                ConfigParamsDTO dto = hongBaoManageService.getShowComputeRate(platform, version);
                GoodsDetailVO goodsInfo = GoodsDetailVOFactory.convertTaoBao(taoBaoLink.getGoods(), dto);
                shareInfo.setGoodsInfo(goodsInfo);
            }
            String url = String.format("http://%s%s?uid=%s&id=%s&appType=flq", configService.getH5Host(),
                    Constant.systemCommonConfig.getShareGoodsPagePath(), AESUtil.encrypt(uid + "", Constant.UIDAESKEY),
                    goodsId + "");
            String shortLink = HttpUtil.getShortLink(url);
            if (!StringUtil.isNullOrEmpty(shortLink)) {
                url = shortLink;
            }
            shareInfo.setClickUrl(url);
            shareInfo.setToken(TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
            shareInfo.setRule(configService.get(ConfigKeyEnum.shareSingleGoodsRule.getKey()));
            shareInfo.setPictUrl(TbImgUtil.getTBSizeImg(taoBaoLink.getGoods().getPictUrl(), 500));
            String commentTextStr = configService.get(ConfigKeyEnum.shareSingleGoodsCommentText.getKey());
            List<String> commentTexts = new ArrayList<>();
            if (!StringUtil.isNullOrEmpty(commentTextStr)) {
                JSONArray array = JSONArray.fromObject(commentTextStr);
                for (int i = 0; i < array.size(); i++) {
                    if (StringUtil.isNullOrEmpty(inviteCode)) {
                        if (array.optString(i).contains("[邀请码]")) {
                            continue;
                        }
                    }
                    if (StringUtil.isNullOrEmpty(inviteCode))
                        commentTexts.add(array.optString(i).replace("[下载链接]", Constant.YINGYONGBAO_LINK)
                                .replace("[淘口令]", shareInfo.getToken()));
                    else
                        commentTexts.add(array.optString(i).replace("[下载链接]", Constant.YINGYONGBAO_LINK)
                                .replace("[邀请码]", inviteCode).replace("[淘口令]", shareInfo.getToken()));
                }
            }
            shareInfo.setCommentTexts(commentTexts);
            String shareText = "";
            // 无券
            String shopType = taoBaoLink.getGoods().getUserType() == 0 ? TaoBaoConstant.SHARE_PRICE_TAOBAO
                    : TaoBaoConstant.SHARE_PRICE_TM;
            if (StringUtil.isNullOrEmpty(taoBaoLink.getGoods().getCouponInfo())) {
                String text = shareGoodsTextTemplateService.getCommonTemplate(uid);
                if (StringUtil.isNullOrEmpty(text))
                    text = configService.get(ConfigKeyEnum.goodsShareTextNoCoupon.getKey());
                shareText = text.replace("{标题}", taoBaoLink.getGoods().getTitle()).replace("{商品原价}",
                        MoneyBigDecimalUtil.getWithNoZera(taoBaoLink.getGoods().getZkPrice()) + "");
            } else// 有券
            {
                String text = shareGoodsTextTemplateService.geteCouponTemplate(uid);
                if (StringUtil.isNullOrEmpty(text))
                    text = configService.get(ConfigKeyEnum.goodsShareTextCoupon.getKey());
                shareText = text.replace("{标题}", taoBaoLink.getGoods().getTitle())
                        .replace("{商品原价}", MoneyBigDecimalUtil.getWithNoZera(taoBaoLink.getGoods().getZkPrice()) + "")
                        .replace("{优惠券面额}",
                                MoneyBigDecimalUtil.getWithNoZera(taoBaoLink.getGoods().getCouponAmount()).toString())
                        .replace("{优惠券价}", TaoBaoUtil.getAfterUseCouplePrice(taoBaoLink.getGoods()) + "");
            }
            shareText = shareText.replace("{店铺类型}", shopType)
                    .replace("{月销量}", TaoBaoUtil.getSaleCount(taoBaoLink.getGoods().getBiz30day()))
                    .replace("{领券短链}", shortLink).replace("{淘口令}", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
            shareInfo.setShareText(shareText);
            String descText = shareText.replace(taoBaoLink.getGoods().getTitle(), "").trim();
            if (descText.startsWith("\\r\\n")) {
                descText = descText.substring(0);
            }
            shareInfo.setDescText(descText);
            // 测试
            // 2.0.2之前
            if (!VersionUtil.greaterThan_2_0_2(platform, version))
                shareInfo.setClickUrl(getERCodeContent(configService.get(ConfigKeyEnum.taobaoShareQrcodeText.getKey()),
                        taoBaoLink.getGoods(), shareInfo.getToken()));
            shareInfo.setWxErCode(getERCodeContent(configService.get(ConfigKeyEnum.taobaoShareQrcodeText.getKey()),
                    taoBaoLink.getGoods(), shareInfo.getToken()));
            // 提示图文内容
            String imgs = configService.getByVersion(ConfigKeyEnum.goodsShareNotifyImgs.getKey(), platform,
                    Integer.parseInt(version));
            JSONArray array = JSONArray.fromObject(imgs);
            shareInfo.setNotifyPicture(array.optString(0));
            // 2.0.7版本后的提示图片
            imgs = configService.get(ConfigKeyEnum.goodsShareNotifyImgs207.getKey());
            array = JSONArray.fromObject(imgs);
            shareInfo.setNotifyPictureNew(array.optString(0));
            shareInfo.setNotifyDesc(configService.get(ConfigKeyEnum.goodsShareNotify.getKey()));
            // 分享金额
            BigDecimal rate = hongBaoManageService.getShareRate();
            BigDecimal shareMoney = TaoBaoUtil.getShareGoodsHongBaoInfo(taoBaoLink.getGoods(), rate);
            shareInfo.setShareMoney("¥" + shareMoney.toString());
            // 分享id
            try {
                ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsDetail(uid, goodsId,
                        Constant.SOURCE_TYPE_TAOBAO, false);
                shareInfo.setShareId(shareRecord.getRedisKey());
            } catch (Exception e) {
                try {
                    LogHelper.errorDetailInfo(e);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
            String commentText = "";
            String recommendText = "";
            if (VersionUtil.greaterThan_2_0_7(platform, version)) {
                TaoBaoGoodsBrief goods = taoBaoLink.getGoods();
                String template = configService.get(ConfigKeyEnum.quickShareGoodsText.getKey());
                recommendText = template.replace("[商品标题]", goods.getTitle()).replace("[销量]",
                        TaoBaoUtil.getSaleCount(taoBaoLink.getGoods().getBiz30day()));
                if (StringUtil.isNullOrEmpty(goods.getDescription())) {
                    recommendText = recommendText.replace("推荐语:[推荐语]", "");
                } else {
                    recommendText = recommendText.replace("[推荐语]", goods.getDescription());
                }
                String quickCommentText = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
                commentText = quickCommentText.replace("[原价]", goods.getZkPrice().toString());
                commentText = commentText.replace("[口令]", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
                if (StringUtil.isNullOrEmpty(taoBaoLink.getGoods().getCouponInfo())) {
                    commentText = commentText.replace("领券抢购", "抢购");
                    commentText = commentText.replace("【券后价】[券后价]元", "");
                    recommendText = recommendText.replace("优惠券:[券面额]", "");
                } else {
                    commentText = commentText.replace("[券后价]",
                            TaoBaoUtil.getAfterUseCouplePrice(taoBaoLink.getGoods()) + "");
                    recommendText = recommendText.replace("[券面额]",
                            MoneyBigDecimalUtil.getWithNoZera(taoBaoLink.getGoods().getCouponAmount()).toString());
                }
            } else {
                recommendText = shareInfo.getDescText();
                commentText = shareInfo.getShareText();
            }
            shareInfo.setCommentText(deleteBlankLine(commentText));
            shareInfo.setRecommendText(deleteBlankLine(recommendText));
            // 设置评论文本选项
            shareInfo.setCommentTextChoiceList(getCommentChoiceList(shareInfo.getCommentText(), null, inviteCode,
                    TaoBaoUtil.getGoodsHongBaoMoney(taoBaoLink.getGoods(), hongBaoManageService.getFanLiRate())));
            out.print(JsonUtil.loadTrueResult(
                    JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create().toJson(shareInfo)));
            final TaoBaoLink taobaoLink = taoBaoLink;
            // 异步操作
            com.yeshi.fanli.util.ThreadUtil.run(new Runnable() {
                @Override
                public void run() {
                    // 异步操作 添加分享记录
                    UserShareGoodsHistory history = new UserShareGoodsHistory();
                    history.setUser(new UserInfo(uid));
                    history.setHongbao(shareMoney);
                    history.setCreateTime(new Date());
                    history.setGoodsType(UserShareGoodsHistory.TYPE_TAOBAO);
                    history.setTkCode(TaoBaoUtil.filterTaoToken(taobaoLink.getTaoToken()));
                    history.setLink(taobaoLink.getClickUrl());
                    history.setQuanLink(taobaoLink.getCouponLink());
                    history.setGoodsId(taobaoLink.getGoods().getAuctionId());
                    history.setPostPicture(taobaoLink.getGoods().getPictUrl());
                    List<String> imgList = taobaoLink.getGoods().getImgList();
                    if (imgList == null) {
                        imgList = new ArrayList<>();
                    }
                    history.setPictures(JsonUtil.getGson().toJson(imgList));
                    shareGoodsService.addShareGoodsHistory(history);
                }
            });
            return;
        } catch (ShareGoodsException e) {
            LogHelper.errorDetailInfo(e, "分享出错:uid:" + uid + " goodsId:" + goodsId, "");
            out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMessage()));
            businessEmergent110Service.shareTaoBaoGoodsError(StringUtil.Md5(goodsId + ""));
        }
    }
    /**
     * 京东创建分享
     *
     * @param acceptData
     * @param uid
     * @param goodsId
     * @param source
     * @param goodsType
     * @param request
     * @param out
     */
    public void createJDShare(AcceptData acceptData, Long uid, Long goodsId, String source, boolean needGoods,
            PrintWriter out) {
        JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
        if (jdGoods == null) {
            out.print(JsonUtil.loadFalseResult(1, "该商品已下架"));
            return;
        }
        // String url = String.format("http://%s%s?uid=%s&id=%s",
        // configService.getH5Host(),
        // Constant.systemCommonConfig.getShareGoodsPagePathJD(),
        // AESUtil.encrypt(uid + "", Constant.UIDAESKEY),
        // goodsId + "");
        String couponUrl = null;
        JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(jdGoods);
        if (couponInfo != null) {
            couponUrl = couponInfo.getLink();
        }
        String materialId = "https://item.jd.com/" + goodsId + ".html";
        String jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "",
                uid + "");
        ShareInfoVO shareInfo = new ShareInfoVO();
        shareInfo.setClickUrl(jumpLink);
        shareInfo.setWxErCode(jumpLink);
        shareInfo.setRule(configService.get(ConfigKeyEnum.shareRuleLinkJD.getKey()));
        shareInfo.setPictUrl(jdGoods.getPicUrl());
        shareInfo.setCommentTexts(new ArrayList<>());
        if (needGoods)
            shareInfo.setGoodsInfo(GoodsDetailVOFactory.convertJDGoods(jdGoods,
                    hongBaoManageService.getShowComputeRate(acceptData.getPlatform(), acceptData.getVersion())));
        String shareText = "";
        boolean hasCoupon = false;
        // 分享模板
        ShareGoodsTextTemplate textTemplate = shareGoodsTextTemplateService.getShareGoodsTextTemplate(uid);
        if (couponInfo == null) { // 无券模板
            if (textTemplate != null)
                shareText = textTemplate.getShareJDTextTemplate();
            if (StringUtil.isNullOrEmpty(shareText))
                shareText = configService.get(ConfigKeyEnum.goodsShareTextNoCouponJD.getKey());
        } else { // 有券模板
            hasCoupon = true;
            if (textTemplate != null)
                shareText = textTemplate.getShareJDTextTemplateCoupon();
            if (StringUtil.isNullOrEmpty(shareText))
                shareText = configService.get(ConfigKeyEnum.goodsShareTextCouponJD.getKey());
        }
        shareText = shareGoodsTextTemplateService.createContentByTemplateJD(shareText, uid, jdGoods, jumpLink,
                hasCoupon);
        shareInfo.setShareText(shareText);
        String descText = shareText.replace(jdGoods.getSkuName(), "").trim();
        if (descText.startsWith("\\r\\n")) {
            descText = descText.substring(0);
        }
        shareInfo.setDescText(descText);
        String imgs = configService.getByVersion(ConfigKeyEnum.goodsShareNotifyImgs.getKey(), acceptData.getPlatform(),
                Integer.parseInt(acceptData.getVersion()));
        JSONArray array = JSONArray.fromObject(imgs);
        shareInfo.setNotifyPicture(array.size() > 1 ? array.optString(1) : array.optString(0));
        // 2.0.7版本后的提示图片
        imgs = configService.get(ConfigKeyEnum.goodsShareNotifyImgs207.getKey());
        array = JSONArray.fromObject(imgs);
        shareInfo.setNotifyPictureNew(array.size() > 1 ? array.optString(1) : array.optString(0));
        shareInfo.setNotifyDesc(configService.get(ConfigKeyEnum.goodsShareNotifyJD.getKey()));
        // 添加分享记录
        BigDecimal shareRate = hongBaoManageService.getShareRate();
        BigDecimal shareMoney = JDUtil.getGoodsFanLiMoney(jdGoods, shareRate);
        shareInfo.setShareMoney("¥" + shareMoney.toString());
        try {
            ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsDetail(uid, goodsId,
                    Constant.SOURCE_TYPE_JD, false);
            shareInfo.setShareId(shareRecord.getRedisKey());
        } catch (Exception e) {
            try {
                LogHelper.errorDetailInfo(e);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
        String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
        String commentText = "";
        String recommendText = "";
        if (VersionUtil.greaterThan_2_0_7(acceptData.getPlatform(), acceptData.getVersion())) {
            String template = configService.get(ConfigKeyEnum.quickShareGoodsText.getKey());
            recommendText = template.replace("[商品标题]", jdGoods.getSkuName()).replace("[销量]",
                    JDUtil.getSaleCount(jdGoods.getInOrderCount30Days()));
            // 无推荐语
            recommendText = recommendText.replace("推荐语:[推荐语]", "");
            String quickCommentText = configService.get(ConfigKeyEnum.quickShareJDCommentText.getKey());
            commentText = quickCommentText.replace("[原价]", jdGoods.getPrice().toString());
            commentText = commentText.replace("[链接]", jumpLink);
            if (couponInfo == null) {
                commentText = commentText.replace("领券抢购", "抢购");
                commentText = commentText.replace("【券后价】[券后价]元", "");
                recommendText = recommendText.replace("优惠券:[券面额]", "");
            } else {
                commentText = commentText.replace("[券后价]",
                        BigDecimalUtil.getWithNoZera(JDUtil.getQuanPrice(jdGoods)).toString());
                recommendText = recommendText.replace("[券面额]",
                        BigDecimalUtil.getWithNoZera(JDUtil.getShowCouponInfo(jdGoods).getDiscount()).toString());
            }
        } else {
            commentText = shareInfo.getShareText();
            recommendText = shareInfo.getDescText();
        }
        shareInfo.setCommentText(deleteBlankLine(commentText));
        shareInfo.setRecommendText(deleteBlankLine(recommendText));
        // 设置评论文本选项
        shareInfo.setCommentTextChoiceList(getCommentChoiceList(null, shareInfo.getCommentText(), inviteCode,
                JDUtil.getGoodsFanLiMoney(jdGoods, hongBaoManageService.getFanLiRate())));
        out.print(JsonUtil.loadTrueResult(
                JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create().toJson(shareInfo)));
        // 异步操作
        final JDGoods goods = jdGoods;
        com.yeshi.fanli.util.ThreadUtil.run(new Runnable() {
            @Override
            public void run() {
                // 异步操作 添加分享记录
                UserShareGoodsHistory history = new UserShareGoodsHistory();
                history.setUser(new UserInfo(uid));
                history.setHongbao(shareMoney);
                history.setCreateTime(new Date());
                history.setGoodsType(Constant.SOURCE_TYPE_JD);
                history.setTkCode(null);
                history.setLink(null);
                history.setQuanLink(null);
                history.setGoodsId(goodsId);
                history.setPostPicture(goods.getPicUrl());
                history.setShareImg(jumpLink);
                List<String> imgList = goods.getImageList();
                if (imgList == null) {
                    imgList = new ArrayList<>();
                }
                history.setPictures(JsonUtil.getGson().toJson(imgList));
                shareGoodsService.addShareGoodsHistory(history);
            }
        });
    }
    private String deleteBlankLine(String st){
        return st.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n");
    }
    /**
     * 拼多多分享
     *
     * @param acceptData
     * @param uid
     * @param goodsId
     * @param source
     * @param out
     */
    public void createPDDShare(AcceptData acceptData, Long uid, Long goodsId, String source, boolean needGoods,
            PrintWriter out) {
        PDDGoodsDetail goods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
        if (goods == null) {
            out.print(JsonUtil.loadFalseResult(1, "该商品已下架"));
            return;
        }
        // String url = String.format("http://%s%s?uid=%s&id=%s",
        // configService.getH5Host(),
        // Constant.systemCommonConfig.getShareGoodsPagePathPDD(),
        // AESUtil.encrypt(uid + "", Constant.UIDAESKEY),
        // goodsId + "");
        String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsId, PinDuoDuoApiUtil.PID_SHARE + "", uid + "");
        ShareInfoVO shareInfo = new ShareInfoVO();
        shareInfo.setClickUrl(jumpLink);
        shareInfo.setWxErCode(jumpLink);
        shareInfo.setCommentTexts(new ArrayList<>());
        shareInfo.setRule(configService.get(ConfigKeyEnum.shareRuleLinkPDD.getKey()));
        shareInfo.setPictUrl(goods.getGoodsImageUrl());
        if (needGoods) {
            shareInfo
                    .setGoodsInfo(GoodsDetailVOFactory.convertPDDGoods(goods,
                            new ConfigParamsDTO(hongBaoManageService.getFanLiRate(),
                                    hongBaoManageService.getShareRate(), Constant.MAX_REWARD_RATE,
                                    hongBaoManageService.getVIPFanLiRate())));
        }
        String template = "";
        boolean hasCoupon = false;
        ShareGoodsTextTemplate textTemplate = shareGoodsTextTemplateService.getShareGoodsTextTemplate(uid);
        if (goods.getHasCoupon() == null || !goods.getHasCoupon()) {
            if (textTemplate != null)
                template = textTemplate.getSharePDDTextTemplate();
            if (StringUtil.isNullOrEmpty(template))
                template = configService.get(ConfigKeyEnum.goodsShareTextNocouponPDD.getKey());
        } else {
            hasCoupon = true;
            if (textTemplate != null)
                template = textTemplate.getSharePDDTextTemplateCoupon();
            if (StringUtil.isNullOrEmpty(template))
                template = configService.get(ConfigKeyEnum.goodsShareTextCouponPDD.getKey());
        }
        // 创建口令
        String token = PinDuoDuoApiUtil.createGenerate(goodsId);
        // 生成分享内容
        String shareText = shareGoodsTextTemplateService.createContentByTemplatePDD(template, uid, goods, jumpLink,
                hasCoupon, token);
        shareInfo.setShareText(shareText);
        String descText = shareText.replace(goods.getGoodsName(), "").trim();
        if (descText.startsWith("\\r\\n")) {
            descText = descText.substring(0);
        }
        shareInfo.setDescText(descText);
        //
        String imgs = configService.getByVersion(ConfigKeyEnum.goodsShareNotifyImgs.getKey(), acceptData.getPlatform(),
                Integer.parseInt(acceptData.getVersion()));
        JSONArray array = JSONArray.fromObject(imgs);
        shareInfo.setNotifyPicture(array.size() > 1 ? array.optString(1) : array.optString(0));
        // 2.0.7版本后的提示图片
        imgs = configService.get(ConfigKeyEnum.goodsShareNotifyImgs207.getKey());
        array = JSONArray.fromObject(imgs);
        shareInfo.setNotifyPictureNew(array.size() > 1 ? array.optString(1) : array.optString(0));
        shareInfo.setNotifyDesc(configService.get(ConfigKeyEnum.goodsShareNotifyPDD.getKey()));
        // 添加分享记录
        BigDecimal shareRate = hongBaoManageService.getShareRate();
        BigDecimal shareMoney = PinDuoDuoUtil.getGoodsFanLiMoney(goods, shareRate);
        shareInfo.setShareMoney("¥" + shareMoney.toString());
        try {
            ShareGoodsRecordDTO shareRecord = userShareGoodsRecordService.addRecordGoodsDetail(uid, goodsId,
                    Constant.SOURCE_TYPE_PDD, false);
            shareInfo.setShareId(shareRecord.getRedisKey());
        } catch (Exception e) {
            try {
                LogHelper.errorDetailInfo(e);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
        String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
        String commentText = "";
        String recommendText = "";
        if (VersionUtil.greaterThan_2_0_7(acceptData.getPlatform(), acceptData.getVersion())) {
            String qtemplate = configService.get(ConfigKeyEnum.quickShareGoodsText.getKey());
            recommendText = qtemplate.replace("[商品标题]", goods.getGoodsName());
            // 总销量
            String salesTip = goods.getSalesTip();
            if (StringUtil.isNullOrEmpty(salesTip)) {
                salesTip = "0";
            }
            recommendText = recommendText.replace("[销量]", salesTip);
            recommendText = recommendText.replace("推荐语:[推荐语]", "");
            String quickCommentText = configService.get(ConfigKeyEnum.quickSharePDDCommentText.getKey());
            commentText = quickCommentText.replace("[原价]", MoneyBigDecimalUtil
                    .div(new BigDecimal(goods.getMinGroupPrice()), new BigDecimal(100)).setScale(2).toString());
            commentText = commentText.replace("[链接]", jumpLink);
            if (!hasCoupon) {
                commentText = commentText.replace("领券抢购", "抢购");
                commentText = commentText.replace("【券后价】[券后价]元", "");
                recommendText = recommendText.replace("优惠券:[券面额]", "");
            } else {
                commentText = commentText.replace("[券后价]",
                        BigDecimalUtil.getWithNoZera(PinDuoDuoUtil.getQuanPrice(goods)).toString());
                BigDecimal hundred = new BigDecimal(100);
                BigDecimal amount = MoneyBigDecimalUtil.div(new BigDecimal(goods.getCouponDiscount()), hundred);
                recommendText = recommendText.replace("[券面额]", BigDecimalUtil.getWithNoZera(amount).toString());
            }
        } else {
            commentText = shareInfo.getShareText();
            recommendText = shareInfo.getDescText();
        }
        shareInfo.setRecommendText(deleteBlankLine(recommendText));
        shareInfo.setCommentText(deleteBlankLine(commentText));
        // 设置评论文本选项
        shareInfo.setCommentTextChoiceList(getCommentChoiceList(null,shareInfo.getCommentText(), inviteCode,
                PinDuoDuoUtil.getGoodsFanLiMoney(goods, hongBaoManageService.getFanLiRate())));
        out.print(JsonUtil.loadTrueResult(
                JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create().toJson(shareInfo)));
        // 异步操作
        com.yeshi.fanli.util.ThreadUtil.run(new Runnable() {
            @Override
            public void run() {
                // 异步操作 添加分享记录
                UserShareGoodsHistory history = new UserShareGoodsHistory();
                history.setUser(new UserInfo(uid));
                history.setHongbao(shareMoney);
                history.setCreateTime(new Date());
                history.setGoodsType(Constant.SOURCE_TYPE_PDD);
                history.setTkCode(null);
                history.setLink(null);
                history.setQuanLink(null);
                history.setGoodsId(goodsId);
                history.setPostPicture(goods.getGoodsImageUrl());
                history.setShareImg(jumpLink);
                List<String> imgList = null;
                String[] goodsGalleryUrls = goods.getGoodsGalleryUrls();
                if (goodsGalleryUrls != null) {
                    imgList = Arrays.asList(goodsGalleryUrls);
                }
                if (imgList == null) {
                    imgList = new ArrayList<>();
                }
                history.setPictures(JsonUtil.getGson().toJson(imgList));
                shareGoodsService.addShareGoodsHistory(history);
            }
        });
    }
    /**
     * 预览分享模板
     *
     * @param acceptData
     * @param uid
     * @param template
     * @param goodsId
     * @param hasCoupon
     * @param out
     */
    @RequestMapping(value = "viewShareTextTemplate", method = RequestMethod.POST)
    public void viewShareTextTemplate(AcceptData acceptData, Long uid, String template, Integer goodsType, Long goodsId,
            Long tljId, Boolean hasCoupon, PrintWriter out) {
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
            return;
        }
        if (goodsId == null) {
            out.print(JsonUtil.loadFalseResult(3, "商品ID不能为空"));
            return;
        }
        if (goodsType == null || goodsType > 3 || goodsType < 1) {
            out.print(JsonUtil.loadFalseResult(3, "平台类型不正确"));
            return;
        }
        if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            createTaoBaoViewText(goodsType, uid, template, goodsId, tljId, hasCoupon, out);
            return;
        }
        if (goodsType == Constant.SOURCE_TYPE_JD) {
            createJDViewText(goodsType, uid, template, goodsId, hasCoupon, out);
            return;
        }
        if (goodsType == Constant.SOURCE_TYPE_PDD) {
            createPDDViewText(goodsType, uid, template, goodsId, hasCoupon, out);
            return;
        }
    }
    /**
     * 创建淘宝分享模板
     *
     * @param uid
     * @param template
     * @param goodsType
     * @param goodsId
     * @param tljId
     * @param hasCoupon
     * @param out
     */
    public void createTaoBaoViewText(Integer goodsType, Long uid, String template, Long goodsId, Long tljId,
            Boolean hasCoupon, PrintWriter out) {
        TaoBaoGoodsBrief goods = taoBaoGoodsCacheUtil.getCommonTaoBaoGoodsInfo(goodsId);
        if (goods == null)
            try {
                goods = redisManager.getTaoBaoGoodsBrief(goodsId);
            } catch (TaobaoGoodsDownException e) {
                goods = null;
            }
        if (goods == null) {
            out.print(JsonUtil.loadFalseResult(4, "商品已下架"));
            return;
        }
        if (StringUtil.isNullOrEmpty(template)) {
            template = getShareTemplate(goodsType, uid, hasCoupon, tljId);
        }
        // 校验券模板是否正确
        if (hasCoupon) {
            // 有券商品
            if (tljId != null) {
                try {
                    shareGoodsTextTemplateService.isTaoLiJinTemplateRight(template);
                } catch (ShareGoodsTextTemplateException e) {
                    out.print(JsonUtil.loadFalseResult(5, e.getMsg()));
                    return;
                }
            } else {
                try {
                    shareGoodsTextTemplateService.isCouponTemplateRight(template);
                } catch (ShareGoodsTextTemplateException e) {
                    out.print(JsonUtil.loadFalseResult(5, e.getMsg()));
                    return;
                }
            }
        } else {
            // 普通商品
            try {
                shareGoodsTextTemplateService.isCommonTemplateRight(template);
            } catch (ShareGoodsTextTemplateException e) {
                out.print(JsonUtil.loadFalseResult(5, e.getMsg()));
                return;
            }
        }
        String url = null;
        if (tljId != null) {
            UserTaoLiJinRecord userTaoLiJinRecord = userTaoLiJinRecordService.selectByPrimaryKey(tljId);
            if (userTaoLiJinRecord == null) {
                out.print(JsonUtil.loadFalseResult(5, "淘礼金领取链接不存在"));
                return;
            }
            url = userTaoLiJinRecord.getSendUrl();
        } else {
            url = String.format("http://%s%s?uid=%s&id=%s&appType=flq", configService.getH5Host(),
                    Constant.systemCommonConfig.getShareGoodsPagePath(), AESUtil.encrypt(uid + "", Constant.UIDAESKEY),
                    goods.getAuctionId() + "");
        }
        String shortLink = HttpUtil.getShortLink(url);
        // 查询是否有分享
        UserShareGoodsHistory userShareHistory = shareGoodsService.getShareGoodsHistory(uid, goods.getAuctionId());
        String token = "";
        if (userShareHistory != null) {
            token = userShareHistory.getTkCode();
        }
        if (StringUtil.isNullOrEmpty(token)) {
            TaoKeAppInfo app = new TaoKeAppInfo();
            app.setAdzoneId(TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT.split("_")[3]);
            app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
            app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
            app.setPid(TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT);
            TaoBaoGoodsBrief goodsLink = TaoKeApiUtil.specialConvertCoupon(goods.getAuctionId(), app);
            if (goodsLink != null)
                token = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(),
                        StringUtil.isNullOrEmpty(goodsLink.getCouponLink()) ? goodsLink.getAuctionUrl()
                                : goodsLink.getCouponLink());
        }
        String content = shareGoodsTextTemplateService.createContentByTemplate(template, uid, goods, token, shortLink,
                hasCoupon, tljId);
        JSONObject data = new JSONObject();
        data.put("content", content);
        out.print(JsonUtil.loadTrueResult(data));
    }
    /**
     * 创建京东分享模板
     *
     * @param uid
     * @param template
     * @param goodsType
     * @param goodsId
     * @param tljId
     * @param hasCoupon
     * @param out
     */
    public void createJDViewText(Integer goodsType, Long uid, String template, Long goodsId, Boolean hasCoupon,
            PrintWriter out) {
        JDGoods goods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
        if (goods == null) {
            out.print(JsonUtil.loadFalseResult(4, "商品已下架"));
            return;
        }
        if (StringUtil.isNullOrEmpty(template)) {
            template = getShareTemplate(goodsType, uid, hasCoupon, null);
        }
        // 校验券模板是否正确
        if (hasCoupon) {
            // 有券商品
            try {
                shareGoodsTextTemplateService.isCouponTemplateRightJD(template);
            } catch (ShareGoodsTextTemplateException e) {
                out.print(JsonUtil.loadFalseResult(5, e.getMsg()));
                return;
            }
        } else {
            // 普通商品
            try {
                shareGoodsTextTemplateService.isCommonTemplateRightJD(template);
            } catch (ShareGoodsTextTemplateException e) {
                out.print(JsonUtil.loadFalseResult(5, e.getMsg()));
                return;
            }
        }
        String couponUrl = null;
        JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(goods);
        if (couponInfo != null) {
            couponUrl = couponInfo.getLink();
        }
        String materialId = "https://item.jd.com/" + goodsId + ".html";
        String shortLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "",
                uid + "");
        String content = shareGoodsTextTemplateService.createContentByTemplateJD(template, uid, goods, shortLink,
                hasCoupon);
        JSONObject data = new JSONObject();
        data.put("content", content);
        out.print(JsonUtil.loadTrueResult(data));
    }
    /**
     * 创建拼多多分享模板
     *
     * @param uid
     * @param template
     * @param goodsType
     * @param goodsId
     * @param tljId
     * @param hasCoupon
     * @param out
     */
    public void createPDDViewText(Integer goodsType, Long uid, String template, Long goodsId, Boolean hasCoupon,
            PrintWriter out) {
        PDDGoodsDetail goods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
        if (goods == null) {
            out.print(JsonUtil.loadFalseResult(4, "商品已下架"));
            return;
        }
        if (StringUtil.isNullOrEmpty(template)) {
            template = getShareTemplate(goodsType, uid, hasCoupon, null);
        }
        // 校验券模板是否正确
        if (hasCoupon) {
            // 有券商品
            try {
                shareGoodsTextTemplateService.isCouponTemplateRightPDD(template);
            } catch (ShareGoodsTextTemplateException e) {
                out.print(JsonUtil.loadFalseResult(5, e.getMsg()));
                return;
            }
        } else {
            // 普通商品
            try {
                shareGoodsTextTemplateService.isCommonTemplateRightPDD(template);
            } catch (ShareGoodsTextTemplateException e) {
                out.print(JsonUtil.loadFalseResult(5, e.getMsg()));
                return;
            }
        }
        // // 创建h5连接
        // String url = String.format("http://%s%s?uid=%s&id=%s&appType=flq",
        // configService.getH5Host(),
        // Constant.systemCommonConfig.getShareGoodsPagePath(),
        // AESUtil.encrypt(uid + "", Constant.UIDAESKEY),
        // goodsId + "");
        // String shortLink = HttpUtil.getShortLink(url);
        String shortLink = PinDuoDuoApiUtil.getPromotionUrl(goodsId, PinDuoDuoApiUtil.PID_SHARE + "", uid + "");
        // 创建口令
        String token = PinDuoDuoApiUtil.createGenerate(goodsId);
        // 生成分享内容
        String content = shareGoodsTextTemplateService.createContentByTemplatePDD(template, uid, goods, shortLink,
                hasCoupon, token);
        JSONObject data = new JSONObject();
        data.put("content", content);
        out.print(JsonUtil.loadTrueResult(data));
    }
    /**
     * 获取分享模板
     *
     * @param uid
     * @param hasCoupon
     * @param tljId
     * @return
     */
    private String getShareTemplate(int goodsType, Long uid, boolean hasCoupon, Long tljId) {
        String template = "";
        if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            if (hasCoupon) {
                if (tljId != null) {
                    template = shareGoodsTextTemplateService.getTaoLiJinTemplate(uid);
                    if (StringUtil.isNullOrEmpty(template))
                        template = configTaoLiJinService.getValueByKey("goods_share_text", new Date());
                } else {
                    template = shareGoodsTextTemplateService.geteCouponTemplate(uid);
                    if (StringUtil.isNullOrEmpty(template))
                        template = configService.get(ConfigKeyEnum.goodsShareTextCoupon.getKey());
                }
            } else {
                template = shareGoodsTextTemplateService.getCommonTemplate(uid);
                if (StringUtil.isNullOrEmpty(template))
                    template = configService.get(ConfigKeyEnum.goodsShareTextNoCoupon.getKey());
            }
        } else if (goodsType == Constant.SOURCE_TYPE_JD) {
            ShareGoodsTextTemplate textTemplate = shareGoodsTextTemplateService.getShareGoodsTextTemplate(uid);
            if (hasCoupon) {
                if (textTemplate != null) {
                    template = textTemplate.getShareJDTextTemplateCoupon();
                }
                if (StringUtil.isNullOrEmpty(template)) {
                    template = configService.get(ConfigKeyEnum.goodsShareTextCouponJD.getKey());
                }
            } else {
                if (textTemplate != null) {
                    template = textTemplate.getShareJDTextTemplate();
                }
                if (StringUtil.isNullOrEmpty(template)) {
                    template = configService.get(ConfigKeyEnum.goodsShareTextNoCouponJD.getKey());
                }
            }
        } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            ShareGoodsTextTemplate textTemplate = shareGoodsTextTemplateService.getShareGoodsTextTemplate(uid);
            if (hasCoupon) {
                if (textTemplate != null) {
                    template = textTemplate.getSharePDDTextTemplateCoupon();
                }
                if (StringUtil.isNullOrEmpty(template)) {
                    template = configService.get(ConfigKeyEnum.goodsShareTextCouponPDD.getKey());
                }
            } else {
                if (textTemplate != null) {
                    template = textTemplate.getSharePDDTextTemplate();
                }
                if (StringUtil.isNullOrEmpty(template)) {
                    template = configService.get(ConfigKeyEnum.goodsShareTextNocouponPDD.getKey());
                }
            }
        }
        return template;
    }
    /**
     * 获取分享模板
     *
     * @param acceptData
     * @param uid
     * @param hasCoupon
     * @param out
     */
    @RequestMapping(value = "getShareTextTemplate", method = RequestMethod.POST)
    public void getShareTextTemplate(AcceptData acceptData, Integer goodsType, Long uid, Long tljId, Boolean hasCoupon,
            PrintWriter out) {
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
            return;
        }
        if (hasCoupon == null) {
            out.print(JsonUtil.loadFalseResult(1, "是否有券字段为空"));
            return;
        }
        JSONObject data = new JSONObject();
        data.put("template", getShareTemplate(goodsType, uid, hasCoupon, tljId));
        out.print(JsonUtil.loadTrueResult(data));
    }
    /**
     * 获取分享模板编辑规则
     *
     * @param acceptData
     * @param out
     */
    @RequestMapping(value = "getShareTextTemplateRules", method = RequestMethod.POST)
    public void getShareTextTemplateRules(AcceptData acceptData, Integer goodsType, Long tljId, PrintWriter out) {
        if (goodsType == null || goodsType > 3 || goodsType < 1) {
            out.print(JsonUtil.loadFalseResult(3, "平台类型不正确"));
            return;
        }
        if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            if (tljId != null) {
                out.print(
                        JsonUtil.loadTrueResult(configTaoLiJinService.getValueByKey("share_goods_rules", new Date())));
            } else {
                out.print(JsonUtil.loadTrueResult(configService.get(ConfigKeyEnum.shareGoodsTemplateRules.getKey())));
            }
        } else if (goodsType == Constant.SOURCE_TYPE_JD) {
            out.print(JsonUtil.loadTrueResult(configService.get(ConfigKeyEnum.shareGoodsTemplateRulesJD.getKey())));
        } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            out.print(JsonUtil.loadTrueResult(configService.get(ConfigKeyEnum.shareGoodsTemplateRulesPDD.getKey())));
        }
    }
    /**
     * 保存模板
     *
     * @param acceptData
     * @param uid
     * @param hasCoupon
     * @param template
     * @param out
     */
    @RequestMapping(value = "saveShareTextTemplate", method = RequestMethod.POST)
    public void saveShareTextTemplate(AcceptData acceptData, Integer goodsType, Long uid, Long tljId, Boolean hasCoupon,
            String template, PrintWriter out) {
        if (StringUtil.isNullOrEmpty(template)) {
            out.print(JsonUtil.loadFalseResult(1, "分享模板为空"));
            return;
        }
        if (goodsType == null || goodsType > 3 || goodsType < 1) {
            out.print(JsonUtil.loadFalseResult(3, "平台类型不正确"));
            return;
        }
        try {
            if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
                // 校验券模板是否正确
                if (hasCoupon) {
                    // 有券商品
                    if (tljId != null) {
                        shareGoodsTextTemplateService.isTaoLiJinTemplateRight(template);
                        shareGoodsTextTemplateService.saveTaoLiJinTemplate(uid, template);
                    } else {
                        shareGoodsTextTemplateService.isCouponTemplateRight(template);
                        shareGoodsTextTemplateService.saveCouponTemplate(uid, template);
                    }
                } else {
                    // 普通商品
                    shareGoodsTextTemplateService.isCommonTemplateRight(template);
                    shareGoodsTextTemplateService.saveCommonTemplate(uid, template);
                }
            } else if (goodsType == Constant.SOURCE_TYPE_JD) {
                if (hasCoupon) {
                    shareGoodsTextTemplateService.isCouponTemplateRightJD(template);
                    shareGoodsTextTemplateService.saveCouponTemplateJD(uid, template);
                } else {
                    shareGoodsTextTemplateService.isCommonTemplateRightJD(template);
                    shareGoodsTextTemplateService.saveCommonTemplateJD(uid, template);
                    out.print(JsonUtil.loadTrueResult(""));
                }
            } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
                if (hasCoupon) {
                    shareGoodsTextTemplateService.isCouponTemplateRightPDD(template);
                    shareGoodsTextTemplateService.saveCouponTemplatePDD(uid, template);
                } else {
                    shareGoodsTextTemplateService.isCommonTemplateRightPDD(template);
                    shareGoodsTextTemplateService.saveCommonTemplatePDD(uid, template);
                    out.print(JsonUtil.loadTrueResult(""));
                }
            }
        } catch (ShareGoodsTextTemplateException e) {
            out.print(JsonUtil.loadFalseResult(5, e.getMsg()));
            return;
        }
        out.print(JsonUtil.loadTrueResult(""));
    }
    /**
     * 还原模板
     *
     * @param acceptData
     * @param uid
     * @param hasCoupon
     *            -是否有券
     * @param out
     */
    @RequestMapping(value = "resetShareTextTemplate", method = RequestMethod.POST)
    public void resetShareTextTemplate(AcceptData acceptData, Long uid, Long goodsId, Long tljId, Boolean hasCoupon,
            Integer goodsType, PrintWriter out) {
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
            return;
        }
        if (goodsType == null || goodsType > 3 || goodsType < 1) {
            out.print(JsonUtil.loadFalseResult(3, "平台类型不正确"));
            return;
        }
        if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            if (hasCoupon) {
                if (tljId != null) {
                    shareGoodsTextTemplateService.resetTaoLijinTemplate(uid);
                } else {
                    shareGoodsTextTemplateService.resetCouponTemplate(uid);
                }
            } else {
                shareGoodsTextTemplateService.resetCommonTemplate(uid);
            }
        } else if (goodsType == Constant.SOURCE_TYPE_JD) {
            if (hasCoupon) {
                shareGoodsTextTemplateService.resetCouponTemplateJD(uid);
            } else {
                shareGoodsTextTemplateService.resetCommonTemplateJD(uid);
            }
        } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            if (hasCoupon) {
                shareGoodsTextTemplateService.resetCouponTemplatePDD(uid);
            } else {
                shareGoodsTextTemplateService.resetCommonTemplatePDD(uid);
            }
        }
        if (goodsId != null) {
            viewShareTextTemplate(acceptData, uid, null, goodsType, goodsId, tljId, hasCoupon, out);
            return;
        }
        out.print(JsonUtil.loadTrueResult(""));
    }
    /**
     * 获取分享记录中的商品 分享信息
     *
     * @param acceptData
     * @param recordId
     * @param out
     */
    @RequestMapping(value = "getShareGoods")
    public void getShareGoods(AcceptData acceptData, Long recordId, PrintWriter out) {
        if (recordId == null) {
            out.print(JsonUtil.loadFalseResult("参数不正确"));
            return;
        }
        JSONArray array = new JSONArray();
        JSONObject data = new JSONObject();
        List<UserShareGoodsGroup> list = userShareGoodsGroupService.listByRecordId(recordId);
        if (list == null || list.size() == 0) {
            data.put("title", "分享商品");
            data.put("count", 0);
            data.put("result_list", array);
            out.print(JsonUtil.loadTrueResult(data));
            return;
        }
        // API网络接口验证是否在售
        List<TaoBaoGoodsBrief> listTaoKeGoods = null;
        List<Long> listGid = new ArrayList<Long>();
        for (UserShareGoodsGroup goodsGroup : list) {
            CommonGoods commonGoods = goodsGroup.getCommonGoods();
            Integer goodsType = commonGoods.getGoodsType();
            if (commonGoods == null || goodsType == null || goodsType != Constant.SOURCE_TYPE_TAOBAO) {
                continue;
            }
            listGid.add(commonGoods.getGoodsId());
        }
        if (listGid.size() > 0) {
            try {
                listTaoKeGoods = TaoKeApiUtil.getBatchGoodsInfo(listGid);
            } catch (TaoKeApiException e) {
                e.printStackTrace();
            } catch (TaobaoGoodsDownException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate(acceptData.getPlatform(),
                acceptData.getVersion());
        Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
                .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
        for (UserShareGoodsGroup goodsGroup : list) {
            CommonGoods commonGoods = goodsGroup.getCommonGoods();
            if (commonGoods == null) {
                continue;
            }
            // 验证淘宝商品是否在售
            Integer goodsType = commonGoods.getGoodsType();
            if (listTaoKeGoods != null && listTaoKeGoods.size() > 0 && goodsType != null
                    && goodsType == Constant.SOURCE_TYPE_TAOBAO) {
                int state = 1; // 默认停售
                Long goodsId = commonGoods.getGoodsId();
                for (TaoBaoGoodsBrief taoKeGoods : listTaoKeGoods) {
                    Long auctionId = taoKeGoods.getAuctionId();
                    if (goodsId == auctionId || goodsId.equals(auctionId)) {
                        state = 0; // 在售
                        break;
                    }
                }
                commonGoods.setState(state);
            }
            // 今日浏览记录处理
            Date date = new Date();
            Date browseTime = goodsGroup.getBrowseTime();
            if (!DateUtil.isSameDay(browseTime, date)) {
                goodsGroup.setTodayBrowse(0); // 不是同一天浏览记录设置0
            }
            JSONObject dataObject = new JSONObject();
            dataObject.put("todayBrowse", goodsGroup.getTodayBrowse());
            dataObject.put("totalBrowse", goodsGroup.getTotalBrowse());
            dataObject.put("totalOrder", goodsGroup.getTotalOrder());
            dataObject.put("totalMoney", "¥" + goodsGroup.getTotalMoney());
            GoodsDetailVO detailVO = GoodsDetailVOFactory.convertCommonGoods(commonGoods, paramsDTO);
            detailVO.setId(commonGoods.getId());
            dataObject.put("goods", gson.toJson(detailVO));
            array.add(dataObject);
        }
        String title = "";
        UserShareGoodsRecord userShareGoodsRecord = userShareGoodsRecordService.selectByPrimaryKey(recordId);
        if (userShareGoodsRecord != null) {
            title = userShareGoodsRecord.getTitle();
        }
        data.put("title", title);
        data.put("count", list.size());
        data.put("result_list", array);
        out.print(JsonUtil.loadTrueResult(data));
    }
    @RequestMapping(value = "getShareTextQuick", method = RequestMethod.POST)
    public void getShareTextQuick(AcceptData acceptData, Long goodsId, Integer goodsType, Long uid, PrintWriter out) {
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
            return;
        }
        if (goodsType == null || goodsId == null) {
            out.print(JsonUtil.loadFalseResult(1, "请传递正确的商品信息"));
            return;
        }
        GoodsDetailVO goodsDetail = null;
        ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate(acceptData.getPlatform(),
                acceptData.getVersion());
        paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
        if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            TaoBaoGoodsBrief goods = taoBaoGoodsCacheUtil.getCommonTaoBaoGoodsInfo(goodsId);
            if (goods == null) {
                try {
                    goods = redisManager.getTaoBaoGoodsBrief(goodsId);
                } catch (TaobaoGoodsDownException e) {
                    goods = null;
                }
            }
            if (goods != null) {
                goodsDetail = GoodsDetailVOFactory.convertTaoBao(goods, paramsDTO);
            }
        } else if (goodsType == Constant.SOURCE_TYPE_JD) {
            JDGoods goods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
            if (goods != null) {
                goodsDetail = GoodsDetailVOFactory.convertJDGoods(goods, paramsDTO);
            }
        } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            PDDGoodsDetail goods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
            if (goods != null) {
                goodsDetail = GoodsDetailVOFactory.convertPDDGoods(goods, paramsDTO);
            }
        }
        if (goodsDetail == null) {
            out.print(JsonUtil.loadFalseResult(1, "该商品已下架"));
            return;
        }
        String template = configService.get(ConfigKeyEnum.quickShareGoodsText.getKey());
        template = template.replace("[商品标题]", goodsDetail.getTitle()).replace("[销量]", goodsDetail.getSalesCount());
        if (StringUtil.isNullOrEmpty(goodsDetail.getDescription())) {
            template = template.replace("[推荐语]", goodsDetail.getDescription());
        } else {
            template = template.replace("推荐语:[推荐语]", "");
        }
        if (goodsDetail.isHasCoupon()) {
            template = template.replace("[券面额]",
                    String.format("满%s元减%s元",
                            MoneyBigDecimalUtil.getWithNoZera(goodsDetail.getCouponInfo().getStartFee()).toString(),
                            MoneyBigDecimalUtil.getWithNoZera(goodsDetail.getCouponInfo().getAmount()).toString()));
        } else {
            template = template.replace("优惠券:[券面额]", "");
        }
        JSONObject data = new JSONObject();
        data.put("description", template);
        out.print(JsonUtil.loadTrueResult(data));
    }
}
fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java
@@ -1,190 +1,194 @@
package com.yeshi.fanli.entity.system;
public enum ConfigKeyEnum {
    // 提现相关
    extractWay("extract_way", "是否手动提现"),
    extractDayCount("extract_count_day", "用户每天最大提现次数"),
    extractMoneyMin("extract_min_money", "单笔提现最小金额"),
    extractMoneyMAX("extract_max_money", "单笔提现最大金额"),
    extractMoneyDay("extract_money_day", "用户每天最大提现金额"),
    extractCodeEmailFrom("extract_code_email_from", "发送提现验证码的邮箱"),
    adminMinSameGoodsOrderCount("admin_min_same_goods_order_count", "提现审核列表高危标识同商品订单数量最小值"),
    adminMinSameShopOrderCount("admin_min_same_shop_order_count", "提现审核列表高危标识同店铺订单数量最小值"),
    alipayHelp("alipay_help", "支付宝帮助"),
    alipayBindFailReason("alipay_bind_fail_reason", "支付宝绑定失败可能原因"),
    // 分享商品
    h5Url("h5_url", "H5网页域名"),
    shareSina("shareSina", "分享商品到新浪的前缀内容"), // 未找到对应Call
    shareRuleLinkJD("share_rule_link_jd", "京东分享规则(帮助中心)"),
    shareRuleLinkPDD("share_rule_link_pdd", "拼多多分享规则(帮助中心)"),
    shareSingleGoodsRule("share_single_goods_rule", "单品分享规则"),
    shareGoodsTemplateRules("share_goods_template_rules", "分享模板规则"), // 存在2个相同 内容不同、版本但一样
    shareGoodsTemplateRulesJD("share_goods_template_rules_jd", "京东模板规则"),
    shareGoodsTemplateRulesPDD("share_goods_template_rules_pdd", "拼多多模板规则"),
    goodsShareNotifyImgs("goods_share_notify_imgs", "单个商品分享的券提示图片"),
    goodsShareNotifyImgs207("goods_share_notify_imgs_207", "单个商品分享的券提示图片(2.0.7及以后)"),
    goodsShareMultipleNotify("goods_share_multiple_notify", "多个商品分享提醒"),
    goodsShareNotify("goods_share_notify", "单个商品分享提醒"),
    goodsShareNotifyJD("goods_share_notify_jd", "京东分享提醒"),
    goodsShareNotifyPDD("goods_share_notify_pdd", "拼多多分享提醒"),
    goodsShareTextCoupon("goods_share_text_coupon", "单个商品分享文案(有券)"),
    goodsShareTextCouponJD("goods_share_text_coupon_jd", "京东单个商品分享模板-有券"),
    goodsShareTextCouponPDD("goods_share_text_coupon_pdd", "拼多多单个商品分享模板-有券"),
    goodsShareTextNoCoupon("goods_share_text_nocoupon", "单个商品分享文案(无券)"),
    goodsShareTextNoCouponJD("goods_share_text_nocoupon_jd", "京东单个商品分享模板-无券"),
    goodsShareTextNocouponPDD("goods_share_text_nocoupon_pdd", "拼多多单个商品分享模板-无券"),
    shareSingleGoodsCommentText("share_single_goods_comment_text", "单品分享评论区文案"),
    shareGoodsActivityOpen("share_goods_activity_open", "分享商品订单活动"),
    superHongBaoShareDesc("super-hongbao-share-desc", "双12红包分享语"),
    superYuShouShareDesc("super-yushou-share-desc", "双11预售分享语"),
    // 邀请好友
    inviteCodeHlepLink("invite_code_hlep_link", "邀请激活页面-特别提醒"),
    inviteActivationTip("invite_activation_tip", "邀请激活页面-特别提醒"),
    inviteActivationSuccessTip("invite_activation_success_tip", "邀请激活成功页面-特别提醒"),
    inviteActivationUrl("invite_activation_url", "邀请码激活页面"),
    inviteActivationSuccessUrl("invite_activation_success_url", "邀请码激活成功页面"),
    inviteTopBanner("invite_top_banner", "邀请页顶部大图"), // 未找到对应Call
    inviteDesc("invite_desc", "邀请有奖特别说明"),
    teamList("team_list", "我的队员链接"),
    teamHelpUrl("team_help_url", "我的队员 问号 跳转链接"),
    rewardRankRange("reward_rank_range", "奖金榜金额上下幅度最大范围"),
    inviteHelpLink("invite_help_link", "邀请好友帮助链接"),
    inviteSeparateLimitDays("invite_separate_limit_days", "会员脱离期限"),
    inviteCodeInputHelp("invite_code_input_help", "邀请码填写帮助"),
    firstOrderRewardBoss("first_order_reward_boss", "一级队员首单,奖励上级金币"),
    firstOrderRewardBossSuper("first_order_reward_boss_super", "二级队员首次下单,系统奖励金币 "),
    firstShareOrderReward("first_share_order_reward", "首笔分享订单,系统奖励金币"),
    firstShareOrderRewardBoss("first_share_order_reward_boss", "一级队员首笔分享订单,系统奖励金币 "),
    // 免单券、奖励券
    exchangeRebatePercent("exchange_rebate_percent", "兑换奖励券比例"),
    freeCouponActivateNum("free_coupon_activate_num", "免单券激活订单数量"),
    freeCouponHelp("free_coupon_help", "商品详情弹框免单券问号链接"),
    freeCouponTip("free_coupon_tip", "商品详情弹框免单券提示"),
    freeCouponBackRemark("free_coupon_back_remark", "免单券退回页面备注"),
    freeCouponRemark("free_coupon_remark", "免单券进度使用中、成功备注"),
    freeGoodsList("free_goods_list", "免单商品列表"),
    freeCouponUsingHelp("free_coupon_using-help", "免单券使用中说明"),
    freeGoodsRule("free_goods_rule", "免单商品活动规则"),
    rewardCouponHelp("reward_coupon_help", "订单奖励券弹出框位置问号"),
    rewardCouponRemark("reward_coupon_remark", "奖励券备注"),
    specialGuideRewardCouponLink("special_guide_reward_coupon_link", "返利奖励券引导页"),
    giveFreeCouponTips("give_free_coupon_tips", "免单券赠送口令提示语"),
    giveRebatePercentCouponTips("give_rebate_percent_coupon_tips", "奖励券赠送口令提示"),
    publishListHelpLink("publish_list_help_link", "邀请码发布帮助链接"),
    lotteryRuleNewbies("lottery_rule_newbies", "新人抽奖界面规则内容"),
    lotteryRuleDailyRebate("lottery_rule_daily_rebate", "奖励券天天抽-抽奖规则"),
    // 商品相关
    taobaoProxyIP("taobao_proxy_ip", "淘宝商品详情代理IP"),
    taobaoCartJS("taobao_cart_js", "淘宝购物车脚本"),
    taobaoCartLink("taobao_cart_link", "购物车链接"),
    taobaoCartJumpDetail("taobao_cart_jump_detail", "我的购物车跳转方式"), // 存在2个相同 存在版本区分
    taobaoCouponHelp("taobao_coupon_help", "券帮助"),
    convertTaoBaoLinkInServer("convert_taobao_link_in_server", "是否在服务端转链"),
    showTaobaoCartConvert("show_taobao_cart_convert", "购物车是否转链"),
    taobaoShareQrcodeText("taobao_share_qrcode_text", "淘宝商品二维码识别文字"),
    noRebateHelpLink("no_rebate_help_link", "商品详情无返利问号"),
    goodsDetailFanliRateHelpUrl("goods_detail_fanli_rate_help_url", "商品详情返利比例说明"),
    detailPrompt("detail_prompt", "商品详情提示语"),
    oldGoodsDetailHelpUrl("old_goods_detail_help_url", "老版商品详情页的帮助中心"),
    shareBonusPicture("shareBonusPicture", "1.4.0版本商品详情 分享奖金图片"),
    tljOwnBuyNogoods("tlj_own_buy_nogoods", "自购立减无商品页面"),
    zigoulijianRule("zigoulijian_rule", "自购立减活动规则"),
    zigoulijianNofanliHelp("zigoulijian_nofanli_help", "自购立减无返利帮助"),
    // 订单相关
    showTaobaoOrder("show_taobao_order", "是否显示淘宝订单"),
    taobaoOrderParseJS("taobao_order_parse_js", "淘宝订单解析脚本"),
    autoFindTaobaoOrder("auto_find_taobao_order", "是否开启淘宝自动找单"),
    orderListHelp("order_list_help", "订单列表帮助链接"),
    lostOrderHelpWhat("lost_order_help_what", "订单找回-订单找回是什么"),
    lostOrderHelpReason("lost_order_help_reason", "订单找回-找回失败原因"),
    orderFindNotifyUrl("order_find_notify_url", "订单列表-订单找回帮助链接"),
    orderAppealCountDay("order_appeal_count_day", "每天最大申诉订单数量"),
    // 消息信息
    shareMessage("share_message", "短信分享编辑内容"),
    helpName("help_name", "帮助客服名称"), // 未找到对应Call
    helpNumber("help_number", "帮助客服号码"), // 未找到对应Call
    msgConfigZhushou("msg-config-zhushou", "消息-返利券小助手"),
    msgConfigGuanxuan("msg-config-guanxuan", "消息-官宣任务"),
    msgConfigNotify("msg-config-notify", "消息-大图通知"),
    kefuMeiqia("kefu_meiqia", "美洽客服是否开启(0-关闭 1-开启)"),
    customerServiceLink("customer_service_link", "人工客服链接"),
    canSendEmergencyMsg("can_send_emergency_msg", "是否发送服务器告警短信"),
    // 首页
    newUserHongBao("new_user_hongbao", "新手红包是否开启"), // 未找到对应Call
    newUserIsOrder("new_user_isorder", "新手红包是否下单生效"), // 未找到对应Call
    recommendDetails("recommend_details", "动态推荐详情页面"), // 未找到对应Call
    homeWeexUrl("home_weex_url", "首页weex链接"),
    appFloatImg("app_float_img", "首页悬浮大图"),
    homeFloatImgNew("home_float_img_new", "首页悬浮广告位"), // 未找到对应Call
    homeFloatNotifyImg("home_float_notify_img", "首页悬浮提示大图"),
    homeInviteBanner("home_invite_banner", "首页邀请有奖大图"),
    spikeGoodsLink("spike_goods_link", "限时秒杀跳转的网页链接"),
    indexHtmlLinkIos("index_html_link_ios", "首页-限时秒杀(IOS)网页链接"),
    indexHtmlLinkAndroid("index_html_link_android", "首页-限时秒杀(安卓)网页链接"),
    tipGuideNewUser("tip_guide_new_user", "首页新人版/未登录版"),
    tipGuideSaveMoney("tip_guide_save_money", "首页省钱版"),
    tipGuideShareInvite("tip_guide_share_invite", "首页赚钱版"),
    searchDiscoveryKeys("search_discovery_keys", "搜索发现关键词"),
    searchDiscoveryH5Link("search_discovery_h5_link", "搜索发现h5连接"),
    autoExtractHelpUrl("auto_extract_help_url", "自动提现帮助链接"),
    // 协议
    userProtocolHomeData("user_protocol_home_data", "用户协议首页内容"),
    serviceProtocolLink("service_protocol_link", "服务协议"),
    privacyProtocolLink("privacy_protocol_link", "隐私协议"),
    shareOpenJD("share_jd_open", "京东商品是否开启分享"),
    jdApiSearchKey("jd_api_search_key", "京东API是否搜索"),
    jingdongH5Link("jingdong_h5_link", "京东跳转地址"),
    jdWXMPClass("jd_wxmp_class", "京东小程序分类"),
    elemeHongbaoLink("eleme_hongbao_link", "饿了么红包链接"), // 未找到对应Call
    elemeGoodsLink("eleme_goods_link", "饿了么商品链接"), // 未找到对应Call
    passwordErrorMAX("password_max_error", "用户每天最多输错密码次数"), // 未找到对应Call
    userRankTip("user_rank_tip", "用户等级页面特别提醒"),
    userRankContrast("user_rank_contrast", "用户等级对照图片url"),
    tkRateRange("tkRate_range", "前端筛选比例范围"),
    onlyInfo("only_info", "返回前端的"),
    downAPP("downAPP", "下载APP链接"),
    appDownLink("app_down_link", "APP下载地址"),
    xcxSetting("xcx_setting", "小程序更新设置"),
    iosOnlingVersion("ios_onling_version", "IOS正在上线的版本"),
    openSpeicalAndRelationApply("open_speical_and_relation_apply", "开启会员运营ID与渠道ID申请"),
    hotFunctionUrl("hot_function_url", "热门功能链接"), // 存在2个相同 存在版本区分
    pushGoodsDetails("push_goods_details", "推送页面"),
    brandBackgroundPicture("brand_background_picture", "品牌背景图片"),
    articleHotWords("article_hot_words", "动态-学院文章热搜词"),
    vipLink("vip_link", "超级会员升级链接"), // 转移至VIPConfig 已废弃
    helpLinkVipInfo("help_link_vip_info", "超级会员详情页帮助链接"), // 已废弃
    //文案转链
    convertDocWebLink("convert_doc_web_link","文案转链网页"),
    convertDocHelpLink("convert_doc_help_link","文案转链帮助网页"),
    convertDocTip("convert_doc_tip","文案转链温馨提示"),
    newerGonglue("newer_gonglue_url","新手攻略链接"),
    tearcherLink("tearcher_link","导师链接")
    ;
    private final String key;
    private final String desc;
    private ConfigKeyEnum(String key, String desc) {
        this.key = key;
        this.desc = desc;
    }
    public String getDesc() {
        return desc;
    }
    public String getKey() {
        return key;
    }
}
package com.yeshi.fanli.entity.system;
public enum ConfigKeyEnum {
    // 提现相关
    extractWay("extract_way", "是否手动提现"),
    extractDayCount("extract_count_day", "用户每天最大提现次数"),
    extractMoneyMin("extract_min_money", "单笔提现最小金额"),
    extractMoneyMAX("extract_max_money", "单笔提现最大金额"),
    extractMoneyDay("extract_money_day", "用户每天最大提现金额"),
    extractCodeEmailFrom("extract_code_email_from", "发送提现验证码的邮箱"),
    adminMinSameGoodsOrderCount("admin_min_same_goods_order_count", "提现审核列表高危标识同商品订单数量最小值"),
    adminMinSameShopOrderCount("admin_min_same_shop_order_count", "提现审核列表高危标识同店铺订单数量最小值"),
    alipayHelp("alipay_help", "支付宝帮助"),
    alipayBindFailReason("alipay_bind_fail_reason", "支付宝绑定失败可能原因"),
    // 分享商品
    h5Url("h5_url", "H5网页域名"),
    shareSina("shareSina", "分享商品到新浪的前缀内容"), // 未找到对应Call
    shareRuleLinkJD("share_rule_link_jd", "京东分享规则(帮助中心)"),
    shareRuleLinkPDD("share_rule_link_pdd", "拼多多分享规则(帮助中心)"),
    shareSingleGoodsRule("share_single_goods_rule", "单品分享规则"),
    shareGoodsTemplateRules("share_goods_template_rules", "分享模板规则"), // 存在2个相同 内容不同、版本但一样
    shareGoodsTemplateRulesJD("share_goods_template_rules_jd", "京东模板规则"),
    shareGoodsTemplateRulesPDD("share_goods_template_rules_pdd", "拼多多模板规则"),
    goodsShareNotifyImgs("goods_share_notify_imgs", "单个商品分享的券提示图片"),
    goodsShareMultipleNotify("goods_share_multiple_notify", "多个商品分享提醒"),
    goodsShareNotifyImgs207("goods_share_notify_imgs_207", "单个商品分享的券提示图片(2.0.7及以后)"),
    goodsShareNotify("goods_share_notify", "单个商品分享提醒"),
    goodsShareNotifyJD("goods_share_notify_jd", "京东分享提醒"),
    goodsShareNotifyPDD("goods_share_notify_pdd", "拼多多分享提醒"),
    goodsShareTextCoupon("goods_share_text_coupon", "单个商品分享文案(有券)"),
    goodsShareTextCouponJD("goods_share_text_coupon_jd", "京东单个商品分享模板-有券"),
    goodsShareTextCouponPDD("goods_share_text_coupon_pdd", "拼多多单个商品分享模板-有券"),
    goodsShareTextNoCoupon("goods_share_text_nocoupon", "单个商品分享文案(无券)"),
    goodsShareTextNoCouponJD("goods_share_text_nocoupon_jd", "京东单个商品分享模板-无券"),
    goodsShareTextNocouponPDD("goods_share_text_nocoupon_pdd", "拼多多单个商品分享模板-无券"),
    shareSingleGoodsCommentText("share_single_goods_comment_text", "单品分享评论区文案"),
    shareGoodsActivityOpen("share_goods_activity_open", "分享商品订单活动"),
    superHongBaoShareDesc("super-hongbao-share-desc", "双12红包分享语"),
    superYuShouShareDesc("super-yushou-share-desc", "双11预售分享语"),
    // 邀请好友
    inviteCodeHlepLink("invite_code_hlep_link", "邀请激活页面-特别提醒"),
    inviteActivationTip("invite_activation_tip", "邀请激活页面-特别提醒"),
    inviteActivationSuccessTip("invite_activation_success_tip", "邀请激活成功页面-特别提醒"),
    inviteActivationUrl("invite_activation_url", "邀请码激活页面"),
    inviteActivationSuccessUrl("invite_activation_success_url", "邀请码激活成功页面"),
    inviteTopBanner("invite_top_banner", "邀请页顶部大图"), // 未找到对应Call
    inviteDesc("invite_desc", "邀请有奖特别说明"),
    teamList("team_list", "我的队员链接"),
    teamHelpUrl("team_help_url", "我的队员 问号 跳转链接"),
    rewardRankRange("reward_rank_range", "奖金榜金额上下幅度最大范围"),
    inviteHelpLink("invite_help_link", "邀请好友帮助链接"),
    inviteSeparateLimitDays("invite_separate_limit_days", "会员脱离期限"),
    inviteCodeInputHelp("invite_code_input_help", "邀请码填写帮助"),
    firstOrderRewardBoss("first_order_reward_boss", "一级队员首单,奖励上级金币"),
    firstOrderRewardBossSuper("first_order_reward_boss_super", "二级队员首次下单,系统奖励金币 "),
    firstShareOrderReward("first_share_order_reward", "首笔分享订单,系统奖励金币"),
    firstShareOrderRewardBoss("first_share_order_reward_boss", "一级队员首笔分享订单,系统奖励金币 "),
    // 免单券、奖励券
    exchangeRebatePercent("exchange_rebate_percent", "兑换奖励券比例"),
    freeCouponActivateNum("free_coupon_activate_num", "免单券激活订单数量"),
    freeCouponHelp("free_coupon_help", "商品详情弹框免单券问号链接"),
    freeCouponTip("free_coupon_tip", "商品详情弹框免单券提示"),
    freeCouponBackRemark("free_coupon_back_remark", "免单券退回页面备注"),
    freeCouponRemark("free_coupon_remark", "免单券进度使用中、成功备注"),
    freeGoodsList("free_goods_list", "免单商品列表"),
    freeCouponUsingHelp("free_coupon_using-help", "免单券使用中说明"),
    freeGoodsRule("free_goods_rule", "免单商品活动规则"),
    rewardCouponHelp("reward_coupon_help", "订单奖励券弹出框位置问号"),
    rewardCouponRemark("reward_coupon_remark", "奖励券备注"),
    specialGuideRewardCouponLink("special_guide_reward_coupon_link", "返利奖励券引导页"),
    giveFreeCouponTips("give_free_coupon_tips", "免单券赠送口令提示语"),
    giveRebatePercentCouponTips("give_rebate_percent_coupon_tips", "奖励券赠送口令提示"),
    publishListHelpLink("publish_list_help_link", "邀请码发布帮助链接"),
    lotteryRuleNewbies("lottery_rule_newbies", "新人抽奖界面规则内容"),
    lotteryRuleDailyRebate("lottery_rule_daily_rebate", "奖励券天天抽-抽奖规则"),
    // 商品相关
    taobaoProxyIP("taobao_proxy_ip", "淘宝商品详情代理IP"),
    taobaoCartJS("taobao_cart_js", "淘宝购物车脚本"),
    taobaoCartLink("taobao_cart_link", "购物车链接"),
    taobaoCartJumpDetail("taobao_cart_jump_detail", "我的购物车跳转方式"), // 存在2个相同 存在版本区分
    taobaoCouponHelp("taobao_coupon_help", "券帮助"),
    convertTaoBaoLinkInServer("convert_taobao_link_in_server", "是否在服务端转链"),
    showTaobaoCartConvert("show_taobao_cart_convert", "购物车是否转链"),
    taobaoShareQrcodeText("taobao_share_qrcode_text", "淘宝商品二维码识别文字"),
    noRebateHelpLink("no_rebate_help_link", "商品详情无返利问号"),
    goodsDetailFanliRateHelpUrl("goods_detail_fanli_rate_help_url", "商品详情返利比例说明"),
    detailPrompt("detail_prompt", "商品详情提示语"),
    oldGoodsDetailHelpUrl("old_goods_detail_help_url", "老版商品详情页的帮助中心"),
    shareBonusPicture("shareBonusPicture", "1.4.0版本商品详情 分享奖金图片"),
    tljOwnBuyNogoods("tlj_own_buy_nogoods", "自购立减无商品页面"),
    zigoulijianRule("zigoulijian_rule", "自购立减活动规则"),
    zigoulijianNofanliHelp("zigoulijian_nofanli_help", "自购立减无返利帮助"),
    // 订单相关
    showTaobaoOrder("show_taobao_order", "是否显示淘宝订单"),
    taobaoOrderParseJS("taobao_order_parse_js", "淘宝订单解析脚本"),
    autoFindTaobaoOrder("auto_find_taobao_order", "是否开启淘宝自动找单"),
    orderListHelp("order_list_help", "订单列表帮助链接"),
    lostOrderHelpWhat("lost_order_help_what", "订单找回-订单找回是什么"),
    lostOrderHelpReason("lost_order_help_reason", "订单找回-找回失败原因"),
    orderFindNotifyUrl("order_find_notify_url", "订单列表-订单找回帮助链接"),
    orderAppealCountDay("order_appeal_count_day", "每天最大申诉订单数量"),
    // 消息信息
    shareMessage("share_message", "短信分享编辑内容"),
    helpName("help_name", "帮助客服名称"), // 未找到对应Call
    helpNumber("help_number", "帮助客服号码"), // 未找到对应Call
    msgConfigZhushou("msg-config-zhushou", "消息-返利券小助手"),
    msgConfigGuanxuan("msg-config-guanxuan", "消息-官宣任务"),
    msgConfigNotify("msg-config-notify", "消息-大图通知"),
    kefuMeiqia("kefu_meiqia", "美洽客服是否开启(0-关闭 1-开启)"),
    customerServiceLink("customer_service_link", "人工客服链接"),
    canSendEmergencyMsg("can_send_emergency_msg", "是否发送服务器告警短信"),
    // 首页
    newUserHongBao("new_user_hongbao", "新手红包是否开启"), // 未找到对应Call
    newUserIsOrder("new_user_isorder", "新手红包是否下单生效"), // 未找到对应Call
    recommendDetails("recommend_details", "动态推荐详情页面"), // 未找到对应Call
    homeWeexUrl("home_weex_url", "首页weex链接"),
    appFloatImg("app_float_img", "首页悬浮大图"),
    homeFloatImgNew("home_float_img_new", "首页悬浮广告位"), // 未找到对应Call
    homeFloatNotifyImg("home_float_notify_img", "首页悬浮提示大图"),
    homeInviteBanner("home_invite_banner", "首页邀请有奖大图"),
    spikeGoodsLink("spike_goods_link", "限时秒杀跳转的网页链接"),
    indexHtmlLinkIos("index_html_link_ios", "首页-限时秒杀(IOS)网页链接"),
    indexHtmlLinkAndroid("index_html_link_android", "首页-限时秒杀(安卓)网页链接"),
    tipGuideNewUser("tip_guide_new_user", "首页新人版/未登录版"),
    tipGuideSaveMoney("tip_guide_save_money", "首页省钱版"),
    tipGuideShareInvite("tip_guide_share_invite", "首页赚钱版"),
    searchDiscoveryKeys("search_discovery_keys", "搜索发现关键词"),
    searchDiscoveryH5Link("search_discovery_h5_link", "搜索发现h5连接"),
    autoExtractHelpUrl("auto_extract_help_url", "自动提现帮助链接"),
    // 协议
    userProtocolHomeData("user_protocol_home_data", "用户协议首页内容"),
    serviceProtocolLink("service_protocol_link", "服务协议"),
    privacyProtocolLink("privacy_protocol_link", "隐私协议"),
    shareOpenJD("share_jd_open", "京东商品是否开启分享"),
    jdApiSearchKey("jd_api_search_key", "京东API是否搜索"),
    jingdongH5Link("jingdong_h5_link", "京东跳转地址"),
    jdWXMPClass("jd_wxmp_class", "京东小程序分类"),
    elemeHongbaoLink("eleme_hongbao_link", "饿了么红包链接"), // 未找到对应Call
    elemeGoodsLink("eleme_goods_link", "饿了么商品链接"), // 未找到对应Call
    passwordErrorMAX("password_max_error", "用户每天最多输错密码次数"), // 未找到对应Call
    userRankTip("user_rank_tip", "用户等级页面特别提醒"),
    userRankContrast("user_rank_contrast", "用户等级对照图片url"),
    tkRateRange("tkRate_range", "前端筛选比例范围"),
    onlyInfo("only_info", "返回前端的"),
    downAPP("downAPP", "下载APP链接"),
    appDownLink("app_down_link", "APP下载地址"),
    xcxSetting("xcx_setting", "小程序更新设置"),
    iosOnlingVersion("ios_onling_version", "IOS正在上线的版本"),
    openSpeicalAndRelationApply("open_speical_and_relation_apply", "开启会员运营ID与渠道ID申请"),
    hotFunctionUrl("hot_function_url", "热门功能链接"), // 存在2个相同 存在版本区分
    pushGoodsDetails("push_goods_details", "推送页面"),
    brandBackgroundPicture("brand_background_picture", "品牌背景图片"),
    articleHotWords("article_hot_words", "动态-学院文章热搜词"),
    vipLink("vip_link", "超级会员升级链接"), // 转移至VIPConfig 已废弃
    helpLinkVipInfo("help_link_vip_info", "超级会员详情页帮助链接"), // 已废弃
    //文案转链
    convertDocWebLink("convert_doc_web_link","文案转链网页"),
    convertDocHelpLink("convert_doc_help_link","文案转链帮助网页"),
    convertDocTip("convert_doc_tip","文案转链温馨提示"),
    newerGonglue("newer_gonglue_url","新手攻略链接"),
    tearcherLink("tearcher_link","导师链接"),
    quickShareGoodsText("quick_share_goods_text", "快捷分享商品文本"),
    quickShareTBCommentText("quick_share_tb_comment_text", "快捷分享商品文本"),
    quickShareJDCommentText("quick_share_jd_comment_text", "快捷分享商品文本"),
    quickSharePDDCommentText("quick_share_pdd_comment_text", "快捷分享商品文本"),
    ;
    private final String key;
    private final String desc;
    private ConfigKeyEnum(String key, String desc) {
        this.key = key;
        this.desc = desc;
    }
    public String getDesc() {
        return desc;
    }
    public String getKey() {
        return key;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoBaoUtil.java
@@ -2143,6 +2143,7 @@
        for (String st : marks)
            list.add(st);
        list.add("\\(-\\)");
        list.add("(-)");
        return getTokenListFromText(str, list);
    }
fanli/src/test/java/org/fanli/TaoKeTest.java
@@ -8,6 +8,7 @@
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -96,13 +97,11 @@
    @Test
    public void test2() {
        try {
            TaoKeApiUtil.getSimpleGoodsInfo(539432362036L);
        } catch (TaobaoGoodsDownException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String[] marks = new String[] { "\\(-\\)"};
        List<String> textList = TaoBaoUtil.getTokenListFromText("復製这条(VzUl1fzQWMT)进入【Tao宝】即可抢购", Arrays.asList(marks));
        System.out.println(textList);
    }
    @Test