admin
2020-05-20 98b1a0affd69bbe63223c21fdd2c404e8bedfccb
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java
@@ -1,14 +1,18 @@
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;
@@ -17,8 +21,11 @@
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;
@@ -67,13 +74,17 @@
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.service.manger.goods.ConvertLinkManager;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.FilePathEnum;
import com.yeshi.fanli.util.ImageUtil;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.VersionUtil;
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
import com.yeshi.fanli.util.jd.JDApiUtil;
import com.yeshi.fanli.util.jd.JDUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil;
import com.yeshi.fanli.util.taobao.DaTaoKeUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.vo.dynamic.ArticleVO;
@@ -144,11 +155,9 @@
   @Resource
   private DailyCountMomentsService dailyCountMomentsService;
   @Resource
   private CommonShareInfoService commonShareInfoService;
   @Resource(name = "taskExecutor")
   private TaskExecutor executor;
@@ -267,7 +276,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));
         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));
@@ -371,8 +380,8 @@
         listKey.add("special_channel_pdd");
      }
      List<SpecialVO> list = specialService.listByPlaceKeyHasLabel((page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE,
            listKey, platformCode, Integer.parseInt(acceptData.getVersion()));
      List<SpecialVO> list = specialService.listByPlaceKeyHasLabel((page - 1) * Constant.PAGE_SIZE,
            Constant.PAGE_SIZE, listKey, platformCode, Integer.parseInt(acceptData.getVersion()));
      long time = System.currentTimeMillis();
@@ -382,7 +391,7 @@
         if (special.getState() == 1L) {
            continue;
         }
         // 是否活动已过期
         if (special.getStartTime() != null && special.getEndTime() != null) {
            if (time < special.getStartTime().getTime() || time > special.getEndTime().getTime()) {
@@ -392,9 +401,7 @@
               special.setCountDownTime((special.getEndTime().getTime() - time) / 1000);
            }
         }
         // 设置标签
         List<SpecialLabel> listLabels = special.getListLabels();
         if (listLabels != null && !listLabels.isEmpty()) {
@@ -404,7 +411,7 @@
            }
            special.setLabels(labels);
         }
      }
      long count = specialService.countByPlaceKeyList(listKey, platformCode,
@@ -644,9 +651,12 @@
                  continue;
               }
               // 跳转过渡页
               //String jumpLink = configService.get(ConfigKeyEnum.activityDetailLink.getKey()) + "?type=%s&id=%s";
               //jumpLink = String.format(jumpLink, "circle", evaluateNew.getId());
               //evaluateNew.setJumpLink(jumpLink);
               // String jumpLink =
               // configService.get(ConfigKeyEnum.activityDetailLink.getKey())
               // + "?type=%s&id=%s";
               // jumpLink = String.format(jumpLink, "circle",
               // evaluateNew.getId());
               // evaluateNew.setJumpLink(jumpLink);
               // 图片数量
               if (evaluateNew.getImgList() != null && evaluateNew.getImgList().size() > 0) {
@@ -1009,8 +1019,6 @@
      return null;
   }
   /**
    * 评论复制-H5
    * 
@@ -1108,10 +1116,7 @@
         }
      });
   }
   /**
    * 评论复制-专题
    * 
@@ -1127,7 +1132,7 @@
      }
      CommonShareInfo shareInfo = commonShareInfoService.getByPidAndType(id, CommonShareInfoEnum.special.name());
      if (shareInfo == null ||  StringUtil.isNullOrEmpty(shareInfo.getComment())) {
      if (shareInfo == null || StringUtil.isNullOrEmpty(shareInfo.getComment())) {
         out.print(JsonUtil.loadFalseResult("该内容已不存在"));
         return;
      }
@@ -1155,7 +1160,7 @@
      }
      String text = shareInfo.getComment();
      String newText = text;
      String newText = text;
      if (shareInfo.getNeedSpin() != null && shareInfo.getNeedSpin()) {
         try {
            newText = convertLinkManager.convertLinkFromText(text, uid, true);
@@ -1175,13 +1180,10 @@
      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) {
   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;
@@ -1190,6 +1192,9 @@
      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)) { // 发圈活动
@@ -1204,7 +1209,7 @@
         if (comments != null && comments.size() > 0) {
            comment = comments.get(0).getContent();
         }
         String jumpLink = null;
         if (!StringUtil.isNullOrEmpty(evaluate.getJumpLink())) {
            jumpLink = evaluate.getJumpLink();
@@ -1213,25 +1218,26 @@
         List<ImgInfo> imgList = evaluate.getImgList();
         if (imgList != null && imgList.size() > 0) {
            for (ImgInfo imgInfo : imgList) {
               if (!StringUtil.isNullOrEmpty(imgInfo.getUrl())
               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();
                     jumpLink = imgInfo.getActivityUrl();
                  }
               }
            }
         }
         int platformCode = Constant.getPlatformCode(acceptData.getPlatform());
         jumpDetail = jumpDetailV2Service.getByTypeCache("web", platformCode, Integer.parseInt(acceptData.getVersion()));
         jumpDetail = jumpDetailV2Service.getByTypeCache("web", platformCode,
               Integer.parseInt(acceptData.getVersion()));
         JSONObject inner = new JSONObject();
         inner.put("url", jumpLink);
         params = inner.toString();
      } else {
      } else {
         long pid = Long.parseLong(id);
         if (CommonShareInfoEnum.special.name().equalsIgnoreCase(type)) {
            Special special = specialService.selectByPrimaryKey(pid);
@@ -1239,12 +1245,16 @@
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该活动已下架"));
               return;
            }
            params = special.getParams();
            jumpDetail = special.getJumpDetail();
            if (!StringUtil.isNullOrEmpty(special.getPicture())) {
               imgs.add(special.getPicture());
            }
            title=special.getName();
            desc = special.getRemark();
            startTime = special.getStartTime();
            endTime = special.getEndTime();
         } else if (CommonShareInfoEnum.banner.name().equalsIgnoreCase(type)) {
            SwiperPicture swiper = swiperPictureService.selectByPrimaryKey(pid);
            if (swiper == null) {
@@ -1256,13 +1266,17 @@
            if (!StringUtil.isNullOrEmpty(swiper.getSrc())) {
               imgs.add(swiper.getSrc());
            }
            title=swiper.getTitle();
            desc = swiper.getRemark();
            startTime = swiper.getStartTime();
            endTime = swiper.getEndTime();
         }
         CommonShareInfo shareInfo = commonShareInfoService.getByPidAndType(pid, type);
         if (shareInfo != null && !StringUtil.isNullOrEmpty(shareInfo.getComment())) {
            comment = shareInfo.getComment();
         }
      }
      if (!StringUtil.isNullOrEmpty(comment)) { // 替换淘宝官方活动
         List<String> activityIdList = convertLinkManager.getTaoBaoOfficialActivityId(comment);
         for (String st : activityIdList)
@@ -1271,15 +1285,22 @@
      JSONObject data = new JSONObject();
      data.put("title", title);
      data.put("desc", desc);
      data.put("comment", comment);
      data.put("params", params);
      data.put("jumpDetail", jumpDetail);
      data.put("imgs", imgs);
      if (startTime != null) {
         data.put("startTime", TimeUtil.getGernalTime(startTime.getTime(), "yyyy.MM.dd"));
      }
      if (endTime != null) {
         data.put("endTime", TimeUtil.getGernalTime(endTime.getTime(), "yyyy.MM.dd"));
      }
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
   }
   /**
    * 评论复制-专题
    * 
@@ -1288,18 +1309,18 @@
    * @param out
    */
   @RequestMapping(value = "copyShareComment")
   public void copyShareComment(String callback, AcceptData acceptData, Long uid, String id,
         String type, PrintWriter out) {
   public void copyShareComment(String callback, AcceptData acceptData, Long uid, String id, String type,
         PrintWriter out) {
      if (uid == null || StringUtil.isNullOrEmpty(id) || StringUtil.isNullOrEmpty(type)) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("参数不能为空"));
         return;
      }
      if ("circle".equalsIgnoreCase(type)) { // 发圈活动
         copyActivityComment(callback, acceptData, uid, id, out);
         return;
      }
      long pid = Long.parseLong(id);
      CommonShareInfo shareInfo = commonShareInfoService.getByPidAndType(pid, type);
      if (shareInfo == null || StringUtil.isNullOrEmpty(shareInfo.getComment())) {
@@ -1314,7 +1335,8 @@
      }
      if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
         JsonUtil.printMode(out, callback,
               JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
         return;
      }
