admin
2025-02-25 30d8e227e8d823b6c38c3b9c90ac2df03b63befe
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java
@@ -1,39 +1,12 @@
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;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.*;
import com.yeshi.common.vo.ClientTextStyleVO;
import com.yeshi.fanli.dto.jd.JDCouponInfo;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.entity.SystemFunction;
import com.yeshi.fanli.entity.SystemPIDInfo;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.clazz.GoodsClass;
import com.yeshi.fanli.entity.bus.homemodule.CommonShareInfo;
@@ -53,9 +26,10 @@
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.exception.user.cloud.UserCloudException;
import com.yeshi.fanli.exception.goods.ConvertLinkException;
import com.yeshi.fanli.exception.pdd.PDDAuthException;
import com.yeshi.fanli.exception.pdd.PDDGoodsException;
import com.yeshi.fanli.exception.taobao.TaoBaoConvertLinkException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
import com.yeshi.fanli.service.inter.config.ConfigService;
@@ -63,1566 +37,1766 @@
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;
import com.yeshi.fanli.service.inter.pdd.PDDAuthService;
import com.yeshi.fanli.service.inter.user.QrCodeService;
import com.yeshi.fanli.service.inter.user.UserFunctionsLimitService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.cloud.UserCloudService;
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.service.manger.PIDManager;
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.service.manger.goods.TaoBaoLinkManager;
import com.yeshi.fanli.service.manger.goods.jd.JDConvertLinkManager;
import com.yeshi.fanli.service.manger.goods.pdd.PDDConvertLinkManager;
import com.yeshi.fanli.service.manger.goods.tb.TBConvertLinkManager;
import com.yeshi.fanli.util.*;
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.exception.ExceptionConstant;
import com.yeshi.fanli.util.goods.GoodsJumpUtil;
import com.yeshi.fanli.util.goods.GoodsTextUtil;
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.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.vo.dynamic.ArticleVO;
import com.yeshi.fanli.vo.goods.ConvertLinkJumpVO;
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 com.yeshi.fanli.vo.pdd.PDDConvertLinkResultVO;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.commons.beanutils.PropertyUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.*;
import org.yeshi.utils.entity.FileUploadResult;
import org.yeshi.utils.tencentcloud.COSManager;
import javax.annotation.Resource;
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.*;
/**
 * 动态
 *
 * @author Administrator
 *
 * @author Administrator
 */
