admin
2020-05-20 98b1a0affd69bbe63223c21fdd2c404e8bedfccb
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java
@@ -1,23 +1,31 @@
package com.yeshi.fanli.controller.client.v2;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.annotation.Resource;
import org.apache.commons.beanutils.PropertyUtils;
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.HttpUtil;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.QRCodeUtil;
import org.yeshi.utils.entity.FileUploadResult;
import org.yeshi.utils.tencentcloud.COSManager;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@@ -27,8 +35,9 @@
import com.google.gson.JsonSerializer;
import com.yeshi.fanli.dto.jd.JDCouponInfo;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.activity.ActivityUser;
import com.yeshi.fanli.entity.bus.clazz.GoodsClass;
import com.yeshi.fanli.entity.bus.homemodule.CommonShareInfo;
import com.yeshi.fanli.entity.bus.homemodule.CommonShareInfo.CommonShareInfoEnum;
import com.yeshi.fanli.entity.bus.homemodule.Special;
import com.yeshi.fanli.entity.bus.homemodule.SpecialLabel;
import com.yeshi.fanli.entity.bus.homemodule.SwiperPicture;
@@ -36,21 +45,26 @@
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.common.JumpDetailV2;
import com.yeshi.fanli.entity.dynamic.CommentInfo;
import com.yeshi.fanli.entity.dynamic.CommentInfo.CommentInfoEnum;
import com.yeshi.fanli.entity.dynamic.DynamicInfo;
import com.yeshi.fanli.entity.dynamic.GoodsEvaluate;
import com.yeshi.fanli.entity.dynamic.GoodsPicture;
import com.yeshi.fanli.entity.dynamic.GoodsEvaluate.EvaluateEnum;
import com.yeshi.fanli.entity.dynamic.ImgInfo;
import com.yeshi.fanli.entity.dynamic.ImgInfo.ImgEnum;
import com.yeshi.fanli.entity.dynamic.SimpleGoods;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoLink;
import com.yeshi.fanli.exception.goods.ConvertLinkExceptionException;
import com.yeshi.fanli.exception.share.ShareGoodsException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.count.DailyCountMomentsService;
import com.yeshi.fanli.service.inter.dynamic.ArticleOfficialService;
import com.yeshi.fanli.service.inter.dynamic.DynamicInfoService;
import com.yeshi.fanli.service.inter.dynamic.GoodsEvaluateService;
import com.yeshi.fanli.service.inter.goods.ShareGoodsService;
import com.yeshi.fanli.service.inter.goods.TaoBaoGoodsBriefService;
import com.yeshi.fanli.service.inter.homemodule.CommonShareInfoService;
import com.yeshi.fanli.service.inter.homemodule.SpecialService;
import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService;
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
@@ -58,19 +72,28 @@
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.util.AESUtil;
import com.yeshi.fanli.service.manger.goods.ConvertLinkManager;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.FilePathEnum;
import com.yeshi.fanli.util.ImageUtil;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.VersionUtil;
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
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.DaTaoKeUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.vo.dynamic.ArticleVO;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
import com.yeshi.fanli.vo.homemodule.BannerVO;
import com.yeshi.fanli.vo.homemodule.SpecialVO;
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
@@ -123,6 +146,21 @@
   @Resource
   private QrCodeService qrCodeService;
   @Resource
   private ConvertLinkManager convertLinkManager;
   @Resource
   private ShareGoodsService shareGoodsService;
   @Resource
   private DailyCountMomentsService dailyCountMomentsService;
   @Resource
   private CommonShareInfoService commonShareInfoService;
   @Resource(name = "taskExecutor")
   private TaskExecutor executor;
   private final static long TYPE_REXIAO = 1;// 热销
   private final static long TYPE_TUIJIAN = 2;// 推荐