@@ -1330,18 +1352,18 @@
      }
      String text = shareInfo.getComment();
      String newText = text;
      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("评论生成失败"));
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
               return;
            }
         } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
            JsonUtil.printMode(out, callback,JsonUtil.loadFalseResult("评论生成失败"));
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
            return;
         }
      }
@@ -1350,34 +1372,102 @@
      data.put("text", newText);
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
   }
   /**
    * 评论复制
    * 活动分享绘图
    * @Title: createActivityShareImg
    * @Description:
    * @param title
    * @param desc
    * @param imgUrl
    * @param erCodeContent
    * @return
    * String 返回类型
    * @throws
    */
   private String createActivityShareImg(String type, String id, String erCodeContent) {
      String title = "";
      String desc = "";
      String img = "";
      if ("circle".equalsIgnoreCase(type)) {
      } else if ("banner".equalsIgnoreCase(type)) {
         SwiperPicture picture = swiperPictureService.selectByPrimaryKey(Long.parseLong(id));
         title = picture.getTitle();
         desc = picture.getDesc();
         img = picture.getSrc();
      } else if ("special".equalsIgnoreCase(type)) {
         Special special = specialService.selectByPrimaryKey(Long.parseLong(id));
         title = special.getName();
         desc = special.getRemark();
         img = special.getPicture();
      }
      try {
         InputStream erCodeInputStream = null;
         erCodeInputStream = QRCodeUtil.getInstance(250).encode(erCodeContent);
         int[] size = new int[2];
         try {
            size = ImageUtil.getImgWidthAndHeight(img);
         } catch (MalformedURLException e) {
            e.printStackTrace();
         } catch (IOException e) {
            e.printStackTrace();
         }
         InputStream resultInputStream = ImageUtil.drawActivityShareImg(HttpUtil.getAsInputStream(img),
               (float) size[0] / size[1], title, desc, erCodeInputStream);
         if (resultInputStream != null) {
            String filePath = FilePathEnum.activityShare.getPath() + UUID.randomUUID().toString().replace("-", "")
                  + ".png";
            FileUploadResult result = COSManager.getInstance().uploadFile(resultInputStream, filePath);
            if (result != null)
               return result.getUrl();
         }
      } catch (Exception e1) {
         e1.printStackTrace();
      }
      return null;
   }
   /**
    * 评论复制-专题
    * 
    * @param acceptData
    * @param id
    * @param out
    */
   private void copyActivityComment(String callback, AcceptData acceptData, Long uid, String id, PrintWriter out) {
      if (StringUtil.isNullOrEmpty(id)) {
         JsonUtil.printMode(out, callback,JsonUtil.loadFalseResult("id不能为空"));
   @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;
      }
      GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(id);
      if (goodsEvaluate == null) {
         JsonUtil.printMode(out, callback,JsonUtil.loadFalseResult("该内容已不存在"));
      if ("circle".equalsIgnoreCase(type)) { // 发圈活动
         // copyActivityComment(callback, acceptData, uid, id, out);
         // TODO 分享发圈的图
         return;
      }
      long pid = Long.parseLong(id);
      CommonShareInfo shareInfo = commonShareInfoService.getByPidAndType(pid, type);
      if (shareInfo == null || StringUtil.isNullOrEmpty(shareInfo.getComment())) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该内容已不存在"));
         return;
      }
      UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
      if (user == null) {
         JsonUtil.printMode(out, callback,JsonUtil.loadFalseResult("用户未登录"));
         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));
         JsonUtil.printMode(out, callback,
               JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
         return;
      }