@Controller
@RequestMapping("api/v2/dynamic")
public class DynamicControllerV2 {
   @Resource
   private HongBaoManageService hongBaoManageService;
    private Logger logger= LoggerFactory.getLogger(DynamicControllerV2.class);
   @Resource
   private TaoBaoGoodsBriefService taoBaoGoodsBriefService;
    @Resource
    private TaoBaoLinkManager taoBaoLinkManager;
   @Resource
   private JumpDetailV2Service jumpDetailV2Service;
    @Resource
    private JumpDetailV2Service jumpDetailV2Service;
   @Resource
   private DynamicInfoService dynamicInfoService;
    @Resource
    private DynamicInfoService dynamicInfoService;
   @Resource
   private SpecialService specialService;
    @Resource
    private SpecialService specialService;
   @Resource
   private ArticleOfficialService articleOfficialService;
    @Resource
    private ArticleOfficialService articleOfficialService;
   @Resource
   private SwiperPictureService swiperPictureService;
    @Resource
    private SwiperPictureService swiperPictureService;
   @Resource
   private ConfigService configService;
    @Resource
    private ConfigService configService;
   @Resource
   private GoodsEvaluateService goodsEvaluateService;
    @Resource
    private GoodsEvaluateService goodsEvaluateService;
   @Resource
   private UserInfoService userInfoService;
   @Resource
   private UserInfoExtraService userInfoExtraService;
    @Resource
    private UserInfoService userInfoService;
    @Resource
    private UserInfoExtraService userInfoExtraService;
   @Resource
   private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
    @Resource
    private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
   @Resource
   private JDGoodsCacheUtil jdGoodsCacheUtil;
    @Resource
    private JDGoodsCacheUtil jdGoodsCacheUtil;
   @Resource
   private QrCodeService qrCodeService;
    @Resource
    private QrCodeService qrCodeService;
   @Resource
   private ConvertLinkManager convertLinkManager;
    @Resource
    private ConvertLinkManager convertLinkManager;
   @Resource
   private ShareGoodsService shareGoodsService;
    @Resource
    private TBConvertLinkManager tbConvertLinkManager;
   @Resource
   private DailyCountMomentsService dailyCountMomentsService;
    @Resource
    private JDConvertLinkManager jdConvertLinkManager;
   @Resource
   private CommonShareInfoService commonShareInfoService;
    @Resource
    private PDDConvertLinkManager pddConvertLinkManager;
   @Resource
   private UserCloudService userCloudService;
    @Resource
    private DailyCountMomentsService dailyCountMomentsService;
   @Resource(name = "taskExecutor")
   private TaskExecutor executor;
    @Resource
    private CommonShareInfoService commonShareInfoService;
   private final static long TYPE_REXIAO = 1;// 热销
   private final static long TYPE_TUIJIAN = 2;// 推荐
   private final static long TYPE_HAODIAN = 3;// 好店
   private final static long TYPE_YAOQING = 4;// 邀请
   private final static long TYPE_HUODONG = 5;// 活动
   private final static long TYPE_XUEYUAN = 6;// 学院
   private final static long TYPE_FAQUAN = 7;// 发圈
   private final static long TYPE_SUCAI = 8;// 素材
    @Resource
    private PDDAuthService pddAuthService;
   private static Map<Long, GoodsClass> classMap = null;
    @Resource
    private UserFunctionsLimitService userFunctionsLimitService;
   private Map<Long, GoodsClass> getAllDynamicClass() {
      if (classMap != null && classMap.size() > 0)
         return classMap;
      classMap = new HashMap<Long, GoodsClass>();
      List<GoodsClass> listSub = new ArrayList<GoodsClass>();
      listSub.add(new GoodsClass(0L, "今日单品"));
      listSub.addAll(DaTaoKeUtil.goodsClasses);
      GoodsClass menu = new GoodsClass(TYPE_REXIAO, "热销");
      menu.setListSub(listSub);
      classMap.put(TYPE_REXIAO, menu);
    @Resource
    private PIDManager pidManager;
      menu = new GoodsClass(TYPE_TUIJIAN, "推荐");
      menu.setListSub(new ArrayList<GoodsClass>());
      classMap.put(TYPE_TUIJIAN, menu);
    @Resource(name = "taskExecutor")
    private TaskExecutor executor;
      menu = new GoodsClass(TYPE_HAODIAN, "好店");
      menu.setListSub(new ArrayList<GoodsClass>());
      classMap.put(TYPE_HAODIAN, menu);
    private final static long TYPE_REXIAO = 1;// 热销
    private final static long TYPE_TUIJIAN = 2;// 推荐
    private final static long TYPE_HAODIAN = 3;// 好店
    private final static long TYPE_YAOQING = 4;// 邀请
    private final static long TYPE_HUODONG = 5;// 活动
    private final static long TYPE_XUEYUAN = 6;// 学院
    private final static long TYPE_FAQUAN = 7;// 发圈
    private final static long TYPE_SUCAI = 8;// 素材
      menu = new GoodsClass(TYPE_YAOQING, "邀请");
      menu.setListSub(new ArrayList<GoodsClass>());
      classMap.put(TYPE_YAOQING, menu);
    private static Map<Long, GoodsClass> classMap = null;
      menu = new GoodsClass(TYPE_HUODONG, "活动");
      List<GoodsClass> sub5 = new ArrayList<GoodsClass>();
      sub5.add(new GoodsClass(0L, "全部"));
      sub5.add(new GoodsClass(1L, "淘宝"));
      sub5.add(new GoodsClass(2L, "京东"));
      sub5.add(new GoodsClass(3L, "拼多多"));
      menu.setListSub(sub5);
      classMap.put(TYPE_HUODONG, menu);
    private Map<Long, GoodsClass> getAllDynamicClass() {
        if (classMap != null && classMap.size() > 0)
            return classMap;
        classMap = new HashMap<Long, GoodsClass>();
        List<GoodsClass> listSub = new ArrayList<GoodsClass>();
        listSub.add(new GoodsClass(0L, "今日单品"));
        listSub.addAll(DaTaoKeUtil.goodsClasses);
      menu = new GoodsClass(TYPE_XUEYUAN, "学院");
      menu.setListSub(new ArrayList<GoodsClass>());
      classMap.put(TYPE_XUEYUAN, menu);
        GoodsClass menu = new GoodsClass(TYPE_REXIAO, "热销");
        menu.setListSub(listSub);
        classMap.put(TYPE_REXIAO, menu);
      menu = new GoodsClass(TYPE_FAQUAN, "发圈");
      menu.setListSub(new ArrayList<GoodsClass>());
      classMap.put(TYPE_FAQUAN, menu);
        menu = new GoodsClass(TYPE_TUIJIAN, "推荐");
        menu.setListSub(new ArrayList<GoodsClass>());
        classMap.put(TYPE_TUIJIAN, menu);
      menu = new GoodsClass(TYPE_SUCAI, "素材");
      menu.setListSub(new ArrayList<GoodsClass>());
      classMap.put(TYPE_SUCAI, menu);
      return classMap;
   }
        menu = new GoodsClass(TYPE_HAODIAN, "好店");
        menu.setListSub(new ArrayList<GoodsClass>());
        classMap.put(TYPE_HAODIAN, menu);
   /**
    * 查询顶部分类
    *
    * @param acceptData
    * @param page
    * @param cid
    * @param out
    */
   @RequestMapping(value = "getClass", method = RequestMethod.POST)
   public void getClass(AcceptData acceptData, Long cid, PrintWriter out) {
      // ios 只返回子集分类
      if (cid != null) {
         Map<Long, GoodsClass> map = getAllDynamicClass();
         JSONObject data = new JSONObject();
         data.put("list", JsonUtil.getApiCommonGson().toJson(map.get(cid).getListSub()));
         out.print(JsonUtil.loadTrueResult(data));
         return;
      }
        menu = new GoodsClass(TYPE_YAOQING, "邀请");
        menu.setListSub(new ArrayList<GoodsClass>());
        classMap.put(TYPE_YAOQING, menu);
      // Android 返回分类以及顶部数据
      List<GoodsClass> listSub = new ArrayList<GoodsClass>();
      listSub.add(new GoodsClass(0L, "今日单品"));
      listSub.addAll(DaTaoKeUtil.goodsClasses);
        menu = new GoodsClass(TYPE_HUODONG, "活动");
        List<GoodsClass> sub5 = new ArrayList<GoodsClass>();
        sub5.add(new GoodsClass(0L, "全部"));
        sub5.add(new GoodsClass(1L, "淘宝"));
        sub5.add(new GoodsClass(2L, "京东"));
        sub5.add(new GoodsClass(3L, "拼多多"));
        menu.setListSub(sub5);
        classMap.put(TYPE_HUODONG, menu);
      GoodsClass menu1 = new GoodsClass(1L, "热销");
      menu1.setListSub(listSub);
        menu = new GoodsClass(TYPE_XUEYUAN, "学院");
        menu.setListSub(new ArrayList<GoodsClass>());
        classMap.put(TYPE_XUEYUAN, menu);
      GoodsClass menu2 = new GoodsClass(2L, "推荐");
      menu2.setListSub(new ArrayList<GoodsClass>());
        menu = new GoodsClass(TYPE_FAQUAN, "发圈");
        menu.setListSub(new ArrayList<GoodsClass>());
        classMap.put(TYPE_FAQUAN, menu);
      GoodsClass menu3 = new GoodsClass(3L, "好店");
      menu3.setListSub(new ArrayList<GoodsClass>());
        menu = new GoodsClass(TYPE_SUCAI, "素材");
        menu.setListSub(new ArrayList<GoodsClass>());
        classMap.put(TYPE_SUCAI, menu);
        return classMap;
    }
      GoodsClass menu4 = new GoodsClass(4L, "邀请");
      menu4.setListSub(new ArrayList<GoodsClass>());
    /**
     * 查询顶部分类
     *
     * @param acceptData
     * @param cid
     * @param out
     */
    @RequestMapping(value = "getClass", method = RequestMethod.POST)
    public void getClass(AcceptData acceptData, Long cid, PrintWriter out) {
        // ios 只返回子集分类
        if (cid != null) {
            Map<Long, GoodsClass> map = getAllDynamicClass();
            JSONObject data = new JSONObject();
            data.put("list", JsonUtil.getApiCommonGson().toJson(map.get(cid).getListSub()));
            out.print(JsonUtil.loadTrueResult(data));
            return;
        }
      GoodsClass menu5 = new GoodsClass(5L, "活动");
      List<GoodsClass> sub5 = new ArrayList<GoodsClass>();
      sub5.add(new GoodsClass(0L, "全部"));
      sub5.add(new GoodsClass(1L, "淘宝"));
      sub5.add(new GoodsClass(2L, "京东"));
      sub5.add(new GoodsClass(3L, "拼多多"));
      menu5.setListSub(sub5);
        // Android 返回分类以及顶部数据
        List<GoodsClass> listSub = new ArrayList<GoodsClass>();
        listSub.add(new GoodsClass(0L, "今日单品"));
        listSub.addAll(DaTaoKeUtil.goodsClasses);
      GoodsClass menu6 = new GoodsClass(6L, "学院");
      menu6.setListSub(new ArrayList<GoodsClass>());
        GoodsClass menu1 = new GoodsClass(1L, "热销");
        menu1.setListSub(listSub);
      List<GoodsClass> list = new ArrayList<GoodsClass>();
        GoodsClass menu2 = new GoodsClass(2L, "推荐");
        menu2.setListSub(new ArrayList<GoodsClass>());
      Map<Long, GoodsClass> map = getAllDynamicClass();
        GoodsClass menu3 = new GoodsClass(3L, "好店");
        menu3.setListSub(new ArrayList<GoodsClass>());
      if (VersionUtil.greaterThan_2_0_7(acceptData.getPlatform(), acceptData.getVersion())) {
         // 2.0.7返回发圈+活动+学院+素材
         list.add(map.get(TYPE_FAQUAN));
         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));
         list.add(map.get(TYPE_HUODONG));
         list.add(map.get(TYPE_TUIJIAN));
         // list.add(map.get(TYPE_XUEYUAN));
         list.add(map.get(TYPE_YAOQING));
      } else if (VersionUtil.greaterThan_2_0_5(acceptData.getPlatform(), acceptData.getVersion())) {
         // 2.0.5返回热销+活动+推荐+邀请
         list.add(map.get(TYPE_REXIAO));
         list.add(map.get(TYPE_HUODONG));
         list.add(map.get(TYPE_TUIJIAN));
         list.add(map.get(TYPE_YAOQING));
      } else {
         // 2.0.5以前的版本返回热销+活动+推荐+好店+邀请
         list.add(map.get(TYPE_REXIAO));
         list.add(map.get(TYPE_HUODONG));
         list.add(map.get(TYPE_TUIJIAN));
         list.add(map.get(TYPE_HAODIAN));
         list.add(map.get(TYPE_YAOQING));
      }
        GoodsClass menu4 = new GoodsClass(4L, "邀请");
        menu4.setListSub(new ArrayList<GoodsClass>());
      JSONObject data = new JSONObject();
      data.put("list", JsonUtil.getApiCommonGson().toJson(list));
      out.print(JsonUtil.loadTrueResult(data));
   }
        GoodsClass menu5 = new GoodsClass(5L, "活动");
        List<GoodsClass> sub5 = new ArrayList<GoodsClass>();
        sub5.add(new GoodsClass(0L, "全部"));
        sub5.add(new GoodsClass(1L, "淘宝"));
        sub5.add(new GoodsClass(2L, "京东"));
        sub5.add(new GoodsClass(3L, "拼多多"));
        menu5.setListSub(sub5);
   /**
    * 动态商品列表
    *
    * @param acceptData
    * @param page
    * @param cid
    * @param subId
    * @param out
    */
   @RequestMapping(value = "getList", method = RequestMethod.POST)
   public void getList(AcceptData acceptData, Integer page, Long cid, Long subId, PrintWriter out) {
      if (cid == null) {
         out.print(JsonUtil.loadFalseResult("主分类id不能为空"));
         return;
      }
        GoodsClass menu6 = new GoodsClass(6L, "学院");
        menu6.setListSub(new ArrayList<GoodsClass>());
      if (cid != null) {
         if (cid == 5) { // 活动主题
            getSpecialList(acceptData, page, subId, out);
            return;
         } else if (cid == 6) { // 学院
            getArticleList(acceptData, page, null, false, out);
            return;
         }
      }
        List<GoodsClass> list = new ArrayList<GoodsClass>();
      long count = 0;
        Map<Long, GoodsClass> map = getAllDynamicClass();
      int platform = 1;
      if ("ios".equalsIgnoreCase(acceptData.getPlatform())) {
         platform = 2;
      }
        if (VersionUtil.greaterThan_2_0_7(acceptData.getPlatform(), acceptData.getVersion())) {
            // 2.0.7返回发圈+活动+学院+素材
            if (acceptData.getSystem() == SystemEnum.blks) {
                list.add(map.get(TYPE_FAQUAN));
                list.add(map.get(TYPE_HUODONG));
                // list.add(map.get(TYPE_XUEYUAN));
                // 不返回素材了
                // list.add(map.get(TYPE_SUCAI));
            } else {
                list.add(map.get(TYPE_FAQUAN));
            }
        } else if (VersionUtil.greaterThan_2_0_6(acceptData.getPlatform(), acceptData.getVersion())) {
            // 2.0.6返回热销+活动+推荐+学院+邀请
            list.add(map.get(TYPE_REXIAO));
            list.add(map.get(TYPE_HUODONG));
            list.add(map.get(TYPE_TUIJIAN));
            // list.add(map.get(TYPE_XUEYUAN));
            list.add(map.get(TYPE_YAOQING));
        } else if (VersionUtil.greaterThan_2_0_5(acceptData.getPlatform(), acceptData.getVersion())) {
            // 2.0.5返回热销+活动+推荐+邀请
            list.add(map.get(TYPE_REXIAO));
            list.add(map.get(TYPE_HUODONG));
            list.add(map.get(TYPE_TUIJIAN));
            list.add(map.get(TYPE_YAOQING));
        } else {
            // 2.0.5以前的版本返回热销+活动+推荐+好店+邀请
            list.add(map.get(TYPE_REXIAO));
            list.add(map.get(TYPE_HUODONG));
            list.add(map.get(TYPE_TUIJIAN));
            list.add(map.get(TYPE_HAODIAN));
            list.add(map.get(TYPE_YAOQING));
        }
      int version = Integer.parseInt(acceptData.getVersion());
      List<DynamicInfo> list = dynamicInfoService.queryV2(platform, version, (page - 1) * Constant.PAGE_SIZE,
            Constant.PAGE_SIZE, cid, subId);
      if (list == null) {
         list = new ArrayList<DynamicInfo>();
      } else {
         count = dynamicInfoService.count(cid, subId);
      }
        JSONObject data = new JSONObject();
        data.put("list", JsonUtil.getApiCommonGson().toJson(list));
        out.print(JsonUtil.loadTrueResult(data));
    }
      JSONObject data = new JSONObject();
      data.put("count", count);
      data.put("list", getGson().toJson(list));
      out.print(JsonUtil.loadTrueResult(data));
   }
    /**
     * 动态商品列表
     *
     * @param acceptData
     * @param page
     * @param cid
     * @param subId
     * @param out
     */
    @RequestMapping(value = "getList", method = RequestMethod.POST)
    public void getList(AcceptData acceptData, Integer page, Long cid, Long subId, PrintWriter out) {
        if (cid == null) {
            out.print(JsonUtil.loadFalseResult("主分类id不能为空"));
            return;
        }
   /**
    * 活动列表
    *
    * @param acceptData
    * @param out
    */
   private void getSpecialList(AcceptData acceptData, Integer page, Long subId, PrintWriter out) {
      if (subId == null) {
         out.print(JsonUtil.loadFalseResult("分类id不能为空"));
         return;
      }
        if (cid != null) {
            if (cid == 5) { // 活动主题
                getSpecialList(acceptData, page, subId, out);
                return;
            } else if (cid == 6) { // 学院
                getArticleList(acceptData, page, null, false, out);
                return;
            }
        }
      // 平台区分
      int platformCode = Constant.getPlatformCode(acceptData.getPlatform());
      List<String> listKey = new ArrayList<String>();
        long count = 0;
      if (subId == 1) { // 淘宝
         listKey.add("special_channel_tb");
      } else if (subId == 2) { // 京东
         listKey.add("special_channel_jd");
      } else if (subId == 3) { // 拼多多
         listKey.add("special_channel_pdd");
      } else { // 全部
         listKey.add("special_channel_tb");
         listKey.add("special_channel_jd");
         listKey.add("special_channel_pdd");
      }
        int platform = 1;
        if ("ios".equalsIgnoreCase(acceptData.getPlatform())) {
            platform = 2;
        }
      List<SpecialVO> list = specialService.listByPlaceKeyHasLabel((page - 1) * Constant.PAGE_SIZE,
            Constant.PAGE_SIZE, listKey, platformCode, Integer.parseInt(acceptData.getVersion()));
        int version = Integer.parseInt(acceptData.getVersion());
        List<DynamicInfo> list = dynamicInfoService.queryV2(platform, version, (page - 1) * Constant.PAGE_SIZE,
                Constant.PAGE_SIZE, cid, subId);
        if (list == null) {
            list = new ArrayList<DynamicInfo>();
        } else {
            count = dynamicInfoService.count(cid, subId);
        }
      long time = System.currentTimeMillis();
        JSONObject data = new JSONObject();
        data.put("count", count);
        data.put("list", getGson().toJson(list));
        out.print(JsonUtil.loadTrueResult(data));
    }
      // 删除尚未启用的过期的
      for (int i = 0; i < list.size(); i++) {
         Special special = list.get(i);
         if (special.getState() == 1L) {
            continue;
         }
    /**
     * 活动列表
     *
     * @param acceptData
     * @param out
     */
    private void getSpecialList(AcceptData acceptData, Integer page, Long subId, PrintWriter out) {
        if (subId == null) {
            out.print(JsonUtil.loadFalseResult("分类id不能为空"));
            return;
        }
         // 是否活动已过期
         if (special.getStartTime() != null && special.getEndTime() != null) {
            if (time < special.getStartTime().getTime() || time > special.getEndTime().getTime()) {
               continue;
            } else {
               special.setTimeTask(true);
               special.setCountDownTime((special.getEndTime().getTime() - time) / 1000);
            }
         }
        // 平台区分
        int platformCode = Constant.getPlatformCode(acceptData.getPlatform());
        List<String> listKey = new ArrayList<String>();
         // 设置标签
         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);
         }
        if (subId == 1) { // 淘宝
            listKey.add("special_channel_tb");
        } else if (subId == 2) { // 京东
            listKey.add("special_channel_jd");
        } else if (subId == 3) { // 拼多多
            listKey.add("special_channel_pdd");
        } else { // 全部
            listKey.add("special_channel_tb");
            listKey.add("special_channel_jd");
            listKey.add("special_channel_pdd");
        }
      }
        List<SpecialVO> list = specialService.listByPlaceKeyHasLabel((page - 1) * Constant.PAGE_SIZE,
                Constant.PAGE_SIZE, listKey, platformCode, Integer.parseInt(acceptData.getVersion()), acceptData.getSystem());
      long count = specialService.countByPlaceKeyList(listKey, platformCode,
            Integer.parseInt(acceptData.getVersion()));
        long time = System.currentTimeMillis();
      GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
      Gson gson = gsonBuilder.create();
      JSONObject data = new JSONObject();
      data.put("count", count);
      data.put("list", gson.toJson(list));
      out.print(JsonUtil.loadTrueResult(data));
   }
        // 删除尚未启用的过期的
        for (int i = 0; i < list.size(); i++) {
            Special special = list.get(i);
            if (special.getState() == 1L) {
                continue;
            }
   /**
    * 时间处理
    *
    * @return
    */
   private Gson getGson() {
      GsonBuilder gb = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder());
      gb.excludeFieldsWithoutExposeAnnotation();
      gb.registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
         @Override
         public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
            String desc = "";
            if (value != null) {
               // 判断是否是同一天
            // 是否活动已过期
            if (special.getStartTime() != null && special.getEndTime() != null) {
                if (time < special.getStartTime().getTime() || time > special.getEndTime().getTime()) {
                    continue;
                } else {
                    special.setTimeTask(true);
                    special.setCountDownTime((special.getEndTime().getTime() - time) / 1000);
                }
            }
               Calendar calendar = Calendar.getInstance();
               calendar.setTime(value);
               int y1 = calendar.get(Calendar.YEAR);// 获取年份
               int d1 = calendar.get(Calendar.DAY_OF_YEAR);// 获取年中第几天
            // 设置标签
            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);
            }
               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) + "天前";
               }
        long count = specialService.countByPlaceKeyList(listKey, platformCode,
                Integer.parseInt(acceptData.getVersion()), acceptData.getSystem());
               return new JsonPrimitive(desc);
            }
        GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
        Gson gson = gsonBuilder.create();
        JSONObject data = new JSONObject();
        data.put("count", count);
        data.put("list", gson.toJson(list));
        out.print(JsonUtil.loadTrueResult(data));
    }
            return new JsonPrimitive("");
         }
      });
    /**
     * 时间处理
     *
     * @return
     */
    private Gson getGson() {
        GsonBuilder gb = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder());
        gb.excludeFieldsWithoutExposeAnnotation();
        gb.registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
            @Override
            public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
                String desc = "";
                if (value != null) {
                    // 判断是否是同一天
      Gson gson = gb.create();
      return gson;
   }
                    Calendar calendar = Calendar.getInstance();
                    calendar.setTime(value);
                    int y1 = calendar.get(Calendar.YEAR);// 获取年份
                    int d1 = calendar.get(Calendar.DAY_OF_YEAR);// 获取年中第几天
   /**
    * 活动列表
    *
    * @param acceptData
    * @param out
    */
   private void getArticleList(AcceptData acceptData, Integer page, String key, boolean search, PrintWriter out) {
      List<ArticleVO> list = articleOfficialService.queryValid((page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE,
            key);
      if (list != null) {
         for (ArticleVO article : list) {
            String tags = article.getTags();
            if (StringUtil.isNullOrEmpty(tags)) {
               continue;
            }
                    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);// 获取年中第几天
            String[] arrayTags = tags.split("\\s+");
            if (arrayTags == null || arrayTags.length == 0) {
               continue;
            }
                    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) + "天前";
                    }
            String[] arrayTagsColour = null;
            String tagsColour = article.getTagsColour();
            if (!StringUtil.isNullOrEmpty(tagsColour)) {
               arrayTagsColour = tagsColour.split("\\s+");
            }
                    return new JsonPrimitive(desc);
                }
            String color = "#FE0014";
            List<ClientTextStyleVO> labels = new ArrayList<ClientTextStyleVO>();
            for (int i = 0; i < arrayTags.length; i++) {
               String tag = arrayTags[i];
               if (arrayTagsColour != null && arrayTagsColour.length == arrayTags.length) {
                  color = arrayTagsColour[i];
               }
               ClientTextStyleVO styleVO = new ClientTextStyleVO();
               styleVO.setColor(color);
               styleVO.setContent(tag);
               labels.add(styleVO);
            }
            article.setLabels(labels);
         }
      }
                return new JsonPrimitive("");
            }
        });
      GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
      Gson gson = gsonBuilder.create();
        Gson gson = gb.create();
        return gson;
    }
      JSONObject data = new JSONObject();
      if (page == 1 && !search) {
         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));
    /**
     * 活动列表
     *
     * @param acceptData
     * @param out
     */
    private void getArticleList(AcceptData acceptData, Integer page, String key, boolean search, PrintWriter out) {
        List<ArticleVO> list = articleOfficialService.queryValid((page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE,
                key);
        if (list != null) {
            for (ArticleVO article : list) {
                String tags = article.getTags();
                if (StringUtil.isNullOrEmpty(tags)) {
                    continue;
                }
         List<SpecialVO> listSpecial = specialService.listByVersion(0, Integer.MAX_VALUE, "article_specials",
               acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()));
         if (listSpecial == null)
            listSpecial = new ArrayList<>();
                String[] arrayTags = tags.split("\\s+");
                if (arrayTags == null || arrayTags.length == 0) {
                    continue;
                }
         for (SpecialVO special : listSpecial) {
            boolean needLogin = special.isJumpLogin();
            JumpDetailV2 jumpDetail = special.getJumpDetail();
            if (jumpDetail != null) {
               jumpDetail.setNeedLogin(needLogin);
               special.setJumpDetail(jumpDetail);
            }
         }
         data.put("specials", gson.toJson(listSpecial));
      }
      data.put("count", articleOfficialService.countValid(key));
      data.put("list", gson.toJson(list));
      out.print(JsonUtil.loadTrueResult(data));
   }
                String[] arrayTagsColour = null;
                String tagsColour = article.getTagsColour();
                if (!StringUtil.isNullOrEmpty(tagsColour)) {
                    arrayTagsColour = tagsColour.split("\\s+");
                }
   /**
    * 文章搜索
    *
    * @param acceptData
    * @param page
    * @param key
    * @param out
    */
   @RequestMapping(value = "readArticle", method = RequestMethod.POST)
   public void readArticle(AcceptData acceptData, String id, PrintWriter out) {
      if (StringUtil.isNullOrEmpty(id)) {
         out.print(JsonUtil.loadFalseResult("id不能为空"));
         return;
      }
      articleOfficialService.updateReadNum(id);
      out.print(JsonUtil.loadTrueResult("操作成功"));
   }
                String color = "#FE0014";
                List<ClientTextStyleVO> labels = new ArrayList<ClientTextStyleVO>();
                for (int i = 0; i < arrayTags.length; i++) {
                    String tag = arrayTags[i];
                    if (arrayTagsColour != null && arrayTagsColour.length == arrayTags.length) {
                        color = arrayTagsColour[i];
                    }
                    ClientTextStyleVO styleVO = new ClientTextStyleVO();
                    styleVO.setColor(color);
                    styleVO.setContent(tag);
                    labels.add(styleVO);
                }
                article.setLabels(labels);
            }
        }
   /**
    * 文章搜索
    *
    * @param acceptData
    * @param page
    * @param key
    * @param out
    */
   @RequestMapping(value = "searchArticle", method = RequestMethod.POST)
   public void searchArticle(AcceptData acceptData, Integer page, String key, PrintWriter out) {
      getArticleList(acceptData, page, key, true, out);
   }
        GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
        Gson gson = gsonBuilder.create();
   /**
    * 文章搜索
    *
    * @param acceptData
    * @param page
    * @param key
    * @param out
    */
   @RequestMapping(value = "getArticleHot", method = RequestMethod.POST)
   public void getArticleHot(AcceptData acceptData, PrintWriter out) {
      JSONObject data = new JSONObject();
      data.put("words", configService.get(ConfigKeyEnum.articleHotWords.getKey()));
      out.print(JsonUtil.loadTrueResult(data));
   }
        JSONObject data = new JSONObject();
        if (page == 1 && !search) {
            List<BannerVO> banners = swiperPictureService.getByBannerCardAndVersion("article_banners",
                    acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()), acceptData.getSystem());
            if (banners == null)
                banners = new ArrayList<>();
            data.put("banners", gson.toJson(banners));
   /**
    * 2.0.7版本后调用 动态列表(适用于发圈与素材)
    *
    * @param acceptData
    * @param page
    * @param cid
    * @param subId
    * @param out
    */
   @RequestMapping(value = "getDynamicList", method = RequestMethod.POST)
   public void getDynamicListNew(AcceptData acceptData, Integer page, Long cid, String subId, PrintWriter out) {
      try {
         int type = 1;
         if (cid == TYPE_FAQUAN) {
            type = 1;
         } else if (cid == TYPE_SUCAI) {
            type = 2;
         }
         List<GoodsEvaluate> listNew = new ArrayList<GoodsEvaluate>();
            List<SpecialVO> listSpecial = specialService.listByVersion(0, Integer.MAX_VALUE, "article_specials",
                    acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()), acceptData.getSystem());
            if (listSpecial == null)
                listSpecial = new ArrayList<>();
         List<GoodsEvaluate> list = goodsEvaluateService.queryMaterialsCache((page - 1) * Constant.PAGE_SIZE,
               Constant.PAGE_SIZE, type);
            for (SpecialVO special : listSpecial) {
                boolean needLogin = special.isJumpLogin();
                JumpDetailV2 jumpDetail = special.getJumpDetail();
                if (jumpDetail != null) {
                    jumpDetail.setNeedLogin(needLogin);
                    special.setJumpDetail(jumpDetail);
                }
            }
            data.put("specials", gson.toJson(listSpecial));
        }
        data.put("count", articleOfficialService.countValid(key));
        data.put("list", gson.toJson(list));
        out.print(JsonUtil.loadTrueResult(data));
    }
         if (!VersionUtil.greaterThan_2_1_1(acceptData.getPlatform(), acceptData.getVersion())) {
            listNew.addAll(list);
         } else if (list.size() > 0) { // 活动图片不允许跳转
            for (GoodsEvaluate goodsEvaluate : list) {
               EvaluateEnum evaluateEnum = goodsEvaluate.getType();
               // 单品 活动可以一键云发单
               if (evaluateEnum == EvaluateEnum.activity || evaluateEnum == EvaluateEnum.single ) {
                  goodsEvaluate.setCloud(true);
               }
               if (evaluateEnum != EvaluateEnum.activity) {
                  listNew.add(goodsEvaluate);
                  continue;
               }
    /**
     * 文章搜索
     *
     * @param acceptData
     * @param id
     * @param out
     */
    @RequestMapping(value = "readArticle", method = RequestMethod.POST)
    public void readArticle(AcceptData acceptData, String id, PrintWriter out) {
        if (StringUtil.isNullOrEmpty(id)) {
            out.print(JsonUtil.loadFalseResult("id不能为空"));
            return;
        }
        articleOfficialService.updateReadNum(id);
        out.print(JsonUtil.loadTrueResult("操作成功"));
    }
               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);
    /**
     * 文章搜索
     *
     * @param acceptData
     * @param page
     * @param key
     * @param out
     */
    @RequestMapping(value = "searchArticle", method = RequestMethod.POST)
    public void searchArticle(AcceptData acceptData, Integer page, String key, PrintWriter out) {
        getArticleList(acceptData, page, key, true, out);
    }
               // 图片数量
               if (evaluateNew.getImgList() != null && evaluateNew.getImgList().size() > 0) {
                  int size = evaluateNew.getImgList().size();
                  List<ImgInfo> listInfoNew = new ArrayList<ImgInfo>();
    /**
     * 文章搜索
     *
     * @param acceptData
     * @param out
     */
    @RequestMapping(value = "getArticleHot", method = RequestMethod.POST)
    public void getArticleHot(AcceptData acceptData, PrintWriter out) {
        JSONObject data = new JSONObject();
        data.put("words", configService.getValue(ConfigKeyEnum.articleHotWords.getKey(), SystemInfoUtil.getSystem(acceptData)));
        out.print(JsonUtil.loadTrueResult(data));
    }
                  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);
            }
         }
    /**
     * 2.0.7版本后调用 动态列表(适用于发圈与素材)
     *
     * @param acceptData
     * @param page
     * @param cid
     * @param subId
     * @param out
     */
    @RequestMapping(value = "getDynamicList", method = RequestMethod.POST)
    public void getDynamicListNew(AcceptData acceptData, Integer page, Long cid, String subId, Long uid, PrintWriter out) {
        try {
            int type = 1;
            if (cid == TYPE_FAQUAN) {
                type = 1;
            } else if (cid == TYPE_SUCAI) {
                type = 2;
            }
            List<GoodsEvaluate> listNew = new ArrayList<>();
         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) {
                  // 判断是否是同一天
            List<GoodsEvaluate> list = goodsEvaluateService.queryMaterialsCache((page - 1) * Constant.PAGE_SIZE,
                    Constant.PAGE_SIZE, type, acceptData.getSystem());
                  Calendar calendar = Calendar.getInstance();
                  calendar.setTime(value);
                  int y1 = calendar.get(Calendar.YEAR);// 获取年份
                  int d1 = calendar.get(Calendar.DAY_OF_YEAR);// 获取年中第几天
            if (!VersionUtil.greaterThan_2_1_1(acceptData.getPlatform(), acceptData.getVersion())) {
                listNew.addAll(list);
            } else if (list.size() > 0) { // 活动图片不允许跳转
                  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);// 获取年中第几天
                // 云发单是否开启
                boolean cloudOpen = configService.isRobotCloudOpen(ConfigKeyEnum.robotCloudOpenCircle.getKey(), acceptData.getPlatform(), acceptData.getVersion(), SystemInfoUtil.getSystem(acceptData));
                if (!cloudOpen && uid != null) {
                    List<String> testUsers = configService.getTestUsers(SystemInfoUtil.getSystem(acceptData));
                    if (testUsers != null && testUsers.contains(uid + "")) {
                        cloudOpen = true;
                    }
                }
                  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) + "天前";
                  }
                for (GoodsEvaluate goodsEvaluate : list) {
                    if (goodsEvaluate.getGoods() != null) {
                        goodsEvaluate.getGoods().setCreatetime(null);
                    }
                    GoodsEvaluate evaluateNew = new GoodsEvaluate();
                    try {
                        PropertyUtils.copyProperties(evaluateNew, goodsEvaluate);
                    } catch (Exception e) {
                        e.printStackTrace();
                        continue;
                    }
                  return new JsonPrimitive(desc);
               }
                    EvaluateEnum evaluateEnum = evaluateNew.getType();
                    // 单品 活动可以一键云发单
                    if (evaluateEnum == EvaluateEnum.activity || evaluateEnum == EvaluateEnum.single) {
                        evaluateNew.setCloud(cloudOpen);
                    }
               return new JsonPrimitive("");
            }
         });
         Gson gson = gsonBuilder.create();
         long count = goodsEvaluateService.countValidMaterials(type);
                    if (evaluateEnum != EvaluateEnum.activity) {
                        listNew.add(evaluateNew);
                        continue;
                    }
         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());
                    // 跳转过渡页
                    // String jumpLink =
                    // configService.get(ConfigKeyEnum.activityDetailLink.getKey())
                    // + "?type=%s&id=%s";
                    // jumpLink = String.format(jumpLink, "circle",
                    // evaluateNew.getId());
                    // evaluateNew.setJumpLink(jumpLink);
               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);
         }
                    // 图片数量
                    if (evaluateNew.getImgList() != null && evaluateNew.getImgList().size() > 0) {
                        int size = evaluateNew.getImgList().size();
                        List<ImgInfo> listInfoNew = new ArrayList<ImgInfo>();
         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);
      }
                        for (ImgInfo imgInfo : goodsEvaluate.getImgList()) {
   }
                            if (acceptData.getSystem() == SystemEnum.yhqjx || acceptData.getSystem() == SystemEnum.hsb) {
                                imgInfo.setGoods(null);
                                imgInfo.setGoodsVO(null);
                            }
   /**
    *
    * @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, String goodsId,
         Integer goodsType, PrintWriter out) {
      try {
         if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
         }
                            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);
                }
            }
            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, acceptData.getSystem());
            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 link
     * @param out
     */
    @RequestMapping(value = "convertLink", method = RequestMethod.POST)
    public void convertLink(AcceptData acceptData, Long uid, String link, PrintWriter out) {
        if (StringUtil.isNullOrEmpty(link)) {
            out.print(JsonUtil.loadFalseResult("链接为空"));
            return;
        }
        ConvertLinkJumpVO convertLinkJumpVO = null;
        //判断result是否为淘口令
        List<String> urlList = UrlUtils.parseUrlsFromText(link);
        if (urlList.size() > 0) {
            //只处理京东/拼多多链接
            String url = urlList.get(0);
            if (JDUtil.isJDLink(url)) {
                try {
                    url = jdConvertLinkManager.convertShortUrl(url, uid, acceptData.getSystem(), uid == null ? SystemPIDInfo.PidType.coupon : SystemPIDInfo.PidType.fanli);
                } catch (Exception e) {
                    logger.warn(String.format("京东转链出错:materialId-%s",url), e);
                }
                convertLinkJumpVO = new ConvertLinkJumpVO(GoodsJumpUtil.getJDJumpInfo(url), Constant.SOURCE_TYPE_JD);
                outPrintConvertResult(convertLinkJumpVO, out);
                return;
            }
            if (PinDuoDuoUtil.isPDDLink(url)) {
                String pddGoodsId = PinDuoDuoUtil.getPDDGoodsId(url);
                String customParams = pddAuthService.getFanliCustomParams(uid);
                PDDConvertLinkResultVO convertLinkResult = null;
                try {
                    convertLinkResult = pddConvertLinkManager.convertGoods(pddGoodsId, acceptData.getSystem(), customParams, uid == null ? SystemPIDInfo.PidType.coupon : SystemPIDInfo.PidType.fanli);
                    convertLinkJumpVO = new ConvertLinkJumpVO(GoodsJumpUtil.getPDDJumpInfo(convertLinkResult), Constant.SOURCE_TYPE_PDD);
                    outPrintConvertResult(convertLinkJumpVO, out);
                    return;
                } catch (PDDGoodsException e) {
                    e.printStackTrace();
                    //商品下线
                    out.print(JsonUtil.loadFalseResult(ExceptionConstant.CODE_GOODS_OFFLINE, "商品已下线"));
                    return;
                } catch (PDDAuthException e) {
                    e.printStackTrace();
                    //拼多多未授权
                    out.print(JsonUtil.loadFalseResult(ExceptionConstant.CODE_AUTH_PDD_NO_AUTH, "拼多多尚未授权,请授权"));
                    return;
                }
            }
            return;
        }
        List<String> tokenList = TaoBaoUtil.getTokenListFromTextWithKuoHao(link);
        if (tokenList.size() > 0) {
            //还原口令
            try {
                TaoKeApiUtil.TokenConvertResult convertResult = TaoKeApiUtil.tokenConvert(tokenList.get(0));
                if (convertResult != null) {
                    String originUrl = convertResult.getOrigin_url();
                    String goodsId = convertResult.getNum_iid();
                    TaoBaoLink taoBaoLink = tbConvertLinkManager.convertGoods(goodsId, uid, acceptData.getSystem(), uid == null ? SystemPIDInfo.PidType.coupon : SystemPIDInfo.PidType.fanli);
                    convertLinkJumpVO = new ConvertLinkJumpVO(GoodsJumpUtil.getTBJumpInfo(taoBaoLink), Constant.SOURCE_TYPE_TAOBAO);
                    outPrintConvertResult(convertLinkJumpVO, out);
                    return;
                } else {
                    throw new Exception("转链失败");
                }
            } catch (Exception e) {
                e.printStackTrace();
                //输出原来的淘口令
                JSONObject root = new JSONObject();
                root.put("data", new Gson().toJson(new ConvertLinkJumpVO(null, Constant.SOURCE_TYPE_TAOBAO)));
                root.put("code", ExceptionConstant.CODE_JUMP_NO_SUPPORT);
                out.print(root.toString());
                return;
            }
        }
        out.print(JsonUtil.loadFalseResult("不支持的类型"));
    }
    private void outPrintConvertResult(ConvertLinkJumpVO vo, PrintWriter out) {
        out.print(JsonUtil.loadTrueResult(new Gson().toJson(vo)));
    }
    /**
     * 复制推荐语
     *
     * @param acceptData
     * @param uid
     * @param id
     * @param out
     */
    @RequestMapping(value = "evaluateCopyRecommend", method = RequestMethod.POST)
    public void evaluateCopyRecommend(AcceptData acceptData, Long uid, String id, PrintWriter out) {
        GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(id);
        if (goodsEvaluate == null) {
            out.print(JsonUtil.loadFalseResult("该内容已不存在"));
            return;
        }
        JSONObject data = new JSONObject();
        String result = GoodsTextUtil.decodeAppHtmlText(goodsEvaluate.getTitle());
        data.put("content", result);
        out.print(JsonUtil.loadTrueResult(data));
    }
    /**
     * @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, String goodsId,
                              Integer goodsType, PrintWriter out) {
        try {
            if (uid == null) {
                out.print(JsonUtil.loadFalseResult("用户未登录"));
                return;
            }
            if (StringUtil.isNullOrEmpty(id) || type == null) {
                out.print(JsonUtil.loadFalseResult("传递参数不能为空"));
                return;
            }
            if (type == 1 && (StringUtil.isNullOrEmpty(goodsId) || 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;
            }
            if (userFunctionsLimitService.isLimit(uid, SystemFunction.share, new Date())) {
                out.print(JsonUtil.loadFalseResult(1, "该功能限制使用"));
                return;
            }
         if (StringUtil.isNullOrEmpty(id) || type == null) {
            out.print(JsonUtil.loadFalseResult("传递参数不能为空"));
            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 (type == 1 && (StringUtil.isNullOrEmpty(goodsId) || goodsType == null)) {
            out.print(JsonUtil.loadFalseResult("商品参数不能为空"));
            return;
         }
            if (StringUtil.isNullOrEmpty(relationId)) {
                out.print(JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
                return;
            }
            String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
            if (SystemInfoUtil.hasFunctions(acceptData.getSystem(), SystemFunction.threeSale)) {
                inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
                if (StringUtil.isNullOrEmpty(inviteCode)) {
                    out.print(JsonUtil.loadFalseResult(1, "邀请码未激活"));
                    return;
                }
            }
         GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(id);
         if (goodsEvaluate == null) {
            out.print(JsonUtil.loadFalseResult("该内容已不存在"));
            return;
         }
            List<ImgInfo> imgs = goodsEvaluate.getImgList();
            if (imgs == null) {
                out.print(JsonUtil.loadFalseResult("该图片内容已不存在"));
                return;
            }
         UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
         if (user == 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 (goodsEvaluate.getType() == EvaluateEnum.single) {
                    for (ImgInfo imgInfo : imgs) {
                        if (imgInfo.getType() == ImgEnum.video)
                            continue;
         if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
            out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
            return;
         }
                        GoodsDetailVO goodsVO = imgInfo.getGoodsVO();
                        if (goodsVO == null) {
                            list.add(StringUtil.isNullOrEmpty(imgInfo.getUrlHD()) ? imgInfo.getUrl()
                                    : imgInfo.getUrlHD());
                            continue;
                        }
         UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
         String relationId = null;
         if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
               && taoBaoInfo.getRelationValid() == true)
            relationId = taoBaoInfo.getRelationId();
                        String jumpLink = getJumpLink(goodsVO, user, relationId, inviteCode, imgInfo.getUrl(), SystemInfoUtil.getSystem(acceptData));
                        if (!StringUtil.isNullOrEmpty(jumpLink)) {
                            list.add(jumpLink);
                        }
                    }
         if (StringUtil.isNullOrEmpty(relationId)) {
            out.print(JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
            return;
         }
                } else if (goodsEvaluate.getType() == EvaluateEnum.multiple) {
                    if (type == 1) {
                        for (ImgInfo imgInfo : imgs) {
                            if (imgInfo.getGoodsVO() != null)
                                if (imgInfo.getGoodsVO().getGoodsId().equalsIgnoreCase(goodsId)
                                        && imgInfo.getGoodsVO().getGoodsType() == goodsType.intValue()) {
                                    String jumpLink = getJumpLink(imgInfo.getGoodsVO(), user, relationId, inviteCode,
                                            imgInfo.getUrl(), SystemInfoUtil.getSystem(acceptData));
                                    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(), SystemInfoUtil.getSystem(acceptData));
                                if (!StringUtil.isNullOrEmpty(jumpLink)) {
                                    list.add(jumpLink);
                                }
                            }
                        }
                    }
         String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
         if (StringUtil.isNullOrEmpty(inviteCode)) {
            out.print(JsonUtil.loadFalseResult(1, "邀请码未激活"));
            return;
         }
                } 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());
                            }
                    }
                }
            }
         List<ImgInfo> imgs = goodsEvaluate.getImgList();
         if (imgs == null) {
            out.print(JsonUtil.loadFalseResult("该图片内容已不存在"));
            return;
         }
            Integer shareCount = goodsEvaluate.getShareNum();
            if (shareCount == null) {
                shareCount = 0;
            }
         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 (goodsEvaluate.getType() == EvaluateEnum.single) {
               for (ImgInfo imgInfo : imgs) {
                  if (imgInfo.getType() == ImgEnum.video)
                     continue;
            if (type == 3) {
                shareCount++;
                goodsEvaluateService.addShareNum(id);
                  GoodsDetailVO goodsVO = imgInfo.getGoodsVO();
                  if (goodsVO == null) {
                     list.add(StringUtil.isNullOrEmpty(imgInfo.getUrlHD()) ? imgInfo.getUrl()
                           : imgInfo.getUrlHD());
                     continue;
                  }
                executor.execute(new Runnable() {
                    @Override
                    public void run() { // 添加每日统计
                        dailyCountMomentsService.addShareClick();
                    }
                });
            }
                  String jumpLink = getJumpLink(goodsVO, user, relationId, inviteCode, imgInfo.getUrl());
                  if (!StringUtil.isNullOrEmpty(jumpLink)) {
                     list.add(jumpLink);
                  }
               }
            if (list.size() == 0) {
                out.print(JsonUtil.loadFalseResult("操作失败"));
                return;
            }
            } else if (goodsEvaluate.getType() == EvaluateEnum.multiple) {
               if (type == 1) {
                  for (ImgInfo imgInfo : imgs) {
                     if (imgInfo.getGoodsVO() != null)
                        if (imgInfo.getGoodsVO().getGoodsId().equalsIgnoreCase(goodsId)
                              && 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);
                        }
                     }
                  }
               }
            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;
        }
    }
            } 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());
                     }
               }
            }
         }
    private String getJumpLink(GoodsDetailVO goodsVO, UserInfo user, String relationId, String inviteCode,
                               String mainPic, SystemEnum system) {
        String jumpLink = null;
        if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
            TaoBaoLink taoBaoLink = null;
            try {
                taoBaoLink = taoBaoLinkManager.getTaoBaoLinkForShare(system, user.getId(),goodsVO.getGoodsId(),
                        relationId, null);
            } catch (TaoBaoConvertLinkException e) {
                e.printStackTrace();
            }
            jumpLink = ShareControllerV2.getERCodeContentNew(
                    configService.getValue(ConfigKeyEnum.taobaoShareQrcodeText.getKey(), system), taoBaoLink.getGoods(),
                    TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
        } else if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_JD) {
            JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsVO.getGoodsId());
            if (jdGoods == null) {
                return null;
            }
         Integer shareCount = goodsEvaluate.getShareNum();
         if (shareCount == null) {
            shareCount = 0;
         }
            String couponUrl = null;
            JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(jdGoods);
            if (couponInfo != null) {
                couponUrl = couponInfo.getLink();
            }
            String materialId = "https://item.jd.com/" + goodsVO.getGoodsId() + ".html";
            try {
                jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, null, pidManager.getPidCache(system, Constant.SOURCE_TYPE_JD, SystemPIDInfo.PidType.share),
                        user.getId() + "");
            } catch (Exception e) {
                logger.warn(String.format("京东转链出错:materialId-%s  couponUrl-%s",materialId,couponUrl), e);
            }
        } else if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_PDD) {
            PDDGoodsDetail pddGoodsDetail = PinDuoDuoApiUtil.getGoodsDetail(goodsVO.getGoodsId());
            if (pddGoodsDetail == null) {
                return null;
            }
         if (type == 3) {
            shareCount++;
            goodsEvaluateService.addShareNum(id);
            jumpLink = PinDuoDuoApiUtil.getPromotionUrl(pddGoodsDetail.getGoodsSign(), pidManager.getPidCache(system, Constant.SOURCE_TYPE_PDD, SystemPIDInfo.PidType.share), user.getId() + "");
        }
            executor.execute(new Runnable() {
               @Override
               public void run() { // 添加每日统计
                  dailyCountMomentsService.addShareClick();
               }
            });
         }
        FileUploadResult uploadResult = qrCodeService.drawDynamicGoodsPoster(jumpLink, user.getPortrait(), inviteCode,
                mainPic, goodsVO);
        if (uploadResult != null) {
            return uploadResult.getUrl();
        }
        return null;
    }
         if (list.size() == 0) {
            out.print(JsonUtil.loadFalseResult("该信息已下架"));
            return;
         }
    /**
     * 评论复制-H5
     *
     * @param acceptData
     * @param id
     * @param cid        评论id
     * @param out
     */
    @RequestMapping(value = "evaluateComment", method = RequestMethod.POST)
    public void evaluateComment(AcceptData acceptData, Long uid, String id, String cid, PrintWriter out) {
        if (StringUtil.isNullOrEmpty(id)) {
            out.print(JsonUtil.loadFalseResult("id不能为空"));
            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;
      }
   }
        GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(id);
        if (goodsEvaluate == null) {
            out.print(JsonUtil.loadFalseResult("该内容已不存在"));
            return;
        }
   private String getJumpLink(GoodsDetailVO goodsVO, UserInfo user, String relationId, String inviteCode,
         String mainPic) {
      String jumpLink = null;
      if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
         TaoBaoLink taoBaoLink = null;
         try {
            taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(user.getId(), Long.parseLong(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(Long.parseLong(goodsVO.getGoodsId()));
         if (jdGoods == null) {
            return null;
         }
        UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
        if (user == null) {
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
        }
         String couponUrl = null;
         JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(jdGoods);
         if (couponInfo != null) {
            couponUrl = couponInfo.getLink();
         }
         String materialId = "https://item.jd.com/" + goodsVO.getGoodsId() + ".html";
         jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "",
               user.getId() + "");
      } else if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_PDD) {
         jumpLink = PinDuoDuoApiUtil.getPromotionUrl(Long.parseLong(goodsVO.getGoodsId()),
               PinDuoDuoApiUtil.PID_SHARE + "", user.getId() + "");
      }
        if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
            out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
            return;
        }
      FileUploadResult uploadResult = qrCodeService.drawDynamicGoodsPoster(jumpLink, user.getPortrait(), inviteCode,
            mainPic, goodsVO);
      if (uploadResult != null) {
         return uploadResult.getUrl();
      }
      return null;
   }
        if (userFunctionsLimitService.isLimit(uid, SystemFunction.share, new Date())) {
            out.print(JsonUtil.loadFalseResult(1, "该功能限制使用"));
            return;
        }
   /**
    * 评论复制-H5
    *
    * @param acceptData
    * @param id
    * @param cid
    *            评论id
    * @param out
    */
   @RequestMapping(value = "evaluateComment", method = RequestMethod.POST)
   public void evaluateComment(AcceptData acceptData, Long uid, String id, String cid, PrintWriter out) {
      if (StringUtil.isNullOrEmpty(id)) {
         out.print(JsonUtil.loadFalseResult("id不能为空"));
         return;
      }
        UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
        String relationId = null;
        if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
                && taoBaoInfo.getRelationValid() == true)
            relationId = taoBaoInfo.getRelationId();
      GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(id);
      if (goodsEvaluate == null) {
         out.print(JsonUtil.loadFalseResult("该内容已不存在"));
         return;
      }
        if (StringUtil.isNullOrEmpty(relationId)) {
            out.print(JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
            return;
        }
      UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
      if (user == null) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
        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;
                }
            }
        }
      if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
         out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
         return;
      }
        String newText = text; // 非通用券需要验证
      UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
      String relationId = null;
      if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
            && taoBaoInfo.getRelationValid() == true)
         relationId = taoBaoInfo.getRelationId();
        //特价只需要复制文字,不需要转链
        if (acceptData.getSystem() == SystemEnum.yhqjx || acceptData.getSystem() == SystemEnum.hsb) {
            newText = GoodsTextUtil.decodeAppHtmlText(newText);
            //只复制文字
            JSONObject data = new JSONObject();
            data.put("text", newText);
            out.print(JsonUtil.loadTrueResult(data));
            return;
        }
      if (StringUtil.isNullOrEmpty(relationId)) {
         out.print(JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
         return;
      }
      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;
            }
         }
      }
        if (comment != null && (comment.getNeedSpin() == null || comment.getNeedSpin())) {
            try {
                newText = convertLinkManager.convertLinkFromText(acceptData.getSystem(), text, uid, true, true);
            } catch (ConvertLinkException e) {
                if (e.getCode() != ConvertLinkException.CODE_NONE) {
                    out.print(JsonUtil.loadFalseResult("评论生成失败"));
                    return;
                }
            } catch (Exception e) {
                LogHelper.errorDetailInfo(e);
                out.print(JsonUtil.loadFalseResult("评论生成失败"));
                return;
            }
        }
      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 = newText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n");
        }
      // 替换价格
      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 = 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", newText);
        out.print(JsonUtil.loadTrueResult(data));
      JSONObject data = new JSONObject();
      data.put("text", newText);
      out.print(JsonUtil.loadTrueResult(data));
        executor.execute(new Runnable() {
            @Override
            public void run() { // 添加每日统计
                dailyCountMomentsService.addCopyComment();
            }
        });
    }
      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;
        }
   /**
    * 评论复制-专题
    *
    * @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;
        }
      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;
        }
      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;
        }
      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();
      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;
        }
      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(acceptData.getSystem(), text, uid, true, true);
            } catch (ConvertLinkException e) {
                if (e.getCode() != ConvertLinkException.CODE_NONE) {
                    out.print(JsonUtil.loadFalseResult("评论生成失败"));
                    return;
                }
            } catch (Exception e) {
                LogHelper.errorDetailInfo(e);
                out.print(JsonUtil.loadFalseResult("评论生成失败"));
                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));
    }
      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;
        }
   @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;
            }
      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();
            }
         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();
            }
         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());
                    }
         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();
                        }
                    }
                }
            }
               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()), acceptData.getSystem());
            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;
                }
         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());
                }
            params = special.getParams();
            jumpDetail = special.getJumpDetail();
            if (!StringUtil.isNullOrEmpty(special.getPicture())) {
               imgs.add(special.getPicture());
            }
                title = special.getName();
            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());
                }
            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.getDesc();
                startTime = swiper.getStartTime();
                endTime = swiper.getEndTime();
            }
            CommonShareInfo shareInfo = commonShareInfoService.getByPidAndType(pid, type);
            if (shareInfo != null && !StringUtil.isNullOrEmpty(shareInfo.getComment())) {
                comment = shareInfo.getComment();
            }
        }
            title = swiper.getTitle();
            desc = swiper.getDesc();
            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, "");
        }
      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"));
        }
      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"));
        }
      if (endTime != null) {
         data.put("endTime", TimeUtil.getGernalTime(endTime.getTime(), "yyyy.MM.dd"));
      }
        JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
    }
      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;
        }
   /**
    * 评论复制-专题
    *
    * @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;
        }
      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;
        }
      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;
        }
      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;
        }
      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();
      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;
        }
      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(acceptData.getSystem(), text, uid, true, true);
            } catch (ConvertLinkException e) {
                if (e.getCode() != ConvertLinkException.CODE_NONE) {
                    JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
                    return;
                }
            } catch (Exception e) {
                LogHelper.errorDetailInfo(e);
                JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
                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));
    }
      JSONObject data = new JSONObject();
      data.put("text", newText);
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
   }
    /**
     * 活动分享绘图
     *
     * @param type
     * @param id
     * @param erCodeContent
     * @return String 返回类型
     * @throws
     * @Title: createActivityShareImg
     * @Description:
     */
    private String createActivityShareImg(String type, String id, String erCodeContent) {
   /**
    * 活动分享绘图
    * @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)) {
      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();
        }
      } 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();
        }
      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;
    }
      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;
        }
   /**
    * 评论复制-专题
    *
    * @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;
        }
      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;
        }
      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;
        }
      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;
        }
      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();
      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;
        }
      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(acceptData.getSystem(), text, uid, true, true);
                // 获取口令
                List<String> tokenList = TaoBaoUtil.getTokenListFromTextWithKuoHao(newText);
                if (tokenList != null && tokenList.size() > 0) {
                    // 构造分享链接
                    erCodeContent = ShareControllerV2.getTaoBaoActiivtyERCodeContentNew(
                            configService.getValue(ConfigKeyEnum.taobaoShareQrcodeText.getKey(), SystemInfoUtil.getSystem(acceptData)), 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);
                        }
                    }
                }
      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 (ConvertLinkException e) {
                if (e.getCode() != ConvertLinkException.CODE_NONE) {
                    JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
                    return;
                }
            } catch (Exception e) {
                LogHelper.errorDetailInfo(e);
                JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
                return;
            }
        }
            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));
        }
    }
      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;
        }
   /**
    * 评论复制
    *
    * @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;
        }
      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;
        }
      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;
        }
      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();
      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;
        }
      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 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(acceptData.getSystem(), text, uid, true, true);
            } catch (ConvertLinkException e) {
                if (e.getCode() != ConvertLinkException.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));
      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();
            }
        });
    }
      executor.execute(new Runnable() {
         @Override
         public void run() { // 添加每日统计
            dailyCountMomentsService.addCopyComment();
         }
      });
   }
}