admin
2020-02-18 ddf5db7d31af51fcf697eac0cee7dd46ff73bcc1
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java
@@ -2,6 +2,7 @@
import java.io.PrintWriter;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
@@ -12,7 +13,9 @@
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.entity.FileUploadResult;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@@ -20,27 +23,49 @@
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.yeshi.fanli.dto.jd.JDCouponInfo;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.activity.ActivityUser;
import com.yeshi.fanli.entity.bus.clazz.GoodsClass;
import com.yeshi.fanli.entity.bus.homemodule.Special;
import com.yeshi.fanli.entity.bus.homemodule.SpecialLabel;
import com.yeshi.fanli.entity.bus.homemodule.SwiperPicture;
import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.common.JumpDetailV2;
import com.yeshi.fanli.entity.dynamic.CommentInfo;
import com.yeshi.fanli.entity.dynamic.CommentInfo.CommentInfoEnum;
import com.yeshi.fanli.entity.dynamic.DynamicInfo;
import com.yeshi.fanli.entity.dynamic.GoodsEvaluate;
import com.yeshi.fanli.entity.dynamic.GoodsPicture;
import com.yeshi.fanli.entity.dynamic.ImgInfo;
import com.yeshi.fanli.entity.dynamic.ImgInfo.ImgEnum;
import com.yeshi.fanli.entity.dynamic.SimpleGoods;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
import com.yeshi.fanli.service.inter.config.ConfigService;
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.TaoBaoGoodsBriefService;
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.user.QrCodeService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.util.AESUtil;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
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.taobao.DaTaoKeUtil;
import com.yeshi.fanli.vo.dynamic.ArticleVO;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
import net.sf.json.JSONObject;
@@ -79,6 +104,20 @@
   @Resource
   private ConfigService configService;
   
   @Resource
   private GoodsEvaluateService goodsEvaluateService;
   @Resource
   private UserInfoService userInfoService;
   @Resource
   private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
   @Resource
   private JDGoodsCacheUtil jdGoodsCacheUtil;
   @Resource
   private QrCodeService qrCodeService;
   /**
    * 查询顶部分类
@@ -292,9 +331,6 @@
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    * 时间处理
    * 
@@ -368,7 +404,8 @@
    * @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);
      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();
@@ -408,7 +445,8 @@
      
      JSONObject data = new JSONObject();
      if (page == 1 && !search) {
         List<SwiperPicture> banners = swiperPictureService.getByBannerCardAndVersion("article_banners",acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()));
         List<SwiperPicture> banners = swiperPictureService.getByBannerCardAndVersion("article_banners",
               acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()));
         if (banners == null)
            banners = new ArrayList<>();
         data.put("banners", gson.toJson(banners));
@@ -435,6 +473,7 @@
   
   /**
    * 文章搜索
    *
    * @param acceptData
    * @param page
    * @param key
@@ -450,9 +489,9 @@
      out.print(JsonUtil.loadTrueResult("操作成功"));
   }
   
   /**
    * 文章搜索
    *
    * @param acceptData
    * @param page
    * @param key
@@ -463,9 +502,9 @@
      getArticleList(acceptData, page, key, true, out);
   }
   
   /**
    * 文章搜索
    *
    * @param acceptData
    * @param page
    * @param key
@@ -483,4 +522,394 @@
      out.print(configService.get("test"));
   }
   /**
    * 发圈列表
    *
    * @param acceptData
    * @param page
    * @param out
    */
   @RequestMapping(value = "evaluate", method = RequestMethod.POST)
   public void evaluate(AcceptData acceptData, Integer page, PrintWriter out) {
      long cid = 1;
      long subId = 1;
      List<DynamicInfo> listd = dynamicInfoService.queryV2(2, 74, (page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE,
            cid, subId);
      if (listd == null) {
         listd = new ArrayList<DynamicInfo>();
      }
      List<GoodsEvaluate> list = new ArrayList<>();
      for (DynamicInfo info : listd) {
         GoodsEvaluate goodsEvaluate = new GoodsEvaluate();
         goodsEvaluate.setId(info.getId());
         ActivityUser user = info.getUser();
         user.setTag("烧烤达人");
         goodsEvaluate.setUser(user);
         goodsEvaluate.setTitle(info.getTitle().get(0).getContent());
         goodsEvaluate.setShareNum(info.getShareCount());
         goodsEvaluate.setPublishTime(info.getCreateTime());
         goodsEvaluate.setLineNum(2);
         List<GoodsPicture> imgs = info.getImgs();
         List<ImgInfo> imgList = new ArrayList<>();
         int i = 0;
         for (GoodsPicture goodsPicture : imgs) {
            ImgInfo imgInfo = new ImgInfo();
            GoodsDetailVO goodsVO = goodsPicture.getGoodsVO();
            imgInfo.setH(100);
            imgInfo.setW(100);
            if (goodsVO != null) {
               imgInfo.setType(ImgEnum.goods);
               SimpleGoods simpleGoods = new SimpleGoods();
               simpleGoods.setPrice(goodsVO.getZkPrice());
               simpleGoods.setAmount(new BigDecimal(115));
               simpleGoods.setGoodsId(goodsVO.getGoodsId());
               simpleGoods.setGoodsType(1);
               simpleGoods.setState(1);
               imgInfo.setGoods(simpleGoods);
               goodsEvaluate.setGoods(goodsVO);
            } else {
               imgInfo.setType(ImgEnum.img);
            }
            imgInfo.setLarge(false);
            imgInfo.setUrl(goodsPicture.getUrl());
             imgInfo.setUrlHD(goodsPicture.getUrl());
//            if (i == 0) {
//               imgInfo.setUrl(goodsPicture.getUrl());
//               imgInfo.setType(ImgEnum.video);
//               imgInfo.setLarge(true);
//               imgInfo.setVideoUrl(
//                     "http://pgcvideo.cdn.xiaodutv.com/754825344_367171606_2020010816001720200108174342.mp4?Cache-Control=max-age%3D8640000&responseExpires=Fri%2C+17+Apr+2020+18%3A11%3A55+GMT&xcode=0b0f3962eddaf66837d4af61a22c57bae3a5055540c75232&time=1579077845&_=1578992502888");
//            } else {
//               imgInfo.setType(ImgEnum.img);
//               imgInfo.setLarge(true);
//               imgInfo.setUrl(goodsPicture.getUrl());
//            }
//            i++;
            imgList.add(imgInfo);
         }
         goodsEvaluate.setImgList(imgList);
         CommentInfo commentInfo = new CommentInfo();
         commentInfo.setId(info.getId() + "09");
         commentInfo.setContent("😆7.9元🉐1只儿童牙刷!!安妮贝拉卡通版儿童牙⭕PBT材质,毛刷细腻柔⭕外观卡通人物造型设计");
         commentInfo.setType(CommentInfoEnum.goodsCoupon);
//         ClientTextStyleVO text1 = new ClientTextStyleVO();
//         text1.setContent("猫超");
//         text1.setColor("#1D9B31");
//
//         ClientTextStyleVO text2 = new ClientTextStyleVO();
//         text2.setContent("满150减15");
//         text2.setColor("#E5005C");
//         List<ClientTextStyleVO> tagList = new ArrayList<>();
//         tagList.add(text1);
//         tagList.add(text2);
//         commentInfo.setTagList(tagList);
//         commentInfo.setTagDesc("除生鲜及部分酒水除生鲜及除生鲜及");
         CommentInfo commentInfo2 = new CommentInfo();
         commentInfo2.setContent("😆7.9元🉐1只儿童牙刷!!安妮贝拉卡通版儿童牙⭕PBT材质,毛刷细腻柔⭕外观卡通人物造型设计");
         commentInfo2.setType(CommentInfoEnum.goodsCoupon);
         ClientTextStyleVO text1 = new ClientTextStyleVO();
         text1.setContent("猫超");
         text1.setColor("#1D9B31");
         ClientTextStyleVO text2 = new ClientTextStyleVO();
         text2.setContent("满150减15");
         text2.setColor("#E5005C");
         List<ClientTextStyleVO> tagList = new ArrayList<>();
         tagList.add(text1);
         tagList.add(text2);
         commentInfo2.setTagList(tagList);
         commentInfo2.setTagDesc("除生鲜及部分酒水除生鲜及除生鲜及");
         commentInfo.setTagUrl("http://www.baidu.com");
         List<CommentInfo> commentList = new ArrayList<>();
         commentList.add(commentInfo);
         commentList.add(commentInfo2);
         goodsEvaluate.setComments(commentList);
         list.add(goodsEvaluate);
      }
//      List<GoodsEvaluate> list = goodsEvaluateService.queryValidEvaluateCache((page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE);
//      if (list == null) {
//         list = new ArrayList<>();
//      }
      GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
      gsonBuilder.registerTypeAdapter(CommentInfoEnum.class, new JsonSerializer<CommentInfoEnum>() {
         @Override
         public JsonElement serialize(CommentInfoEnum value, Type theType, JsonSerializationContext context) {
            if (value == null) {
               return new JsonPrimitive(1);
            } else {
               return new JsonPrimitive(value.getDesc());
            }
         }
      }).registerTypeAdapter(ImgEnum.class, new JsonSerializer<ImgEnum>() {
         @Override
         public JsonElement serialize(ImgEnum value, Type theType, JsonSerializationContext context) {
            if (value == null) {
               return new JsonPrimitive("");
            } else {
               return new JsonPrimitive(value.getVlaue());
            }
         }
      }).registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
         @Override
         public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
            String desc = "";
            if (value != null) {
               // 判断是否是同一天
               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 = dynamicInfoService.count(cid, subId); // goodsEvaluateService.countValid()
      JSONObject data = new JSONObject();
      data.put("count", count);
      data.put("list", gson.toJson(list));
      out.print(JsonUtil.loadTrueResult(data));
   }
   @RequestMapping(value = "evaluateShare", method = RequestMethod.POST)
   public void evaluateShare(AcceptData acceptData, Long uid, String id, Integer type, Long goodsId, Integer goodsType, PrintWriter out) {
      if (uid == null) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (StringUtil.isNullOrEmpty(id) || type == null) {
         out.print(JsonUtil.loadFalseResult("传递参数不能为空"));
         return;
      }
      if (type == 1 && (goodsId == null || goodsType == null)) {
         out.print(JsonUtil.loadFalseResult("商品参数不能为空"));
         return;
      }
      DynamicInfo dynamicInfo = dynamicInfoService.getById(id);
      if (dynamicInfo == null) {
         out.print(JsonUtil.loadFalseResult("该内容已不存在"));
         return;
      }
      UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
      if (user == null) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
         out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
         return;
      }
      UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
      String relationId = null;
      if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
            && taoBaoInfo.getRelationValid() == true)
         relationId = taoBaoInfo.getRelationId();
      if (StringUtil.isNullOrEmpty(relationId)) {
         out.print(JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
         return;
      }
      List<GoodsPicture> imgs = dynamicInfo.getImgs();
      if (imgs == null) {
         out.print(JsonUtil.loadFalseResult("该图片内容已不存在"));
         return;
      }
      int total = 0;
      for (GoodsPicture goodsPicture : imgs) {
         GoodsDetailVO goodsVO = goodsPicture.getGoodsVO();
         if (goodsVO != null) {
            total ++;
         }
      }
      List<String> list = new ArrayList<>();
      for (GoodsPicture goodsPicture : imgs) {
         GoodsDetailVO goodsVO = goodsPicture.getGoodsVO();
         if (goodsVO == null && total <= 1) {
            list.add(goodsPicture.getUrl());
            continue;
         }
         if (type == 1) {
            if (goodsVO.getGoodsId().longValue() == goodsId.longValue() && goodsVO.getGoodsType() == goodsType.intValue()) {
               String jumpLink = getJumpLink(goodsVO, user);
               if (!StringUtil.isNullOrEmpty(jumpLink)) {
                  list.add(jumpLink);
               }
            }
         } else {
            String jumpLink = getJumpLink(goodsVO, user);
            if (!StringUtil.isNullOrEmpty(jumpLink)) {
               list.add(jumpLink);
            }
         }
      }
      Integer shareCount = dynamicInfo.getShareCount();
      if (shareCount == null) {
         shareCount = 0;
      }
      if (type == 3) {
         shareCount++;
         dynamicInfoService.updateShareCount(dynamicInfo);
      }
      if (list.size() == 0) {
         out.print(JsonUtil.loadFalseResult("该信息已下架"));
         return;
      }
      JSONObject data = new JSONObject();
      data.put("count", shareCount);
      data.put("list", list);
      out.print(JsonUtil.loadTrueResult(data));
   }
   private String getJumpLink(GoodsDetailVO goodsVO, UserInfo user) {
      String jumpLink = null;
      if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
         String url = String.format("http://%s%s?uid=%s&id=%s&appType=flq", configService.getH5Host(),
               Constant.systemCommonConfig.getShareGoodsPagePath(),
               AESUtil.encrypt(user.getId() + "", Constant.UIDAESKEY), goodsVO.getGoodsId() + "");
         String shortLink = HttpUtil.getShortLink(url);
         if (!StringUtil.isNullOrEmpty(shortLink)) {
            url = shortLink;
         }
      } else if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_JD) {
         JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsVO.getGoodsId());
         if (jdGoods == null ) {
            return null;
         }
         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(goodsVO.getGoodsId(), PinDuoDuoApiUtil.PID_SHARE + "", user.getId() + "");
      }
      FileUploadResult uploadResult = qrCodeService.drawGoodsPoster(jumpLink, user.getPortrait(), goodsVO);
      if (uploadResult != null) {
         return uploadResult.getUrl();
      }
      return null;
   }
   /**
    *  评论复制
    * @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;
      }
      DynamicInfo dynamicInfo = dynamicInfoService.getById(id);
      if (dynamicInfo == null) {
         out.print(JsonUtil.loadFalseResult("该内容已不存在"));
         return;
      }
      UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
      if (user == null) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
         out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
         return;
      }
      UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
      String relationId = null;
      if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
            && taoBaoInfo.getRelationValid() == true)
         relationId = taoBaoInfo.getRelationId();
      if (StringUtil.isNullOrEmpty(relationId)) {
         out.print(JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
         return;
      }
      JSONObject data = new JSONObject();
      data.put("text", "安妮贝拉卡通版儿拉卡通版拉卡通版拉卡通版拉卡通版拉卡通版拉卡通版拉卡通版");
      out.print(JsonUtil.loadTrueResult(data));
   }
}