@@ -1388,7 +1478,98 @@
         relationId = taoBaoInfo.getRelationId();
      if (StringUtil.isNullOrEmpty(relationId)) {
         JsonUtil.printMode(out, callback,JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
         return;
      }
      String text = shareInfo.getComment();
      String newText = text;
      String imgUrl = null;
      if (shareInfo.getNeedSpin() != null && shareInfo.getNeedSpin()) {
         try {
            String erCodeContent = "";
            newText = convertLinkManager.convertLinkFromText(text, uid, true);
            // 获取口令
            List<String> tokenList = TaoBaoUtil.getTokenListFromTextWithKuoHao(newText);
            if (tokenList != null && tokenList.size() > 0) {
               // 构造分享链接
               erCodeContent = ShareControllerV2.getTaoBaoActiivtyERCodeContentNew(
                     configService.get(ConfigKeyEnum.taobaoShareQrcodeText.getKey()), tokenList.get(0));
            } else {
               // 获取链接
               List<String> urlList = JDUtil.getJDShortLinksFromText(newText);
               if (urlList != null && urlList.size() > 0) {
                  erCodeContent = urlList.get(0);
               } else {
                  urlList = PinDuoDuoUtil.getPDDShortLinksFromText(newText);
                  if (urlList != null && urlList.size() > 0) {
                     erCodeContent = urlList.get(0);
                  }
               }
            }
            imgUrl = createActivityShareImg(type, id, erCodeContent);
         } catch (ConvertLinkExceptionException e) {
            if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
               return;
            }
         } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
            return;
         }
      }
      if (StringUtil.isNullOrEmpty(imgUrl)) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("分享图生成失败"));
      } else {
         JSONObject data = new JSONObject();
         data.put("text", newText);
         data.put("img", imgUrl);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      }
   }
   /**
    * 评论复制
    *
    * @param acceptData
    * @param id
    * @param out
    */
   private void copyActivityComment(String callback, AcceptData acceptData, Long uid, String id, PrintWriter out) {
      if (StringUtil.isNullOrEmpty(id)) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("id不能为空"));
         return;
      }
      GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(id);
      if (goodsEvaluate == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该内容已不存在"));
         return;
      }
      UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
      if (user == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
         JsonUtil.printMode(out, callback,
               JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
         return;
      }
      UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
      String relationId = null;
      if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
            && taoBaoInfo.getRelationValid() == true)
         relationId = taoBaoInfo.getRelationId();
      if (StringUtil.isNullOrEmpty(relationId)) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
         return;
      }
@@ -1407,18 +1588,18 @@
            newText = convertLinkManager.convertLinkFromText(text, uid, true);
         } catch (ConvertLinkExceptionException e) {
            if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
               JsonUtil.printMode(out, callback,JsonUtil.loadFalseResult("评论生成失败"));
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
               return;
            }
         } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
            JsonUtil.printMode(out, callback,JsonUtil.loadFalseResult("评论生成失败"));
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
            return;
         }
      }
      JSONObject data = new JSONObject();
      data.put("text", newText);
      JsonUtil.printMode(out, callback,JsonUtil.loadTrueResult(data));
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      executor.execute(new Runnable() {
         @Override