@@ -239,7 +277,6 @@
         list.add(map.get(TYPE_HUODONG));
         // list.add(map.get(TYPE_XUEYUAN));
         list.add(map.get(TYPE_SUCAI));
      } else if (VersionUtil.greaterThan_2_0_6(acceptData.getPlatform(), acceptData.getVersion())) {
         // 2.0.6返回热销+活动+推荐+学院+邀请
         list.add(map.get(TYPE_REXIAO));
@@ -343,8 +380,8 @@
         listKey.add("special_channel_pdd");
      }
      List<Special> list = specialService.listByPlaceKeyHasLabel((page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE,
            listKey, platformCode, Integer.parseInt(acceptData.getVersion()));
      List<SpecialVO> list = specialService.listByPlaceKeyHasLabel((page - 1) * Constant.PAGE_SIZE,
            Constant.PAGE_SIZE, listKey, platformCode, Integer.parseInt(acceptData.getVersion()));
      long time = System.currentTimeMillis();
@@ -352,31 +389,29 @@
      for (int i = 0; i < list.size(); i++) {
         Special special = list.get(i);
         if (special.getState() == 1L) {
            list.remove(i--);
         } else {
            if (special.getStartTime() != null && special.getEndTime() != null)
            continue;
         }
         // 是否活动已过期
         if (special.getStartTime() != null && special.getEndTime() != null) {
            if (time < special.getStartTime().getTime() || time > special.getEndTime().getTime()) {
               continue;
            } else {
               special.setTimeTask(true);
            else
               special.setTimeTask(false);
            if (special.isTimeTask()) {
               if (time < special.getStartTime().getTime() || time > special.getEndTime().getTime()) {
                  list.remove(i--);
               } else// 设置倒计时
               {
                  special.setCountDownTime((special.getEndTime().getTime() - time) / 1000);
               }
            }
            List<SpecialLabel> listLabels = special.getListLabels();
            if (listLabels != null && !listLabels.isEmpty()) {
               List<ClientTextStyleVO> labels = new ArrayList<>();
               for (SpecialLabel specialLabel : listLabels) {
                  labels.add(new ClientTextStyleVO(specialLabel.getName(), specialLabel.getBgColor()));
               }
               special.setLabels(labels);
               special.setCountDownTime((special.getEndTime().getTime() - time) / 1000);
            }
         }
         // 设置标签
         List<SpecialLabel> listLabels = special.getListLabels();
         if (listLabels != null && !listLabels.isEmpty()) {
            List<ClientTextStyleVO> labels = new ArrayList<>();
            for (SpecialLabel specialLabel : listLabels) {
               labels.add(new ClientTextStyleVO(specialLabel.getName(), specialLabel.getBgColor()));
            }
            special.setLabels(labels);
         }
      }
      long count = specialService.countByPlaceKeyList(listKey, platformCode,
@@ -504,18 +539,18 @@
      JSONObject data = new JSONObject();
      if (page == 1 && !search) {
         List<SwiperPicture> banners = swiperPictureService.getByBannerCardAndVersion("article_banners",
         List<BannerVO> banners = swiperPictureService.getByBannerCardAndVersion("article_banners",
               acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()));
         if (banners == null)
            banners = new ArrayList<>();
         data.put("banners", gson.toJson(banners));
         List<Special> listSpecial = specialService.listByVersion(0, Integer.MAX_VALUE, "article_specials",
         List<SpecialVO> listSpecial = specialService.listByVersion(0, Integer.MAX_VALUE, "article_specials",
               acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()));
         if (listSpecial == null)
            listSpecial = new ArrayList<>();
         for (Special special : listSpecial) {
         for (SpecialVO special : listSpecial) {
            boolean needLogin = special.isJumpLogin();
            JumpDetailV2 jumpDetail = special.getJumpDetail();
            if (jumpDetail != null) {
@@ -587,212 +622,376 @@
    */
   @RequestMapping(value = "getDynamicList", method = RequestMethod.POST)
   public void getDynamicListNew(AcceptData acceptData, Integer page, Long cid, String subId, PrintWriter out) {
      int type = 1;
      if (cid == TYPE_FAQUAN)
         type = 1;
      else if (cid == TYPE_SUCAI) {
         type = 2;
      }
      List<GoodsEvaluate> list = goodsEvaluateService.queryMaterialsCache((page - 1) * Constant.PAGE_SIZE,
            Constant.PAGE_SIZE, type);
      if (list == null) {
         list = new ArrayList<>();
      }
      GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
      gsonBuilder.registerTypeAdapter(CommentInfoEnum.class, new JsonSerializer<CommentInfoEnum>() {
         @Override
         public JsonElement serialize(CommentInfoEnum value, Type theType, JsonSerializationContext context) {
            if (value == null) {
               return new JsonPrimitive(1);
            } else {
               return new JsonPrimitive(value.getDesc());
            }
      try {
         int type = 1;
         if (cid == TYPE_FAQUAN) {
            type = 1;
         } else if (cid == TYPE_SUCAI) {
            type = 2;
         }
      }).registerTypeAdapter(ImgEnum.class, new JsonSerializer<ImgEnum>() {
         @Override
         public JsonElement serialize(ImgEnum value, Type theType, JsonSerializationContext context) {
            if (value == null) {
               return new JsonPrimitive("");
            } else {
               return new JsonPrimitive(value.getVlaue());
            }
         }
      }).registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
         @Override
         public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
            String desc = "";
            if (value != null) {
               // 判断是否是同一天
         List<GoodsEvaluate> listNew = new ArrayList<GoodsEvaluate>();
               Calendar calendar = Calendar.getInstance();
               calendar.setTime(value);
               int y1 = calendar.get(Calendar.YEAR);// 获取年份
               int d1 = calendar.get(Calendar.DAY_OF_YEAR);// 获取年中第几天
         List<GoodsEvaluate> list = goodsEvaluateService.queryMaterialsCache((page - 1) * Constant.PAGE_SIZE,
               Constant.PAGE_SIZE, type);
               Date nowDate = new Date();
               Calendar calendar2 = Calendar.getInstance();
               calendar2.setTime(nowDate);
               int y2 = calendar2.get(Calendar.YEAR);// 获取年份
               int d2 = calendar2.get(Calendar.DAY_OF_YEAR);// 获取年中第几天
               long old = value.getTime();
               long now = nowDate.getTime();
               if (y1 == y2) {
                  if (d1 == d2) {
                     long cha = now - old;
                     if (cha < 1000 * 60 * 2L) {
                        desc = "刚刚";
                     } else if (cha < 1000 * 60 * 60L) {
                        desc = (cha / (1000 * 60)) + "分钟前";
                     } else {
                        desc = (cha / (1000 * 60 * 60)) + "小时前";
                     }
                  } else if (d2 - d1 == 1) {
                     desc = "昨天";
                  } else {
                     desc = (d2 - d1) + "天前";
                  }
               } else {
                  int timeDistance = 0;
                  for (int i = y1; i < y2; i++) {
                     if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
                        timeDistance += 366; // 闰年
                     } else {
                        timeDistance += 365; // 不是闰年
                     }
                  }
                  desc = timeDistance + (d2 - d1) + "天前";
         if (!VersionUtil.greaterThan_2_1_1(acceptData.getPlatform(), acceptData.getVersion())) {
            listNew.addAll(list);
         } else if (list.size() > 0) { // 活动图片不允许跳转
            for (GoodsEvaluate goodsEvaluate : list) {
               if (goodsEvaluate.getType() != EvaluateEnum.activity) {
                  listNew.add(goodsEvaluate);
                  continue;
               }
               return new JsonPrimitive(desc);
               GoodsEvaluate evaluateNew = new GoodsEvaluate();
               try {
                  PropertyUtils.copyProperties(evaluateNew, goodsEvaluate);
               } catch (Exception e) {
                  e.printStackTrace();
                  continue;
               }
               // 跳转过渡页
               // String jumpLink =
               // configService.get(ConfigKeyEnum.activityDetailLink.getKey())
               // + "?type=%s&id=%s";
               // jumpLink = String.format(jumpLink, "circle",
               // evaluateNew.getId());
               // evaluateNew.setJumpLink(jumpLink);
               // 图片数量
               if (evaluateNew.getImgList() != null && evaluateNew.getImgList().size() > 0) {
                  int size = evaluateNew.getImgList().size();
                  List<ImgInfo> listInfoNew = new ArrayList<ImgInfo>();
                  for (ImgInfo imgInfo : goodsEvaluate.getImgList()) {
                     if (imgInfo.getType() != ImgEnum.activity) {
                        listInfoNew.add(imgInfo);
                        continue;
                     }
                     ImgInfo infoNew = new ImgInfo();
                     try {
                        PropertyUtils.copyProperties(infoNew, imgInfo);
                     } catch (Exception e) {
                        e.printStackTrace();
                        continue;
                     }
                     infoNew.setType(ImgEnum.img);
                     // 图片大于一张时 显示九宫格图
                     if (size > 1) {
                        infoNew.setW(1);
                        infoNew.setH(1);
                     }
                     listInfoNew.add(infoNew);
                  }
                  evaluateNew.setImgList(listInfoNew);
               }
               listNew.add(evaluateNew);
            }
            return new JsonPrimitive("");
         }
      });
      Gson gson = gsonBuilder.create();
      long count = goodsEvaluateService.countValidMaterials(type);
      JSONObject data = new JSONObject();
      data.put("count", count);
      data.put("list", gson.toJson(list));
      out.print(JsonUtil.loadTrueResult(data));
         GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
         gsonBuilder.registerTypeAdapter(ImgEnum.class, new JsonSerializer<ImgEnum>() {
            @Override
            public JsonElement serialize(ImgEnum value, Type theType, JsonSerializationContext context) {
               if (value == null) {
                  return new JsonPrimitive("");
               } else {
                  return new JsonPrimitive(value.getVlaue());
               }
            }
         }).registerTypeAdapter(BigDecimal.class, new JsonSerializer<BigDecimal>() {
            @Override
            public JsonElement serialize(BigDecimal value, Type theType, JsonSerializationContext context) {
               if (value == null) {
                  return new JsonPrimitive("");
               } else {
                  // 保留2位小数
                  return new JsonPrimitive(MoneyBigDecimalUtil.getWithNoZera(value) + "");
               }
            }
         }).registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
            @Override
            public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
               String desc = "";
               if (value != null) {
                  // 判断是否是同一天
                  Calendar calendar = Calendar.getInstance();
                  calendar.setTime(value);
                  int y1 = calendar.get(Calendar.YEAR);// 获取年份
                  int d1 = calendar.get(Calendar.DAY_OF_YEAR);// 获取年中第几天
                  Date nowDate = new Date();
                  Calendar calendar2 = Calendar.getInstance();
                  calendar2.setTime(nowDate);
                  int y2 = calendar2.get(Calendar.YEAR);// 获取年份
                  int d2 = calendar2.get(Calendar.DAY_OF_YEAR);// 获取年中第几天
                  long old = value.getTime();
                  long now = nowDate.getTime();
                  if (y1 == y2) {
                     if (d1 == d2) {
                        long cha = now - old;
                        if (cha < 1000 * 60 * 2L) {
                           desc = "刚刚";
                        } else if (cha < 1000 * 60 * 60L) {
                           desc = (cha / (1000 * 60)) + "分钟前";
                        } else {
                           desc = (cha / (1000 * 60 * 60)) + "小时前";
                        }
                     } else if (d2 - d1 == 1) {
                        desc = "昨天";
                     } else {
                        desc = (d2 - d1) + "天前";
                     }
                  } else {
                     int timeDistance = 0;
                     for (int i = y1; i < y2; i++) {
                        if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
                           timeDistance += 366; // 闰年
                        } else {
                           timeDistance += 365; // 不是闰年
                        }
                     }
                     desc = timeDistance + (d2 - d1) + "天前";
                  }
                  return new JsonPrimitive(desc);
               }
               return new JsonPrimitive("");
            }
         });
         Gson gson = gsonBuilder.create();
         long count = goodsEvaluateService.countValidMaterials(type);
         JSONArray jsonArray = new JSONArray();
         String listStr = gson.toJson(listNew);
         JSONArray array = JSONArray.fromObject(listStr);
         for (int i = 0; i < array.size(); i++) {
            Object object = array.get(i);
            JSONObject json = JSONObject.fromObject(object);
            Object shareNum = json.get("shareNum");
            if (shareNum != null) {
               int num = Integer.parseInt(shareNum.toString());
               if (num >= 100000000) {
                  double sales = num;
                  String salesCountMidea = String.format("%.1f", sales / 100000000);
                  json.put("shareNum", salesCountMidea + "亿");
               } else if (num >= 10000) {
                  double sales = num;
                  String salesCountMidea = String.format("%.1f", sales / 10000);
                  json.put("shareNum", salesCountMidea + "万");
               }
            }
            jsonArray.add(json);
         }
         JSONObject data = new JSONObject();
         data.put("count", count);
         data.put("list", jsonArray);
         out.print(JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         e.printStackTrace();
         out.print(JsonUtil.loadFalseResult(1, "查询信息失败"));
         LogHelper.errorDetailInfo(e);
      }
   }
   /**
    *
    * @param acceptData
    * @param uid
    * @param id
    * @param type
    *            1-放大 2-保存 3-分享
    * @param goodsId
    * @param goodsType
    * @param out
    */
   @RequestMapping(value = "evaluateShare", method = RequestMethod.POST)
   public void evaluateShare(AcceptData acceptData, Long uid, String id, Integer type, Long goodsId, Integer goodsType,
         PrintWriter out) {
      if (uid == null) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (StringUtil.isNullOrEmpty(id) || type == null) {
         out.print(JsonUtil.loadFalseResult("传递参数不能为空"));
         return;
      }
      if (type == 1 && (goodsId == null || goodsType == null)) {
         out.print(JsonUtil.loadFalseResult("商品参数不能为空"));
         return;
      }
      GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(id);
      if (goodsEvaluate == null) {
         out.print(JsonUtil.loadFalseResult("该内容已不存在"));
         return;
      }
      UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
      if (user == null) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
         out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
         return;
      }
      UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
      String relationId = null;
      if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
            && taoBaoInfo.getRelationValid() == true)
         relationId = taoBaoInfo.getRelationId();
      if (StringUtil.isNullOrEmpty(relationId)) {
         out.print(JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
         return;
      }
      String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
      if (StringUtil.isNullOrEmpty(inviteCode)) {
         out.print(JsonUtil.loadFalseResult(1, "邀请码未激活"));
         return;
      }
      List<ImgInfo> imgs = goodsEvaluate.getImgList();
      if (imgs == null) {
         out.print(JsonUtil.loadFalseResult("该图片内容已不存在"));
         return;
      }
      List<String> list = new ArrayList<>();
      for (ImgInfo imgInfo : imgs) {
         GoodsDetailVO goodsVO = imgInfo.getGoodsVO();
         if (goodsVO == null) {
            list.add(imgInfo.getUrl());
            continue;
      try {
         if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
         }
         if (type == 1) {
            String jumpLink = getJumpLink(goodsVO, user, inviteCode);
            if (!StringUtil.isNullOrEmpty(jumpLink)) {
               list.add(jumpLink);
         if (StringUtil.isNullOrEmpty(id) || type == null) {
            out.print(JsonUtil.loadFalseResult("传递参数不能为空"));
            return;
         }
         if (type == 1 && (goodsId == null || goodsType == null)) {
            out.print(JsonUtil.loadFalseResult("商品参数不能为空"));
            return;
         }
         GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(id);
         if (goodsEvaluate == null) {
            out.print(JsonUtil.loadFalseResult("该内容已不存在"));
            return;
         }
         UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
         if (user == null) {
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
         }
         if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
            out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
            return;
         }
         UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
         String relationId = null;
         if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
               && taoBaoInfo.getRelationValid() == true)
            relationId = taoBaoInfo.getRelationId();
         if (StringUtil.isNullOrEmpty(relationId)) {
            out.print(JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
            return;
         }
         String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
         if (StringUtil.isNullOrEmpty(inviteCode)) {
            out.print(JsonUtil.loadFalseResult(1, "邀请码未激活"));
            return;
         }
         List<ImgInfo> imgs = goodsEvaluate.getImgList();
         if (imgs == null) {
            out.print(JsonUtil.loadFalseResult("该图片内容已不存在"));
            return;
         }
         List<String> list = new ArrayList<>();
         Integer dynamicType = goodsEvaluate.getDynamicType();
         if (dynamicType == null || dynamicType.intValue() == 2) {
            for (ImgInfo imgInfo : imgs) {
               if (imgInfo.getType() == ImgEnum.goods || imgInfo.getType() == ImgEnum.video)
                  continue;
               if (imgInfo.getType() == ImgEnum.img)
                  list.add(StringUtil.isNullOrEmpty(imgInfo.getUrlHD()) ? imgInfo.getUrl() : imgInfo.getUrlHD());
               else if (imgInfo.getType() == ImgEnum.activity)
                  if (!StringUtil.isNullOrEmpty(imgInfo.getActivityPic())) {
                     list.add(imgInfo.getActivityPic());
                  }
            }
         } else {
            if (goodsVO.getGoodsId().longValue() == goodsId.longValue()
                  && goodsVO.getGoodsType() == goodsType.intValue()) {
               String jumpLink = getJumpLink(goodsVO, user, inviteCode);
               if (!StringUtil.isNullOrEmpty(jumpLink)) {
                  list.add(jumpLink);
            // 单品
            if (goodsEvaluate.getType() == EvaluateEnum.single) {
               for (ImgInfo imgInfo : imgs) {
                  if (imgInfo.getType() == ImgEnum.video)
                     continue;
                  GoodsDetailVO goodsVO = imgInfo.getGoodsVO();
                  if (goodsVO == null) {
                     list.add(StringUtil.isNullOrEmpty(imgInfo.getUrlHD()) ? imgInfo.getUrl()
                           : imgInfo.getUrlHD());
                     continue;
                  }
                  String jumpLink = getJumpLink(goodsVO, user, relationId, inviteCode, imgInfo.getUrl());
                  if (!StringUtil.isNullOrEmpty(jumpLink)) {
                     list.add(jumpLink);
                  }
               }
            } else if (goodsEvaluate.getType() == EvaluateEnum.multiple) {
               if (type == 1) {
                  for (ImgInfo imgInfo : imgs) {
                     if (imgInfo.getGoodsVO() != null)
                        if (imgInfo.getGoodsVO().getGoodsId().longValue() == goodsId.longValue()
                              && imgInfo.getGoodsVO().getGoodsType() == goodsType.intValue()) {
                           String jumpLink = getJumpLink(imgInfo.getGoodsVO(), user, relationId, inviteCode,
                                 imgInfo.getUrl());
                           if (!StringUtil.isNullOrEmpty(jumpLink)) {
                              list.add(jumpLink);
                           }
                           break;
                        }
                  }
               } else if (type == 2 || type == 3) {
                  for (ImgInfo imgInfo : imgs) {
                     if (imgInfo.getGoodsVO() != null) {
                        String jumpLink = getJumpLink(imgInfo.getGoodsVO(), user, relationId, inviteCode,
                              imgInfo.getUrl());
                        if (!StringUtil.isNullOrEmpty(jumpLink)) {
                           list.add(jumpLink);
                        }
                     }
                  }
               }
            } else if (goodsEvaluate.getType() == EvaluateEnum.activity) {
               for (ImgInfo imgInfo : imgs) {
                  if (imgInfo.getType() == ImgEnum.goods || imgInfo.getType() == ImgEnum.video)
                     continue;
                  if (imgInfo.getType() == ImgEnum.img)
                     list.add(StringUtil.isNullOrEmpty(imgInfo.getUrlHD()) ? imgInfo.getUrl()
                           : imgInfo.getUrlHD());
                  else if (imgInfo.getType() == ImgEnum.activity)
                     if (!StringUtil.isNullOrEmpty(imgInfo.getActivityPic())) {
                        list.add(imgInfo.getActivityPic());
                     } else if (!StringUtil.isNullOrEmpty(imgInfo.getUrl())) {
                        list.add(imgInfo.getUrl());
                     }
               }
            }
         }
      }
      Integer shareCount = goodsEvaluate.getShareNum();
      if (shareCount == null) {
         shareCount = 0;
      }
         Integer shareCount = goodsEvaluate.getShareNum();
         if (shareCount == null) {
            shareCount = 0;
         }
      if (type == 3) {
         shareCount++;
         goodsEvaluateService.addShareNum(id);
      }
         if (type == 3) {
            shareCount++;
            goodsEvaluateService.addShareNum(id);
      if (list.size() == 0) {
         out.print(JsonUtil.loadFalseResult("该信息已下架"));
            executor.execute(new Runnable() {
               @Override
               public void run() { // 添加每日统计
                  dailyCountMomentsService.addShareClick();
               }
            });
         }
         if (list.size() == 0) {
            out.print(JsonUtil.loadFalseResult("该信息已下架"));
            return;
         }
         JSONObject data = new JSONObject();
         data.put("count", shareCount);
         data.put("list", list);
         out.print(JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult("分享图生成失败"));
         return;
      }
      JSONObject data = new JSONObject();
      data.put("count", shareCount);
      data.put("list", list);
      out.print(JsonUtil.loadTrueResult(data));
   }
   private String getJumpLink(GoodsDetailVO goodsVO, UserInfo user, String inviteCode) {
   private String getJumpLink(GoodsDetailVO goodsVO, UserInfo user, String relationId, String inviteCode,
         String mainPic) {
      String jumpLink = null;
      if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
         String url = String.format("http://%s%s?uid=%s&id=%s&appType=flq", configService.getH5Host(),
               Constant.systemCommonConfig.getShareGoodsPagePath(),
               AESUtil.encrypt(user.getId() + "", Constant.UIDAESKEY), goodsVO.getGoodsId() + "");
         String shortLink = HttpUtil.getShortLink(url);
         if (!StringUtil.isNullOrEmpty(shortLink)) {
            url = shortLink;
         TaoBaoLink taoBaoLink = null;
         try {
            taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(user.getId(), goodsVO.getGoodsId(), relationId);
         } catch (ShareGoodsException e) {
            e.printStackTrace();
         }
         jumpLink = ShareControllerV2.getERCodeContentNew(
               configService.get(ConfigKeyEnum.taobaoShareQrcodeText.getKey()), taoBaoLink.getGoods(),
               TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
      } else if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_JD) {
         JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsVO.getGoodsId());
         if (jdGoods == null) {
@@ -813,7 +1012,7 @@
      }
      FileUploadResult uploadResult = qrCodeService.drawDynamicGoodsPoster(jumpLink, user.getPortrait(), inviteCode,
            goodsVO);
            mainPic, goodsVO);
      if (uploadResult != null) {
         return uploadResult.getUrl();
      }
@@ -821,7 +1020,7 @@
   }
   /**
    * 评论复制
    * 评论复制-H5
    * 
    * @param acceptData
    * @param id
@@ -865,17 +1064,548 @@
      }
      String text = "";
      CommentInfo comment = null;
      List<CommentInfo> comments = goodsEvaluate.getComments();
      if (comments != null) {
         for (CommentInfo commentInfo : comments) {
            if (cid.equals(commentInfo.getId())) {
               text = commentInfo.getContent();
               comment = commentInfo;
               break;
            }
         }
      }
      String newText = text; // 非通用券需要验证
      if (comment != null && (comment.getNeedSpin() == null || comment.getNeedSpin())) {
         try {
            newText = convertLinkManager.convertLinkFromText(text, uid, true);
         } catch (ConvertLinkExceptionException e) {
            if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
               out.print(JsonUtil.loadFalseResult("评论生成失败"));
               return;
            }
         } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
            out.print(JsonUtil.loadFalseResult("评论生成失败"));
            return;
         }
      }
      // 替换价格
      if (goodsEvaluate.getType() == EvaluateEnum.single) {
         GoodsDetailVO goods = goodsEvaluate.getGoods();
         newText = newText.replace("[原价]", MoneyBigDecimalUtil.getWithNoZera(goods.getZkPrice()) + "");
         if (!goods.isHasCoupon()) {
            newText = newText.replace("领券抢购", "抢购");
            newText = newText.replace("【券后价】[券后价]元", "");
         } else {
            newText = newText.replace("[券后价]", MoneyBigDecimalUtil.getWithNoZera(goods.getCouponPrice()) + "");
         }
         newText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n");
      }
      JSONObject data = new JSONObject();
      data.put("text", text);
      data.put("text", newText);
      out.print(JsonUtil.loadTrueResult(data));
      executor.execute(new Runnable() {
         @Override
         public void run() { // 添加每日统计
            dailyCountMomentsService.addCopyComment();
         }
      });
   }
   /**
    * 评论复制-专题
    *
    * @param acceptData
    * @param id
    * @param out
    */
   @RequestMapping(value = "copySpecialComment", method = RequestMethod.POST)
   public void copySpecialComment(AcceptData acceptData, Long uid, Long id, PrintWriter out) {
      if (uid == null || id == null) {
         out.print(JsonUtil.loadFalseResult("参数不能为空"));
         return;
      }
      CommonShareInfo shareInfo = commonShareInfoService.getByPidAndType(id, CommonShareInfoEnum.special.name());
      if (shareInfo == null || StringUtil.isNullOrEmpty(shareInfo.getComment())) {
         out.print(JsonUtil.loadFalseResult("该内容已不存在"));
         return;
      }
      UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
      if (user == null) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
         out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
         return;
      }
      UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
      String relationId = null;
      if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
            && taoBaoInfo.getRelationValid() == true)
         relationId = taoBaoInfo.getRelationId();
      if (StringUtil.isNullOrEmpty(relationId)) {
         out.print(JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
         return;
      }
      String text = shareInfo.getComment();
      String newText = text;
      if (shareInfo.getNeedSpin() != null && shareInfo.getNeedSpin()) {
         try {
            newText = convertLinkManager.convertLinkFromText(text, uid, true);
         } catch (ConvertLinkExceptionException e) {
            if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
               out.print(JsonUtil.loadFalseResult("评论生成失败"));
               return;
            }
         } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
            out.print(JsonUtil.loadFalseResult("评论生成失败"));
            return;
         }
      }
      JSONObject data = new JSONObject();
      data.put("text", newText);
      out.print(JsonUtil.loadTrueResult(data));
   }
   @RequestMapping(value = "getActivityDetail")
   public void getActivityDetail(String callback, AcceptData acceptData, Long uid, String type, String id,
         PrintWriter out) {
      if (uid == null || StringUtil.isNullOrEmpty(id) || StringUtil.isNullOrEmpty(type)) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("参数不能为空"));
         return;
      }
      String title = "";
      String comment = "";
      String params = "";
      String desc = "";
      Date startTime = null;
      Date endTime = null;
      JumpDetailV2 jumpDetail = null;
      List<String> imgs = new ArrayList<>();
      if ("circle".equalsIgnoreCase(type)) { // 发圈活动
         GoodsEvaluate evaluate = goodsEvaluateService.getById(id);
         if (evaluate == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该活动已下架"));
            return;
         }
         title = evaluate.getTitle();
         List<CommentInfo> comments = evaluate.getComments();
         if (comments != null && comments.size() > 0) {
            comment = comments.get(0).getContent();
         }
         String jumpLink = null;
         if (!StringUtil.isNullOrEmpty(evaluate.getJumpLink())) {
            jumpLink = evaluate.getJumpLink();
         }
         List<ImgInfo> imgList = evaluate.getImgList();
         if (imgList != null && imgList.size() > 0) {
            for (ImgInfo imgInfo : imgList) {
               if (!StringUtil.isNullOrEmpty(imgInfo.getUrl())
                     && (imgInfo.getType() == ImgEnum.img || imgInfo.getType() == ImgEnum.activity)) {
                  imgs.add(imgInfo.getUrl());
               }
               if (imgInfo.getType() == ImgEnum.img || imgInfo.getType() == ImgEnum.activity) {
                  if (StringUtil.isNullOrEmpty(jumpLink) && !StringUtil.isNullOrEmpty(imgInfo.getActivityUrl())) {
                     jumpLink = imgInfo.getActivityUrl();
                  }
               }
            }
         }
         int platformCode = Constant.getPlatformCode(acceptData.getPlatform());
         jumpDetail = jumpDetailV2Service.getByTypeCache("web", platformCode,
               Integer.parseInt(acceptData.getVersion()));
         JSONObject inner = new JSONObject();
         inner.put("url", jumpLink);
         params = inner.toString();
      } else {
         long pid = Long.parseLong(id);
         if (CommonShareInfoEnum.special.name().equalsIgnoreCase(type)) {
            Special special = specialService.selectByPrimaryKey(pid);
            if (special == null) {
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该活动已下架"));
               return;
            }
            params = special.getParams();
            jumpDetail = special.getJumpDetail();
            if (!StringUtil.isNullOrEmpty(special.getPicture())) {
               imgs.add(special.getPicture());
            }
            title=special.getName();
            desc = special.getRemark();
            startTime = special.getStartTime();
            endTime = special.getEndTime();
         } else if (CommonShareInfoEnum.banner.name().equalsIgnoreCase(type)) {
            SwiperPicture swiper = swiperPictureService.selectByPrimaryKey(pid);
            if (swiper == null) {
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该活动已下架"));
               return;
            }
            params = swiper.getParams();
            jumpDetail = swiper.getJumpDetail();
            if (!StringUtil.isNullOrEmpty(swiper.getSrc())) {
               imgs.add(swiper.getSrc());
            }
            title=swiper.getTitle();
            desc = swiper.getRemark();
            startTime = swiper.getStartTime();
            endTime = swiper.getEndTime();
         }
         CommonShareInfo shareInfo = commonShareInfoService.getByPidAndType(pid, type);
         if (shareInfo != null && !StringUtil.isNullOrEmpty(shareInfo.getComment())) {
            comment = shareInfo.getComment();
         }
      }
      if (!StringUtil.isNullOrEmpty(comment)) { // 替换淘宝官方活动
         List<String> activityIdList = convertLinkManager.getTaoBaoOfficialActivityId(comment);
         for (String st : activityIdList)
            comment = comment.replace(st, "");
      }
      JSONObject data = new JSONObject();
      data.put("title", title);
      data.put("desc", desc);
      data.put("comment", comment);
      data.put("params", params);
      data.put("jumpDetail", jumpDetail);
      data.put("imgs", imgs);
      if (startTime != null) {
         data.put("startTime", TimeUtil.getGernalTime(startTime.getTime(), "yyyy.MM.dd"));
      }
      if (endTime != null) {
         data.put("endTime", TimeUtil.getGernalTime(endTime.getTime(), "yyyy.MM.dd"));
      }
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
   }
   /**
    * 评论复制-专题
    *
    * @param acceptData
    * @param id
    * @param out
    */
   @RequestMapping(value = "copyShareComment")
   public void copyShareComment(String callback, AcceptData acceptData, Long uid, String id, String type,
         PrintWriter out) {
      if (uid == null || StringUtil.isNullOrEmpty(id) || StringUtil.isNullOrEmpty(type)) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("参数不能为空"));
         return;
      }
      if ("circle".equalsIgnoreCase(type)) { // 发圈活动
         copyActivityComment(callback, acceptData, uid, id, out);
         return;
      }
      long pid = Long.parseLong(id);
      CommonShareInfo shareInfo = commonShareInfoService.getByPidAndType(pid, type);
      if (shareInfo == null || StringUtil.isNullOrEmpty(shareInfo.getComment())) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该内容已不存在"));
         return;
      }
      UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
      if (user == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
         JsonUtil.printMode(out, callback,
               JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
         return;
      }
      UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
      String relationId = null;
      if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
            && taoBaoInfo.getRelationValid() == true)
         relationId = taoBaoInfo.getRelationId();
      if (StringUtil.isNullOrEmpty(relationId)) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
         return;
      }
      String text = shareInfo.getComment();
      String newText = text;
      if (shareInfo.getNeedSpin() != null && shareInfo.getNeedSpin()) {
         try {
            newText = convertLinkManager.convertLinkFromText(text, uid, true);
         } catch (ConvertLinkExceptionException e) {
            if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
               return;
            }
         } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
            return;
         }
      }
      JSONObject data = new JSONObject();
      data.put("text", newText);
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
   }
   /**
    * 活动分享绘图
    * @Title: createActivityShareImg
    * @Description:
    * @param title
    * @param desc
    * @param imgUrl
    * @param erCodeContent
    * @return
    * String 返回类型
    * @throws
    */
   private String createActivityShareImg(String type, String id, String erCodeContent) {
      String title = "";
      String desc = "";
      String img = "";
      if ("circle".equalsIgnoreCase(type)) {
      } else if ("banner".equalsIgnoreCase(type)) {
         SwiperPicture picture = swiperPictureService.selectByPrimaryKey(Long.parseLong(id));
         title = picture.getTitle();
         desc = picture.getDesc();
         img = picture.getSrc();
      } else if ("special".equalsIgnoreCase(type)) {
         Special special = specialService.selectByPrimaryKey(Long.parseLong(id));
         title = special.getName();
         desc = special.getRemark();
         img = special.getPicture();
      }
      try {
         InputStream erCodeInputStream = null;
         erCodeInputStream = QRCodeUtil.getInstance(250).encode(erCodeContent);
         int[] size = new int[2];
         try {
            size = ImageUtil.getImgWidthAndHeight(img);
         } catch (MalformedURLException e) {
            e.printStackTrace();
         } catch (IOException e) {
            e.printStackTrace();
         }
         InputStream resultInputStream = ImageUtil.drawActivityShareImg(HttpUtil.getAsInputStream(img),
               (float) size[0] / size[1], title, desc, erCodeInputStream);
         if (resultInputStream != null) {
            String filePath = FilePathEnum.activityShare.getPath() + UUID.randomUUID().toString().replace("-", "")
                  + ".png";
            FileUploadResult result = COSManager.getInstance().uploadFile(resultInputStream, filePath);
            if (result != null)
               return result.getUrl();
         }
      } catch (Exception e1) {
         e1.printStackTrace();
      }
      return null;
   }
   /**
    * 评论复制-专题
    *
    * @param acceptData
    * @param id
    * @param out
    */
   @RequestMapping(value = "getActivityShareImg")
   public void getActivityShareImg(String callback, AcceptData acceptData, Long uid, String id, String type,
         PrintWriter out) {
      if (uid == null || StringUtil.isNullOrEmpty(id) || StringUtil.isNullOrEmpty(type)) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("参数不能为空"));
         return;
      }
      if ("circle".equalsIgnoreCase(type)) { // 发圈活动
         // copyActivityComment(callback, acceptData, uid, id, out);
         // TODO 分享发圈的图
         return;
      }
      long pid = Long.parseLong(id);
      CommonShareInfo shareInfo = commonShareInfoService.getByPidAndType(pid, type);
      if (shareInfo == null || StringUtil.isNullOrEmpty(shareInfo.getComment())) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该内容已不存在"));
         return;
      }
      UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
      if (user == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
         JsonUtil.printMode(out, callback,
               JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
         return;
      }
      UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
      String relationId = null;
      if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
            && taoBaoInfo.getRelationValid() == true)
         relationId = taoBaoInfo.getRelationId();
      if (StringUtil.isNullOrEmpty(relationId)) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
         return;
      }
      String text = shareInfo.getComment();
      String newText = text;
      String imgUrl = null;
      if (shareInfo.getNeedSpin() != null && shareInfo.getNeedSpin()) {
         try {
            String erCodeContent = "";
            newText = convertLinkManager.convertLinkFromText(text, uid, true);
            // 获取口令
            List<String> tokenList = TaoBaoUtil.getTokenListFromTextWithKuoHao(newText);
            if (tokenList != null && tokenList.size() > 0) {
               // 构造分享链接
               erCodeContent = ShareControllerV2.getTaoBaoActiivtyERCodeContentNew(
                     configService.get(ConfigKeyEnum.taobaoShareQrcodeText.getKey()), tokenList.get(0));
            } else {
               // 获取链接
               List<String> urlList = JDUtil.getJDShortLinksFromText(newText);
               if (urlList != null && urlList.size() > 0) {
                  erCodeContent = urlList.get(0);
               } else {
                  urlList = PinDuoDuoUtil.getPDDShortLinksFromText(newText);
                  if (urlList != null && urlList.size() > 0) {
                     erCodeContent = urlList.get(0);
                  }
               }
            }
            imgUrl = createActivityShareImg(type, id, erCodeContent);
         } catch (ConvertLinkExceptionException e) {
            if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
               return;
            }
         } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
            return;
         }
      }
      if (StringUtil.isNullOrEmpty(imgUrl)) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("分享图生成失败"));
      } else {
         JSONObject data = new JSONObject();
         data.put("text", newText);
         data.put("img", imgUrl);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      }
   }
   /**
    * 评论复制
    *
    * @param acceptData
    * @param id
    * @param out
    */
   private void copyActivityComment(String callback, AcceptData acceptData, Long uid, String id, PrintWriter out) {
      if (StringUtil.isNullOrEmpty(id)) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("id不能为空"));
         return;
      }
      GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(id);
      if (goodsEvaluate == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该内容已不存在"));
         return;
      }
      UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
      if (user == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
         JsonUtil.printMode(out, callback,
               JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
         return;
      }
      UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
      String relationId = null;
      if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
            && taoBaoInfo.getRelationValid() == true)
         relationId = taoBaoInfo.getRelationId();
      if (StringUtil.isNullOrEmpty(relationId)) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
         return;
      }
      String text = "";
      CommentInfo comment = null;
      List<CommentInfo> comments = goodsEvaluate.getComments();
      if (comments != null && comments.size() > 0) {
         CommentInfo info = comments.get(0);
         text = info.getContent();
         comment = info;
      }
      String newText = text; // 非通用券需要验证
      if (comment != null && (comment.getNeedSpin() == null || comment.getNeedSpin())) {
         try {
            newText = convertLinkManager.convertLinkFromText(text, uid, true);
         } catch (ConvertLinkExceptionException e) {
            if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
               return;
            }
         } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
            return;
         }
      }
      JSONObject data = new JSONObject();
      data.put("text", newText);
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      executor.execute(new Runnable() {
         @Override
         public void run() { // 添加每日统计
            dailyCountMomentsService.addCopyComment();
         }
      });
   }
}